aboutsummaryrefslogtreecommitdiffstats
path: root/src/select/selection_file
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/select/selection_file
parentbuild(Cargo.toml): Add further lints (diff)
downloadyt-6c9286857ef8b314962b67f4a16a66e8c35531bc.zip
refactor(treewide): Combine the separate crates in one workspace
Diffstat (limited to 'src/select/selection_file')
-rw-r--r--src/select/selection_file/duration.rs111
-rw-r--r--src/select/selection_file/help.str12
-rw-r--r--src/select/selection_file/help.str.license9
-rw-r--r--src/select/selection_file/mod.rs34
4 files changed, 0 insertions, 166 deletions
diff --git a/src/select/selection_file/duration.rs b/src/select/selection_file/duration.rs
deleted file mode 100644
index a38981c..0000000
--- a/src/select/selection_file/duration.rs
+++ /dev/null
@@ -1,111 +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::str::FromStr;
-
-use anyhow::{Context, Result};
-
-#[derive(Copy, Clone, Debug)]
-pub struct Duration {
- time: u32,
-}
-
-impl FromStr for Duration {
- type Err = anyhow::Error;
-
- fn from_str(s: &str) -> Result<Self, Self::Err> {
- fn parse_num(str: &str, suffix: char) -> Result<u32> {
- str.strip_suffix(suffix)
- .with_context(|| {
- format!("Failed to strip suffix '{}' of number: '{}'", suffix, str)
- })?
- .parse::<u32>()
- .with_context(|| format!("Failed to parse '{}'", suffix))
- }
-
- if s == "[No Duration]" {
- return Ok(Self { time: 0 });
- }
-
- let buf: Vec<_> = s.split(' ').collect();
-
- let hours;
- let minutes;
- let seconds;
-
- assert_eq!(buf.len(), 2, "Other lengths should not happen");
-
- if buf[0].ends_with('h') {
- hours = parse_num(buf[0], 'h')?;
- minutes = parse_num(buf[1], 'm')?;
- seconds = 0;
- } else if buf[0].ends_with('m') {
- hours = 0;
- minutes = parse_num(buf[0], 'm')?;
- seconds = parse_num(buf[1], 's')?;
- } else {
- unreachable!(
- "The first part always ends with 'h' or 'm', but was: {:#?}",
- buf
- )
- }
-
- Ok(Self {
- time: (hours * 60 * 60) + (minutes * 60) + seconds,
- })
- }
-}
-
-impl From<Option<f64>> for Duration {
- fn from(value: Option<f64>) -> Self {
- Self {
- time: value.unwrap_or(0.0).ceil() as u32,
- }
- }
-}
-
-impl std::fmt::Display for Duration {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
- const SECOND: u32 = 1;
- const MINUTE: u32 = 60 * SECOND;
- const HOUR: u32 = 60 * MINUTE;
-
- let base_hour = self.time - (self.time % HOUR);
- let base_min = (self.time % HOUR) - ((self.time % HOUR) % MINUTE);
- let base_sec = (self.time % HOUR) % MINUTE;
-
- let h = base_hour / HOUR;
- let m = base_min / MINUTE;
- let s = base_sec / SECOND;
-
- if self.time == 0 {
- write!(f, "[No Duration]")
- } else if h > 0 {
- write!(f, "{h}h {m}m")
- } else {
- write!(f, "{m}m {s}s")
- }
- }
-}
-#[cfg(test)]
-mod test {
- use super::Duration;
-
- #[test]
- fn test_display_duration_1h() {
- let dur = Duration { time: 60 * 60 };
- assert_eq!("1h 0m".to_owned(), dur.to_string());
- }
- #[test]
- fn test_display_duration_30min() {
- let dur = Duration { time: 60 * 30 };
- assert_eq!("30m 0s".to_owned(), dur.to_string());
- }
-}
diff --git a/src/select/selection_file/help.str b/src/select/selection_file/help.str
deleted file mode 100644
index eb76ce5..0000000
--- a/src/select/selection_file/help.str
+++ /dev/null
@@ -1,12 +0,0 @@
-# Commands:
-# w, watch [-p,-s,-l] Mark the video given by the hash to be watched
-# wd, watched [-p,-s,-l] Mark the video given by the hash as already watched
-# d, drop [-p,-s,-l] Mark the video given by the hash to be dropped
-# u, url [-p,-s,-l] Open the video URL in Firefox's `timesinks.youtube` profile
-# p, pick [-p,-s,-l] Reset the videos status to 'Pick'
-# a, add URL Add a video, defined by the URL
-#
-# See `yt select <cmd_name> --help` for more help.
-#
-# These lines can be re-ordered; they are executed from top to bottom.
-# vim: filetype=yts conceallevel=2 concealcursor=nc colorcolumn=
diff --git a/src/select/selection_file/help.str.license b/src/select/selection_file/help.str.license
deleted file mode 100644
index d4d410f..0000000
--- a/src/select/selection_file/help.str.license
+++ /dev/null
@@ -1,9 +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>.
diff --git a/src/select/selection_file/mod.rs b/src/select/selection_file/mod.rs
deleted file mode 100644
index 45809fa..0000000
--- a/src/select/selection_file/mod.rs
+++ /dev/null
@@ -1,34 +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>.
-
-//! The data structures needed to express the file, which the user edits
-
-use anyhow::{Context, Result};
-use trinitry::Trinitry;
-
-pub mod duration;
-
-pub fn process_line(line: &str) -> Result<Option<Vec<String>>> {
- // Filter out comments and empty lines
- if line.starts_with('#') || line.trim().is_empty() {
- Ok(None)
- } else {
- // pick 2195db "CouchRecherche? Gunnar und Han von STRG_F sind #mitfunkzuhause" "2020-04-01" "STRG_F - Live" "[1h 5m]" "https://www.youtube.com/watch?v=C8UXOaoMrXY"
-
- let tri =
- Trinitry::new(line).with_context(|| format!("Failed to parse line '{}'", line))?;
-
- let mut vec = Vec::with_capacity(tri.arguments().len() + 1);
- vec.push(tri.command().to_owned());
- vec.extend(tri.arguments().to_vec());
-
- Ok(Some(vec))
- }
-}