48 lines
1.3 KiB
Rust
48 lines
1.3 KiB
Rust
use std::time::Duration;
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
pub const PROG_NAME: &str = "tubest";
|
|
const DEFAULT_SEEK: Duration = Duration::from_secs(30);
|
|
|
|
#[derive(Serialize, Deserialize)]
|
|
pub enum Action {
|
|
Media(MediaAction),
|
|
}
|
|
|
|
#[derive(Serialize, Deserialize)]
|
|
pub enum MediaAction {
|
|
Enqueue {
|
|
path: String,
|
|
replace: bool,
|
|
},
|
|
Pause,
|
|
Unpause,
|
|
FastForward(Duration),
|
|
Rewind(Duration),
|
|
Next,
|
|
Stop,
|
|
}
|
|
|
|
impl Action {
|
|
pub fn from_line(line: &str) -> Self {
|
|
let split: Vec<&str> = line.split_whitespace().collect();
|
|
match &split[..] {
|
|
["pause", ..] => Action::Media(MediaAction::Pause),
|
|
["unpause", ..] => Action::Media(MediaAction::Unpause),
|
|
["rewind", ..] => {
|
|
if split.len() > 1 {
|
|
// TODO
|
|
}
|
|
Action::Media(MediaAction::Rewind(DEFAULT_SEEK))
|
|
},
|
|
["forward", ..] => {
|
|
// TODO: as above
|
|
Action::Media(MediaAction::FastForward(DEFAULT_SEEK))
|
|
},
|
|
["next" | "skip", ..] => Action::Media(MediaAction::Next),
|
|
["stop", ..] => Action::Media(MediaAction::Stop),
|
|
_ => Action::Media(MediaAction::Enqueue { path: line.to_string(), replace: true }),
|
|
}
|
|
}
|
|
}
|