mirror of
				https://github.com/immich-app/immich.git
				synced 2025-10-31 10:37:11 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			52 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'package:immich_mobile/entities/asset.entity.dart';
 | ||
| import 'package:immich_mobile/services/asset.service.dart';
 | ||
| import 'package:logging/logging.dart';
 | ||
| import 'package:openapi/api.dart';
 | ||
| import 'package:riverpod_annotation/riverpod_annotation.dart';
 | ||
| 
 | ||
| part 'asset_people.provider.g.dart';
 | ||
| 
 | ||
| /// Maintains the list of people for an asset.
 | ||
| @riverpod
 | ||
| class AssetPeopleNotifier extends _$AssetPeopleNotifier {
 | ||
|   final log = Logger('AssetPeopleNotifier');
 | ||
| 
 | ||
|   @override
 | ||
|   Future<List<PersonWithFacesResponseDto>> build(Asset asset) async {
 | ||
|     if (!asset.isRemote) {
 | ||
|       return [];
 | ||
|     }
 | ||
| 
 | ||
|     final list = await ref
 | ||
|         .watch(assetServiceProvider)
 | ||
|         .getRemotePeopleOfAsset(asset.remoteId!);
 | ||
|     if (list == null) {
 | ||
|       return [];
 | ||
|     }
 | ||
| 
 | ||
|     // explicitly a sorted slice to make it deterministic
 | ||
|     // named people will be at the beginning, and names are sorted
 | ||
|     // ascendingly
 | ||
|     list.sort((a, b) {
 | ||
|       final aNotEmpty = a.name.isNotEmpty;
 | ||
|       final bNotEmpty = b.name.isNotEmpty;
 | ||
|       if (aNotEmpty && !bNotEmpty) {
 | ||
|         return -1;
 | ||
|       } else if (!aNotEmpty && bNotEmpty) {
 | ||
|         return 1;
 | ||
|       } else if (!aNotEmpty && !bNotEmpty) {
 | ||
|         return 0;
 | ||
|       }
 | ||
| 
 | ||
|       return a.name.compareTo(b.name);
 | ||
|     });
 | ||
|     return list;
 | ||
|   }
 | ||
| 
 | ||
|   Future<void> refresh() async {
 | ||
|     // invalidate the state – this way we don't have to
 | ||
|     // duplicate the code from build.
 | ||
|     ref.invalidateSelf();
 | ||
|   }
 | ||
| }
 |