group by day
This commit is contained in:
parent
a09ffffacc
commit
993f189377
7 changed files with 33 additions and 11 deletions
|
@ -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 }
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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());
|
||||
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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 }
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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(
|
||||
|
|
Loading…
Reference in a new issue