فهرست منبع

config: remove buggy prefer* implementation

ayn2op 9 ماه پیش
والد
کامیت
d7e0852897
7فایلهای تغییر یافته به همراه70 افزوده شده و 146 حذف شده
  1. 1 1
      cmd/guilds_tree.go
  2. 14 36
      cmd/message_input.go
  3. 24 22
      cmd/messages_list.go
  4. 8 29
      internal/config/config.toml
  5. 16 28
      internal/config/theme.go
  6. 7 12
      internal/markdown/renderer.go
  7. 0 18
      internal/ui/util.go

+ 1 - 1
cmd/guilds_tree.go

@@ -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, ", ")

+ 14 - 36
cmd/message_input.go

@@ -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)
 }
 

+ 24 - 22
cmd/messages_list.go

@@ -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 member.Nick != "" {
+			name = member.Nick
+		}
 
-		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))
-			}
+		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

+ 8 - 29
internal/config/config.toml

@@ -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

+ 16 - 28
internal/config/theme.go

@@ -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"`
 	}
 )
 

+ 7 - 12
internal/markdown/renderer.go

@@ -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)
 		}

+ 0 - 18
internal/ui/util.go

@@ -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
-}