diff --git a/apps/desktop/src-tauri/src/chat.rs b/apps/desktop/src-tauri/src/chat.rs index 6801abe..a965a9b 100644 --- a/apps/desktop/src-tauri/src/chat.rs +++ b/apps/desktop/src-tauri/src/chat.rs @@ -322,9 +322,30 @@ impl ChatRuntime { Ok(result) => { last_checked_at = Some(chrono::Utc::now().timestamp_millis()); + // DEBUG: Log do resultado do polling + crate::log_info!( + "[CHAT DEBUG] poll_chat_updates: has_active={}, total_unread={}, sessions_count={}", + result.has_active_sessions, + result.total_unread, + result.sessions.len() + ); + // Buscar sessoes completas para ter dados corretos let current_sessions = if result.has_active_sessions { - fetch_sessions(&base_clone, &token_clone).await.unwrap_or_default() + let sessions = fetch_sessions(&base_clone, &token_clone).await.unwrap_or_default(); + crate::log_info!( + "[CHAT DEBUG] fetch_sessions: {} sessoes encontradas", + sessions.len() + ); + for s in &sessions { + crate::log_info!( + "[CHAT DEBUG] Sessao: id={}, ticket={}, unread={}", + s.session_id, + s.ticket_id, + s.unread_count + ); + } + sessions } else { Vec::new() }; @@ -400,7 +421,20 @@ impl ChatRuntime { let new_messages = result.total_unread > prev_unread; *last_unread_count.lock() = result.total_unread; + // DEBUG: Log de unread count + crate::log_info!( + "[CHAT DEBUG] Unread check: prev={}, current={}, new_messages={}", + prev_unread, + result.total_unread, + new_messages + ); + // Sempre emitir unread-update com sessoes completas + crate::log_info!( + "[CHAT DEBUG] Emitindo unread-update: totalUnread={}, sessions={}", + result.total_unread, + current_sessions.len() + ); let _ = app.emit( "raven://chat/unread-update", serde_json::json!({ @@ -411,6 +445,7 @@ impl ChatRuntime { // Notificar novas mensagens (quando aumentou) if new_messages && result.total_unread > 0 { + crate::log_info!("[CHAT DEBUG] NOVA MENSAGEM DETECTADA! Emitindo evento new-message"); let new_count = result.total_unread - prev_unread; crate::log_info!( diff --git a/apps/desktop/src/main.tsx b/apps/desktop/src/main.tsx index ed71ddc..26345ee 100644 --- a/apps/desktop/src/main.tsx +++ b/apps/desktop/src/main.tsx @@ -1076,13 +1076,16 @@ const resolvedAppUrl = useMemo(() => { // Listener para atualizacao de mensagens nao lidas (sincroniza sessoes completas) listen("raven://chat/unread-update", (event) => { if (disposed) return - logDesktop("chat:unread-update", { totalUnread: event.payload.totalUnread, sessionsCount: event.payload.sessions.length }) + console.log("[CHAT DEBUG] unread-update recebido:", JSON.stringify(event.payload, null, 2)) + logDesktop("chat:unread-update", { totalUnread: event.payload.totalUnread, sessionsCount: event.payload.sessions?.length ?? 0 }) setChatUnreadCount(event.payload.totalUnread) // Atualiza sessoes com dados completos do backend if (event.payload.sessions && event.payload.sessions.length > 0) { + console.log("[CHAT DEBUG] Atualizando chatSessions com", event.payload.sessions.length, "sessoes") setChatSessions(event.payload.sessions) } else if (event.payload.totalUnread === 0) { // Sem sessoes ativas + console.log("[CHAT DEBUG] Sem sessoes ativas, limpando chatSessions") setChatSessions([]) } }).then(unlisten => { @@ -1093,14 +1096,17 @@ const resolvedAppUrl = useMemo(() => { // Listener para nova mensagem (abre widget se fechado) listen("raven://chat/new-message", (event) => { if (disposed) return + console.log("[CHAT DEBUG] new-message recebido:", JSON.stringify(event.payload, null, 2)) logDesktop("chat:new-message", { totalUnread: event.payload.totalUnread, newCount: event.payload.newCount }) setChatUnreadCount(event.payload.totalUnread) // Atualiza sessoes com dados completos do backend if (event.payload.sessions && event.payload.sessions.length > 0) { + console.log("[CHAT DEBUG] Atualizando chatSessions com", event.payload.sessions.length, "sessoes") setChatSessions(event.payload.sessions) } // Abre o widget quando chega nova mensagem if (event.payload.newCount > 0) { + console.log("[CHAT DEBUG] Nova mensagem! Abrindo widget...") setIsChatOpen(true) } }).then(unlisten => { diff --git a/src/components/chat/chat-widget.tsx b/src/components/chat/chat-widget.tsx index bc0b004..281f8a6 100644 --- a/src/components/chat/chat-widget.tsx +++ b/src/components/chat/chat-widget.tsx @@ -516,7 +516,7 @@ export function ChatWidget() { size="sm" onClick={handleEndChat} disabled={isEndingChat} - className="gap-1.5 text-red-600 hover:bg-red-50 hover:text-red-700" + className="gap-1.5 border border-red-300 text-red-600 hover:border-red-400 hover:bg-red-50 hover:text-red-700" > {isEndingChat ? ( diff --git a/src/components/tickets/ticket-chat-panel.tsx b/src/components/tickets/ticket-chat-panel.tsx index 10f99d9..82f554e 100644 --- a/src/components/tickets/ticket-chat-panel.tsx +++ b/src/components/tickets/ticket-chat-panel.tsx @@ -241,7 +241,7 @@ export function TicketChatPanel({ ticketId }: TicketChatPanelProps) { size="sm" onClick={handleEndLiveChat} disabled={isEndingChat} - className="gap-1.5 text-red-600 hover:bg-red-50 hover:text-red-700" + className="gap-1.5 border border-red-300 text-red-600 hover:border-red-400 hover:bg-red-50 hover:text-red-700" > {isEndingChat ? : } Encerrar