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

90 lines
2.5 KiB
C++

#pragma once
#include "message.hpp"
#include <QDateTime>
#include <QList>
#include <QObject>
#include <QString>
#include <QtQml>
namespace ZShell {
class ChatSession : public QObject {
Q_OBJECT
QML_ELEMENT
QML_UNCREATABLE("Chat sessions are managed by Chat.chats")
Q_PROPERTY(QString id READ id CONSTANT)
Q_PROPERTY(QString title READ title NOTIFY titleChanged)
Q_PROPERTY(QString icon READ icon NOTIFY iconChanged)
Q_PROPERTY(QDateTime createdAt READ createdAt CONSTANT)
Q_PROPERTY(QDateTime updatedAt READ updatedAt NOTIFY updatedAtChanged)
Q_PROPERTY(bool pinned READ pinned NOTIFY pinnedChanged)
Q_PROPERTY(int messageCount READ messageCount NOTIFY messageCountChanged)
Q_PROPERTY(QList<ChatMessage*> messages READ messages NOTIFY messagesChanged)
public:
explicit ChatSession(const QString& id, QObject* parent = nullptr);
[[nodiscard]] QString id() const { return m_id; }
[[nodiscard]] QString title() const { return m_title; }
[[nodiscard]] QString icon() const { return m_icon; }
[[nodiscard]] QDateTime createdAt() const {
return QDateTime::fromMSecsSinceEpoch(m_createdAt);
}
[[nodiscard]] QDateTime updatedAt() const {
return QDateTime::fromMSecsSinceEpoch(m_updatedAt);
}
[[nodiscard]] qint64 createdAtMs() const { return m_createdAt; }
[[nodiscard]] qint64 updatedAtMs() const { return m_updatedAt; }
[[nodiscard]] bool pinned() const { return m_pinned; }
[[nodiscard]] int messageCount() const { return m_messageCount; }
[[nodiscard]] QList<ChatMessage*> messages() {
ensureLoaded();
return m_messages;
}
void setTitle(const QString& value);
void setIcon(const QString& value);
void setUpdatedAt(qint64 value);
void setPinned(bool value);
void setMeta(
const QString& title,
qint64 createdAt,
qint64 updatedAt,
int messageCount);
void ensureLoaded();
[[nodiscard]] bool isLoaded() const { return m_loaded; }
void adoptMessages(QList<ChatMessage*> messages);
ChatMessage* appendMessage(
ChatMessage::Role role, const QString& content, qint64 timestamp);
void removeMessage(ChatMessage* message);
void clearMessages();
Q_SIGNALS:
void titleChanged();
void iconChanged();
void updatedAtChanged();
void pinnedChanged();
void messageCountChanged();
void messagesChanged();
private:
void setCount(int value);
QString m_id;
QString m_title;
QString m_icon;
qint64 m_createdAt = 0;
qint64 m_updatedAt = 0;
bool m_pinned = false;
int m_messageCount = 0;
QList<ChatMessage*> m_messages;
bool m_loaded = false;
};
} // namespace ZShell