mirror of
https://github.com/alexpasmantier/television.git
synced 2025-07-21 17:40:00 +00:00
refactoring: more refactoring and fixing doctests
This commit is contained in:
parent
ae938dcfc0
commit
8dd7f23734
@ -8,7 +8,7 @@ use tracing::{debug, info};
|
|||||||
use crate::app::App;
|
use crate::app::App;
|
||||||
use crate::cli::Cli;
|
use crate::cli::Cli;
|
||||||
use television_channels::channels::stdin::Channel as StdinChannel;
|
use television_channels::channels::stdin::Channel as StdinChannel;
|
||||||
use television_utils::utils::is_readable_stdin;
|
use television_utils::stdin::is_readable_stdin;
|
||||||
|
|
||||||
pub mod action;
|
pub mod action;
|
||||||
pub mod app;
|
pub mod app;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
use crate::ui::input::Input;
|
use crate::ui::input::Input;
|
||||||
use ratatui::widgets::ListState;
|
use ratatui::widgets::ListState;
|
||||||
use television_utils::utils::strings::EMPTY_STRING;
|
use television_utils::strings::EMPTY_STRING;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct Picker {
|
pub struct Picker {
|
||||||
|
@ -17,7 +17,7 @@ use television_channels::channels::{
|
|||||||
use television_channels::entry::{Entry, ENTRY_PLACEHOLDER};
|
use television_channels::entry::{Entry, ENTRY_PLACEHOLDER};
|
||||||
use television_previewers::previewers;
|
use television_previewers::previewers;
|
||||||
use television_previewers::previewers::Previewer;
|
use television_previewers::previewers::Previewer;
|
||||||
use television_utils::utils::strings::EMPTY_STRING;
|
use television_utils::strings::EMPTY_STRING;
|
||||||
use tokio::sync::mpsc::UnboundedSender;
|
use tokio::sync::mpsc::UnboundedSender;
|
||||||
|
|
||||||
#[derive(
|
#[derive(
|
||||||
|
@ -14,7 +14,7 @@ use television_channels::entry::Entry;
|
|||||||
use television_previewers::previewers::{
|
use television_previewers::previewers::{
|
||||||
Preview, PreviewContent, FILE_TOO_LARGE_MSG, PREVIEW_NOT_SUPPORTED_MSG,
|
Preview, PreviewContent, FILE_TOO_LARGE_MSG, PREVIEW_NOT_SUPPORTED_MSG,
|
||||||
};
|
};
|
||||||
use television_utils::utils::strings::{shrink_with_ellipsis, EMPTY_STRING};
|
use television_utils::strings::{shrink_with_ellipsis, EMPTY_STRING};
|
||||||
|
|
||||||
// preview
|
// preview
|
||||||
pub const DEFAULT_PREVIEW_TITLE_FG: Color = Color::Blue;
|
pub const DEFAULT_PREVIEW_TITLE_FG: Color = Color::Blue;
|
||||||
|
@ -11,7 +11,7 @@ use ratatui::Frame;
|
|||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use television_channels::channels::OnAir;
|
use television_channels::channels::OnAir;
|
||||||
use television_channels::entry::Entry;
|
use television_channels::entry::Entry;
|
||||||
use television_utils::utils::strings::{
|
use television_utils::strings::{
|
||||||
next_char_boundary, slice_at_char_boundaries,
|
next_char_boundary, slice_at_char_boundaries,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -3,8 +3,8 @@ use crate::entry::Entry;
|
|||||||
use crate::entry::PreviewType;
|
use crate::entry::PreviewType;
|
||||||
use devicons::FileIcon;
|
use devicons::FileIcon;
|
||||||
use television_fuzzy::matcher::{config::Config, injector::Injector, Matcher};
|
use television_fuzzy::matcher::{config::Config, injector::Injector, Matcher};
|
||||||
use television_utils::utils::indices::sep_name_and_value_indices;
|
use television_utils::indices::sep_name_and_value_indices;
|
||||||
use television_utils::utils::strings::preprocess_line;
|
use television_utils::strings::preprocess_line;
|
||||||
use tracing::debug;
|
use tracing::debug;
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
|
@ -3,8 +3,8 @@ use devicons::FileIcon;
|
|||||||
use super::OnAir;
|
use super::OnAir;
|
||||||
use crate::entry::{Entry, PreviewType};
|
use crate::entry::{Entry, PreviewType};
|
||||||
use television_fuzzy::matcher::{config::Config, Matcher};
|
use television_fuzzy::matcher::{config::Config, Matcher};
|
||||||
use television_utils::utils::indices::sep_name_and_value_indices;
|
use television_utils::indices::sep_name_and_value_indices;
|
||||||
use television_utils::utils::strings::preprocess_line;
|
use television_utils::strings::preprocess_line;
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
struct EnvVar {
|
struct EnvVar {
|
||||||
|
@ -4,8 +4,8 @@ use devicons::FileIcon;
|
|||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use television_fuzzy::matcher::{config::Config, injector::Injector, Matcher};
|
use television_fuzzy::matcher::{config::Config, injector::Injector, Matcher};
|
||||||
use television_utils::utils::files::{walk_builder, DEFAULT_NUM_THREADS};
|
use television_utils::files::{walk_builder, DEFAULT_NUM_THREADS};
|
||||||
use television_utils::utils::strings::preprocess_line;
|
use television_utils::strings::preprocess_line;
|
||||||
|
|
||||||
pub struct Channel {
|
pub struct Channel {
|
||||||
matcher: Matcher<String>,
|
matcher: Matcher<String>,
|
||||||
|
@ -8,8 +8,8 @@ use tracing::debug;
|
|||||||
use crate::channels::OnAir;
|
use crate::channels::OnAir;
|
||||||
use crate::entry::{Entry, PreviewType};
|
use crate::entry::{Entry, PreviewType};
|
||||||
use television_fuzzy::matcher::{config::Config, injector::Injector, Matcher};
|
use television_fuzzy::matcher::{config::Config, injector::Injector, Matcher};
|
||||||
use television_utils::utils::files::{walk_builder, DEFAULT_NUM_THREADS};
|
use television_utils::files::{walk_builder, DEFAULT_NUM_THREADS};
|
||||||
use television_utils::utils::strings::preprocess_line;
|
use television_utils::strings::preprocess_line;
|
||||||
|
|
||||||
pub struct Channel {
|
pub struct Channel {
|
||||||
matcher: Matcher<String>,
|
matcher: Matcher<String>,
|
||||||
|
@ -6,7 +6,7 @@ use devicons::FileIcon;
|
|||||||
use super::OnAir;
|
use super::OnAir;
|
||||||
use crate::entry::{Entry, PreviewType};
|
use crate::entry::{Entry, PreviewType};
|
||||||
use television_fuzzy::matcher::{config::Config, Matcher};
|
use television_fuzzy::matcher::{config::Config, Matcher};
|
||||||
use television_utils::utils::strings::preprocess_line;
|
use television_utils::strings::preprocess_line;
|
||||||
|
|
||||||
pub struct Channel {
|
pub struct Channel {
|
||||||
matcher: Matcher<String>,
|
matcher: Matcher<String>,
|
||||||
|
@ -9,12 +9,12 @@ use std::{
|
|||||||
sync::{atomic::AtomicUsize, Arc},
|
sync::{atomic::AtomicUsize, Arc},
|
||||||
};
|
};
|
||||||
use television_fuzzy::matcher::{config::Config, injector::Injector, Matcher};
|
use television_fuzzy::matcher::{config::Config, injector::Injector, Matcher};
|
||||||
use television_utils::utils::strings::{
|
use television_utils::files::{
|
||||||
proportion_of_printable_ascii_characters, PRINTABLE_ASCII_THRESHOLD,
|
is_not_text, walk_builder, DEFAULT_NUM_THREADS,
|
||||||
};
|
};
|
||||||
use television_utils::utils::{
|
use television_utils::strings::{
|
||||||
files::{is_not_text, walk_builder, DEFAULT_NUM_THREADS},
|
preprocess_line, proportion_of_printable_ascii_characters,
|
||||||
strings::preprocess_line,
|
PRINTABLE_ASCII_THRESHOLD,
|
||||||
};
|
};
|
||||||
use tracing::{debug, warn};
|
use tracing::{debug, warn};
|
||||||
|
|
||||||
|
@ -31,8 +31,8 @@ impl Entry {
|
|||||||
///
|
///
|
||||||
/// Additional fields can be set using the builder pattern.
|
/// Additional fields can be set using the builder pattern.
|
||||||
/// ```
|
/// ```
|
||||||
/// use television::entry::{Entry, PreviewType};
|
/// use television_channels::entry::{Entry, PreviewType};
|
||||||
/// use television::devicons::FileIcon;
|
/// use devicons::FileIcon;
|
||||||
///
|
///
|
||||||
/// let entry = Entry::new("name".to_string(), PreviewType::EnvVar)
|
/// let entry = Entry::new("name".to_string(), PreviewType::EnvVar)
|
||||||
/// .with_display_name("display_name".to_string())
|
/// .with_display_name("display_name".to_string())
|
||||||
|
@ -9,7 +9,7 @@ use television_channels::entry::Entry;
|
|||||||
|
|
||||||
use crate::previewers::cache::PreviewCache;
|
use crate::previewers::cache::PreviewCache;
|
||||||
use crate::previewers::{meta, Preview, PreviewContent};
|
use crate::previewers::{meta, Preview, PreviewContent};
|
||||||
use television_utils::utils::files::walk_builder;
|
use television_utils::files::walk_builder;
|
||||||
|
|
||||||
#[derive(Debug, Default)]
|
#[derive(Debug, Default)]
|
||||||
pub struct DirectoryPreviewer {
|
pub struct DirectoryPreviewer {
|
||||||
|
@ -16,13 +16,13 @@ use tracing::{debug, warn};
|
|||||||
use super::cache::PreviewCache;
|
use super::cache::PreviewCache;
|
||||||
use crate::previewers::{meta, Preview, PreviewContent};
|
use crate::previewers::{meta, Preview, PreviewContent};
|
||||||
use television_channels::entry;
|
use television_channels::entry;
|
||||||
use television_utils::utils::files::FileType;
|
use television_utils::files::FileType;
|
||||||
use television_utils::utils::files::{get_file_size, is_known_text_extension};
|
use television_utils::files::{get_file_size, is_known_text_extension};
|
||||||
use television_utils::utils::strings::{
|
use television_utils::strings::{
|
||||||
preprocess_line, proportion_of_printable_ascii_characters,
|
preprocess_line, proportion_of_printable_ascii_characters,
|
||||||
PRINTABLE_ASCII_THRESHOLD,
|
PRINTABLE_ASCII_THRESHOLD,
|
||||||
};
|
};
|
||||||
use television_utils::utils::syntax::{self, load_highlighting_assets};
|
use television_utils::syntax::{self, load_highlighting_assets};
|
||||||
|
|
||||||
#[derive(Debug, Default)]
|
#[derive(Debug, Default)]
|
||||||
pub struct FilePreviewer {
|
pub struct FilePreviewer {
|
||||||
|
@ -6,7 +6,7 @@ use infer::Infer;
|
|||||||
use lazy_static::lazy_static;
|
use lazy_static::lazy_static;
|
||||||
use tracing::debug;
|
use tracing::debug;
|
||||||
|
|
||||||
use crate::utils::default_num_threads;
|
use crate::threads::default_num_threads;
|
||||||
|
|
||||||
lazy_static::lazy_static! {
|
lazy_static::lazy_static! {
|
||||||
pub static ref DEFAULT_NUM_THREADS: usize = default_num_threads().into();
|
pub static ref DEFAULT_NUM_THREADS: usize = default_num_threads().into();
|
@ -1 +1,6 @@
|
|||||||
pub mod utils;
|
pub mod files;
|
||||||
|
pub mod indices;
|
||||||
|
pub mod stdin;
|
||||||
|
pub mod strings;
|
||||||
|
pub mod syntax;
|
||||||
|
pub mod threads;
|
||||||
|
@ -1,10 +1,3 @@
|
|||||||
use std::num::NonZeroUsize;
|
|
||||||
|
|
||||||
pub mod files;
|
|
||||||
pub mod indices;
|
|
||||||
pub mod strings;
|
|
||||||
pub mod syntax;
|
|
||||||
|
|
||||||
/// Heuristic to determine if stdin is readable.
|
/// Heuristic to determine if stdin is readable.
|
||||||
///
|
///
|
||||||
/// This is used to determine if we should use the stdin channel.
|
/// This is used to determine if we should use the stdin channel.
|
||||||
@ -66,19 +59,3 @@ pub fn is_readable_stdin() -> bool {
|
|||||||
|
|
||||||
!std::io::stdin().is_terminal() && imp()
|
!std::io::stdin().is_terminal() && imp()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get the number of threads to use by default.
|
|
||||||
///
|
|
||||||
/// This will use the number of available threads if possible, but will default to 1 if the number
|
|
||||||
/// of available threads cannot be determined. It will also never use more than 32 threads to avoid
|
|
||||||
/// startup overhead.
|
|
||||||
pub fn default_num_threads() -> NonZeroUsize {
|
|
||||||
// default to 1 thread if we can't determine the number of available threads
|
|
||||||
let default = NonZeroUsize::MIN;
|
|
||||||
// never use more than 32 threads to avoid startup overhead
|
|
||||||
let limit = NonZeroUsize::new(32).unwrap();
|
|
||||||
|
|
||||||
std::thread::available_parallelism()
|
|
||||||
.unwrap_or(default)
|
|
||||||
.min(limit)
|
|
||||||
}
|
|
@ -8,7 +8,7 @@ use std::fmt::Write;
|
|||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
/// ```
|
/// ```
|
||||||
/// use strings::next_char_boundary;
|
/// use television_utils::strings::next_char_boundary;
|
||||||
///
|
///
|
||||||
/// let s = "Hello, World!";
|
/// let s = "Hello, World!";
|
||||||
/// assert_eq!(next_char_boundary(s, 0), 0);
|
/// assert_eq!(next_char_boundary(s, 0), 0);
|
||||||
@ -42,7 +42,7 @@ pub fn next_char_boundary(s: &str, start: usize) -> usize {
|
|||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
/// ```
|
/// ```
|
||||||
/// use strings::prev_char_boundary;
|
/// use television_utils::strings::prev_char_boundary;
|
||||||
///
|
///
|
||||||
/// let s = "Hello, World!";
|
/// let s = "Hello, World!";
|
||||||
/// assert_eq!(prev_char_boundary(s, 0), 0);
|
/// assert_eq!(prev_char_boundary(s, 0), 0);
|
||||||
@ -69,7 +69,7 @@ pub fn prev_char_boundary(s: &str, start: usize) -> usize {
|
|||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
/// ```
|
/// ```
|
||||||
/// use strings::slice_at_char_boundaries;
|
/// use television_utils::strings::slice_at_char_boundaries;
|
||||||
///
|
///
|
||||||
/// let s = "Hello, World!";
|
/// let s = "Hello, World!";
|
||||||
/// assert_eq!(slice_at_char_boundaries(s, 0, 0), "");
|
/// assert_eq!(slice_at_char_boundaries(s, 0, 0), "");
|
||||||
@ -103,19 +103,18 @@ pub fn slice_at_char_boundaries(
|
|||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
/// ```
|
/// ```
|
||||||
/// use strings::slice_up_to_char_boundary;
|
/// use television_utils::strings::slice_up_to_char_boundary;
|
||||||
///
|
///
|
||||||
/// let s = "Hello, World!";
|
/// let s = "Hello, World!";
|
||||||
/// assert_eq!(slice_up_to_char_boundary(s, 0), "");
|
/// assert_eq!(slice_up_to_char_boundary(s, 0), "");
|
||||||
/// assert_eq!(slice_up_to_char_boundary(s, 1), "H");
|
/// assert_eq!(slice_up_to_char_boundary(s, 1), "H");
|
||||||
/// assert_eq!(slice_up_to_char_boundary(s, 13), "Hello, World!");
|
/// assert_eq!(slice_up_to_char_boundary(s, 13), "Hello, World!");
|
||||||
///
|
///
|
||||||
/// let s = "👋
|
/// let s = "👋\n🌍!";
|
||||||
/// 🌍!";
|
|
||||||
/// assert_eq!(slice_up_to_char_boundary(s, 0), "");
|
/// assert_eq!(slice_up_to_char_boundary(s, 0), "");
|
||||||
/// assert_eq!(slice_up_to_char_boundary(s, 1), "👋");
|
/// assert_eq!(slice_up_to_char_boundary(s, 1), "👋");
|
||||||
/// assert_eq!(slice_up_to_char_boundary(s, 4), "👋");
|
/// assert_eq!(slice_up_to_char_boundary(s, 4), "👋");
|
||||||
/// assert_eq!(slice_up_to_char_boundary(s, 7), "👋🌍");
|
/// assert_eq!(slice_up_to_char_boundary(s, 7), "👋\n🌍");
|
||||||
/// ```
|
/// ```
|
||||||
pub fn slice_up_to_char_boundary(s: &str, byte_index: usize) -> &str {
|
pub fn slice_up_to_char_boundary(s: &str, byte_index: usize) -> &str {
|
||||||
&s[..next_char_boundary(s, byte_index)]
|
&s[..next_char_boundary(s, byte_index)]
|
||||||
@ -160,7 +159,7 @@ const APPLICATION_PROGRAM_COMMAND_CHARACTER: char = '\u{009F}';
|
|||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
/// ```
|
/// ```
|
||||||
/// use strings::replace_non_printable;
|
/// use television_utils::strings::replace_non_printable;
|
||||||
///
|
///
|
||||||
/// let input = b"Hello, World!";
|
/// let input = b"Hello, World!";
|
||||||
/// let output = replace_non_printable(input, 2);
|
/// let output = replace_non_printable(input, 2);
|
||||||
@ -237,7 +236,7 @@ pub const PRINTABLE_ASCII_THRESHOLD: f32 = 0.7;
|
|||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
/// ```
|
/// ```
|
||||||
/// use strings::proportion_of_printable_ascii_characters;
|
/// use television_utils::strings::proportion_of_printable_ascii_characters;
|
||||||
///
|
///
|
||||||
/// let buffer = b"Hello, World!";
|
/// let buffer = b"Hello, World!";
|
||||||
/// let proportion = proportion_of_printable_ascii_characters(buffer);
|
/// let proportion = proportion_of_printable_ascii_characters(buffer);
|
||||||
@ -270,7 +269,7 @@ const MAX_LINE_LENGTH: usize = 300;
|
|||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
/// ```
|
/// ```
|
||||||
/// use strings::preprocess_line;
|
/// use television_utils::strings::preprocess_line;
|
||||||
///
|
///
|
||||||
/// let line = "Hello, World!";
|
/// let line = "Hello, World!";
|
||||||
/// let processed = preprocess_line(line);
|
/// let processed = preprocess_line(line);
|
||||||
@ -307,11 +306,11 @@ pub fn preprocess_line(line: &str) -> String {
|
|||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
/// ```
|
/// ```
|
||||||
/// use strings::shrink_with_ellipsis;
|
/// use television_utils::strings::shrink_with_ellipsis;
|
||||||
///
|
///
|
||||||
/// let s = "Hello, World!";
|
/// let s = "Hello, World!";
|
||||||
/// assert_eq!(shrink_with_ellipsis(s, 13), "Hello, World!");
|
/// assert_eq!(shrink_with_ellipsis(s, 13), "Hello, World!");
|
||||||
/// assert_eq!(shrink_with_ellipsis(s, 6), "He…d!");
|
/// assert_eq!(shrink_with_ellipsis(s, 6), "H…!");
|
||||||
/// ```
|
/// ```
|
||||||
pub fn shrink_with_ellipsis(s: &str, max_length: usize) -> String {
|
pub fn shrink_with_ellipsis(s: &str, max_length: usize) -> String {
|
||||||
if s.len() <= max_length {
|
if s.len() <= max_length {
|
17
crates/television_utils/src/threads.rs
Normal file
17
crates/television_utils/src/threads.rs
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
use std::num::NonZeroUsize;
|
||||||
|
|
||||||
|
/// Get the number of threads to use by default.
|
||||||
|
///
|
||||||
|
/// This will use the number of available threads if possible, but will default to 1 if the number
|
||||||
|
/// of available threads cannot be determined. It will also never use more than 32 threads to avoid
|
||||||
|
/// startup overhead.
|
||||||
|
pub fn default_num_threads() -> NonZeroUsize {
|
||||||
|
// default to 1 thread if we can't determine the number of available threads
|
||||||
|
let default = NonZeroUsize::MIN;
|
||||||
|
// never use more than 32 threads to avoid startup overhead
|
||||||
|
let limit = NonZeroUsize::new(32).unwrap();
|
||||||
|
|
||||||
|
std::thread::available_parallelism()
|
||||||
|
.unwrap_or(default)
|
||||||
|
.min(limit)
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user