forked from Cutlery/immich
		
	* Fixes double video auto initialize issue and placeholder for video controller * WIP unravel stack index * Refactors video player controller format fixing video format Working format * Fixes hide on pause * Got hiding when tapped working * Hides controls when video starts and fixes placeholder for memory card Remove prints * Fixes show controls with microtask * fix LivePhotos not playing * removes unused function callbacks and moves wakelock * Update motion video * Fixing motion photo playing * Renames to isPlayingVideo * Fixes playing video on change * pause on dispose * fixing issues with sync between controls * Adds gallery app bar * Switches to memoized * Fixes pause * Revert "Switches to memoized" This reverts commit 234e6741dea05aa0b967dde746f1d625f15bed94. * uses stateful widget * Fixes double video play by using provider and new chewie video player wip format Fixes motion photos format --------- Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
		
			
				
	
	
		
			111 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'package:auto_route/auto_route.dart';
 | |
| import 'package:flutter/material.dart';
 | |
| import 'package:hooks_riverpod/hooks_riverpod.dart';
 | |
| import 'package:immich_mobile/modules/album/providers/current_album.provider.dart';
 | |
| import 'package:immich_mobile/modules/album/ui/add_to_album_bottom_sheet.dart';
 | |
| import 'package:immich_mobile/modules/asset_viewer/providers/image_viewer_page_state.provider.dart';
 | |
| import 'package:immich_mobile/modules/asset_viewer/providers/show_controls.provider.dart';
 | |
| import 'package:immich_mobile/modules/asset_viewer/ui/top_control_app_bar.dart';
 | |
| import 'package:immich_mobile/modules/backup/providers/manual_upload.provider.dart';
 | |
| import 'package:immich_mobile/modules/home/ui/upload_dialog.dart';
 | |
| import 'package:immich_mobile/modules/partner/providers/partner.provider.dart';
 | |
| import 'package:immich_mobile/routing/router.dart';
 | |
| import 'package:immich_mobile/shared/models/asset.dart';
 | |
| import 'package:immich_mobile/shared/providers/asset.provider.dart';
 | |
| import 'package:immich_mobile/shared/providers/user.provider.dart';
 | |
| 
 | |
| class GalleryAppBar extends ConsumerWidget {
 | |
|   final Asset asset;
 | |
|   final void Function() showInfo;
 | |
|   final void Function() onToggleMotionVideo;
 | |
|   final bool isPlayingVideo;
 | |
| 
 | |
|   const GalleryAppBar({
 | |
|     super.key,
 | |
|     required this.asset,
 | |
|     required this.showInfo,
 | |
|     required this.onToggleMotionVideo,
 | |
|     required this.isPlayingVideo,
 | |
|   });
 | |
| 
 | |
|   @override
 | |
|   Widget build(BuildContext context, WidgetRef ref) {
 | |
|     final album = ref.watch(currentAlbumProvider);
 | |
|     final isOwner = asset.ownerId == ref.watch(currentUserProvider)?.isarId;
 | |
| 
 | |
|     final isPartner = ref
 | |
|         .watch(partnerSharedWithProvider)
 | |
|         .map((e) => e.isarId)
 | |
|         .contains(asset.ownerId);
 | |
| 
 | |
|     toggleFavorite(Asset asset) =>
 | |
|         ref.read(assetProvider.notifier).toggleFavorite([asset]);
 | |
| 
 | |
|     handleActivities() {
 | |
|       if (album != null && album.shared && album.remoteId != null) {
 | |
|         context.pushRoute(const ActivitiesRoute());
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     handleUpload(Asset asset) {
 | |
|       showDialog(
 | |
|         context: context,
 | |
|         builder: (BuildContext _) {
 | |
|           return UploadDialog(
 | |
|             onUpload: () {
 | |
|               ref
 | |
|                   .read(manualUploadProvider.notifier)
 | |
|                   .uploadAssets(context, [asset]);
 | |
|             },
 | |
|           );
 | |
|         },
 | |
|       );
 | |
|     }
 | |
| 
 | |
|     addToAlbum(Asset addToAlbumAsset) {
 | |
|       showModalBottomSheet(
 | |
|         elevation: 0,
 | |
|         shape: RoundedRectangleBorder(
 | |
|           borderRadius: BorderRadius.circular(15.0),
 | |
|         ),
 | |
|         context: context,
 | |
|         builder: (BuildContext _) {
 | |
|           return AddToAlbumBottomSheet(
 | |
|             assets: [addToAlbumAsset],
 | |
|           );
 | |
|         },
 | |
|       );
 | |
|     }
 | |
| 
 | |
|     return IgnorePointer(
 | |
|       ignoring: !ref.watch(showControlsProvider),
 | |
|       child: AnimatedOpacity(
 | |
|         duration: const Duration(milliseconds: 100),
 | |
|         opacity: ref.watch(showControlsProvider) ? 1.0 : 0.0,
 | |
|         child: Container(
 | |
|           color: Colors.black.withOpacity(0.4),
 | |
|           child: TopControlAppBar(
 | |
|             isOwner: isOwner,
 | |
|             isPartner: isPartner,
 | |
|             isPlayingMotionVideo: isPlayingVideo,
 | |
|             asset: asset,
 | |
|             onMoreInfoPressed: showInfo,
 | |
|             onFavorite: toggleFavorite,
 | |
|             onUploadPressed: asset.isLocal ? () => handleUpload(asset) : null,
 | |
|             onDownloadPressed: asset.isLocal
 | |
|                 ? null
 | |
|                 : () =>
 | |
|                     ref.read(imageViewerStateProvider.notifier).downloadAsset(
 | |
|                           asset,
 | |
|                           context,
 | |
|                         ),
 | |
|             onToggleMotionVideo: onToggleMotionVideo,
 | |
|             onAddToAlbumPressed: () => addToAlbum(asset),
 | |
|             onActivitiesPressed: handleActivities,
 | |
|           ),
 | |
|         ),
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| }
 |