Support sorting on ente albums by name, recent photo & last modified
This commit is contained in:
parent
77721ca3b3
commit
8404c87791
3 changed files with 52 additions and 10 deletions
|
@ -26,6 +26,7 @@ import 'package:photos/ui/home_widget.dart';
|
|||
import 'package:photos/ui/lock_screen.dart';
|
||||
import 'package:photos/utils/crypto_util.dart';
|
||||
import 'package:photos/utils/file_uploader.dart';
|
||||
import 'package:photos/utils/local_settings.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:super_logging/super_logging.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
|
@ -147,6 +148,7 @@ Future<void> _init(bool isBackground) async {
|
|||
await RemoteSyncService.instance.init();
|
||||
await SyncService.instance.init();
|
||||
await MemoriesService.instance.init();
|
||||
LocalSettings.instance.init();
|
||||
FeatureFlagService.instance.init();
|
||||
_logger.info("Initialization done");
|
||||
_initializationStatus.complete();
|
||||
|
|
|
@ -20,6 +20,7 @@ import 'package:photos/ui/common_elements.dart';
|
|||
import 'package:photos/ui/device_folder_page.dart';
|
||||
import 'package:photos/ui/loading_widget.dart';
|
||||
import 'package:photos/ui/thumbnail_widget.dart';
|
||||
import 'package:photos/utils/local_settings.dart';
|
||||
import 'package:photos/utils/navigation_util.dart';
|
||||
import 'package:photos/utils/toast_util.dart';
|
||||
|
||||
|
@ -38,6 +39,7 @@ class _CollectionsGalleryWidgetState extends State<CollectionsGalleryWidget>
|
|||
StreamSubscription<CollectionUpdatedEvent> _collectionUpdatesSubscription;
|
||||
StreamSubscription<BackupFoldersUpdatedEvent> _backupFoldersUpdatedEvent;
|
||||
StreamSubscription<UserLoggedOutEvent> _loggedOutEvent;
|
||||
AlbumSortKey sortKey;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
|
@ -57,6 +59,7 @@ class _CollectionsGalleryWidgetState extends State<CollectionsGalleryWidget>
|
|||
Bus.instance.on<BackupFoldersUpdatedEvent>().listen((event) {
|
||||
setState(() {});
|
||||
});
|
||||
sortKey = LocalSettings.instance.albumSortKey();
|
||||
super.initState();
|
||||
}
|
||||
|
||||
|
@ -100,8 +103,16 @@ class _CollectionsGalleryWidgetState extends State<CollectionsGalleryWidget>
|
|||
}
|
||||
}
|
||||
collectionsWithThumbnail.sort((first, second) {
|
||||
return second.thumbnail.updationTime
|
||||
.compareTo(first.thumbnail.updationTime);
|
||||
if (sortKey == AlbumSortKey.albumName) {
|
||||
// alphabetical ASC order
|
||||
return first.collection.name.compareTo(second.collection.name);
|
||||
} else if (sortKey == AlbumSortKey.recentPhoto) {
|
||||
return second.thumbnail.creationTime
|
||||
.compareTo(first.thumbnail.creationTime);
|
||||
} else {
|
||||
return second.collection.updationTime
|
||||
.compareTo(first.collection.updationTime);
|
||||
}
|
||||
});
|
||||
return CollectionItems(folders, collectionsWithThumbnail);
|
||||
}
|
||||
|
@ -139,9 +150,40 @@ class _CollectionsGalleryWidgetState extends State<CollectionsGalleryWidget>
|
|||
),
|
||||
),
|
||||
),
|
||||
Padding(padding: EdgeInsets.all(10)),
|
||||
Padding(padding: EdgeInsets.all(4)),
|
||||
Divider(),
|
||||
Padding(padding: EdgeInsets.all(10)),
|
||||
PopupMenuButton(
|
||||
offset: Offset(10, 40),
|
||||
initialValue: sortKey?.index ?? 0,
|
||||
child: Align(
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
Text(sortKey.toString(),
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 12,
|
||||
color: Theme.of(context).buttonColor,
|
||||
),
|
||||
),
|
||||
Padding(padding: EdgeInsets.only(left: 5.0)),
|
||||
Icon(Icons.sort_outlined),
|
||||
],
|
||||
)),
|
||||
onSelected: (int index) {
|
||||
setState(() {
|
||||
sortKey = AlbumSortKey.values[index];
|
||||
});
|
||||
},
|
||||
itemBuilder: (context) {
|
||||
return List.generate(AlbumSortKey.values.length, (index) {
|
||||
return PopupMenuItem(
|
||||
value: index,
|
||||
child: Text('${AlbumSortKey.values[index]}'),
|
||||
);
|
||||
});
|
||||
},
|
||||
),
|
||||
SectionTitle("on ente"),
|
||||
Padding(padding: EdgeInsets.all(12)),
|
||||
Configuration.instance.hasConfiguredAccount()
|
||||
|
|
|
@ -4,7 +4,7 @@ import 'package:shared_preferences/shared_preferences.dart';
|
|||
enum AlbumSortKey {
|
||||
albumName,
|
||||
lastModified,
|
||||
createdAt,
|
||||
recentPhoto,
|
||||
}
|
||||
|
||||
class LocalSettings {
|
||||
|
@ -12,8 +12,6 @@ class LocalSettings {
|
|||
|
||||
static final LocalSettings instance = LocalSettings._privateConstructor();
|
||||
static const kCollectionSortPref = "collection_sort_pref";
|
||||
|
||||
final _logger = Logger("FeatureFlagService");
|
||||
SharedPreferences _prefs;
|
||||
|
||||
Future<void> init() async {
|
||||
|
@ -21,11 +19,11 @@ class LocalSettings {
|
|||
}
|
||||
|
||||
AlbumSortKey albumSortKey() {
|
||||
return AlbumSortKey.values[_prefs.getInt(kCollectionSortPref)]
|
||||
return AlbumSortKey.values[_prefs?.getInt(kCollectionSortPref) ?? 0] ??
|
||||
AlbumSortKey.lastModified;
|
||||
}
|
||||
|
||||
void setAlbumSortKey(AlbumSortKey key) {
|
||||
_prefs.setInt(kCollectionSortPref, key.index);
|
||||
_prefs?.setInt(kCollectionSortPref, key.index);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue