From f55bf0d66770d18f613da811c165e692b9a433c5 Mon Sep 17 00:00:00 2001 From: Kostya Shishkov Date: Sun, 2 Aug 2026 19:16:30 +0200 Subject: [PATCH] videoplayer: add option for initial seek on all played files --- videoplayer/src/main.rs | 47 +++++++++++++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/videoplayer/src/main.rs b/videoplayer/src/main.rs index 8f98bc2..e55bfe5 100644 --- a/videoplayer/src/main.rs +++ b/videoplayer/src/main.rs @@ -170,6 +170,23 @@ pub struct DecoderStuff { pub dec: DecoderType, } +#[derive(Clone,Copy)] +enum OptionLifetime { + None, + Once(T), + Permanent(T), +} + +impl OptionLifetime { + fn get_val(&self) -> Option { + match *self { + OptionLifetime::None => None, + OptionLifetime::Once(val) => Some(val), + OptionLifetime::Permanent(val) => Some(val), + } + } +} + fn format_time(ms: u64) -> String { let s = ms / 1000; let ds = (ms % 1000) / 100; @@ -792,7 +809,7 @@ impl Player { } Ok(false) } - fn play(&mut self, mut window: Window, name: &str, start_time: NATimePoint) -> Window { + fn play(&mut self, mut window: Window, name: &str, start_time: &OptionLifetime) -> Window { if self.loglevel != LogLevel::Quiet { println!("Playing {name}"); } @@ -820,9 +837,9 @@ impl Player { return window; } - if start_time != NATimePoint::None { - debug_log!(self; {format!(" start seek to {}", start_time)}); - if dmx.seek(start_time).is_err() { + if let Some(start_time_val) = start_time.get_val() { + debug_log!(self; {format!(" start seek to {}", start_time_val)}); + if dmx.seek(start_time_val).is_err() { println!("initial seek failed"); } } @@ -1288,7 +1305,7 @@ fn main() { } let mut aiter = args.iter().skip(1); - let mut seek_time = NATimePoint::None; + let mut seek_time = OptionLifetime::None; while let Some(arg) = aiter.next() { match arg.as_str() { "-an" => { player.play_audio = false; }, @@ -1298,10 +1315,20 @@ fn main() { "-seek" | "-start" => { if let Some(arg) = aiter.next() { if let Ok(time) = arg.parse::() { - seek_time = time; + seek_time = OptionLifetime::Once(time); + } else { + println!("wrong seek time"); + seek_time = OptionLifetime::None; + } + } + }, + "-seekall" | "-startall" => { + if let Some(arg) = aiter.next() { + if let Ok(time) = arg.parse::() { + seek_time = OptionLifetime::Permanent(time); } else { println!("wrong seek time"); - seek_time = NATimePoint::None; + seek_time = OptionLifetime::None; } } }, @@ -1407,9 +1434,11 @@ fn main() { } }, _ => { - window = player.play(window, arg, seek_time); + window = player.play(window, arg, &seek_time); if player.end { break; } - seek_time = NATimePoint::None; + if !matches!(seek_time, OptionLifetime::Permanent(_)) { + seek_time = OptionLifetime::None; + } }, }; } -- 2.39.5