67 lines
2.0 KiB
Go
67 lines
2.0 KiB
Go
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
|
|
}
|
|
}
|