config: remove buggy prefer* implementation
This commit is contained in:
parent
3ca86d112d
commit
d7e0852897
7 changed files with 71 additions and 147 deletions
|
|
@ -79,7 +79,7 @@ func (gt *guildsTree) channelToString(channel discord.Channel) string {
|
|||
|
||||
recipients := make([]string, len(channel.DMRecipients))
|
||||
for i, r := range channel.DMRecipients {
|
||||
recipients[i] = ui.PreferredName(r, gt.cfg.Theme)
|
||||
recipients[i] = r.DisplayOrUsername()
|
||||
}
|
||||
|
||||
return strings.Join(recipients, ", ")
|
||||
|
|
|
|||
|
|
@ -381,47 +381,25 @@ func (mi *messageInput) showMentionList(col int) {
|
|||
}
|
||||
|
||||
func (mi *messageInput) addMentionItem(gID discord.GuildID, m *discord.Member) bool {
|
||||
username := m.User.Username
|
||||
if username == "" {
|
||||
return false
|
||||
}
|
||||
dname := ""
|
||||
if mi.cfg.Theme.MentionsList.PreferNicknames {
|
||||
dname = m.Nick
|
||||
}
|
||||
if dname == "" {
|
||||
dname = m.User.DisplayName
|
||||
}
|
||||
if dname != "" {
|
||||
dname = tview.Escape(dname)
|
||||
name := m.User.DisplayOrUsername()
|
||||
if m != nil && m.Nick != "" {
|
||||
name = m.Nick
|
||||
}
|
||||
|
||||
// this is WAY faster than discordState.MemberColor
|
||||
if mi.cfg.Theme.MentionsList.ShowUserColors {
|
||||
if c, ok := state.MemberColor(m, func(id discord.RoleID) *discord.Role {
|
||||
r, _ := discordState.Cabinet.Role(gID, id)
|
||||
return r
|
||||
}); ok {
|
||||
if dname != "" {
|
||||
dname = "[" + c.String() + "]" + dname + "[-:]"
|
||||
} else {
|
||||
username = "[" + c.String() + "]" + username + "[-:]"
|
||||
}
|
||||
}
|
||||
color, ok := state.MemberColor(m, func(id discord.RoleID) *discord.Role {
|
||||
r, _ := discordState.Cabinet.Role(gID, id)
|
||||
return r
|
||||
})
|
||||
if ok {
|
||||
name = fmt.Sprintf("[%s]%s[-]", color, name)
|
||||
}
|
||||
|
||||
if presence, _ := discordState.Cabinet.Presence(gID, m.User.ID); presence == nil || presence.Status == discord.OfflineStatus {
|
||||
if mi.cfg.Theme.MentionsList.ShowUsernames || dname == "" {
|
||||
username = "[::d]" + username + "[::D]"
|
||||
} else {
|
||||
dname = "[::d]" + dname + "[::D]"
|
||||
}
|
||||
name = fmt.Sprintf("[::d]%s[::D]", name)
|
||||
}
|
||||
if dname != "" {
|
||||
if mi.cfg.Theme.MentionsList.ShowUsernames {
|
||||
dname += " (" + username + ")"
|
||||
}
|
||||
username = dname
|
||||
}
|
||||
mi.mentionsList.AddItem(username, m.User.Username, 0, nil)
|
||||
|
||||
mi.mentionsList.AddItem(name, m.User.Username, 0, nil)
|
||||
return mi.mentionsList.GetItemCount() > int(mi.cfg.AutocompleteLimit)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -70,10 +70,14 @@ func (ml *messagesList) drawMsgs(cID discord.ChannelID) {
|
|||
return
|
||||
}
|
||||
|
||||
if app.cfg.Theme.PreferNicknames || app.cfg.Theme.MessagesList.ShowUserColors {
|
||||
if ch, _ := discordState.Cabinet.Channel(cID); ch.GuildID.IsValid() {
|
||||
ml.requestGuildMembers(ch.GuildID, msgs)
|
||||
}
|
||||
channel, err := discordState.Cabinet.Channel(cID)
|
||||
if err != nil {
|
||||
slog.Error("failed to get channel from state", "channel_id", cID, "err", err)
|
||||
return
|
||||
}
|
||||
|
||||
if guildID := channel.GuildID; guildID.IsValid() {
|
||||
ml.requestGuildMembers(guildID, msgs)
|
||||
}
|
||||
|
||||
for _, m := range slices.Backward(msgs) {
|
||||
|
|
@ -143,9 +147,8 @@ func (ml *messagesList) drawTimestamps(ts discord.Timestamp) {
|
|||
}
|
||||
|
||||
func (ml *messagesList) drawAuthor(msg discord.Message) {
|
||||
name := ""
|
||||
style := ml.cfg.Theme.MessagesList.AuthorStyle
|
||||
|
||||
name := msg.Author.DisplayOrUsername()
|
||||
if msg.GuildID.IsValid() {
|
||||
member, err := discordState.Cabinet.Member(msg.GuildID, msg.Author.ID)
|
||||
if err != nil {
|
||||
|
|
@ -153,20 +156,18 @@ func (ml *messagesList) drawAuthor(msg discord.Message) {
|
|||
return
|
||||
}
|
||||
|
||||
name = ui.PreferredMemberName(member, ml.cfg.Theme)
|
||||
|
||||
if app.cfg.Theme.MessagesList.ShowUserColors {
|
||||
color, ok := state.MemberColor(member, func(id discord.RoleID) *discord.Role {
|
||||
r, _ := discordState.Cabinet.Role(msg.GuildID, id)
|
||||
return r
|
||||
})
|
||||
if ok {
|
||||
c := tcell.GetColor(color.String())
|
||||
style = config.NewStyleWrapper(tcell.StyleDefault.Foreground(c))
|
||||
}
|
||||
if member.Nick != "" {
|
||||
name = member.Nick
|
||||
}
|
||||
|
||||
color, ok := state.MemberColor(member, func(id discord.RoleID) *discord.Role {
|
||||
r, _ := discordState.Cabinet.Role(msg.GuildID, id)
|
||||
return r
|
||||
})
|
||||
if ok {
|
||||
c := tcell.GetColor(color.String())
|
||||
style = config.NewStyleWrapper(tcell.StyleDefault.Foreground(c))
|
||||
}
|
||||
} else {
|
||||
name = ui.PreferredName(msg.Author, ml.cfg.Theme)
|
||||
}
|
||||
|
||||
fg, bg, _ := style.Decompose()
|
||||
|
|
@ -498,16 +499,17 @@ func (ml *messagesList) reply(mention bool) {
|
|||
return
|
||||
}
|
||||
|
||||
name := ""
|
||||
name := msg.Author.DisplayOrUsername()
|
||||
if msg.GuildID.IsValid() {
|
||||
member, err := discordState.Cabinet.Member(msg.GuildID, msg.Author.ID)
|
||||
if err != nil {
|
||||
slog.Error("failed to get member from state", "guild_id", msg.GuildID, "member_id", msg.Author.ID, "err", err)
|
||||
return
|
||||
}
|
||||
name = ui.PreferredMemberName(member, ml.cfg.Theme)
|
||||
} else {
|
||||
name = ui.PreferredName(msg.Author, ml.cfg.Theme)
|
||||
|
||||
if member.Nick != "" {
|
||||
name = member.Nick
|
||||
}
|
||||
}
|
||||
|
||||
data := app.messageInput.sendMessageData
|
||||
|
|
|
|||
|
|
@ -102,44 +102,32 @@ down = "Down"
|
|||
# Applies to all
|
||||
# style = { foreground = "", background = "", attributes = "" or [""] }
|
||||
[theme]
|
||||
# prefer_nicknames will show nicknames if possible
|
||||
# This has higher priority than prefer_display_names.
|
||||
prefer_nicknames = true
|
||||
# prefer_display_names will show display names if possible.
|
||||
# This has lower priority than prefer_nicknames.
|
||||
prefer_display_names = false
|
||||
background_color = "default"
|
||||
|
||||
[theme.title]
|
||||
# `"left"`, `"center"`, or `"right"`.
|
||||
alignment = "left"
|
||||
alignment = "left" # `"left"`, `"center"`, or `"right"`.
|
||||
normal_style = { attributes = "dim" }
|
||||
active_style = { attributes = "bold" }
|
||||
|
||||
[theme.border]
|
||||
enabled = true
|
||||
# [top, bottom, left, right]
|
||||
padding = [0, 0, 1, 1]
|
||||
# `"plain"`, `"round"`, `"thick"`, or `"double"`.
|
||||
set = "plain"
|
||||
normal_style = { attributes = "dim" }
|
||||
padding = [0, 0, 1, 1] # [top, bottom, left, right]
|
||||
set = "plain" # `"plain"`, `"round"`, `"thick"`, or `"double"`.
|
||||
normal_style = { attributes = "dim" }
|
||||
active_style = { attributes = "bold" }
|
||||
|
||||
[theme.guilds_tree]
|
||||
auto_expand_folders = true
|
||||
# Give tree-like shape
|
||||
graphics = true
|
||||
# graphics_color = "default"
|
||||
# private_channel_style = { foreground = "default" }
|
||||
# guild_style = { foreground = "default" }
|
||||
# channel_style = { foreground = "default" }
|
||||
graphics_color = "default"
|
||||
private_channel_style = { foreground = "default" }
|
||||
guild_style = { foreground = "default" }
|
||||
channel_style = { foreground = "default" }
|
||||
|
||||
[theme.messages_list]
|
||||
show_user_colors = true
|
||||
|
||||
reply_indicator = ">"
|
||||
forwarded_indicator = "<"
|
||||
|
||||
author_style = { foreground = "aqua" }
|
||||
mention_style = { foreground = "blue" }
|
||||
emoji_style = { foreground = "green" }
|
||||
|
|
@ -147,19 +135,10 @@ url_style = { foreground = "blue" }
|
|||
attachment_style = { foreground = "yellow" }
|
||||
|
||||
[theme.mentions_list]
|
||||
# prefer_nicknames will show the user's nickname instead of displayname (if
|
||||
# the user has one).
|
||||
prefer_nicknames = true
|
||||
# Show usernames next to display/nickname (username will always be shown if the
|
||||
# user did not set a display/nickname in their profile).
|
||||
show_usernames = true
|
||||
show_user_colors = true
|
||||
|
||||
# Note: width and height are capped to the avaliable space
|
||||
# Minimum width
|
||||
# 0 = make the list as wide as possible
|
||||
min_width = 20
|
||||
|
||||
# Maximum height
|
||||
# 0 = make the list as tall as needed
|
||||
max_height = 0
|
||||
|
|
|
|||
|
|
@ -126,10 +126,9 @@ type (
|
|||
}
|
||||
|
||||
GuildsTreeTheme struct {
|
||||
AutoExpandFolders bool `toml:"auto_expand_folders"`
|
||||
|
||||
Graphics bool `toml:"graphics"`
|
||||
GraphicsColor string `toml:"graphics_color"`
|
||||
AutoExpandFolders bool `toml:"auto_expand_folders"`
|
||||
Graphics bool `toml:"graphics"`
|
||||
GraphicsColor string `toml:"graphics_color"`
|
||||
|
||||
PrivateChannelStyle StyleWrapper `toml:"private_channel_style"`
|
||||
GuildStyle StyleWrapper `toml:"guild_style"`
|
||||
|
|
@ -137,38 +136,27 @@ type (
|
|||
}
|
||||
|
||||
MessagesListTheme struct {
|
||||
ShowUserColors bool `toml:"show_user_colors"`
|
||||
|
||||
ReplyIndicator string `toml:"reply_indicator"`
|
||||
ForwardedIndicator string `toml:"forwarded_indicator"`
|
||||
|
||||
AuthorStyle StyleWrapper `toml:"author_style"`
|
||||
MentionStyle StyleWrapper `toml:"mention_style"`
|
||||
EmojiStyle StyleWrapper `toml:"emoji_style"`
|
||||
URLStyle StyleWrapper `toml:"url_style"`
|
||||
AttachmentStyle StyleWrapper `toml:"attachment_style"`
|
||||
ReplyIndicator string `toml:"reply_indicator"`
|
||||
ForwardedIndicator string `toml:"forwarded_indicator"`
|
||||
AuthorStyle StyleWrapper `toml:"author_style"`
|
||||
MentionStyle StyleWrapper `toml:"mention_style"`
|
||||
EmojiStyle StyleWrapper `toml:"emoji_style"`
|
||||
URLStyle StyleWrapper `toml:"url_style"`
|
||||
AttachmentStyle StyleWrapper `toml:"attachment_style"`
|
||||
}
|
||||
|
||||
MentionsListTheme struct {
|
||||
PreferNicknames bool `toml:"prefer_nicknames"`
|
||||
ShowUsernames bool `toml:"show_usernames"`
|
||||
ShowUserColors bool `toml:"show_user_colors"`
|
||||
|
||||
MinWidth uint `toml:"min_width"`
|
||||
MaxHeight uint `toml:"max_height"`
|
||||
}
|
||||
|
||||
Theme struct {
|
||||
PreferNicknames bool `toml:"prefer_nicknames"`
|
||||
PreferDisplayNames bool `toml:"prefer_display_names"`
|
||||
BackgroundColor string `toml:"background_color"`
|
||||
|
||||
Title TitleTheme `toml:"title"`
|
||||
Border BorderTheme `toml:"border"`
|
||||
|
||||
GuildsTree GuildsTreeTheme `toml:"guilds_tree"`
|
||||
MessagesList MessagesListTheme `toml:"messages_list"`
|
||||
MentionsList MentionsListTheme `toml:"mentions_list"`
|
||||
BackgroundColor string `toml:"background_color"`
|
||||
Title TitleTheme `toml:"title"`
|
||||
Border BorderTheme `toml:"border"`
|
||||
GuildsTree GuildsTreeTheme `toml:"guilds_tree"`
|
||||
MessagesList MessagesListTheme `toml:"messages_list"`
|
||||
MentionsList MentionsListTheme `toml:"mentions_list"`
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ func (r *renderer) Render(w io.Writer, source []byte, node ast.Node) error {
|
|||
case *discordmd.Inline:
|
||||
r.renderInline(w, node, entering)
|
||||
case *discordmd.Mention:
|
||||
r.renderMention(w, node, entering, theme.PreferNicknames, theme.PreferDisplayNames, theme.MessagesList.MentionStyle.Style)
|
||||
r.renderMention(w, node, entering, theme.MessagesList.MentionStyle.Style)
|
||||
case *discordmd.Emoji:
|
||||
r.renderEmoji(w, node, entering, theme.MessagesList.EmojiStyle.Style)
|
||||
}
|
||||
|
|
@ -190,7 +190,7 @@ func (r *renderer) renderInline(w io.Writer, node *discordmd.Inline, entering bo
|
|||
}
|
||||
}
|
||||
|
||||
func (r *renderer) renderMention(w io.Writer, node *discordmd.Mention, entering, preferNicknames, preferDisplayNames bool, style tcell.Style) {
|
||||
func (r *renderer) renderMention(w io.Writer, node *discordmd.Mention, entering bool, style tcell.Style) {
|
||||
if entering {
|
||||
fg, bg, _ := style.Decompose()
|
||||
_, _ = fmt.Fprintf(w, "[%s:%s:b]", fg, bg)
|
||||
|
|
@ -199,17 +199,12 @@ func (r *renderer) renderMention(w io.Writer, node *discordmd.Mention, entering,
|
|||
case node.Channel != nil:
|
||||
io.WriteString(w, "#"+node.Channel.Name)
|
||||
case node.GuildUser != nil:
|
||||
username := ""
|
||||
if preferNicknames && node.GuildUser.Member != nil {
|
||||
username = node.GuildUser.Member.Nick
|
||||
name := node.GuildUser.DisplayOrUsername()
|
||||
if member := node.GuildUser.Member; member != nil && member.Nick != "" {
|
||||
name = member.Nick
|
||||
}
|
||||
if username == "" && !preferDisplayNames {
|
||||
username = node.GuildUser.DisplayName
|
||||
}
|
||||
if username == "" {
|
||||
username = node.GuildUser.Username
|
||||
}
|
||||
io.WriteString(w, "@"+username)
|
||||
|
||||
io.WriteString(w, "@"+name)
|
||||
case node.GuildRole != nil:
|
||||
io.WriteString(w, "@"+node.GuildRole.Name)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ package ui
|
|||
import (
|
||||
"github.com/ayn2op/discordo/internal/config"
|
||||
"github.com/ayn2op/tview"
|
||||
"github.com/diamondburned/arikawa/v3/discord"
|
||||
)
|
||||
|
||||
// ConfigureBox configures the provided box according to the provided theme.
|
||||
|
|
@ -42,20 +41,3 @@ func Centered(p tview.Primitive, width, height int) tview.Primitive {
|
|||
SetRows(0, height, 0).
|
||||
AddItem(p, 1, 1, 1, 1, 0, 0, true)
|
||||
}
|
||||
|
||||
func PreferredMemberName(m *discord.Member, theme config.Theme) string {
|
||||
if theme.PreferNicknames && m.Nick != "" {
|
||||
return m.Nick
|
||||
}
|
||||
if theme.PreferDisplayNames && m.User.DisplayName != "" {
|
||||
return m.User.DisplayName
|
||||
}
|
||||
return m.User.Username
|
||||
}
|
||||
|
||||
func PreferredName(u discord.User, theme config.Theme) string {
|
||||
if theme.PreferDisplayNames && u.DisplayName != "" {
|
||||
return u.DisplayName
|
||||
}
|
||||
return u.Username
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue