Procházet zdrojové kódy

Merge pull request #240 from cmeadowstech/alt-status-codes

Add alternative status code option to monitor widget
Svilen Markov před 9 měsíci
rodič
revize
72f78f1c8d
2 změnil soubory, kde provedl 20 přidání a 8 odebrání
  1. 11 1
      docs/configuration.md
  2. 9 7
      internal/widget/monitor.go

+ 11 - 1
docs/configuration.md

@@ -853,7 +853,7 @@ Either a value from the table below or a URL to a custom search engine. Use `{QU
 ##### `new-tab`
 When set to `true`, swaps the shortcuts for showing results in the same or new tab, defaulting to showing results in a new tab.
 
-##### `new-tab`
+##### `autofocus`
 When set to `true`, automatically focuses the search input on page load.
 
 ##### `bangs`
@@ -1144,6 +1144,7 @@ Properties for each site:
 | icon | string | no | |
 | allow-insecure | boolean | no | false |
 | same-tab | boolean | no | false |
+| alt-status-codes | array | no | |
 
 `title`
 
@@ -1179,6 +1180,15 @@ Whether to ignore invalid/self-signed certificates.
 
 Whether to open the link in the same or a new tab.
 
+`alt-status-codes`
+
+Status codes other than 200 that you want to return "OK".
+
+```yaml
+alt-status-codes:
+  - 403
+```
+
 ### Releases
 Display a list of latest releases for specific repositories on Github, GitLab, Codeberg or Docker Hub.
 

+ 9 - 7
internal/widget/monitor.go

@@ -3,6 +3,7 @@ package widget
 import (
 	"context"
 	"html/template"
+	"slices"
 	"strconv"
 	"time"
 
@@ -10,8 +11,8 @@ import (
 	"github.com/glanceapp/glance/internal/feed"
 )
 
-func statusCodeToText(status int) string {
-	if status == 200 {
+func statusCodeToText(status int, altStatusCodes []int) string {
+	if status == 200 || slices.Contains(altStatusCodes, status) {
 		return "OK"
 	}
 	if status == 404 {
@@ -33,8 +34,8 @@ func statusCodeToText(status int) string {
 	return strconv.Itoa(status)
 }
 
-func statusCodeToStyle(status int) string {
-	if status == 200 {
+func statusCodeToStyle(status int, altStatusCodes []int) string {
+	if status == 200 || slices.Contains(altStatusCodes, status) {
 		return "ok"
 	}
 
@@ -52,6 +53,7 @@ type Monitor struct {
 		SameTab                 bool             `yaml:"same-tab"`
 		StatusText              string           `yaml:"-"`
 		StatusStyle             string           `yaml:"-"`
+		AltStatusCodes          []int            `yaml:"alt-status-codes"`
 	} `yaml:"sites"`
 	ShowFailingOnly bool `yaml:"show-failing-only"`
 	HasFailing      bool `yaml:"-"`
@@ -87,13 +89,13 @@ func (widget *Monitor) Update(ctx context.Context) {
 		status := &statuses[i]
 		site.Status = status
 
-		if status.Code >= 400 || status.TimedOut || status.Error != nil {
+		if !slices.Contains(site.AltStatusCodes, status.Code) && (status.Code >= 400 || status.TimedOut || status.Error != nil) {
 			widget.HasFailing = true
 		}
 
 		if !status.TimedOut {
-			site.StatusText = statusCodeToText(status.Code)
-			site.StatusStyle = statusCodeToStyle(status.Code)
+			site.StatusText = statusCodeToText(status.Code, site.AltStatusCodes)
+			site.StatusStyle = statusCodeToStyle(status.Code, site.AltStatusCodes)
 		}
 	}
 }