#include "session.hpp" #include "chatstore.hpp" #include #include namespace ZShell { ChatSession::ChatSession(const QString& id, QObject* parent) : QObject(parent), m_id(id) {} void ChatSession::setTitle(const QString& value) { if (m_title == value) return; m_title = value; Q_EMIT titleChanged(); } void ChatSession::setIcon(const QString& value) { if (m_icon == value) return; m_icon = value; Q_EMIT iconChanged(); } void ChatSession::setUpdatedAt(qint64 value) { if (m_updatedAt == value) return; m_updatedAt = value; Q_EMIT updatedAtChanged(); } void ChatSession::setPinned(bool value) { if (m_pinned == value) return; m_pinned = value; Q_EMIT pinnedChanged(); } void ChatSession::setCount(int value) { if (m_messageCount == value) return; m_messageCount = value; Q_EMIT messageCountChanged(); } void ChatSession::setMeta( const QString& title, qint64 createdAt, qint64 updatedAt, int messageCount) { m_title = title; m_createdAt = createdAt; m_updatedAt = updatedAt; m_messageCount = messageCount; } void ChatSession::ensureLoaded() { if (m_loaded) return; m_loaded = true; if (auto* store = qobject_cast(parent())) store->loadMessagesInto(this); } void ChatSession::adoptMessages(QList messages) { qDeleteAll(m_messages); m_messages = messages; setCount(m_messages.size()); Q_EMIT messagesChanged(); } ChatMessage* ChatSession::appendMessage( ChatMessage::Role role, const QString& content, qint64 timestamp) { ensureLoaded(); auto* message = new ChatMessage(role, content, timestamp, this); m_messages.append(message); setCount(m_messages.size()); Q_EMIT messagesChanged(); return message; } void ChatSession::removeMessage(ChatMessage* message) { if (!message || !m_messages.removeOne(message)) return; delete message; setCount(m_messages.size()); Q_EMIT messagesChanged(); } void ChatSession::clearMessages() { ensureLoaded(); if (m_messages.isEmpty()) return; qDeleteAll(m_messages); m_messages.clear(); setCount(0); Q_EMIT messagesChanged(); } } // namespace ZShell