keybindings: fix error on alt+h

Fixes the following JS error:

    TypeError: e.setReceipt is not a function
This commit is contained in:
Simon Ser 2022-02-12 10:05:58 +01:00
parent fbc42b6dab
commit 5f8cd976e6
3 changed files with 19 additions and 17 deletions

View file

@ -16,7 +16,7 @@ import ScrollManager from "./scroll-manager.js";
import Dialog from "./dialog.js"; import Dialog from "./dialog.js";
import { html, Component, createRef } from "../lib/index.js"; import { html, Component, createRef } from "../lib/index.js";
import { strip as stripANSI } from "../lib/ansi.js"; import { strip as stripANSI } from "../lib/ansi.js";
import { SERVER_BUFFER, BufferType, ReceiptType, ServerStatus, Unread, State, getServerName, isMessageBeforeReceipt } from "../state.js"; import { SERVER_BUFFER, BufferType, ReceiptType, ServerStatus, Unread, State, getServerName, receiptFromMessage, isMessageBeforeReceipt } from "../state.js";
import commands from "../commands.js"; import commands from "../commands.js";
import { setup as setupKeybindings } from "../keybindings.js"; import { setup as setupKeybindings } from "../keybindings.js";
import * as store from "../store.js"; import * as store from "../store.js";
@ -133,16 +133,6 @@ function showNotification(title, options) {
} }
} }
function receiptFromMessage(msg) {
// At this point all messages are supposed to have a time tag.
// App.addMessage ensures this is the case even if the server doesn't
// support server-time.
if (!msg.tags.time) {
throw new Error("Missing time message tag");
}
return { time: msg.tags.time };
}
function getReceipt(stored, type) { function getReceipt(stored, type) {
if (!stored || !stored.receipts) { if (!stored || !stored.receipts) {
return null; return null;

View file

@ -1,4 +1,4 @@
import { ReceiptType, Unread, BufferType, SERVER_BUFFER } from "./state.js"; import { ReceiptType, Unread, BufferType, SERVER_BUFFER, receiptFromMessage } from "./state.js";
function getSiblingBuffer(buffers, bufID, delta) { function getSiblingBuffer(buffers, bufID, delta) {
let bufList = Array.from(buffers.values()); let bufList = Array.from(buffers.values());
@ -19,22 +19,24 @@ export const keybindings = [
app.setState((state) => { app.setState((state) => {
let buffers = new Map(); let buffers = new Map();
state.buffers.forEach((buf) => { state.buffers.forEach((buf) => {
if (buf.messages.length > 0) {
let lastMsg = buf.messages[buf.messages.length - 1];
app.setReceipt(buf.name, ReceiptType.READ, lastMsg);
}
buffers.set(buf.id, { buffers.set(buf.id, {
...buf, ...buf,
unread: Unread.NONE, unread: Unread.NONE,
prevReadReceipt: null, prevReadReceipt: null,
}); });
let receipts = {};
if (buf.messages.length > 0) {
let lastMsg = buf.messages[buf.messages.length - 1];
receipts[ReceiptType.READ] = receiptFromMessage(lastMsg);
}
let client = app.clients.get(buf.server); let client = app.clients.get(buf.server);
app.bufferStore.put({ app.bufferStore.put({
name: buf.name, name: buf.name,
server: client.params, server: client.params,
unread: Unread.NONE, unread: Unread.NONE,
receipts,
}); });
}); });
return { buffers }; return { buffers };

View file

@ -85,6 +85,16 @@ export function getServerName(server, bouncerNetwork) {
} }
} }
export function receiptFromMessage(msg) {
// At this point all messages are supposed to have a time tag.
// App.addMessage ensures this is the case even if the server doesn't
// support server-time.
if (!msg.tags.time) {
throw new Error("Missing time message tag");
}
return { time: msg.tags.time };
}
export function isMessageBeforeReceipt(msg, receipt) { export function isMessageBeforeReceipt(msg, receipt) {
if (!receipt) { if (!receipt) {
return false; return false;