From 187f238e020825d2632871b0bdd680e2979cf5b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leon=20B=C3=B6sche?= Date: Wed, 14 Jan 2026 17:56:09 +0100 Subject: [PATCH] Add video file detection in file explorer; open video files in video viewer on tap --- b0esche_cloud/lib/pages/file_explorer.dart | 52 ++++++++-------------- 1 file changed, 18 insertions(+), 34 deletions(-) diff --git a/b0esche_cloud/lib/pages/file_explorer.dart b/b0esche_cloud/lib/pages/file_explorer.dart index f2ce77c..377d137 100644 --- a/b0esche_cloud/lib/pages/file_explorer.dart +++ b/b0esche_cloud/lib/pages/file_explorer.dart @@ -870,16 +870,33 @@ class _FileExplorerState extends State { 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().add(NavigateToFolder(file.path)); + } else if (isVideo) { + // Open video files in video viewer + final videoUrl = await getIt() + .getDownloadUrl(widget.orgId, file.path); + _showVideoViewer( + file.name, + '${getIt().baseUrl}$videoUrl', + ); } else { if (file.id == null || file.id!.isEmpty) { ScaffoldMessenger.of(context).showSnackBar( @@ -1392,39 +1409,6 @@ class _FileExplorerState extends State { 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() - .getDownloadUrl(widget.orgId, file.path); - _showVideoViewer( - file.name, - '${getIt().baseUrl}$videoUrl', - ); - }, - child: _buildFileItem( - file, - isSelected, - isHovered, - false, - ), - ); - } - if (file.type == FileType.folder) { return DragTarget( builder: (context, candidate, rejected) {