aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorr <r@freesoftwareextremist.com>2020-11-14 14:08:16 +0000
committerr <r@freesoftwareextremist.com>2020-11-14 14:22:34 +0000
commitc3d90539e9a7addd3c41f44b864b14bde60958dc (patch)
treecc8efc18befd999db4985ef75fc4f42e99da9f78
parent856fe9e8c74e7c8096f7fb04d7b0932171223752 (diff)
downloadbloat-c3d90539e9a7addd3c41f44b864b14bde60958dc.tar.gz
bloat-c3d90539e9a7addd3c41f44b864b14bde60958dc.zip
Add notification interval setting
It replaces the "Auto refresh notifications" checkbox
-rw-r--r--model/settings.go40
-rw-r--r--renderer/model.go12
-rw-r--r--service/service.go7
-rw-r--r--service/transport.go22
-rw-r--r--templates/header.tmpl4
-rw-r--r--templates/settings.tmpl15
6 files changed, 56 insertions, 44 deletions
diff --git a/model/settings.go b/model/settings.go
index 337a6a3..6d17901 100644
--- a/model/settings.go
+++ b/model/settings.go
@@ -1,29 +1,29 @@
package model
type Settings struct {
- DefaultVisibility string `json:"default_visibility"`
- DefaultFormat string `json:"default_format"`
- CopyScope bool `json:"copy_scope"`
- ThreadInNewTab bool `json:"thread_in_new_tab"`
- HideAttachments bool `json:"hide_attachments"`
- MaskNSFW bool `json:"mask_nfsw"`
- AutoRefreshNotifications bool `json:"auto_refresh_notifications"`
- FluorideMode bool `json:"fluoride_mode"`
- DarkMode bool `json:"dark_mode"`
- AntiDopamineMode bool `json:"anti_dopamine_mode"`
+ DefaultVisibility string `json:"default_visibility"`
+ DefaultFormat string `json:"default_format"`
+ CopyScope bool `json:"copy_scope"`
+ ThreadInNewTab bool `json:"thread_in_new_tab"`
+ HideAttachments bool `json:"hide_attachments"`
+ MaskNSFW bool `json:"mask_nfsw"`
+ NotificationInterval int `json:"notifications_interval"`
+ FluorideMode bool `json:"fluoride_mode"`
+ DarkMode bool `json:"dark_mode"`
+ AntiDopamineMode bool `json:"anti_dopamine_mode"`
}
func NewSettings() *Settings {
return &Settings{
- DefaultVisibility: "public",
- DefaultFormat: "",
- CopyScope: true,
- ThreadInNewTab: false,
- HideAttachments: false,
- MaskNSFW: true,
- AutoRefreshNotifications: false,
- FluorideMode: false,
- DarkMode: false,
- AntiDopamineMode: false,
+ DefaultVisibility: "public",
+ DefaultFormat: "",
+ CopyScope: true,
+ ThreadInNewTab: false,
+ HideAttachments: false,
+ MaskNSFW: true,
+ NotificationInterval: 0,
+ FluorideMode: false,
+ DarkMode: false,
+ AntiDopamineMode: false,
}
}
diff --git a/renderer/model.go b/renderer/model.go
index 0e5204a..1dcb404 100644
--- a/renderer/model.go
+++ b/renderer/model.go
@@ -23,12 +23,12 @@ type NavData struct {
}
type CommonData struct {
- Title string
- CustomCSS string
- CSRFToken string
- Count int
- AutoRefresh bool
- Target string
+ Title string
+ CustomCSS string
+ CSRFToken string
+ Count int
+ RefreshInterval int
+ Target string
}
type ErrorData struct {
diff --git a/service/service.go b/service/service.go
index 48aafda..1ba99da 100644
--- a/service/service.go
+++ b/service/service.go
@@ -434,7 +434,7 @@ func (svc *service) ServeNotificationPage(c *model.Client, maxID string,
}
commonData := svc.getCommonData(c, "notifications")
- commonData.AutoRefresh = c.Session.Settings.AutoRefreshNotifications
+ commonData.RefreshInterval = c.Session.Settings.NotificationInterval
commonData.Target = "main"
commonData.Count = unreadCount
data := &renderer.NotificationData{
@@ -932,6 +932,11 @@ func (svc *service) UnSubscribe(c *model.Client, id string) (err error) {
}
func (svc *service) SaveSettings(c *model.Client, s *model.Settings) (err error) {
+ switch s.NotificationInterval {
+ case 0, 30, 60, 120, 300, 600:
+ default:
+ return errInvalidArgument
+ }
session, err := svc.sessionRepo.Get(c.Session.ID)
if err != nil {
return
diff --git a/service/transport.go b/service/transport.go
index 6c0975d..3c9392a 100644
--- a/service/transport.go
+++ b/service/transport.go
@@ -589,22 +589,22 @@ func NewHandler(s Service, staticDir string) http.Handler {
threadInNewTab := req.FormValue("thread_in_new_tab") == "true"
hideAttachments := req.FormValue("hide_attachments") == "true"
maskNSFW := req.FormValue("mask_nsfw") == "true"
- arn := req.FormValue("auto_refresh_notifications") == "true"
+ ni, _ := strconv.Atoi(req.FormValue("notification_interval"))
fluorideMode := req.FormValue("fluoride_mode") == "true"
darkMode := req.FormValue("dark_mode") == "true"
antiDopamineMode := req.FormValue("anti_dopamine_mode") == "true"
settings := &model.Settings{
- DefaultVisibility: visibility,
- DefaultFormat: format,
- CopyScope: copyScope,
- ThreadInNewTab: threadInNewTab,
- HideAttachments: hideAttachments,
- MaskNSFW: maskNSFW,
- AutoRefreshNotifications: arn,
- FluorideMode: fluorideMode,
- DarkMode: darkMode,
- AntiDopamineMode: antiDopamineMode,
+ DefaultVisibility: visibility,
+ DefaultFormat: format,
+ CopyScope: copyScope,
+ ThreadInNewTab: threadInNewTab,
+ HideAttachments: hideAttachments,
+ MaskNSFW: maskNSFW,
+ NotificationInterval: ni,
+ FluorideMode: fluorideMode,
+ DarkMode: darkMode,
+ AntiDopamineMode: antiDopamineMode,
}
err := s.SaveSettings(c, settings)
diff --git a/templates/header.tmpl b/templates/header.tmpl
index 0c81b72..df2b6af 100644
--- a/templates/header.tmpl
+++ b/templates/header.tmpl
@@ -14,8 +14,8 @@
{{if $.Ctx.AntiDopamineMode}}
<meta name="antidopamine_mode" content="{{$.Ctx.AntiDopamineMode}}">
{{end}}
- {{if .AutoRefresh}}
- <meta http-equiv="refresh" content="30">
+ {{if .RefreshInterval}}
+ <meta http-equiv="refresh" content="{{.RefreshInterval}}">
{{end}}
<title> {{if gt .Count 0}}({{.Count}}){{end}} {{.Title}} </title>
<link rel="stylesheet" href="/static/style.css">
diff --git a/templates/settings.tmpl b/templates/settings.tmpl
index 972e1a2..baeb64d 100644
--- a/templates/settings.tmpl
+++ b/templates/settings.tmpl
@@ -23,6 +23,17 @@
</select>
</div>
<div class="settings-form-field">
+ <label for="notification-interval"> Refresh Notifications </label>
+ <select id="notification-interval" name="notification_interval">
+ <option value="0" {{if eq .Settings.NotificationInterval 0}}selected{{end}}>Disabled</option>
+ <option value="30" {{if eq .Settings.NotificationInterval 30}}selected{{end}}>After 30s</option>
+ <option value="60" {{if eq .Settings.NotificationInterval 60}}selected{{end}}>After 1m</option>
+ <option value="120" {{if eq .Settings.NotificationInterval 120}}selected{{end}}>After 2m</option>
+ <option value="300" {{if eq .Settings.NotificationInterval 300}}selected{{end}}>After 5m</option>
+ <option value="600" {{if eq .Settings.NotificationInterval 600}}selected{{end}}>After 10m</option>
+ </select>
+ </div>
+ <div class="settings-form-field">
<input id="copy-scope" name="copy_scope" type="checkbox" value="true" {{if .Settings.CopyScope}}checked{{end}}>
<label for="copy-scope"> Copy scope when replying </label>
</div>
@@ -39,10 +50,6 @@
<label for="mask-nsfw"> Mask NSFW attachments </label>
</div>
<div class="settings-form-field">
- <input id="auto-refresh-notifications" name="auto_refresh_notifications" type="checkbox" value="true" {{if .Settings.AutoRefreshNotifications}}checked{{end}}>
- <label for="auto-refresh-notifications"> Auto refresh notifications </label>
- </div>
- <div class="settings-form-field">
<input id="fluoride-mode" name="fluoride_mode" type="checkbox" value="true" {{if .Settings.FluorideMode}}checked{{end}}>
<label for="fluoride-mode"> Enable <abbr title="Enable JavaScript based functionality, e.g., like/retweet without page reload and reply preview on thread page">fluoride mode</abbr> </label>
</div>