diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2023-05-21 17:50:51 +0200 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2023-05-21 17:50:51 +0200 |
| commit | eb76608e7287db4b26d877deccce138daee849da (patch) | |
| tree | 9117519023cf91b48cbcb28e69be90e0f16b345b | |
| parent | 0db007609efb842f43d837988eff15b31765f615 (diff) | |
| download | WRMS-eb76608e7287db4b26d877deccce138daee849da.tar.gz WRMS-eb76608e7287db4b26d877deccce138daee849da.zip | |
add OnSongFinished backend hook allowing to remove uploaded songs
| -rw-r--r-- | TODO | 2 | ||||
| -rw-r--r-- | backend.go | 7 | ||||
| -rw-r--r-- | localBackend.go | 2 | ||||
| -rw-r--r-- | player.go | 10 | ||||
| -rw-r--r-- | spotify.go | 2 | ||||
| -rw-r--r-- | upload.go | 6 | ||||
| -rw-r--r-- | wrms.go | 2 | ||||
| -rw-r--r-- | youtube.go | 2 |
8 files changed, 25 insertions, 8 deletions
@@ -13,7 +13,7 @@ - [ ] distinguish different search queries - [X] Implement local storage backend - [X] Implement upload - - [ ] Remove uploaded songs after were played + - [X] Remove uploaded songs after they were played - [X] Fix youtube search ## Configuration @@ -8,15 +8,14 @@ import ( type Backend interface { Play(song *Song, player *Player) Search(keyword string) []Song + OnSongFinished(song *Song) } type DummyBackend struct{} -func (dummy *DummyBackend) Play(song *Song, player *Player) { -} - +func (dummy *DummyBackend) Play(song *Song, player *Player) {} +func (dummy *DummyBackend) OnSongFinished(song *Song) {} func (dummy *DummyBackend) Search(keyword string) []Song { - s := NewDummySong("Dummy Mc Crashtest", "exactly "+keyword) return []Song{s} } diff --git a/localBackend.go b/localBackend.go index 98b8bdd..ead1dc9 100644 --- a/localBackend.go +++ b/localBackend.go @@ -45,6 +45,8 @@ func NewLocalBackend(musicDir string) *LocalBackend { return &b } +func (_ *LocalBackend) OnSongFinished(*Song) {} + func (b *LocalBackend) insert(songs []*Song) { llog.Debug("Inserting %d songs into local DB", len(songs)) tx, err := b.db.Begin() @@ -66,11 +66,15 @@ func (player *Player) runMpv() { llog.Fatal(err.Error()) } + wrms := player.wrms + llog.Info("mpv finished. Resetting mpv, the current song and call play") player.mpv = nil - player.wrms.Playing = false - player.wrms.CurrentSong.Uri = "" - player.wrms.PlayPause() + wrms.Playing = false + + player.Backends[wrms.CurrentSong.Source].OnSongFinished(&wrms.CurrentSong) + wrms.CurrentSong.Uri = "" + wrms.PlayPause() } func (player *Player) PlayUri(uri string) { @@ -49,6 +49,8 @@ func NewSpotify() (*SpotifyBackend, error) { return &spotify, nil } +func (_ *SpotifyBackend) OnSongFinished(*Song) {} + func (spotify *SpotifyBackend) Play(song *Song, player *Player) { trackID := song.Uri session := spotify.session @@ -74,6 +74,12 @@ func (b *UploadBackend) setupUploadRoute() { http.HandleFunc("/upload", b.upload) } +func (b *UploadBackend) OnSongFinished(song *Song) { + songPath := path.Join(b.uploadDir, song.Uri) + llog.Debug("Removing finished song %s", songPath) + os.Remove(songPath) +} + func (b *UploadBackend) Play(song *Song, player *Player) { player.PlayUri("file://" + path.Join(b.uploadDir, song.Uri)) } @@ -113,6 +113,8 @@ func (wrms *Wrms) AddSong(song Song) { } func (wrms *Wrms) Next() { + llog.DDebug("Next Song") + next := wrms.queue.PopSong() if next == nil { wrms.CurrentSong.Uri = "" @@ -16,6 +16,8 @@ func NewYoutubeBackend() *YoutubeBackend { return &YoutubeBackend{10} } +func (_ *YoutubeBackend) OnSongFinished(*Song) {} + func (_ *YoutubeBackend) Play(song *Song, player *Player) { player.PlayUri("https://youtube.com/watch?v=" + song.Uri) } |
