fix some logic errors from refactoring
This commit is contained in:
@@ -71,11 +71,12 @@ func InitMPMediaHandler(playbackManager *PlaybackManager, artURLLookup func(trac
|
|||||||
|
|
||||||
mp.playbackManager.OnSongChange(func(track mediaprovider.MediaItem, _ *mediaprovider.Track) {
|
mp.playbackManager.OnSongChange(func(track mediaprovider.MediaItem, _ *mediaprovider.Track) {
|
||||||
// Asynchronously because artwork fetching can take time
|
// Asynchronously because artwork fetching can take time
|
||||||
var meta mediaprovider.MediaItemMetadata
|
var meta *mediaprovider.MediaItemMetadata
|
||||||
if track == nil {
|
if track != nil {
|
||||||
meta = track.Metadata()
|
m := track.Metadata()
|
||||||
|
meta = &m
|
||||||
}
|
}
|
||||||
go mp.updateMetadata(&meta)
|
go mp.updateMetadata(meta)
|
||||||
})
|
})
|
||||||
|
|
||||||
mp.playbackManager.OnStopped(func() {
|
mp.playbackManager.OnStopped(func() {
|
||||||
@@ -106,7 +107,9 @@ func (mp *MPMediaHandler) updateMetadata(meta *mediaprovider.MediaItemMetadata)
|
|||||||
title = meta.Name
|
title = meta.Name
|
||||||
var err error
|
var err error
|
||||||
if artURL, err = mp.artURLLookup(meta.CoverArtID); err != nil {
|
if artURL, err = mp.artURLLookup(meta.CoverArtID); err != nil {
|
||||||
log.Printf("error fetching art url: %s", err.Error())
|
if meta.CoverArtID != "" {
|
||||||
|
log.Printf("error fetching art url: %s", err.Error())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
artist = strings.Join(meta.Artists, ", ")
|
artist = strings.Join(meta.Artists, ", ")
|
||||||
duration = meta.Duration
|
duration = meta.Duration
|
||||||
|
|||||||
+34
-18
@@ -251,32 +251,48 @@ func (m *MPRISHandler) Metadata() (types.Metadata, error) {
|
|||||||
trackObjPath = m.curTrackPath
|
trackObjPath = m.curTrackPath
|
||||||
}
|
}
|
||||||
status := m.pm.PlayerStatus()
|
status := m.pm.PlayerStatus()
|
||||||
var tr mediaprovider.Track
|
|
||||||
|
var meta mediaprovider.MediaItemMetadata
|
||||||
|
// metadata that can come only from tracks
|
||||||
|
var discNumber, trackNumber, userRating, playCount, year int
|
||||||
|
var genre string
|
||||||
|
|
||||||
if np := m.pm.NowPlaying(); np != nil && status.State != player.Stopped {
|
if np := m.pm.NowPlaying(); np != nil && status.State != player.Stopped {
|
||||||
|
meta = np.Metadata()
|
||||||
if track, ok := np.(*mediaprovider.Track); ok {
|
if track, ok := np.(*mediaprovider.Track); ok {
|
||||||
tr = *track
|
discNumber = track.DiscNumber
|
||||||
|
trackNumber = track.TrackNumber
|
||||||
|
userRating = track.Rating
|
||||||
|
playCount = track.PlayCount
|
||||||
|
year = track.Year
|
||||||
|
genre = track.Genre
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var artURL string
|
var artURL string
|
||||||
if tr.ID != "" && m.ArtURLLookup != nil {
|
if meta.ID != "" && m.ArtURLLookup != nil {
|
||||||
if u, err := m.ArtURLLookup(tr.CoverArtID); err == nil {
|
if u, err := m.ArtURLLookup(meta.CoverArtID); err == nil {
|
||||||
artURL = u
|
artURL = u
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return types.Metadata{
|
mprisMeta := types.Metadata{
|
||||||
TrackId: dbus.ObjectPath(trackObjPath),
|
TrackId: dbus.ObjectPath(trackObjPath),
|
||||||
Length: secondsToMicroseconds(status.Duration),
|
Length: secondsToMicroseconds(status.Duration),
|
||||||
Title: tr.Title,
|
Title: meta.Name,
|
||||||
Album: tr.Album,
|
Album: meta.Album,
|
||||||
Artist: tr.ArtistNames,
|
Artist: meta.Artists,
|
||||||
DiscNumber: tr.DiscNumber,
|
DiscNumber: discNumber,
|
||||||
TrackNumber: tr.TrackNumber,
|
TrackNumber: trackNumber,
|
||||||
Genre: []string{tr.Genre},
|
UserRating: float64(userRating) / 5,
|
||||||
UserRating: float64(tr.Rating) / 5,
|
UseCount: playCount,
|
||||||
ContentCreated: strconv.Itoa(tr.Year),
|
ArtUrl: artURL,
|
||||||
UseCount: tr.PlayCount,
|
}
|
||||||
ArtUrl: artURL,
|
if genre != "" {
|
||||||
}, nil
|
mprisMeta.Genre = []string{genre}
|
||||||
|
}
|
||||||
|
if year != 0 {
|
||||||
|
mprisMeta.ContentCreated = strconv.Itoa(year)
|
||||||
|
}
|
||||||
|
return mprisMeta, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MPRISHandler) Volume() (float64, error) {
|
func (m *MPRISHandler) Volume() (float64, error) {
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ type playbackEngine struct {
|
|||||||
player player.BasePlayer
|
player player.BasePlayer
|
||||||
|
|
||||||
playTimeStopwatch util.Stopwatch
|
playTimeStopwatch util.Stopwatch
|
||||||
curTrackTime float64
|
curTrackDuration float64
|
||||||
latestTrackPosition float64 // cleared by checkScrobble
|
latestTrackPosition float64 // cleared by checkScrobble
|
||||||
callbacksDisabled bool
|
callbacksDisabled bool
|
||||||
|
|
||||||
@@ -400,10 +400,7 @@ func (p *playbackEngine) handleOnTrackChange() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
p.wasStopped = false
|
p.wasStopped = false
|
||||||
p.curTrackTime = 0
|
p.curTrackDuration = float64(p.playQueue[p.nowPlayingIdx].Metadata().Duration)
|
||||||
if tr, ok := p.playQueue[p.nowPlayingIdx].(*mediaprovider.Track); ok {
|
|
||||||
p.curTrackTime = float64(tr.Duration)
|
|
||||||
}
|
|
||||||
p.sendNowPlayingScrobble() // Must come before invokeOnChangeCallbacks b/c track may immediately be scrobbled
|
p.sendNowPlayingScrobble() // Must come before invokeOnChangeCallbacks b/c track may immediately be scrobbled
|
||||||
p.invokeOnSongChangeCallbacks()
|
p.invokeOnSongChangeCallbacks()
|
||||||
p.doUpdateTimePos(false)
|
p.doUpdateTimePos(false)
|
||||||
@@ -512,10 +509,10 @@ func (p *playbackEngine) checkScrobble() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
playDur := p.playTimeStopwatch.Elapsed()
|
playDur := p.playTimeStopwatch.Elapsed()
|
||||||
if playDur.Seconds() < 0.1 || p.curTrackTime < 0.1 {
|
if playDur.Seconds() < 0.1 || p.curTrackDuration < 0.1 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
pcnt := playDur.Seconds() / p.curTrackTime * 100
|
pcnt := playDur.Seconds() / p.curTrackDuration * 100
|
||||||
timeThresholdMet := p.scrobbleCfg.ThresholdTimeSeconds >= 0 &&
|
timeThresholdMet := p.scrobbleCfg.ThresholdTimeSeconds >= 0 &&
|
||||||
playDur.Seconds() >= float64(p.scrobbleCfg.ThresholdTimeSeconds)
|
playDur.Seconds() >= float64(p.scrobbleCfg.ThresholdTimeSeconds)
|
||||||
|
|
||||||
|
|||||||
@@ -281,7 +281,7 @@ func (p *PlaybackManager) SeekFraction(fraction float64) error {
|
|||||||
} else if fraction > 1 {
|
} else if fraction > 1 {
|
||||||
fraction = 1
|
fraction = 1
|
||||||
}
|
}
|
||||||
target := p.engine.curTrackTime * fraction
|
target := p.engine.curTrackDuration * fraction
|
||||||
return p.engine.SeekSeconds(target)
|
return p.engine.SeekSeconds(target)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ func SavePlayQueue(serverID string, pm *PlaybackManager, filepath string, server
|
|||||||
trackIDs := make([]string, 0, len(queue))
|
trackIDs := make([]string, 0, len(queue))
|
||||||
for _, item := range queue {
|
for _, item := range queue {
|
||||||
if _, ok := item.(*mediaprovider.Track); ok {
|
if _, ok := item.(*mediaprovider.Track); ok {
|
||||||
// dont' save radio stations in play queue
|
// don't save radio stations in play queue
|
||||||
trackIDs = append(trackIDs, item.Metadata().ID)
|
trackIDs = append(trackIDs, item.Metadata().ID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -94,9 +94,9 @@ func NewMainWindow(fyneApp fyne.App, appName, displayAppName, appVersion string,
|
|||||||
meta := item.Metadata()
|
meta := item.Metadata()
|
||||||
artistDisp := ""
|
artistDisp := ""
|
||||||
if tr, ok := item.(*mediaprovider.Track); ok {
|
if tr, ok := item.(*mediaprovider.Track); ok {
|
||||||
artistDisp = strings.Join(tr.ArtistNames, ", ")
|
artistDisp = " – " + strings.Join(tr.ArtistNames, ", ")
|
||||||
}
|
}
|
||||||
m.Window.SetTitle(fmt.Sprintf("%s – %s · %s", meta.Name, artistDisp, displayAppName))
|
m.Window.SetTitle(fmt.Sprintf("%s%s · %s", meta.Name, artistDisp, displayAppName))
|
||||||
if m.App.Config.Application.ShowTrackChangeNotification {
|
if m.App.Config.Application.ShowTrackChangeNotification {
|
||||||
// TODO: Once Fyne issue #2935 is resolved, show album cover
|
// TODO: Once Fyne issue #2935 is resolved, show album cover
|
||||||
fyne.CurrentApp().SendNotification(&fyne.Notification{
|
fyne.CurrentApp().SendNotification(&fyne.Notification{
|
||||||
|
|||||||
@@ -115,13 +115,14 @@ func (n *LargeNowPlayingCard) Update(item mediaprovider.MediaItem) {
|
|||||||
n.albumName.Text = ""
|
n.albumName.Text = ""
|
||||||
n.rating.Rating = 0
|
n.rating.Rating = 0
|
||||||
n.favorite.Favorite = false
|
n.favorite.Favorite = false
|
||||||
|
return
|
||||||
}
|
}
|
||||||
meta := item.Metadata()
|
meta := item.Metadata()
|
||||||
n.trackName.Segments[0].(*widget.TextSegment).Text = meta.Name
|
n.trackName.Segments[0].(*widget.TextSegment).Text = meta.Name
|
||||||
|
n.artistName.BuildSegments(meta.Artists, meta.ArtistIDs)
|
||||||
|
n.albumName.Text = meta.Album
|
||||||
|
|
||||||
if tr, ok := item.(*mediaprovider.Track); ok {
|
if tr, ok := item.(*mediaprovider.Track); ok {
|
||||||
n.artistName.BuildSegments(tr.ArtistNames, tr.ArtistIDs)
|
|
||||||
n.albumName.Text = tr.Album
|
|
||||||
n.rating.Rating = tr.Rating
|
n.rating.Rating = tr.Rating
|
||||||
n.favorite.Favorite = tr.Favorite
|
n.favorite.Favorite = tr.Favorite
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user