diff --git a/src/server.rs b/src/server.rs index 532874e..bb19a93 100644 --- a/src/server.rs +++ b/src/server.rs @@ -829,6 +829,12 @@ async fn upload_file( let hex = format!("{:x}", hash); let file_uuid = hex.chars().take(32).collect::(); + // Clone values for database save (before move) + let file_uuid_clone = file_uuid.clone(); + let file_hash_clone = file_hash.clone(); + let filename_clone = filename.clone(); + let file_path_clone = file_path.clone(); + // Save to database (user-specific SQLite) let db_path = crate::filetree::FileTree::user_db_path(&user_id); let db_result = tokio::task::spawn_blocking(move || -> anyhow::Result<()> { @@ -844,8 +850,8 @@ async fn upload_file( "INSERT INTO file_registry (file_uuid, sha256, file_size, mime_type, registered_at) VALUES (?1, ?2, ?3, ?4, ?5)", rusqlite::params![ - &file_uuid, - &file_hash, + &file_uuid,file_uuid_clone, + &file_hash,file_hash_clone, file_size, "", // mime_type (optional) now @@ -856,7 +862,7 @@ async fn upload_file( conn.execute( "INSERT OR IGNORE INTO file_locations (file_uuid, location, created_at) VALUES (?1, ?2, ?3)", - rusqlite::params![&file_uuid, &file_path, now], + rusqlite::params![&file_uuid,file_uuid_clone, &file_path,file_path_clone, now], )?; // Create file node @@ -868,9 +874,9 @@ async fn upload_file( VALUES (?1, ?2, ?3, ?4, 'file', ?5, ?6, ?7)", rusqlite::params![ &node_id, - &filename, - &file_uuid, - &file_hash, + &filename,filename_clone, + &file_uuid,file_uuid_clone, + &file_hash,file_hash_clone, file_size, now, now @@ -1151,7 +1157,7 @@ async fn stream_file(Path(file_uuid): Path) -> impl IntoResponse { // Document conversion: Phase 1 (textutil/unzip) → Phase 2 (soffice/qlmanage) if crate::filetree::convert::is_document_ext(&ext) { if let Some((cached, mime)) = - crate::filetree::convert::get_cached_preview(&file_uuid, &ext) + crate::filetree::convert::get_cached_preview(&file_uuid,file_uuid_clone, &ext) { return Ok((cached.to_string_lossy().to_string(), mime.to_string())); } @@ -1296,7 +1302,7 @@ async fn add_file_location( let result = tokio::task::spawn_blocking(move || -> anyhow::Result { let conn = FileTree::open_user_db("demo")?; - FileTree::add_location(&conn, &file_uuid, &location, label.as_deref())?; + FileTree::add_location(&conn, &file_uuid,file_uuid_clone, &location, label.as_deref())?; Ok(serde_json::json!({"ok": true})) }) .await;