Merge pull request #206 from natilou/download-notification

Add notification when a download is completed
This commit is contained in:
Drew Weymouth
2023-06-21 20:57:34 -07:00
committed by GitHub
6 changed files with 32 additions and 16 deletions
+2
View File
@@ -6,6 +6,7 @@ import (
"time" "time"
"github.com/dweymouth/supersonic/backend" "github.com/dweymouth/supersonic/backend"
"github.com/dweymouth/supersonic/res"
"github.com/dweymouth/supersonic/ui" "github.com/dweymouth/supersonic/ui"
"fyne.io/fyne/v2" "fyne.io/fyne/v2"
@@ -28,6 +29,7 @@ func main() {
} }
fyneApp := app.New() fyneApp := app.New()
fyneApp.SetIcon(res.ResAppicon256Png)
w := float32(myApp.Config.Application.WindowWidth) w := float32(myApp.Config.Application.WindowWidth)
if w <= 1 { if w <= 1 {
+3 -2
View File
@@ -201,8 +201,9 @@ func NewAlbumPageHeader(page *AlbumPage) *AlbumPageHeader {
a.page.contr.DoAddTracksToPlaylistWorkflow( a.page.contr.DoAddTracksToPlaylistWorkflow(
sharedutil.TracksToIDs(a.page.tracks)) sharedutil.TracksToIDs(a.page.tracks))
}), }),
fyne.NewMenuItem("Download", func() { fyne.NewMenuItem("Download...", func() {
a.page.contr.ShowDownloadDialog(a.page.tracks) a.page.contr.ShowDownloadDialog(a.page.tracks, a.titleLabel.String())
})) }))
pop = widget.NewPopUpMenu(menu, fyne.CurrentApp().Driver().CanvasForObject(a)) pop = widget.NewPopUpMenu(menu, fyne.CurrentApp().Driver().CanvasForObject(a))
} }
+2 -2
View File
@@ -261,8 +261,8 @@ func NewPlaylistPageHeader(page *PlaylistPage) *PlaylistPageHeader {
a.page.contr.DoAddTracksToPlaylistWorkflow( a.page.contr.DoAddTracksToPlaylistWorkflow(
sharedutil.TracksToIDs(a.page.tracks)) sharedutil.TracksToIDs(a.page.tracks))
}), }),
fyne.NewMenuItem("Download", func() { fyne.NewMenuItem("Download...", func() {
a.page.contr.ShowDownloadDialog(a.page.tracks) a.page.contr.ShowDownloadDialog(a.page.tracks, a.playlistInfo.Name)
})) }))
pop = widget.NewPopUpMenu(menu, fyne.CurrentApp().Driver().CanvasForObject(a)) pop = widget.NewPopUpMenu(menu, fyne.CurrentApp().Driver().CanvasForObject(a))
} }
+1 -1
View File
@@ -120,7 +120,7 @@ func (a *PlaylistsPage) createGridView(playlists []*mediaprovider.Playlist) {
log.Printf("error loading playlist: %s", err.Error()) log.Printf("error loading playlist: %s", err.Error())
return return
} }
a.contr.ShowDownloadDialog(pl.Tracks) a.contr.ShowDownloadDialog(pl.Tracks, pl.Name)
}() }()
} }
} }
+19 -6
View File
@@ -150,7 +150,7 @@ func (m *Controller) ConnectAlbumGridActions(grid *widgets.GridView) {
log.Printf("error loading album: %s", err.Error()) log.Printf("error loading album: %s", err.Error())
return return
} }
m.ShowDownloadDialog(album.Tracks) m.ShowDownloadDialog(album.Tracks, album.Name)
}() }()
} }
} }
@@ -168,7 +168,12 @@ func (m *Controller) ConnectArtistGridActions(grid *widgets.GridView) {
grid.OnDownload = func(artistID string) { grid.OnDownload = func(artistID string) {
go func() { go func() {
tracks := m.GetArtistTracks(artistID) tracks := m.GetArtistTracks(artistID)
m.ShowDownloadDialog(tracks) artist, err := m.App.ServerManager.Server.GetArtist(artistID)
if err != nil {
log.Printf("error getting artist: %v", err.Error())
return
}
m.ShowDownloadDialog(tracks, artist.Name)
}() }()
} }
} }
@@ -538,7 +543,7 @@ func (c *Controller) SetTrackRatings(trackIDs []string, rating int) {
} }
} }
func (c *Controller) ShowDownloadDialog(tracks []*mediaprovider.Track) { func (c *Controller) ShowDownloadDialog(tracks []*mediaprovider.Track, downloadName string) {
numTracks := len(tracks) numTracks := len(tracks)
var fileName string var fileName string
if numTracks == 1 { if numTracks == 1 {
@@ -560,7 +565,7 @@ func (c *Controller) ShowDownloadDialog(tracks []*mediaprovider.Track) {
if numTracks == 1 { if numTracks == 1 {
go c.downloadTrack(tracks[0], file.URI().Path()) go c.downloadTrack(tracks[0], file.URI().Path())
} else { } else {
go c.downloadTracks(tracks, file.URI().Path()) go c.downloadTracks(tracks, file.URI().Path(), downloadName)
} }
}, },
@@ -590,9 +595,10 @@ func (c *Controller) downloadTrack(track *mediaprovider.Track, filePath string)
} }
log.Printf("Saved song %s to: %s\n", track.Name, filePath) log.Printf("Saved song %s to: %s\n", track.Name, filePath)
c.sendNotification(fmt.Sprintf("Download completed: %s", track.Name), fmt.Sprintf("Saved at: %s", filePath))
} }
func (c *Controller) downloadTracks(tracks []*mediaprovider.Track, filePath string) { func (c *Controller) downloadTracks(tracks []*mediaprovider.Track, filePath, downloadName string) {
zipFile, err := os.Create(filePath) zipFile, err := os.Create(filePath)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
@@ -627,5 +633,12 @@ func (c *Controller) downloadTracks(tracks []*mediaprovider.Track, filePath stri
log.Printf("Saved song %s to: %s\n", track.Name, filePath) log.Printf("Saved song %s to: %s\n", track.Name, filePath)
} }
log.Printf("Finished download to: %s\n", filePath) c.sendNotification(fmt.Sprintf("Download completed: %s", downloadName), fmt.Sprintf("Saved at: %s", filePath))
}
func (c *Controller) sendNotification(title, content string) {
fyne.CurrentApp().SendNotification(&fyne.Notification{
Title: title,
Content: content,
})
} }
+5 -5
View File
@@ -76,7 +76,7 @@ type Tracklist struct {
OnAddToPlaylist func(trackIDs []string) OnAddToPlaylist func(trackIDs []string)
OnSetFavorite func(trackIDs []string, fav bool) OnSetFavorite func(trackIDs []string, fav bool)
OnSetRating func(trackIDs []string, rating int) OnSetRating func(trackIDs []string, rating int)
OnDownload func(tracks []*mediaprovider.Track) OnDownload func(tracks []*mediaprovider.Track, downloadName string)
OnShowArtistPage func(artistID string) OnShowArtistPage func(artistID string)
OnShowAlbumPage func(albumID string) OnShowAlbumPage func(albumID string)
@@ -510,8 +510,8 @@ func (t *Tracklist) onShowContextMenu(e *fyne.PointEvent, trackIdx int) {
} }
})) }))
t.ctxMenu.Items = append(t.ctxMenu.Items, t.ctxMenu.Items = append(t.ctxMenu.Items,
fyne.NewMenuItem("Download", func() { fyne.NewMenuItem("Download...", func() {
t.onDownload(t.selectedTracks()) t.onDownload(t.selectedTracks(), "Selected tracks")
})) }))
t.ctxMenu.Items = append(t.ctxMenu.Items, fyne.NewMenuItemSeparator()) t.ctxMenu.Items = append(t.ctxMenu.Items, fyne.NewMenuItemSeparator())
t.ctxMenu.Items = append(t.ctxMenu.Items, t.ctxMenu.Items = append(t.ctxMenu.Items,
@@ -587,9 +587,9 @@ func (t *Tracklist) onAlbumTapped(albumID string) {
} }
} }
func (t *Tracklist) onDownload(tracks []*mediaprovider.Track) { func (t *Tracklist) onDownload(tracks []*mediaprovider.Track, downloadName string) {
if t.OnDownload != nil { if t.OnDownload != nil {
t.OnDownload(tracks) t.OnDownload(tracks, downloadName)
} }
} }