103 lines
2.1 KiB
C++
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
|