Files
z-bar-qt/Plugins/ZShell/Llm/session.cpp
T

103 lines
2.1 KiB
C++

#include "session.hpp"
#include "chatstore.hpp"
#include <QDebug>
#include <QtGlobal>
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<ChatStore*>(parent()))
store->loadMessagesInto(this);
}
void ChatSession::adoptMessages(QList<ChatMessage*> 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