use crate::config::Config;
use rusqlite::{Connection, OpenFlags, Result};
use std::error::Error;
use std::fs;
use std::path::Path;
pub mod dump_db;
pub mod query;
pub mod save_path;
pub mod tracker_url;
pub struct DB {}
impl DB {
pub fn backup(config: &Config) -> Result<(), Box<dyn Error>> {
if !config.disable_backup {
println!("Creating database backup...");
let datetime = chrono::offset::Local::now().format("%Y%m%d%H%M%S");
let backup_file =
Path::new(&config.qb_directory).join(format!("torrents.db-{datetime}.bak"));
fs::copy(&config.db_file, &backup_file)?;
if config.verbose {
println!("Backup saved to: {:?}", backup_file.display());
}
} else if config.verbose {
println!("Database backup disabled");
}
Ok(())
}
pub fn connect(config: &Config) -> Result<Connection, Box<dyn Error>> {
println!("Opening database...");
Ok(Connection::open_with_flags(
&config.db_file,
OpenFlags::SQLITE_OPEN_READ_WRITE
| OpenFlags::SQLITE_OPEN_URI
| OpenFlags::SQLITE_OPEN_NO_MUTEX,
)?)
}
}