import 'package:drift/drift.dart'; import 'package:flutter/foundation.dart'; import 'package:immich_mobile/domain/interfaces/sync_stream.interface.dart'; import 'package:immich_mobile/extensions/string_extensions.dart'; import 'package:immich_mobile/infrastructure/entities/partner.entity.drift.dart'; import 'package:immich_mobile/infrastructure/entities/user.entity.drift.dart'; import 'package:immich_mobile/infrastructure/repositories/db.repository.dart'; import 'package:logging/logging.dart'; import 'package:openapi/api.dart'; class DriftSyncStreamRepository extends DriftDatabaseRepository implements ISyncStreamRepository { final Logger _logger = Logger('DriftSyncStreamRepository'); final Drift _db; DriftSyncStreamRepository(super.db) : _db = db; @override Future deleteUsersV1(Iterable data) async { try { await _db.batch((batch) { for (final user in data) { batch.delete( _db.userEntity, UserEntityCompanion(id: Value(user.userId.toUuidByte())), ); } }); } catch (error, stack) { _logger.severe('Error while processing SyncUserDeleteV1', error, stack); rethrow; } } @override Future updateUsersV1(Iterable data) async { try { await _db.batch((batch) { for (final user in data) { final companion = UserEntityCompanion( name: Value(user.name), email: Value(user.email), ); batch.insert( _db.userEntity, companion.copyWith(id: Value(user.id.toUuidByte())), onConflict: DoUpdate((_) => companion), ); } }); } catch (error, stack) { _logger.severe('Error while processing SyncUserV1', error, stack); rethrow; } } @override Future deletePartnerV1(Iterable data) async { try { await _db.batch((batch) { for (final partner in data) { batch.delete( _db.partnerEntity, PartnerEntityCompanion( sharedById: Value(partner.sharedById.toUuidByte()), sharedWithId: Value(partner.sharedWithId.toUuidByte()), ), ); } }); } catch (e, s) { _logger.severe('Error while processing SyncPartnerDeleteV1', e, s); rethrow; } } @override Future updatePartnerV1(Iterable data) async { try { await _db.batch((batch) { for (final partner in data) { final companion = PartnerEntityCompanion(inTimeline: Value(partner.inTimeline)); batch.insert( _db.partnerEntity, companion.copyWith( sharedById: Value(partner.sharedById.toUuidByte()), sharedWithId: Value(partner.sharedWithId.toUuidByte()), ), onConflict: DoUpdate((_) => companion), ); } }); } catch (e, s) { _logger.severe('Error while processing SyncPartnerV1', e, s); rethrow; } } // Assets @override Future updateAssetsV1(Iterable data) async { debugPrint("updateAssetsV1 - ${data.length}"); } @override Future deleteAssetsV1(Iterable data) async { debugPrint("deleteAssetsV1 - ${data.length}"); } // Partner Assets @override Future updatePartnerAssetsV1(Iterable data) async { debugPrint("updatePartnerAssetsV1 - ${data.length}"); } @override Future deletePartnerAssetsV1(Iterable data) async { debugPrint("deletePartnerAssetsV1 - ${data.length}"); } // EXIF @override Future updateAssetsExifV1(Iterable data) async { debugPrint("updateAssetsExifV1 - ${data.length}"); } @override Future updatePartnerAssetsExifV1(Iterable data) async { debugPrint("updatePartnerAssetsExifV1 - ${data.length}"); } }