fix jumping far past
This commit is contained in:
parent
9e56d00573
commit
f553e1418d
6 changed files with 108 additions and 151 deletions
111
.dist/channel.js
111
.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);
|
||||
|
|
|
@ -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');
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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<void>{
|
||||
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');
|
||||
|
|
|
@ -53,6 +53,22 @@ class SnowFlake<x extends WeakKey>{
|
|||
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);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue