feat: render pinned messages (#430)
Co-authored-by: Thomas Baag <b2ag@users.noreply.github.com> Co-authored-by: Ayyan <119342035+ayn2op@users.noreply.github.com> Co-authored-by: ayn2op <ayn2op@gmail.com>
This commit is contained in:
parent
3999756947
commit
6e694458d7
2 changed files with 31 additions and 9 deletions
|
|
@ -80,7 +80,21 @@ func (mt *MessagesText) reset() {
|
|||
mt.Highlight()
|
||||
}
|
||||
|
||||
// Region tags are square brackets that contain a region ID in double quotes
|
||||
// https://pkg.go.dev/github.com/rivo/tview#hdr-Regions_and_Highlights
|
||||
func (mt *MessagesText) startRegion(msgID discord.MessageID) {
|
||||
fmt.Fprintf(mt, `["%s"]`, msgID)
|
||||
}
|
||||
|
||||
// Tags with no region ID ([""]) don't start new regions. They can therefore be used to mark the end of a region.
|
||||
func (mt *MessagesText) endRegion() {
|
||||
fmt.Fprint(mt, `[""]`)
|
||||
}
|
||||
|
||||
func (mt *MessagesText) createMessage(m discord.Message) {
|
||||
mt.startRegion(m.ID)
|
||||
defer mt.endRegion()
|
||||
|
||||
if cfg.HideBlockedUsers {
|
||||
isBlocked := discordState.UserIsBlocked(m.Author.ID)
|
||||
if isBlocked {
|
||||
|
|
@ -90,11 +104,9 @@ func (mt *MessagesText) createMessage(m discord.Message) {
|
|||
}
|
||||
|
||||
switch m.Type {
|
||||
case discord.ChannelPinnedMessage:
|
||||
fmt.Fprint(mt, "[" + cfg.Theme.MessagesText.ContentColor + "]" + m.Author.Username + " pinned a message" + "[-:-:-]")
|
||||
case discord.DefaultMessage, discord.InlinedReplyMessage:
|
||||
// Region tags are square brackets that contain a region ID in double quotes
|
||||
// https://pkg.go.dev/github.com/rivo/tview#hdr-Regions_and_Highlights
|
||||
fmt.Fprintf(mt, `["%s"]`, m.ID)
|
||||
|
||||
if m.ReferencedMessage != nil {
|
||||
mt.createHeader(mt, *m.ReferencedMessage, true)
|
||||
mt.createBody(mt, *m.ReferencedMessage, true)
|
||||
|
|
@ -105,11 +117,11 @@ func (mt *MessagesText) createMessage(m discord.Message) {
|
|||
mt.createHeader(mt, m, false)
|
||||
mt.createBody(mt, m, false)
|
||||
mt.createFooter(mt, m)
|
||||
|
||||
// Tags with no region ID ([""]) don't start new regions. They can therefore be used to mark the end of a region.
|
||||
fmt.Fprint(mt, `[""]`)
|
||||
fmt.Fprintln(mt)
|
||||
default:
|
||||
mt.createHeader(mt, m, false)
|
||||
}
|
||||
|
||||
fmt.Fprintln(mt)
|
||||
}
|
||||
|
||||
func (mt *MessagesText) createHeader(w io.Writer, m discord.Message, isReply bool) {
|
||||
|
|
@ -166,7 +178,7 @@ func (mt *MessagesText) getSelectedMessage() (*discord.Message, error) {
|
|||
|
||||
func (mt *MessagesText) onInputCapture(event *tcell.EventKey) *tcell.EventKey {
|
||||
switch event.Name() {
|
||||
case cfg.Keys.SelectPrevious, cfg.Keys.SelectNext, cfg.Keys.SelectFirst, cfg.Keys.SelectLast, cfg.Keys.MessagesText.SelectReply:
|
||||
case cfg.Keys.SelectPrevious, cfg.Keys.SelectNext, cfg.Keys.SelectFirst, cfg.Keys.SelectLast, cfg.Keys.MessagesText.SelectReply, cfg.Keys.MessagesText.SelectPin:
|
||||
mt._select(event.Name())
|
||||
return nil
|
||||
case cfg.Keys.MessagesText.Yank:
|
||||
|
|
@ -235,6 +247,14 @@ func (mt *MessagesText) _select(name string) {
|
|||
}
|
||||
}
|
||||
}
|
||||
case cfg.Keys.MessagesText.SelectPin:
|
||||
if ref := ms[mt.selectedMessage].Reference; ref != nil {
|
||||
for i, m := range ms {
|
||||
if ref.MessageID == m.ID {
|
||||
mt.selectedMessage = i
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mt.Highlight(ms[mt.selectedMessage].ID.String())
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ type (
|
|||
|
||||
MessagesTextKeys struct {
|
||||
SelectReply string `toml:"select_reply"`
|
||||
SelectPin string `toml:"select_pin"`
|
||||
Reply string `toml:"reply"`
|
||||
ReplyMention string `toml:"reply_mention"`
|
||||
|
||||
|
|
@ -60,6 +61,7 @@ func defaultKeys() Keys {
|
|||
|
||||
MessagesText: MessagesTextKeys{
|
||||
SelectReply: "Rune[s]",
|
||||
SelectPin: "Rune[p]",
|
||||
|
||||
Reply: "Rune[r]",
|
||||
ReplyMention: "Rune[R]",
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue