feat(mobile): load search result assets from local DB (#5971)

This commit is contained in:
Fynn Petersen-Frey
2023-12-26 22:41:51 +01:00
committed by GitHub
parent c0ebc943d2
commit 733fa28aa2
5 changed files with 22 additions and 29 deletions

View File

@@ -1,28 +1,13 @@
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/shared/models/asset.dart';
import 'package:immich_mobile/shared/providers/api.provider.dart';
import 'package:immich_mobile/shared/providers/db.provider.dart';
import 'package:isar/isar.dart';
final allVideoAssetsProvider = FutureProvider<List<Asset>>( (ref) async {
final search = await ref.watch(apiServiceProvider).searchApi.search(
type: 'VIDEO',
);
if (search == null) {
return [];
}
return ref.watch(dbProvider)
final allVideoAssetsProvider = FutureProvider<List<Asset>>((ref) async {
return ref
.watch(dbProvider)
.assets
.getAllByRemoteId(
search.assets.items.map((e) => e.id),
);
/// This works offline, but we use the above
/*
return ref.watch(dbProvider).assets
.filter()
.durationInSecondsGreaterThan(0)
.typeEqualTo(AssetType.video)
.findAll();
*/
});

View File

@@ -1,6 +1,8 @@
import 'package:immich_mobile/shared/models/asset.dart';
import 'package:immich_mobile/shared/providers/api.provider.dart';
import 'package:immich_mobile/shared/providers/db.provider.dart';
import 'package:immich_mobile/shared/services/api.service.dart';
import 'package:isar/isar.dart';
import 'package:logging/logging.dart';
import 'package:openapi/api.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
@@ -9,13 +11,14 @@ part 'person.service.g.dart';
@riverpod
PersonService personService(PersonServiceRef ref) =>
PersonService(ref.read(apiServiceProvider));
PersonService(ref.read(apiServiceProvider), ref.read(dbProvider));
class PersonService {
final Logger _log = Logger("PersonService");
final ApiService _apiService;
final Isar _db;
PersonService(this._apiService);
PersonService(this._apiService, this._db);
Future<List<PersonResponseDto>> getCuratedPeople() async {
try {
@@ -30,7 +33,8 @@ class PersonService {
Future<List<Asset>?> getPersonAssets(String id) async {
try {
final assets = await _apiService.personApi.getPersonAssets(id);
return assets?.map((e) => Asset.remote(e)).toList();
if (assets == null) return null;
return await _db.assets.getAllByRemoteId(assets.map((e) => e.id));
} catch (error, stack) {
_log.severe("Error while fetching person assets", error, stack);
}