diff --git a/cmd/eksterd/http.go b/cmd/eksterd/http.go index fe77489..f97874f 100644 --- a/cmd/eksterd/http.go +++ b/cmd/eksterd/http.go @@ -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 } } diff --git a/cmd/eksterd/memory.go b/cmd/eksterd/memory.go index 9e5164b..466b7ee 100644 --- a/cmd/eksterd/memory.go +++ b/cmd/eksterd/memory.go @@ -565,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 { diff --git a/templates/channel.html b/templates/channel.html index 95927a0..5ecc5ba 100644 --- a/templates/channel.html +++ b/templates/channel.html @@ -84,11 +84,9 @@