state: add isReceiptBefore

This commit is contained in:
Simon Ser 2022-02-12 10:21:11 +01:00
parent 5f8cd976e6
commit 2ac7be6218
2 changed files with 18 additions and 8 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, receiptFromMessage, isMessageBeforeReceipt } from "../state.js"; import { SERVER_BUFFER, BufferType, ReceiptType, ServerStatus, Unread, State, getServerName, receiptFromMessage, isReceiptBefore, 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";
@ -144,14 +144,11 @@ function getLatestReceipt(bufferStore, server, type) {
let buffers = bufferStore.list(server); let buffers = bufferStore.list(server);
let last = null; let last = null;
for (let buf of buffers) { for (let buf of buffers) {
if (!buf.receipts || buf.name === "*") { if (buf.name === "*") {
continue; continue;
} }
let receipt = buf.receipts[type]; let receipt = getReceipt(buf, type);
if (!receipt) { if (isReceiptBefore(last, receipt)) {
continue;
}
if (!last || receipt.time > last.time) {
last = receipt; last = receipt;
} }
} }
@ -878,7 +875,7 @@ export default class App extends Component {
let from = lastReceipt; let from = lastReceipt;
let stored = this.bufferStore.get({ name: target.name, server: client.params }); let stored = this.bufferStore.get({ name: target.name, server: client.params });
let readReceipt = getReceipt(stored, ReceiptType.READ); let readReceipt = getReceipt(stored, ReceiptType.READ);
if (readReceipt && readReceipt.time > from.time) { if (isReceiptBefore(from, readReceipt)) {
from = readReceipt; from = readReceipt;
} }

View file

@ -95,6 +95,19 @@ export function receiptFromMessage(msg) {
return { time: msg.tags.time }; return { time: msg.tags.time };
} }
export function isReceiptBefore(a, b) {
if (!b) {
return false;
}
if (!a) {
return true;
}
if (!a.time || !b.time) {
throw new Error("Missing receipt time");
}
return a.time <= b.time;
}
export function isMessageBeforeReceipt(msg, receipt) { export function isMessageBeforeReceipt(msg, receipt) {
if (!receipt) { if (!receipt) {
return false; return false;