use std::path::PathBuf;
use serde::{Deserialize, Serialize};
use tokio::fs::read_to_string;
use tokio::fs::write;
const CACHE_ERROR: &str = "Failed to get cache directory.";
const FILE_NAME: &str = "fedora-update-feedback.ignored";
#[derive(Debug, Default, Deserialize, Serialize)]
pub struct IgnoreLists {
pub ignored_updates: Vec<String>,
pub ignored_packages: Vec<String>,
}
fn get_ignore_path() -> PathBuf {
let cache_dir = dirs::cache_dir().expect(CACHE_ERROR);
cache_dir.join(FILE_NAME)
}
pub async fn get_ignored() -> Result<IgnoreLists, String> {
let ignore_path = get_ignore_path();
let string = read_to_string(ignore_path).await.map_err(|error| error.to_string())?;
let contents: IgnoreLists = match serde_json::from_str(&string) {
Ok(json) => json,
Err(_) => IgnoreLists {
ignored_packages: Vec::new(),
ignored_updates: string.trim().split('\n').map(|i| i.to_string()).collect(),
},
};
Ok(contents)
}
pub async fn set_ignored(ignored: &IgnoreLists) -> Result<(), String> {
let ignore_path = get_ignore_path();
let contents = serde_json::to_string_pretty(ignored).map_err(|error| error.to_string())?;
write(ignore_path, contents).await.map_err(|error| error.to_string())?;
Ok(())
}