Skip to content

Commit

Permalink
add autoplay UI toggle
Browse files Browse the repository at this point in the history
  • Loading branch information
dweymouth committed Jan 7, 2025
1 parent 834d024 commit 966e792
Show file tree
Hide file tree
Showing 10 changed files with 51 additions and 4 deletions.
1 change: 1 addition & 0 deletions backend/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,7 @@ func (a *App) Shutdown() {
repeatMode = "All"
}
a.Config.Playback.RepeatMode = repeatMode
a.Config.Playback.Autoplay = a.PlaybackManager.IsAutoplay()
a.Config.LocalPlayback.Volume = a.LocalPlayer.GetVolume()
a.SavePlayQueueIfEnabled()
a.SaveConfigFile()
Expand Down
2 changes: 2 additions & 0 deletions backend/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ type NowPlayingPageConfig struct {
}

type PlaybackConfig struct {
Autoplay bool
RepeatMode string
}

Expand Down Expand Up @@ -215,6 +216,7 @@ func DefaultConfig(appVersionTag string) *Config {
TracklistColumns: []string{"Album", "Time", "Plays"},
},
Playback: PlaybackConfig{
Autoplay: false,
RepeatMode: "None",
},
LocalPlayback: LocalPlaybackConfig{
Expand Down
13 changes: 12 additions & 1 deletion backend/playbackmanager.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ func NewPlaybackManager(
engine: e,
cmdQueue: q,
cfg: appCfg,
autoplay: true, // TODO
autoplay: playbackCfg.Autoplay,
}
pm.addOnTrackChangeHook()
go pm.runCmdQueue(ctx)
Expand Down Expand Up @@ -364,6 +364,10 @@ func (p *PlaybackManager) GetLoopMode() LoopMode {
return p.engine.loopMode
}

func (p *PlaybackManager) IsAutoplay() bool {
return p.autoplay
}

func (p *PlaybackManager) PlayerStatus() player.Status {
return p.engine.PlayerStatus()
}
Expand All @@ -372,6 +376,13 @@ func (p *PlaybackManager) SetVolume(vol int) {
p.cmdQueue.SetVolume(vol)
}

func (p *PlaybackManager) SetAutoplay(autoplay bool) {
p.autoplay = autoplay
if autoplay && p.NowPlayingIndex() == len(p.engine.playQueue)-1 {
p.enqueueAutoplayTracks()
}
}

func (p *PlaybackManager) Volume() int {
return p.engine.CurrentPlayer().GetVolume()
}
Expand Down
5 changes: 5 additions & 0 deletions res/bundled.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions res/bundled_gen.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ fyne bundle -append -prefix Res icons/publicdomain/disc.svg >> bundled.go
fyne bundle -append -prefix Res icons/publicdomain/headphones.svg >> bundled.go
fyne bundle -append -prefix Res icons/publicdomain/heart-filled.svg >> bundled.go
fyne bundle -append -prefix Res icons/publicdomain/heart-outline.svg >> bundled.go
fyne bundle -append -prefix Res icons/publicdomain/infinity.svg >> bundled.go
fyne bundle -append -prefix Res icons/publicdomain/musicnotes.svg >> bundled.go
fyne bundle -append -prefix Res icons/publicdomain/people.svg >> bundled.go
fyne bundle -append -prefix Res icons/publicdomain/playlist.svg >> bundled.go
Expand Down
1 change: 1 addition & 0 deletions res/translations/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
"Audiobook": "Audiobook",
"Authentication failed": "Authentication failed",
"Auto": "Auto",
"Autoplay": "Autoplay",
"Autoselect device": "Autoselect device",
"Back": "Back",
"Bit rate": "Bit rate",
Expand Down
5 changes: 4 additions & 1 deletion ui/bottompanel.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ func NewBottomPanel(pm *backend.PlaybackManager, im *backend.ImageManager, contr
pm.SeekFraction(f)
})

