From 46928d8458dea51c92cc8343daee12b0ae6470a0 Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Sun, 15 Sep 2019 20:31:06 +0900 Subject: [PATCH] fixed album order in drawer --- lib/model/image_collection.dart | 26 ++++++++++++++----- lib/model/settings.dart | 2 +- lib/widgets/album/all_collection_drawer.dart | 5 ++-- lib/widgets/album/thumbnail_collection.dart | 2 +- .../fullscreen/info/metadata_section.dart | 2 +- 5 files changed, 25 insertions(+), 12 deletions(-) diff --git a/lib/model/image_collection.dart b/lib/model/image_collection.dart index 8366c0501..edaba3442 100644 --- a/lib/model/image_collection.dart +++ b/lib/model/image_collection.dart @@ -11,7 +11,8 @@ class ImageCollection with ChangeNotifier { Map> sections = Map(); GroupFactor groupFactor = GroupFactor.date; SortFactor sortFactor = SortFactor.date; - Set albums = Set(), tags = Set(); + List sortedAlbums = List.unmodifiable(Iterable.empty()); + List sortedTags = List.unmodifiable(Iterable.empty()); ImageCollection({ @required List entries, @@ -25,9 +26,9 @@ class ImageCollection with ChangeNotifier { int get videoCount => _rawEntries.where((entry) => entry.isVideo).length; - int get albumCount => albums.length; + int get albumCount => sortedAlbums.length; - int get tagCount => tags.length; + int get tagCount => sortedTags.length; List get sortedEntries => List.unmodifiable(sections.entries.expand((e) => e.value)); @@ -83,9 +84,22 @@ class ImageCollection with ChangeNotifier { return success; } - updateAlbums() => albums = _rawEntries.map((entry) => entry.directory).toSet(); + updateAlbums() { + Set albums = _rawEntries.map((entry) => entry.directory).toSet(); + List sorted = albums.toList() + ..sort((a, b) { + final ua = getUniqueAlbumName(a, albums); + final ub = getUniqueAlbumName(b, albums); + return compareAsciiUpperCase(ua, ub); + }); + sortedAlbums = List.unmodifiable(sorted); + } - updateTags() => tags = _rawEntries.expand((entry) => entry.xmpSubjects).toSet(); + updateTags() { + Set tags = _rawEntries.expand((entry) => entry.xmpSubjects).toSet(); + List sorted = tags.toList()..sort(compareAsciiUpperCase); + sortedTags = List.unmodifiable(sorted); + } onMetadataChanged() { // metadata dates impact sorting and grouping @@ -155,7 +169,7 @@ class ImageCollection with ChangeNotifier { ); } - String getUniqueAlbumName(String album, List albums) { + String getUniqueAlbumName(String album, Iterable albums) { final otherAlbums = albums.where((item) => item != album); final parts = album.split(separator); int partCount = 0; diff --git a/lib/model/settings.dart b/lib/model/settings.dart index 45a80d8c4..0090ce950 100644 --- a/lib/model/settings.dart +++ b/lib/model/settings.dart @@ -63,7 +63,7 @@ class Settings { bool getBoolOrDefault(String key, bool defaultValue) => prefs.getKeys().contains(key) ? prefs.getBool(key) : defaultValue; - T getEnumOrDefault(String key, T defaultValue, List values) { + T getEnumOrDefault(String key, T defaultValue, Iterable values) { final valueString = prefs.getString(key); for (T element in values) { if (element.toString() == valueString) { diff --git a/lib/widgets/album/all_collection_drawer.dart b/lib/widgets/album/all_collection_drawer.dart index 3eb1df3a3..f9aad2aff 100644 --- a/lib/widgets/album/all_collection_drawer.dart +++ b/lib/widgets/album/all_collection_drawer.dart @@ -2,7 +2,6 @@ import 'package:aves/model/image_collection.dart'; import 'package:aves/model/image_entry.dart'; import 'package:aves/widgets/album/filtered_collection_page.dart'; import 'package:aves/widgets/common/icons.dart'; -import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -13,8 +12,8 @@ class AllCollectionDrawer extends StatelessWidget { @override Widget build(BuildContext context) { - final albums = collection.albums.toList()..sort(compareAsciiUpperCaseNatural); - final tags = collection.tags.toList()..sort(compareAsciiUpperCaseNatural); + final albums = collection.sortedAlbums; + final tags = collection.sortedTags; return Drawer( child: ListView( padding: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom), diff --git a/lib/widgets/album/thumbnail_collection.dart b/lib/widgets/album/thumbnail_collection.dart index c1c82737c..800d62831 100644 --- a/lib/widgets/album/thumbnail_collection.dart +++ b/lib/widgets/album/thumbnail_collection.dart @@ -118,7 +118,7 @@ class SectionSliver extends StatelessWidget { } header = SectionHeader( leading: albumIcon, - title: collection.getUniqueAlbumName(sectionKey, sections.keys.toList()), + title: collection.getUniqueAlbumName(sectionKey, sections.keys.cast()), ); break; case GroupFactor.date: diff --git a/lib/widgets/fullscreen/info/metadata_section.dart b/lib/widgets/fullscreen/info/metadata_section.dart index abbab4b44..e843e08f4 100644 --- a/lib/widgets/fullscreen/info/metadata_section.dart +++ b/lib/widgets/fullscreen/info/metadata_section.dart @@ -81,7 +81,7 @@ class MetadataSectionState extends State { ); } - Widget getMetadataColumn(Map metadataMap, List directoryNames) { + Widget getMetadataColumn(Map metadataMap, Iterable directoryNames) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [