- Added scrobbling functionality, tracks will now be scrobbled if you have enabled the feature on your Navidrome instance

- Resolves #52
- Resolves #33
This commit is contained in:
Ross Stewart
2025-09-08 13:07:20 +01:00
parent 71176626dc
commit cc3ab62abe
2 changed files with 19 additions and 0 deletions

View File

@@ -1,3 +1,4 @@
from datetime import datetime
from flask import Flask, render_template from flask import Flask, render_template
import logging import logging
from multiprocessing import Process from multiprocessing import Process
@@ -845,6 +846,11 @@ class PlaybackFinishedHandler(AbstractRequestHandler):
def handle(self, handler_input: HandlerInput) -> Response: def handle(self, handler_input: HandlerInput) -> Response:
logger.debug('In PlaybackFinishedHandler') logger.debug('In PlaybackFinishedHandler')
# Generate a timestamp in milliseconds for scrobbling
timestamp_ms = datetime.now().timestamp()
current_track = play_queue.get_current_track()
connection.scrobble(current_track.id, timestamp_ms)
play_queue.get_next_track() play_queue.get_next_track()
return handler_input.response_builder.response return handler_input.response_builder.response

View File

@@ -64,6 +64,19 @@ class SubsonicConnection:
return self.conn.ping() return self.conn.ping()
def scrobble(self, track_id: str, time: int) -> None:
"""Scrobble the given track
:param str track_id: The ID of the track to scrobble
:param int time: UNIX timestamp of track play time
:return: None
"""
self.logger.debug('In function scrobble()')
self.conn.scrobble(track_id, True, time)
return None
def search_playlist(self, term: str) -> Union[str, None]: def search_playlist(self, term: str) -> Union[str, None]:
"""Search the media server for the given playlist """Search the media server for the given playlist