zoodex/src/persist/data_manager.rs
Reinout Meliesie 4c2ad03a0e
Implement Clippy suggestions
They were actually sensible for once???
2026-01-22 15:59:51 +01:00

79 lines
2 KiB
Rust

use std::env::var_os;
use std::sync::OnceLock;
use gtk4::gdk::Texture;
use crate::persist::common::concat_os_str;
use crate::persist::file_system_manager::FileSystemManager;
use crate::persist::sqlite_manager::SqliteManager;
use crate::views::overview::{FilmOverview, SeriesOverview};
static SQLITE_MANAGER: OnceLock<SqliteManager> = OnceLock::new();
static FILE_SYSTEM_MANAGER: OnceLock<FileSystemManager> = OnceLock::new();
macro_rules! sqlite_manager {
() => {
SQLITE_MANAGER
.get()
.expect("SQLite manager should be initialized")
};
}
macro_rules! fs_manager {
() => {
FILE_SYSTEM_MANAGER
.get()
.expect("File system manager should be initialized")
};
}
pub struct DataManager {}
impl DataManager {
pub async fn init() -> Result<(), DataManagerError> {
let data_dir = if let Some(xdg_home_data_dir) = var_os("XDG_DATA_HOME") {
concat_os_str!(xdg_home_data_dir, "/zoodex")
} else {
let home_dir = var_os("HOME").ok_or(DataManagerError::NoHomeDir)?;
concat_os_str!(home_dir, "/.local/share/zoodex")
};
let sqlite_manager = SqliteManager::new(data_dir.as_os_str()).await?;
SQLITE_MANAGER
.set(sqlite_manager)
.expect("SQLite manager should not already be initialized");
let fs_manager = FileSystemManager::new(data_dir.as_os_str());
FILE_SYSTEM_MANAGER
.set(fs_manager)
.expect("File system manager should not already be initialized");
Ok(())
}
pub async fn films_overview() -> Result<Vec<FilmOverview>, DataManagerError> {
sqlite_manager!().films_overview().await
}
pub async fn series_overview() -> Result<Vec<SeriesOverview>, DataManagerError> {
sqlite_manager!().series_overview().await
}
pub async fn poster(uuid: &str) -> Result<Option<Texture>, DataManagerError> {
fs_manager!().poster(uuid).await
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum DataManagerError {
NoHomeDir,
CannotOpenDB,
UnknownDBError,
UnknownTextureError,
}