add button to Advanced settings tab to clear caches

This commit is contained in:
Drew Weymouth
2025-11-07 19:48:09 -08:00
parent 360391e832
commit 0ff57513c2
6 changed files with 34 additions and 5 deletions
+17 -1
View File
@@ -32,6 +32,7 @@ const (
portableDir = "supersonic_portable" portableDir = "supersonic_portable"
savedQueueFile = "saved_queue.json" savedQueueFile = "saved_queue.json"
themesDir = "themes" themesDir = "themes"
audioCacheSubdir = "audio"
) )
var ( var (
@@ -146,7 +147,7 @@ func StartupApp(appName, displayAppName, appVersion, appVersionTag, latestReleas
a.ServerManager = NewServerManager(appName, appVersion, a.Config, !portableMode && a.Config.Application.EnablePasswordStorage) a.ServerManager = NewServerManager(appName, appVersion, a.Config, !portableMode && a.Config.Application.EnablePasswordStorage)
a.ImageManager = NewImageManager(a.bgrndCtx, a.ServerManager, cacheDir) a.ImageManager = NewImageManager(a.bgrndCtx, a.ServerManager, cacheDir)
if a.Config.Playback.UseWaveformSeekbar { if a.Config.Playback.UseWaveformSeekbar {
ac, err := NewAudioCache(a.bgrndCtx, a.ServerManager, filepath.Join(cacheDir, "audio")) ac, err := NewAudioCache(a.bgrndCtx, a.ServerManager, filepath.Join(cacheDir, audioCacheSubdir))
if err != nil { if err != nil {
log.Printf("failed to create audio cache: %s", err.Error()) log.Printf("failed to create audio cache: %s", err.Error())
} }
@@ -247,6 +248,21 @@ func (a *App) ThemesDir() string {
return filepath.Join(a.configDir, themesDir) return filepath.Join(a.configDir, themesDir)
} }
func (a *App) ClearCaches() {
if a.cacheDir != "" {
entries, _ := os.ReadDir(a.cacheDir)
for _, e := range entries {
// The audio cache directory is necessary for
// proper playback of enqueued tracks, and also
// doesn't accumulate more than a few entries.
// Leave it alone.
if e.Name() != audioCacheSubdir {
_ = os.RemoveAll(filepath.Join(a.cacheDir, e.Name()))
}
}
}
}
func checkPortablePath() string { func checkPortablePath() string {
if p, err := os.Executable(); err == nil { if p, err := os.Executable(); err == nil {
pdirPath := path.Join(filepath.Dir(p), portableDir) pdirPath := path.Join(filepath.Dir(p), portableDir)
+1
View File
@@ -47,6 +47,7 @@
"Cast to device": "Cast to device", "Cast to device": "Cast to device",
"Channels": "Channels", "Channels": "Channels",
"Check for Updates": "Check for Updates", "Check for Updates": "Check for Updates",
"Clear caches": "Clear caches",
"Close": "Close", "Close": "Close",
"Close to system tray": "Close to system tray", "Close to system tray": "Close to system tray",
"Comment": "Comment", "Comment": "Comment",
+1
View File
@@ -35,6 +35,7 @@
"Broadcast": "Transmisión", "Broadcast": "Transmisión",
"Cancel": "Cancelar", "Cancel": "Cancelar",
"Check for Updates": "Buscar actualizaciones", "Check for Updates": "Buscar actualizaciones",
"Clear caches": "Borrar cachés",
"Close": "Cerrar", "Close": "Cerrar",
"Close to system tray": "Cerrar a la bandeja del sistema", "Close to system tray": "Cerrar a la bandeja del sistema",
"Comment": "Comentario", "Comment": "Comentario",
+1
View File
@@ -47,6 +47,7 @@
"Cast to device": "Diffuser sur un appareil", "Cast to device": "Diffuser sur un appareil",
"Channels": "Canaux", "Channels": "Canaux",
"Check for Updates": "Vérifier les mises à jour", "Check for Updates": "Vérifier les mises à jour",
"Clear caches": "Vider les caches",
"Close": "Fermer", "Close": "Fermer",
"Close to system tray": "Réduire dans la barre d'état à la fermeture", "Close to system tray": "Réduire dans la barre d'état à la fermeture",
"Comment": "Commentaire", "Comment": "Commentaire",
+1
View File
@@ -347,6 +347,7 @@ func (c *Controller) ShowSettingsDialog(themeUpdateCallbk func(), themeFiles map
c.App.LocalPlayer.SetEqualizer(eq) c.App.LocalPlayer.SetEqualizer(eq)
} }
dlg.OnPageNeedsRefresh = c.RefreshPageFunc dlg.OnPageNeedsRefresh = c.RefreshPageFunc
dlg.OnClearCaches = func() { go c.App.ClearCaches() }
pop := widget.NewModalPopUp(dlg, c.MainWindow.Canvas()) pop := widget.NewModalPopUp(dlg, c.MainWindow.Canvas())
fynetooltip.AddPopUpToolTipLayer(pop) fynetooltip.AddPopUpToolTipLayer(pop)
dlg.OnDismiss = func() { dlg.OnDismiss = func() {
+9
View File
@@ -38,6 +38,7 @@ type SettingsDialog struct {
OnDismiss func() OnDismiss func()
OnEqualizerSettingsChanged func() OnEqualizerSettingsChanged func()
OnPageNeedsRefresh func() OnPageNeedsRefresh func()
OnClearCaches func()
config *backend.Config config *backend.Config
audioDevices []mpv.AudioDevice audioDevices []mpv.AudioDevice
@@ -610,10 +611,18 @@ func (s *SettingsDialog) createAdvancedTab() *container.TabItem {
} }
percentEntry.Text = strconv.Itoa(s.config.Application.MaxImageCacheSizeMB) percentEntry.Text = strconv.Itoa(s.config.Application.MaxImageCacheSizeMB)
clearCaches := widget.NewButton(lang.L("Clear caches"), func() {
if s.OnClearCaches != nil {
s.OnClearCaches()
}
})
imgCacheCfg := container.NewHBox( imgCacheCfg := container.NewHBox(
widget.NewLabel(lang.L("Maximum image cache size")), widget.NewLabel(lang.L("Maximum image cache size")),
percentEntry, percentEntry,
widget.NewLabel("MB"), widget.NewLabel("MB"),
layout.NewSpacer(),
clearCaches,
) )
osMediaAPIs := widget.NewCheck(lang.L("Enable OS media player integration"), func(b bool) { osMediaAPIs := widget.NewCheck(lang.L("Enable OS media player integration"), func(b bool) {