Add crsql changes metadata status

This commit is contained in:
Eric Wendland 2026-05-17 20:01:36 +02:00
commit 677945073b
8 changed files with 182 additions and 15 deletions

View file

@ -716,6 +716,7 @@ pub fn handle_request(
}
let path = std::fs::canonicalize(path)?;
let schema_metadata = geth_db::schema_metadata(&path)?;
let crsqlite_changes = geth_db::crsqlite_change_metadata(&path)?;
let resource_id = format!("resource:db:{name}");
let db_id = format!("db:{name}");
let resource = StoredResource {
@ -733,7 +734,7 @@ pub fn handle_request(
};
store.insert_db_resource(&stored)?;
Ok(ControlResponse::DbAdded {
db: db_resource_from_stored_with_schema(&stored, schema_metadata),
db: db_resource_from_stored_with_schema(&stored, schema_metadata, crsqlite_changes),
})
}
ControlRequest::DbStatus { name } => {
@ -910,17 +911,32 @@ fn stored_resource_to_descriptor(stored: StoredResource) -> Result<ResourceDescr
fn db_resource_from_stored(stored: &StoredDbResource) -> Result<DbResource, NodeError> {
let path = Path::new(&stored.path);
let metadata = path.metadata().ok();
let schema_metadata = if metadata.as_ref().is_some_and(std::fs::Metadata::is_file) {
geth_db::schema_metadata(path).unwrap_or_else(|error| format!("unavailable:{error}"))
let (schema_metadata, crsqlite_changes) = if metadata
.as_ref()
.is_some_and(std::fs::Metadata::is_file)
{
(
geth_db::schema_metadata(path).unwrap_or_else(|error| format!("unavailable:{error}")),
geth_db::crsqlite_change_metadata(path)
.unwrap_or_else(|error| geth_db::CrSqliteChangeMetadata::error(error.to_string())),
)
} else {
"unavailable:path-missing".to_owned()
(
"unavailable:path-missing".to_owned(),
geth_db::CrSqliteChangeMetadata::error("path-missing"),
)
};
Ok(db_resource_from_stored_with_schema(stored, schema_metadata))
Ok(db_resource_from_stored_with_schema(
stored,
schema_metadata,
crsqlite_changes,
))
}
fn db_resource_from_stored_with_schema(
stored: &StoredDbResource,
schema_metadata: String,
crsqlite_changes: geth_db::CrSqliteChangeMetadata,
) -> DbResource {
let path = Path::new(&stored.path);
let metadata = path.metadata().ok();
@ -932,6 +948,7 @@ fn db_resource_from_stored_with_schema(
path_exists: metadata.as_ref().is_some_and(std::fs::Metadata::is_file),
size_bytes: metadata.map(|metadata| metadata.len()),
schema_metadata,
crsqlite_changes,
sync_status: "local-only".to_owned(),
}
}