From 843497a70849aa2f804695330ffc956777f67dbc Mon Sep 17 00:00:00 2001 From: Ming Ming Date: Wed, 4 May 2022 01:37:10 +0800 Subject: [PATCH] Streamline code --- app/lib/event/native_event.dart | 8 +++----- app/lib/stream_extension.dart | 3 +++ app/lib/use_case/remove.dart | 6 ++---- app/lib/use_case/unshare_file_from_album.dart | 4 ++-- 4 files changed, 10 insertions(+), 11 deletions(-) create mode 100644 app/lib/stream_extension.dart diff --git a/app/lib/event/native_event.dart b/app/lib/event/native_event.dart index f1069ba4..1fcaa54f 100644 --- a/app/lib/event/native_event.dart +++ b/app/lib/event/native_event.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'dart:convert'; import 'package:logging/logging.dart'; +import 'package:nc_photos/stream_extension.dart'; import 'package:nc_photos_plugin/nc_photos_plugin.dart'; class NativeEventListener { @@ -12,10 +13,7 @@ class NativeEventListener { _log.warning("[begin] Already listening"); return; } - _subscription = _mappedStream - .where((event) => event is T) - .cast() - .listen(listener); + _subscription = _mappedStream.whereType().listen(listener); } void end() { @@ -28,7 +26,7 @@ class NativeEventListener { } static late final _mappedStream = - NativeEvent.stream.where((event) => event is NativeEventObject).map((ev) { + NativeEvent.stream.whereType().map((ev) { switch (ev.event) { case FileExifUpdatedEvent._id: return FileExifUpdatedEvent.fromEvent(ev); diff --git a/app/lib/stream_extension.dart b/app/lib/stream_extension.dart new file mode 100644 index 00000000..c80a17e6 --- /dev/null +++ b/app/lib/stream_extension.dart @@ -0,0 +1,3 @@ +extension StreamExtension on Stream { + Stream whereType() => where((event) => event is U).cast(); +} diff --git a/app/lib/use_case/remove.dart b/app/lib/use_case/remove.dart index b75e458e..e7cddc3c 100644 --- a/app/lib/use_case/remove.dart +++ b/app/lib/use_case/remove.dart @@ -11,6 +11,7 @@ import 'package:nc_photos/entity/album/provider.dart'; import 'package:nc_photos/entity/file.dart'; import 'package:nc_photos/event/event.dart'; import 'package:nc_photos/iterable_extension.dart'; +import 'package:nc_photos/stream_extension.dart'; import 'package:nc_photos/use_case/list_album.dart'; import 'package:nc_photos/use_case/list_share.dart'; import 'package:nc_photos/use_case/remove_from_album.dart'; @@ -54,10 +55,7 @@ class Remove { } Future _cleanUpAlbums(Account account, List removes) async { - final albums = await ListAlbum(_c)(account) - .where((event) => event is Album) - .cast() - .toList(); + final albums = await ListAlbum(_c)(account).whereType().toList(); // figure out which files need to be unshared with whom final unshares = >{}; // clean up only make sense for static albums diff --git a/app/lib/use_case/unshare_file_from_album.dart b/app/lib/use_case/unshare_file_from_album.dart index c060e05b..04049dc0 100644 --- a/app/lib/use_case/unshare_file_from_album.dart +++ b/app/lib/use_case/unshare_file_from_album.dart @@ -8,6 +8,7 @@ import 'package:nc_photos/entity/album/item.dart'; import 'package:nc_photos/entity/album/provider.dart'; import 'package:nc_photos/entity/file.dart'; import 'package:nc_photos/entity/share.dart'; +import 'package:nc_photos/stream_extension.dart'; import 'package:nc_photos/use_case/list_album.dart'; import 'package:nc_photos/use_case/list_share.dart'; import 'package:nc_photos/use_case/remove_share.dart'; @@ -35,8 +36,7 @@ class UnshareFileFromAlbum { "[call] Unshare ${files.length} files from album '${album.name}' with ${unshareWith.length} users"); // list albums with shares identical to any element in [unshareWith] final otherAlbums = await ListAlbum(_c)(account) - .where((event) => event is Album) - .cast() + .whereType() .where((a) => !a.albumFile!.compareServerIdentity(album.albumFile!) && a.provider is AlbumStaticProvider &&