fix jumping far past

This commit is contained in:
MathMan05 2024-07-29 14:11:36 -05:00
parent 9e56d00573
commit f553e1418d
6 changed files with 108 additions and 151 deletions

View file

@ -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<Message>=undefined;
let previd:SnowFlake<Message>=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<Message>;
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<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;
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<Message>;
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);