fix: Differenzierte Sync-Aktivitätsmeldungen
- 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
This commit is contained in:
parent
aafb9ddd64
commit
fdc016c786
2 changed files with 22 additions and 4 deletions
|
|
@ -92,7 +92,7 @@ internal class SettingsViewModel @Inject constructor(
|
||||||
showActivity(SyncActivityMessage.Error(event.message))
|
showActivity(SyncActivityMessage.Error(event.message))
|
||||||
}
|
}
|
||||||
is WebSocketEvent.Connected -> {
|
is WebSocketEvent.Connected -> {
|
||||||
pullSync(fullSync = false, silent = true)
|
pullSync(fullSync = false, isInitialConnect = true)
|
||||||
}
|
}
|
||||||
else -> {}
|
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 {
|
viewModelScope.launch {
|
||||||
_uiState.update { it.copy(isSyncing = true) }
|
_uiState.update { it.copy(isSyncing = true) }
|
||||||
if (!silent) showActivity(SyncActivityMessage.ReceivingUpdate)
|
showActivity(
|
||||||
|
if (isInitialConnect) SyncActivityMessage.CheckingForChanges
|
||||||
|
else SyncActivityMessage.ReceivingUpdate
|
||||||
|
)
|
||||||
try {
|
try {
|
||||||
val since = if (fullSync) null else settingsRepository.getStringOrNull(StringKey.SyncLastTimestamp)?.toLongOrNull()
|
val since = if (fullSync) null else settingsRepository.getStringOrNull(StringKey.SyncLastTimestamp)?.toLongOrNull()
|
||||||
val result = syncService.downloadInventory(since)
|
val result = syncService.downloadInventory(since)
|
||||||
|
|
@ -452,7 +455,14 @@ internal class SettingsViewModel @Inject constructor(
|
||||||
lastSyncTime = formatTimestamp(now)
|
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 ->
|
onFailure = { e ->
|
||||||
_uiState.update { it.copy(isSyncing = false) }
|
_uiState.update { it.copy(isSyncing = false) }
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,14 @@ internal sealed interface SyncActivityMessage {
|
||||||
override val text = "Empfange Inventar-Update…"
|
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 {
|
data object SendingChange : SyncActivityMessage {
|
||||||
override val text = "Sende Änderung…"
|
override val text = "Sende Änderung…"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue