diff options
author | Clement Tsang <34804052+ClementTsang@users.noreply.github.com> | 2024-01-01 22:20:40 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-01 17:20:40 -0500 |
commit | 228da99489f876780feaf829f82933e07a37c084 (patch) | |
tree | 5fdb77451f6d79ead3469442873345fffe68c5ad | |
parent | e71048e394626d8a2ae148e8bc92a11aeda1f116 (diff) |
refactor: move around configuration-related files (#1370)
* rename general utils file
* refactor: move around some configuration files
* more shuffling around
* fix some ugly formatting
44 files changed, 1275 insertions, 1289 deletions
@@ -7,7 +7,7 @@ use clap_complete::{generate_to, shells::Shell, Generator}; use clap_complete_fig::Fig; use clap_complete_nushell::Nushell; -include!("src/args.rs"); +include!("src/options/args.rs"); fn create_dir(dir: &Path) -> io::Result<()> { let res = fs::create_dir_all(dir); @@ -1,3 +1,11 @@ +pub mod data_farmer; +pub mod filter; +pub mod frozen_state; +pub mod layout_manager; +mod process_killer; +pub mod query; +pub mod states; + use std::{ cmp::{max, min}, time::Instant, @@ -6,6 +14,7 @@ use std::{ use concat_string::concat_string; use data_farmer::*; use filter::*; +use frozen_state::FrozenState; use hashbrown::HashMap; use layout_manager::*; pub use states::*; @@ -23,16 +32,6 @@ use crate::{ Pid, }; -pub mod data_farmer; -pub mod filter; -pub mod frozen_state; -pub mod layout_manager; -mod process_killer; -pub mod query; -pub mod states; - -use frozen_state::FrozenState; - #[derive(Debug, Clone, Eq, PartialEq, Default)] pub enum AxisScaling { #[default] diff --git a/src/app/data_farmer.rs b/src/app/data_farmer.rs index 720092db..3ad819be 100644 --- a/src/app/data_farmer.rs +++ b/src/app/data_farmer.rs @@ -21,7 +21,7 @@ use hashbrown::HashMap; use crate::data_collection::batteries; use crate::{ data_collection::{cpu, disks, memory, network, processes::ProcessHarvest, temperature, Data}, - utils::{data_prefixes::*, gen_util::get_decimal_bytes}, + utils::{data_prefixes::*, general::get_decimal_bytes}, Pid, }; diff --git a/src/app/states.rs b/src/app/states.rs index f22a0221..8b5f0ce8 100644 --- a/src/app/states.rs +++ b/src/app/states.rs @@ -7,7 +7,7 @@ use unicode_segmentation::{GraphemeCursor, GraphemeIncomplete, UnicodeSegmentati use crate::{ app::{layout_manager::BottomWidgetType, query::*}, constants, - utils::gen_util::str_width, + utils::general::str_width, widgets::{ BatteryWidgetState, CpuWidgetState, DiskTableWidget, MemWidgetState, NetWidgetState, ProcWidgetState, TempWidgetState, diff --git a/src/bin/main.rs b/src/bin/main.rs index a5218efe..4d588a94 100644 --- a/src/bin/main.rs +++ b/src/bin/main.rs @@ -15,15 +15,12 @@ use std::{ use anyhow::{Context, Result}; use bottom::{ args, - canvas::{ - styling::CanvasStyling, - {self}, - }, + canvas::{self, styling::CanvasStyling}, check_if_terminal, cleanup_terminal, create_collection_thread, create_input_thread, create_or_get_config, data_conversion::*, handle_key_event_or_break, handle_mouse_event, - options::*, + options::config::{get_color_scheme, get_widget_layout, init_app}, panic_hook, read_config, try_drawing, update_data, BottomEvent, }; use crossterm::{ @@ -73,7 +70,7 @@ fn main() -> Result<()> { }; // Create an "app" struct, which will control most of the program and store settings/state - let mut app = build_app( + let mut app = init_app( matches, config, &widget_layout, diff --git a/src/canvas.rs b/src/canvas.rs index 8960f0a0..6b18f1c7 100644 --- a/src/canvas.rs +++ b/src/canvas.rs @@ -1,3 +1,9 @@ +mod dialogs; +mod drawing_utils; +pub mod styling; +pub mod tui_widgets; +mod widgets; + use std::str::FromStr; use itertools::izip; @@ -19,12 +25,6 @@ use crate::{ utils::{error, error::BottomError}, }; -mod dialogs; -mod drawing_utils; -pub mod styling; -pub mod tui_widgets; -mod widgets; - #[derive(Debug)] pub enum ColourScheme { Default, diff --git a/src/canvas/styling.rs b/src/canvas/styling.rs index efd7638f..c317e8a0 100644 --- a/src/canvas/styling.rs +++ b/src/canvas/styling.rs @@ -5,7 +5,7 @@ use tui::style::{Color, Style}; use super::ColourScheme; use crate::{ constants::*, - options::{Config, ConfigColours}, + options::config::{Config, ConfigColours}, utils::error, }; mod colour_utils; diff --git a/src/canvas/tui_widgets/data_table.rs b/src/canvas/tui_widgets/data_table.rs index 4ae23d1d..5fb4a591 100644 --- a/src/canvas/tui_widgets/data_table.rs +++ b/src/canvas/tui_widgets/data_table.rs @@ -1,27 +1,22 @@ -use std::{convert::TryInto, marker::PhantomData}; - pub mod column; -pub use column::*; - -pub mod styling; -pub use styling::*; - +pub mod data_type; +pub mod draw; pub mod props; -pub use props::DataTableProps; - +pub mod sortable; pub mod state; -pub use state::{DataTableState, ScrollDirection}; +pub mod styling; -pub mod draw; -pub use draw::*; +use std::{convert::TryInto, marker::PhantomData}; -pub mod data_type; +pub use column::*; pub use data_type::*; - -pub mod sortable; +pub use draw::*; +pub use props::DataTableProps; pub use sortable::*; +pub use state::{DataTableState, ScrollDirection}; +pub use styling::*; -use crate::utils::gen_util::ClampExt; +use crate::utils::general::ClampExt; /// A [`DataTable`] is a component that displays data in a tabular form. /// diff --git a/src/canvas/tui_widgets/data_table/sortable.rs b/src/canvas/tui_widgets/data_table/sortable.rs index 3a3de1fc..f6c3b502 100644 --- a/src/canvas/tui_widgets/data_table/sortable.rs +++ b/src/canvas/tui_widgets/data_table/sortable.rs @@ -8,7 +8,7 @@ use super::{ ColumnHeader, ColumnWidthBounds, DataTable, DataTableColumn, DataTableProps, DataTableState, DataTableStyling, DataToCell, }; -use crate::utils::gen_util::truncate_to_text; +use crate::utils::general::truncate_to_text; /// Denotes the sort order. #[derive(Clone, Copy, Debug, PartialEq, Eq)] diff --git a/src/canvas/tui_widgets/time_chart.rs b/src/canvas/tui_widgets/time_chart.rs index 403ef507..747c2ae3 100644 --- a/src/canvas/tui_widgets/time_chart.rs +++ b/src/canvas/tui_widgets/time_chart.rs @@ -16,7 +16,7 @@ use tui::{ }; use unicode_width::UnicodeWidthStr; -use crate::utils::gen_util::partial_ordering; +use crate::utils::general::partial_ordering; /// A single graph point. pub type Point = (f64, f64); diff --git a/src/canvas/widgets/disk_table.rs b/src/canvas/widgets/disk_table.rs index 5b6b2619..fe241d14 100644 --- a/src/canvas/widgets/disk_table.rs +++ b/src/canvas/widgets/disk_table.rs @@ -1,7 +1,7 @@ use tui::{layout::Rect, terminal::Frame}; use crate::{ - app::{self}, + app, canvas::{ tui_widgets::data_table::{DrawInfo, SelectionState}, Painter, diff --git a/src/canvas/widgets/network_graph.rs b/src/canvas/widgets/network_graph.rs index 7c8ce913..af1b6d73 100644 --- a/src/canvas/widgets/network_graph.rs +++ b/src/canvas/widgets/network_graph.rs @@ -16,7 +16,7 @@ use crate::{ }, Painter, }, - utils::{data_prefixes::*, data_units::DataUnit, gen_util::partial_ordering}, + utils::{data_prefixes::*, data_units::DataUnit, general::partial_ordering}, }; impl Painter { diff --git a/src/constants.rs b/src/constants.rs index d736e928..6d312aa4 100644 --- a/src/constants.rs +++ b/src/constants.rs @@ -1,6 +1,6 @@ use tui::widgets::Borders; -use crate::options::ConfigColours; +use crate::options::config::ConfigColours; // Default widget ID pub const DEFAULT_WIDGET_ID: u64 = 56709; diff --git a/src/data_collection.rs b/src/data_collection.rs index d140e29e..d00d88e0 100644 --- a/src/data_collection.rs +++ b/src/data_collection.rs @@ -1,17 +1,5 @@ //! This is the main file to house data collection functions. -use std::time::{Duration, Instant}; - -#[cfg(any(target_os = "linux", feature = "gpu"))] -use hashbrown::HashMap; -#[cfg(feature = "battery")] -use starship_battery::{Battery, Manager}; -use sysinfo::{System, SystemExt}; - -use self::temperature::TemperatureType; -use super::DataFilters; -use crate::app::layout_manager::UsedWidgets; - #[cfg(feature = "nvidia")] pub mod nvidia; @@ -25,6 +13,18 @@ pub mod network; pub mod processes; pub mod temperature; +use std::time::{Duration, Instant}; + +#[cfg(any(target_os = "linux", feature = "gpu"))] +use hashbrown::HashMap; +#[cfg(feature = "battery")] +use starship_battery::{Battery, Manager}; +use sysinfo::{System, SystemExt}; + +use self::temperature::TemperatureType; +use super::DataFilters; +use crate::app::layout_manager::UsedWidgets; + #[derive(Clone, Debug)] pub struct Data { pub collection_time: Instant, diff --git a/src/data_collection/disks.rs b/src/data_collection/disks.rs index c4a66eff..8d55de98 100644 --- a/src/data_collection/disks.rs +++ b/src/data_collection/disks.rs @@ -1,10 +1,5 @@ //! Data collection about disks (e.g. I/O, usage, space). -use cfg_if::cfg_if; -use hashbrown::HashMap; - -use crate::app::filter::Filter; - cfg_if! { if #[cfg(target_os = "freebsd")] { mod freebsd; @@ -32,6 +27,11 @@ cfg_if! { } } +use cfg_if::cfg_if; +use hashbrown::HashMap; + +use crate::app::filter::Filter; + #[derive(Clone, Debug, Default)] pub struct DiskHarvest { pub name: String, diff --git a/src/data_collection/disks/unix.rs b/src/data_collection/disks/unix.rs index e41b0458..309a0a19 100644 --- a/src/data_collection/disks/unix.rs +++ b/src/data_collection/disks/unix.rs @@ -3,10 +3,7 @@ mod file_systems; -use file_systems::*; - mod usage; -use usage::*; cfg_if::cfg_if! { if #[cfg(target_os = "linux")] { @@ -24,6 +21,9 @@ cfg_if::cfg_if! { } } +use file_systems::*; +use usage::*; + use super::{keep_disk_entry, DiskHarvest}; use crate::data_collection::DataCollector; diff --git a/src/data_collection/disks/unix/linux/mod.rs b/src/data_collection/disks/unix/linux/mod.rs index 40a83267..a54a276e 100644 --- a/src/data_collection/disks/unix/linux/mod.rs +++ b/src/data_collection/disks/unix/linux/mod.rs @@ -1,5 +1,5 @@ +mod counters; mod partition; -pub(crate) use partition::*; -mod counters; pub use counters::*; +pub(crate) use partition::*; diff --git a/src/data_collection/disks/unix/macos/io_kit.rs b/src/data_collection/disks/unix/macos/io_kit.rs index 42193fbd..bf585d46 100644 --- a/src/data_collection/disks/unix/macos/io_kit.rs +++ b/src/data_collection/disks/unix/macos/io_kit.rs @@ -1,10 +1,8 @@ mod bindings; - +mod io_disks; mod io_iterator; -pub use io_iterator::*; - mod io_object; -pub use io_object::*; -mod io_disks; pub use io_disks::get_disks; +pub use io_iterator::*; +pub use io_object::*; diff --git a/src/data_collection/disks/unix/macos/mod.rs b/src/data_collection/disks/unix/macos/mod.rs index 97d7e154..9cacc03a 100644 --- a/src/data_collection/disks/unix/macos/mod.rs +++ b/src/data_collection/disks/unix/macos/mod.rs @@ -1,4 +1,4 @@ mod counters; -pub use counters::*; - mod io_kit; + +pub use counters::*; diff --git a/src/data_collection/disks/windows.rs b/src/data_collection/disks/windows.rs index 3da4a866..469bf4bf 100644 --- a/src/data_collection/disks/windows.rs +++ b/src/data_collection/disks/windows.rs @@ -1,14 +1,14 @@ //! Disk stats via sysinfo. +mod bindings; + +use bindings::*; use itertools::Itertools; use sysinfo::{DiskExt, SystemExt}; use super::{keep_disk_entry, DiskHarvest}; use crate::data_collection::{disks::IoCounters, DataCollector}; -mod bindings; -use bindings::*; - /// Returns I/O stats. pub(crate) fn io_stats() -> anyhow::Result<Vec<IoCounters>> { let volume_io = all_volume_io()?; diff --git a/src/data_collection/processes.rs b/src/data_collection/processes.rs index b6c4522d..08b48a29 100644 --- a/src/data_collection/processes.rs +++ b/src/data_collection/processes.rs @@ -3,13 +3,8 @@ //! For Linux, this is handled by a custom set of functions. //! For Windows, macOS, FreeBSD, Android, and Linux, this is handled by sysinfo. -use std::{borrow::Cow, time::Duration}; - use cfg_if::cfg_if; -use super::DataCollector; -use crate::{utils::error, Pid}; - cfg_if! { if #[cfg(target_os = "linux")] { pub mod linux; @@ -36,6 +31,11 @@ cfg_if! { } } +use std::{borrow::Cow, time::Duration}; + +use super::DataCollector; +use crate::{utils::error, Pid}; + #[derive(Debug, Clone, Default)] pub struct ProcessHarvest { /// The pid of the process. diff --git a/src/data_collection/processes/linux.rs b/src/data_collection/processes/linux.rs index 6898f37e..18103f11 100644 --- a/src/data_collection/processes/linux.rs +++ b/src/data_collection/processes/linux.rs @@ -1,6 +1,7 @@ //! Process data collection for Linux. mod process; + use std::{ fs::{self, File}, io::{BufRead, BufReader}, diff --git a/src/data_collection/processes/macos.rs b/src/data_collection/processes/macos.rs index 036279c9..42aae82a 100644 --- a/src/data_collection/processes/macos.rs +++ b/src/data_collection/processes/macos.rs @@ -1,5 +1,7 @@ //! Process data collection for macOS. Uses sysinfo and custom bindings. +mod sysctl_bindings; + use std::{io, process::Command}; use hashbrown::HashMap; @@ -8,7 +10,6 @@ use sysinfo::{PidExt, ProcessExt}; use super::UnixProcessExt; use crate::Pid; -mod sysctl_bindings; pub(crate) struct MacOSProcessExt; diff --git a/src/data_collection/processes/unix.rs b/src/data_collection/processes/unix.rs index 2e79b578..4c79dc0f 100644 --- a/src/data_collection/processes/unix.rs +++ b/src/data_collection/processes/unix.rs @@ -1,6 +1,7 @@ //! Unix-specific parts of process collection. mod user_table; + use cfg_if::cfg_if; pub use user_table::*; diff --git a/src/data_conversion.rs b/src/data_conversion.rs index 5d63a395..f4aee9d6 100644 --- a/src/data_conversion.rs +++ b/src/data_conversion.rs @@ -1,13 +1,15 @@ //! This mainly concerns converting collected data into things that the canvas //! can actually handle. +// TODO: Split this up! + use kstring::KString; use crate::{ app::{data_farmer::DataCollection, AxisScaling}, canvas::tui_widgets::time_chart::Point, data_collection::{cpu::CpuDataType, memory::MemHarvest, temperature::TemperatureType}, - utils::{data_prefixes::*, data_units::DataUnit, gen_util::*}, + utils::{data_prefixes::*, data_units::DataUnit, general::*}, widgets::{DiskWidgetData, TempWidgetData}, }; @@ -14,6 +14,21 @@ #![deny(clippy::unimplemented)] #![deny(clippy::missing_safety_doc)] +pub mod app; +pub mod utils { + pub mod data_prefixes; + pub mod data_units; + pub mod error; + pub mod general; + pub mod logging; +} +pub mod canvas; +pub mod constants; +pub mod data_collection; +pub mod data_conversion; +pub mod options; +pub mod widgets; + use std::{ boxed::Box, fs, @@ -44,25 +59,9 @@ use crossterm::{ terminal::{disable_raw_mode, LeaveAlternateScreen}, }; use data_conversion::*; -use options::*; +pub use options::args; +use options::config::Config; use utils::error; - -pub mod app; -pub mod utils { - pub mod data_prefixes; - pub mod data_units; - pub mod error; - pub mod gen_util; - pub mod logging; -} -pub mod args; -pub mod canvas; -pub mod constants; -pub mod data_collection; -pub mod data_conversion; -pub mod options; -pub mod widgets; - #[allow(unused_imports)] pub use utils::logging::*; diff --git a/src/options.rs b/src/options.rs index 1f3f46c9..459d4320 100644 --- a/src/options.rs +++ b/src/options.rs @@ -1,1149 +1,2 @@ -use std::{ - borrow::Cow, - convert::TryInto, - str::FromStr, - time::{Duration, Instant}, -}; - -use clap::ArgMatches; -use hashbrown::{HashMap, HashSet}; -use indexmap::IndexSet; -use layout_options::*; -use regex::Regex; -use serde::{Deserialize, Serialize}; -#[cfg(feature = "battery")] -use starship_battery::Manager; - -use crate::{ - app::{filter::Filter, layout_manager::*, *}, - canvas::{styling::CanvasStyling, ColourScheme}, - constants::*, - data_collection::temperature::TemperatureType, - utils::{ - data_units::DataUnit, - error::{self, BottomError}, - }, - widgets::*, -}; - -pub mod layout_options; - -mod process_columns; -pub use process_columns::ProcessConfig; - -mod cpu; -use anyhow::{Context, Result}; -pub use cpu::{CpuConfig, CpuDefault}; - -#[derive(Clone, Debug, Default, Deserialize)] -pub struct Config { - pub flags: Option<ConfigFlags>, - pub colors: Option<ConfigColours>, - pub row: Option<Vec<Row>>, - pub disk_filter: Option<IgnoreList>, - pub mount_filter: Option<IgnoreList>, - pub temp_filter: Option<IgnoreList>, - pub net_filter: Option<IgnoreList>, - pub processes: Option<ProcessConfig>, - pub cpu: Option<CpuConfig>, -} - -#[derive(Clone, Debug, Deserialize, Serialize)] -#[serde(untagged)] -enum StringOrNum { - String(String), - Num(u64), -} - -impl From<String> for StringOrNum { - fn from(value: String) -> Self { - StringOrNum::String(value) - } -} - -impl From<u64> for StringOrNum { - fn from(value: u64) -> Self { - StringOrNum::Num(value) - } -} - -#[derive(Clone, Debug, Default, Deserialize, Serialize)] -pub struct ConfigFlags { - hide_avg_cpu: Option<bool>, - dot_marker: Option<bool>, - temperature_type: Option<String>, - rate: Option<StringOrNum>, - left_legend: Option<bool>, - current_usage: Option<bool>, - unnormalized_cpu: Option<bool>, - group_processes: Option<bool>, - case_sensitive: Option<bool>, - whole_word: Option<bool>, - regex: Option<bool>, - basic: Option<bool>, - default_time_value: Option<StringOrNum>, - time_delta: Option<StringOrNum>, - autohide_time: Option<bool>, - hide_time: Option<bool>, - default_widget_type: Option<String>, - default_widget_count: Option<u64>, - expanded_on_startup: Option<bool>, - use_old_network_legend: Option<bool>, - hide_table_gap: Option<bool>, - battery: Option<bool>, - disable_click: Option<bool>, - no_write: Option<bool>, - /// For built-in colour palettes. - color: Option<String>, - mem_as_value: Option<bool>, - tree: Option<bool>, - show_table_scroll_position: Option<bool>, - process_command: Option<bool>, - disable_advanced_kill: Option<bool>, - network_use_bytes: Option<bool>, - network_use_log: Option<bool>, - network_use_binary_prefix: Option<bool>, - enable_gpu: Option<bool>, - enable_cache_memory: Option<bool>, - retention: Option<StringOrNum>, -} - -#[derive(Clone, Debug, Default, Deserialize, Serialize)] -pub struct ConfigColours { - pub table_header_color: Option<Cow<'static, str>>, - pub all_cpu_color: Option<Cow<'static, str>>, - pub avg_cpu_color: Option<Cow<'static, str>>, - pub cpu_core_colors: Option<Vec<Cow<'static, str>>>, - pub ram_color: Option<Cow<'static, str>>, - #[cfg(not(target_os = "windows"))] - pub cache_color: Option<Cow<'static, str>>, - pub swap_color: Option<Cow<'static, str>>, - pub arc_color: Option<Cow<'static, str>>, - pub gpu_core_colors: Option<Vec<Cow<'static, str>>>, - pub rx_color: Option<Cow<'static, str>>, - pub tx_color: Option<Cow<'static, str>>, - pub rx_total_color: Option<Cow<'static, str>>, // These only affec |