From 3244686058361c02e5bd188bd00dc8ca34e9f0a1 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Fri, 20 Jun 2025 09:43:30 +0530 Subject: [PATCH] Create GallerySections model for holding data about a gallery --- .../lib/models/gallery/gallery_sections.dart | 61 +++++++++++++++++++ mobile/lib/ui/viewer/gallery/gallery.dart | 1 + 2 files changed, 62 insertions(+) create mode 100644 mobile/lib/models/gallery/gallery_sections.dart diff --git a/mobile/lib/models/gallery/gallery_sections.dart b/mobile/lib/models/gallery/gallery_sections.dart new file mode 100644 index 0000000000..e17e295001 --- /dev/null +++ b/mobile/lib/models/gallery/gallery_sections.dart @@ -0,0 +1,61 @@ +import "dart:core"; + +import "package:photos/models/file/file.dart"; +import "package:photos/ui/viewer/gallery/component/group/type.dart"; +import "package:uuid/uuid.dart"; + +class GallerySections { + final List allFiles; + final GroupType groupType; + final bool sortOrderAsc; + GallerySections({ + required this.allFiles, + required this.groupType, + this.sortOrderAsc = true, + }); + + late final List _groupIDs; + late final Map> _groupIDToFilesMap; + late Map _groupIdToheaderDataMap; + + List get groupIDs => _groupIDs; + Map> get groupIDToFilesMap => _groupIDToFilesMap; + Map get groupIdToheaderDataMap => + _groupIdToheaderDataMap; + + final _uuid = const Uuid(); + + void init() { + List dailyFiles = []; + for (int index = 0; index < allFiles.length; index++) { + if (index > 0 && + groupType.areFromSameGroup(allFiles[index - 1], allFiles[index])) { + _createNewGroup(dailyFiles); + dailyFiles = []; + } + dailyFiles.add(allFiles[index]); + } + if (dailyFiles.isNotEmpty) { + _createNewGroup(dailyFiles); + } + } + + void _createNewGroup( + List dailyFiles, + ) { + final uuid = _uuid.v1(); + _groupIDs.add(uuid); + _groupIDToFilesMap[uuid] = dailyFiles; + _groupIdToheaderDataMap[uuid] = GroupHeaderData( + title: dailyFiles.first.creationTime!.toString(), + ); + } +} + +class GroupHeaderData { + final String title; + + GroupHeaderData({ + required this.title, + }); +} diff --git a/mobile/lib/ui/viewer/gallery/gallery.dart b/mobile/lib/ui/viewer/gallery/gallery.dart index 66da74f969..ea33d1b466 100644 --- a/mobile/lib/ui/viewer/gallery/gallery.dart +++ b/mobile/lib/ui/viewer/gallery/gallery.dart @@ -379,6 +379,7 @@ class GalleryState extends State { sortOrderAsc: _sortOrderAsc, inSelectionMode: widget.inSelectionMode, type: widget.groupType, + // Replace this with the new gallery and use `_allGalleryFiles` child: MultipleGroupsGalleryView( itemScroller: _itemScroller, groupedFiles: currentGroupedFiles,