Implement chathistory support
This commit is contained in:
@@ -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) {
|
||||
|
||||
12
lib/irc.js
12
lib/irc.js
@@ -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`;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user