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 {
Session session
CurrentChannel microsub.Channel
CurrentSetting channelSetting
CurrentChannel microsub.Channel
CurrentSetting channelSetting
ExcludedTypes map[string]bool
ExcludedTypeNames map[string]string
Channels []microsub.Channel
Feeds []microsub.Feed
@ -348,7 +350,7 @@ func (h *mainHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
} else {
page.CurrentSetting = channelSetting{}
}
// TODO: similar code is found in timeline.go
// FIXME: similar code is found in timeline.go
if page.CurrentSetting.ChannelType == "" {
if v.UID == "notifications" {
page.CurrentSetting.ChannelType = "stream"
@ -356,6 +358,21 @@ func (h *mainHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
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
}
}
@ -629,23 +646,25 @@ func (h *mainHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
defer h.Backend.save()
uid := r.FormValue("uid")
if h.Backend.Settings == nil {
h.Backend.Settings = make(map[string]channelSetting)
}
excludeRegex := r.FormValue("exclude_regex")
includeRegex := r.FormValue("include_regex")
channelType := r.FormValue("type")
if setting, e := h.Backend.Settings[uid]; e {
setting.ExcludeRegex = excludeRegex
setting.IncludeRegex = includeRegex
setting.ChannelType = channelType
h.Backend.Settings[uid] = setting
} else {
setting = channelSetting{
ExcludeRegex: excludeRegex,
IncludeRegex: includeRegex,
ChannelType: channelType,
}
h.Backend.Settings[uid] = setting
setting, e := h.Backend.Settings[uid]
if !e {
setting = channelSetting{}
}
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()

View File

@ -54,6 +54,7 @@ type memoryBackend struct {
type channelSetting struct {
ExcludeRegex string
IncludeRegex string
ExcludeType []string
ChannelType string
}
@ -564,6 +565,37 @@ func (b *memoryBackend) channelAddItemWithMatcher(channel string, item microsub.
b.lock.RUnlock()
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 != "" {
re, err := regexp.Compile(setting.IncludeRegex)
if err != nil {

View File

@ -79,6 +79,18 @@
</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="control">
<button type="submit" class="button is-primary">Save</button>