Support sorting on ente albums by name, recent photo & last modified

This commit is contained in:
Neeraj Gupta 2021-09-09 01:36:37 +05:30
parent 77721ca3b3
commit 8404c87791
3 changed files with 52 additions and 10 deletions

View file

@ -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();

View file

@ -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()

View file

@ -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);
}
}