diff options
-rw-r--r-- | model/settings.go | 40 | ||||
-rw-r--r-- | renderer/model.go | 12 | ||||
-rw-r--r-- | service/service.go | 7 | ||||
-rw-r--r-- | service/transport.go | 22 | ||||
-rw-r--r-- | templates/header.tmpl | 4 | ||||
-rw-r--r-- | templates/settings.tmpl | 15 |
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> |