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:
@@ -154,9 +154,18 @@ impl SyncEngine {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create .cloud placeholder
|
// Create or update .cloud placeholder
|
||||||
let cloud_path = local_dir.join(format!("{}.cloud", entry.name));
|
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 {
|
let placeholder = CloudPlaceholder {
|
||||||
id: entry.id,
|
id: entry.id,
|
||||||
name: entry.name.clone(),
|
name: entry.name.clone(),
|
||||||
@@ -167,11 +176,13 @@ impl SyncEngine {
|
|||||||
};
|
};
|
||||||
if let Ok(json) = serde_json::to_string_pretty(&placeholder) {
|
if let Ok(json) = serde_json::to_string_pretty(&placeholder) {
|
||||||
std::fs::write(&cloud_path, json).ok();
|
std::fs::write(&cloud_path, json).ok();
|
||||||
|
if !cloud_path.exists() {
|
||||||
log.push(format!("Platzhalter: {}.cloud", entry.name));
|
log.push(format!("Platzhalter: {}.cloud", entry.name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Remove .cloud files for deleted server files
|
// Remove .cloud files for deleted server files
|
||||||
if let Ok(dir_entries) = std::fs::read_dir(local_dir) {
|
if let Ok(dir_entries) = std::fs::read_dir(local_dir) {
|
||||||
|
|||||||
Reference in New Issue
Block a user