group by day

This commit is contained in:
Thibault Deckers 2019-11-03 21:15:48 +09:00
parent a09ffffacc
commit 993f189377
7 changed files with 33 additions and 11 deletions

View file

@ -9,7 +9,7 @@ import 'package:path/path.dart';
class ImageCollection with ChangeNotifier { class ImageCollection with ChangeNotifier {
final List<ImageEntry> _rawEntries; final List<ImageEntry> _rawEntries;
Map<dynamic, List<ImageEntry>> sections = Map(); Map<dynamic, List<ImageEntry>> sections = Map();
GroupFactor groupFactor = GroupFactor.date; GroupFactor groupFactor = GroupFactor.month;
SortFactor sortFactor = SortFactor.date; SortFactor sortFactor = SortFactor.date;
List<String> sortedAlbums = List.unmodifiable(Iterable.empty()); List<String> sortedAlbums = List.unmodifiable(Iterable.empty());
List<String> sortedTags = List.unmodifiable(Iterable.empty()); List<String> sortedTags = List.unmodifiable(Iterable.empty());
@ -50,9 +50,12 @@ class ImageCollection with ChangeNotifier {
case GroupFactor.album: case GroupFactor.album:
sections = groupBy(_rawEntries, (entry) => entry.directory); sections = groupBy(_rawEntries, (entry) => entry.directory);
break; break;
case GroupFactor.date: case GroupFactor.month:
sections = groupBy(_rawEntries, (entry) => entry.monthTaken); sections = groupBy(_rawEntries, (entry) => entry.monthTaken);
break; break;
case GroupFactor.day:
sections = groupBy(_rawEntries, (entry) => entry.dayTaken);
break;
} }
break; break;
case SortFactor.size: case SortFactor.size:
@ -183,4 +186,4 @@ class ImageCollection with ChangeNotifier {
enum SortFactor { date, size } enum SortFactor { date, size }
enum GroupFactor { album, date } enum GroupFactor { album, month, day }

View file

@ -125,6 +125,11 @@ class ImageEntry {
return d == null ? null : DateTime(d.year, d.month); 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)); String get durationText => formatDuration(Duration(milliseconds: durationMillis));
bool get hasGps => isCatalogued && catalogMetadata.latitude != null; bool get hasGps => isCatalogued && catalogMetadata.latitude != null;

View file

@ -51,7 +51,7 @@ class Settings {
set catalogTimeZone(String newValue) => setAndNotify(catalogTimeZoneKey, newValue); 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()); set collectionGroupFactor(GroupFactor newValue) => setAndNotify(collectionGroupFactorKey, newValue.toString());

View file

@ -6,6 +6,8 @@ bool isAtSameDayAs(DateTime d1, DateTime d2) => isAtSameMonthAs(d1, d2) && d1.da
bool isToday(DateTime d) => isAtSameDayAs(d, DateTime.now()); 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 isThisMonth(DateTime d) => isAtSameMonthAs(d, DateTime.now());
bool isThisYear(DateTime d) => isAtSameYearAs(d, DateTime.now()); bool isThisYear(DateTime d) => isAtSameYearAs(d, DateTime.now());

View file

@ -42,8 +42,12 @@ class AllCollectionPage extends StatelessWidget {
child: MenuRow(text: 'Group by album', checked: collection.groupFactor == GroupFactor.album), child: MenuRow(text: 'Group by album', checked: collection.groupFactor == GroupFactor.album),
), ),
PopupMenuItem( PopupMenuItem(
value: AlbumAction.groupByDate, value: AlbumAction.groupByMonth,
child: MenuRow(text: 'Group by date', checked: collection.groupFactor == GroupFactor.date), 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(), PopupMenuDivider(),
], ],
@ -69,9 +73,13 @@ class AllCollectionPage extends StatelessWidget {
settings.collectionGroupFactor = GroupFactor.album; settings.collectionGroupFactor = GroupFactor.album;
collection.group(GroupFactor.album); collection.group(GroupFactor.album);
break; break;
case AlbumAction.groupByDate: case AlbumAction.groupByMonth:
settings.collectionGroupFactor = GroupFactor.date; settings.collectionGroupFactor = GroupFactor.month;
collection.group(GroupFactor.date); collection.group(GroupFactor.month);
break;
case AlbumAction.groupByDay:
settings.collectionGroupFactor = GroupFactor.day;
collection.group(GroupFactor.day);
break; break;
case AlbumAction.sortByDate: case AlbumAction.sortByDate:
settings.collectionSortFactor = SortFactor.date; 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 }

View file

@ -15,6 +15,7 @@ class DaySectionHeader extends StatelessWidget {
static formatDate(DateTime date) { static formatDate(DateTime date) {
if (isToday(date)) return 'Today'; if (isToday(date)) return 'Today';
if (isYesterday(date)) return 'Yesterday';
if (isThisYear(date)) return md.format(date); if (isThisYear(date)) return md.format(date);
return ymd.format(date); return ymd.format(date);
} }

View file

@ -184,9 +184,12 @@ class SectionHeader extends StatelessWidget {
title: collection.getUniqueAlbumName(sectionKey, sections.keys.cast<String>()), title: collection.getUniqueAlbumName(sectionKey, sections.keys.cast<String>()),
); );
break; break;
case GroupFactor.date: case GroupFactor.month:
header = MonthSectionHeader(date: sectionKey); header = MonthSectionHeader(date: sectionKey);
break; break;
case GroupFactor.day:
header = DaySectionHeader(date: sectionKey);
break;
} }
} }
return IgnorePointer( return IgnorePointer(