Implement chathistory support

This commit is contained in:
Simon Ser
2020-06-29 09:06:47 +02:00
parent 8809fdcd6a
commit c9b07efc9c
4 changed files with 136 additions and 16 deletions

View File

@@ -2,7 +2,15 @@ import * as irc from "./irc.js";
// Static list of capabilities that are always requested when supported by the
// server
const permanentCaps = ["message-tags", "server-time", "multi-prefix", "away-notify", "echo-message"];
const permanentCaps = [
"away-notify",
"batch",
"draft/chathistory",
"echo-message",
"message-tags",
"multi-prefix",
"server-time",
];
export default class Client extends EventTarget {
ws = null;
@@ -18,6 +26,7 @@ export default class Client extends EventTarget {
registered = false;
availableCaps = {};
enabledCaps = {};
batches = new Map();
constructor(params) {
super();
@@ -65,6 +74,15 @@ export default class Client extends EventTarget {
var msg = irc.parseMessage(event.data);
console.log("Received:", msg);
var msgBatch = null;
if (msg.tags["batch"]) {
msgBatch = this.batches.get(msg.tags["batch"]);
if (msgBatch) {
msgBatch.messages.push(msg);
}
}
var deleteBatch = null;
switch (msg.command) {
case irc.RPL_WELCOME:
if (this.params.saslPlain && this.availableCaps["sasl"] === undefined) {
@@ -115,11 +133,33 @@ export default class Client extends EventTarget {
this.nick = newNick;
}
break;
case "BATCH":
var enter = msg.params[0].startsWith("+");
var name = msg.params[0].slice(1);
if (enter) {
var batch = {
name,
type: msg.params[1],
params: msg.params.slice(2),
parent: msgBatch,
messages: [],
};
this.batches.set(name, batch);
} else {
deleteBatch = name;
}
break;
}
this.dispatchEvent(new CustomEvent("message", {
detail: { message: msg },
detail: { message: msg, batch: msgBatch },
}));
// Delete after firing the message event so that handlers can access
// the batch
if (deleteBatch) {
this.batches.delete(name);
}
}
addAvailableCaps(s) {

View File

@@ -256,3 +256,15 @@ export function isError(cmd) {
return false;
}
}
export function formatDate(date) {
// ISO 8601
var YYYY = date.getUTCFullYear().toString().padStart(4, "0");
var MM = (date.getUTCMonth() + 1).toString().padStart(2, "0");
var DD = date.getUTCDate().toString().padStart(2, "0");
var hh = date.getUTCHours().toString().padStart(2, "0");
var mm = date.getUTCMinutes().toString().padStart(2, "0");
var ss = date.getUTCSeconds().toString().padStart(2, "0");
var sss = date.getUTCMilliseconds().toString().padStart(3, "0");
return `${YYYY}-${MM}-${DD}T${hh}:${mm}:${ss}.${sss}Z`;
}