From 565283babb93a83c7dda68a588985b18dc8024e6 Mon Sep 17 00:00:00 2001 From: Alexandre Pasmantier <47638216+alexpasmantier@users.noreply.github.com> Date: Wed, 20 Nov 2024 21:32:23 +0100 Subject: [PATCH] chore(deps): shed off unessential dependencies (#52) --- Cargo.lock | 246 ++---------------- Cargo.toml | 26 +- build.rs | 9 +- .../television-previewers/src/previewers.rs | 6 +- .../src/previewers/directory.rs | 2 +- .../src/previewers/files.rs | 27 +- crates/television/action.rs | 5 +- crates/television/app.rs | 11 +- crates/television/config.rs | 1 - crates/television/config/keybindings.rs | 17 +- crates/television/config/styles.rs | 37 ++- crates/television/errors.rs | 4 +- crates/television/logging.rs | 2 - crates/television/television.rs | 10 +- crates/television/ui/metadata.rs | 14 +- 15 files changed, 110 insertions(+), 307 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 65e214d..a2bb27b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -134,7 +134,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn", ] [[package]] @@ -401,9 +401,6 @@ dependencies = [ "anstyle", "clap_lex", "strsim", - "terminal_size", - "unicase", - "unicode-width 0.2.0", ] [[package]] @@ -415,7 +412,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.87", + "syn", ] [[package]] @@ -706,7 +703,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.87", + "syn", ] [[package]] @@ -717,7 +714,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.87", + "syn", ] [[package]] @@ -747,7 +744,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.87", + "syn", ] [[package]] @@ -757,18 +754,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.87", -] - -[[package]] -name = "derive_deref" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcdbcee2d9941369faba772587a565f4f534e42cb8d17e5295871de730163b2b" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -780,12 +766,6 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "diff" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" - [[package]] name = "digest" version = "0.10.7" @@ -825,7 +805,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn", ] [[package]] @@ -971,95 +951,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "futures" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" - -[[package]] -name = "futures-executor" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" - -[[package]] -name = "futures-macro" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.87", -] - -[[package]] -name = "futures-sink" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" - -[[package]] -name = "futures-task" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" - -[[package]] -name = "futures-util" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - [[package]] name = "gag" version = "1.0.0" @@ -1802,7 +1693,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn", ] [[package]] @@ -1886,7 +1777,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b23a0c8dfe501baac4adf6ebbfa6eddf8f0c07f56b058cc1288017e32397846c" dependencies = [ "quote", - "syn 2.0.87", + "syn", ] [[package]] @@ -2349,7 +2240,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.87", + "syn", ] [[package]] @@ -2369,12 +2260,6 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - [[package]] name = "pkg-config" version = "0.3.31" @@ -2415,16 +2300,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" -[[package]] -name = "pretty_assertions" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" -dependencies = [ - "diff", - "yansi", -] - [[package]] name = "proc-macro2" version = "1.0.89" @@ -2691,7 +2566,7 @@ checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn", ] [[package]] @@ -2869,15 +2744,6 @@ version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8207e78455ffdf55661170876f88daf85356e4edd54e0a3dbc79586ca1e50cbe" -[[package]] -name = "strip-ansi-escapes" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55ff8ef943b384c414f54aefa961dd2bd853add74ec75e7ac74cf91dba62bcfa" -dependencies = [ - "vte", -] - [[package]] name = "strsim" version = "0.11.1" @@ -2903,18 +2769,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.87", -] - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", + "syn", ] [[package]] @@ -2936,7 +2791,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn", ] [[package]] @@ -2965,34 +2820,18 @@ dependencies = [ name = "television" version = "0.5.0" dependencies = [ - "anyhow", "better-panic", "clap", "color-eyre", "config", "copypasta", "crossterm", - "derive_deref", - "devicons", "directories", - "futures", "human-panic", - "ignore", - "infer", - "json5", "lazy_static", - "libc", - "nucleo", - "nucleo-matcher", - "parking_lot", - "pretty_assertions", "ratatui", - "regex", "serde", - "serde_json", "signal-hook", - "strip-ansi-escapes", - "strum", "syntect", "television-channels", "television-derive", @@ -3003,7 +2842,6 @@ dependencies = [ "tokio", "toml", "tracing", - "tracing-error", "tracing-subscriber", "unicode-width 0.2.0", "vergen-gix", @@ -3034,7 +2872,7 @@ version = "0.0.4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn", ] [[package]] @@ -3090,16 +2928,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "terminal_size" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f599bd7ca042cfdf8f4512b277c02ba102247820f9d9d4a9f521f496751a6ef" -dependencies = [ - "rustix", - "windows-sys 0.59.0", -] - [[package]] name = "termtree" version = "0.5.1" @@ -3123,7 +2951,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn", ] [[package]] @@ -3229,7 +3057,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn", ] [[package]] @@ -3285,7 +3113,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn", ] [[package]] @@ -3350,12 +3178,6 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" -[[package]] -name = "unicase" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" - [[package]] name = "unicode-bom" version = "2.0.3" @@ -3504,26 +3326,6 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" -[[package]] -name = "vte" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5022b5fbf9407086c180e9557be968742d839e68346af7792b8592489732197" -dependencies = [ - "utf8parse", - "vte_generate_state_changes", -] - -[[package]] -name = "vte_generate_state_changes" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e369bee1b05d510a7b4ed645f5faa90619e05437111783ea5848f28d97d3c2e" -dependencies = [ - "proc-macro2", - "quote", -] - [[package]] name = "walkdir" version = "2.5.0" @@ -3895,12 +3697,6 @@ dependencies = [ "hashlink", ] -[[package]] -name = "yansi" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" - [[package]] name = "yoke" version = "0.7.4" @@ -3921,7 +3717,7 @@ checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn", "synstructure", ] @@ -3942,7 +3738,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn", ] [[package]] @@ -3962,7 +3758,7 @@ checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn", "synstructure", ] @@ -3985,5 +3781,5 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn", ] diff --git a/Cargo.toml b/Cargo.toml index 5b93943..f6d66fe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -62,51 +62,27 @@ television-utils = { path = "crates/television-utils", version = "0.0.4" } # external dependencies better-panic = "0.3.0" -clap = { version = "4.4.5", features = [ - "derive", - "cargo", - "wrap_help", - "unicode", - "string", - "unstable-styles", -] } +clap = { version = "4.4.5", features = ["derive", "cargo", "string"] } color-eyre = "0.6.3" config = "0.14.0" crossterm = { version = "0.28.1", features = ["serde"] } -derive_deref = "1.1.1" -devicons = "0.6.8" directories = "5.0.1" -futures = "0.3.30" -ignore = "0.4.23" -infer = "0.16.0" -json5 = "0.4.1" lazy_static = "1.5.0" -libc = "0.2.158" -nucleo = "0.5.0" -nucleo-matcher = "0.3.1" -parking_lot = "0.12.3" ratatui = { version = "0.29.0", features = ["serde", "macros"] } -regex = "1.10.6" serde = { version = "1.0.208", features = ["derive"] } -serde_json = "1.0.125" signal-hook = "0.3.17" -strip-ansi-escapes = "0.2.0" -strum = { version = "0.26.3", features = ["derive"] } syntect = "5.2.0" tokio = { version = "1.39.3", features = ["full"] } toml = "0.8.19" tracing = "0.1.40" -tracing-error = "0.2.0" tracing-subscriber = { version = "0.3.18", features = ["env-filter", "serde"] } unicode-width = "0.2.0" human-panic = "2.0.2" -pretty_assertions = "1.4.1" termtree = "0.5.1" copypasta = "0.10.1" [build-dependencies] -anyhow = "1.0.86" vergen-gix = { version = "1.0.0", features = ["build", "cargo", "rustc"] } [target.'cfg(target_os = "macos")'.dependencies] diff --git a/build.rs b/build.rs index 5eae933..80abc16 100644 --- a/build.rs +++ b/build.rs @@ -1,13 +1,14 @@ -use anyhow::Result; +use std::error::Error; + use vergen_gix::{BuildBuilder, CargoBuilder, Emitter, RustcBuilder}; -fn main() -> Result<()> { +fn main() -> Result<(), Box> { let build = BuildBuilder::default().build_date(true).build()?; let cargo = CargoBuilder::default().target_triple(true).build()?; let rustc = RustcBuilder::default().semver(true).build()?; - Emitter::default() + Ok(Emitter::default() .add_instructions(&build)? .add_instructions(&cargo)? .add_instructions(&rustc)? - .emit() + .emit()?) } diff --git a/crates/television-previewers/src/previewers.rs b/crates/television-previewers/src/previewers.rs index 6dedfa2..8c68167 100644 --- a/crates/television-previewers/src/previewers.rs +++ b/crates/television-previewers/src/previewers.rs @@ -124,12 +124,12 @@ impl Previewer { } } - pub async fn preview(&mut self, entry: &Entry) -> Arc { + pub fn preview(&mut self, entry: &Entry) -> Arc { match entry.preview_type { PreviewType::Basic => self.basic.preview(entry), - PreviewType::Directory => self.directory.preview(entry).await, + PreviewType::Directory => self.directory.preview(entry), PreviewType::EnvVar => self.env_var.preview(entry), - PreviewType::Files => self.file.preview(entry).await, + PreviewType::Files => self.file.preview(entry), } } diff --git a/crates/television-previewers/src/previewers/directory.rs b/crates/television-previewers/src/previewers/directory.rs index fd071e3..0660f96 100644 --- a/crates/television-previewers/src/previewers/directory.rs +++ b/crates/television-previewers/src/previewers/directory.rs @@ -28,7 +28,7 @@ impl DirectoryPreviewer { } } - pub async fn preview(&mut self, entry: &Entry) -> Arc { + pub fn preview(&mut self, entry: &Entry) -> Arc { if let Some(preview) = self.cache.lock().get(&entry.name) { return preview; } diff --git a/crates/television-previewers/src/previewers/files.rs b/crates/television-previewers/src/previewers/files.rs index f697a20..b29aaa2 100644 --- a/crates/television-previewers/src/previewers/files.rs +++ b/crates/television-previewers/src/previewers/files.rs @@ -73,7 +73,7 @@ impl FilePreviewer { /// /// # Panics /// Panics if seeking to the start of the file fails. - pub async fn preview(&mut self, entry: &entry::Entry) -> Arc { + pub fn preview(&mut self, entry: &entry::Entry) -> Arc { let path_buf = PathBuf::from(&entry.name); // do we have a preview in cache for that entry? @@ -87,8 +87,7 @@ impl FilePreviewer { { debug!("File too large: {:?}", entry.name); let preview = meta::file_too_large(&entry.name); - self.cache_preview(entry.name.clone(), preview.clone()) - .await; + self.cache_preview(entry.name.clone(), preview.clone()); return preview; } @@ -103,21 +102,18 @@ impl FilePreviewer { self.cache_preview( entry.name.clone(), preview.clone(), - ) - .await; + ); // compute the highlighted version in the background let mut reader = BufReader::new(file); reader.seek(std::io::SeekFrom::Start(0)).unwrap(); - self.compute_highlighted_text_preview(entry, reader) - .await; + self.compute_highlighted_text_preview(entry, reader); preview } Err(e) => { warn!("Error opening file: {:?}", e); let p = meta::not_supported(&entry.name); - self.cache_preview(entry.name.clone(), p.clone()) - .await; + self.cache_preview(entry.name.clone(), p.clone()); p } } @@ -127,8 +123,7 @@ impl FilePreviewer { // insert a loading preview into the cache //let preview = loading(&entry.name); let preview = meta::not_supported(&entry.name); - self.cache_preview(entry.name.clone(), preview.clone()) - .await; + self.cache_preview(entry.name.clone(), preview.clone()); //// compute the image preview in the background //self.compute_image_preview(entry).await; preview @@ -136,15 +131,13 @@ impl FilePreviewer { FileType::Other => { debug!("Previewing other file: {:?}", entry.name); let preview = meta::not_supported(&entry.name); - self.cache_preview(entry.name.clone(), preview.clone()) - .await; + self.cache_preview(entry.name.clone(), preview.clone()); preview } FileType::Unknown => { debug!("Unknown file type: {:?}", entry.name); let preview = meta::not_supported(&entry.name); - self.cache_preview(entry.name.clone(), preview.clone()) - .await; + self.cache_preview(entry.name.clone(), preview.clone()); preview } } @@ -172,7 +165,7 @@ impl FilePreviewer { // }); //} - async fn compute_highlighted_text_preview( + fn compute_highlighted_text_preview( &self, entry: &entry::Entry, reader: BufReader, @@ -267,7 +260,7 @@ impl FilePreviewer { file_type } - async fn cache_preview(&mut self, key: String, preview: Arc) { + fn cache_preview(&mut self, key: String, preview: Arc) { self.cache.lock().insert(key, preview); } } diff --git a/crates/television/action.rs b/crates/television/action.rs index f09725a..43d68ba 100644 --- a/crates/television/action.rs +++ b/crates/television/action.rs @@ -1,10 +1,7 @@ use serde::{Deserialize, Serialize}; -use strum::Display; /// The different actions that can be performed by the application. -#[derive( - Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Display, Hash, -)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Hash)] pub enum Action { // input actions /// Add a character to the input buffer. diff --git a/crates/television/app.rs b/crates/television/app.rs index b4665f7..68cb584 100644 --- a/crates/television/app.rs +++ b/crates/television/app.rs @@ -1,8 +1,8 @@ use std::collections::HashMap; +use std::ops::Deref; use std::sync::Arc; use color_eyre::Result; -use derive_deref::Deref; use tokio::sync::{mpsc, Mutex}; use tracing::{debug, info}; @@ -17,9 +17,16 @@ use crate::{ use television_channels::channels::TelevisionChannel; use television_channels::entry::Entry; -#[derive(Deref, Default, Debug)] +#[derive(Default, Debug)] pub struct Keymap(pub HashMap>); +impl Deref for Keymap { + type Target = HashMap>; + fn deref(&self) -> &Self::Target { + &self.0 + } +} + impl From<&KeyBindings> for Keymap { fn from(keybindings: &KeyBindings) -> Self { let mut keymap = HashMap::new(); diff --git a/crates/television/config.rs b/crates/television/config.rs index 77be70c..279d014 100644 --- a/crates/television/config.rs +++ b/crates/television/config.rs @@ -156,7 +156,6 @@ mod tests { use crate::action::Action; use crate::config::keybindings::parse_key; use crate::television::Mode; - use pretty_assertions::assert_eq; #[test] fn test_config() -> Result<()> { diff --git a/crates/television/config/keybindings.rs b/crates/television/config/keybindings.rs index 9fba6c8..b3efcce 100644 --- a/crates/television/config/keybindings.rs +++ b/crates/television/config/keybindings.rs @@ -2,13 +2,26 @@ use crate::action::Action; use crate::event::{convert_raw_event_to_key, Key}; use crate::television::Mode; use crossterm::event::{KeyCode, KeyEvent, KeyModifiers}; -use derive_deref::{Deref, DerefMut}; use serde::{Deserialize, Deserializer}; use std::collections::HashMap; +use std::ops::{Deref, DerefMut}; -#[derive(Clone, Debug, Default, Deref, DerefMut)] +#[derive(Clone, Debug, Default)] pub struct KeyBindings(pub config::Map>); +impl Deref for KeyBindings { + type Target = config::Map>; + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl DerefMut for KeyBindings { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} + impl<'de> Deserialize<'de> for KeyBindings { fn deserialize(deserializer: D) -> color_eyre::Result where diff --git a/crates/television/config/styles.rs b/crates/television/config/styles.rs index 8924f17..475b3e6 100644 --- a/crates/television/config/styles.rs +++ b/crates/television/config/styles.rs @@ -1,12 +1,27 @@ use crate::television::Mode; -use derive_deref::{Deref, DerefMut}; use ratatui::prelude::{Color, Modifier, Style}; use serde::{Deserialize, Deserializer}; -use std::collections::HashMap; +use std::{ + collections::HashMap, + ops::{Deref, DerefMut}, +}; -#[derive(Clone, Debug, Default, Deref, DerefMut)] +#[derive(Clone, Debug, Default)] pub struct Styles(pub HashMap>); +impl Deref for Styles { + type Target = HashMap>; + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl DerefMut for Styles { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} + impl<'de> Deserialize<'de> for Styles { fn deserialize(deserializer: D) -> color_eyre::Result where @@ -147,33 +162,33 @@ mod tests { #[test] fn test_parse_style_default() { let style = parse_style(""); - pretty_assertions::assert_eq!(style, Style::default()); + assert_eq!(style, Style::default()); } #[test] fn test_parse_style_foreground() { let style = parse_style("red"); - pretty_assertions::assert_eq!(style.fg, Some(Color::Indexed(1))); + assert_eq!(style.fg, Some(Color::Indexed(1))); } #[test] fn test_parse_style_background() { let style = parse_style("on blue"); - pretty_assertions::assert_eq!(style.bg, Some(Color::Indexed(4))); + assert_eq!(style.bg, Some(Color::Indexed(4))); } #[test] fn test_parse_style_modifiers() { let style = parse_style("underline red on blue"); - pretty_assertions::assert_eq!(style.fg, Some(Color::Indexed(1))); - pretty_assertions::assert_eq!(style.bg, Some(Color::Indexed(4))); + assert_eq!(style.fg, Some(Color::Indexed(1))); + assert_eq!(style.bg, Some(Color::Indexed(4))); } #[test] fn test_process_color_string() { let (color, modifiers) = process_color_string("underline bold inverse gray"); - pretty_assertions::assert_eq!(color, "gray"); + assert_eq!(color, "gray"); assert!(modifiers.contains(Modifier::UNDERLINED)); assert!(modifiers.contains(Modifier::BOLD)); assert!(modifiers.contains(Modifier::REVERSED)); @@ -183,12 +198,12 @@ mod tests { fn test_parse_color_rgb() { let color = parse_color("rgb123"); let expected = 16 + 36 + 2 * 6 + 3; - pretty_assertions::assert_eq!(color, Some(Color::Indexed(expected))); + assert_eq!(color, Some(Color::Indexed(expected))); } #[test] fn test_parse_color_unknown() { let color = parse_color("unknown"); - pretty_assertions::assert_eq!(color, None); + assert_eq!(color, None); } } diff --git a/crates/television/errors.rs b/crates/television/errors.rs index e5259fa..818064c 100644 --- a/crates/television/errors.rs +++ b/crates/television/errors.rs @@ -33,7 +33,7 @@ pub fn init() -> Result<()> { eprintln!("{}", panic_hook.panic_report(panic_info)); // prints color-eyre stack trace to stderr } let msg = format!("{}", panic_hook.panic_report(panic_info)); - error!("Error: {}", strip_ansi_escapes::strip_str(msg)); + error!("Error: {}", msg); #[cfg(debug_assertions)] { @@ -45,7 +45,7 @@ pub fn init() -> Result<()> { .create_panic_handler()(panic_info); } - std::process::exit(libc::EXIT_FAILURE); + std::process::exit(1); })); Ok(()) } diff --git a/crates/television/logging.rs b/crates/television/logging.rs index 907551f..9d19643 100644 --- a/crates/television/logging.rs +++ b/crates/television/logging.rs @@ -1,5 +1,4 @@ use color_eyre::Result; -use tracing_error::ErrorLayer; use tracing_subscriber::{fmt, prelude::*, EnvFilter}; use crate::config; @@ -23,7 +22,6 @@ pub fn init() -> Result<()> { tracing_subscriber::registry() .with(file_subscriber) - .with(ErrorLayer::default()) .try_init()?; Ok(()) } diff --git a/crates/television/television.rs b/crates/television/television.rs index 2894b99..cd2f7f5 100644 --- a/crates/television/television.rs +++ b/crates/television/television.rs @@ -7,11 +7,9 @@ use crate::ui::spinner::SpinnerState; use crate::{action::Action, config::Config}; use color_eyre::Result; use copypasta::{ClipboardContext, ClipboardProvider}; -use futures::executor::block_on; use ratatui::{layout::Rect, style::Color, widgets::Paragraph, Frame}; use serde::{Deserialize, Serialize}; use std::collections::HashMap; -use strum::Display; use television_channels::channels::{ remote_control::RemoteControl, OnAir, TelevisionChannel, UnitChannel, }; @@ -21,9 +19,7 @@ use television_previewers::previewers::Previewer; use television_utils::strings::EMPTY_STRING; use tokio::sync::mpsc::UnboundedSender; -#[derive( - PartialEq, Copy, Clone, Hash, Eq, Debug, Serialize, Deserialize, Display, -)] +#[derive(PartialEq, Copy, Clone, Hash, Eq, Debug, Serialize, Deserialize)] pub enum Mode { Channel, RemoteControl, @@ -376,7 +372,7 @@ impl Television { /// /// # Returns /// * `Result<()>` - An Ok result or an error. - pub fn draw(&mut self, f: &mut Frame, area: Rect) -> Result<()> { + pub fn draw(&mut self, f: &mut Frame<'_>, area: Rect) -> Result<()> { let layout = Layout::build( &Dimensions::from(self.config.ui.ui_scale), area, @@ -399,7 +395,7 @@ impl Television { let selected_entry = self .get_selected_entry(Some(Mode::Channel)) .unwrap_or(ENTRY_PLACEHOLDER); - let preview = block_on(self.previewer.preview(&selected_entry)); + let preview = self.previewer.preview(&selected_entry); // top right block: preview title self.current_preview_total_lines = preview.total_lines(); diff --git a/crates/television/ui/metadata.rs b/crates/television/ui/metadata.rs index 5f26bb5..b88c602 100644 --- a/crates/television/ui/metadata.rs +++ b/crates/television/ui/metadata.rs @@ -1,3 +1,5 @@ +use std::fmt::Display; + use ratatui::{ layout::Constraint, style::{Color, Style}, @@ -5,12 +7,22 @@ use ratatui::{ widgets::{Cell, Row, Table}, }; -use crate::television::Television; +use crate::television::{Mode, Television}; use crate::ui::mode::mode_color; const METADATA_FIELD_NAME_COLOR: Color = Color::DarkGray; const METADATA_FIELD_VALUE_COLOR: Color = Color::Gray; +impl Display for Mode { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Mode::Channel => write!(f, "Channel"), + Mode::RemoteControl => write!(f, "Remote Control"), + Mode::SendToChannel => write!(f, "Send to Channel"), + } + } +} + impl Television { pub fn build_metadata_table<'a>(&self) -> Table<'a> { let version_row = Row::new(vec![