diff --git a/lib/models/gallery_type.dart b/lib/models/gallery_type.dart index 4611bda6e..59adc9c23 100644 --- a/lib/models/gallery_type.dart +++ b/lib/models/gallery_type.dart @@ -1,6 +1,7 @@ enum GalleryType { homepage, archive, + uncategorized, hidden, favorite, trash, @@ -23,6 +24,7 @@ extension GalleyTypeExtension on GalleryType { return true; case GalleryType.hidden: + case GalleryType.uncategorized: case GalleryType.trash: case GalleryType.sharedCollection: return false; @@ -32,6 +34,7 @@ extension GalleyTypeExtension on GalleryType { bool showMoveToAlbum() { switch (this) { case GalleryType.ownedCollection: + case GalleryType.uncategorized: return true; case GalleryType.hidden: @@ -55,6 +58,7 @@ extension GalleyTypeExtension on GalleryType { case GalleryType.homepage: case GalleryType.favorite: case GalleryType.localFolder: + case GalleryType.uncategorized: return true; case GalleryType.trash: case GalleryType.archive: @@ -70,6 +74,7 @@ extension GalleyTypeExtension on GalleryType { case GalleryType.searchResults: case GalleryType.homepage: case GalleryType.favorite: + case GalleryType.uncategorized: case GalleryType.archive: case GalleryType.hidden: case GalleryType.localFolder: @@ -87,6 +92,7 @@ extension GalleyTypeExtension on GalleryType { case GalleryType.homepage: case GalleryType.favorite: case GalleryType.archive: + case GalleryType.uncategorized: return true; case GalleryType.hidden: case GalleryType.localFolder: @@ -102,6 +108,7 @@ extension GalleyTypeExtension on GalleryType { case GalleryType.sharedCollection: return true; case GalleryType.hidden: + case GalleryType.uncategorized: case GalleryType.favorite: case GalleryType.searchResults: case GalleryType.homepage: @@ -116,6 +123,7 @@ extension GalleyTypeExtension on GalleryType { switch (this) { case GalleryType.ownedCollection: case GalleryType.homepage: + case GalleryType.uncategorized: return true; case GalleryType.hidden: @@ -139,6 +147,7 @@ extension GalleyTypeExtension on GalleryType { case GalleryType.homepage: case GalleryType.searchResults: case GalleryType.archive: + case GalleryType.uncategorized: return true; case GalleryType.hidden: @@ -159,6 +168,7 @@ extension GalleyTypeExtension on GalleryType { case GalleryType.ownedCollection: case GalleryType.homepage: case GalleryType.searchResults: + case GalleryType.uncategorized: return true; case GalleryType.hidden: diff --git a/lib/ui/viewer/gallery/uncategorized_page.dart b/lib/ui/viewer/gallery/uncategorized_page.dart new file mode 100644 index 000000000..d2da570ae --- /dev/null +++ b/lib/ui/viewer/gallery/uncategorized_page.dart @@ -0,0 +1,86 @@ +import 'package:collection/collection.dart' show IterableExtension; +import 'package:flutter/material.dart'; +import 'package:photos/core/configuration.dart'; +import 'package:photos/core/event_bus.dart'; +import 'package:photos/db/files_db.dart'; +import 'package:photos/events/files_updated_event.dart'; +import 'package:photos/models/gallery_type.dart'; +import 'package:photos/models/magic_metadata.dart'; +import 'package:photos/models/selected_files.dart'; +import 'package:photos/services/collections_service.dart'; +import 'package:photos/ui/viewer/actions/file_selection_overlay_bar.dart'; +import 'package:photos/ui/viewer/gallery/gallery.dart'; +import 'package:photos/ui/viewer/gallery/gallery_app_bar_widget.dart'; + +class ArchivePage extends StatelessWidget { + final String tagPrefix; + final GalleryType appBarType; + final GalleryType overlayType; + final _selectedFiles = SelectedFiles(); + + ArchivePage({ + this.tagPrefix = "archived_page", + this.appBarType = GalleryType.archive, + this.overlayType = GalleryType.archive, + Key? key, + }) : super(key: key); + + @override + Widget build(Object context) { + final Set hiddenCollectionIDs = + CollectionsService.instance.getHiddenCollections(); + final gallery = Gallery( + asyncLoader: (creationStartTime, creationEndTime, {limit, asc}) { + return FilesDB.instance.getAllPendingOrUploadedFiles( + creationStartTime, + creationEndTime, + Configuration.instance.getUserID()!, + visibility: visibilityArchive, + limit: limit, + asc: asc, + ignoredCollectionIDs: hiddenCollectionIDs, + ); + }, + reloadEvent: Bus.instance.on().where( + (event) => + event.updatedFiles.firstWhereOrNull( + (element) => element.uploadedFileID != null, + ) != + null, + ), + removalEventTypes: const {EventType.unarchived}, + forceReloadEvents: [ + Bus.instance.on().where( + (event) => + event.updatedFiles.firstWhereOrNull( + (element) => element.uploadedFileID != null, + ) != + null, + ), + ], + tagPrefix: tagPrefix, + selectedFiles: _selectedFiles, + initialFiles: null, + ); + return Scaffold( + appBar: PreferredSize( + preferredSize: const Size.fromHeight(50.0), + child: GalleryAppBarWidget( + appBarType, + "Archive", + _selectedFiles, + ), + ), + body: Stack( + alignment: Alignment.bottomCenter, + children: [ + gallery, + FileSelectionOverlayBar( + overlayType, + _selectedFiles, + ), + ], + ), + ); + } +}