all repos

smutok @ cfe45f84e943de1ee39f995f3029727d4034b1d9

yet another tui rss reader (not abandoned, just paused development)
2 files changed, 16 insertions(+), 6 deletions(-)
feat(worker): check for internet connection
Author: Oleksandr Smirnov olexsmir@gmail.com
Committed at: 2025-12-28 19:20:24 +0200
Change ID: vvoxvvuvkkluvtwxqyorrlnulnzkzurr
Parent: d588b2a
M app.go

@@ -52,7 +52,7 @@ if err != nil {

return nil, err } - fw := freshrss.NewWorker(fr, store, writeToken) + fw := freshrss.NewWorker(fr, store, writeToken, cfg.FreshRSS.Host) return &app{ cfg: cfg,
M internal/freshrss/worker.go

@@ -3,6 +3,8 @@

import ( "context" "log/slog" + "net" + "net/url" "sync" "time"

@@ -13,14 +15,16 @@ type Worker struct {

api *Client store *store.Sqlite + apiServer string writeToken string } -func NewWorker(api *Client, store *store.Sqlite, writeToken string) *Worker { +func NewWorker(api *Client, store *store.Sqlite, writeToken, apiServer string) *Worker { return &Worker{ api: api, store: store, writeToken: writeToken, + apiServer: apiServer, } }

@@ -34,7 +38,7 @@ select {

case <-ctx.Done(): return default: - if !w.isNetworkAvailable(ctx) { + if !w.isNetworkAvailable() { slog.Info("worker: no internet connection") continue }

@@ -66,9 +70,15 @@ }

} } -// TODO: implement me -func (Worker) isNetworkAvailable(_ context.Context) bool { - return true +func (w *Worker) isNetworkAvailable() bool { + u, err := url.Parse(w.apiServer) + if err != nil { + slog.Error("invalid api url", "url", w.apiServer, "err", err) + return false + } + + _, err = net.LookupHost(u.Host) + return err == nil } func (w *Worker) pendingReads(ctx context.Context) error {