diff --git a/res/translations/de.json b/res/translations/de.json index 6c9c9ed..09691c8 100644 --- a/res/translations/de.json +++ b/res/translations/de.json @@ -239,5 +239,10 @@ "Sept": "Sept", "Oct": "Okt", "Nov": "Nov", - "Dec": "Dec" + "Dec": "Dec", + + "playlist.addedtracks": { + "one": "Added {{.trackCount}} track to playlist", + "other": "Added {{.trackCount}} tracks to playlist" + } } diff --git a/res/translations/en.json b/res/translations/en.json index b84bb00..b793e6e 100644 --- a/res/translations/en.json +++ b/res/translations/en.json @@ -242,5 +242,10 @@ "Sept": "Sept", "Oct": "Oct", "Nov": "Nov", - "Dec": "Dec" + "Dec": "Dec", + + "playlist.addedtracks": { + "one": "Added one track to playlist", + "other": "Added {{.trackCount}} tracks to playlist" + } } diff --git a/res/translations/es.json b/res/translations/es.json index 7830ff5..8458979 100644 --- a/res/translations/es.json +++ b/res/translations/es.json @@ -241,5 +241,10 @@ "Sept": "Set", "Oct": "Oct", "Nov": "Nov", - "Dec": "Dic" + "Dec": "Dic", + + "playlist.addedtracks": { + "one": "Se ha añadido una pista a la lista de reproducción", + "other": "Se han añadido {{.trackCount}} pistas a la lista de reproducción" + } } diff --git a/res/translations/fr.json b/res/translations/fr.json index e572944..d886c16 100644 --- a/res/translations/fr.json +++ b/res/translations/fr.json @@ -240,5 +240,10 @@ "Sept": "Sept", "Oct": "Oct", "Nov": "Nov", - "Dec": "Déc" + "Dec": "Déc", + + "playlist.addedtracks": { + "one": "Une piste ajoutée à la liste de lecture", + "other": "{{.trackCount}} pistes ajoutées à la liste de lecture" + } } diff --git a/res/translations/it.json b/res/translations/it.json index 2d657f1..a702371 100644 --- a/res/translations/it.json +++ b/res/translations/it.json @@ -238,5 +238,10 @@ "Sept": "Set", "Oct": "Ott", "Nov": "Nov", - "Dec": "Dic" + "Dec": "Dic", + + "playlist.addedtracks": { + "one": "Added {{.trackCount}} track to playlist", + "other": "Added {{.trackCount}} tracks to playlist" + } } diff --git a/res/translations/ja.json b/res/translations/ja.json index 2898c57..6d7eb54 100644 --- a/res/translations/ja.json +++ b/res/translations/ja.json @@ -228,5 +228,10 @@ "Remove from queue": "キューから削除", "Play song radio": "曲をラジオで再生", "to":"to", - "by":"by" + "by":"by", + + "playlist.addedtracks": { + "one": "Added {{.trackCount}} track to playlist", + "other": "Added {{.trackCount}} tracks to playlist" + } } diff --git a/res/translations/pl.json b/res/translations/pl.json index a920e60..edf39cc 100644 --- a/res/translations/pl.json +++ b/res/translations/pl.json @@ -228,5 +228,10 @@ "Remove from queue": "Usuń z kolejki odtwarzania", "Play song radio": "Odtwórz mix utworów", "to":"do", - "by":"przez" + "by":"przez", + + "playlist.addedtracks": { + "one": "Added {{.trackCount}} track to playlist", + "other": "Added {{.trackCount}} tracks to playlist" + } } diff --git a/res/translations/pt_BR.json b/res/translations/pt_BR.json index 6555288..4d63bbb 100644 --- a/res/translations/pt_BR.json +++ b/res/translations/pt_BR.json @@ -228,5 +228,10 @@ "Remove from queue": "Remover da fila", "Play song radio": "Reproduzir rádio da faixa", "to":"a", - "by":"de" + "by":"de", + + "playlist.addedtracks": { + "one": "Added {{.trackCount}} track to playlist", + "other": "Added {{.trackCount}} tracks to playlist" + } } diff --git a/res/translations/ro.json b/res/translations/ro.json index cd0b9d7..dc07566 100644 --- a/res/translations/ro.json +++ b/res/translations/ro.json @@ -230,5 +230,10 @@ "Sept": "Sept", "Oct": "Oct", "Nov": "Noiem", - "Dec": "Dec" + "Dec": "Dec", + + "playlist.addedtracks": { + "one": "Added {{.trackCount}} track to playlist", + "other": "Added {{.trackCount}} tracks to playlist" + } } diff --git a/res/translations/zh.json b/res/translations/zh.json index a71f69b..7102cff 100644 --- a/res/translations/zh.json +++ b/res/translations/zh.json @@ -216,5 +216,10 @@ "Unset favorite": "取消收藏", "Remove from queue": "从队列中移除", "Size": "大小", - "Play song radio": "播放歌曲电台" + "Play song radio": "播放歌曲电台", + + "playlist.addedtracks": { + "one": "Added {{.trackCount}} track to playlist", + "other": "Added {{.trackCount}} tracks to playlist" + } } diff --git a/res/translations/zhHans.json b/res/translations/zhHans.json index cb3e9b0..727b0f6 100644 --- a/res/translations/zhHans.json +++ b/res/translations/zhHans.json @@ -216,5 +216,10 @@ "Unset favorite": "取消收藏", "Remove from queue": "从队列中移除", "Size": "大小", - "Play song radio": "播放歌曲电台" + "Play song radio": "播放歌曲电台", + + "playlist.addedtracks": { + "one": "Added {{.trackCount}} track to playlist", + "other": "Added {{.trackCount}} tracks to playlist" + } } diff --git a/ui/controller/controller.go b/ui/controller/controller.go index fff6668..f67b9a9 100644 --- a/ui/controller/controller.go +++ b/ui/controller/controller.go @@ -11,6 +11,7 @@ import ( "net/url" "os" "path/filepath" + "strconv" "sync" "time" @@ -304,14 +305,18 @@ func (m *Controller) DoAddTracksToPlaylistWorkflow(trackIDs []string) { m.doModalClosed() }) sp.SetOnNavigateTo(func(contentType mediaprovider.ContentType, id string) { + notifySuccess := func(n int) { + msg := lang.LocalizePluralKey("playlist.addedtracks", + "Added tracks to playlist", n, map[string]string{"trackCount": strconv.Itoa(n)}) + m.ToastProvider.ShowSuccessToast(msg) + } pop.Hide() m.App.Config.Application.AddToPlaylistSkipDuplicates = sp.SkipDuplicates if id == "" /* creating new playlist */ { go func() { err := m.App.ServerManager.Server.CreatePlaylist(sp.SearchDialog.SearchQuery(), trackIDs) if err == nil { - // TODO: translate, adjust by plurality - m.ToastProvider.ShowSuccessToast(fmt.Sprintf("Added %d tracks to playlist", len(trackIDs))) + notifySuccess(len(trackIDs)) } }() } else { @@ -331,8 +336,7 @@ func (m *Controller) DoAddTracksToPlaylistWorkflow(trackIDs []string) { }) err := m.App.ServerManager.Server.AddPlaylistTracks(id, filterTrackIDs) if err == nil { - // TODO: translate, adjust by plurality - m.ToastProvider.ShowSuccessToast(fmt.Sprintf("Added %d tracks to playlist", len(filterTrackIDs))) + notifySuccess(len(filterTrackIDs)) } } }() @@ -340,8 +344,7 @@ func (m *Controller) DoAddTracksToPlaylistWorkflow(trackIDs []string) { go func() { err := m.App.ServerManager.Server.AddPlaylistTracks(id, trackIDs) if err == nil { - // TODO: translate, adjust by plurality - m.ToastProvider.ShowSuccessToast(fmt.Sprintf("Added %d tracks to playlist", len(trackIDs))) + notifySuccess(len(trackIDs)) } }() } diff --git a/ui/toastoverlay.go b/ui/toastoverlay.go index 9a1e3c1..e78b3ec 100644 --- a/ui/toastoverlay.go +++ b/ui/toastoverlay.go @@ -16,6 +16,11 @@ import ( "github.com/dweymouth/supersonic/ui/widgets" ) +const ( + toastAutoDismissalTime = 3 * time.Second + toastAnimationDuration = 100 * time.Millisecond +) + type ToastOverlay struct { widget.BaseWidget @@ -46,7 +51,7 @@ func (t *ToastOverlay) ShowSuccessToast(message string) { endPos := fyne.NewPos(s.Width-min.Width-pad, s.Height-min.Height-pad) startPos := fyne.NewPos(s.Width, endPos.Y) f := t.makeToastAnimFunc(endPos, false) - t.currentToastAnim = canvas.NewPositionAnimation(startPos, endPos, 100*time.Millisecond, f) + t.currentToastAnim = canvas.NewPositionAnimation(startPos, endPos, toastAnimationDuration, f) t.currentToastAnim.Curve = fyne.AnimationEaseOut t.currentToastAnim.Start() t.Refresh() @@ -54,7 +59,7 @@ func (t *ToastOverlay) ShowSuccessToast(message string) { ctx, cancel := context.WithCancel(context.Background()) t.dismissCancel = cancel // always canceled by dismissToast go func() { - time.Sleep(2 * time.Second) + time.Sleep(toastAutoDismissalTime) select { case <-ctx.Done(): return @@ -120,7 +125,7 @@ func (t *ToastOverlay) dismissToast() { startPos := fyne.NewPos(s.Width-min.Width-pad, s.Height-min.Height-pad) endPos := fyne.NewPos(s.Width, startPos.Y) f := t.makeToastAnimFunc(endPos, true) - t.currentToastAnim = canvas.NewPositionAnimation(startPos, endPos, 100*time.Millisecond, f) + t.currentToastAnim = canvas.NewPositionAnimation(startPos, endPos, toastAnimationDuration, f) t.currentToastAnim.Curve = fyne.AnimationEaseIn t.currentToastAnim.Start() }