parent
ea941433b0
commit
b21f0c804b
26
src/ipc.rs
26
src/ipc.rs
|
@ -257,7 +257,7 @@ pub fn run_mpv_command(instance: &Mpv, command: &str, args: &[&str]) -> Result<(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn observe_mpv_property(instance: &Mpv, id: &isize, property: &str) -> Result<(), Error> {
|
pub fn observe_mpv_property(instance: &Mpv, id: &usize, property: &str) -> Result<(), Error> {
|
||||||
let ipc_string = format!(
|
let ipc_string = format!(
|
||||||
"{{ \"command\": [\"observe_property\", {}, \"{}\"] }}\n",
|
"{{ \"command\": [\"observe_property\", {}, \"{}\"] }}\n",
|
||||||
id, property
|
id, property
|
||||||
|
@ -278,7 +278,25 @@ pub fn observe_mpv_property(instance: &Mpv, id: &isize, property: &str) -> Resul
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn try_convert_property(name: &str, id: isize, data: MpvDataType) -> Event {
|
pub fn unobserve_mpv_property(instance: &Mpv, id: &usize) -> Result<(), Error> {
|
||||||
|
let ipc_string = format!("{{ \"command\": [\"unobserve_property\", {}] }}\n", id);
|
||||||
|
match serde_json::from_str::<Value>(&send_command_sync(instance, &ipc_string)) {
|
||||||
|
Ok(feedback) => {
|
||||||
|
if let Value::String(ref error) = feedback["error"] {
|
||||||
|
if error == "success" {
|
||||||
|
Ok(())
|
||||||
|
} else {
|
||||||
|
Err(Error(ErrorCode::MpvError(error.to_string())))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Err(Error(ErrorCode::UnexpectedResult))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(why) => Err(Error(ErrorCode::JsonParseError(why.to_string()))),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn try_convert_property(name: &str, id: usize, data: MpvDataType) -> Event {
|
||||||
let property = match name {
|
let property = match name {
|
||||||
"path" => match data {
|
"path" => match data {
|
||||||
MpvDataType::String(value) => Property::Path(Some(value)),
|
MpvDataType::String(value) => Property::Path(Some(value)),
|
||||||
|
@ -375,7 +393,7 @@ pub fn listen(instance: &mut Mpv) -> Result<Event, Error> {
|
||||||
}
|
}
|
||||||
"property-change" => {
|
"property-change" => {
|
||||||
let name: String;
|
let name: String;
|
||||||
let id: isize;
|
let id: usize;
|
||||||
let data: MpvDataType;
|
let data: MpvDataType;
|
||||||
|
|
||||||
if let Value::String(ref n) = e["name"] {
|
if let Value::String(ref n) = e["name"] {
|
||||||
|
@ -385,7 +403,7 @@ pub fn listen(instance: &mut Mpv) -> Result<Event, Error> {
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Value::Number(ref n) = e["id"] {
|
if let Value::Number(ref n) = e["id"] {
|
||||||
id = n.as_i64().unwrap() as isize;
|
id = n.as_i64().unwrap() as usize;
|
||||||
} else {
|
} else {
|
||||||
id = 0;
|
id = 0;
|
||||||
}
|
}
|
||||||
|
|
24
src/lib.rs
24
src/lib.rs
|
@ -23,7 +23,7 @@ pub enum Event {
|
||||||
MetadataUpdate,
|
MetadataUpdate,
|
||||||
Seek,
|
Seek,
|
||||||
PlaybackRestart,
|
PlaybackRestart,
|
||||||
PropertyChange { id: isize, property: Property },
|
PropertyChange { id: usize, property: Property },
|
||||||
ChapterChange,
|
ChapterChange,
|
||||||
Unimplemented,
|
Unimplemented,
|
||||||
}
|
}
|
||||||
|
@ -52,6 +52,10 @@ pub enum MpvCommand {
|
||||||
from: usize,
|
from: usize,
|
||||||
to: usize,
|
to: usize,
|
||||||
},
|
},
|
||||||
|
Observe {
|
||||||
|
id: usize,
|
||||||
|
property: String
|
||||||
|
},
|
||||||
PlaylistNext,
|
PlaylistNext,
|
||||||
PlaylistPrev,
|
PlaylistPrev,
|
||||||
PlaylistRemove(usize),
|
PlaylistRemove(usize),
|
||||||
|
@ -62,6 +66,7 @@ pub enum MpvCommand {
|
||||||
option: SeekOptions,
|
option: SeekOptions,
|
||||||
},
|
},
|
||||||
Stop,
|
Stop,
|
||||||
|
Unobserve(usize),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
@ -405,8 +410,15 @@ impl Mpv {
|
||||||
self.run_command(MpvCommand::PlaylistNext)
|
self.run_command(MpvCommand::PlaylistNext)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn observe_property(&self, id: &isize, property: &str) -> Result<(), Error> {
|
pub fn observe_property(&self, id: usize, property: &str) -> Result<(), Error> {
|
||||||
observe_mpv_property(self, id, property)
|
self.run_command(MpvCommand::Observe {
|
||||||
|
id: id,
|
||||||
|
property: property.to_string(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn unobserve_property(&self, id: usize) -> Result<(), Error> {
|
||||||
|
self.run_command(MpvCommand::Unobserve(id))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn pause(&self) -> Result<(), Error> {
|
pub fn pause(&self) -> Result<(), Error> {
|
||||||
|
@ -474,6 +486,9 @@ impl Mpv {
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
MpvCommand::Observe { id, property } => {
|
||||||
|
observe_mpv_property(self, &id, &property)
|
||||||
|
}
|
||||||
MpvCommand::PlaylistClear => run_mpv_command(self, "playlist-clear", &[]),
|
MpvCommand::PlaylistClear => run_mpv_command(self, "playlist-clear", &[]),
|
||||||
MpvCommand::PlaylistMove { from, to } => {
|
MpvCommand::PlaylistMove { from, to } => {
|
||||||
run_mpv_command(self, "playlist-move", &[&from.to_string(), &to.to_string()])
|
run_mpv_command(self, "playlist-move", &[&from.to_string(), &to.to_string()])
|
||||||
|
@ -499,6 +514,9 @@ impl Mpv {
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
MpvCommand::Stop => run_mpv_command(self, "stop", &[]),
|
MpvCommand::Stop => run_mpv_command(self, "stop", &[]),
|
||||||
|
MpvCommand::Unobserve(id) => {
|
||||||
|
unobserve_mpv_property(self, &id)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue