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 {
|
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 }
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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());
|
||||||
|
|
||||||
|
|
|
@ -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());
|
||||||
|
|
|
@ -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 }
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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(
|
||||||
|
|
Loading…
Reference in a new issue