diff --git a/.dist/channel.js b/.dist/channel.js index 1c9a99b..e38f7f6 100644 --- a/.dist/channel.js +++ b/.dist/channel.js @@ -592,115 +592,74 @@ class Channel { 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; + let previd = SnowFlake.getSnowFlakeFromID(id, Message); for (const i in response) { let messager; - if (!next) { + let willbreak = false; + if (!SnowFlake.hasSnowFlakeFromID(response[i].id, Message)) { messager = new Message(response[i], this); } else { - messager = next; + messager = SnowFlake.getSnowFlakeFromID(response[i].id, Message).getObject(); + willbreak = true; } - 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???"); + this.idToPrev.set(messager.snowflake, previd); + this.idToNext.set(previd, messager.snowflake); + previd = messager.snowflake; + this.messageids.set(messager.snowflake, messager); + if (willbreak) { + break; } } //out.buildmessages(); }); return; } + topid; async grabBefore(id) { - if (this.allthewayup) { + if (this.topid && id === this.topid.id) { return; } await fetch(this.info.api.toString() + "/channels/" + this.snowflake + "/messages?before=" + id + "&limit=100", { headers: this.headers - }).then((j) => { return j.json(); }).then(response => { - let next; - if (response.length === 0) { + }).then((j) => { return j.json(); }).then((response) => { + if (response.length < 100) { this.allthewayup = true; + if (response.length === 0) { + this.topid = SnowFlake.getSnowFlakeFromID(id, Message); + } } let previd = SnowFlake.getSnowFlakeFromID(id, Message); for (const i in response) { let messager; - if (!next) { + let willbreak = false; + if (!SnowFlake.hasSnowFlakeFromID(response[i].id, Message)) { messager = new Message(response[i], this); } else { - messager = next; + console.log("flaky"); + messager = SnowFlake.getSnowFlakeFromID(response[i].id, Message).getObject(); + willbreak = true; } - if (response[+i + 1] !== undefined) { - next = new Message(response[+i + 1], this); + this.idToNext.set(messager.snowflake, previd); + this.idToPrev.set(previd, messager.snowflake); + previd = messager.snowflake; + this.messageids.set(messager.snowflake, messager); + if (+i === response.length - 1 && response.length < 100) { + this.topid = previd; } - 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???"); + if (willbreak) { + break; } } - //out.buildmessages(); }); return; } + /** + * Please dont use this, its not implemented. + **/ 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; + throw new Error("please don't call this, no one has implmented it :P"); } buildmessage(message, next) { const built = message.buildhtml(next); diff --git a/.dist/localuser.js b/.dist/localuser.js index 4fd07f4..7e95b6d 100644 --- a/.dist/localuser.js +++ b/.dist/localuser.js @@ -94,7 +94,6 @@ class Localuser { this.channelfocus = null; } unload() { - console.log("please say this ran"); this.initialized = false; clearInterval(this.wsinterval); this.outoffocus(); @@ -105,7 +104,6 @@ class Localuser { async initwebsocket() { let returny = null; const promise = new Promise((res) => { returny = res; }); - console.warn("info"); this.ws = new WebSocket(this.serverurls.gateway.toString()); this.ws.addEventListener('open', (event) => { console.log('WebSocket connected'); diff --git a/.dist/snowflake.js b/.dist/snowflake.js index 7d38dbd..1e97301 100644 --- a/.dist/snowflake.js +++ b/.dist/snowflake.js @@ -53,6 +53,24 @@ class SnowFlake { return snowflake; } } + static hasSnowFlakeFromID(id, type) { + if (!SnowFlake.SnowFlakes.get(type)) { + return false; + } + const flake = SnowFlake.SnowFlakes.get(type).get(id); + if (flake) { + const flake2 = flake.deref()?.getObject(); + if (flake2) { + return true; + } + else { + return false; + } + } + else { + return false; + } + } getUnixTime() { return Number((BigInt(this.id) >> 22n) + 1420070400000n); } diff --git a/webpage/channel.ts b/webpage/channel.ts index 99ce8e3..a7fb200 100644 --- a/webpage/channel.ts +++ b/webpage/channel.ts @@ -10,7 +10,7 @@ import { Settings, RoleList } from "./settings.js"; import { Role } from "./role.js"; import {InfiniteScroller} from "./infiniteScroller.js"; import { SnowFlake } from "./snowflake.js"; -import { channeljson, readyjson } from "./jsontypes.js"; +import { channeljson, messagejson, readyjson } from "./jsontypes.js"; declare global { interface NotificationOptions { @@ -598,107 +598,75 @@ class Channel{ 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:Message; - let previd:SnowFlake=undefined; + let previd:SnowFlake=SnowFlake.getSnowFlakeFromID(id,Message); for(const i in response){ let messager:Message; - if(!next){ + let willbreak=false + if(!SnowFlake.hasSnowFlakeFromID(response[i].id,Message)){ messager=new Message(response[i],this); }else{ - messager=next; + messager=SnowFlake.getSnowFlakeFromID(response[i].id,Message).getObject(); + willbreak=true; } - 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???") + this.idToPrev.set(messager.snowflake,previd); + this.idToNext.set(previd,messager.snowflake); + previd=messager.snowflake; + this.messageids.set(messager.snowflake,messager); + if(willbreak){ + break; } } //out.buildmessages(); }) return; } + topid:SnowFlake; async grabBefore(id:string){ - if(this.allthewayup){ + if(this.topid&&id===this.topid.id){ return; } await fetch(this.info.api.toString()+"/channels/"+this.snowflake+"/messages?before="+id+"&limit=100",{ headers:this.headers - }).then((j)=>{return j.json()}).then(response=>{ - let next:Message; - if(response.length===0){ + }).then((j)=>{return j.json()}).then((response:messagejson[])=>{ + if(response.length<100){ this.allthewayup=true; + if(response.length===0){ + this.topid=SnowFlake.getSnowFlakeFromID(id,Message); + } } let previd=SnowFlake.getSnowFlakeFromID(id,Message) as SnowFlake; for(const i in response){ let messager:Message; - if(!next){ + let willbreak=false; + if(!SnowFlake.hasSnowFlakeFromID(response[i].id,Message)){ messager=new Message(response[i],this); }else{ - messager=next; + console.log("flaky") + messager=SnowFlake.getSnowFlakeFromID(response[i].id,Message).getObject(); + willbreak=true; } - if(response[+i+1]!==undefined){ - next=new Message(response[+i+1],this); - }else{ - next=undefined; - console.log("ohno",+i+1); + + this.idToNext.set(messager.snowflake,previd); + this.idToPrev.set(previd,messager.snowflake); + previd=messager.snowflake; + this.messageids.set(messager.snowflake,messager); + + if(+i===response.length-1&&response.length<100){ + this.topid=previd; } - 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???") + if(willbreak){ + break; } } - //out.buildmessages(); }) return; } - async grabArround(id:string){ - 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:Message; - if(response.length===0){ - this.allthewayup=true; - } - let previd=SnowFlake.getSnowFlakeFromID(id,Message) as SnowFlake; - for(const i in response){ - let messager:Message; - 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; + /** + * Please dont use this, its not implemented. + **/ + async grabArround(id:string){//currently unused and no plans to use it yet + throw new Error("please don't call this, no one has implmented it :P") } buildmessage(message:Message,next:Message){ const built=message.buildhtml(next); diff --git a/webpage/localuser.ts b/webpage/localuser.ts index 4630c7f..f2e0ea1 100644 --- a/webpage/localuser.ts +++ b/webpage/localuser.ts @@ -100,7 +100,6 @@ class Localuser{ this.channelfocus=null; } unload():void{ - console.log("please say this ran"); this.initialized=false; clearInterval(this.wsinterval); this.outoffocus(); @@ -111,7 +110,6 @@ class Localuser{ async initwebsocket():Promise{ let returny=null const promise=new Promise((res)=>{returny=res}); - console.warn("info"); this.ws = new WebSocket(this.serverurls.gateway.toString()); this.ws.addEventListener('open', (event) => { console.log('WebSocket connected'); diff --git a/webpage/snowflake.ts b/webpage/snowflake.ts index 2686ce9..76c755f 100644 --- a/webpage/snowflake.ts +++ b/webpage/snowflake.ts @@ -53,6 +53,22 @@ class SnowFlake{ return snowflake; } } + static hasSnowFlakeFromID(id:string,type:any){ + if(!SnowFlake.SnowFlakes.get(type)){ + return false; + } + const flake=SnowFlake.SnowFlakes.get(type).get(id); + if(flake){ + const flake2=flake.deref()?.getObject(); + if(flake2){ + return true; + }else{ + return false; + } + }else{ + return false; + } + } getUnixTime():number{ return Number((BigInt(this.id)>>22n)+1420070400000n); }