Add an option to hide unsupported notifications

This commit is contained in:
r 2021-12-13 13:58:15 +00:00
parent 1c8c661abb
commit db29c3d874
5 changed files with 60 additions and 37 deletions

View File

@ -23,9 +23,12 @@ type Notification struct {
} }
// GetNotifications return notifications. // GetNotifications return notifications.
func (c *Client) GetNotifications(ctx context.Context, pg *Pagination, excludes []string) ([]*Notification, error) { func (c *Client) GetNotifications(ctx context.Context, pg *Pagination, includes, excludes []string) ([]*Notification, error) {
var notifications []*Notification var notifications []*Notification
params := url.Values{} params := url.Values{}
for _, include := range includes {
params.Add("include_types[]", include)
}
for _, exclude := range excludes { for _, exclude := range excludes {
params.Add("exclude_types[]", exclude) params.Add("exclude_types[]", exclude)
} }

View File

@ -1,31 +1,33 @@
package model package model
type Settings struct { type Settings struct {
DefaultVisibility string `json:"default_visibility"` DefaultVisibility string `json:"default_visibility"`
DefaultFormat string `json:"default_format"` DefaultFormat string `json:"default_format"`
CopyScope bool `json:"copy_scope"` CopyScope bool `json:"copy_scope"`
ThreadInNewTab bool `json:"thread_in_new_tab"` ThreadInNewTab bool `json:"thread_in_new_tab"`
HideAttachments bool `json:"hide_attachments"` HideAttachments bool `json:"hide_attachments"`
MaskNSFW bool `json:"mask_nfsw"` MaskNSFW bool `json:"mask_nfsw"`
NotificationInterval int `json:"notifications_interval"` NotificationInterval int `json:"notifications_interval"`
FluorideMode bool `json:"fluoride_mode"` FluorideMode bool `json:"fluoride_mode"`
DarkMode bool `json:"dark_mode"` DarkMode bool `json:"dark_mode"`
AntiDopamineMode bool `json:"anti_dopamine_mode"` AntiDopamineMode bool `json:"anti_dopamine_mode"`
CSS string `json:"css"` HideUnsupportedNotifs bool `json:"hide_unsupported_notifs"`
CSS string `json:"css"`
} }
func NewSettings() *Settings { func NewSettings() *Settings {
return &Settings{ return &Settings{
DefaultVisibility: "public", DefaultVisibility: "public",
DefaultFormat: "", DefaultFormat: "",
CopyScope: true, CopyScope: true,
ThreadInNewTab: false, ThreadInNewTab: false,
HideAttachments: false, HideAttachments: false,
MaskNSFW: true, MaskNSFW: true,
NotificationInterval: 0, NotificationInterval: 0,
FluorideMode: false, FluorideMode: false,
DarkMode: false, DarkMode: false,
AntiDopamineMode: false, AntiDopamineMode: false,
CSS: "", HideUnsupportedNotifs: false,
CSS: "",
} }
} }

View File

@ -410,18 +410,29 @@ func (s *service) NotificationPage(c *client, maxID string,
var nextLink string var nextLink string
var unreadCount int var unreadCount int
var readID string var readID string
var excludes []string var includes, excludes []string
var pg = mastodon.Pagination{ var pg = mastodon.Pagination{
MaxID: maxID, MaxID: maxID,
MinID: minID, MinID: minID,
Limit: 20, Limit: 20,
} }
if c.s.Settings.HideUnsupportedNotifs {
// Explicitly include the supported types.
// For now, only Pleroma supports this option, Mastadon
// will simply ignore the unknown params.
includes = []string{"follow", "follow_request", "mention", "reblog", "favourite"}
// Explicitly exclude the unsupported types.
// Pleroma prioritizes includes over excludes, but we
// still specify excludes to make it work with Mastadon.
excludes = []string{"poll"}
}
if c.s.Settings.AntiDopamineMode { if c.s.Settings.AntiDopamineMode {
excludes = []string{"follow", "favourite", "reblog"} excludes = append(excludes, "follow", "favourite", "reblog")
} }
notifications, err := c.GetNotifications(c.ctx, &pg, excludes) notifications, err := c.GetNotifications(c.ctx, &pg, includes, excludes)
if err != nil { if err != nil {
return return
} }

View File

@ -481,20 +481,22 @@ func NewHandler(s *service, logger *log.Logger, staticDir string) http.Handler {
fluorideMode := c.r.FormValue("fluoride_mode") == "true" fluorideMode := c.r.FormValue("fluoride_mode") == "true"
darkMode := c.r.FormValue("dark_mode") == "true" darkMode := c.r.FormValue("dark_mode") == "true"
antiDopamineMode := c.r.FormValue("anti_dopamine_mode") == "true" antiDopamineMode := c.r.FormValue("anti_dopamine_mode") == "true"
hideUnsupportedNotifs := c.r.FormValue("hide_unsupported_notifs") == "true"
css := c.r.FormValue("css") css := c.r.FormValue("css")
settings := &model.Settings{ settings := &model.Settings{
DefaultVisibility: visibility, DefaultVisibility: visibility,
DefaultFormat: format, DefaultFormat: format,
CopyScope: copyScope, CopyScope: copyScope,
ThreadInNewTab: threadInNewTab, ThreadInNewTab: threadInNewTab,
HideAttachments: hideAttachments, HideAttachments: hideAttachments,
MaskNSFW: maskNSFW, MaskNSFW: maskNSFW,
NotificationInterval: ni, NotificationInterval: ni,
FluorideMode: fluorideMode, FluorideMode: fluorideMode,
DarkMode: darkMode, DarkMode: darkMode,
AntiDopamineMode: antiDopamineMode, AntiDopamineMode: antiDopamineMode,
CSS: css, HideUnsupportedNotifs: hideUnsupportedNotifs,
CSS: css,
} }
err := s.SaveSettings(c, settings) err := s.SaveSettings(c, settings)

View File

@ -61,6 +61,11 @@
value="true" {{if .Settings.AntiDopamineMode}}checked{{end}}> value="true" {{if .Settings.AntiDopamineMode}}checked{{end}}>
<label for="anti-dopamine-mode"> Enable <abbr title="Remove like/retweet/unread notification count and disable like/retweet/follow notifications">anti-dopamine mode</abbr> </label> <label for="anti-dopamine-mode"> Enable <abbr title="Remove like/retweet/unread notification count and disable like/retweet/follow notifications">anti-dopamine mode</abbr> </label>
</div> </div>
<div class="settings-form-field">
<input id="hide-unsupported-notifs" name="hide_unsupported_notifs" type="checkbox"
value="true" {{if .Settings.HideUnsupportedNotifs}}checked{{end}}>
<label for="hide-unsupported-notifs"> Hide unsupported notifications </label>
</div>
<div class="settings-form-field"> <div class="settings-form-field">
<input id="dark-mode" name="dark_mode" type="checkbox" value="true" {{if .Settings.DarkMode}}checked{{end}}> <input id="dark-mode" name="dark_mode" type="checkbox" value="true" {{if .Settings.DarkMode}}checked{{end}}>
<label for="dark-mode"> Use dark theme </label> <label for="dark-mode"> Use dark theme </label>