mirror of
https://github.com/immich-app/immich.git
synced 2025-07-09 09:12:57 +02:00
feat(mobile): show local assets (#905)
* 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:
parent
99da181cfc
commit
1633af7af6
41 changed files with 830 additions and 514 deletions
mobile/lib/routing
|
@ -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}';
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue