work on reply jumping and fixed account fixer

This commit is contained in:
MathMan05 2024-07-28 14:53:39 -05:00
parent 7a745a5286
commit 6cea53dabd
12 changed files with 350 additions and 62 deletions

View file

@ -79,7 +79,7 @@ class Channel {
this.infinite = new InfiniteScroller(async function (id, offset) {
const snowflake = SnowFlake.getSnowFlakeFromID(id, Message);
if (offset === 1) {
if (this.idToPrev.get(snowflake)) {
if (this.idToPrev.has(snowflake)) {
return this.idToPrev.get(snowflake)?.id;
}
else {
@ -88,13 +88,25 @@ class Channel {
}
}
else {
return this.idToNext.get(snowflake)?.id;
if (this.idToNext.has(snowflake)) {
return this.idToNext.get(snowflake)?.id;
}
else if (this.lastmessage.id !== id) {
await this.grabAfter(id);
return this.idToNext.get(snowflake)?.id;
}
else {
console.log("at bottom");
}
}
}.bind(this), function (id) {
}.bind(this), async function (id) {
let res;
const promise = new Promise(_ => { res = _; });
const snowflake = SnowFlake.getSnowFlakeFromID(id, Message);
const html = this.messageids.get(snowflake).buildhtml(this.messageids.get(this.idToPrev.get(snowflake)), promise);
if (!snowflake.getObject()) {
await this.grabArround(id);
}
const html = snowflake.getObject().buildhtml(this.messageids.get(this.idToPrev.get(snowflake)), promise);
ids[id] = res;
return html;
}.bind(this), async function (id) {
@ -529,7 +541,7 @@ class Channel {
return;
}
this.makereplybox();
this.buildmessages();
await this.buildmessages();
history.pushState(null, null, "/channels/" + this.guild_id + "/" + this.snowflake);
document.getElementById("channelname").textContent = "#" + this.name;
console.log(this);
@ -573,6 +585,44 @@ class Channel {
}
this.children = build;
}
async grabAfter(id) {
if (id === this.lastmessage.id) {
return;
}
await fetch(this.info.api.toString() + "/channels/" + this.id + "/messages?limit=100&after=" + id, {
headers: this.headers
}).then((j) => { return j.json(); }).then(response => {
let next;
let previd = undefined;
for (const i in response) {
let messager;
if (!next) {
messager = new Message(response[i], this);
}
else {
messager = next;
}
if (response[+i + 1] !== undefined) {
next = new Message(response[+i + 1], this);
}
else {
next = undefined;
console.log("ohno", +i + 1);
}
if (this.messageids.get(messager.snowflake) === undefined) {
this.idToNext.set(messager.snowflake, previd);
this.idToPrev.set(previd, messager.snowflake);
previd = messager.snowflake;
this.messageids.set(messager.snowflake, messager);
}
else {
console.log("How???");
}
}
//out.buildmessages();
});
return;
}
async grabBefore(id) {
if (this.allthewayup) {
return;
@ -614,22 +664,66 @@ class Channel {
});
return;
}
async grabArround(id) {
await fetch(this.info.api.toString() + "/channels/" + this.snowflake + "/messages?around=" + id + "&limit=100", {
headers: this.headers
}).then((j) => { return j.json(); }).then(response => {
let next;
if (response.length === 0) {
this.allthewayup = true;
}
let previd = SnowFlake.getSnowFlakeFromID(id, Message);
for (const i in response) {
let messager;
if (!next) {
messager = new Message(response[i], this);
}
else {
messager = next;
}
if (response[+i + 1] !== undefined) {
next = new Message(response[+i + 1], this);
}
else {
next = undefined;
console.log("ohno", +i + 1);
}
if (this.messageids.get(messager.snowflake) === undefined) {
this.idToNext.set(messager.snowflake, previd);
this.idToPrev.set(previd, messager.snowflake);
previd = messager.snowflake;
this.messageids.set(messager.snowflake, messager);
}
else {
console.log("How???");
}
}
//out.buildmessages();
});
return;
}
buildmessage(message, next) {
const built = message.buildhtml(next);
document.getElementById("messages").prepend(built);
}
buildmessages() {
async buildmessages() {
const messages = document.getElementById("channelw");
messages.innerHTML = "";
let id;
if (this.messageids.get(this.lastreadmessageid)) {
if (this.lastreadmessageid && this.lastreadmessageid.getObject()) {
id = this.lastreadmessageid;
}
else if (this.lastmessage.snowflake) {
id = this.goBackIds(this.lastmessage.snowflake, 50);
console.log("shouldn't");
}
messages.append(this.infinite.getDiv(id.id));
console.log(this.lastreadmessageid, id.id);
messages.append(await this.infinite.getDiv(id.id));
this.infinite.updatestuff();
this.infinite.watchForChange().then(async (_) => {
await new Promise(resolve => setTimeout(resolve, 100));
this.infinite.focus(id.id, false); //if someone could figure out how to make this work correctly without this, that's be great :P
});
}
goBackIds(id, back) {
while (back !== 0) {
@ -763,7 +857,9 @@ class Channel {
}
}
this.guild.unreads();
this.infinite.addedBottom();
if (this === this.localuser.channelfocus) {
this.infinite.addedBottom();
}
if (messagez.author === this.localuser.user) {
return;
}