Archived
Offer "quit and update" in the footer, check for updates on every start
The update check ran at most once a day and only printed a line after the TUI exited. Now the registry is asked on every start (in the background, 3 s timeout, no cache) and the result reaches the TUI as a message. With a newer release, the footer shows `q quit and update to vX` right of help and quit, on a highlighted background (Theme.Highlight). `q` quits and `main` installs the release once the terminal is restored, sharing the code of `submarine update`; plain quit moves to `Q`, ctrl+c never updates. Drop LatestCached and CheckInterval. Add D27 and F58. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -209,20 +209,3 @@ func (l *limitWriter) Write(p []byte) (int, error) {
|
||||
}
|
||||
return l.w.Write(p)
|
||||
}
|
||||
|
||||
// CheckInterval is how often the passive check may hit the network.
|
||||
const CheckInterval = 24 * time.Hour
|
||||
|
||||
// LatestCached is Latest with a file cache: within CheckInterval it returns
|
||||
// the cached answer without any network access. A failed lookup is cached too,
|
||||
// so an unreachable registry is not retried on every start.
|
||||
func (c *Client) LatestCached(ctx context.Context, cacheFile string) (string, error) {
|
||||
if fi, err := os.Stat(cacheFile); err == nil && time.Since(fi.ModTime()) < CheckInterval {
|
||||
b, _ := os.ReadFile(cacheFile)
|
||||
return strings.TrimSpace(string(b)), nil
|
||||
}
|
||||
v, err := c.Latest(ctx)
|
||||
_ = os.MkdirAll(filepath.Dir(cacheFile), 0o755)
|
||||
_ = os.WriteFile(cacheFile, []byte(v), 0o644) // v is "" on failure
|
||||
return v, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user