From 7246bcfc5bfe40a100019d100d25fb415fbf9daf Mon Sep 17 00:00:00 2001 From: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com> Date: Tue, 18 Mar 2025 00:09:57 +0530 Subject: [PATCH] pr changes --- mobile/analysis_options.yaml | 1 + .../domain/interfaces/sync_api.interface.dart | 5 ++- .../domain/services/sync_stream.service.dart | 5 +-- .../repositories/sync_api.repository.dart | 9 ++--- mobile/lib/utils/background_sync.dart | 36 ++++++++----------- 5 files changed, 22 insertions(+), 34 deletions(-) diff --git a/mobile/analysis_options.yaml b/mobile/analysis_options.yaml index f082c9185d..2d5a1a1bdd 100644 --- a/mobile/analysis_options.yaml +++ b/mobile/analysis_options.yaml @@ -94,6 +94,7 @@ custom_lint: - lib/repositories/*_api.repository.dart - lib/domain/models/sync/sync_event.model.dart - lib/{domain,infrastructure}/**/sync_stream.* + - lib/{domain,infrastructure}/**/sync_api.* - lib/infrastructure/repositories/*_api.repository.dart - lib/infrastructure/utils/*.converter.dart # acceptable exceptions for the time being diff --git a/mobile/lib/domain/interfaces/sync_api.interface.dart b/mobile/lib/domain/interfaces/sync_api.interface.dart index 095448f9c8..971107785e 100644 --- a/mobile/lib/domain/interfaces/sync_api.interface.dart +++ b/mobile/lib/domain/interfaces/sync_api.interface.dart @@ -1,9 +1,8 @@ import 'package:immich_mobile/domain/models/sync/sync_event.model.dart'; +import 'package:openapi/api.dart'; abstract interface class ISyncApiRepository { Future ack(List data); - Stream> watchUserSyncEvent(); - - Stream> watchPartnerSyncEvent(); + Stream> getSyncEvents(List type); } diff --git a/mobile/lib/domain/services/sync_stream.service.dart b/mobile/lib/domain/services/sync_stream.service.dart index ff946ec1e3..da0d156cdd 100644 --- a/mobile/lib/domain/services/sync_stream.service.dart +++ b/mobile/lib/domain/services/sync_stream.service.dart @@ -64,7 +64,8 @@ class SyncStreamService { Future syncUsers() async { _logger.info("Syncing User Changes"); - _userSyncSubscription = _syncApiRepository.watchUserSyncEvent().listen( + _userSyncSubscription = + _syncApiRepository.getSyncEvents([SyncRequestType.usersV1]).listen( _handleSyncEvents, onDone: () { _userSyncCompleter.complete(); @@ -77,7 +78,7 @@ class SyncStreamService { Future syncPartners() async { _logger.info("Syncing Partner Changes"); _partnerSyncSubscription = - _syncApiRepository.watchPartnerSyncEvent().listen( + _syncApiRepository.getSyncEvents([SyncRequestType.partnersV1]).listen( _handleSyncEvents, onDone: () { _partnerSyncCompleter.complete(); diff --git a/mobile/lib/infrastructure/repositories/sync_api.repository.dart b/mobile/lib/infrastructure/repositories/sync_api.repository.dart index c2c33b6b05..dd344e1a4c 100644 --- a/mobile/lib/infrastructure/repositories/sync_api.repository.dart +++ b/mobile/lib/infrastructure/repositories/sync_api.repository.dart @@ -14,13 +14,8 @@ class SyncApiRepository implements ISyncApiRepository { SyncApiRepository(this._api); @override - Stream> watchUserSyncEvent() { - return _getSyncStream(SyncStreamDto(types: [SyncRequestType.usersV1])); - } - - @override - Stream> watchPartnerSyncEvent() { - return _getSyncStream(SyncStreamDto(types: [SyncRequestType.partnersV1])); + Stream> getSyncEvents(List type) { + return _getSyncStream(SyncStreamDto(types: type)); } @override diff --git a/mobile/lib/utils/background_sync.dart b/mobile/lib/utils/background_sync.dart index 327daa3171..cec8d4f17d 100644 --- a/mobile/lib/utils/background_sync.dart +++ b/mobile/lib/utils/background_sync.dart @@ -7,37 +7,21 @@ import 'package:immich_mobile/providers/infrastructure/sync_stream.provider.dart import 'package:immich_mobile/utils/isolate.dart'; import 'package:logging/logging.dart'; -class _SyncStreamDriver { - final _userSyncCache = AsyncCache.ephemeral(); - final _partnerSyncCache = AsyncCache.ephemeral(); - - Future syncUsers() => _userSyncCache.fetch( - () async => runInIsolate( - (ref) => ref.read(syncStreamServiceProvider).syncUsers(), - ), - ); - - Future syncPartners() => _partnerSyncCache.fetch( - () async => runInIsolate( - (ref) => ref.read(syncStreamServiceProvider).syncPartners(), - ), - ); -} - class BackgroundSyncManager { final Logger _logger = Logger('BackgroundSyncManager'); Timer? _timer; final Duration _duration; // This allows us to keep synching in the background while allowing ondemand syncs - final _driver = _SyncStreamDriver(); + final _userSyncCache = AsyncCache.ephemeral(); + final _partnerSyncCache = AsyncCache.ephemeral(); BackgroundSyncManager({required Duration duration}) : _duration = duration; Timer _createTimer() { return Timer.periodic(_duration, (timer) async { _logger.info('Background sync started'); - await _driver.syncUsers(); - await _driver.syncPartners(); + await syncUsers(); + await syncPartners(); _logger.info('Background sync completed'); }); } @@ -53,6 +37,14 @@ class BackgroundSyncManager { _timer = null; } - Future syncUsers() => _driver.syncUsers(); - Future syncPartners() => _driver.syncPartners(); + Future syncUsers() => _userSyncCache.fetch( + () async => runInIsolate( + (ref) => ref.read(syncStreamServiceProvider).syncUsers(), + ), + ); + Future syncPartners() => _partnerSyncCache.fetch( + () async => runInIsolate( + (ref) => ref.read(syncStreamServiceProvider).syncPartners(), + ), + ); }