mirror of
https://gitlab.com/nkming2/nc-photos.git
synced 2025-03-26 08:54:42 +01:00
Port sorting files by name
This commit is contained in:
parent
4bbfc805cc
commit
ff401f399a
4 changed files with 60 additions and 13 deletions
|
@ -36,6 +36,7 @@ class _Bloc extends Bloc<_Event, _State> with BlocLogger {
|
|||
on<_SetScale>(_onSetScale);
|
||||
|
||||
on<_SetEnableMemoryCollection>(_onSetEnableMemoryCollection);
|
||||
on<_SetSortByName>(_onSetSortByName);
|
||||
|
||||
on<_SetError>(_onSetError);
|
||||
|
||||
|
@ -43,6 +44,9 @@ class _Bloc extends Bloc<_Event, _State> with BlocLogger {
|
|||
.add(accountPrefController.isEnableMemoryAlbum.listen((event) {
|
||||
add(_SetEnableMemoryCollection(event));
|
||||
}));
|
||||
_subscriptions.add(prefController.isPhotosTabSortByName.listen((event) {
|
||||
add(_SetSortByName(event));
|
||||
}));
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -254,6 +258,11 @@ class _Bloc extends Bloc<_Event, _State> with BlocLogger {
|
|||
emit(state.copyWith(isEnableMemoryCollection: ev.value));
|
||||
}
|
||||
|
||||
void _onSetSortByName(_SetSortByName ev, Emitter<_State> emit) {
|
||||
_log.info(ev);
|
||||
_transformItems(state.files);
|
||||
}
|
||||
|
||||
void _onSetError(_SetError ev, Emitter<_State> emit) {
|
||||
_log.info(ev);
|
||||
emit(state.copyWith(error: ExceptionEvent(ev.error, ev.stackTrace)));
|
||||
|
@ -265,6 +274,9 @@ class _Bloc extends Bloc<_Event, _State> with BlocLogger {
|
|||
_ItemTransformerArgument(
|
||||
account: account,
|
||||
files: files,
|
||||
sort: prefController.isPhotosTabSortByName.value
|
||||
? _ItemSort.filename
|
||||
: _ItemSort.dateTime,
|
||||
memoriesDayRange: prefController.memoriesRange.value,
|
||||
locale: language_util.getSelectedLocale() ??
|
||||
PlatformDispatcher.instance.locale,
|
||||
|
@ -314,17 +326,31 @@ class _Bloc extends Bloc<_Event, _State> with BlocLogger {
|
|||
}
|
||||
|
||||
_ItemTransformerResult _buildItem(_ItemTransformerArgument arg) {
|
||||
final sortedFiles = arg.files
|
||||
.where((f) => f.fdIsArchived != true)
|
||||
.sorted(compareFileDescriptorDateTimeDescending);
|
||||
final dateHelper = photo_list_util.DateGroupHelper(isMonthOnly: false);
|
||||
final int Function(FileDescriptor, FileDescriptor) sorter;
|
||||
switch (arg.sort) {
|
||||
case _ItemSort.filename:
|
||||
sorter = (a, b) => a.fdPath.compareTo(b.fdPath);
|
||||
break;
|
||||
case _ItemSort.dateTime:
|
||||
default:
|
||||
sorter = compareFileDescriptorDateTimeDescending;
|
||||
break;
|
||||
}
|
||||
|
||||
final sortedFiles =
|
||||
arg.files.where((f) => f.fdIsArchived != true).sorted(sorter);
|
||||
final dateHelper = arg.sort == _ItemSort.dateTime
|
||||
? photo_list_util.DateGroupHelper(isMonthOnly: false)
|
||||
: null;
|
||||
final today = clock.now();
|
||||
final memoryCollectionHelper = photo_list_util.MemoryCollectionHelper(
|
||||
arg.account,
|
||||
today: today,
|
||||
dayRange: arg.memoriesDayRange,
|
||||
);
|
||||
final memoryCollectionHelper = arg.sort == _ItemSort.dateTime
|
||||
? photo_list_util.MemoryCollectionHelper(
|
||||
arg.account,
|
||||
today: today,
|
||||
dayRange: arg.memoriesDayRange,
|
||||
)
|
||||
: null;
|
||||
|
||||
final transformed = <_Item>[];
|
||||
for (int i = 0; i < sortedFiles.length; ++i) {
|
||||
final file = sortedFiles[i];
|
||||
|
@ -332,18 +358,18 @@ _ItemTransformerResult _buildItem(_ItemTransformerArgument arg) {
|
|||
if (item == null) {
|
||||
continue;
|
||||
}
|
||||
final date = dateHelper.onFile(file);
|
||||
final date = dateHelper?.onFile(file);
|
||||
if (date != null) {
|
||||
transformed.add(_DateItem(date: date));
|
||||
}
|
||||
transformed.add(item);
|
||||
memoryCollectionHelper.addFile(file);
|
||||
memoryCollectionHelper?.addFile(file);
|
||||
}
|
||||
final memoryCollections = memoryCollectionHelper
|
||||
.build((year) => L10n.of(arg.locale).memoryAlbumName(today.year - year));
|
||||
?.build((year) => L10n.of(arg.locale).memoryAlbumName(today.year - year));
|
||||
return _ItemTransformerResult(
|
||||
items: transformed,
|
||||
memoryCollections: memoryCollections,
|
||||
memoryCollections: memoryCollections ?? [],
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -218,6 +218,16 @@ class _SetEnableMemoryCollection implements _Event {
|
|||
final bool value;
|
||||
}
|
||||
|
||||
@toString
|
||||
class _SetSortByName implements _Event {
|
||||
const _SetSortByName(this.value);
|
||||
|
||||
@override
|
||||
String toString() => _$toString();
|
||||
|
||||
final bool value;
|
||||
}
|
||||
|
||||
@toString
|
||||
class _SetError implements _Event {
|
||||
const _SetError(this.error, [this.stackTrace]);
|
||||
|
|
|
@ -94,16 +94,20 @@ class _DateItem extends _Item {
|
|||
final DateTime date;
|
||||
}
|
||||
|
||||
enum _ItemSort { dateTime, filename }
|
||||
|
||||
class _ItemTransformerArgument {
|
||||
const _ItemTransformerArgument({
|
||||
required this.account,
|
||||
required this.files,
|
||||
required this.sort,
|
||||
required this.memoriesDayRange,
|
||||
required this.locale,
|
||||
});
|
||||
|
||||
final Account account;
|
||||
final List<FileDescriptor> files;
|
||||
final _ItemSort sort;
|
||||
final int memoriesDayRange;
|
||||
final Locale locale;
|
||||
}
|
||||
|
|
|
@ -259,6 +259,13 @@ extension _$_SetEnableMemoryCollectionToString on _SetEnableMemoryCollection {
|
|||
}
|
||||
}
|
||||
|
||||
extension _$_SetSortByNameToString on _SetSortByName {
|
||||
String _$toString() {
|
||||
// ignore: unnecessary_string_interpolations
|
||||
return "_SetSortByName {value: $value}";
|
||||
}
|
||||
}
|
||||
|
||||
extension _$_SetErrorToString on _SetError {
|
||||
String _$toString() {
|
||||
// ignore: unnecessary_string_interpolations
|
||||
|
|
Loading…
Add table
Reference in a new issue