botserver/web/desktop/ADD_TO_BACKEND.md
Rodrigo Rodriguez (Pragmatismo) d0563391b6 ``` Add comprehensive email account management and user settings
interface

Implements multi-user authentication system with email account
management, profile settings, drive configuration, and security
controls. Includes database migrations for user accounts, email
credentials, preferences, and session management. Frontend provides
intuitive UI for adding IMAP/SMTP accounts with provider presets and
connection testing. Backend supports per-user vector databases for email
and file indexing with Zitadel SSO integration and automatic workspace
initialization. ```
2025-11-21 09:28:35 -03:00

2.5 KiB

Add These 2 Commands to drive.rs

Your drive.rs already has list_files, upload_file, and create_folder.

Just add these 2 commands for the text editor to work:

1. Read File Command

#[tauri::command]
pub fn read_file(path: String) -> Result<String, String> {
    use std::fs;
    
    let file_path = Path::new(&path);
    
    if !file_path.exists() {
        return Err("File does not exist".into());
    }
    
    if !file_path.is_file() {
        return Err("Path is not a file".into());
    }
    
    // Read file content as UTF-8 string
    fs::read_to_string(file_path)
        .map_err(|e| format!("Failed to read file: {}", e))
}

2. Write File Command

#[tauri::command]
pub fn write_file(path: String, content: String) -> Result<(), String> {
    use std::fs;
    use std::io::Write;
    
    let file_path = Path::new(&path);
    
    // Create parent directories if they don't exist
    if let Some(parent) = file_path.parent() {
        if !parent.exists() {
            fs::create_dir_all(parent)
                .map_err(|e| format!("Failed to create directories: {}", e))?;
        }
    }
    
    // Write content to file
    let mut file = fs::File::create(file_path)
        .map_err(|e| format!("Failed to create file: {}", e))?;
    
    file.write_all(content.as_bytes())
        .map_err(|e| format!("Failed to write file: {}", e))?;
    
    Ok(())
}
#[tauri::command]
pub fn delete_file(path: String) -> Result<(), String> {
    use std::fs;
    
    let file_path = Path::new(&path);
    
    if !file_path.exists() {
        return Err("Path does not exist".into());
    }
    
    if file_path.is_dir() {
        fs::remove_dir_all(file_path)
            .map_err(|e| format!("Failed to delete directory: {}", e))?;
    } else {
        fs::remove_file(file_path)
            .map_err(|e| format!("Failed to delete file: {}", e))?;
    }
    
    Ok(())
}

Register in main.rs

Add to your invoke_handler:

.invoke_handler(tauri::generate_handler![
    // ... existing commands
    ui::drive::read_file,
    ui::drive::write_file,
    ui::drive::delete_file,  // optional
])

That's it!

The frontend Drive module is already configured to use these commands via:

  • window.__TAURI__.invoke("read_file", { path })
  • window.__TAURI__.invoke("write_file", { path, content })
  • window.__TAURI__.invoke("delete_file", { path })

The UI will automatically detect if Tauri is available and use the backend, or fall back to demo mode.