diff --git a/internal/assets/templates/changes.html b/internal/assets/templates/changes.html
index d8eee38..2b4c53a 100644
--- a/internal/assets/templates/changes.html
+++ b/internal/assets/templates/changes.html
@@ -4,9 +4,10 @@
{{ range $i, $watch := .ChangeDetections }}
-
- {{ .Name }}
+ {{ .Name }}
- {{ $watch.LastChanged | relativeTime }}
+ - diff: {{ $watch.DiffDisplay | }}
{{ end }}
diff --git a/internal/feed/changedetection.go b/internal/feed/changedetection.go
index 6bfd119..e1e3e45 100644
--- a/internal/feed/changedetection.go
+++ b/internal/feed/changedetection.go
@@ -4,25 +4,29 @@ import (
"fmt"
"log/slog"
"net/http"
+ "strings"
"time"
)
type changeDetectionResponseJson struct {
Name string `json:"title"`
- Url string `json:"url"`
+ URL string `json:"url"`
LastChanged int `json:"last_changed"`
+ UUID string `json:"uuid"`
}
-
func parseLastChangeTime(t int) time.Time {
parsedTime := time.Unix(int64(t), 0)
return parsedTime
}
-
-func FetchLatestDetectedChanges(watches []string, token string) (ChangeWatches, error) {
+func FetchLatestDetectedChanges(request_url string, watches []string, token string) (ChangeWatches, error) {
changeWatches := make(ChangeWatches, 0, len(watches))
+ if request_url == "" {
+ request_url = "https://www.changedetection.io"
+ }
+
if len(watches) == 0 {
return changeWatches, nil
}
@@ -30,7 +34,7 @@ func FetchLatestDetectedChanges(watches []string, token string) (ChangeWatches,
requests := make([]*http.Request, len(watches))
for i, repository := range watches {
- request, _ := http.NewRequest("GET", fmt.Sprintf("https://changedetection.knhash.in/api/v1/watch/%s", repository), nil)
+ request, _ := http.NewRequest("GET", fmt.Sprintf("%s/api/v1/watch/%s", request_url, repository), nil)
if token != "" {
request.Header.Add("x-api-key", token)
@@ -60,8 +64,10 @@ func FetchLatestDetectedChanges(watches []string, token string) (ChangeWatches,
changeWatches = append(changeWatches, ChangeWatch{
Name: watch.Name,
- Url: watch.Url,
+ URL: watch.URL,
LastChanged: parseLastChangeTime(watch.LastChanged),
+ DiffURL: request_url + "/diff/" + watch.UUID,
+ DiffDisplay: strings.Split(watch.UUID, "-")[len(strings.Split(watch.UUID, "-"))-1],
})
}
diff --git a/internal/feed/primitives.go b/internal/feed/primitives.go
index 70e54a1..398701b 100644
--- a/internal/feed/primitives.go
+++ b/internal/feed/primitives.go
@@ -50,8 +50,10 @@ type AppReleases []AppRelease
type ChangeWatch struct {
Name string
- Url string
+ URL string
LastChanged time.Time
+ DiffURL string
+ DiffDisplay string
}
type ChangeWatches []ChangeWatch
diff --git a/internal/widget/changedetection.go b/internal/widget/changedetection.go
index 589147e..a1a65d8 100644
--- a/internal/widget/changedetection.go
+++ b/internal/widget/changedetection.go
@@ -11,11 +11,12 @@ import (
type ChangeDetections struct {
widgetBase `yaml:",inline"`
- ChangeDetections feed.ChangeWatches `yaml:"-"`
- Watches []string `yaml:"watches"`
- Token OptionalEnvString `yaml:"token"`
- Limit int `yaml:"limit"`
- CollapseAfter int `yaml:"collapse-after"`
+ ChangeDetections feed.ChangeWatches `yaml:"-"`
+ RequestURL string `yaml:"request_url"`
+ Watches []string `yaml:"watches"`
+ Token OptionalEnvString `yaml:"token"`
+ Limit int `yaml:"limit"`
+ CollapseAfter int `yaml:"collapse-after"`
}
func (widget *ChangeDetections) Initialize() error {
@@ -33,7 +34,7 @@ func (widget *ChangeDetections) Initialize() error {
}
func (widget *ChangeDetections) Update(ctx context.Context) {
- watches, err := feed.FetchLatestDetectedChanges(widget.Watches, string(widget.Token))
+ watches, err := feed.FetchLatestDetectedChanges(widget.RequestURL, widget.Watches, string(widget.Token))
if !widget.canContinueUpdateAfterHandlingErr(err) {
return