- Version 0.20.0 of Supersonic
+ Version 0.20.1 of Supersonic
Added
- - Quickly fade out audio when pausing
- - Add collapsed/compact view for page headers
- - Add option to prevent screensaver or screen sleep on Now Playing page
- - Add lyrics tab to sidebar
- - Add additional tracklist columns for Genre, Album Artist, File Type, Date Added
- - Show year on Now Playing page
- - Option to round image corners throughout app
- - Option to used blurred album cover for background of Now Playing page
- - Left click on system tray icon raises app window
- - Button in Advanced tab of settings window to clear caches
- - Seeking Next while playing the last track in queue now cycles around back to the beginning
- - Behavior and naming of "Stop after current track" changed to "Pause after current track"
+ - Improved translations for Chinese, Japanese, Italian
+ - Setting to disable fade out on pause
+ - Ignore SSL validation setting migrated to per-server option
Fixed
- - LrcLib fetcher no longer crashes on tracks with no artist name
- - Windows now playing notifications are now silent, and include album cover
+ - Some uPnP devices not recognized
+ - Jellyfin synced lyrics not shown as synced if first line starts at 00:00.00
+ - Regression in peak meter animation smoothness
+ - Some optimizations of tracklist rendering
+ - Autoplay tracks enqueuing too early
+ - Fix equalizer filter string for ffmpeg
+ - Unnecessarily large minimum window width for pages with tracklist
+ - Use sort tags for sorting artist discography by album name (OpenSubsonic only)
+ - For Jellyfin - Add to Playlist dialog not showing playlists when logged in with username in different case
+ - Fix Now Playing background dissolve animation when next track has same cover art as previous
diff --git a/res/metadata.go b/res/metadata.go
index 4fc1bab..a1b5342 100644
--- a/res/metadata.go
+++ b/res/metadata.go
@@ -3,7 +3,7 @@ package res
const (
AppName = "supersonic"
DisplayName = "Supersonic"
- AppVersion = "0.20.0"
+ AppVersion = "0.20.1"
AppVersionTag = "v" + AppVersion
ConfigFile = "config.toml"
GithubURL = "https://github.com/dweymouth/supersonic"
@@ -15,21 +15,20 @@ const (
var (
WhatsAdded = `
## Added
-* Quickly fade out audio when pausing
-* Add collapsed/compact view for page headers
-* Add option to prevent screensaver or screen sleep on Now Playing page
-* Add lyrics tab to sidebar
-* Add additional tracklist columns for Genre, Album Artist, File Type, Date Added
-* Show year on Now Playing page
-* Option to round image corners throughout app
-* Option to used blurred album cover for background of Now Playing page
-* Left click on system tray icon raises app window
-* Button in Advanced tab of settings window to clear caches
-* Seeking Next while playing the last track in queue now cycles around back to the beginning
-* Behavior and naming of "Stop after current track" changed to "Pause after current track"`
+* Improved translations for Chinese, Japanese, Italian
+* Setting to disable fade out on pause
+* Ignore SSL validation setting migrated to per-server option`
WhatsFixed = `
## Fixed
-* LrcLib fetcher no longer crashes on tracks with no artist name
-* Windows now playing notifications are now silent, and include album cover`
+* Some uPnP devices not recognized
+* Jellyfin synced lyrics not shown as synced if first line starts at 00:00.00
+* Regression in peak meter animation smoothness
+* Some optimizations of tracklist rendering
+* Autoplay tracks enqueuing too early
+* Fix equalizer filter string for ffmpeg
+* Unnecessarily large minimum window width for pages with tracklist
+* Use sort tags for sorting artist discography by album name (OpenSubsonic only)
+* For Jellyfin - Add to Playlist dialog not showing playlists when logged in with username in different case
+* Fix Now Playing background dissolve animation when next track has same cover art as previous`
)
diff --git a/res/translations/zh.json b/res/translations/zh.json
index 52b2b08..d553f3a 100644
--- a/res/translations/zh.json
+++ b/res/translations/zh.json
@@ -4,7 +4,7 @@
"Add Server": "添加服务器",
"Add to playlist": "添加到播放列表",
"Add to queue": "添加到队列",
- "Advanced": "Advanced",
+ "Advanced": "高级",
"Album": "专辑",
"Album Count": "专辑数量",
"Album artist": "专辑艺术家",
@@ -57,7 +57,7 @@
"Compilation": "合集",
"Compilations": "合集",
"Composer": "作曲家",
- "Composers": "Composers",
+ "Composers": "作曲家",
"Configure your music server to add radio stations": "配置您的音乐服务器以添加电台",
"Confirm Delete Playlist": "确认删除播放列表",
"Confirm Delete Server": "确认删除服务器",
@@ -92,9 +92,9 @@
"Equalizer": "均衡器",
"Error": "错误",
"Error creating playlist": "创建播放列表时出错",
- "Error updating playlist": "Error updating playlist",
+ "Error updating playlist": "更新播放列表时出错",
"Exclusive mode": "独占模式",
- "Fade out on pause": "Fade out on pause",
+ "Fade out on pause": "暂停时淡出",
"Fav.": "收藏",
"Favorites": "收藏",
"Feb": "二月",
@@ -133,7 +133,7 @@
"Lyrics": "歌词",
"Lyrics not available": "歌词不可用",
"Mar": "三月",
- "Maximum image cache size": "Maximum image cache size",
+ "Maximum image cache size": "最大图像缓存大小",
"May": "五月",
"Menu": "菜单",
"Mixtape": "混音带",
@@ -177,9 +177,9 @@
"Prevent clipping": "防止削波",
"Prevent screensaver on Now Playing page": "禁止在“正在播放”页面显示屏幕保护程序",
"Previous": "上一个",
- "Private playlist by": "私人 播放列表作者",
- "Public": "Public",
- "Public playlist by": "公开 播放列表作者",
+ "Private playlist by": "私人播放列表",
+ "Public": "公开",
+ "Public playlist by": "公开播放列表",
"Quit": "退出",
"Random": "随机",
"Rating": "评分",
@@ -259,15 +259,15 @@
"Track gain": "曲目增益",
"Track number": "曲目编号",
"Track peak": "曲目峰值",
- "Tracks": "Tracks",
+ "Tracks": "曲目",
"Transcode to": "转码为",
- "UI Scaling": "UI 缩放",
+ "UI Scaling": "界面缩放",
"URL": "URL",
"Unable to play albums": "无法播放专辑",
"Unable to play artist radio": "无法播放艺术家电台",
- "Unable to play random albums": "Unable to play random albums",
+ "Unable to play random albums": "无法播放随机专辑",
"Unable to play random tracks": "无法播放随机曲目",
- "Unable to play song radio": "Unable to play song radio",
+ "Unable to play song radio": "无法播放电台歌曲",
"Unset favorite": "取消收藏",
"Use blurred album cover for Now Playing page background": "使用模糊的专辑封面作为“正在播放”页面背景",
"Use legacy authentication": "使用旧版认证",
diff --git a/res/translations/zhHans.json b/res/translations/zhHans.json
index 52b2b08..d553f3a 100644
--- a/res/translations/zhHans.json
+++ b/res/translations/zhHans.json
@@ -4,7 +4,7 @@
"Add Server": "添加服务器",
"Add to playlist": "添加到播放列表",
"Add to queue": "添加到队列",
- "Advanced": "Advanced",
+ "Advanced": "高级",
"Album": "专辑",
"Album Count": "专辑数量",
"Album artist": "专辑艺术家",
@@ -57,7 +57,7 @@
"Compilation": "合集",
"Compilations": "合集",
"Composer": "作曲家",
- "Composers": "Composers",
+ "Composers": "作曲家",
"Configure your music server to add radio stations": "配置您的音乐服务器以添加电台",
"Confirm Delete Playlist": "确认删除播放列表",
"Confirm Delete Server": "确认删除服务器",
@@ -92,9 +92,9 @@
"Equalizer": "均衡器",
"Error": "错误",
"Error creating playlist": "创建播放列表时出错",
- "Error updating playlist": "Error updating playlist",
+ "Error updating playlist": "更新播放列表时出错",
"Exclusive mode": "独占模式",
- "Fade out on pause": "Fade out on pause",
+ "Fade out on pause": "暂停时淡出",
"Fav.": "收藏",
"Favorites": "收藏",
"Feb": "二月",
@@ -133,7 +133,7 @@
"Lyrics": "歌词",
"Lyrics not available": "歌词不可用",
"Mar": "三月",
- "Maximum image cache size": "Maximum image cache size",
+ "Maximum image cache size": "最大图像缓存大小",
"May": "五月",
"Menu": "菜单",
"Mixtape": "混音带",
@@ -177,9 +177,9 @@
"Prevent clipping": "防止削波",
"Prevent screensaver on Now Playing page": "禁止在“正在播放”页面显示屏幕保护程序",
"Previous": "上一个",
- "Private playlist by": "私人 播放列表作者",
- "Public": "Public",
- "Public playlist by": "公开 播放列表作者",
+ "Private playlist by": "私人播放列表",
+ "Public": "公开",
+ "Public playlist by": "公开播放列表",
"Quit": "退出",
"Random": "随机",
"Rating": "评分",
@@ -259,15 +259,15 @@
"Track gain": "曲目增益",
"Track number": "曲目编号",
"Track peak": "曲目峰值",
- "Tracks": "Tracks",
+ "Tracks": "曲目",
"Transcode to": "转码为",
- "UI Scaling": "UI 缩放",
+ "UI Scaling": "界面缩放",
"URL": "URL",
"Unable to play albums": "无法播放专辑",
"Unable to play artist radio": "无法播放艺术家电台",
- "Unable to play random albums": "Unable to play random albums",
+ "Unable to play random albums": "无法播放随机专辑",
"Unable to play random tracks": "无法播放随机曲目",
- "Unable to play song radio": "Unable to play song radio",
+ "Unable to play song radio": "无法播放电台歌曲",
"Unset favorite": "取消收藏",
"Use blurred album cover for Now Playing page background": "使用模糊的专辑封面作为“正在播放”页面背景",
"Use legacy authentication": "使用旧版认证",
diff --git a/ui/browsing/nowplayingpage.go b/ui/browsing/nowplayingpage.go
index 04eda39..97716b9 100644
--- a/ui/browsing/nowplayingpage.go
+++ b/ui/browsing/nowplayingpage.go
@@ -43,6 +43,7 @@ type NowPlayingPage struct {
curLyrics *mediaprovider.Lyrics
curLyricsID string // id of track currently shown in lyrics
curRelatedID string // id of track currrently used to populate related list
+ curCoverArt string // id of cover art currently shown in background / card
totalTime float64
lastPlayPos float64
queue []mediaprovider.MediaItem
@@ -307,8 +308,12 @@ func (a *NowPlayingPage) OnSongChange(song mediaprovider.MediaItem, lastScrobble
a.card.Update(song)
if song == nil {
a.card.SetCoverImage(nil)
- } else {
- a.imageLoadCancel = a.im.GetFullSizeCoverArtAsync(song.Metadata().CoverArtID, a.onImageLoaded)
+ a.curCoverArt = ""
+ } else if artID := song.Metadata().CoverArtID; artID != a.curCoverArt {
+ a.imageLoadCancel = a.im.GetFullSizeCoverArtAsync(song.Metadata().CoverArtID, func(img image.Image, err error) {
+ a.curCoverArt = artID
+ a.onImageLoaded(img, err)
+ })
}
if a.tabs != nil && a.tabs.SelectedIndex() == 1 /*lyrics*/ {
diff --git a/ui/widgets/tracklistrow.go b/ui/widgets/tracklistrow.go
index 847dcc1..37aa26e 100644
--- a/ui/widgets/tracklistrow.go
+++ b/ui/widgets/tracklistrow.go
@@ -239,6 +239,7 @@ type tracklistRowBase struct {
// must be injected by extending widget
setColVisibility func(int, bool) bool
+ layout func(fyne.Size)
}
type TracklistRow interface {
@@ -297,6 +298,9 @@ func NewExpandedTracklistRow(tracklist *Tracklist, im *backend.ImageManager, pla
c.Hidden = vis
return c.Hidden != wasHidden
}
+ t.layout = func(s fyne.Size) {
+ container.Layout.Layout(container.Objects, s)
+ }
return t
}
@@ -316,8 +320,9 @@ func NewCompactTracklistRow(tracklist *Tracklist, playingIcon fyne.CanvasObject)
t.tracklistRowBase.create(tracklist)
t.playingIcon = playingIcon
- t.Content = container.New(tracklist.colLayout,
+ container := container.New(tracklist.colLayout,
t.num, t.name, t.artist, t.album, t.albumArtist, t.composer, t.genre, t.dur, t.year, t.favorite, t.rating, t.plays, t.lastPlayed, t.comment, t.bpm, t.bitrate, t.size, t.fileType, t.dateAdded, t.path)
+ t.Content = container
colHiddenPtrMap := map[int]*bool{
2: &t.artist.Hidden,
@@ -348,6 +353,9 @@ func NewCompactTracklistRow(tracklist *Tracklist, playingIcon fyne.CanvasObject)
*ptr = vis
return vis != wasHidden
}
+ t.layout = func(s fyne.Size) {
+ container.Layout.Layout(container.Objects, s)
+ }
return t
}
@@ -409,11 +417,20 @@ func (t *tracklistRowBase) TrackID() string {
return t.trackID
}
+func (t *tracklistRowBase) MinSize() fyne.Size {
+ // because tracklist rows have variable column visibility,
+ // we return a zero width here so that the tracklist
+ // can size based on the header instead.
+ s := t.BaseWidget.MinSize()
+ return fyne.NewSize(0, s.Height)
+}
+
func (t *tracklistRowBase) Update(tm *util.TrackListModel, rowNum int, onUpdate func()) {
// Show only columns configured to be visible
for i := 2; i < len(t.tracklist.columns); i++ {
t.setColVisibility(i, !t.tracklist.visibleColumns[i])
}
+ t.layout(t.Size())
// Ealy return if nothing else needs updating
if !t.needsUpdate(tm, rowNum) {
diff --git a/win_inno_installscript.iss b/win_inno_installscript.iss
index eb57a47..e788e2a 100644
--- a/win_inno_installscript.iss
+++ b/win_inno_installscript.iss
@@ -2,7 +2,7 @@
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define MyAppName "Supersonic"
-#define MyAppVersion "0.20.0"
+#define MyAppVersion "0.20.1"
#define MyAppPublisher "Drew Weymouth"
#define MyAppURL "https://github.com/dweymouth/supersonic"
#define MyAppExeName "Supersonic.exe"