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 {
final List<ImageEntry> _rawEntries;
Map<dynamic, List<ImageEntry>> sections = Map();
GroupFactor groupFactor = GroupFactor.date;
GroupFactor groupFactor = GroupFactor.month;
SortFactor sortFactor = SortFactor.date;
List<String> sortedAlbums = List.unmodifiable(Iterable.empty());
List<String> 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 }

View file

@ -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;

View file

@ -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());

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 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());

View file

@ -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 }

View file

@ -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);
}

View file

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