initial commit for llm chat tab in sidebar
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
#pragma once
|
||||
|
||||
#include "message.hpp"
|
||||
|
||||
#include <QDateTime>
|
||||
#include <QJsonObject>
|
||||
#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(QDateTime createdAt READ createdAt CONSTANT)
|
||||
Q_PROPERTY(QDateTime updatedAt READ updatedAt NOTIFY updatedAtChanged)
|
||||
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]] 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]] int messageCount() const { return m_messageCount; }
|
||||
[[nodiscard]] QList<ChatMessage*> messages() {
|
||||
ensureLoaded();
|
||||
return m_messages;
|
||||
}
|
||||
|
||||
void setTitle(const QString& value);
|
||||
void setUpdatedAt(qint64 value);
|
||||
|
||||
void setPath(const QString& value) { m_path = value; }
|
||||
[[nodiscard]] QString path() const { return m_path; }
|
||||
void setMeta(
|
||||
const QString& title,
|
||||
qint64 createdAt,
|
||||
qint64 updatedAt,
|
||||
int messageCount);
|
||||
|
||||
void ensureLoaded();
|
||||
[[nodiscard]] bool isLoaded() const { return m_loaded; }
|
||||
ChatMessage* appendMessage(
|
||||
ChatMessage::Role role, const QString& content, qint64 timestamp);
|
||||
void removeMessage(ChatMessage* message);
|
||||
void clearMessages();
|
||||
[[nodiscard]] QJsonObject document();
|
||||
|
||||
Q_SIGNALS:
|
||||
void titleChanged();
|
||||
void updatedAtChanged();
|
||||
void messageCountChanged();
|
||||
void messagesChanged();
|
||||
|
||||
private:
|
||||
void loadMessages();
|
||||
void setCount(int value);
|
||||
|
||||
QString m_id;
|
||||
QString m_title;
|
||||
qint64 m_createdAt = 0;
|
||||
qint64 m_updatedAt = 0;
|
||||
int m_messageCount = 0;
|
||||
QString m_path;
|
||||
QList<ChatMessage*> m_messages;
|
||||
bool m_loaded = false;
|
||||
};
|
||||
|
||||
} // namespace ZShell
|
||||
Reference in New Issue
Block a user