[mirror] yet another tui rss reader github.com/olexsmir/smutok

feat(worker): check for internet connection

olexsmir.xyz cfe45f84 d588b2a7

verified
Changed files
+16 -6
internal
freshrss
+1 -1
app.go
··· 52 52 return nil, err 53 53 } 54 54 55 - fw := freshrss.NewWorker(fr, store, writeToken) 55 + fw := freshrss.NewWorker(fr, store, writeToken, cfg.FreshRSS.Host) 56 56 57 57 return &app{ 58 58 cfg: cfg,
+15 -5
internal/freshrss/worker.go
··· 3 3 import ( 4 4 "context" 5 5 "log/slog" 6 + "net" 7 + "net/url" 6 8 "sync" 7 9 "time" 8 10 ··· 13 15 api *Client 14 16 store *store.Sqlite 15 17 18 + apiServer string 16 19 writeToken string 17 20 } 18 21 19 - func NewWorker(api *Client, store *store.Sqlite, writeToken string) *Worker { 22 + func NewWorker(api *Client, store *store.Sqlite, writeToken, apiServer string) *Worker { 20 23 return &Worker{ 21 24 api: api, 22 25 store: store, 23 26 writeToken: writeToken, 27 + apiServer: apiServer, 24 28 } 25 29 } 26 30 ··· 34 38 case <-ctx.Done(): 35 39 return 36 40 default: 37 - if !w.isNetworkAvailable(ctx) { 41 + if !w.isNetworkAvailable() { 38 42 slog.Info("worker: no internet connection") 39 43 continue 40 44 } ··· 66 70 } 67 71 } 68 72 69 - // TODO: implement me 70 - func (Worker) isNetworkAvailable(_ context.Context) bool { 71 - return true 73 + func (w *Worker) isNetworkAvailable() bool { 74 + u, err := url.Parse(w.apiServer) 75 + if err != nil { 76 + slog.Error("invalid api url", "url", w.apiServer, "err", err) 77 + return false 78 + } 79 + 80 + _, err = net.LookupHost(u.Host) 81 + return err == nil 72 82 } 73 83 74 84 func (w *Worker) pendingReads(ctx context.Context) error {