add scrobbling for Jellyfin
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
package jellyfin
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"image"
|
||||
"io"
|
||||
"math"
|
||||
@@ -360,8 +359,14 @@ func (j *jellyfinMediaProvider) DownloadTrack(trackID string) (io.Reader, error)
|
||||
return resp.Body, nil
|
||||
}
|
||||
|
||||
func (j *jellyfinMediaProvider) Scrobble(trackID string, submission bool) error {
|
||||
return errors.New("unimplemented")
|
||||
func (j *jellyfinMediaProvider) ClientDecidesScrobble() bool { return false }
|
||||
|
||||
func (j *jellyfinMediaProvider) TrackBeganPlayback(trackID string) error {
|
||||
return j.client.UpdatePlayStatus(trackID, jellyfin.Start, 0)
|
||||
}
|
||||
|
||||
func (j *jellyfinMediaProvider) TrackEndedPlayback(trackID string, position int, submission bool) error {
|
||||
return j.client.UpdatePlayStatus(trackID, jellyfin.Stop, int64(position)*runTimeTicksPerSecond)
|
||||
}
|
||||
|
||||
func (j *jellyfinMediaProvider) RescanLibrary() error {
|
||||
|
||||
@@ -130,7 +130,14 @@ type MediaProvider interface {
|
||||
|
||||
DeletePlaylist(id string) error
|
||||
|
||||
Scrobble(trackID string, submission bool) error
|
||||
// True if the `submission` parameter to TrackEndedPlayback will be respected
|
||||
// If false, the begin playback scrobble registers a play count immediately
|
||||
// when TrackBeganPlayback is invoked.
|
||||
ClientDecidesScrobble() bool
|
||||
|
||||
TrackBeganPlayback(trackID string) error
|
||||
|
||||
TrackEndedPlayback(trackID string, positionSecs int, submission bool) error
|
||||
|
||||
DownloadTrack(trackID string) (io.Reader, error)
|
||||
|
||||
|
||||
@@ -256,10 +256,21 @@ func (s *subsonicMediaProvider) ReplacePlaylistTracks(playlistID string, trackID
|
||||
return s.client.CreatePlaylistWithTracks(trackIDs, map[string]string{"playlistId": playlistID})
|
||||
}
|
||||
|
||||
func (s *subsonicMediaProvider) Scrobble(trackID string, submission bool) error {
|
||||
func (s *subsonicMediaProvider) ClientDecidesScrobble() bool { return true }
|
||||
|
||||
func (s *subsonicMediaProvider) TrackBeganPlayback(trackID string) error {
|
||||
return s.client.Scrobble(trackID, map[string]string{
|
||||
"time": strconv.FormatInt(time.Now().UnixMilli(), 10),
|
||||
"submission": strconv.FormatBool(submission)})
|
||||
"submission": "false"})
|
||||
}
|
||||
|
||||
func (s *subsonicMediaProvider) TrackEndedPlayback(trackID string, _ int, submission bool) error {
|
||||
if !submission {
|
||||
return nil
|
||||
}
|
||||
return s.client.Scrobble(trackID, map[string]string{
|
||||
"time": strconv.FormatInt(time.Now().UnixMilli(), 10),
|
||||
"submission": "true"})
|
||||
}
|
||||
|
||||
func (s *subsonicMediaProvider) SetFavorite(params mediaprovider.RatingFavoriteParameters, favorite bool) error {
|
||||
|
||||
Reference in New Issue
Block a user