bp.AuxControls = widgets.NewAuxControls(pm.Volume(), pm.GetLoopMode())
bp.AuxControls = widgets.NewAuxControls(pm.Volume(), pm.GetLoopMode(), pm.IsAutoplay())
pm.OnLoopModeChange(bp.AuxControls.SetLoopMode)
pm.OnVolumeChange(bp.AuxControls.VolumeControl.SetVolume)
bp.AuxControls.VolumeControl.OnSetVolume = func(v int) {
Expand All @@ -111,6 +111,9 @@ func NewBottomPanel(pm *backend.PlaybackManager, im *backend.ImageManager, contr
bp.AuxControls.OnChangeLoopMode(func() {
pm.SetNextLoopMode()
})
bp.AuxControls.OnChangeAutoplay = func(autoplay bool) {
pm.SetAutoplay(autoplay)
}
bp.AuxControls.OnShowPlayQueue(contr.ShowPopUpPlayQueue)

bp.imageLoader = util.NewThumbnailLoader(im, bp.NowPlaying.SetImage)
Expand Down
1 change: 1 addition & 0 deletions ui/mainwindow.go
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@ func NewMainWindow(fyneApp fyne.App, appName, displayAppName, appVersion string,
repeatMode = "All"
}
app.Config.Playback.RepeatMode = repeatMode
app.Config.Playback.Autoplay = app.PlaybackManager.IsAutoplay()
app.SavePlayQueueIfEnabled()
app.SaveConfigFile()

Expand Down
1 change: 1 addition & 0 deletions ui/theme/theme.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ var (

AlbumIcon fyne.Resource = theme.NewThemedResource(res.ResDiscSvg)
ArtistIcon fyne.Resource = theme.NewThemedResource(res.ResPeopleSvg)
AutoplayIcon fyne.Resource = theme.NewThemedResource(res.ResInfinitySvg)
RadioIcon fyne.Resource = theme.NewThemedResource(res.ResBroadcastSvg)
FavoriteIcon fyne.Resource = theme.NewThemedResource(res.ResHeartFilledSvg)
NotFavoriteIcon fyne.Resource = theme.NewThemedResource(res.ResHeartOutlineSvg)
Expand Down
25 changes: 23 additions & 2 deletions ui/widgets/auxcontrols.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,34 @@ import (
type AuxControls struct {
widget.BaseWidget

OnChangeAutoplay func(autoplay bool)

VolumeControl *VolumeControl
autoplay *IconButton
loop *IconButton
showQueue *IconButton

container *fyne.Container
}

func NewAuxControls(initialVolume int, initialLoopMode backend.LoopMode) *AuxControls {
func NewAuxControls(initialVolume int, initialLoopMode backend.LoopMode, initialAutoplay bool) *AuxControls {
a := &AuxControls{
VolumeControl: NewVolumeControl(initialVolume),
autoplay: NewIconButton(myTheme.AutoplayIcon, nil),
loop: NewIconButton(myTheme.RepeatIcon, nil),
showQueue: NewIconButton(myTheme.PlayQueueIcon, nil),
}
a.loop.IconSize = IconButtonSizeSmaller
a.loop.SetToolTip(lang.L("Repeat"))
a.loop.Highlighted = initialAutoplay
//a.autoplay.IconSize = IconButtonSizeSmaller
a.autoplay.SetToolTip(lang.L("Autoplay"))
a.autoplay.OnTapped = func() {
a.SetAutoplay(!a.autoplay.Highlighted)
if a.OnChangeAutoplay != nil {
a.OnChangeAutoplay(a.autoplay.Highlighted)
}
}
a.SetLoopMode(initialLoopMode)
a.showQueue.IconSize = IconButtonSizeSmaller
a.showQueue.SetToolTip(lang.L("Show play queue"))
Expand All @@ -43,7 +56,7 @@ func NewAuxControls(initialVolume int, initialLoopMode backend.LoopMode) *AuxCon
a.VolumeControl,
container.New(
layout.NewCustomPaddedHBoxLayout(theme.Padding()*1.5),
layout.NewSpacer(), a.loop, a.showQueue, util.NewHSpace(5)),
layout.NewSpacer(), a.autoplay, a.loop, a.showQueue, util.NewHSpace(5)),
layout.NewSpacer(),
),
)
Expand Down Expand Up @@ -73,6 +86,14 @@ func (a *AuxControls) SetLoopMode(mode backend.LoopMode) {
}
}

func (a *AuxControls) SetAutoplay(autoplay bool) {
if autoplay == a.autoplay.Highlighted {
return
}
a.autoplay.Highlighted = autoplay
a.autoplay.Refresh()
}

func (a *AuxControls) OnShowPlayQueue(f func()) {
a.showQueue.OnTapped = f
}
Expand Down

0 comments on commit 966e792

Please sign in to comment.