diff --git a/lib/model/image_collection.dart b/lib/model/image_collection.dart index edaba3442..b393ec801 100644 --- a/lib/model/image_collection.dart +++ b/lib/model/image_collection.dart @@ -9,7 +9,7 @@ import 'package:path/path.dart'; class ImageCollection with ChangeNotifier { final List _rawEntries; Map> sections = Map(); - GroupFactor groupFactor = GroupFactor.date; + GroupFactor groupFactor = GroupFactor.month; SortFactor sortFactor = SortFactor.date; List sortedAlbums = List.unmodifiable(Iterable.empty()); List sortedTags = List.unmodifiable(Iterable.empty()); @@ -50,9 +50,12 @@ class ImageCollection with ChangeNotifier { case GroupFactor.album: sections = groupBy(_rawEntries, (entry) => entry.directory); break; - case GroupFactor.date: + case GroupFactor.month: sections = groupBy(_rawEntries, (entry) => entry.monthTaken); break; + case GroupFactor.day: + sections = groupBy(_rawEntries, (entry) => entry.dayTaken); + break; } break; case SortFactor.size: @@ -183,4 +186,4 @@ class ImageCollection with ChangeNotifier { enum SortFactor { date, size } -enum GroupFactor { album, date } +enum GroupFactor { album, month, day } diff --git a/lib/model/image_entry.dart b/lib/model/image_entry.dart index 068e9964a..42b19408e 100644 --- a/lib/model/image_entry.dart +++ b/lib/model/image_entry.dart @@ -125,6 +125,11 @@ class ImageEntry { return d == null ? null : DateTime(d.year, d.month); } + DateTime get dayTaken { + final d = bestDate; + return d == null ? null : DateTime(d.year, d.month, d.day); + } + String get durationText => formatDuration(Duration(milliseconds: durationMillis)); bool get hasGps => isCatalogued && catalogMetadata.latitude != null; diff --git a/lib/model/settings.dart b/lib/model/settings.dart index 0090ce950..de0479dbd 100644 --- a/lib/model/settings.dart +++ b/lib/model/settings.dart @@ -51,7 +51,7 @@ class Settings { set catalogTimeZone(String newValue) => setAndNotify(catalogTimeZoneKey, newValue); - GroupFactor get collectionGroupFactor => getEnumOrDefault(collectionGroupFactorKey, GroupFactor.date, GroupFactor.values); + GroupFactor get collectionGroupFactor => getEnumOrDefault(collectionGroupFactorKey, GroupFactor.month, GroupFactor.values); set collectionGroupFactor(GroupFactor newValue) => setAndNotify(collectionGroupFactorKey, newValue.toString()); diff --git a/lib/utils/time_utils.dart b/lib/utils/time_utils.dart index e8481e5b6..a1f58e669 100644 --- a/lib/utils/time_utils.dart +++ b/lib/utils/time_utils.dart @@ -6,6 +6,8 @@ bool isAtSameDayAs(DateTime d1, DateTime d2) => isAtSameMonthAs(d1, d2) && d1.da bool isToday(DateTime d) => isAtSameDayAs(d, DateTime.now()); +bool isYesterday(DateTime d) => isAtSameDayAs(d, DateTime.now().subtract(Duration(days: 1))); + bool isThisMonth(DateTime d) => isAtSameMonthAs(d, DateTime.now()); bool isThisYear(DateTime d) => isAtSameYearAs(d, DateTime.now()); diff --git a/lib/widgets/album/all_collection_page.dart b/lib/widgets/album/all_collection_page.dart index 03ac3b30c..56f7e5ce3 100644 --- a/lib/widgets/album/all_collection_page.dart +++ b/lib/widgets/album/all_collection_page.dart @@ -42,8 +42,12 @@ class AllCollectionPage extends StatelessWidget { child: MenuRow(text: 'Group by album', checked: collection.groupFactor == GroupFactor.album), ), PopupMenuItem( - value: AlbumAction.groupByDate, - child: MenuRow(text: 'Group by date', checked: collection.groupFactor == GroupFactor.date), + value: AlbumAction.groupByMonth, + child: MenuRow(text: 'Group by month', checked: collection.groupFactor == GroupFactor.month), + ), + PopupMenuItem( + value: AlbumAction.groupByDay, + child: MenuRow(text: 'Group by day', checked: collection.groupFactor == GroupFactor.day), ), PopupMenuDivider(), ], @@ -69,9 +73,13 @@ class AllCollectionPage extends StatelessWidget { settings.collectionGroupFactor = GroupFactor.album; collection.group(GroupFactor.album); break; - case AlbumAction.groupByDate: - settings.collectionGroupFactor = GroupFactor.date; - collection.group(GroupFactor.date); + case AlbumAction.groupByMonth: + settings.collectionGroupFactor = GroupFactor.month; + collection.group(GroupFactor.month); + break; + case AlbumAction.groupByDay: + settings.collectionGroupFactor = GroupFactor.day; + collection.group(GroupFactor.day); break; case AlbumAction.sortByDate: settings.collectionSortFactor = SortFactor.date; @@ -96,4 +104,4 @@ class AllCollectionPage extends StatelessWidget { } } -enum AlbumAction { debug, groupByAlbum, groupByDate, sortByDate, sortBySize } +enum AlbumAction { debug, groupByAlbum, groupByMonth, groupByDay, sortByDate, sortBySize } diff --git a/lib/widgets/album/sections.dart b/lib/widgets/album/sections.dart index 2af26582d..fad86a943 100644 --- a/lib/widgets/album/sections.dart +++ b/lib/widgets/album/sections.dart @@ -15,6 +15,7 @@ class DaySectionHeader extends StatelessWidget { static formatDate(DateTime date) { if (isToday(date)) return 'Today'; + if (isYesterday(date)) return 'Yesterday'; if (isThisYear(date)) return md.format(date); return ymd.format(date); } diff --git a/lib/widgets/album/thumbnail_collection.dart b/lib/widgets/album/thumbnail_collection.dart index 433996418..e114d8949 100644 --- a/lib/widgets/album/thumbnail_collection.dart +++ b/lib/widgets/album/thumbnail_collection.dart @@ -184,9 +184,12 @@ class SectionHeader extends StatelessWidget { title: collection.getUniqueAlbumName(sectionKey, sections.keys.cast()), ); break; - case GroupFactor.date: + case GroupFactor.month: header = MonthSectionHeader(date: sectionKey); break; + case GroupFactor.day: + header = DaySectionHeader(date: sectionKey); + break; } } return IgnorePointer(