From 8165b74e437e5fe8b711a91fd9d98a46b8231eb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A5=D0=B0=D0=BB=D0=B8=D0=BC=D0=BE=D0=B2=20=D0=A0=D1=83?= =?UTF-8?q?=D1=81=D1=82=D0=B0=D0=BC?= Date: Tue, 14 Apr 2026 13:55:01 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=B3=D0=B8=D1=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../8.5/executionHistory/executionHistory.bin | Bin 6479814 -> 6479814 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .../.gradle/8.5/fileHashes/fileHashes.bin | Bin 432532 -> 433732 bytes .../.gradle/8.5/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../8.5/fileHashes/resourceHashesCache.bin | Bin 206185 -> 209143 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .../buildOutputCleanup/outputFiles.bin | Bin 1167011 -> 1167335 bytes .../data/repository/AuthRepositoryImpl.kt | 8 +++++ .../auth/domain/repository/AuthRepository.kt | 1 + .../auth/presentation/AuthViewModel.kt | 14 ++++++++ .../data/remote/signalr/ChatHubClient.kt | 29 ++++++++++++--- .../data/repository/ChatRepositoryImpl.kt | 14 ++++++-- client-mobile/chats/domain/model/Message.kt | 2 +- .../chats/domain/repository/ChatRepository.kt | 7 +++- .../chat_detail/ChatDetailViewModel.kt | 33 ++++++++++++++++-- .../presentation/components/MessageBubble.kt | 24 ++++++++++--- 16 files changed, 117 insertions(+), 15 deletions(-) diff --git a/client-mobile/.gradle/8.5/executionHistory/executionHistory.bin b/client-mobile/.gradle/8.5/executionHistory/executionHistory.bin index 42f6e7502bf43c49d0c4da38eb3b5993eae0f203..59a5b84a6939fc6fb8c8ee349fb6ccb05389678c 100644 GIT binary patch delta 50466 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 diff --git a/client-mobile/.gradle/8.5/executionHistory/executionHistory.lock b/client-mobile/.gradle/8.5/executionHistory/executionHistory.lock index 8f603573df909d5ba14e53f7bcb0aef4505a13d8..0c88c82e52029819342dfca52ba3eedccc0958d8 100644 GIT binary patch literal 17 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�_^4goeOyk1=V zEO^E!=J+KLEe#_2(!bV6w<$JW;q5qI=dJ$>PQRDR)Y68$iGu zd>Yw>>xjZ*7^Fl3cp*3e49CYw zg7XU~zQc$FF zz5(vTrF8M34_;9_oWfQ7=zKp>xRj!2TiHw{!g~_Io{Bp~JOmm+Il!xiN06ppcsk!H zvy+gGgN2k0iyh!^f=l|cBWbYEfL`3X>^V{@1-d$LI#GHBtR6{4(U9lE>l`Tn@|fLP zZ0|%-xq>$Ve5SCJ!Fh0rMAK4yN$p2*OS2Xfqi7ns#N}y@`@wr?NTX3yPzBI!6q#Qv zjs-l+j zkF8@IQ>Vc1d(!wyu!U+|4~rwMVh;a>W4lcxS^QF`ko9FMi_iGNh{Dy_?un#e4P+3& zShO@&~WIlcRm98qDratfVphohl!MooF&h9zAdfT`O zucb#t(thweI=666N(-Esked^qld=2PA9b6`Q>1X0s-#YB^9g*WtJ^zI?XPwzRkZ3# z)__YMb@$IkPa6CPe8D|w;2zqWj-akhSC8%!9yR_+*R1`S=Hn;yY5t@$#-Nz|;6mA8 z73%%w;bGZ!L3Veax;0v*TQkSUYCldy_|z-hMLJ2-7r^QnXu<3?8z%Q_d90jS%6(<= zKy$jzCt^nrYSTO>)b90Z$b(PS-eCZKhVSguXV>mfptO&vgvMjzjbPS(;hEy z5J};C>;lPYQ9wtL7zK0$IW;K&lM}CX{7Webw+K8oi$qIQk$&J+2?xr_k!Xo3@)1+f zL`AIO#|5cO&4#Cu;`k=&CIn6sy)%lMVlrr&JDIk#Bv$7j~EZuNogSrLY?Sr45qIs`;j7SnG zw-`~V$IFV%gSJmvM#!9?s>`&chi~XoP|@6zt2Oi-=~CE=Vf&lLH&ZjvX49zn8jTc9 zH;f98sPUCVsZu@RQj8jJ7|5^n{+}fbvo?t`j0lCmO(IkH06vib?uH8m5Fa3NzA1tJ znn~wGDvrTPlA8r%MdP~<5IigSgXtV#>KI&1C-uqjiGbc3Tr&g*=k1XM@XXU! z9Lem-Aj|5qwtGy~)`{~S%X<{mnQFZ)5qLsN&qsf_hj|r;jl$QKYO>T{5}*J>oi1Npux)COxMRaIZr|uXY}H~44Yyg#S+t}3q5lmky0!~)|FOg@ z{c(GnW*#$J)jrEs$o>aL;spDfe*WlvgZNfGAKy7K*&?srsn}|g#3y)`sn$9>v~=1Z zWKmdcmA!KJ(nUHvBgDxSw%7obveh-9Tb4ThUy6FiIs3cEGs@jMF*u_9#AUIo z=a_SH@;<@55!l~X=i{LL0;W8`x)PrZifM=qYrq4nhd;A_5p2NIPFklvCo1YHWPiqq zq|!rtGM$%g)xzo5L1xz)z3pCTeHV|?#T+Vsy$lzU;uA>=A7Ph-hiXUryq)dW`%aB8 z(`>VPT}q?9$@xVietRfc^ZB8=`@gKU!M~fJc}o5S-Q zY{l1dMCmaldfYp))zw1O6Sb|O#}jq3_z)L||$+))3~XxhdW)A$8)7u>XQ418OQ1kCdK>=R>}@k3^qq@oOH; z7YVkmq7jEWWrd41eyghrS_1gYcV!igSRG1{@stg}mJVqgiY{QngHKac#Ep6eg+VCU zw5n#fqMjkVs-{aBLs31=hjNN8aW3brd8Cf*C*_bnz=d&bp{SpRze9v9eENkOV;aEA z4xpGHVR~mAfZE8^ivd(%ANVfAe<6|>oZQ)!Z_+@GI4&vXjGJ(+Za^lcdWo0&R|F+q zTWvFh(zy-VK?H6>cNyU4*tAeEgd*OASee~os1$J$gB!3x23KT|8H%D6hmq(FNFPiR zH=wMX*#C5@T38~C5!qii42=POU2urPI(^9O)9{Jd*#BL9L^ux3BN_Yxp#-pSPc!H) zHoZ8!52sR=wwjWcWm{yT^hFploYW-3PXy3`1f4LnaBH~cq@t=Ja)bsyAC2FMj<8is zk8{~*L#@VeC`hwabbv?T6GBDy5Q1coBm?g-3c3y5goBZ1s8m0Pkd5zS0zLC2{L*HY#T&}}Vc?ydN^j0iUt-5O6o^^mnzQy=r61J*i< zf;UMbK)Y_UU1ioo4;|Tc8+LM(>wK#EMu*BLT8+TPI!aEoS`D5IRtcXrRB^mCtFW2G z?s!YqX>8zXxW=*TYUg&x=JpEtag{34tmUyu=s+)K8tLnDrHsU?_nVn(OzpEj9_=^k z{_gYRp>uBeO0ooeT!-V>c+iAn_Oozzfu@LI$XkV5lpgCe_(6fcFvI=dY=O89;M>G4 zBB-@VUMT1_CqCNc6`^Th@6)=X7gvka{O__wrFV1N-J5|H{kIIpwV`C@zu#UghP!Ye3-t?c z*VJY>%zVzmnnX_=o?u30Q$zUx^Rp?^IexF;EVHlUM;x)cykja?l$@x|_Ry999%tjZ zofdw+FO=Y8J9=1pf~csoyq|ZkA8grKg-RPYNamH#}uw4f}+9EhjCiDG%wh$uYR>s}}-2cLm1CV=~LHRd{MpJckgZ9RF@_gNx~Z3x8PTIHon7z zQ4L%~eFR+Jq7!`8TZ8&%E7t!scSB3RMgA?%ldO-?Gr-X9_RePtD%bq5Cu7K=zP1xD zJe((M2K-JcZb#pWIZC$76ffs}rK$1%aQ^9C!%OdJ$={tPkx%Z?$`mN4ZYBbxk^S#;5yeh89+RB2A}Z<0q*ZP1EC$-MbjsqIK1)h67b4 znfi;cA4M48Q!)Q881o=g1>(&yaRz#w{g<;olRAkiS0Y64F)n^3Q48%$a2?{=C*blA zmTQf-d%u_)zH_KEH_R5*!<<%V4LeFSbrsG>Qh$s7cx*)0xm2&oR`2KF>vXiE4&ZXq zIDw{xQ4Q>Yq2SiSNOZ+e@Rb369}pkcwlESMH&nbir1gtmue>lguGG$@Kh^3wclgKc zk~-;RM7!zF-Ez*-)JrE6M&CV&xn-R7vO?ppB`WOvv&8xVFS8&1)-$Yf+LqL|=8bv% z6mFx#nBx79Dupn*CE2V4{3N5WSqF(SC`5prPejI_8TdzIGw^6ddC>7bdMZ+Q8n}+5 z7>DEEFQMqUaubsboFQiS!;P6o3WM8fVS6cj1GC@u082^)3TtZFr-WFx_= zsl;~af$Tt;9n;1LukW{6&l$1-@G?eMiWhB+#DXUZG+rbX4lSDz0Cr+s*^IOTM9XYk zc8F8~N>~EGy)Bg{u;$W`9feEaMQuqi9M(6d_&P{#ZlwLYrTukFqdHIi0ejNlt>+)N z9{Wjm{c7HN8E3blbT38E^wyVXm=L>q{4zAUk+s7nC)SF1G%eYV_tT_{%Qv?ttL^w5k?Ta^ zi(h%|$@K1mE%ML=yb0jsvJ?RxBT3Hw_#r~!FP_ptsKF=7IUK(;du283NbD?eC?U!u z7Zx#K*Kfmxj$*_Slb?BKif|1)8KjAWFCmi5+k%A7WT!d5u$0e~lFtZSx=@%IzqQnt zC^VGbT3RlL>AR4+E0Dqfzc$oWaL_>o-;Ty@d{-lJI)=+C@hi>Vc7DjjC@uLFo_8Pyf@%l}waRchfam9MXd&KeDEJAZ zhT9M&Qcs~*Ukob(DSM&6!o{D3RS3{oUTdG!@!jk0zOFgdty4ON?9nac@d2*~cg3%S z+m9`C+4%c1V{`A!D0A**&#p0FLh&2otmNONO$%*nFz+bh>1yzox3W{3zor6a*W^I=%g+S(_#+ zw+^hBy`hY?$>@zN8<@pq+XK9RG_rR76mxW~v2sGYQit!^{7{t9{Od^g4d<$%xMmXt zMz^aq2^D5CCCc|4EWs~v+xyO1II8u6qqa_Q%QpPbx*o3PakVP0S;q&wS~#)R$hI*q zMLFTJwejya9v|F+i4IFcET~$^VA?XQ=2beXW?E;7 z@F=mw(!z6Q^Q_&G})z z<)LLJ?ibILcjWR$w>5mV5Vs{F<6_noZ`nEzp5o+jX=p->N%r>HCl?$X!Exm-X0-&2 zK-4fE^W$5vqE6rNe6kRPmZ-=47UzOJFaUwY7jJG8F{QZvA0vGQ?f?J) diff --git a/client-mobile/.gradle/8.5/fileHashes/fileHashes.lock b/client-mobile/.gradle/8.5/fileHashes/fileHashes.lock index 4963c9bfcd176099bd91683c528014e59ad133b3..22eec27a56caa7932add0527b0ef9bb4bfdda7f4 100644 GIT binary patch literal 17 WcmZSH&R@;(a=)o00|+qMp9cUd8w64S literal 17 WcmZSH&R@;(a=)o00|+qc$pZi?Ndu7p diff --git a/client-mobile/.gradle/8.5/fileHashes/resourceHashesCache.bin b/client-mobile/.gradle/8.5/fileHashes/resourceHashesCache.bin index 7b720d6ae25269ccdd1deeeaf3ce31069980c0b8..1b85df7ba0a890b5c2a587937881b5d216682ede 100644 GIT binary patch delta 3422 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 diff --git a/client-mobile/.gradle/buildOutputCleanup/outputFiles.bin b/client-mobile/.gradle/buildOutputCleanup/outputFiles.bin index 525a48756726d3801ea1b007c6a2346fed85daee..3b0f8eb3ee593701dc57eb4dc10da6f2f9f15e44 100644 GIT binary patch delta 1356 zcmYjQeN02{SEB1j-3Hr2ihc{mWF~J1O+{uXAg2h ztB#jq@o@IyYZVi7O5|uKoqW4uig7O+67LB?ka~L zgl%6Z741{P$9BWYCSA=lXh%a`zK&W9H9a)}>hcXo_n|}Z$Cn0s0xrA%;*j=Hs@mjR zFnweAPS2$w$!-xNcMVG%+6~LohD@E|xD+Gdubqu~D;UEgm&Uk~aDKCkBA}sZ}rjB#qujP7~Kg6tWcBYX7A1_ds=XD41 zJd5=3Ym)I=4duUw7$psUc*0+1JzJ$V&w|2FjUOlCqP)xZPF9qwUORbk1=-OjT%2JM{fAuY2r-c{>Q?f=}xs4hMW1O zP8$?&F$dyU0>xO!sRt2}-c~LY^yO>GY8IzQC1muNX$TkJnyHGk)T<>X;M8$bFa^w4 zjKi1=p5P{l2Q)v+(=|l8O%Ulek2p{+)cs)Ip~G<4k5V#?@LOdf|k3tYE}(8q)TOZTdv1B}?P9I(0( zC%=qR0Kbh}5^(izk%h{&YbtTup`$XU06}y_-1rpvD$|rryLcHTRFpI!OfF<;L&1!_ zWsH!2ca^a>FB27(AuAN8o)jp>mTo~r;NfFl;1xRMDFThg&0L>rDibkWA@FBwi)H3( zNrqDh(Xm2Gk?7yL8;T^6BOE=^Z1xPQnUs?xqZsA0nVz7bBOejMGUVuf6k-RU@}(l; z;l&Y}RGBP=+bz~*9m@+#ai8W1`#02nocMIJdcJsLMvM)1(r@Bz&a7Xmp#+ z6hrGGNlAs9My9UAOveJ$l^!*k6~zTYTuP#065WakAP^#d4AG=9-usIDaZm2M_nvcp zALm{FxMO0hVVnT{JG#aqi~9v!+%LZLDLjiC>+N3=)E=|%s}h?^q{>#B31|sA(60sYUccsq$eu1c zTMo9IY)QDMOFr;2?8N2cvRQ#^evr>NiFqSs*6EpF<(mZh@YbT-Y{!+m;N!zN^p%%wy z=)SHUa^hPjv{fFOyQF&2cUI`JxQD5)ON!B~*FH!6qI0)Z8&CC1-vP!}+1oh5D#Ah= zV9>8ImHa1MQNp!M($J%>fTijK$oP#%r|Y2+d%N}VN_uz6mc<`;=&Jz^rOc61WZZlA zLLHvIp;ve)UF!^DdqMA!;9|=3t+1rwZJ83jqa;j2$4TJ<42FQ2)dn=SMk>%y#z=GX z!dUaSvj&O`*!wx_kY>*bF=P)}rQCK%V(u`{u?=Z%!6XU*8N>kTC zvfDa~hvw5q?m7xI|F05@2X9{}PQ~|4Mt37Tg2px@QGru$I5q+Pthibqq9>cxb#dS2 z0A*m(yja2dVjjh~N=a<2a&KXZMwRy&HLf^oou2Vs{)y3HQeuAE7G*LI6kTD%8C4!9 z?7o@ZPm=xpU(R>50kXj z*+R#K;TxV;1ITpv2sq<(JU`IMVbAef=KWxCth3z#WU@EI{o`W&aNOUwp*V;gvj%p| tx}G}^fQO^*O>VrkS-4^+<@G7^k1}g^(LZ71LQD$l1^x#Pi#+}!{|69K*bD#w diff --git a/client-mobile/auth/data/repository/AuthRepositoryImpl.kt b/client-mobile/auth/data/repository/AuthRepositoryImpl.kt index 5594560..3ab91d2 100644 --- a/client-mobile/auth/data/repository/AuthRepositoryImpl.kt +++ b/client-mobile/auth/data/repository/AuthRepositoryImpl.kt @@ -75,4 +75,12 @@ class AuthRepositoryImpl @Inject constructor( Result.failure(e) } } + + override suspend fun updatePushToken(token: String) { + try { + api.updatePushToken(token) + } catch (e: Exception) { + // Silent fail + } + } } diff --git a/client-mobile/auth/domain/repository/AuthRepository.kt b/client-mobile/auth/domain/repository/AuthRepository.kt index 7b5b9b8..381793f 100644 --- a/client-mobile/auth/domain/repository/AuthRepository.kt +++ b/client-mobile/auth/domain/repository/AuthRepository.kt @@ -8,4 +8,5 @@ interface AuthRepository { suspend fun logout() suspend fun fetchConfig(): Result fun isAuthenticated(): Boolean + suspend fun updatePushToken(token: String) } diff --git a/client-mobile/auth/presentation/AuthViewModel.kt b/client-mobile/auth/presentation/AuthViewModel.kt index 87949ee..d5c0367 100644 --- a/client-mobile/auth/presentation/AuthViewModel.kt +++ b/client-mobile/auth/presentation/AuthViewModel.kt @@ -9,6 +9,7 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch +import com.google.firebase.messaging.FirebaseMessaging import javax.inject.Inject data class AuthState( @@ -35,6 +36,7 @@ class AuthViewModel @Inject constructor( repository.login(userName, password) .onSuccess { _state.update { it.copy(isLoading = false, isAuthenticated = true) } + updatePushToken() } .onFailure { e -> _state.update { it.copy(isLoading = false, error = e.message) } @@ -48,10 +50,22 @@ class AuthViewModel @Inject constructor( repository.register(userName, password) .onSuccess { _state.update { it.copy(isLoading = false, isAuthenticated = true) } + updatePushToken() } .onFailure { e -> _state.update { it.copy(isLoading = false, error = e.message) } } } } + + private fun updatePushToken() { + FirebaseMessaging.getInstance().token.addOnCompleteListener { task -> + if (task.isSuccessful) { + val token = task.result + viewModelScope.launch { + repository.updatePushToken(token) + } + } + } + } } diff --git a/client-mobile/chats/data/remote/signalr/ChatHubClient.kt b/client-mobile/chats/data/remote/signalr/ChatHubClient.kt index e2fe934..8362257 100644 --- a/client-mobile/chats/data/remote/signalr/ChatHubClient.kt +++ b/client-mobile/chats/data/remote/signalr/ChatHubClient.kt @@ -7,24 +7,36 @@ import com.microsoft.signalr.HubConnectionBuilder import com.microsoft.signalr.HubConnectionState import chats.data.remote.dto.ChatDto import chats.data.remote.dto.MessageDto -import kotlinx.coroutines.flow.MutableSharedFlow -import kotlinx.coroutines.flow.SharedFlow -import kotlinx.coroutines.flow.asSharedFlow +import kotlinx.coroutines.flow.* import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import javax.inject.Inject import javax.inject.Singleton +import kotlinx.coroutines.delay + +enum class ConnectionStatus { CONNECTED, CONNECTING, DISCONNECTED } + @Singleton class ChatHubClient @Inject constructor() { private var hubConnection: HubConnection? = null private val _events = MutableSharedFlow(extraBufferCapacity = 64) val events: SharedFlow = _events.asSharedFlow() + + private val _status = MutableStateFlow(ConnectionStatus.DISCONNECTED) + val status: StateFlow = _status.asStateFlow() + private val scope = CoroutineScope(Dispatchers.IO) + private var lastBaseUrl: String? = null + private var lastToken: String? = null fun connect(baseUrl: String, accessToken: String) { if (hubConnection?.connectionState == HubConnectionState.CONNECTED) return + + lastBaseUrl = baseUrl + lastToken = accessToken + _status.value = ConnectionStatus.CONNECTING hubConnection = HubConnectionBuilder.create("${baseUrl}/chatHub") .withAccessTokenProvider(Single.just(accessToken)) @@ -33,16 +45,22 @@ class ChatHubClient @Inject constructor() { setupHandlers() hubConnection?.onClosed { exception -> - Log.e("ChatHubClient", "Connection closed", exception) - // Optional: Reconnect logic + Log.e("ChatHubClient", "Connection closed. Reconnecting...", exception) + _status.value = ConnectionStatus.DISCONNECTED + scope.launch { + delay(5000) + connect(baseUrl, accessToken) + } } scope.launch { try { hubConnection?.start()?.blockingAwait() + _status.value = ConnectionStatus.CONNECTED Log.d("ChatHubClient", "SignalR Connected") } catch (e: Exception) { Log.e("ChatHubClient", "SignalR Connection Error", e) + _status.value = ConnectionStatus.DISCONNECTED } } } @@ -94,5 +112,6 @@ class ChatHubClient @Inject constructor() { fun disconnect() { hubConnection?.stop() + _status.value = ConnectionStatus.DISCONNECTED } } diff --git a/client-mobile/chats/data/repository/ChatRepositoryImpl.kt b/client-mobile/chats/data/repository/ChatRepositoryImpl.kt index 8962e36..3b1d817 100644 --- a/client-mobile/chats/data/repository/ChatRepositoryImpl.kt +++ b/client-mobile/chats/data/repository/ChatRepositoryImpl.kt @@ -32,8 +32,17 @@ class ChatRepositoryImpl @Inject constructor( return api.getMessages(chatId).map { it.toDomain(baseUrl) } } - override suspend fun sendMessage(chatId: String, content: String): Message { - val request = SendMessageRequest(content = content, type = "text") + override suspend fun sendMessage( + chatId: String, + content: String?, + type: String, + attachments: List? + ): Message { + val request = SendMessageRequest( + content = content, + type = type, + attachments = attachments + ) val baseUrl = serverConfig.getBaseUrl().removeSuffix("/api/") return api.sendMessage(chatId, request).toDomain(baseUrl) } @@ -91,6 +100,7 @@ fun ChatDto.toDomain(currentUserId: String, baseUrl: String): Chat { fun MessageDto.toDomain(baseUrl: String): Message { val domainMediaType = when (type) { + "gif" -> MediaType.GIF "image", "photo" -> MediaType.IMAGE "video" -> MediaType.VIDEO "audio", "voice" -> MediaType.AUDIO diff --git a/client-mobile/chats/domain/model/Message.kt b/client-mobile/chats/domain/model/Message.kt index 12ce75a..e77e1e0 100644 --- a/client-mobile/chats/domain/model/Message.kt +++ b/client-mobile/chats/domain/model/Message.kt @@ -26,5 +26,5 @@ data class Media( ) enum class MediaType { - TEXT, IMAGE, VIDEO, AUDIO, FILE, STORY_REPLY + TEXT, IMAGE, VIDEO, AUDIO, FILE, STORY_REPLY, GIF } diff --git a/client-mobile/chats/domain/repository/ChatRepository.kt b/client-mobile/chats/domain/repository/ChatRepository.kt index 312b6f2..28ab034 100644 --- a/client-mobile/chats/domain/repository/ChatRepository.kt +++ b/client-mobile/chats/domain/repository/ChatRepository.kt @@ -6,7 +6,12 @@ import chats.domain.model.Message interface ChatRepository { suspend fun getChats(): List suspend fun getMessages(chatId: String): List - suspend fun sendMessage(chatId: String, content: String): Message + suspend fun sendMessage( + chatId: String, + content: String?, + type: String = "text", + attachments: List? = null + ): Message suspend fun addReaction(messageId: String, emoji: String) suspend fun sendTypingStatus(chatId: String) suspend fun markMessagesAsRead(chatId: String, lastMessageId: String) diff --git a/client-mobile/chats/presentation/chat_detail/ChatDetailViewModel.kt b/client-mobile/chats/presentation/chat_detail/ChatDetailViewModel.kt index f8abd35..509d003 100644 --- a/client-mobile/chats/presentation/chat_detail/ChatDetailViewModel.kt +++ b/client-mobile/chats/presentation/chat_detail/ChatDetailViewModel.kt @@ -65,6 +65,14 @@ class ChatDetailViewModel @Inject constructor( fun setChatId(chatId: String) { currentChatId = chatId + + // Ensure SignalR is connected + val token = tokenManager.getToken() + if (token != null) { + val baseUrl = serverConfig.getBaseUrl().removeSuffix("/api/") + signalrClient.connect(baseUrl, token) + } + loadChatInfo(chatId) loadMessages(chatId) observeSignalREvents() @@ -155,9 +163,17 @@ class ChatDetailViewModel @Inject constructor( fun sendMessage(text: String) { val chatId = currentChatId ?: return + if (text.isBlank()) return + viewModelScope.launch { try { - repository.sendMessage(chatId, text) + val sentMessage = repository.sendMessage(chatId, text) + // Optimistic update if not already there + _state.update { s -> + if (s.messages.none { it.id == sentMessage.id }) { + s.copy(messages = s.messages + sentMessage) + } else s + } } catch (e: Exception) { _state.update { it.copy(error = e.localizedMessage) } } @@ -239,8 +255,21 @@ class ChatDetailViewModel @Inject constructor( val chatId = currentChatId ?: return viewModelScope.launch { try { - repository.sendMessage(chatId, url) + val attachment = chats.data.remote.api.AttachmentRequest( + type = "image", + url = url, + fileName = "gif.gif", + fileSize = 0 + ) + val sentMessage = repository.sendMessage(chatId, null, "image", listOf(attachment)) + // Optimistic update + _state.update { s -> + if (s.messages.none { it.id == sentMessage.id }) { + s.copy(messages = s.messages + sentMessage) + } else s + } + // Add to recent val allGifs = _state.value.trendingGifs + _state.value.searchedGifs + _state.value.recentGifs val selectedGif = allGifs.find { gif -> diff --git a/client-mobile/chats/presentation/components/MessageBubble.kt b/client-mobile/chats/presentation/components/MessageBubble.kt index a2a0ea5..7ec9126 100644 --- a/client-mobile/chats/presentation/components/MessageBubble.kt +++ b/client-mobile/chats/presentation/components/MessageBubble.kt @@ -142,13 +142,29 @@ fun MessageBubble( } } - // Media Content - if (message.media.isNotEmpty()) { + // GIF Content (Klipy) + if (message.mediaType == MediaType.GIF) { + AsyncImage( + model = message.content, + imageLoader = core.utils.CoilUtils.getGifImageLoader(context), + contentDescription = null, + modifier = Modifier + .fillMaxWidth() + .heightIn(max = 300.dp) + .clip(RoundedCornerShape(8.dp)) + .clickable { /* Handle click */ }, + contentScale = ContentScale.Crop + ) + Spacer(modifier = Modifier.height(4.dp)) + } + + // Media Content (Attachments) + if (message.media.isNotEmpty() && message.mediaType != MediaType.GIF) { val mediaCount = message.media.size if (mediaCount == 1) { val mediaItem = message.media[0] when { - mediaItem.type.startsWith("image") || message.mediaType == MediaType.IMAGE || mediaItem.type.startsWith("image") -> { + mediaItem.type.startsWith("image") || message.mediaType == MediaType.IMAGE -> { AsyncImage( model = mediaItem.url, imageLoader = core.utils.CoilUtils.getGifImageLoader(context), @@ -218,7 +234,7 @@ fun MessageBubble( } // Text Content - if (!message.content.isNullOrBlank() && !isVoiceMessage) { + if (!message.content.isNullOrBlank() && !isVoiceMessage && message.mediaType != MediaType.GIF) { Text( text = message.content, style = MaterialTheme.typography.bodyMedium,