add removal of chat sessions, auto title + icon, proper stick-to-bottom as response is streamed
This commit is contained in:
@@ -3,7 +3,6 @@
|
||||
#include "message.hpp"
|
||||
|
||||
#include <QDateTime>
|
||||
#include <QJsonObject>
|
||||
#include <QList>
|
||||
#include <QObject>
|
||||
#include <QString>
|
||||
@@ -18,8 +17,10 @@ class ChatSession : public QObject {
|
||||
|
||||
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)
|
||||
|
||||
@@ -28,6 +29,7 @@ class ChatSession : public QObject {
|
||||
|
||||
[[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);
|
||||
}
|
||||
@@ -36,6 +38,7 @@ class ChatSession : public QObject {
|
||||
}
|
||||
[[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();
|
||||
@@ -43,10 +46,10 @@ class ChatSession : public QObject {
|
||||
}
|
||||
|
||||
void setTitle(const QString& value);
|
||||
void setIcon(const QString& value);
|
||||
void setUpdatedAt(qint64 value);
|
||||
void setPinned(bool value);
|
||||
|
||||
void setPath(const QString& value) { m_path = value; }
|
||||
[[nodiscard]] QString path() const { return m_path; }
|
||||
void setMeta(
|
||||
const QString& title,
|
||||
qint64 createdAt,
|
||||
@@ -55,28 +58,30 @@ class ChatSession : public QObject {
|
||||
|
||||
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();
|
||||
[[nodiscard]] QJsonObject document();
|
||||
|
||||
Q_SIGNALS:
|
||||
void titleChanged();
|
||||
void iconChanged();
|
||||
void updatedAtChanged();
|
||||
void pinnedChanged();
|
||||
void messageCountChanged();
|
||||
void messagesChanged();
|
||||
|
||||
private:
|
||||
void loadMessages();
|
||||
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;
|
||||
QString m_path;
|
||||
QList<ChatMessage*> m_messages;
|
||||
bool m_loaded = false;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user