about summary refs log tree commit diff stats
path: root/crates/libmpv2/src/mpv
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-08-24 16:38:31 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-08-24 16:38:31 +0200
commit75f2a6a9cf0bab4be6530a0f91fa05bf9d9d1b24 (patch)
tree3527b4319aefddd9d297874521f17a3e6c965f8d /crates/libmpv2/src/mpv
parentfeat(watch): Idle until new videos are available instead of exiting (diff)
downloadyt-75f2a6a9cf0bab4be6530a0f91fa05bf9d9d1b24.tar.gz
yt-75f2a6a9cf0bab4be6530a0f91fa05bf9d9d1b24.zip
refactor(watch): Don't track the playlist, use the properties of `mpv` instead
Diffstat (limited to '')
-rw-r--r--crates/libmpv2/src/mpv/events.rs30
1 files changed, 26 insertions, 4 deletions
diff --git a/crates/libmpv2/src/mpv/events.rs b/crates/libmpv2/src/mpv/events.rs
index cbe1ef3..6fb4683 100644
--- a/crates/libmpv2/src/mpv/events.rs
+++ b/crates/libmpv2/src/mpv/events.rs
@@ -41,6 +41,20 @@ pub mod mpv_event_id {
     pub use libmpv2_sys::mpv_event_id_MPV_EVENT_VIDEO_RECONFIG as VideoReconfig;
 }
 
+/// A unique id of every entry MPV has loaded
+#[derive(Debug, PartialEq, PartialOrd, Ord, Eq, Hash)]
+pub struct PlaylistEntryId(i64);
+impl PlaylistEntryId {
+    pub fn new(val: i64) -> Self {
+        Self(val)
+    }
+}
+impl Display for PlaylistEntryId {
+    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+        self.0.fmt(f)
+    }
+}
+
 #[derive(Debug)]
 /// Data that is returned by both `GetPropertyReply` and `PropertyChange` events.
 pub enum PropertyData<'a> {
@@ -80,7 +94,11 @@ impl<'a> PropertyData<'a> {
     }
 }
 
-pub type PlaylistEntryId = i64;
+#[derive(Debug)]
+pub struct EndFileEvent {
+    pub reason: EndFileReason,
+    pub playlist_entry_id: PlaylistEntryId,
+}
 
 #[derive(Debug)]
 pub enum Event<'a> {
@@ -106,7 +124,7 @@ pub enum Event<'a> {
     /// Event received when a new file is playing
     StartFile(PlaylistEntryId),
     /// Event received when the file being played currently has stopped, for an error or not
-    EndFile(EndFileReason),
+    EndFile(EndFileEvent),
     /// Event received when a file has been *loaded*, but has not been started
     FileLoaded,
     ClientMessage(Vec<&'a str>),
@@ -270,7 +288,7 @@ impl EventContext {
             mpv_event_id::StartFile => {
                 let playlist_id = unsafe { *(event.data as *mut i64) };
 
-                Some(Ok(Event::StartFile(playlist_id)))
+                Some(Ok(Event::StartFile(PlaylistEntryId(playlist_id))))
             }
             mpv_event_id::EndFile => {
                 let end_file = unsafe { *(event.data as *mut libmpv2_sys::mpv_event_end_file) };
@@ -280,7 +298,11 @@ impl EventContext {
                 if let Err(e) = mpv_err((), end_file.error) {
                     Some(Err(e))
                 } else {
-                    Some(Ok(Event::EndFile(end_file.reason.into())))
+                    let event = EndFileEvent {
+                        reason: end_file.reason.into(),
+                        playlist_entry_id: PlaylistEntryId(end_file.playlist_entry_id),
+                    };
+                    Some(Ok(Event::EndFile(event)))
                 }
             }
             mpv_event_id::FileLoaded => Some(Ok(Event::FileLoaded)),