Fix #745: add option to prevent screensaver on Now Playing page

This commit is contained in:
Drew Weymouth
2025-11-10 08:12:46 -08:00
parent 828b5ffc56
commit 8b73765a7d
5 changed files with 51 additions and 24 deletions
+26 -23
View File
@@ -61,6 +61,8 @@ type AppConfig struct {
SidebarWidthFraction float64 SidebarWidthFraction float64
SidebarTab string SidebarTab string
PreventScreensaverOnNowPlayingPage bool
FontNormalTTF string FontNormalTTF string
FontBoldTTF string FontBoldTTF string
UIScaleSize string UIScaleSize string
@@ -189,29 +191,30 @@ var SupportedStartupPages = []string{"Albums", "Favorites", "Playlists", "Artist
func DefaultConfig(appVersionTag string) *Config { func DefaultConfig(appVersionTag string) *Config {
return &Config{ return &Config{
Application: AppConfig{ Application: AppConfig{
WindowWidth: 1000, WindowWidth: 1000,
WindowHeight: 800, WindowHeight: 800,
LastCheckedVersion: appVersionTag, LastCheckedVersion: appVersionTag,
LastLaunchedVersion: "", LastLaunchedVersion: "",
EnableSystemTray: true, EnableSystemTray: true,
CloseToSystemTray: false, CloseToSystemTray: false,
StartupPage: "Albums", StartupPage: "Albums",
SettingsTab: "General", SettingsTab: "General",
AllowMultiInstance: false, AllowMultiInstance: false,
MaxImageCacheSizeMB: 50, MaxImageCacheSizeMB: 50,
UIScaleSize: "Normal", UIScaleSize: "Normal",
SavePlayQueue: true, SavePlayQueue: true,
SaveQueueToServer: false, SaveQueueToServer: false,
ShowTrackChangeNotification: false, ShowTrackChangeNotification: false,
EnableLrcLib: true, EnableLrcLib: true,
EnablePasswordStorage: true, EnablePasswordStorage: true,
SkipSSLVerify: false, SkipSSLVerify: false,
EnqueueBatchSize: 100, EnqueueBatchSize: 100,
Language: "auto", Language: "auto",
EnableAutoUpdateChecker: true, EnableAutoUpdateChecker: true,
RequestTimeoutSeconds: 15, RequestTimeoutSeconds: 15,
EnableOSMediaPlayerAPIs: true, EnableOSMediaPlayerAPIs: true,
SidebarWidthFraction: 0.8, SidebarWidthFraction: 0.8,
PreventScreensaverOnNowPlayingPage: false,
}, },
AlbumPage: AlbumPageConfig{ AlbumPage: AlbumPageConfig{
TracklistColumns: []string{"Artist", "Time", "Plays", "Favorite", "Rating"}, TracklistColumns: []string{"Artist", "Time", "Plays", "Favorite", "Rating"},
+1
View File
@@ -279,6 +279,7 @@
"Remove from queue": "Remove from queue", "Remove from queue": "Remove from queue",
"Play albums": "Play albums", "Play albums": "Play albums",
"Play song radio": "Play song radio", "Play song radio": "Play song radio",
"Prevent screensaver on Now Playing page": "Prevent screensaver on Now Playing page",
"to": "to", "to": "to",
"by": "by", "by": "by",
"Jan": "Jan", "Jan": "Jan",
+6 -1
View File
@@ -17,6 +17,8 @@ type Router struct {
Controller *controller.Controller Controller *controller.Controller
Nav NavigationHandler Nav NavigationHandler
widgetPool *util.WidgetPool widgetPool *util.WidgetPool
OnNavigateTo func(controller.Route)
} }
func NewRouter(app *backend.App, controller *controller.Controller, nav NavigationHandler) Router { func NewRouter(app *backend.App, controller *controller.Controller, nav NavigationHandler) Router {
@@ -63,8 +65,11 @@ func (r Router) CreatePage(rte controller.Route) Page {
return nil return nil
} }
func (r Router) NavigateTo(rte controller.Route) { func (r *Router) NavigateTo(rte controller.Route) {
if rte != r.Nav.CurrentPage() { if rte != r.Nav.CurrentPage() {
r.Nav.SetPage(r.CreatePage(rte)) r.Nav.SetPage(r.CreatePage(rte))
} }
if r.OnNavigateTo != nil {
r.OnNavigateTo(rte)
}
} }
+4
View File
@@ -634,12 +634,16 @@ func (s *SettingsDialog) createAdvancedTab() *container.TabItem {
}) })
osMediaAPIs.Checked = s.config.Application.EnableOSMediaPlayerAPIs osMediaAPIs.Checked = s.config.Application.EnableOSMediaPlayerAPIs
preventScreensaver := widget.NewCheckWithData(lang.L("Prevent screensaver on Now Playing page"),
binding.BindBool(&s.config.Application.PreventScreensaverOnNowPlayingPage))
return container.NewTabItem(lang.L("Advanced"), container.NewVBox( return container.NewTabItem(lang.L("Advanced"), container.NewVBox(
multi, multi,
sslSkip, sslSkip,
update, update,
lrclib, lrclib,
osMediaAPIs, osMediaAPIs,
preventScreensaver,
imgCacheCfg, imgCacheCfg,
)) ))
} }
+14
View File
@@ -51,6 +51,8 @@ type MainWindow struct {
// updated when changing servers or libraries // updated when changing servers or libraries
librarySubmenu *fyne.Menu librarySubmenu *fyne.Menu
isScreensaverDisabled bool
} }
func NewMainWindow(fyneApp fyne.App, appName, displayAppName, appVersion string, app *backend.App) MainWindow { func NewMainWindow(fyneApp fyne.App, appName, displayAppName, appVersion string, app *backend.App) MainWindow {
@@ -156,6 +158,18 @@ func NewMainWindow(fyneApp fyne.App, appName, displayAppName, appVersion string,
m.Window.SetContent(fynetooltip.AddWindowToolTipLayer(m.content, m.Window.Canvas())) m.Window.SetContent(fynetooltip.AddWindowToolTipLayer(m.content, m.Window.Canvas()))
m.setInitialSize() m.setInitialSize()
m.Router.OnNavigateTo = func(r controller.Route) {
if r.Page == controller.NowPlayingRoute().Page {
if m.App.Config.Application.PreventScreensaverOnNowPlayingPage && !m.isScreensaverDisabled {
fyne.CurrentApp().Driver().SetDisableScreenBlanking(true)
m.isScreensaverDisabled = true
}
} else if m.isScreensaverDisabled {
fyne.CurrentApp().Driver().SetDisableScreenBlanking(false)
m.isScreensaverDisabled = false
}
}
m.Window.SetCloseIntercept(func() { m.Window.SetCloseIntercept(func() {
m.SaveWindowSettings() m.SaveWindowSettings()
if app.Config.Application.CloseToSystemTray && m.HaveSystemTray() { if app.Config.Application.CloseToSystemTray && m.HaveSystemTray() {