diff --git a/data/auth.sqlite b/data/auth.sqlite index 346595f..9101e32 100644 Binary files a/data/auth.sqlite and b/data/auth.sqlite differ diff --git a/markbase-core/src/server.rs b/markbase-core/src/server.rs index 43acfef..5a3b3c9 100644 --- a/markbase-core/src/server.rs +++ b/markbase-core/src/server.rs @@ -2750,6 +2750,9 @@ pub struct BackupConfigResponse { pub interval_hours: u64, pub max_snapshots: usize, pub auto_cleanup: bool, + pub compress: String, + pub encrypt: bool, + pub include_checksums: bool, } #[derive(Debug, Serialize, Deserialize)] @@ -2790,24 +2793,37 @@ async fn get_backup_stats_handler() -> Json { async fn get_backup_config_handler() -> Json { let scheduler = BACKUP_SCHEDULER.lock().unwrap(); let config = scheduler.get_config(); + let compress_name = match config.compress { + crate::vfs::VfsCompression::None => "none", + crate::vfs::VfsCompression::Lz4 => "lz4", + crate::vfs::VfsCompression::Zstd => "zstd", + }; Json(BackupConfigResponse { enabled: config.enabled, interval_hours: config.interval_hours, max_snapshots: config.max_snapshots, auto_cleanup: config.auto_cleanup, + compress: compress_name.to_string(), + encrypt: config.encrypt, + include_checksums: config.include_checksums, }) } async fn set_backup_config_handler(Json(config): Json) -> Json { let mut scheduler = BACKUP_SCHEDULER.lock().unwrap(); + let compress = match config.compress.as_str() { + "lz4" => crate::vfs::VfsCompression::Lz4, + "zstd" => crate::vfs::VfsCompression::Zstd, + _ => crate::vfs::VfsCompression::None, + }; let new_config = BackupScheduleConfig { enabled: config.enabled, interval_hours: config.interval_hours, max_snapshots: config.max_snapshots, auto_cleanup: config.auto_cleanup, - compress: scheduler.get_config().compress.clone(), - encrypt: scheduler.get_config().encrypt, - include_checksums: scheduler.get_config().include_checksums, + compress, + encrypt: config.encrypt, + include_checksums: config.include_checksums, }; scheduler.set_config(new_config); Json(serde_json::json!({"success": true, "message": "Backup config updated"})) diff --git a/markbase-core/src/vfs/backup_scheduler.rs b/markbase-core/src/vfs/backup_scheduler.rs index 3246285..9308a9a 100644 --- a/markbase-core/src/vfs/backup_scheduler.rs +++ b/markbase-core/src/vfs/backup_scheduler.rs @@ -180,14 +180,28 @@ impl BackupScheduler { } fn copy_file(&self, src: &PathBuf, dst: &PathBuf) -> Result<(), VfsError> { + use super::compression::Compressor; + use super::VfsCompressionConfig; + let mut src_file = self.backend.open_file(src, &super::open_flags::OpenFlags::new().read())?; let data = src_file.read_all()?; + let final_data = if self.config.compress != super::VfsCompression::None { + let compressor = Compressor::new(VfsCompressionConfig { + algorithm: self.config.compress.clone(), + min_size: 1024, + level: 3, + }); + compressor.compress(&data)? + } else { + data + }; + let mut dst_file = self.backend.open_file( dst, &super::open_flags::OpenFlags::new().write().create().truncate(), )?; - dst_file.write_all(&data)?; + dst_file.write_all(&final_data)?; dst_file.flush()?; Ok(())