diff --git a/lib/db/photo_db.dart b/lib/db/photo_db.dart index 25c3e7b30..1d4920f9a 100644 --- a/lib/db/photo_db.dart +++ b/lib/db/photo_db.dart @@ -105,6 +105,17 @@ class FileDB { return _convertToFiles(results); } + Future> getAllVideos() async { + final db = await instance.database; + final results = await db.query( + table, + where: + '$columnLocalId IS NOT NULL AND $columnFileType = 1 AND $columnIsDeleted = 0', + orderBy: '$columnCreateTimestamp DESC', + ); + return _convertToFiles(results); + } + Future> getAllInFolder(int folderId) async { final db = await instance.database; final results = await db.query( diff --git a/lib/models/filters/video_file_filter.dart b/lib/models/filters/video_file_filter.dart new file mode 100644 index 000000000..e63c08da1 --- /dev/null +++ b/lib/models/filters/video_file_filter.dart @@ -0,0 +1,10 @@ +import 'package:photos/models/file.dart'; +import 'package:photos/models/file_type.dart'; +import 'package:photos/models/filters/gallery_items_filter.dart'; + +class VideoFileFilter implements GalleryItemsFilter { + @override + bool shouldInclude(File file) { + return file.fileType == FileType.video; + } +} diff --git a/lib/ui/device_folder_page.dart b/lib/ui/device_folder_page.dart index c89ccfb7d..fefc2cfa1 100644 --- a/lib/ui/device_folder_page.dart +++ b/lib/ui/device_folder_page.dart @@ -59,6 +59,9 @@ class _DeviceFolderPageState extends State { } List _getFilteredFiles(List unfilteredFiles) { + if (widget.folder.filter == null) { + return unfilteredFiles; + } final List filteredFiles = List(); for (File file in unfilteredFiles) { if (widget.folder.filter.shouldInclude(file)) { diff --git a/lib/ui/device_folders_gallery_widget.dart b/lib/ui/device_folders_gallery_widget.dart index fb0ff040e..3ba38e1d4 100644 --- a/lib/ui/device_folders_gallery_widget.dart +++ b/lib/ui/device_folders_gallery_widget.dart @@ -9,6 +9,7 @@ import 'package:photos/favorite_files_repository.dart'; import 'package:photos/models/device_folder.dart'; import 'package:photos/models/filters/favorite_items_filter.dart'; import 'package:photos/models/filters/folder_name_filter.dart'; +import 'package:photos/models/filters/video_file_filter.dart'; import 'package:photos/ui/device_folder_page.dart'; import 'package:photos/ui/loading_widget.dart'; import 'package:photos/ui/thumbnail_widget.dart'; @@ -84,6 +85,10 @@ class _DeviceFolderGalleryWidgetState extends State { FavoriteFilesRepository.instance.getLiked().toList()); folders.insert(0, DeviceFolder("Favorites", file, FavoriteItemsFilter())); } + final videos = await FileDB.instance.getAllVideos(); + if (videos.length > 0) { + folders.insert(0, DeviceFolder("Videos", videos[0], VideoFileFilter())); + } return folders; }