aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2023-06-08 11:54:16 +0200
committerSimon Ser <contact@emersion.fr>2023-06-08 11:54:16 +0200
commita0ed50a8e20745d66dbc1a3e147544fc8f794833 (patch)
treef528c4c4997bab971ca311586ebf9502274278a9
parent2f627eecad6836ee49821535fb16267ca33b046e (diff)
downloadgamja-a0ed50a8e20745d66dbc1a3e147544fc8f794833.tar.gz
gamja-a0ed50a8e20745d66dbc1a3e147544fc8f794833.zip
Keep closed buffers in store
This retains their delivery receipts. Closes: https://todo.sr.ht/~emersion/gamja/154
-rw-r--r--components/app.js32
-rw-r--r--store.js9
2 files changed, 28 insertions, 13 deletions
diff --git a/components/app.js b/components/app.js
index 5c8cd23..a03684a 100644
--- a/components/app.js
+++ b/components/app.js
@@ -491,13 +491,12 @@ export default class App extends Component {
if (client.caps.enabled.has("draft/chathistory") && stored) {
this.setBufferState({ server: serverID, name }, { unread: stored.unread });
}
- if (!stored) {
- this.bufferStore.put({
- name,
- server: client.params,
- unread: Unread.NONE,
- });
- }
+
+ this.bufferStore.put({
+ name,
+ server: client.params,
+ closed: false,
+ });
}
createBuffer(serverID, name) {
@@ -1029,7 +1028,7 @@ export default class App extends Component {
// Restore opened channel and user buffers
let join = [];
for (let buf of this.bufferStore.list(client.params)) {
- if (buf.name === "*") {
+ if (buf.name === "*" || buf.closed) {
continue;
}
@@ -1167,9 +1166,13 @@ export default class App extends Component {
notif.close();
}
}
+ let unread;
+ let closed = true;
this.setBufferState({ server: serverID, name: target }, (buf) => {
+ closed = false;
+
// Re-compute unread status
- let unread = Unread.NONE;
+ unread = Unread.NONE;
for (let i = buf.messages.length - 1; i >= 0; i--) {
let msg = buf.messages[i];
if (msg.command !== "PRIVMSG" && msg.command !== "NOTICE") {
@@ -1187,14 +1190,15 @@ export default class App extends Component {
unread = Unread.MESSAGE;
}
+ return { unread };
+ }, () => {
this.bufferStore.put({
name: target,
server: client.params,
unread,
+ closed,
receipts: { [ReceiptType.READ]: readReceipt },
});
-
- return { unread };
});
break;
default:
@@ -1484,7 +1488,11 @@ export default class App extends Component {
client.unmonitor(buf.name);
- this.bufferStore.delete({ name: buf.name, server: client.params });
+ this.bufferStore.put({
+ name: buf.name,
+ server: client.params,
+ closed: true,
+ });
break;
}
}
diff --git a/store.js b/store.js
index cfea4ff..781537b 100644
--- a/store.js
+++ b/store.js
@@ -85,7 +85,7 @@ export class Buffer {
let updated = !this.m.has(key);
let prev = this.m.get(key) || {};
- let unread = prev.unread;
+ let unread = prev.unread || Unread.NONE;
if (buf.unread !== undefined && buf.unread !== prev.unread) {
unread = buf.unread;
updated = true;
@@ -107,6 +107,12 @@ export class Buffer {
}
}
+ let closed = prev.closed || false;
+ if (buf.closed !== undefined && buf.closed !== prev.closed) {
+ closed = buf.closed;
+ updated = true;
+ }
+
if (!updated) {
return false;
}
@@ -115,6 +121,7 @@ export class Buffer {
name: buf.name,
unread,
receipts,
+ closed,
server: {
bouncerNetwork: buf.server.bouncerNetwork,
},