1
0
Fork 0
mirror of https://github.com/immich-app/immich.git synced 2025-01-01 08:31:59 +00:00
immich/mobile/lib/services/stack.service.dart
Fynn Petersen-Frey 202082f62e
refactor(mobile): use repositories in a number of services (#12891)
* UserService
* PartnerService
* HashService
* MemoryService
* PersonService
* SearchService
* StackService
2024-09-24 12:50:21 +00:00

76 lines
2.1 KiB
Dart

import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/entities/asset.entity.dart';
import 'package:immich_mobile/interfaces/asset.interface.dart';
import 'package:immich_mobile/providers/api.provider.dart';
import 'package:immich_mobile/repositories/asset.repository.dart';
import 'package:immich_mobile/services/api.service.dart';
import 'package:openapi/api.dart';
class StackService {
StackService(this._api, this._assetRepository);
final ApiService _api;
final IAssetRepository _assetRepository;
Future<StackResponseDto?> getStack(String stackId) async {
try {
return _api.stacksApi.getStack(stackId);
} catch (error) {
debugPrint("Error while fetching stack: $error");
}
return null;
}
Future<StackResponseDto?> createStack(List<String> assetIds) async {
try {
return _api.stacksApi.createStack(
StackCreateDto(assetIds: assetIds),
);
} catch (error) {
debugPrint("Error while creating stack: $error");
}
return null;
}
Future<StackResponseDto?> updateStack(
String stackId,
String primaryAssetId,
) async {
try {
return await _api.stacksApi.updateStack(
stackId,
StackUpdateDto(primaryAssetId: primaryAssetId),
);
} catch (error) {
debugPrint("Error while updating stack children: $error");
}
return null;
}
Future<void> deleteStack(String stackId, List<Asset> assets) async {
try {
await _api.stacksApi.deleteStack(stackId);
// Update local database to trigger rerendering
final List<Asset> removeAssets = [];
for (final asset in assets) {
asset.stackId = null;
asset.stackPrimaryAssetId = null;
asset.stackCount = 0;
removeAssets.add(asset);
}
await _assetRepository.updateAll(removeAssets);
} catch (error) {
debugPrint("Error while deleting stack: $error");
}
}
}
final stackServiceProvider = Provider(
(ref) => StackService(
ref.watch(apiServiceProvider),
ref.watch(assetRepositoryProvider),
),
);