From 9b79a25062efafd3cb7aef53d60d1876a0895a4f Mon Sep 17 00:00:00 2001 From: ivankazakov3344 Date: Mon, 20 Jan 2025 19:35:57 +0300 Subject: [PATCH 1/5] Add session timer functionality --- bun.lockb | Bin 386636 -> 386636 bytes src/components/ChatList.vue | 14 +++++---- src/components/UserBar.vue | 3 ++ src/store/sessionTimer.ts | 59 ++++++++++++++++++++++++++++++++++++ src/store/voiceStore.ts | 5 +++ tailwind.config.js | 3 ++ 6 files changed, 78 insertions(+), 6 deletions(-) create mode 100644 src/store/sessionTimer.ts diff --git a/bun.lockb b/bun.lockb index a6455de42fa5bd8e8a72e8651630e3de563667d1..a0bcbcd76fc76d60c6cd2dd8d7177665d26a3d31 100644 GIT binary patch delta 5098 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 M#;b6L@m^o?e=R?aQ2+n{ delta 5120 zcmZ|S2UHbT9>?){To6%F5di@^YY>nYMOUm~>@miTy&-muaZS;UsCgC;H8xbd8cW30 zSfa*`YX?g<5p-1)1siC}p0k@6lZ`QDv){k|&GF=%ox|tMeZRRgb7$u9?tcmjf(i

