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

@ -592,115 +592,74 @@ class Channel {
await fetch(this.info.api.toString() + "/channels/" + this.id + "/messages?limit=100&after=" + id, { await fetch(this.info.api.toString() + "/channels/" + this.id + "/messages?limit=100&after=" + id, {
headers: this.headers headers: this.headers
}).then((j) => { return j.json(); }).then(response => { }).then((j) => { return j.json(); }).then(response => {
let next; let previd = SnowFlake.getSnowFlakeFromID(id, Message);
let previd = undefined;
for (const i in response) { for (const i in response) {
let messager; let messager;
if (!next) { let willbreak = false;
if (!SnowFlake.hasSnowFlakeFromID(response[i].id, Message)) {
messager = new Message(response[i], this); messager = new Message(response[i], this);
} }
else { else {
messager = next; messager = SnowFlake.getSnowFlakeFromID(response[i].id, Message).getObject();
willbreak = true;
} }
if (response[+i + 1] !== undefined) { this.idToPrev.set(messager.snowflake, previd);
next = new Message(response[+i + 1], this); this.idToNext.set(previd, messager.snowflake);
} previd = messager.snowflake;
else { this.messageids.set(messager.snowflake, messager);
next = undefined; if (willbreak) {
console.log("ohno", +i + 1); break;
}
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(); //out.buildmessages();
}); });
return; return;
} }
topid;
async grabBefore(id) { async grabBefore(id) {
if (this.allthewayup) { if (this.topid && id === this.topid.id) {
return; return;
} }
await fetch(this.info.api.toString() + "/channels/" + this.snowflake + "/messages?before=" + id + "&limit=100", { await fetch(this.info.api.toString() + "/channels/" + this.snowflake + "/messages?before=" + id + "&limit=100", {
headers: this.headers headers: this.headers
}).then((j) => { return j.json(); }).then(response => { }).then((j) => { return j.json(); }).then((response) => {
let next; if (response.length < 100) {
if (response.length === 0) {
this.allthewayup = true; this.allthewayup = true;
if (response.length === 0) {
this.topid = SnowFlake.getSnowFlakeFromID(id, Message);
}
} }
let previd = SnowFlake.getSnowFlakeFromID(id, Message); let previd = SnowFlake.getSnowFlakeFromID(id, Message);
for (const i in response) { for (const i in response) {
let messager; let messager;
if (!next) { let willbreak = false;
if (!SnowFlake.hasSnowFlakeFromID(response[i].id, Message)) {
messager = new Message(response[i], this); messager = new Message(response[i], this);
} }
else { else {
messager = next; console.log("flaky");
messager = SnowFlake.getSnowFlakeFromID(response[i].id, Message).getObject();
willbreak = true;
} }
if (response[+i + 1] !== undefined) { this.idToNext.set(messager.snowflake, previd);
next = new Message(response[+i + 1], this); 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 { if (willbreak) {
next = undefined; break;
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; return;
} }
/**
* Please dont use this, its not implemented.
**/
async grabArround(id) { async grabArround(id) {
await fetch(this.info.api.toString() + "/channels/" + this.snowflake + "/messages?around=" + id + "&limit=100", { throw new Error("please don't call this, no one has implmented it :P");
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) { buildmessage(message, next) {
const built = message.buildhtml(next); const built = message.buildhtml(next);

View file

@ -94,7 +94,6 @@ class Localuser {
this.channelfocus = null; this.channelfocus = null;
} }
unload() { unload() {
console.log("please say this ran");
this.initialized = false; this.initialized = false;
clearInterval(this.wsinterval); clearInterval(this.wsinterval);
this.outoffocus(); this.outoffocus();
@ -105,7 +104,6 @@ class Localuser {
async initwebsocket() { async initwebsocket() {
let returny = null; let returny = null;
const promise = new Promise((res) => { returny = res; }); const promise = new Promise((res) => { returny = res; });
console.warn("info");
this.ws = new WebSocket(this.serverurls.gateway.toString()); this.ws = new WebSocket(this.serverurls.gateway.toString());
this.ws.addEventListener('open', (event) => { this.ws.addEventListener('open', (event) => {
console.log('WebSocket connected'); console.log('WebSocket connected');

View file

@ -53,6 +53,24 @@ class SnowFlake {
return 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() { getUnixTime() {
return Number((BigInt(this.id) >> 22n) + 1420070400000n); return Number((BigInt(this.id) >> 22n) + 1420070400000n);
} }

View file

@ -10,7 +10,7 @@ import { Settings, RoleList } from "./settings.js";
import { Role } from "./role.js"; import { Role } from "./role.js";
import {InfiniteScroller} from "./infiniteScroller.js"; import {InfiniteScroller} from "./infiniteScroller.js";
import { SnowFlake } from "./snowflake.js"; import { SnowFlake } from "./snowflake.js";
import { channeljson, readyjson } from "./jsontypes.js"; import { channeljson, messagejson, readyjson } from "./jsontypes.js";
declare global { declare global {
interface NotificationOptions { interface NotificationOptions {
@ -598,107 +598,75 @@ class Channel{
await fetch(this.info.api.toString()+"/channels/"+this.id+"/messages?limit=100&after="+id,{ await fetch(this.info.api.toString()+"/channels/"+this.id+"/messages?limit=100&after="+id,{
headers:this.headers headers:this.headers
}).then((j)=>{return j.json()}).then(response=>{ }).then((j)=>{return j.json()}).then(response=>{
let next:Message; let previd:SnowFlake<Message>=SnowFlake.getSnowFlakeFromID(id,Message);
let previd:SnowFlake<Message>=undefined;
for(const i in response){ for(const i in response){
let messager:Message; let messager:Message;
if(!next){ let willbreak=false
if(!SnowFlake.hasSnowFlakeFromID(response[i].id,Message)){
messager=new Message(response[i],this); messager=new Message(response[i],this);
}else{ }else{
messager=next; messager=SnowFlake.getSnowFlakeFromID(response[i].id,Message).getObject();
willbreak=true;
} }
if(response[+i+1]!==undefined){ this.idToPrev.set(messager.snowflake,previd);
next=new Message(response[+i+1],this); this.idToNext.set(previd,messager.snowflake);
}else{ previd=messager.snowflake;
next=undefined; this.messageids.set(messager.snowflake,messager);
console.log("ohno",+i+1); if(willbreak){
} break;
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(); //out.buildmessages();
}) })
return; return;
} }
topid:SnowFlake<Message>;
async grabBefore(id:string){ async grabBefore(id:string){
if(this.allthewayup){ if(this.topid&&id===this.topid.id){
return; return;
} }
await fetch(this.info.api.toString()+"/channels/"+this.snowflake+"/messages?before="+id+"&limit=100",{ await fetch(this.info.api.toString()+"/channels/"+this.snowflake+"/messages?before="+id+"&limit=100",{
headers:this.headers headers:this.headers
}).then((j)=>{return j.json()}).then(response=>{ }).then((j)=>{return j.json()}).then((response:messagejson[])=>{
let next:Message; if(response.length<100){
if(response.length===0){
this.allthewayup=true; this.allthewayup=true;
if(response.length===0){
this.topid=SnowFlake.getSnowFlakeFromID(id,Message);
}
} }
let previd=SnowFlake.getSnowFlakeFromID(id,Message) as SnowFlake<Message>; let previd=SnowFlake.getSnowFlakeFromID(id,Message) as SnowFlake<Message>;
for(const i in response){ for(const i in response){
let messager:Message; let messager:Message;
if(!next){ let willbreak=false;
if(!SnowFlake.hasSnowFlakeFromID(response[i].id,Message)){
messager=new Message(response[i],this); messager=new Message(response[i],this);
}else{ }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);
}else{ this.idToPrev.set(previd,messager.snowflake);
next=undefined; previd=messager.snowflake;
console.log("ohno",+i+1); this.messageids.set(messager.snowflake,messager);
if(+i===response.length-1&&response.length<100){
this.topid=previd;
} }
if(this.messageids.get(messager.snowflake)===undefined){ if(willbreak){
this.idToNext.set(messager.snowflake,previd); break;
this.idToPrev.set(previd,messager.snowflake);
previd=messager.snowflake;
this.messageids.set(messager.snowflake,messager);
}else{
console.log("How???")
} }
} }
//out.buildmessages();
}) })
return; return;
} }
async grabArround(id:string){ /**
await fetch(this.info.api.toString()+"/channels/"+this.snowflake+"/messages?around="+id+"&limit=100",{ * Please dont use this, its not implemented.
headers:this.headers **/
}).then((j)=>{return j.json()}).then(response=>{ async grabArround(id:string){//currently unused and no plans to use it yet
let next:Message; throw new Error("please don't call this, no one has implmented it :P")
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;
} }
buildmessage(message:Message,next:Message){ buildmessage(message:Message,next:Message){
const built=message.buildhtml(next); const built=message.buildhtml(next);

View file

@ -100,7 +100,6 @@ class Localuser{
this.channelfocus=null; this.channelfocus=null;
} }
unload():void{ unload():void{
console.log("please say this ran");
this.initialized=false; this.initialized=false;
clearInterval(this.wsinterval); clearInterval(this.wsinterval);
this.outoffocus(); this.outoffocus();
@ -111,7 +110,6 @@ class Localuser{
async initwebsocket():Promise<void>{ async initwebsocket():Promise<void>{
let returny=null let returny=null
const promise=new Promise((res)=>{returny=res}); const promise=new Promise((res)=>{returny=res});
console.warn("info");
this.ws = new WebSocket(this.serverurls.gateway.toString()); this.ws = new WebSocket(this.serverurls.gateway.toString());
this.ws.addEventListener('open', (event) => { this.ws.addEventListener('open', (event) => {
console.log('WebSocket connected'); console.log('WebSocket connected');

View file

@ -53,6 +53,22 @@ class SnowFlake<x extends WeakKey>{
return 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{ getUnixTime():number{
return Number((BigInt(this.id)>>22n)+1420070400000n); return Number((BigInt(this.id)>>22n)+1420070400000n);
} }