+1
-1
app.go
+1
-1
app.go
+15
-5
internal/freshrss/worker.go
+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 {