Create GallerySections model for holding data about a gallery

This commit is contained in:
ashilkn
2025-06-20 09:43:30 +05:30
parent 1b77d0eca6
commit 3244686058
2 changed files with 62 additions and 0 deletions

View File

@@ -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<EnteFile> allFiles;
final GroupType groupType;
final bool sortOrderAsc;
GallerySections({
required this.allFiles,
required this.groupType,
this.sortOrderAsc = true,
});
late final List<String> _groupIDs;
late final Map<String, List<EnteFile>> _groupIDToFilesMap;
late Map<String, GroupHeaderData> _groupIdToheaderDataMap;
List<String> get groupIDs => _groupIDs;
Map<String, List<EnteFile>> get groupIDToFilesMap => _groupIDToFilesMap;
Map<String, GroupHeaderData> get groupIdToheaderDataMap =>
_groupIdToheaderDataMap;
final _uuid = const Uuid();
void init() {
List<EnteFile> 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<EnteFile> 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,
});
}

View File

@@ -379,6 +379,7 @@ class GalleryState extends State<Gallery> {
sortOrderAsc: _sortOrderAsc,
inSelectionMode: widget.inSelectionMode,
type: widget.groupType,
// Replace this with the new gallery and use `_allGalleryFiles`
child: MultipleGroupsGalleryView(
itemScroller: _itemScroller,
groupedFiles: currentGroupedFiles,