Adds two configurable hotkeys (plus the required code infrastructure to
handle configurable hotkeys) for cycling the active chat tab forward by
one and backwards by one.
After not receiving a message for X seconds (configurable) in the
current tab or any tab with unread mode enabled, the chat will be
hidden. Focus can be returned with return or slash as usual.
Having input focus or hovering the mouse over the chat window "bumps"
it every frame.
Also fixes a bug that prevented focus from being restored to tabs with
input disabled. The chat window will be brought back but the activated
event won't be fully processed.
Co-authored-by: Auri <me@aurieh.me>
- Replace LiteDB database engine with Sqlite
Note: old databases will not be deleted
- Message duplication detection improvements
- Tolerate parse errors in release builds, log them
Shows path to database (click to copy), database size, database log
size, message count.
Also adds a Ctrl+Shift button to wipe the database permanently. This is
performed by clearing the Messages collection and then rebuilding the
database, which brings it down to around 48KB on my machine (even with
many messages).
Adds ExtraChat Linkshell channels to tab input channel selector. These are only by index, not by channel name due to limitations in the ExtraChat IPC API.
Adds ExtraChat Linkshell channels to the channel selector in the chat log window. As these aren't real channels in-game, these are handled by just sending the corresponding `/eclX` command which causes ExtraChat to set a channel override.
Moves the options in the "Chat 2" submenu when right clicking a message
to the parent menu if there are no specific context menu items for the
right clicked payload. This moves the "Copy" button to the main context
menu in the majority of cases and reduces the amount of clicks required
to copy.
Changes the "Copy" button to copy directly to the system clipboard and
adds a notification.
Adds a "Copy content" button beneath the "Copy" button which only copies
the message content (not the sender). If the message doesn't have a
sender, this option does not appear as they function identically in such
cases.
Adds a parsing step when constructing `Message` objects that scans the
message content for anything that looks URL-like, and inserts new
`TextChunk`s into the message content with a URIPayload set.
Hovering over a URL shows an on-hover effect. Clicking a URL opens it in
the default browser. Right clicking shows the hostname, with an option
to open and an option to copy the URL to the clipboard.