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) {
|
||||
// Asynchronously because artwork fetching can take time
|
||||
var meta mediaprovider.MediaItemMetadata
|
||||
if track == nil {
|
||||
meta = track.Metadata()
|
||||
var meta *mediaprovider.MediaItemMetadata
|
||||
if track != nil {
|
||||
m := track.Metadata()
|
||||
meta = &m
|
||||
}
|
||||
go mp.updateMetadata(&meta)
|
||||
go mp.updateMetadata(meta)
|
||||
})
|
||||
|
||||
mp.playbackManager.OnStopped(func() {
|
||||
@@ -106,7 +107,9 @@ func (mp *MPMediaHandler) updateMetadata(meta *mediaprovider.MediaItemMetadata)
|
||||
title = meta.Name
|
||||
var err error
|
||||
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, ", ")
|
||||
duration = meta.Duration
|
||||
|
||||
+34
-18
@@ -251,32 +251,48 @@ func (m *MPRISHandler) Metadata() (types.Metadata, error) {
|
||||
trackObjPath = m.curTrackPath
|
||||
}
|
||||
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 {
|
||||
meta = np.Metadata()
|
||||
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
|
||||
if tr.ID != "" && m.ArtURLLookup != nil {
|
||||
if u, err := m.ArtURLLookup(tr.CoverArtID); err == nil {
|
||||
if meta.ID != "" && m.ArtURLLookup != nil {
|
||||
if u, err := m.ArtURLLookup(meta.CoverArtID); err == nil {
|
||||
artURL = u
|
||||
}
|
||||
}
|
||||
return types.Metadata{
|
||||
TrackId: dbus.ObjectPath(trackObjPath),
|
||||
Length: secondsToMicroseconds(status.Duration),
|
||||
Title: tr.Title,
|
||||
Album: tr.Album,
|
||||
Artist: tr.ArtistNames,
|
||||
DiscNumber: tr.DiscNumber,
|
||||
TrackNumber: tr.TrackNumber,
|
||||
Genre: []string{tr.Genre},
|
||||
UserRating: float64(tr.Rating) / 5,
|
||||
ContentCreated: strconv.Itoa(tr.Year),
|
||||
UseCount: tr.PlayCount,
|
||||
ArtUrl: artURL,
|
||||
}, nil
|
||||
mprisMeta := types.Metadata{
|
||||
TrackId: dbus.ObjectPath(trackObjPath),
|
||||
Length: secondsToMicroseconds(status.Duration),
|
||||
Title: meta.Name,
|
||||
Album: meta.Album,
|
||||
Artist: meta.Artists,
|
||||
DiscNumber: discNumber,
|
||||
TrackNumber: trackNumber,
|
||||
UserRating: float64(userRating) / 5,
|
||||
UseCount: playCount,
|
||||
ArtUrl: artURL,
|
||||
}
|
||||
if genre != "" {
|
||||
mprisMeta.Genre = []string{genre}
|
||||
}
|
||||
if year != 0 {
|
||||
mprisMeta.ContentCreated = strconv.Itoa(year)
|
||||
}
|
||||
return mprisMeta, nil
|
||||
}
|
||||
|
||||
func (m *MPRISHandler) Volume() (float64, error) {
|
||||
|
||||
@@ -44,7 +44,7 @@ type playbackEngine struct {
|
||||
player player.BasePlayer
|
||||
|
||||
playTimeStopwatch util.Stopwatch
|
||||
curTrackTime float64
|
||||
curTrackDuration float64
|
||||
latestTrackPosition float64 // cleared by checkScrobble
|
||||
callbacksDisabled bool
|
||||
|
||||
@@ -400,10 +400,7 @@ func (p *playbackEngine) handleOnTrackChange() {
|
||||
}
|
||||
}
|
||||
p.wasStopped = false
|
||||
p.curTrackTime = 0
|
||||
if tr, ok := p.playQueue[p.nowPlayingIdx].(*mediaprovider.Track); ok {
|
||||
p.curTrackTime = float64(tr.Duration)
|
||||
}
|
||||
p.curTrackDuration = float64(p.playQueue[p.nowPlayingIdx].Metadata().Duration)
|
||||
p.sendNowPlayingScrobble() // Must come before invokeOnChangeCallbacks b/c track may immediately be scrobbled
|
||||
p.invokeOnSongChangeCallbacks()
|
||||
p.doUpdateTimePos(false)
|
||||
@@ -512,10 +509,10 @@ func (p *playbackEngine) checkScrobble() {
|
||||
}
|
||||
|
||||
playDur := p.playTimeStopwatch.Elapsed()
|
||||
if playDur.Seconds() < 0.1 || p.curTrackTime < 0.1 {
|
||||
if playDur.Seconds() < 0.1 || p.curTrackDuration < 0.1 {
|
||||
return
|
||||
}
|
||||
pcnt := playDur.Seconds() / p.curTrackTime * 100
|
||||
pcnt := playDur.Seconds() / p.curTrackDuration * 100
|
||||
timeThresholdMet := p.scrobbleCfg.ThresholdTimeSeconds >= 0 &&
|
||||
playDur.Seconds() >= float64(p.scrobbleCfg.ThresholdTimeSeconds)
|
||||
|
||||
|
||||
@@ -281,7 +281,7 @@ func (p *PlaybackManager) SeekFraction(fraction float64) error {
|
||||
} else if fraction > 1 {
|
||||
fraction = 1
|
||||
}
|
||||
target := p.engine.curTrackTime * fraction
|
||||
target := p.engine.curTrackDuration * fraction
|
||||
return p.engine.SeekSeconds(target)
|
||||
}
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ func SavePlayQueue(serverID string, pm *PlaybackManager, filepath string, server
|
||||
trackIDs := make([]string, 0, len(queue))
|
||||
for _, item := range queue {
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -94,9 +94,9 @@ func NewMainWindow(fyneApp fyne.App, appName, displayAppName, appVersion string,
|
||||
meta := item.Metadata()
|
||||
artistDisp := ""
|
||||
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 {
|
||||
// TODO: Once Fyne issue #2935 is resolved, show album cover
|
||||
fyne.CurrentApp().SendNotification(&fyne.Notification{
|
||||
|
||||
@@ -115,13 +115,14 @@ func (n *LargeNowPlayingCard) Update(item mediaprovider.MediaItem) {
|
||||
n.albumName.Text = ""
|
||||
n.rating.Rating = 0
|
||||
n.favorite.Favorite = false
|
||||
return
|
||||
}
|
||||
meta := item.Metadata()
|
||||
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 {
|
||||
n.artistName.BuildSegments(tr.ArtistNames, tr.ArtistIDs)
|
||||
n.albumName.Text = tr.Album
|
||||
n.rating.Rating = tr.Rating
|
||||
n.favorite.Favorite = tr.Favorite
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user