Update collection items when file updated in files controller

This commit is contained in:
Ming Ming 2024-02-17 01:57:48 +08:00
parent 1c999f6fab
commit c588ab9c6d
8 changed files with 96 additions and 26 deletions

View file

@ -327,18 +327,25 @@ class CollectionItemsController {
return;
}
await _mutex.protect(() async {
final newItems = _dataStreamController.value.items.where((e) {
if (e is CollectionFileItem) {
return ev.dataMap.containsKey(e.file.fdId);
} else {
return true;
}
}).toList();
if (newItems.length != _dataStreamController.value.items.length) {
_dataStreamController.addWithValue((value) => value.copyWith(
items: newItems,
));
}
final newItems = _dataStreamController.value.items
.map((e) {
if (e is CollectionFileItem) {
final file = ev.dataMap[e.file.fdId];
if (file == null) {
// removed
return null;
} else {
return e.copyWith(file: file);
}
} else {
return e;
}
})
.whereNotNull()
.toList();
_dataStreamController.addWithValue((value) => value.copyWith(
items: newItems,
));
});
}

View file

@ -1,3 +1,4 @@
import 'package:copy_with/copy_with.dart';
import 'package:equatable/equatable.dart';
import 'package:flutter/foundation.dart';
import 'package:logging/logging.dart';
@ -73,6 +74,7 @@ abstract class AlbumItem with EquatableMixin {
static final _log = _$AlbumItemNpLog.log;
}
@genCopyWith
@toString
class AlbumFileItem extends AlbumItem {
AlbumFileItem({
@ -110,20 +112,6 @@ class AlbumFileItem extends AlbumItem {
addedBy == other.addedBy &&
addedAt == other.addedAt;
AlbumFileItem copyWith({
CiString? addedBy,
DateTime? addedAt,
FileDescriptor? file,
CiString? ownerId,
}) {
return AlbumFileItem(
addedBy: addedBy ?? this.addedBy,
addedAt: addedAt ?? this.addedAt,
file: file ?? this.file,
ownerId: ownerId ?? this.ownerId,
);
}
@override
List<Object?> get props => [
...super.props,

View file

@ -2,6 +2,47 @@
part of 'item.dart';
// **************************************************************************
// CopyWithLintRuleGenerator
// **************************************************************************
// ignore_for_file: library_private_types_in_public_api, duplicate_ignore
// **************************************************************************
// CopyWithGenerator
// **************************************************************************
abstract class $AlbumFileItemCopyWithWorker {
AlbumFileItem call(
{CiString? addedBy,
DateTime? addedAt,
FileDescriptor? file,
CiString? ownerId});
}
class _$AlbumFileItemCopyWithWorkerImpl
implements $AlbumFileItemCopyWithWorker {
_$AlbumFileItemCopyWithWorkerImpl(this.that);
@override
AlbumFileItem call(
{dynamic addedBy, dynamic addedAt, dynamic file, dynamic ownerId}) {
return AlbumFileItem(
addedBy: addedBy as CiString? ?? that.addedBy,
addedAt: addedAt as DateTime? ?? that.addedAt,
file: file as FileDescriptor? ?? that.file,
ownerId: ownerId as CiString? ?? that.ownerId);
}
final AlbumFileItem that;
}
extension $AlbumFileItemCopyWith on AlbumFileItem {
$AlbumFileItemCopyWithWorker get copyWith => _$copyWith;
$AlbumFileItemCopyWithWorker get _$copyWith =>
_$AlbumFileItemCopyWithWorkerImpl(this);
}
// **************************************************************************
// NpLogGenerator
// **************************************************************************

View file

@ -8,6 +8,10 @@ abstract class CollectionItem {
abstract class CollectionFileItem implements CollectionItem {
const CollectionFileItem();
CollectionFileItem copyWith({
FileDescriptor? file,
});
FileDescriptor get file;
}

View file

@ -24,6 +24,15 @@ class CollectionFileItemAlbumAdapter extends CollectionFileItem
with AlbumAdaptedCollectionItem {
const CollectionFileItemAlbumAdapter(this.item);
@override
CollectionFileItemAlbumAdapter copyWith({
FileDescriptor? file,
}) {
return CollectionFileItemAlbumAdapter(item.copyWith(
file: file,
));
}
@override
String toString() => _$toString();

View file

@ -9,6 +9,13 @@ part 'basic_item.g.dart';
class BasicCollectionFileItem implements CollectionFileItem {
const BasicCollectionFileItem(this.file);
@override
BasicCollectionFileItem copyWith({
FileDescriptor? file,
}) {
return BasicCollectionFileItem(file ?? this.file);
}
@override
String toString() => _$toString();

View file

@ -9,6 +9,13 @@ part 'nc_album_item_adapter.g.dart';
class CollectionFileItemNcAlbumItemAdapter extends CollectionFileItem {
const CollectionFileItemNcAlbumItemAdapter(this.item, [this.localFile]);
@override
CollectionFileItemNcAlbumItemAdapter copyWith({
FileDescriptor? file,
}) {
return CollectionFileItemNcAlbumItemAdapter(item, file ?? this.file);
}
@override
String toString() => _$toString();

View file

@ -14,6 +14,13 @@ abstract class NewCollectionItem implements CollectionItem {}
class NewCollectionFileItem implements CollectionFileItem, NewCollectionItem {
const NewCollectionFileItem(this.file);
@override
NewCollectionFileItem copyWith({
FileDescriptor? file,
}) {
return NewCollectionFileItem(file ?? this.file);
}
@override
String toString() => _$toString();