From 0b7726819d7940ed67575fd4e82ef938d7138eaa Mon Sep 17 00:00:00 2001 From: sitting33 Date: Thu, 25 Apr 2024 16:47:53 +0200 Subject: [PATCH] Show number of highlights in window title Co-authored-by: Simon Ser Closes: https://todo.sr.ht/~emersion/gamja/134 --- components/app.js | 26 ++++++++++++++++++++++++-- keybindings.js | 2 ++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/components/app.js b/components/app.js index 045e3d1..29039c5 100644 --- a/components/app.js +++ b/components/app.js @@ -493,7 +493,9 @@ export default class App extends Component { let stored = this.bufferStore.get({ name, server: client.params }); if (client.caps.enabled.has("draft/chathistory") && stored) { - this.setBufferState({ server: serverID, name }, { unread: stored.unread }); + this.setBufferState({ server: serverID, name }, { unread: stored.unread }, () => { + this.updateDocumentTitle(); + }); } this.bufferStore.put({ @@ -603,6 +605,8 @@ export default class App extends Component { this.sendReadReceipt(client, stored); } } + + this.updateDocumentTitle(); }); } @@ -617,6 +621,13 @@ export default class App extends Component { bouncerNetwork = this.state.bouncerNetworks.get(server.bouncerNetID); } + let numUnread = 0; + for (let buffer of this.state.buffers.values()) { + if (Unread.compare(buffer.unread, Unread.HIGHLIGHT) >= 0) { + numUnread++; + } + } + let parts = []; if (buf && buf.type !== BufferType.SERVER) { parts.push(buf.name); @@ -626,7 +637,13 @@ export default class App extends Component { } parts.push(this.baseTitle); - document.title = parts.join(" · "); + let title = ""; + if (numUnread > 0) { + title = `(${numUnread}) `; + } + title += parts.join(" · "); + + document.title = title; } prepareChatMessage(serverID, msg) { @@ -774,6 +791,10 @@ export default class App extends Component { this.sendReadReceipt(client, stored); } return { unread, prevReadReceipt }; + }, () => { + if (msgUnread === Unread.HIGHLIGHT) { + this.updateDocumentTitle(); + } }); } @@ -1250,6 +1271,7 @@ export default class App extends Component { closed, receipts: { [ReceiptType.READ]: readReceipt }, }); + this.updateDocumentTitle(); }); break; default: diff --git a/keybindings.js b/keybindings.js index c8c4984..814ff37 100644 --- a/keybindings.js +++ b/keybindings.js @@ -40,6 +40,8 @@ export const keybindings = [ }); }); return { buffers }; + }, () => { + app.updateDocumentTitle(); }); }, },