From fdc016c78653585e1f9230ef92f74ab2574d34fc Mon Sep 17 00:00:00 2001 From: Jens Reinemann Date: Sun, 17 May 2026 20:27:49 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20Differenzierte=20Sync-Aktivit=C3=A4tsmel?= =?UTF-8?q?dungen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Neues SyncActivityMessage.CheckingForChanges 'Prüfe auf Änderungen…' wird beim initialen Catch-up nach Connect angezeigt (statt dem irreführenden 'Empfange Inventar-Update…') - Neues SyncActivityMessage.NoChanges 'Keine Änderungen' wird angezeigt wenn der initiale Sync keine Daten zurückliefert - Echter Server-Push (InventoryUpdated/FullSyncRequired) zeigt weiterhin 'Empfange Inventar-Update…' → jede echte Kommunikation bleibt sichtbar --- .../app/ui/settings/SettingsViewModel.kt | 18 ++++++++++++++---- .../app/ui/settings/SyncActivityMessage.kt | 8 ++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/de/bollwerk/app/ui/settings/SettingsViewModel.kt b/app/src/main/java/de/bollwerk/app/ui/settings/SettingsViewModel.kt index 523c543..fc31ac9 100644 --- a/app/src/main/java/de/bollwerk/app/ui/settings/SettingsViewModel.kt +++ b/app/src/main/java/de/bollwerk/app/ui/settings/SettingsViewModel.kt @@ -92,7 +92,7 @@ internal class SettingsViewModel @Inject constructor( showActivity(SyncActivityMessage.Error(event.message)) } is WebSocketEvent.Connected -> { - pullSync(fullSync = false, silent = true) + pullSync(fullSync = false, isInitialConnect = true) } else -> {} } @@ -432,10 +432,13 @@ internal class SettingsViewModel @Inject constructor( } } - fun pullSync(fullSync: Boolean = false, silent: Boolean = false) { + fun pullSync(fullSync: Boolean = false, isInitialConnect: Boolean = false) { viewModelScope.launch { _uiState.update { it.copy(isSyncing = true) } - if (!silent) showActivity(SyncActivityMessage.ReceivingUpdate) + showActivity( + if (isInitialConnect) SyncActivityMessage.CheckingForChanges + else SyncActivityMessage.ReceivingUpdate + ) try { val since = if (fullSync) null else settingsRepository.getStringOrNull(StringKey.SyncLastTimestamp)?.toLongOrNull() val result = syncService.downloadInventory(since) @@ -452,7 +455,14 @@ internal class SettingsViewModel @Inject constructor( lastSyncTime = formatTimestamp(now) ) } - showActivity(SyncActivityMessage.InventorySynced) + val hasChanges = inventoryDto.items.isNotEmpty() + || inventoryDto.deletedItemIds.isNotEmpty() + || inventoryDto.categories.isNotEmpty() + || inventoryDto.locations.isNotEmpty() + showActivity( + if (isInitialConnect && !hasChanges) SyncActivityMessage.NoChanges + else SyncActivityMessage.InventorySynced + ) }, onFailure = { e -> _uiState.update { it.copy(isSyncing = false) } diff --git a/app/src/main/java/de/bollwerk/app/ui/settings/SyncActivityMessage.kt b/app/src/main/java/de/bollwerk/app/ui/settings/SyncActivityMessage.kt index f0be3a9..ac11fb2 100644 --- a/app/src/main/java/de/bollwerk/app/ui/settings/SyncActivityMessage.kt +++ b/app/src/main/java/de/bollwerk/app/ui/settings/SyncActivityMessage.kt @@ -8,6 +8,14 @@ internal sealed interface SyncActivityMessage { override val text = "Empfange Inventar-Update…" } + data object CheckingForChanges : SyncActivityMessage { + override val text = "Prüfe auf Änderungen…" + } + + data object NoChanges : SyncActivityMessage { + override val text = "Keine Änderungen" + } + data object SendingChange : SyncActivityMessage { override val text = "Sende Änderung…" }