beginning of work to save queue to server

This commit is contained in:
Drew Weymouth
2024-04-16 17:26:46 -07:00
parent e99c867a39
commit 98a140791b
5 changed files with 39 additions and 7 deletions
+1 -1
View File
@@ -305,7 +305,7 @@ func (a *App) Shutdown() {
a.MPRISHandler.Shutdown()
a.PlaybackManager.DisableCallbacks()
if a.Config.Application.SavePlayQueue {
SavePlayQueue(a.ServerManager.ServerID.String(), a.PlaybackManager, configdir.LocalConfig(a.appName, savedQueueFile))
SavePlayQueue(a.ServerManager.ServerID.String(), a.PlaybackManager, configdir.LocalConfig(a.appName, savedQueueFile), false)
}
a.PlaybackManager.Stop() // will trigger scrobble check
a.Config.LocalPlayback.Volume = a.LocalPlayer.GetVolume()
+5
View File
@@ -258,6 +258,11 @@ type SupportsSharing interface {
CanShareArtists() bool
}
type CanSavePlayQueue interface {
SavePlayQueue(trackIDs []string, currentTrackPos int, timeSeconds int) error
GetPlayQueue() (*SavedPlayQueue, error)
}
type LyricsProvider interface {
GetLyrics(track *Track) (*Lyrics, error)
}
+6
View File
@@ -133,6 +133,12 @@ type LyricLine struct {
Start float64 // seconds
}
type SavedPlayQueue struct {
Tracks []*Track
TrackPos int
TimePos int // seconds
}
type ContentType int
const (
@@ -379,6 +379,27 @@ func (s *subsonicMediaProvider) GetLyrics(track *mediaprovider.Track) (*mediapro
return mpLyrics, nil
}
// CanSavePlayQueue interface
func (s *subsonicMediaProvider) SavePlayQueue(trackIDs []string, currentTrackPos int, timeSeconds int) error {
return s.client.SavePlayQueue(trackIDs, map[string]string{
"current": trackIDs[currentTrackPos],
"position": strconv.Itoa(timeSeconds * 1000),
})
}
func (s *subsonicMediaProvider) GetPlayQueue() (*mediaprovider.SavedPlayQueue, error) {
pq, err := s.client.GetPlayQueue()
if err != nil {
return nil, err
}
savedQueue := &mediaprovider.SavedPlayQueue{}
savedQueue.Tracks = sharedutil.MapSlice(pq.Entries, toTrack)
savedQueue.TrackPos = pq.Current
savedQueue.TimePos = int(pq.Position)
return savedQueue, nil
}
func toTrack(ch *subsonic.Child) *mediaprovider.Track {
if ch == nil {
return nil
+6 -6
View File
@@ -22,7 +22,7 @@ type serializedSavedPlayQueue struct {
}
// SavePlayQueue saves the current play queue and playback position to a JSON file.
func SavePlayQueue(serverID string, pm *PlaybackManager, filepath string) error {
func SavePlayQueue(serverID string, pm *PlaybackManager, filepath string, saveToServer bool) error {
queue := pm.GetPlayQueue()
stats := pm.PlayerStatus()
trackIdx := pm.NowPlayingIndex()
@@ -38,12 +38,12 @@ func SavePlayQueue(serverID string, pm *PlaybackManager, filepath string) error
TrackIndex: trackIdx,
TimePos: stats.TimePos,
}
b, err := json.Marshal(saved)
if err != nil {
return err
}
b, _ := json.Marshal(saved)
err := os.WriteFile(filepath, b, 0644)
return os.WriteFile(filepath, b, 0644)
if saveToServer {
}
return err
}
// Loads the saved play queue from the given filepath using the current server.