Add video file detection in file explorer; open video files in video viewer on tap

This commit is contained in:
Leon Bösche
2026-01-14 17:56:09 +01:00
parent 70b5b1a4f3
commit 187f238e02

View File

@@ -870,16 +870,33 @@ class _FileExplorerState extends State<FileExplorer> {
bool isHovered,
bool isDraggedOver,
) {
// Video file detection
final videoExtensions = [
'.mp4', '.webm', '.mov', '.avi', '.mkv', '.flv', '.wmv', '.m4v',
'.ogv', '.3gp', '.ts', '.mpg', '.mpeg',
];
final isVideo = videoExtensions.any(
(ext) => file.name.toLowerCase().endsWith(ext),
);
return MouseRegion(
onEnter: (_) => setState(() => _hovered[file.path] = true),
onExit: (_) => setState(() => _hovered[file.path] = false),
child: GestureDetector(
onTap: () {
onTap: () async {
setState(() {
_selectedFilePath = file.path;
});
if (file.type == FileType.folder) {
context.read<FileBrowserBloc>().add(NavigateToFolder(file.path));
} else if (isVideo) {
// Open video files in video viewer
final videoUrl = await getIt<FileService>()
.getDownloadUrl(widget.orgId, file.path);
_showVideoViewer(
file.name,
'${getIt<FileService>().baseUrl}$videoUrl',
);
} else {
if (file.id == null || file.id!.isEmpty) {
ScaffoldMessenger.of(context).showSnackBar(
@@ -1392,39 +1409,6 @@ class _FileExplorerState extends State<FileExplorer> {
final isSelected = _selectedFilePath == file.path;
final isHovered = _hovered[file.path] ?? false;
// Video file detection
final videoExtensions = [
'.mp4',
'.webm',
'.mov',
'.avi',
'.mkv',
'.flv',
'.wmv',
'.m4v',
];
final isVideo = videoExtensions.any(
(ext) => file.name.toLowerCase().endsWith(ext),
);
if (isVideo) {
return GestureDetector(
onTap: () async {
final videoUrl = await getIt<FileService>()
.getDownloadUrl(widget.orgId, file.path);
_showVideoViewer(
file.name,
'${getIt<FileService>().baseUrl}$videoUrl',
);
},
child: _buildFileItem(
file,
isSelected,
isHovered,
false,
),
);
}
if (file.type == FileType.folder) {
return DragTarget<FileItem>(
builder: (context, candidate, rejected) {