mirror of
				https://github.com/immich-app/immich.git
				synced 2025-10-30 10:12:33 -04:00 
			
		
		
		
	* refactor: user entity * fix: add users to album & user profile url * chore: rebase fixes * generate files * fix(mobile): timeline not reset on login * fix: test stub * refactor: rename user model (#16813) * refactor: rename user model * simplify import --------- Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com> Co-authored-by: Alex <alex.tran1502@gmail.com> * chore: generate files * fix: use getAllAccessible instead of getAll --------- Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com> Co-authored-by: Alex <alex.tran1502@gmail.com>
		
			
				
	
	
		
			89 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'dart:async';
 | |
| 
 | |
| import 'package:collection/collection.dart';
 | |
| import 'package:hooks_riverpod/hooks_riverpod.dart';
 | |
| import 'package:immich_mobile/domain/models/user.model.dart';
 | |
| import 'package:immich_mobile/providers/album/suggested_shared_users.provider.dart';
 | |
| import 'package:immich_mobile/services/partner.service.dart';
 | |
| 
 | |
| class PartnerSharedWithNotifier extends StateNotifier<List<UserDto>> {
 | |
|   final PartnerService _partnerService;
 | |
|   late final StreamSubscription<List<UserDto>> streamSub;
 | |
| 
 | |
|   PartnerSharedWithNotifier(this._partnerService) : super([]) {
 | |
|     Function eq = const ListEquality<UserDto>().equals;
 | |
|     _partnerService.getSharedWith().then((partners) {
 | |
|       if (!eq(state, partners)) {
 | |
|         state = partners;
 | |
|       }
 | |
|     }).then((_) {
 | |
|       streamSub = _partnerService.watchSharedWith().listen((partners) {
 | |
|         if (!eq(state, partners)) {
 | |
|           state = partners;
 | |
|         }
 | |
|       });
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   Future<bool> updatePartner(UserDto partner, {required bool inTimeline}) {
 | |
|     return _partnerService.updatePartner(partner, inTimeline: inTimeline);
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   void dispose() {
 | |
|     if (mounted) {
 | |
|       streamSub.cancel();
 | |
|     }
 | |
|     super.dispose();
 | |
|   }
 | |
| }
 | |
| 
 | |
| final partnerSharedWithProvider =
 | |
|     StateNotifierProvider<PartnerSharedWithNotifier, List<UserDto>>((ref) {
 | |
|   return PartnerSharedWithNotifier(
 | |
|     ref.watch(partnerServiceProvider),
 | |
|   );
 | |
| });
 | |
| 
 | |
| class PartnerSharedByNotifier extends StateNotifier<List<UserDto>> {
 | |
|   final PartnerService _partnerService;
 | |
|   late final StreamSubscription<List<UserDto>> streamSub;
 | |
| 
 | |
|   PartnerSharedByNotifier(this._partnerService) : super([]) {
 | |
|     Function eq = const ListEquality<UserDto>().equals;
 | |
|     _partnerService.getSharedBy().then((partners) {
 | |
|       if (!eq(state, partners)) {
 | |
|         state = partners;
 | |
|       }
 | |
|     }).then((_) {
 | |
|       streamSub = _partnerService.watchSharedBy().listen((partners) {
 | |
|         if (!eq(state, partners)) {
 | |
|           state = partners;
 | |
|         }
 | |
|       });
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   void dispose() {
 | |
|     if (mounted) {
 | |
|       streamSub.cancel();
 | |
|     }
 | |
|     super.dispose();
 | |
|   }
 | |
| }
 | |
| 
 | |
| final partnerSharedByProvider =
 | |
|     StateNotifierProvider<PartnerSharedByNotifier, List<UserDto>>((ref) {
 | |
|   return PartnerSharedByNotifier(ref.watch(partnerServiceProvider));
 | |
| });
 | |
| 
 | |
| final partnerAvailableProvider =
 | |
|     FutureProvider.autoDispose<List<UserDto>>((ref) async {
 | |
|   final otherUsers = await ref.watch(otherUsersProvider.future);
 | |
|   final currentPartners = ref.watch(partnerSharedByProvider);
 | |
|   final available = Set<UserDto>.of(otherUsers);
 | |
|   available.removeAll(currentPartners);
 | |
|   return available.toList();
 | |
| });
 |