diff --git a/television/config/keybindings.rs b/television/config/keybindings.rs index 2615509..be56759 100644 --- a/television/config/keybindings.rs +++ b/television/config/keybindings.rs @@ -2,12 +2,12 @@ use crate::action::Action; use crate::event::{convert_raw_event_to_key, Key}; use crossterm::event::{KeyCode, KeyEvent, KeyModifiers}; use rustc_hash::FxHashMap; -use serde::{Deserialize, Deserializer}; +use serde::{Deserialize, Deserializer, Serialize}; use std::fmt::Display; use std::hash::Hash; use std::ops::{Deref, DerefMut}; -#[derive(Clone, Debug, Deserialize, PartialEq, Hash)] +#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Hash)] pub enum Binding { SingleKey(Key), MultipleKeys(Vec), @@ -28,7 +28,7 @@ impl Display for Binding { } } -#[derive(Clone, Debug, Default, PartialEq)] +#[derive(Clone, Debug, Default, PartialEq, Serialize)] pub struct KeyBindings(pub FxHashMap); impl From for KeyBindings diff --git a/television/config/mod.rs b/television/config/mod.rs index a61e5de..fead734 100644 --- a/television/config/mod.rs +++ b/television/config/mod.rs @@ -10,7 +10,7 @@ use directories::ProjectDirs; pub use keybindings::merge_keybindings; pub use keybindings::{parse_key, Binding, KeyBindings}; use previewers::PreviewersConfig; -use serde::Deserialize; +use serde::{Deserialize, Serialize}; use shell_integration::ShellIntegrationConfig; pub use themes::Theme; use tracing::{debug, warn}; @@ -25,7 +25,7 @@ mod ui; const DEFAULT_CONFIG: &str = include_str!("../../.config/config.toml"); #[allow(dead_code, clippy::module_name_repetitions)] -#[derive(Clone, Debug, Deserialize, Default, PartialEq)] +#[derive(Clone, Debug, Deserialize, Default, PartialEq, Serialize)] #[serde(deny_unknown_fields)] pub struct AppConfig { #[serde(default = "get_data_dir")] @@ -48,7 +48,7 @@ impl Hash for AppConfig { } #[allow(dead_code)] -#[derive(Clone, Debug, Deserialize, Default, PartialEq, Hash)] +#[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq, Hash)] #[serde(deny_unknown_fields)] pub struct Config { /// General application configuration @@ -128,7 +128,10 @@ impl Config { let final_cfg = Self::merge_user_with_default(default_config, user_cfg); - debug!("Config: {:?}", final_cfg); + debug!( + "Configuration: \n{}", + toml::to_string(&final_cfg).unwrap() + ); Ok(final_cfg) } else { // otherwise, create the default configuration file @@ -209,10 +212,8 @@ pub fn get_data_dir() -> PathBuf { }); let directory = if let Some(s) = data_folder { - debug!("Using data directory: {:?}", s); s } else if let Some(proj_dirs) = project_directory() { - debug!("Falling back to default data dir"); proj_dirs.data_local_dir().to_path_buf() } else { PathBuf::from("../../../../..").join(".data") @@ -233,20 +234,17 @@ pub fn get_config_dir() -> PathBuf { .filter(|p| p.is_absolute()) }); let directory = if let Some(s) = config_dir { - debug!("Config directory: {:?}", s); s } else if cfg!(unix) { // default to ~/.config/television for unix systems if let Some(base_dirs) = directories::BaseDirs::new() { let cfg_dir = base_dirs.home_dir().join(".config").join("television"); - debug!("Config directory: {:?}", cfg_dir); cfg_dir } else { PathBuf::from("../../../../..").join(".config") } } else if let Some(proj_dirs) = project_directory() { - debug!("Falling back to default config dir"); proj_dirs.config_local_dir().to_path_buf() } else { PathBuf::from("../../../../..").join("../../../../../.config") diff --git a/television/config/previewers.rs b/television/config/previewers.rs index f89b9e9..d891232 100644 --- a/television/config/previewers.rs +++ b/television/config/previewers.rs @@ -1,7 +1,7 @@ use crate::preview::{previewers, PreviewerConfig}; -use serde::Deserialize; +use serde::{Deserialize, Serialize}; -#[derive(Clone, Debug, Deserialize, Default, PartialEq, Hash)] +#[derive(Clone, Debug, Deserialize, Serialize, Default, PartialEq, Hash)] pub struct PreviewersConfig { #[serde(default)] pub basic: BasicPreviewerConfig, @@ -17,10 +17,10 @@ impl From for PreviewerConfig { } } -#[derive(Clone, Debug, Deserialize, Default, PartialEq, Hash)] +#[derive(Clone, Debug, Deserialize, Serialize, Default, PartialEq, Hash)] pub struct BasicPreviewerConfig {} -#[derive(Clone, Debug, Deserialize, PartialEq, Hash)] +#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Hash)] #[serde(default)] pub struct FilePreviewerConfig { //pub max_file_size: u64, @@ -36,5 +36,5 @@ impl Default for FilePreviewerConfig { } } -#[derive(Clone, Debug, Deserialize, Default, PartialEq, Hash)] +#[derive(Clone, Debug, Deserialize, Serialize, Default, PartialEq, Hash)] pub struct EnvVarPreviewerConfig {} diff --git a/television/config/shell_integration.rs b/television/config/shell_integration.rs index e85481a..c75c849 100644 --- a/television/config/shell_integration.rs +++ b/television/config/shell_integration.rs @@ -4,9 +4,9 @@ use crate::config::parse_key; use crate::event::Key; use crate::utils::hashmaps; use rustc_hash::FxHashMap; -use serde::Deserialize; +use serde::{Deserialize, Serialize}; -#[derive(Clone, Debug, Deserialize, Default, PartialEq)] +#[derive(Clone, Debug, Deserialize, Serialize, Default, PartialEq)] #[serde(default)] pub struct ShellIntegrationConfig { /// DEPRECATED: This is a legacy configuration option that is no longer used. diff --git a/television/config/ui.rs b/television/config/ui.rs index a9e08f2..d0b9324 100644 --- a/television/config/ui.rs +++ b/television/config/ui.rs @@ -1,4 +1,4 @@ -use serde::Deserialize; +use serde::{Deserialize, Serialize}; use crate::screen::layout::{InputPosition, PreviewTitlePosition}; @@ -6,7 +6,7 @@ use super::themes::DEFAULT_THEME; const DEFAULT_UI_SCALE: u16 = 100; -#[derive(Clone, Debug, Deserialize, PartialEq, Hash)] +#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Hash)] #[serde(default)] pub struct UiConfig { pub use_nerd_font_icons: bool, diff --git a/television/event.rs b/television/event.rs index 842a94a..8727feb 100644 --- a/television/event.rs +++ b/television/event.rs @@ -15,7 +15,7 @@ use crossterm::event::{ }; use serde::{Deserialize, Serialize}; use tokio::{signal, sync::mpsc}; -use tracing::{debug, warn}; +use tracing::{debug, trace, warn}; #[derive(Debug, Clone, Copy)] pub enum Event { @@ -247,7 +247,7 @@ fn flush_resize_events(first_resize: (u16, u16)) -> ((u16, u16), (u16, u16)) { } pub fn convert_raw_event_to_key(event: KeyEvent) -> Key { - debug!("Raw event: {:?}", event); + trace!("Raw event: {:?}", event); if event.kind == KeyEventKind::Release { return Key::Null; } diff --git a/television/screen/layout.rs b/television/screen/layout.rs index 9197df0..c2daf5d 100644 --- a/television/screen/layout.rs +++ b/television/screen/layout.rs @@ -2,7 +2,7 @@ use std::fmt::Display; use ratatui::layout; use ratatui::layout::{Constraint, Direction, Rect}; -use serde::Deserialize; +use serde::{Deserialize, Serialize}; use crate::config::UiConfig; @@ -46,7 +46,9 @@ impl HelpBarLayout { } } -#[derive(Debug, Clone, Copy, Deserialize, Default, PartialEq, Hash)] +#[derive( + Debug, Clone, Copy, Deserialize, Serialize, Default, PartialEq, Hash, +)] pub enum InputPosition { #[serde(rename = "top")] #[default] @@ -64,7 +66,9 @@ impl Display for InputPosition { } } -#[derive(Debug, Clone, Copy, Deserialize, Default, PartialEq, Hash)] +#[derive( + Debug, Clone, Copy, Deserialize, Serialize, Default, PartialEq, Hash, +)] pub enum PreviewTitlePosition { #[serde(rename = "top")] #[default]