feat(mobile): show local assets ()

* introduce Asset as composition of AssetResponseDTO and AssetEntity

* filter out duplicate assets (that are both local and remote, take only remote for now)

* only allow remote images to be added to albums

* introduce ImmichImage to render Asset using local or remote data

* optimized deletion of local assets

* local video file playback

* allow multiple methods to wait on background service finished

* skip local assets when adding to album from home screen

* fix and optimize delete

* show gray box placeholder for local assets

* add comments

* fix bug: duplicate assets in state after onNewAssetUploaded
This commit is contained in:
Fynn Petersen-Frey 2022-11-08 18:00:24 +01:00 committed by GitHub
parent 99da181cfc
commit 1633af7af6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
41 changed files with 830 additions and 514 deletions
mobile/lib/routing

View file

@ -65,8 +65,7 @@ class _$AppRouter extends RootStackRouter {
final args = routeData.argsAs<VideoViewerRouteArgs>();
return MaterialPageX<dynamic>(
routeData: routeData,
child: VideoViewerPage(
key: args.key, videoUrl: args.videoUrl, asset: args.asset));
child: VideoViewerPage(key: args.key, asset: args.asset));
},
BackupControllerRoute.name: (routeData) {
return MaterialPageX<dynamic>(
@ -258,9 +257,7 @@ class TabControllerRoute extends PageRouteInfo<void> {
/// [GalleryViewerPage]
class GalleryViewerRoute extends PageRouteInfo<GalleryViewerRouteArgs> {
GalleryViewerRoute(
{Key? key,
required List<AssetResponseDto> assetList,
required AssetResponseDto asset})
{Key? key, required List<Asset> assetList, required Asset asset})
: super(GalleryViewerRoute.name,
path: '/gallery-viewer-page',
args: GalleryViewerRouteArgs(
@ -275,9 +272,9 @@ class GalleryViewerRouteArgs {
final Key? key;
final List<AssetResponseDto> assetList;
final List<Asset> assetList;
final AssetResponseDto asset;
final Asset asset;
@override
String toString() {
@ -291,7 +288,7 @@ class ImageViewerRoute extends PageRouteInfo<ImageViewerRouteArgs> {
ImageViewerRoute(
{Key? key,
required String heroTag,
required AssetResponseDto asset,
required Asset asset,
required String authToken,
required void Function() isZoomedFunction,
required ValueNotifier<bool> isZoomedListener,
@ -324,7 +321,7 @@ class ImageViewerRouteArgs {
final String heroTag;
final AssetResponseDto asset;
final Asset asset;
final String authToken;
@ -343,29 +340,24 @@ class ImageViewerRouteArgs {
/// generated route for
/// [VideoViewerPage]
class VideoViewerRoute extends PageRouteInfo<VideoViewerRouteArgs> {
VideoViewerRoute(
{Key? key, required String videoUrl, required AssetResponseDto asset})
VideoViewerRoute({Key? key, required Asset asset})
: super(VideoViewerRoute.name,
path: '/video-viewer-page',
args: VideoViewerRouteArgs(
key: key, videoUrl: videoUrl, asset: asset));
args: VideoViewerRouteArgs(key: key, asset: asset));
static const String name = 'VideoViewerRoute';
}
class VideoViewerRouteArgs {
const VideoViewerRouteArgs(
{this.key, required this.videoUrl, required this.asset});
const VideoViewerRouteArgs({this.key, required this.asset});
final Key? key;
final String videoUrl;
final AssetResponseDto asset;
final Asset asset;
@override
String toString() {
return 'VideoViewerRouteArgs{key: $key, videoUrl: $videoUrl, asset: $asset}';
return 'VideoViewerRouteArgs{key: $key, asset: $asset}';
}
}