beginning of work to save queue to server
This commit is contained in:
+1
-1
@@ -305,7 +305,7 @@ func (a *App) Shutdown() {
|
|||||||
a.MPRISHandler.Shutdown()
|
a.MPRISHandler.Shutdown()
|
||||||
a.PlaybackManager.DisableCallbacks()
|
a.PlaybackManager.DisableCallbacks()
|
||||||
if a.Config.Application.SavePlayQueue {
|
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.PlaybackManager.Stop() // will trigger scrobble check
|
||||||
a.Config.LocalPlayback.Volume = a.LocalPlayer.GetVolume()
|
a.Config.LocalPlayback.Volume = a.LocalPlayer.GetVolume()
|
||||||
|
|||||||
@@ -258,6 +258,11 @@ type SupportsSharing interface {
|
|||||||
CanShareArtists() bool
|
CanShareArtists() bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type CanSavePlayQueue interface {
|
||||||
|
SavePlayQueue(trackIDs []string, currentTrackPos int, timeSeconds int) error
|
||||||
|
GetPlayQueue() (*SavedPlayQueue, error)
|
||||||
|
}
|
||||||
|
|
||||||
type LyricsProvider interface {
|
type LyricsProvider interface {
|
||||||
GetLyrics(track *Track) (*Lyrics, error)
|
GetLyrics(track *Track) (*Lyrics, error)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -133,6 +133,12 @@ type LyricLine struct {
|
|||||||
Start float64 // seconds
|
Start float64 // seconds
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SavedPlayQueue struct {
|
||||||
|
Tracks []*Track
|
||||||
|
TrackPos int
|
||||||
|
TimePos int // seconds
|
||||||
|
}
|
||||||
|
|
||||||
type ContentType int
|
type ContentType int
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|||||||
@@ -379,6 +379,27 @@ func (s *subsonicMediaProvider) GetLyrics(track *mediaprovider.Track) (*mediapro
|
|||||||
return mpLyrics, nil
|
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 {
|
func toTrack(ch *subsonic.Child) *mediaprovider.Track {
|
||||||
if ch == nil {
|
if ch == nil {
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ type serializedSavedPlayQueue struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SavePlayQueue saves the current play queue and playback position to a JSON file.
|
// 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()
|
queue := pm.GetPlayQueue()
|
||||||
stats := pm.PlayerStatus()
|
stats := pm.PlayerStatus()
|
||||||
trackIdx := pm.NowPlayingIndex()
|
trackIdx := pm.NowPlayingIndex()
|
||||||
@@ -38,12 +38,12 @@ func SavePlayQueue(serverID string, pm *PlaybackManager, filepath string) error
|
|||||||
TrackIndex: trackIdx,
|
TrackIndex: trackIdx,
|
||||||
TimePos: stats.TimePos,
|
TimePos: stats.TimePos,
|
||||||
}
|
}
|
||||||
b, err := json.Marshal(saved)
|
b, _ := json.Marshal(saved)
|
||||||
if err != nil {
|
err := os.WriteFile(filepath, b, 0644)
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return os.WriteFile(filepath, b, 0644)
|
if saveToServer {
|
||||||
|
}
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Loads the saved play queue from the given filepath using the current server.
|
// Loads the saved play queue from the given filepath using the current server.
|
||||||
|
|||||||
Reference in New Issue
Block a user