fix: .cloud Platzhalter werden bei Server-Aenderung aktualisiert

Vorher: Platzhalter wurde nur erstellt wenn er nicht existierte.
Wenn sich die Datei auf dem Server aenderte (neue Groesse, neuer
Checksum), blieb der Platzhalter mit den alten Metadaten.

Jetzt: Bei jedem Sync wird der Checksum im Platzhalter mit dem
Server-Checksum verglichen. Bei Unterschied -> Platzhalter neu
schreiben mit aktueller Groesse, Checksum und Datum.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Stefan Hacker 2026-04-12 02:43:09 +02:00
parent b6afc05148
commit 0714d96668
1 changed files with 14 additions and 3 deletions

View File

@ -154,9 +154,18 @@ impl SyncEngine {
continue;
}
// Create .cloud placeholder
// Create or update .cloud placeholder
let cloud_path = local_dir.join(format!("{}.cloud", entry.name));
if !cloud_path.exists() {
let needs_update = if cloud_path.exists() {
// Check if server version changed
if let Ok(content) = std::fs::read_to_string(&cloud_path) {
if let Ok(old) = serde_json::from_str::<CloudPlaceholder>(&content) {
old.checksum != entry.checksum.as_deref().unwrap_or("")
} else { true }
} else { true }
} else { true };
if needs_update {
let placeholder = CloudPlaceholder {
id: entry.id,
name: entry.name.clone(),
@ -167,7 +176,9 @@ impl SyncEngine {
};
if let Ok(json) = serde_json::to_string_pretty(&placeholder) {
std::fs::write(&cloud_path, json).ok();
log.push(format!("Platzhalter: {}.cloud", entry.name));
if !cloud_path.exists() {
log.push(format!("Platzhalter: {}.cloud", entry.name));
}
}
}
}