pub dec: DecoderType,
}
+#[derive(Clone,Copy)]
+enum OptionLifetime<T: Copy> {
+ None,
+ Once(T),
+ Permanent(T),
+}
+
+impl<T: Copy> OptionLifetime<T> {
+ fn get_val(&self) -> Option<T> {
+ 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;
}
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<NATimePoint>) -> Window {
if self.loglevel != LogLevel::Quiet {
println!("Playing {name}");
}
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");
}
}
}
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; },
"-seek" | "-start" => {
if let Some(arg) = aiter.next() {
if let Ok(time) = arg.parse::<NATimePoint>() {
- 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::<NATimePoint>() {
+ seek_time = OptionLifetime::Permanent(time);
} else {
println!("wrong seek time");
- seek_time = NATimePoint::None;
+ seek_time = OptionLifetime::None;
}
}
},
}
},
_ => {
- 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;
+ }
},
};
}