shithub: hell

ref: fe8e263ce4b63f537ede902c98f20557dd54e610
dir: /filtering.go/

View raw version
package main

import (
	"context"
	"strconv"
	"errors"

	"github.com/mattn/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"}, "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")
}