DIM

An instant messenger with whisper history

File Details

DIM-1.10.0.zip

  • R
  • Apr 27, 2026
  • 95.01 KB
  • 0
  • 12.0.5
  • Retail

File Name

DIM-1.10.0.zip

Supported Versions

  • 12.0.5

1.10.0 - 2026-04-27

Recent Whispers — open offline BN friends, window-title swap

  • Resolves bnetID for offline friends — new ResolveBNetIDByTag walks C_BattleNet.GetFriendAccountInfo over the full roster when BNet_GetBNetIDAccount (online-only) misses. BNSendWhisper accepts offline IDs, so DIM no longer blocks opening a recents tab or sending to an offline BN friend. Removes the is offline notice from OpenRecent and History:StartWhisperFromHistory.
  • StartWhisper keys BN intent off the battleTag — passing an accountTag is enough to mark the tab as BN even when bnetID is nil at request time. CreateTab and RefreshBNTabs lazy-resolve the bnetID.
  • Window title swaps to "Recent Whispers" when no tabs are open (replaces the in-panel subtitle), back to "Whispers" when tabs are present.

Recent Whispers — robustness fixes

  • Panel reparented to widget.frame with explicit insets and a raised frame level. Removed the dependency on AceGUI's content-area layout (which sat under a hidden TabGroup and could collapse to zero, making the window look closed when the last tab was removed).
  • Scroll-child width tracks the viewport via OnSizeChanged. Previously the inner content frame had a fixed 1×1 size, so row buttons anchored TOPLEFT/TOPRIGHT could collapse to zero width on first render.
  • Third fallback source: DIMChatLogGetRecentEntries now folds chat-log keys into the row list (via last.t for the timestamp and last.bn for BN detection), so partners that exist only in the chat log show up even before any DIM tab has been opened for them.
  • /dim recents — diagnostic dump of DIMHistoryMeta / DIMHistory / DIMChatLog counts plus per-partner metadata, and the live panel's shown/width/height. For when the list still ends up empty.

Tagline visual hierarchy

  • Realm reads as metadata, not part of the name — the -Realm suffix flips from class-darkened to a neutral gray (ff8a8a8a). Previously the dim class color blended into the bright name (Cal-windfuryCalwindfury to the eye). The hue change provides a clean visual break.
  • Race/class recedes — switched from full class color to darkenHex(classHex). Class identity stays recognizable; the segment stops competing with the partner's name.
  • Quieter accent colors — guild tag drops from saturated 40ff40 to muted 6ba56b; zone drops from 80b0ff to softer 7896c0. Both stay readable but no longer pull the eye.
  • Smaller presence badge, plus desaturated state colors (5fa86b / c4994a / c26060 / 7a7a7a). Same four states, lower decibels.

Recent Whispers panel

  • Empty state replaces auto-hide — when the last tab closes, the window stays open and renders a "Recent Whispers" list instead of disappearing. Same panel renders when the window is opened from the minimap with no active tabs.
  • Tab opens count as "recent"CreateTab now seeds historyMeta[key].lastTs = time() (and .isBN) on first creation, so any tab you open registers in the list — even before any message is exchanged. Closed tabs are inherently retained because historyMeta is a SavedVariable, so dismissing a tab doesn't drop it from the list.
  • Sourced from historyMeta + history — partners are pulled from ChatIM.historyMeta (with ChatIM.history as a fallback for legacy entries) and sorted by lastTs descending.
  • Click to reopen — left-click reopens the conversation. Character whispers route through ChatIM:StartWhisper(name); BN entries (keys with #) resolve via BNet_GetBNetIDAccountC_BattleNet.GetAccountInfoByIDStartWhisper(charName, bnetID, battleTag). Offline BN friends print the same is offline notice as the history browser.
  • Inline presence + relative time — each row shows the friend-presence badge (when applicable), class-colored Name-Realm or BattleTag, and a right-aligned Ns / Nm / Nh / Nd since the last whisper.

Tab right-click menu

  • Right-clicking a conversation tab now opens a context menu instead of immediately closing the tab. Options: Close, Close others, Close all (the latter two only when more than one tab is open). Closing remains one click away — accidental tab loss while reaching for the next tab is the prior gripe this fixes.
  • Middle-click closes the tab — preserves the muscle-memory one-click close that right-click used to provide, mirroring the browser-tab convention.

Friend presence in tagline

  • Online/offline badge — when the partner is on your friends list, the tagline leads with a colored plus Online / Offline / AFK / DND. Green for online, gray for offline, amber for AFK, red for DND.
  • BNet conversations — presence pulled from C_BattleNet.GetAccountInfoByID(bnetID) (gameAccountInfo.isOnline, isAFK, isDND). All BNet whispers qualify since BN whisper requires an existing account friendship.
  • Character conversations — presence pulled from C_FriendList.GetFriendInfo(partner). Tries the full Name-Realm key first, then the bare name (same-realm friends are stored without a realm suffix). No badge if the partner isn't on your character friends list.
  • Live updates — registers FRIENDLIST_UPDATE (coalesced to one refresh per 500ms) and threads a tagline refresh through the existing BN_FRIEND_INFO_CHANGED path so the active tab's badge stays current as friends come online or change AFK/DND.
  • Friend list priming — calls C_FriendList.ShowFriends() once on enable so server-backed friend data is populated before the first whisper arrives.