Compare commits

..

2 Commits

Author SHA1 Message Date
d4de6faa89
Save and use excluded types
All checks were successful
continuous-integration/drone/push Build is passing
2019-08-19 20:32:30 +02:00
19f3177f66
Add UI for saving excluded post types 2019-08-19 20:16:48 +02:00
3 changed files with 78 additions and 15 deletions

View File

@ -54,8 +54,10 @@ type indexPage struct {
type settingsPage struct { type settingsPage struct {
Session session Session session
CurrentChannel microsub.Channel CurrentChannel microsub.Channel
CurrentSetting channelSetting CurrentSetting channelSetting
ExcludedTypes map[string]bool
ExcludedTypeNames map[string]string
Channels []microsub.Channel Channels []microsub.Channel
Feeds []microsub.Feed Feeds []microsub.Feed
@ -348,7 +350,7 @@ func (h *mainHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
} else { } else {
page.CurrentSetting = channelSetting{} page.CurrentSetting = channelSetting{}
} }
// TODO: similar code is found in timeline.go // FIXME: similar code is found in timeline.go
if page.CurrentSetting.ChannelType == "" { if page.CurrentSetting.ChannelType == "" {
if v.UID == "notifications" { if v.UID == "notifications" {
page.CurrentSetting.ChannelType = "stream" page.CurrentSetting.ChannelType = "stream"
@ -356,6 +358,21 @@ func (h *mainHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
page.CurrentSetting.ChannelType = "sorted-set" page.CurrentSetting.ChannelType = "sorted-set"
} }
} }
page.ExcludedTypeNames = map[string]string{
"repost": "Reposts",
"like": "Likes",
"bookmark": "Bookmarks",
"reply": "Replies",
"checkin": "Checkins",
}
page.ExcludedTypes = make(map[string]bool)
types := []string{"repost", "like", "bookmark", "reply", "checkin"}
for _, v := range types {
page.ExcludedTypes[v] = false
}
for _, v := range page.CurrentSetting.ExcludeType {
page.ExcludedTypes[v] = true
}
break break
} }
} }
@ -629,23 +646,25 @@ func (h *mainHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
defer h.Backend.save() defer h.Backend.save()
uid := r.FormValue("uid") uid := r.FormValue("uid")
if h.Backend.Settings == nil {
h.Backend.Settings = make(map[string]channelSetting)
}
excludeRegex := r.FormValue("exclude_regex") excludeRegex := r.FormValue("exclude_regex")
includeRegex := r.FormValue("include_regex") includeRegex := r.FormValue("include_regex")
channelType := r.FormValue("type") channelType := r.FormValue("type")
if setting, e := h.Backend.Settings[uid]; e { setting, e := h.Backend.Settings[uid]
setting.ExcludeRegex = excludeRegex if !e {
setting.IncludeRegex = includeRegex setting = channelSetting{}
setting.ChannelType = channelType
h.Backend.Settings[uid] = setting
} else {
setting = channelSetting{
ExcludeRegex: excludeRegex,
IncludeRegex: includeRegex,
ChannelType: channelType,
}
h.Backend.Settings[uid] = setting
} }
setting.ExcludeRegex = excludeRegex
setting.IncludeRegex = includeRegex
setting.ChannelType = channelType
if values, e := r.Form["exclude_type"]; e {
setting.ExcludeType = values
}
h.Backend.Settings[uid] = setting
h.Backend.Debug() h.Backend.Debug()

View File

@ -54,6 +54,7 @@ type memoryBackend struct {
type channelSetting struct { type channelSetting struct {
ExcludeRegex string ExcludeRegex string
IncludeRegex string IncludeRegex string
ExcludeType []string
ChannelType string ChannelType string
} }
@ -564,6 +565,37 @@ func (b *memoryBackend) channelAddItemWithMatcher(channel string, item microsub.
b.lock.RUnlock() b.lock.RUnlock()
for channelKey, setting := range settings { for channelKey, setting := range settings {
if len(setting.ExcludeType) > 0 {
for _, v := range setting.ExcludeType {
switch v {
case "repost":
if len(item.RepostOf) > 0 {
return nil
}
break
case "like":
if len(item.LikeOf) > 0 {
return nil
}
break
case "bookmark":
if len(item.BookmarkOf) > 0 {
return nil
}
break
case "reply":
if len(item.InReplyTo) > 0 {
return nil
}
break
case "checkin":
if item.Checkin != nil {
return nil
}
break
}
}
}
if setting.IncludeRegex != "" { if setting.IncludeRegex != "" {
re, err := regexp.Compile(setting.IncludeRegex) re, err := regexp.Compile(setting.IncludeRegex)
if err != nil { if err != nil {

View File

@ -79,6 +79,18 @@
</div> </div>
</div> </div>
</div> </div>
<div class="field">
<label for="exclude_type" class="label">Exclude Types</label>
<div class="control">
<div class="select is-multiple">
<select name="exclude_type" id="exclude_type" multiple>
{{ range $key, $excluded := .ExcludedTypes }}
<option value="{{ $key }}" {{ if $excluded }}selected="selected"{{ end }}>{{ index $.ExcludedTypeNames $key }}</option>
{{ end }}
</select>
</div>
</div>
</div>
<div class="field"> <div class="field">
<div class="control"> <div class="control">
<button type="submit" class="button is-primary">Save</button> <button type="submit" class="button is-primary">Save</button>