ZV${DU?m$X%?(mZL(kGm@FY=GRivgLHpI#eszgl zn$^*)9+`(`bv3I`W}akKoq8HJAoR4ZQ^voIm-cURM{ei5aW?`B&BJ;7m zIE1^BZfe9P8E!Z#YZk8E8apvsad>c@niuu=`^<~P&YNzO-ft*rD)cMtf6M9nzbd1)NF(vy&YMsW+OFg zPZmd3k@YAt{+uK%{gPfa82%vW1@g5UbfD z&H9tg<-6K~^xQSf6~HxgBQ&A67w@ zJncA=_UgxpMhtj9pEUX}vwH_^QqX=jtkWBiHChxI&I$*kWw6BaEG zMiy@(8QQyOEDe^5nk}T=l5Dh1J;$$$+{#M2X)*1akfpL_OK4BwuyWg~XttF0I6alG zW?5wNHJ3YCRkLNZU)8LdX3NRs|4{B)bx)q4+>sUNs0WlUo@Cj$ptq|gnLOi_7_3>S z9MHxWnC0#xd_kwPDV#|Dhu+6gGFh5PH`W_)O#4M^mP2-2`^9Lsk?e$Kv1D?#zv86s z8?XH~k?kg%$ph$6Xu1aMV1qoOHmqf*ZP;mZ3XOksv_66)Hc9hC#AueR*$%QSvgNj{ z(1g2ISfBHzXN25@9@=9c?VB7~vX?a5Py4Q9cGh`*1G8=Rd6Vfr!q)X{8O&OSattRl z8_HVl^l|*1@yoqRC6oJh0w0rYU_Dy*JxTj4Sq|&5n&r_xO}3Hsc+K)@pLvp1b0!e- z=bS=*1-t!%dCoP*UcA7CW#m4(V1ir;GDaCghVFlrwv17-Ox7~SV$I~(3na_!c+sS| z0s{Fi1fdp!5rR;A?2-u`U4!NpZsS&L!*=X|R3=i1Nae8`d$1S#aR3LAi$nMu4nr!E zqxgx-`We6ASGc@w;$;)kV+{9pEXLy=xf?Sv3$rl?>BztYyoQMwhgUHSspyH9ZO&!> z8}IWNq{4XsDQBd7d0eirmU2YO4=Fc1A*F?s65f#V!3R<+NNpgsfXw|e*UQ{4bGc02 zGF8jeEK_j+WZso|R_4`UFTN}xHlfI**tJEbi9s_$RL6I!aN5i#UrDIELe>z(ey!MfkuA9x!;s&G``z zv6cZXz(Op-Vl2T@WMP?y<93$QSb=P;gvBbX#(P+UH}MuGV+#I)w=orIn1<Rn1B>?MmyBE8O5ev zM}CDJ`GE~a2;_&gHe?omA5sCxueSV1%Y-cxbQPXjH3Z^oKHs+y*Gz|&GKI>NDO2Q8 z$h4S;e4N5*oW;lJ1(_oIpsy_}=G&h{GZ`HqGi66~LKk$!2F{j)Y^;PuIx>)n1$Y-- z&=uX#9WSB>UP4d2j9wVY$VXv2SNNfE?89rOQKfjkbkC!iw+*>&>h}GW6U(nr6j?N4 z@CBa>I6x@dYU3B$@=NQ&L)t&!5w750xP{v|4{!Q-dfWBa&2v5nd5XC>WDBpGpz&L1 zZpAii$7GH=m311X;cXt;RHR`VzUC?2M?JPRMi4?#3H~@npH6J=4w+|OKo}Z$+KDBm zq2CxTL&{Z|%ZFp6%_=ee1EdK5gi(Hqb0~n!#DmcvyYLZqV-NOXAJ$*lr6#s*AxT~Ks0bhY$mgpl#~t{fjEgA89ms?(leJ9FQyiOCY9jrn zbAdB36SFYe9w;^8F_G*V1(|nco}I)6y^c5V8YZF>I-|R>UzM6bA9+!c7n2xU=Z5KS z-@0Mq5-T$-UsOXe$GIywz0?_ZcsBmz{n+P4^gu7PL87s@ZkWIZ{JzNOO)UwqB!*>ypA_88Kbd>p>$^53CZ}L zI}wE@C`AN5!9kQ^E7oBWQqdcI&=8l=)r(h-LK@A{0&&R0E^Nd~jKv`IL^4_-)XUDk zWg^}3J|TnZ#rjWp1-;P+ebEp7F#rQG2vVyIfz&4{7zU|JhGPUqVicq z-YYiZJ&EUO_n00V%dxx+kHRoW;XZ`>xk<49QVhbE9AmNkNG`Dr%1mgm zC)>T?fx~YRXP=G?JU#zO_RT{+_TvEdU@zhsUo2$2eHmjp6|DI?!~*N UsGiJRvSjWsp1C`W*M{={0YoK{hX4Qo diff --git a/src/components/ChatList.vue b/src/components/ChatList.vue index 8bb7e7c..38b22e2 100644 --- a/src/components/ChatList.vue +++ b/src/components/ChatList.vue @@ -190,12 +190,13 @@ import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Button } from '@/components/ui/button' import { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group' -import { ref } from 'vue'; +import { ref, onBeforeUnmount } from 'vue'; import { logger } from '@/lib/logger'; import { useWindow } from '@/store/windowStore'; import { usePoolStore } from '@/store/poolStore'; import { useVoice } from '@/store/voiceStore'; import ArgonAvatar from './ArgonAvatar.vue'; +import { useSessionTimer } from '@/store/sessionTimer' const channelType = ref("" as "Text" | "Voice" | "Announcement"); const channelName = ref(""); @@ -205,6 +206,7 @@ const servers = useServerStore(); const windows = useWindow(); const pool = usePoolStore(); const voice = useVoice(); +const sessionTimerStore = useSessionTimer() const addChannel = () => { @@ -220,17 +222,12 @@ const addChannel = () => { async function channelSelect(channelId: string) { logger.info(`Do action for channel '${channelId}'`); - const channel = await pool.getChannel(channelId); if (!channel) return; if (channel.ChannelType == "Voice") { await voice.connectToChannel(channelId); } - - - - /*const channel = servers.getDetailsOfChannel(channelId); if (!channel) return; @@ -242,12 +239,17 @@ async function channelSelect(channelId: string) { function channelDelete(channelId: string) { servers.deleteChannel(channelId); + sessionTimerStore.stopTimer() } const connectToChannel = (channelId: string) => { //servers.connectTo(channelId); }; + +onBeforeUnmount(() => { + sessionTimerStore.stopTimer() +})