|
@@ -8,11 +8,9 @@ import (
|
|
|
|
|
|
|
|
"github.com/ayn2op/discordo/internal/config"
|
|
"github.com/ayn2op/discordo/internal/config"
|
|
|
"github.com/ayn2op/discordo/internal/keyring"
|
|
"github.com/ayn2op/discordo/internal/keyring"
|
|
|
- "github.com/ayn2op/discordo/internal/notifications"
|
|
|
|
|
"github.com/ayn2op/discordo/internal/ui"
|
|
"github.com/ayn2op/discordo/internal/ui"
|
|
|
"github.com/ayn2op/tview"
|
|
"github.com/ayn2op/tview"
|
|
|
"github.com/diamondburned/arikawa/v3/discord"
|
|
"github.com/diamondburned/arikawa/v3/discord"
|
|
|
- "github.com/diamondburned/arikawa/v3/gateway"
|
|
|
|
|
"github.com/diamondburned/ningen/v3"
|
|
"github.com/diamondburned/ningen/v3"
|
|
|
"github.com/diamondburned/ningen/v3/states/read"
|
|
"github.com/diamondburned/ningen/v3/states/read"
|
|
|
"github.com/gdamore/tcell/v3"
|
|
"github.com/gdamore/tcell/v3"
|
|
@@ -253,79 +251,6 @@ func (v *View) onReadUpdate(event *read.UpdateEvent) {
|
|
|
v.app.Draw()
|
|
v.app.Draw()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func (v *View) onReady(r *gateway.ReadyEvent) {
|
|
|
|
|
- dmNode := tview.NewTreeNode("Direct Messages")
|
|
|
|
|
- root := v.guildsTree.
|
|
|
|
|
- GetRoot().
|
|
|
|
|
- ClearChildren().
|
|
|
|
|
- AddChild(dmNode)
|
|
|
|
|
-
|
|
|
|
|
- for _, folder := range r.UserSettings.GuildFolders {
|
|
|
|
|
- if folder.ID == 0 && len(folder.GuildIDs) == 1 {
|
|
|
|
|
- guild, err := v.state.Cabinet.Guild(folder.GuildIDs[0])
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- slog.Error(
|
|
|
|
|
- "failed to get guild from state",
|
|
|
|
|
- "guild_id",
|
|
|
|
|
- folder.GuildIDs[0],
|
|
|
|
|
- "err",
|
|
|
|
|
- err,
|
|
|
|
|
- )
|
|
|
|
|
- continue
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- v.guildsTree.createGuildNode(root, *guild)
|
|
|
|
|
- } else {
|
|
|
|
|
- v.guildsTree.createFolderNode(folder)
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- v.guildsTree.SetCurrentNode(root)
|
|
|
|
|
- v.app.SetFocus(v.guildsTree)
|
|
|
|
|
- v.app.Draw()
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-func (v *View) onMessageCreate(message *gateway.MessageCreateEvent) {
|
|
|
|
|
- selectedChannel := v.SelectedChannel()
|
|
|
|
|
- if selectedChannel != nil && selectedChannel.ID == message.ChannelID {
|
|
|
|
|
- v.removeTyper(message.Author.ID)
|
|
|
|
|
- v.messagesList.drawMessage(v.messagesList, message.Message)
|
|
|
|
|
- v.app.Draw()
|
|
|
|
|
- } else {
|
|
|
|
|
- if err := notifications.Notify(v.state, message, v.cfg); err != nil {
|
|
|
|
|
- slog.Error("failed to notify", "err", err, "channel_id", message.ChannelID, "message_id", message.ID)
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-func (v *View) onMessageUpdate(message *gateway.MessageUpdateEvent) {
|
|
|
|
|
- if selected := v.SelectedChannel(); selected != nil && selected.ID == message.ChannelID {
|
|
|
|
|
- v.onMessageDelete(&gateway.MessageDeleteEvent{ID: message.ID, ChannelID: message.ChannelID, GuildID: message.GuildID})
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-func (v *View) onMessageDelete(message *gateway.MessageDeleteEvent) {
|
|
|
|
|
- if selected := v.SelectedChannel(); selected != nil && selected.ID == message.ChannelID {
|
|
|
|
|
- messages, err := v.state.Cabinet.Messages(message.ChannelID)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- slog.Error("failed to get messages from state", "err", err, "channel_id", message.ChannelID)
|
|
|
|
|
- return
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- v.messagesList.reset()
|
|
|
|
|
- v.messagesList.drawMessages(messages)
|
|
|
|
|
- v.app.Draw()
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-func (v *View) onGuildMembersChunk(event *gateway.GuildMembersChunkEvent) {
|
|
|
|
|
- v.messagesList.setFetchingChunk(false, uint(len(event.Members)))
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-func (v *View) onGuildMemberRemove(event *gateway.GuildMemberRemoveEvent) {
|
|
|
|
|
- v.messageInput.cache.Invalidate(event.GuildID.String()+" "+event.User.Username, v.state.MemberState.SearchLimit)
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
func (v *View) clearTypers() {
|
|
func (v *View) clearTypers() {
|
|
|
v.typersMu.Lock()
|
|
v.typersMu.Lock()
|
|
|
for _, timer := range v.typers {
|
|
for _, timer := range v.typers {
|