Add the Config view: edit and save the settings, applied without a restart
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
package ui
|
||||
|
||||
import (
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"git.stinnesbeck.com/nils/arr-tui/internal/config"
|
||||
)
|
||||
|
||||
// SetConfigSource tells the app which file the settings came from and what that
|
||||
// file contains, so the Config view can save changes. raw is the file as
|
||||
// written (see config.LoadFile), not the effective settings.
|
||||
func (a *App) SetConfigSource(path string, raw *config.Config) {
|
||||
a.cfgPath, a.cfgFile = path, raw
|
||||
if a.settings != nil {
|
||||
a.settings.describe()
|
||||
}
|
||||
}
|
||||
|
||||
// applyConfig puts new settings into effect without a restart.
|
||||
func (a *App) applyConfig(c *config.Config) {
|
||||
old := a.cfg
|
||||
a.cfg = c
|
||||
|
||||
if old.Radarr.Service != c.Radarr.Service || old.Sonarr.Service != c.Sonarr.Service || old.SABnzbd != c.SABnzbd {
|
||||
a.radarr.Reconfigure(c.Radarr.URL, c.Radarr.APIKey)
|
||||
a.sonarr.Reconfigure(c.Sonarr.URL, c.Sonarr.APIKey)
|
||||
a.sab.Reconfigure(c.SABnzbd.URL, c.SABnzbd.APIKey)
|
||||
a.probeAll() // the indicators, right away
|
||||
for _, f := range a.reconnect {
|
||||
f()
|
||||
}
|
||||
}
|
||||
if old.UI.RefreshSeconds != c.UI.RefreshSeconds {
|
||||
a.downloads.setInterval(time.Duration(c.UI.RefreshSeconds) * time.Second)
|
||||
}
|
||||
a.bell = c.UI.Bell
|
||||
if c.UI.ShouldNotifyDownloads() != a.notifyDone {
|
||||
a.setNotifyDownloads(c.UI.ShouldNotifyDownloads())
|
||||
}
|
||||
if old.UI.ShowCovers() != c.UI.ShowCovers() || old.UI.CoverStyle != c.UI.CoverStyle {
|
||||
a.covers = c.UI.ShowCovers()
|
||||
a.restyleCovers()
|
||||
}
|
||||
}
|
||||
|
||||
// restyleCovers applies a changed poster style or switch to every detail pane.
|
||||
func (a *App) restyleCovers() {
|
||||
blocks, graphics := resolveCovers(a.cfg.UI.CoverStyle, os.Getenv)
|
||||
if a.gfx != nil {
|
||||
a.gfx.deleteAll() // the terminal's copies belong to the old images
|
||||
}
|
||||
a.coverStyle = blocks
|
||||
switch {
|
||||
case graphics && a.gfx == nil:
|
||||
a.gfx = newKittyGraphics(a.writeTerminal)
|
||||
case !graphics:
|
||||
a.gfx = nil
|
||||
}
|
||||
a.coverCache = newCoverCache() // stored copies depend on the style (their height)
|
||||
for _, p := range a.panes {
|
||||
p.cover.style, p.cover.gfx = blocks, a.gfx
|
||||
p.cover.cells = nil
|
||||
p.Show(p.detail, p.lastRef) // fetch the poster again for the new style
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user