ref: 43446595cdf7d6e9908d8f2b9dd2b3cfc577c899
dir: /filtering.go/
package main
import (
"context"
"errors"
"strconv"
"codeberg.org/penny64/hellclient-go-mastodon"
)
func (hc *Hellclient) getFilterID(title string) (ID int, result *mastodon.FilterV2) {
filters, _ := hc.client.GetFiltersV2(context.Background())
for _, filter := range filters {
if filter.Title == title {
ID, _ = strconv.Atoi(string(filter.ID))
return ID, filter
}
}
return
}
func (hc *Hellclient) getFilter(title string) (result *mastodon.FilterV2, err error) {
ID, result := hc.getFilterID(title)
if ID == 0 {
return nil, errors.New("Filter not found")
}
return
}
func (hc *Hellclient) createNewFilter(title string,
filtercontext []string, action string) (result *mastodon.FilterV2, err error) {
filter := &mastodon.FilterV2{
Title: title,
Context: filtercontext,
Action: action,
}
result, err = hc.client.CreateFilterV2(context.Background(), filter)
if err != nil {
return nil, err
}
return
}
func (hc *Hellclient) GetOrCreateFilter(title string,
filtercontext []string, action string) (result *mastodon.FilterV2, err error) {
ID, result := hc.getFilterID(title)
if ID == 0 {
result, err = hc.createNewFilter(title, filtercontext, action)
if err == nil {
ID, _ = strconv.Atoi(string(result.ID))
}
}
if err != nil {
return
}
return
}
func (hc *Hellclient) filterStatus(status *mastodon.Status) (result *mastodon.FilterV2, err error) {
result, err = hc.GetOrCreateFilter("hellclient status filter", []string{"notifications", "public", "thread", "account", "home"}, "hide")
if err != nil {
return
}
result, err = hc.client.FilterAddStatus(context.Background(), status.ID, result)
return
}
func (hc *Hellclient) unfilterStatus(status *mastodon.Status) (result *mastodon.FilterV2, err error) {
result, err = hc.getFilter("hellclient status filter")
if err != nil {
return
}
for _, resultstatus := range result.Statuses {
if resultstatus.Status == status.ID {
result, err = hc.client.FilterRemoveStatus(context.Background(), resultstatus.ID)
return
}
}
return nil, errors.New("Post not filtered")
}