#1513 albums: sort by path

This commit is contained in:
Thibault Deckers 2025-04-15 21:55:55 +02:00
parent 90d0256bf7
commit af4ca96da8
62 changed files with 189 additions and 4 deletions

View file

@ -7,6 +7,7 @@ All notable changes to this project will be documented in this file.
### Added ### Added
- Search: format filters - Search: format filters
- Albums: sort by path
### Changed ### Changed

View file

@ -758,6 +758,7 @@
"sortByAlbumFileName": "By album & file name", "sortByAlbumFileName": "By album & file name",
"sortByRating": "By rating", "sortByRating": "By rating",
"sortByDuration": "By duration", "sortByDuration": "By duration",
"sortByPath": "By path",
"sortOrderNewestFirst": "Newest first", "sortOrderNewestFirst": "Newest first",
"sortOrderOldestFirst": "Oldest first", "sortOrderOldestFirst": "Oldest first",

View file

@ -2715,6 +2715,12 @@ abstract class AppLocalizations {
/// **'By duration'** /// **'By duration'**
String get sortByDuration; String get sortByDuration;
/// No description provided for @sortByPath.
///
/// In en, this message translates to:
/// **'By path'**
String get sortByPath;
/// No description provided for @sortOrderNewestFirst. /// No description provided for @sortOrderNewestFirst.
/// ///
/// In en, this message translates to: /// In en, this message translates to:

View file

@ -1451,6 +1451,9 @@ class AppLocalizationsAr extends AppLocalizations {
@override @override
String get sortByDuration => 'حسب المدة'; String get sortByDuration => 'حسب المدة';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'الأحدث أولاً'; String get sortOrderNewestFirst => 'الأحدث أولاً';

View file

@ -1499,6 +1499,9 @@ class AppLocalizationsAz extends AppLocalizations {
@override @override
String get sortByDuration => 'By duration'; String get sortByDuration => 'By duration';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Newest first'; String get sortOrderNewestFirst => 'Newest first';

View file

@ -1469,6 +1469,9 @@ class AppLocalizationsBe extends AppLocalizations {
@override @override
String get sortByDuration => 'Па працягласці'; String get sortByDuration => 'Па працягласці';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Спачатку самае новае'; String get sortOrderNewestFirst => 'Спачатку самае новае';

View file

@ -1503,6 +1503,9 @@ class AppLocalizationsBg extends AppLocalizations {
@override @override
String get sortByDuration => 'По продължителност'; String get sortByDuration => 'По продължителност';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Първо най-новите'; String get sortOrderNewestFirst => 'Първо най-новите';

View file

@ -1499,6 +1499,9 @@ class AppLocalizationsBn extends AppLocalizations {
@override @override
String get sortByDuration => 'By duration'; String get sortByDuration => 'By duration';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Newest first'; String get sortOrderNewestFirst => 'Newest first';

View file

@ -1451,6 +1451,9 @@ class AppLocalizationsCa extends AppLocalizations {
@override @override
String get sortByDuration => 'Per durada'; String get sortByDuration => 'Per durada';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Primer el més nou'; String get sortOrderNewestFirst => 'Primer el més nou';

View file

@ -1488,6 +1488,9 @@ class AppLocalizationsCkb extends AppLocalizations {
@override @override
String get sortByDuration => 'By duration'; String get sortByDuration => 'By duration';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Newest first'; String get sortOrderNewestFirst => 'Newest first';

View file

@ -1464,6 +1464,9 @@ class AppLocalizationsCs extends AppLocalizations {
@override @override
String get sortByDuration => 'Podle trvání'; String get sortByDuration => 'Podle trvání';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Od nejnovějšího'; String get sortOrderNewestFirst => 'Od nejnovějšího';

View file

@ -1499,6 +1499,9 @@ class AppLocalizationsDa extends AppLocalizations {
@override @override
String get sortByDuration => 'Efter varighed'; String get sortByDuration => 'Efter varighed';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Nyeste først'; String get sortOrderNewestFirst => 'Nyeste først';

View file

@ -1496,6 +1496,9 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String get sortByDuration => 'Nach Dauer'; String get sortByDuration => 'Nach Dauer';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Neueste zuerst'; String get sortOrderNewestFirst => 'Neueste zuerst';

View file

@ -1496,6 +1496,9 @@ class AppLocalizationsEl extends AppLocalizations {
@override @override
String get sortByDuration => 'By duration'; String get sortByDuration => 'By duration';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Τα πιο πρόσφατα πρώτα'; String get sortOrderNewestFirst => 'Τα πιο πρόσφατα πρώτα';

View file

@ -1499,6 +1499,9 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String get sortByDuration => 'By duration'; String get sortByDuration => 'By duration';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Newest first'; String get sortOrderNewestFirst => 'Newest first';

View file

@ -1496,6 +1496,9 @@ class AppLocalizationsEs extends AppLocalizations {
@override @override
String get sortByDuration => 'Por duración'; String get sortByDuration => 'Por duración';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'El más nuevo primero'; String get sortOrderNewestFirst => 'El más nuevo primero';

View file

@ -1499,6 +1499,9 @@ class AppLocalizationsEt extends AppLocalizations {
@override @override
String get sortByDuration => 'Kestuse järgi'; String get sortByDuration => 'Kestuse järgi';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Esmalt uuemad'; String get sortOrderNewestFirst => 'Esmalt uuemad';

View file

@ -1451,6 +1451,9 @@ class AppLocalizationsEu extends AppLocalizations {
@override @override
String get sortByDuration => 'Iraupenaren arabera'; String get sortByDuration => 'Iraupenaren arabera';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Berriena lehenengo'; String get sortOrderNewestFirst => 'Berriena lehenengo';

View file

@ -1448,6 +1448,9 @@ class AppLocalizationsFa extends AppLocalizations {
@override @override
String get sortByDuration => 'By duration'; String get sortByDuration => 'By duration';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'اول جدیدترین'; String get sortOrderNewestFirst => 'اول جدیدترین';

View file

@ -1493,6 +1493,9 @@ class AppLocalizationsFi extends AppLocalizations {
@override @override
String get sortByDuration => 'By duration'; String get sortByDuration => 'By duration';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Newest first'; String get sortOrderNewestFirst => 'Newest first';

View file

@ -1499,6 +1499,9 @@ class AppLocalizationsFr extends AppLocalizations {
@override @override
String get sortByDuration => 'par durée'; String get sortByDuration => 'par durée';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Plus récents dabord'; String get sortOrderNewestFirst => 'Plus récents dabord';

View file

@ -1496,6 +1496,9 @@ class AppLocalizationsGl extends AppLocalizations {
@override @override
String get sortByDuration => 'Por duración'; String get sortByDuration => 'Por duración';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Novos primeiro'; String get sortOrderNewestFirst => 'Novos primeiro';

View file

@ -1499,6 +1499,9 @@ class AppLocalizationsHe extends AppLocalizations {
@override @override
String get sortByDuration => 'By duration'; String get sortByDuration => 'By duration';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Newest first'; String get sortOrderNewestFirst => 'Newest first';

View file

@ -1490,6 +1490,9 @@ class AppLocalizationsHi extends AppLocalizations {
@override @override
String get sortByDuration => 'समय के अनुसार'; String get sortByDuration => 'समय के अनुसार';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'नए पहले'; String get sortOrderNewestFirst => 'नए पहले';

View file

@ -1446,6 +1446,9 @@ class AppLocalizationsHu extends AppLocalizations {
@override @override
String get sortByDuration => 'Hossz szerint'; String get sortByDuration => 'Hossz szerint';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Legújabb legelöl'; String get sortOrderNewestFirst => 'Legújabb legelöl';

View file

@ -1480,6 +1480,9 @@ class AppLocalizationsId extends AppLocalizations {
@override @override
String get sortByDuration => 'Berdasarkan durasi'; String get sortByDuration => 'Berdasarkan durasi';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Terbaru pertama'; String get sortOrderNewestFirst => 'Terbaru pertama';

View file

@ -1451,6 +1451,9 @@ class AppLocalizationsIs extends AppLocalizations {
@override @override
String get sortByDuration => 'Eftir tímalengd'; String get sortByDuration => 'Eftir tímalengd';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Nýjast fyrst'; String get sortOrderNewestFirst => 'Nýjast fyrst';

View file

@ -1496,6 +1496,9 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get sortByDuration => 'Per durata'; String get sortByDuration => 'Per durata';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Dal più nuovo'; String get sortOrderNewestFirst => 'Dal più nuovo';

View file

@ -1480,6 +1480,9 @@ class AppLocalizationsJa extends AppLocalizations {
@override @override
String get sortByDuration => '期間順'; String get sortByDuration => '期間順';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => '新しいものから表示'; String get sortOrderNewestFirst => '新しいものから表示';

View file

@ -1499,6 +1499,9 @@ class AppLocalizationsKn extends AppLocalizations {
@override @override
String get sortByDuration => 'ಅವಧಿಯಂತೆ'; String get sortByDuration => 'ಅವಧಿಯಂತೆ';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'ಹೊಸದು ಮೊದಲು'; String get sortOrderNewestFirst => 'ಹೊಸದು ಮೊದಲು';

View file

@ -1478,6 +1478,9 @@ class AppLocalizationsKo extends AppLocalizations {
@override @override
String get sortByDuration => '길이'; String get sortByDuration => '길이';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => '최근 날짜순'; String get sortOrderNewestFirst => '최근 날짜순';

View file

@ -1458,6 +1458,9 @@ class AppLocalizationsLt extends AppLocalizations {
@override @override
String get sortByDuration => 'Pagal trukmę'; String get sortByDuration => 'Pagal trukmę';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Naujausi viršuje'; String get sortOrderNewestFirst => 'Naujausi viršuje';

View file

@ -1499,6 +1499,9 @@ class AppLocalizationsMl extends AppLocalizations {
@override @override
String get sortByDuration => 'By duration'; String get sortByDuration => 'By duration';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Newest first'; String get sortOrderNewestFirst => 'Newest first';

View file

@ -1460,6 +1460,9 @@ class AppLocalizationsMy extends AppLocalizations {
@override @override
String get sortByDuration => 'By duration'; String get sortByDuration => 'By duration';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'အသစ်ဆုံးက ထိပ်ဆုံး'; String get sortOrderNewestFirst => 'အသစ်ဆုံးက ထိပ်ဆုံး';

View file

@ -1451,6 +1451,9 @@ class AppLocalizationsNb extends AppLocalizations {
@override @override
String get sortByDuration => 'By duration'; String get sortByDuration => 'By duration';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Nyeste først'; String get sortOrderNewestFirst => 'Nyeste først';

View file

@ -1499,6 +1499,9 @@ class AppLocalizationsNe extends AppLocalizations {
@override @override
String get sortByDuration => 'By duration'; String get sortByDuration => 'By duration';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Newest first'; String get sortOrderNewestFirst => 'Newest first';

View file

@ -1498,6 +1498,9 @@ class AppLocalizationsNl extends AppLocalizations {
@override @override
String get sortByDuration => 'Op lengte'; String get sortByDuration => 'Op lengte';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Nieuwste eerst'; String get sortOrderNewestFirst => 'Nieuwste eerst';

View file

@ -1440,6 +1440,9 @@ class AppLocalizationsNn extends AppLocalizations {
@override @override
String get sortByDuration => 'By duration'; String get sortByDuration => 'By duration';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Nyaste først'; String get sortOrderNewestFirst => 'Nyaste først';

View file

@ -1499,6 +1499,9 @@ class AppLocalizationsOr extends AppLocalizations {
@override @override
String get sortByDuration => 'By duration'; String get sortByDuration => 'By duration';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Newest first'; String get sortOrderNewestFirst => 'Newest first';

View file

@ -1461,6 +1461,9 @@ class AppLocalizationsPl extends AppLocalizations {
@override @override
String get sortByDuration => 'Według czasu trwania'; String get sortByDuration => 'Według czasu trwania';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Najpierw najnowsze'; String get sortOrderNewestFirst => 'Najpierw najnowsze';

View file

@ -1496,6 +1496,9 @@ class AppLocalizationsPt extends AppLocalizations {
@override @override
String get sortByDuration => 'Por duração'; String get sortByDuration => 'Por duração';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Os mais novos primeiro'; String get sortOrderNewestFirst => 'Os mais novos primeiro';

View file

@ -1451,6 +1451,9 @@ class AppLocalizationsRo extends AppLocalizations {
@override @override
String get sortByDuration => 'După durată'; String get sortByDuration => 'După durată';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Cele mai noi mai întâi'; String get sortOrderNewestFirst => 'Cele mai noi mai întâi';

View file

@ -1513,6 +1513,9 @@ class AppLocalizationsRu extends AppLocalizations {
@override @override
String get sortByDuration => 'По продолжительности'; String get sortByDuration => 'По продолжительности';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Сначала новые'; String get sortOrderNewestFirst => 'Сначала новые';

View file

@ -1499,6 +1499,9 @@ class AppLocalizationsSat extends AppLocalizations {
@override @override
String get sortByDuration => 'By duration'; String get sortByDuration => 'By duration';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Newest first'; String get sortOrderNewestFirst => 'Newest first';

View file

@ -1456,6 +1456,9 @@ class AppLocalizationsSk extends AppLocalizations {
@override @override
String get sortByDuration => 'Trvanie'; String get sortByDuration => 'Trvanie';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Najskôr najnovšie'; String get sortOrderNewestFirst => 'Najskôr najnovšie';

View file

@ -1499,6 +1499,9 @@ class AppLocalizationsSl extends AppLocalizations {
@override @override
String get sortByDuration => 'By duration'; String get sortByDuration => 'By duration';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Newest first'; String get sortOrderNewestFirst => 'Newest first';

View file

@ -1499,6 +1499,9 @@ class AppLocalizationsSr extends AppLocalizations {
@override @override
String get sortByDuration => 'By duration'; String get sortByDuration => 'By duration';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Newest first'; String get sortOrderNewestFirst => 'Newest first';

View file

@ -1479,6 +1479,9 @@ class AppLocalizationsSv extends AppLocalizations {
@override @override
String get sortByDuration => 'Efter spellängd'; String get sortByDuration => 'Efter spellängd';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Nyast först'; String get sortOrderNewestFirst => 'Nyast först';

View file

@ -1499,6 +1499,9 @@ class AppLocalizationsTa extends AppLocalizations {
@override @override
String get sortByDuration => 'காலப்படி'; String get sortByDuration => 'காலப்படி';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'முதலில் புதியது'; String get sortOrderNewestFirst => 'முதலில் புதியது';

View file

@ -1487,6 +1487,9 @@ class AppLocalizationsTh extends AppLocalizations {
@override @override
String get sortByDuration => 'By duration'; String get sortByDuration => 'By duration';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Newest first'; String get sortOrderNewestFirst => 'Newest first';

View file

@ -1491,6 +1491,9 @@ class AppLocalizationsTr extends AppLocalizations {
@override @override
String get sortByDuration => 'Süreye göre'; String get sortByDuration => 'Süreye göre';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Önce en yeni'; String get sortOrderNewestFirst => 'Önce en yeni';

View file

@ -1470,6 +1470,9 @@ class AppLocalizationsUk extends AppLocalizations {
@override @override
String get sortByDuration => 'За тривалістю'; String get sortByDuration => 'За тривалістю';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Найновіші перші'; String get sortOrderNewestFirst => 'Найновіші перші';

View file

@ -1446,6 +1446,9 @@ class AppLocalizationsVi extends AppLocalizations {
@override @override
String get sortByDuration => 'Theo thời lượng'; String get sortByDuration => 'Theo thời lượng';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => 'Mới nhất trước'; String get sortOrderNewestFirst => 'Mới nhất trước';

View file

@ -1480,6 +1480,9 @@ class AppLocalizationsZh extends AppLocalizations {
@override @override
String get sortByDuration => '按时长'; String get sortByDuration => '按时长';
@override
String get sortByPath => 'By path';
@override @override
String get sortOrderNewestFirst => '降序'; String get sortOrderNewestFirst => '降序';

View file

@ -64,7 +64,7 @@ class PathFilter extends CollectionFilter {
} }
@override @override
Widget? iconBuilder(BuildContext context, double size, {bool allowGenericIcon = true}) => Icon(AIcons.explorer, size: size); Widget? iconBuilder(BuildContext context, double size, {bool allowGenericIcon = true}) => Icon(AIcons.path, size: size);
@override @override
String get category => type; String get category => type;

View file

@ -43,6 +43,7 @@ class AIcons {
static const newTier = Symbols.fiber_new; static const newTier = Symbols.fiber_new;
static const opacity = Symbols.opacity; static const opacity = Symbols.opacity;
static const palette = Symbols.palette; static const palette = Symbols.palette;
static const path = Symbols.account_tree;
static const privacy = Symbols.shield_person; static const privacy = Symbols.shield_person;
static const rating = Symbols.star; static const rating = Symbols.star;
static final ratingRejected = MdiIcons.starMinusOutline; static final ratingRejected = MdiIcons.starMinusOutline;

View file

@ -45,6 +45,7 @@ extension ExtraChipSortFactorView on ChipSortFactor {
ChipSortFactor.name => l10n.sortByName, ChipSortFactor.name => l10n.sortByName,
ChipSortFactor.count => l10n.sortByItemCount, ChipSortFactor.count => l10n.sortByItemCount,
ChipSortFactor.size => l10n.sortBySize, ChipSortFactor.size => l10n.sortBySize,
ChipSortFactor.path => l10n.sortByPath,
}; };
} }
@ -54,6 +55,7 @@ extension ExtraChipSortFactorView on ChipSortFactor {
ChipSortFactor.name => AIcons.name, ChipSortFactor.name => AIcons.name,
ChipSortFactor.count => AIcons.count, ChipSortFactor.count => AIcons.count,
ChipSortFactor.size => AIcons.size, ChipSortFactor.size => AIcons.size,
ChipSortFactor.path => AIcons.path,
}; };
} }
@ -61,7 +63,7 @@ extension ExtraChipSortFactorView on ChipSortFactor {
final l10n = context.l10n; final l10n = context.l10n;
return switch (this) { return switch (this) {
ChipSortFactor.date => reverse ? l10n.sortOrderOldestFirst : l10n.sortOrderNewestFirst, ChipSortFactor.date => reverse ? l10n.sortOrderOldestFirst : l10n.sortOrderNewestFirst,
ChipSortFactor.name => reverse ? l10n.sortOrderZtoA : l10n.sortOrderAtoZ, ChipSortFactor.name || ChipSortFactor.path => reverse ? l10n.sortOrderZtoA : l10n.sortOrderAtoZ,
ChipSortFactor.count || ChipSortFactor.size => reverse ? l10n.sortOrderSmallestFirst : l10n.sortOrderLargestFirst, ChipSortFactor.count || ChipSortFactor.size => reverse ? l10n.sortOrderSmallestFirst : l10n.sortOrderLargestFirst,
}; };
} }

View file

@ -190,7 +190,7 @@ class AlbumChipSetActionDelegate extends ChipSetActionDelegate<AlbumBaseFilter>
builder: (context) { builder: (context) {
return TileViewDialog<ChipSortFactor, AlbumChipGroupFactor, TileLayout>( return TileViewDialog<ChipSortFactor, AlbumChipGroupFactor, TileLayout>(
initialValue: initialValue, initialValue: initialValue,
sortOptions: ChipSetActionDelegate.sortOptions.map((v) => TileViewDialogOption(value: v, title: v.getName(context), icon: v.icon)).toList(), sortOptions: ChipSetActionDelegate.albumSortOptions.map((v) => TileViewDialogOption(value: v, title: v.getName(context), icon: v.icon)).toList(),
groupOptions: _groupOptions.map((v) => TileViewDialogOption(value: v, title: v.getName(context), icon: v.icon)).toList(), groupOptions: _groupOptions.map((v) => TileViewDialogOption(value: v, title: v.getName(context), icon: v.icon)).toList(),
layoutOptions: ChipSetActionDelegate.layoutOptions.map((v) => TileViewDialogOption(value: v, title: v.getName(context), icon: v.icon)).toList(), layoutOptions: ChipSetActionDelegate.layoutOptions.map((v) => TileViewDialogOption(value: v, title: v.getName(context), icon: v.icon)).toList(),
sortOrder: (factor, reverse) => factor.getOrderName(context, reverse), sortOrder: (factor, reverse) => factor.getOrderName(context, reverse),

View file

@ -57,6 +57,11 @@ abstract class ChipSetActionDelegate<T extends CollectionFilter> with FeedbackMi
ChipSortFactor.size, ChipSortFactor.size,
]; ];
static const albumSortOptions = [
...sortOptions,
ChipSortFactor.path,
];
static const layoutOptions = [ static const layoutOptions = [
TileLayout.mosaic, TileLayout.mosaic,
TileLayout.grid, TileLayout.grid,

View file

@ -28,6 +28,7 @@ class FilterDraggableThumbLabel<T extends CollectionFilter> extends StatelessWid
DraggableThumbLabel.formatMonthThumbLabel(context, filterGridItem.entry?.bestDate), DraggableThumbLabel.formatMonthThumbLabel(context, filterGridItem.entry?.bestDate),
]; ];
case ChipSortFactor.name: case ChipSortFactor.name:
case ChipSortFactor.path:
return [ return [
filterGridItem.filter.getLabel(context), filterGridItem.filter.getLabel(context),
]; ];

View file

@ -1,3 +1,4 @@
import 'package:aves/model/filters/covered/stored_album.dart';
import 'package:aves/model/filters/filters.dart'; import 'package:aves/model/filters/filters.dart';
import 'package:aves/model/settings/settings.dart'; import 'package:aves/model/settings/settings.dart';
import 'package:aves/model/source/collection_source.dart'; import 'package:aves/model/source/collection_source.dart';
@ -59,6 +60,18 @@ class FilterNavigationPage<T extends CollectionFilter, CSAD extends ChipSetActio
return a.filter.compareTo(b.filter); return a.filter.compareTo(b.filter);
} }
static int compareFiltersByPath<T extends CollectionFilter>(FilterGridItem<T> a, FilterGridItem<T> b) {
if (T == AlbumBaseFilter) {
final filterA = a.filter;
final filterB = b.filter;
final pathA = filterA is StoredAlbumFilter ? filterA.album : '';
final pathB = filterB is StoredAlbumFilter ? filterB.album : '';
final c = pathA.compareTo(pathB);
return c != 0 ? c : a.filter.compareTo(b.filter);
}
return 0;
}
static List<FilterGridItem<T>> sort<T extends CollectionFilter, CSAD extends ChipSetActionDelegate<T>>( static List<FilterGridItem<T>> sort<T extends CollectionFilter, CSAD extends ChipSetActionDelegate<T>>(
ChipSortFactor sortFactor, ChipSortFactor sortFactor,
bool reverse, bool reverse,
@ -90,6 +103,8 @@ class FilterNavigationPage<T extends CollectionFilter, CSAD extends ChipSetActio
filtersWithSize.sort(compareFiltersBySize); filtersWithSize.sort(compareFiltersBySize);
filters = filtersWithSize.map((kv) => kv.key).toSet(); filters = filtersWithSize.map((kv) => kv.key).toSet();
allMapEntries = toGridItem(source, filters); allMapEntries = toGridItem(source, filters);
case ChipSortFactor.path:
allMapEntries = toGridItem(source, filters)..sort(compareFiltersByPath);
} }
if (reverse) { if (reverse) {
allMapEntries = allMapEntries.reversed.toList(); allMapEntries = allMapEntries.reversed.toList();

View file

@ -1,6 +1,6 @@
enum SourceState { loading, cataloguing, locatingCountries, locatingPlaces, ready } enum SourceState { loading, cataloguing, locatingCountries, locatingPlaces, ready }
enum ChipSortFactor { date, name, count, size } enum ChipSortFactor { date, name, count, size, path }
enum AlbumChipGroupFactor { none, importance, mimeType, volume } enum AlbumChipGroupFactor { none, importance, mimeType, volume }