Files
neochat/src/spectralroom.h
2020-11-03 15:15:16 +00:00

123 lines
4.0 KiB
C++

#ifndef SpectralRoom_H
#define SpectralRoom_H
#include <events/encryptionevent.h>
#include <events/redactionevent.h>
#include <events/roomavatarevent.h>
#include <events/roomcreateevent.h>
#include <events/roommemberevent.h>
#include <events/roommessageevent.h>
#include <events/simplestateevents.h>
#include <QObject>
#include <QPointer>
#include <QTimer>
#include "room.h"
#include "spectraluser.h"
using namespace Quotient;
class SpectralRoom : public Room
{
Q_OBJECT
Q_PROPERTY(QVariantList usersTyping READ getUsersTyping NOTIFY typingChanged)
Q_PROPERTY(QString cachedInput MEMBER m_cachedInput NOTIFY cachedInputChanged)
Q_PROPERTY(bool hasFileUploading READ hasFileUploading WRITE setHasFileUploading NOTIFY hasFileUploadingChanged)
Q_PROPERTY(int fileUploadingProgress READ fileUploadingProgress NOTIFY fileUploadingProgressChanged)
Q_PROPERTY(QString avatarMediaId READ avatarMediaId NOTIFY avatarChanged STORED false)
public:
explicit SpectralRoom(Connection *connection, QString roomId, JoinState joinState = {});
QVariantList getUsersTyping() const;
QString lastEvent() const;
bool isEventHighlighted(const Quotient::RoomEvent *e) const;
QDateTime lastActiveTime() const;
bool hasFileUploading() const
{
return m_hasFileUploading;
}
void setHasFileUploading(bool value)
{
if (value == m_hasFileUploading) {
return;
}
m_hasFileUploading = value;
Q_EMIT hasFileUploadingChanged();
}
int fileUploadingProgress() const
{
return m_fileUploadingProgress;
}
void setFileUploadingProgress(int value)
{
if (m_fileUploadingProgress == value) {
return;
}
m_fileUploadingProgress = value;
Q_EMIT fileUploadingProgressChanged();
}
Q_INVOKABLE int savedTopVisibleIndex() const;
Q_INVOKABLE int savedBottomVisibleIndex() const;
Q_INVOKABLE void saveViewport(int topIndex, int bottomIndex);
Q_INVOKABLE QVariantList getUsers(const QString &keyword) const;
Q_INVOKABLE QUrl urlToMxcUrl(QUrl mxcUrl);
QString avatarMediaId() const;
QString eventToString(const RoomEvent &evt, Qt::TextFormat format = Qt::PlainText, bool removeReply = true) const;
Q_INVOKABLE bool containsUser(QString userID) const;
Q_INVOKABLE bool canSendEvent(const QString &eventType) const;
Q_INVOKABLE bool canSendState(const QString &eventType) const;
private:
QString m_cachedInput;
QSet<const Quotient::RoomEvent *> highlights;
bool m_hasFileUploading = false;
int m_fileUploadingProgress = 0;
void checkForHighlights(const Quotient::TimelineItem &ti);
void onAddNewTimelineEvents(timeline_iter_t from) override;
void onAddHistoricalTimelineEvents(rev_iter_t from) override;
void onRedaction(const RoomEvent &prevEvent, const RoomEvent &after) override;
static QString markdownToHTML(const QString &plaintext);
private Q_SLOTS:
void countChanged();
Q_SIGNALS:
void cachedInputChanged();
void busyChanged();
void hasFileUploadingChanged();
void fileUploadingProgressChanged();
void backgroundChanged();
public Q_SLOTS:
void uploadFile(const QUrl &url, const QString &body = "");
void acceptInvitation();
void forget();
void sendTypingNotification(bool isTyping);
void postArbitaryMessage(const QString &text, Quotient::MessageEventType type = Quotient::MessageEventType::Text, const QString &replyEventId = "");
void postPlainMessage(const QString &text, Quotient::MessageEventType type = Quotient::MessageEventType::Text, const QString &replyEventId = "");
void postHtmlMessage(const QString &text, const QString &html, Quotient::MessageEventType type = Quotient::MessageEventType::Text, const QString &replyEventId = "");
void changeAvatar(QUrl localFile);
void addLocalAlias(const QString &alias);
void removeLocalAlias(const QString &alias);
void toggleReaction(const QString &eventId, const QString &reaction);
};
#endif // SpectralRoom_H