Add video file detection in file explorer; open video files in video viewer on tap
This commit is contained in:
@@ -870,16 +870,33 @@ class _FileExplorerState extends State<FileExplorer> {
|
|||||||
bool isHovered,
|
bool isHovered,
|
||||||
bool isDraggedOver,
|
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(
|
return MouseRegion(
|
||||||
onEnter: (_) => setState(() => _hovered[file.path] = true),
|
onEnter: (_) => setState(() => _hovered[file.path] = true),
|
||||||
onExit: (_) => setState(() => _hovered[file.path] = false),
|
onExit: (_) => setState(() => _hovered[file.path] = false),
|
||||||
child: GestureDetector(
|
child: GestureDetector(
|
||||||
onTap: () {
|
onTap: () async {
|
||||||
setState(() {
|
setState(() {
|
||||||
_selectedFilePath = file.path;
|
_selectedFilePath = file.path;
|
||||||
});
|
});
|
||||||
if (file.type == FileType.folder) {
|
if (file.type == FileType.folder) {
|
||||||
context.read<FileBrowserBloc>().add(NavigateToFolder(file.path));
|
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 {
|
} else {
|
||||||
if (file.id == null || file.id!.isEmpty) {
|
if (file.id == null || file.id!.isEmpty) {
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
@@ -1392,39 +1409,6 @@ class _FileExplorerState extends State<FileExplorer> {
|
|||||||
final isSelected = _selectedFilePath == file.path;
|
final isSelected = _selectedFilePath == file.path;
|
||||||
final isHovered = _hovered[file.path] ?? false;
|
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) {
|
if (file.type == FileType.folder) {
|
||||||
return DragTarget<FileItem>(
|
return DragTarget<FileItem>(
|
||||||
builder: (context, candidate, rejected) {
|
builder: (context, candidate, rejected) {
|
||||||
|
|||||||
Reference in New Issue
Block a user