Skip to content

Commit

Permalink
feat(presences.YoutubeMusic): add better idle state handling and paus…
Browse files Browse the repository at this point in the history
…e/playing status (#21)
  • Loading branch information
manucabral committed Nov 26, 2024
1 parent f522215 commit 46e618f
Showing 1 changed file with 20 additions and 6 deletions.
26 changes: 20 additions & 6 deletions presences/Youtube Music/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ def __init__(self):
super().__init__(metadata_file=True)
self.activity_type: rpp.ActivityType = rpp.ActivityType.LISTENING
self.last_song: str = None
self.last_status: str = None
self.last_status: str = "unknown"
self.duration: int = 0
self.tab: rpp.Tab = None

Expand Down Expand Up @@ -72,39 +72,55 @@ def extract_extra_metadata(self):
return None
return self.tab.getProperties(element.objectId).textContent.value

def set_idle(self):
if self.last_status is not None:
self.last_status = None
self.state = "No listening..."
self.details = "Idle"
self.large_image = self.small_image = None
self.large_text = self.small_text = None
self.end = None
self.log.info("No listening activity detected")
self.force_update()

def on_update(self, runtime: rpp.Runtime, **context):

tabs = self.extract_tabs(runtime)
if not tabs: # No tabs found
if not tabs: # No tabs found}
self.set_idle()
return

last_tab = tabs[0]
if self.tab is None: # Set initial tab
self.tab = last_tab
elif self.tab.url != last_tab.url: # New tab detected
self.tab = last_tab
self.log.info(f"Tab changed to {self.tab.url}")
else: # Tab not changed
pass

if not self.tab.connected:
self.tab.connect()

metadata = self.extract_mediasession_metadata()
if not metadata:
return

playback_state = self.extract_mediasession_playblackstate()
artwork = self.extract_mediasession_artwork()
video_stream = self.extract_video_stream()
extra = self.extract_extra_metadata()


def update_time():
self.small_image = "playing" if playback_state == "playing" else "pause"
self.small_text = "Listening" if playback_state == "playing" else "Paused"
if video_stream:
if playback_state == "playing":
self.duration = int(video_stream.duration.value)
self.start = int(time.time()) - int(video_stream.currentTime.value)
self.end = self.start + self.duration
else:
self.start = self.end = None
self.end = None

if self.last_song != metadata["title"]: # Song changed
self.log.info(
Expand All @@ -130,8 +146,6 @@ def update_time():
else:
# Update time and playback state
update_time()
self.small_image = "playing" if playback_state == "playing" else "pause"
self.small_text = "Listening" if playback_state == "playing" else "Paused"
if self.last_status != playback_state:
self.last_status = playback_state
self.log.info(f"Playback state changed to {playback_state}")
Expand Down

0 comments on commit 46e618f

Please sign in to comment.