Fix not cleaing latestItemTime after removing last item

This commit is contained in:
Ming Ming 2021-11-05 19:22:28 +08:00
parent a964f0f14d
commit 4d54b2099d
2 changed files with 18 additions and 6 deletions

View file

@ -7,6 +7,7 @@ import 'package:nc_photos/entity/album.dart';
import 'package:nc_photos/entity/album/item.dart'; import 'package:nc_photos/entity/album/item.dart';
import 'package:nc_photos/entity/file.dart'; import 'package:nc_photos/entity/file.dart';
import 'package:nc_photos/iterable_extension.dart'; import 'package:nc_photos/iterable_extension.dart';
import 'package:nc_photos/or_null.dart';
import 'package:nc_photos/type.dart'; import 'package:nc_photos/type.dart';
abstract class AlbumProvider with EquatableMixin { abstract class AlbumProvider with EquatableMixin {
@ -79,7 +80,7 @@ abstract class AlbumProviderBase extends AlbumProvider {
@override @override
AlbumProviderBase copyWith({ AlbumProviderBase copyWith({
DateTime? latestItemTime, OrNull<DateTime>? latestItemTime,
}); });
@override @override
@ -134,11 +135,12 @@ class AlbumStaticProvider extends AlbumProviderBase {
@override @override
AlbumStaticProvider copyWith({ AlbumStaticProvider copyWith({
DateTime? latestItemTime, OrNull<DateTime>? latestItemTime,
List<AlbumItem>? items, List<AlbumItem>? items,
}) { }) {
return AlbumStaticProvider( return AlbumStaticProvider(
latestItemTime: latestItemTime ?? this.latestItemTime, latestItemTime:
latestItemTime == null ? this.latestItemTime : latestItemTime.obj,
items: items ?? this.items, items: items ?? this.items,
); );
} }
@ -198,11 +200,12 @@ class AlbumDirProvider extends AlbumDynamicProvider {
@override @override
AlbumDirProvider copyWith({ AlbumDirProvider copyWith({
DateTime? latestItemTime, OrNull<DateTime>? latestItemTime,
List<File>? dirs, List<File>? dirs,
}) { }) {
return AlbumDirProvider( return AlbumDirProvider(
latestItemTime: latestItemTime ?? this.latestItemTime, latestItemTime:
latestItemTime == null ? this.latestItemTime : latestItemTime.obj,
dirs: dirs ?? this.dirs, dirs: dirs ?? this.dirs,
); );
} }

View file

@ -4,6 +4,7 @@ import 'package:nc_photos/entity/album/provider.dart';
import 'package:nc_photos/entity/album/sort_provider.dart'; import 'package:nc_photos/entity/album/sort_provider.dart';
import 'package:nc_photos/entity/file.dart'; import 'package:nc_photos/entity/file.dart';
import 'package:nc_photos/entity/file_util.dart' as file_util; import 'package:nc_photos/entity/file_util.dart' as file_util;
import 'package:nc_photos/or_null.dart';
class UpdateAlbumTime { class UpdateAlbumTime {
/// Update the latest item time of an album with unsorted items /// Update the latest item time of an album with unsorted items
@ -33,6 +34,14 @@ class UpdateAlbumTime {
} }
Album _updateWithSortedItems(Album album, List<AlbumItem> sortedItems) { Album _updateWithSortedItems(Album album, List<AlbumItem> sortedItems) {
if (sortedItems.isEmpty) {
return album.copyWith(
provider: (album.provider as AlbumProviderBase).copyWith(
latestItemTime: OrNull(null),
),
);
}
DateTime? latestItemTime; DateTime? latestItemTime;
try { try {
final latestFile = sortedItems final latestFile = sortedItems
@ -47,7 +56,7 @@ class UpdateAlbumTime {
if (latestItemTime != album.provider.latestItemTime) { if (latestItemTime != album.provider.latestItemTime) {
return album.copyWith( return album.copyWith(
provider: (album.provider as AlbumProviderBase).copyWith( provider: (album.provider as AlbumProviderBase).copyWith(
latestItemTime: latestItemTime, latestItemTime: OrNull(latestItemTime),
), ),
); );
} }