You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

111 lines
2.7 KiB

package api
import (
"context"
"fmt"
"github.com/RasmusLindroth/go-mastodon"
"github.com/RasmusLindroth/tut/util"
)
type statusToggleFunc func(s *mastodon.Status) (*mastodon.Status, error)
func toggleHelper(s *mastodon.Status, comp bool, on, off statusToggleFunc) (*mastodon.Status, error) {
if s == nil {
return nil, fmt.Errorf("no status")
}
so := s
reblogged := false
if s.Reblog != nil {
s = s.Reblog
reblogged = true
}
var ns *mastodon.Status
var err error
if comp {
ns, err = off(s)
} else {
ns, err = on(s)
}
if err != nil {
return nil, err
}
if reblogged {
so.Reblog = ns
return so, nil
}
return ns, nil
}
func (ac *AccountClient) BoostToggle(s *mastodon.Status) (*mastodon.Status, error) {
ns := util.StatusOrReblog(s)
reblogged := false
if ns.Reblogged != nil {
reblogged = ns.Reblogged.(bool)
}
return toggleHelper(s,
reblogged,
ac.Boost, ac.Unboost,
)
}
func (ac *AccountClient) Boost(s *mastodon.Status) (*mastodon.Status, error) {
return ac.Client.Reblog(context.Background(), s.ID)
}
func (ac *AccountClient) Unboost(s *mastodon.Status) (*mastodon.Status, error) {
return ac.Client.Unreblog(context.Background(), s.ID)
}
func (ac *AccountClient) FavoriteToogle(s *mastodon.Status) (*mastodon.Status, error) {
ns := util.StatusOrReblog(s)
favorited := false
if ns.Favourited != nil {
favorited = ns.Favourited.(bool)
}
return toggleHelper(s,
favorited,
ac.Favorite, ac.Unfavorite,
)
}
func (ac *AccountClient) Favorite(s *mastodon.Status) (*mastodon.Status, error) {
status, err := ac.Client.Favourite(context.Background(), s.ID)
return status, err
}
func (ac *AccountClient) Unfavorite(s *mastodon.Status) (*mastodon.Status, error) {
status, err := ac.Client.Unfavourite(context.Background(), s.ID)
return status, err
}
func (ac *AccountClient) BookmarkToogle(s *mastodon.Status) (*mastodon.Status, error) {
ns := util.StatusOrReblog(s)
bookmarked := false
if ns.Bookmarked != nil {
bookmarked = ns.Bookmarked.(bool)
}
return toggleHelper(s,
bookmarked,
ac.Bookmark, ac.Unbookmark,
)
}
func (ac *AccountClient) Bookmark(s *mastodon.Status) (*mastodon.Status, error) {
status, err := ac.Client.Bookmark(context.Background(), s.ID)
return status, err
}
func (ac *AccountClient) Unbookmark(s *mastodon.Status) (*mastodon.Status, error) {
status, err := ac.Client.Unbookmark(context.Background(), s.ID)
return status, err
}
func (ac *AccountClient) DeleteStatus(s *mastodon.Status) error {
return ac.Client.DeleteStatus(context.Background(), util.StatusOrReblog(s).ID)
}
func (ac *AccountClient) GetStatus(id mastodon.ID) (*mastodon.Status, error) {
return ac.Client.GetStatus(context.Background(), id)
}