fix jumping far past
This commit is contained in:
parent
9e56d00573
commit
f553e1418d
6 changed files with 108 additions and 151 deletions
|
@ -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);
|
||||||
}
|
|
||||||
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;
|
previd = messager.snowflake;
|
||||||
this.messageids.set(messager.snowflake, messager);
|
this.messageids.set(messager.snowflake, messager);
|
||||||
}
|
if (willbreak) {
|
||||||
else {
|
break;
|
||||||
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) {
|
|
||||||
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.idToNext.set(messager.snowflake, previd);
|
||||||
this.idToPrev.set(previd, messager.snowflake);
|
this.idToPrev.set(previd, messager.snowflake);
|
||||||
previd = messager.snowflake;
|
previd = messager.snowflake;
|
||||||
this.messageids.set(messager.snowflake, messager);
|
this.messageids.set(messager.snowflake, messager);
|
||||||
|
if (+i === response.length - 1 && response.length < 100) {
|
||||||
|
this.topid = previd;
|
||||||
}
|
}
|
||||||
else {
|
if (willbreak) {
|
||||||
console.log("How???");
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//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);
|
||||||
|
|
|
@ -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');
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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{
|
|
||||||
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;
|
previd=messager.snowflake;
|
||||||
this.messageids.set(messager.snowflake,messager);
|
this.messageids.set(messager.snowflake,messager);
|
||||||
}else{
|
if(willbreak){
|
||||||
console.log("How???")
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//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);
|
|
||||||
}else{
|
|
||||||
next=undefined;
|
|
||||||
console.log("ohno",+i+1);
|
|
||||||
}
|
|
||||||
if(this.messageids.get(messager.snowflake)===undefined){
|
|
||||||
this.idToNext.set(messager.snowflake,previd);
|
this.idToNext.set(messager.snowflake,previd);
|
||||||
this.idToPrev.set(previd,messager.snowflake);
|
this.idToPrev.set(previd,messager.snowflake);
|
||||||
previd=messager.snowflake;
|
previd=messager.snowflake;
|
||||||
this.messageids.set(messager.snowflake,messager);
|
this.messageids.set(messager.snowflake,messager);
|
||||||
}else{
|
|
||||||
console.log("How???")
|
if(+i===response.length-1&&response.length<100){
|
||||||
|
this.topid=previd;
|
||||||
|
}
|
||||||
|
if(willbreak){
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//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);
|
||||||
|
|
|
@ -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');
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue