shithub: hell

ref: 5e1ec6cb543f4787b86e5c101fd3bb77a2ba113b
dir: /filtering.go/

View raw version
package main

import (
	"context"
	"errors"
	"strconv"

	mastodon "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 {
			// XXX: unused ID?
			ID, _ = strconv.Atoi(string(result.ID))
		}
	}
	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")
}