diff --git a/.dist/channel.js b/.dist/channel.js index 75d154c..3a2a907 100644 --- a/.dist/channel.js +++ b/.dist/channel.js @@ -9,6 +9,7 @@ import { RoleList } from "./role.js"; import { InfiniteScroller } from "./infiniteScroller.js"; import { SnowFlake } from "./snowflake.js"; import { MarkDown } from "./markdown.js"; +import { Member } from "./member.js"; class Channel extends SnowFlake { editing; type; @@ -677,6 +678,7 @@ class Channel extends SnowFlake { const loading = document.getElementById("loadingdiv"); Channel.regenLoadingMessages(); loading.classList.add("loading"); + this.rendertyping(); await this.putmessages(); await prom; if (id !== Channel.genid) { @@ -687,6 +689,61 @@ class Channel extends SnowFlake { //loading.classList.remove("loading"); document.getElementById("typebox").contentEditable = "" + this.canMessage; } + typingmap = new Map(); + async typingStart(typing) { + const memb = await Member.new(typing.d.member, this.guild); + if (!memb) + return; + if (memb.id === this.localuser.user.id) { + console.log("you is typing"); + return; + } + console.log("user is typing and you should see it"); + this.typingmap.set(memb, Date.now()); + setTimeout(this.rendertyping.bind(this), 10000); + this.rendertyping(); + } + rendertyping() { + const typingtext = document.getElementById("typing"); + let build = ""; + let showing = false; + let i = 0; + const curtime = Date.now() - 5000; + for (const thing of this.typingmap.keys()) { + if (this.typingmap.get(thing) > curtime) { + if (i !== 0) { + build += ", "; + } + i++; + if (thing.nick) { + build += thing.nick; + } + else { + build += thing.user.username; + } + showing = true; + } + else { + this.typingmap.delete(thing); + } + } + if (i > 1) { + build += " are typing"; + } + else { + build += " is typing"; + } + if (this.localuser.channelfocus === this) { + if (showing) { + typingtext.classList.remove("hidden"); + const typingtext2 = document.getElementById("typingtext"); + typingtext2.textContent = build; + } + else { + typingtext.classList.add("hidden"); + } + } + } static regenLoadingMessages() { const loading = document.getElementById("loadingdiv"); loading.innerHTML = ""; diff --git a/.dist/direct.js b/.dist/direct.js index 16b6128..5c6c4ab 100644 --- a/.dist/direct.js +++ b/.dist/direct.js @@ -138,6 +138,7 @@ class Group extends Channel { const loading = document.getElementById("loadingdiv"); Channel.regenLoadingMessages(); loading.classList.add("loading"); + this.rendertyping(); await this.putmessages(); await prom; if (id !== Channel.genid) { diff --git a/.dist/localuser.js b/.dist/localuser.js index c6da5e1..5ebff49 100644 --- a/.dist/localuser.js +++ b/.dist/localuser.js @@ -28,7 +28,6 @@ class Localuser { lookingguild; guildhtml; ws; - typing = new Map(); connectionSucceed = 0; errorBackoff = 0; userMap = new Map(); @@ -787,22 +786,15 @@ class Localuser { } } async typingStart(typing) { - if (this.channelfocus?.id === typing.d.channel_id) { - const guild = this.guildids.get(typing.d.guild_id); - if (!guild) - return; - const memb = await Member.new(typing.d.member, guild); - if (!memb) - return; - if (memb.id === this.user.id) { - console.log("you is typing"); - return; - } - console.log("user is typing and you should see it"); - this.typing.set(memb, Date.now()); - setTimeout(this.rendertyping.bind(this), 10000); - this.rendertyping(); - } + // + const guild = this.guildids.get(typing.d.guild_id); + if (!guild) + return; + const channel = guild.channelids[typing.d.channel_id]; + if (!channel) + return; + channel.typingStart(typing); + //this.typing.set(memb,Date.now()); } updatepfp(file) { const reader = new FileReader(); @@ -848,45 +840,6 @@ class Localuser { body: JSON.stringify(json) }); } - rendertyping() { - const typingtext = document.getElementById("typing"); - let build = ""; - let showing = false; - let i = 0; - const curtime = Date.now() - 5000; - for (const thing of this.typing.keys()) { - if (this.typing.get(thing) > curtime) { - if (i !== 0) { - build += ", "; - } - i++; - if (thing.nick) { - build += thing.nick; - } - else { - build += thing.user.username; - } - showing = true; - } - else { - this.typing.delete(thing); - } - } - if (i > 1) { - build += " are typing"; - } - else { - build += " is typing"; - } - if (showing) { - typingtext.classList.remove("hidden"); - const typingtext2 = document.getElementById("typingtext"); - typingtext2.textContent = build; - } - else { - typingtext.classList.add("hidden"); - } - } async showusersettings() { const settings = new Settings("Settings"); { diff --git a/webpage/channel.ts b/webpage/channel.ts index 2710b54..05178bb 100644 --- a/webpage/channel.ts +++ b/webpage/channel.ts @@ -12,6 +12,7 @@ import{InfiniteScroller}from"./infiniteScroller.js"; import{ SnowFlake }from"./snowflake.js"; import{ channeljson, messageCreateJson, messagejson, readyjson }from"./jsontypes.js"; import{ MarkDown }from"./markdown.js"; +import { Member } from "./member.js"; declare global { interface NotificationOptions { @@ -688,6 +689,7 @@ class Channel extends SnowFlake{ const loading=document.getElementById("loadingdiv") as HTMLDivElement; Channel.regenLoadingMessages(); loading.classList.add("loading"); + this.rendertyping(); await this.putmessages(); await prom; if(id!==Channel.genid){ @@ -699,6 +701,56 @@ class Channel extends SnowFlake{ //loading.classList.remove("loading"); (document.getElementById("typebox") as HTMLDivElement).contentEditable=""+this.canMessage; } + typingmap:Map=new Map(); + async typingStart(typing):Promise{ + const memb=await Member.new(typing.d.member,this.guild); + if(!memb)return; + if(memb.id===this.localuser.user.id){ + console.log("you is typing"); + return; + } + console.log("user is typing and you should see it"); + this.typingmap.set(memb,Date.now()); + setTimeout(this.rendertyping.bind(this),10000); + this.rendertyping(); + } + rendertyping():void{ + const typingtext=document.getElementById("typing") as HTMLDivElement; + let build=""; + let showing=false; + let i=0; + const curtime=Date.now()-5000; + for(const thing of this.typingmap.keys()){ + if(this.typingmap.get(thing) as number>curtime){ + if(i!==0){ + build+=", "; + } + i++; + if(thing.nick){ + build+=thing.nick; + }else{ + build+=thing.user.username; + } + showing=true; + }else{ + this.typingmap.delete(thing); + } + } + if(i>1){ + build+=" are typing"; + }else{ + build+=" is typing"; + } + if(this.localuser.channelfocus===this){ + if(showing){ + typingtext.classList.remove("hidden"); + const typingtext2=document.getElementById("typingtext") as HTMLDivElement; + typingtext2.textContent=build; + }else{ + typingtext.classList.add("hidden"); + } + } + } static regenLoadingMessages(){ const loading=document.getElementById("loadingdiv") as HTMLDivElement; loading.innerHTML=""; diff --git a/webpage/direct.ts b/webpage/direct.ts index 07fc2a6..2eca86e 100644 --- a/webpage/direct.ts +++ b/webpage/direct.ts @@ -143,7 +143,7 @@ class Group extends Channel{ const loading=document.getElementById("loadingdiv") as HTMLDivElement; Channel.regenLoadingMessages(); loading.classList.add("loading"); - + this.rendertyping(); await this.putmessages(); await prom; if(id!==Channel.genid){ diff --git a/webpage/localuser.ts b/webpage/localuser.ts index f5bec14..259e53d 100644 --- a/webpage/localuser.ts +++ b/webpage/localuser.ts @@ -32,7 +32,6 @@ class Localuser{ lookingguild:Guild|null; guildhtml:Map; ws:WebSocket|undefined; - typing:Map=new Map(); connectionSucceed=0; errorBackoff=0; readonly userMap=new Map(); @@ -778,20 +777,13 @@ class Localuser{ } } async typingStart(typing):Promise{ - if(this.channelfocus?.id===typing.d.channel_id){ - const guild=this.guildids.get(typing.d.guild_id); - if(!guild)return; - const memb=await Member.new(typing.d.member,guild); - if(!memb)return; - if(memb.id===this.user.id){ - console.log("you is typing"); - return; - } - console.log("user is typing and you should see it"); - this.typing.set(memb,Date.now()); - setTimeout(this.rendertyping.bind(this),10000); - this.rendertyping(); - } + // + const guild=this.guildids.get(typing.d.guild_id); + if(!guild)return; + const channel=guild.channelids[typing.d.channel_id]; + if(!channel) return; + channel.typingStart(typing); + //this.typing.set(memb,Date.now()); } updatepfp(file:Blob):void{ const reader = new FileReader(); @@ -836,41 +828,6 @@ class Localuser{ body: JSON.stringify(json) }); } - rendertyping():void{ - const typingtext=document.getElementById("typing") as HTMLDivElement; - let build=""; - let showing=false; - let i=0; - const curtime=Date.now()-5000; - for(const thing of this.typing.keys()){ - if(this.typing.get(thing) as number>curtime){ - if(i!==0){ - build+=", "; - } - i++; - if(thing.nick){ - build+=thing.nick; - }else{ - build+=thing.user.username; - } - showing=true; - }else{ - this.typing.delete(thing); - } - } - if(i>1){ - build+=" are typing"; - }else{ - build+=" is typing"; - } - if(showing){ - typingtext.classList.remove("hidden"); - const typingtext2=document.getElementById("typingtext") as HTMLDivElement; - typingtext2.textContent=build; - }else{ - typingtext.classList.add("hidden"); - } - } async showusersettings(){ const settings=new Settings("Settings"); {