aboutsummaryrefslogtreecommitdiffstats
path: root/src/config
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-10-14 14:56:29 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-10-14 14:56:29 +0200
commit6c9286857ef8b314962b67f4a16a66e8c35531bc (patch)
tree9ced4485ec38b39f82cba258c06321a21c40000a /src/config
parentbuild(Cargo.toml): Add further lints (diff)
downloadyt-6c9286857ef8b314962b67f4a16a66e8c35531bc.zip
refactor(treewide): Combine the separate crates in one workspace
Diffstat (limited to 'src/config')
-rw-r--r--src/config/default.rs102
-rw-r--r--src/config/definitions.rs59
-rw-r--r--src/config/file_system.rs112
-rw-r--r--src/config/mod.rs62
4 files changed, 0 insertions, 335 deletions
diff --git a/src/config/default.rs b/src/config/default.rs
deleted file mode 100644
index 59063f5..0000000
--- a/src/config/default.rs
+++ /dev/null
@@ -1,102 +0,0 @@
-// yt - A fully featured command line YouTube client
-//
-// Copyright (C) 2024 Benedikt Peetz <benedikt.peetz@b-peetz.de>
-// SPDX-License-Identifier: GPL-3.0-or-later
-//
-// This file is part of Yt.
-//
-// You should have received a copy of the License along with this program.
-// If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
-
-use std::path::PathBuf;
-
-use anyhow::{Context, Result};
-
-fn get_runtime_path(name: &'static str) -> Result<PathBuf> {
- let xdg_dirs = xdg::BaseDirectories::with_prefix(PREFIX)?;
- xdg_dirs
- .place_runtime_file(name)
- .with_context(|| format!("Failed to place runtime file: '{}'", name))
-}
-fn get_data_path(name: &'static str) -> Result<PathBuf> {
- let xdg_dirs = xdg::BaseDirectories::with_prefix(PREFIX)?;
- xdg_dirs
- .place_data_file(name)
- .with_context(|| format!("Failed to place data file: '{}'", name))
-}
-fn get_config_path(name: &'static str) -> Result<PathBuf> {
- let xdg_dirs = xdg::BaseDirectories::with_prefix(PREFIX)?;
- xdg_dirs
- .place_config_file(name)
- .with_context(|| format!("Failed to place config file: '{}'", name))
-}
-
-pub(super) fn create_path(path: PathBuf) -> Result<PathBuf> {
- if !path.exists() {
- if let Some(parent) = path.parent() {
- std::fs::create_dir_all(parent)
- .with_context(|| format!("Failed to create the '{}' directory", path.display()))?
- }
- }
-
- Ok(path)
-}
-
-pub const PREFIX: &str = "yt";
-
-pub mod select {
- pub fn playback_speed() -> f64 {
- 2.7
- }
- pub fn subtitle_langs() -> &'static str {
- ""
- }
-}
-
-pub mod watch {
- pub fn local_comments_length() -> usize {
- 1000
- }
-}
-
-pub mod update {
- pub fn max_backlog() -> u32 {
- 20
- }
-}
-
-pub mod paths {
- use std::{env::temp_dir, path::PathBuf};
-
- use anyhow::Result;
-
- use super::{create_path, get_config_path, get_data_path, get_runtime_path, PREFIX};
-
- // We download to the temp dir to avoid taxing the disk
- pub fn download_dir() -> Result<PathBuf> {
- let temp_dir = temp_dir();
-
- create_path(temp_dir.join(PREFIX))
- }
- pub fn mpv_config_path() -> Result<PathBuf> {
- get_config_path("mpv.conf")
- }
- pub fn mpv_input_path() -> Result<PathBuf> {
- get_config_path("mpv.input.conf")
- }
- pub fn database_path() -> Result<PathBuf> {
- get_data_path("videos.sqlite")
- }
- pub fn config_path() -> Result<PathBuf> {
- get_config_path("config.toml")
- }
- pub fn last_selection_path() -> Result<PathBuf> {
- get_runtime_path("selected.yts")
- }
-}
-
-pub mod download {
- pub fn max_cache_size() -> &'static str {
- "3 GiB"
- }
-}
diff --git a/src/config/definitions.rs b/src/config/definitions.rs
deleted file mode 100644
index d37e6da..0000000
--- a/src/config/definitions.rs
+++ /dev/null
@@ -1,59 +0,0 @@
-// yt - A fully featured command line YouTube client
-//
-// Copyright (C) 2024 Benedikt Peetz <benedikt.peetz@b-peetz.de>
-// SPDX-License-Identifier: GPL-3.0-or-later
-//
-// This file is part of Yt.
-//
-// You should have received a copy of the License along with this program.
-// If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
-
-use std::path::PathBuf;
-
-use serde::Deserialize;
-
-#[derive(Debug, Deserialize, PartialEq)]
-#[serde(deny_unknown_fields)]
-pub struct ConfigFile {
- pub select: Option<SelectConfig>,
- pub watch: Option<WatchConfig>,
- pub paths: Option<PathsConfig>,
- pub download: Option<DownloadConfig>,
- pub update: Option<UpdateConfig>,
-}
-
-#[derive(Debug, Deserialize, PartialEq, Clone, Copy)]
-#[serde(deny_unknown_fields)]
-pub struct UpdateConfig {
- pub max_backlog: Option<u32>,
-}
-
-#[derive(Debug, Deserialize, PartialEq, Clone)]
-#[serde(deny_unknown_fields)]
-pub struct DownloadConfig {
- /// This will then be converted to an u64
- pub max_cache_size: Option<String>,
-}
-
-#[derive(Debug, Deserialize, PartialEq, Clone)]
-#[serde(deny_unknown_fields)]
-pub struct SelectConfig {
- pub playback_speed: Option<f64>,
- pub subtitle_langs: Option<String>,
-}
-
-#[derive(Debug, Deserialize, PartialEq, Clone, Copy)]
-#[serde(deny_unknown_fields)]
-pub struct WatchConfig {
- pub local_comments_length: Option<usize>,
-}
-
-#[derive(Debug, Deserialize, PartialEq, Clone)]
-#[serde(deny_unknown_fields)]
-pub struct PathsConfig {
- pub download_dir: Option<PathBuf>,
- pub mpv_config_path: Option<PathBuf>,
- pub mpv_input_path: Option<PathBuf>,
- pub database_path: Option<PathBuf>,
- pub last_selection_path: Option<PathBuf>,
-}
diff --git a/src/config/file_system.rs b/src/config/file_system.rs
deleted file mode 100644
index 5751583..0000000
--- a/src/config/file_system.rs
+++ /dev/null
@@ -1,112 +0,0 @@
-// yt - A fully featured command line YouTube client
-//
-// Copyright (C) 2024 Benedikt Peetz <benedikt.peetz@b-peetz.de>
-// SPDX-License-Identifier: GPL-3.0-or-later
-//
-// This file is part of Yt.
-//
-// You should have received a copy of the License along with this program.
-// If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
-
-use crate::config::{DownloadConfig, PathsConfig, SelectConfig, WatchConfig};
-
-use super::{
- default::{create_path, download, paths, select, update, watch},
- Config, UpdateConfig,
-};
-
-use std::{fs::read_to_string, path::PathBuf};
-
-use anyhow::{Context, Result};
-use bytes::Bytes;
-
-macro_rules! get {
- ($default:path, $config:expr, $key_one:ident, $($keys:ident),*) => {
- {
- let maybe_value = get!{@option $config, $key_one, $($keys),*};
- if let Some(value) = maybe_value {
- value
- } else {
- $default().to_owned()
- }
- }
- };
-
- (@option $config:expr, $key_one:ident, $($keys:ident),*) => {
- if let Some(key) = $config.$key_one.clone() {
- get!{@option key, $($keys),*}
- } else {
- None
- }
- };
- (@option $config:expr, $key_one:ident) => {
- $config.$key_one
- };
-
- (@path_if_none $config:expr, $option_default:expr, $default:path, $key_one:ident, $($keys:ident),*) => {
- {
- let maybe_download_dir: Option<PathBuf> =
- get! {@option $config, $key_one, $($keys),*};
-
- let down_dir = if let Some(dir) = maybe_download_dir {
- PathBuf::from(dir)
- } else {
- if let Some(path) = $option_default {
- path
- } else {
- $default()
- .with_context(|| format!("Failed to get default path for: '{}.{}'", stringify!($key_one), stringify!($($keys),*)))?
- }
- };
- create_path(down_dir)?
- }
- };
- (@path $config:expr, $default:path, $key_one:ident, $($keys:ident),*) => {
- get! {@path_if_none $config, None, $default, $key_one, $($keys),*}
- };
-}
-
-impl Config {
- pub fn from_config_file(
- db_path: Option<PathBuf>,
- config_path: Option<PathBuf>,
- ) -> Result<Self> {
- let config_file_path = config_path
- .map(Ok)
- .unwrap_or_else(|| -> Result<_> { paths::config_path() })?;
-
- let config: super::definitions::ConfigFile =
- toml::from_str(&read_to_string(config_file_path).unwrap_or("".to_owned()))
- .context("Failed to parse the config file as toml")?;
-
- Ok(Self {
- select: SelectConfig {
- playback_speed: get! {select::playback_speed, config, select, playback_speed},
- subtitle_langs: get! {select::subtitle_langs, config, select, subtitle_langs},
- },
- watch: WatchConfig {
- local_comments_length: get! {watch::local_comments_length, config, watch, local_comments_length},
- },
- update: UpdateConfig {
- max_backlog: get! {update::max_backlog, config, update, max_backlog},
- },
- paths: PathsConfig {
- download_dir: get! {@path config, paths::download_dir, paths, download_dir},
- mpv_config_path: get! {@path config, paths::mpv_config_path, paths, mpv_config_path},
- mpv_input_path: get! {@path config, paths::mpv_input_path, paths, mpv_input_path},
- database_path: get! {@path_if_none config, db_path, paths::database_path, paths, database_path},
- last_selection_path: get! {@path config, paths::last_selection_path, paths, last_selection_path},
- },
- download: DownloadConfig {
- max_cache_size: {
- let bytes_str: String =
- get! {download::max_cache_size, config, download, max_cache_size};
- let number: Bytes = bytes_str
- .parse()
- .context("Failed to parse max_cache_size")?;
- number
- },
- },
- })
- }
-}
diff --git a/src/config/mod.rs b/src/config/mod.rs
deleted file mode 100644
index ea40055..0000000
--- a/src/config/mod.rs
+++ /dev/null
@@ -1,62 +0,0 @@
-// yt - A fully featured command line YouTube client
-//
-// Copyright (C) 2024 Benedikt Peetz <benedikt.peetz@b-peetz.de>
-// SPDX-License-Identifier: GPL-3.0-or-later
-//
-// This file is part of Yt.
-//
-// You should have received a copy of the License along with this program.
-// If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
-
-use std::path::PathBuf;
-
-use bytes::Bytes;
-use serde::Serialize;
-
-mod default;
-mod definitions;
-pub mod file_system;
-
-#[derive(Serialize)]
-pub struct Config {
- pub select: SelectConfig,
- pub watch: WatchConfig,
- pub paths: PathsConfig,
- pub download: DownloadConfig,
- pub update: UpdateConfig,
-}
-#[derive(Serialize)]
-pub struct UpdateConfig {
- pub max_backlog: u32,
-}
-#[derive(Serialize)]
-pub struct DownloadConfig {
- pub max_cache_size: Bytes,
-}
-#[derive(Serialize)]
-pub struct SelectConfig {
- pub playback_speed: f64,
- pub subtitle_langs: String,
-}
-#[derive(Serialize)]
-pub struct WatchConfig {
- pub local_comments_length: usize,
-}
-#[derive(Serialize)]
-pub struct PathsConfig {
- pub download_dir: PathBuf,
- pub mpv_config_path: PathBuf,
- pub mpv_input_path: PathBuf,
- pub database_path: PathBuf,
- pub last_selection_path: PathBuf,
-}
-
-// pub fn status_path() -> anyhow::Result<PathBuf> {
-// const STATUS_PATH: &str = "running.info.json";
-// get_runtime_path(STATUS_PATH)
-// }
-
-// pub fn subscriptions() -> anyhow::Result<PathBuf> {
-// const SUBSCRIPTIONS: &str = "subscriptions.json";
-// get_data_path(SUBSCRIPTIONS)
-// }