cchat-discord/internal/discord/session/guild/folder/folder.go

86 lines
2.0 KiB
Go
Raw Normal View History

2020-09-08 04:44:09 +00:00
package folder
import (
2021-03-13 11:49:23 +00:00
"context"
2020-09-08 04:44:09 +00:00
"strconv"
"strings"
2020-12-20 05:44:26 +00:00
"github.com/diamondburned/arikawa/v2/gateway"
2020-09-08 04:44:09 +00:00
"github.com/diamondburned/cchat"
2021-03-15 04:30:05 +00:00
"github.com/diamondburned/cchat-discord/internal/discord/session/guild"
"github.com/diamondburned/cchat-discord/internal/discord/state"
2020-10-07 01:53:15 +00:00
"github.com/diamondburned/cchat-discord/internal/segments/colored"
2020-09-08 04:44:09 +00:00
"github.com/diamondburned/cchat/text"
2020-10-07 01:53:15 +00:00
"github.com/diamondburned/cchat/utils/empty"
2020-09-08 04:44:09 +00:00
)
type GuildFolder struct {
2020-10-07 01:53:15 +00:00
empty.Server
2020-09-08 04:44:09 +00:00
gateway.GuildFolder
state *state.Instance
}
2020-10-07 01:53:15 +00:00
func New(s *state.Instance, gf gateway.GuildFolder) cchat.Server {
2020-09-08 04:44:09 +00:00
// Name should never be empty.
if gf.Name == "" {
var names = make([]string, 0, len(gf.GuildIDs))
for _, id := range gf.GuildIDs {
2020-12-20 05:44:26 +00:00
g, err := s.Cabinet.Guild(id)
if err == nil {
2020-09-08 04:44:09 +00:00
names = append(names, g.Name)
}
}
gf.Name = strings.Join(names, ", ")
}
return &GuildFolder{
GuildFolder: gf,
state: s,
}
}
func (gf *GuildFolder) ID() cchat.ID {
return strconv.FormatInt(int64(gf.GuildFolder.ID), 10)
}
2021-03-13 11:49:23 +00:00
func (gf *GuildFolder) Name(ctx context.Context, l cchat.LabelContainer) (func(), error) {
2020-09-08 04:44:09 +00:00
var name = text.Rich{
Content: gf.GuildFolder.Name,
}
if gf.GuildFolder.Color > 0 {
name.Segments = []text.Segment{
2020-10-07 01:53:15 +00:00
colored.New(len(name.Content), gf.GuildFolder.Color.Uint32()),
2020-09-08 04:44:09 +00:00
}
}
2021-03-13 11:49:23 +00:00
// TODO: add folder updater from setting update events.
return func() {}, nil
2020-09-08 04:44:09 +00:00
}
2021-03-18 21:27:24 +00:00
func (gf *GuildFolder) Columnate() bool { return false }
2021-03-18 17:12:31 +00:00
2020-09-08 04:44:09 +00:00
// IsLister returns true.
2020-10-07 01:53:15 +00:00
func (gf *GuildFolder) AsLister() cchat.Lister { return gf }
2020-09-08 04:44:09 +00:00
2021-03-13 11:49:23 +00:00
func (gf *GuildFolder) Servers(container cchat.ServersContainer) (func(), error) {
2020-09-08 04:44:09 +00:00
var servers = make([]cchat.Server, 0, len(gf.GuildIDs))
for _, id := range gf.GuildIDs {
2021-01-06 05:02:54 +00:00
g, err := gf.state.Cabinet.Guild(id)
2020-09-08 04:44:09 +00:00
if err != nil {
continue
}
servers = append(servers, guild.New(gf.state, g))
}
container.SetServers(servers)
2021-03-13 11:49:23 +00:00
// Return an empty callback. We're lazily redoing the whole list when a
// guild moves for now.
return func() {}, nil
2020-09-08 04:44:09 +00:00
}