diff --git a/src/actionshandler.cpp b/src/actionshandler.cpp index 5710b7302..287960399 100644 --- a/src/actionshandler.cpp +++ b/src/actionshandler.cpp @@ -12,8 +12,8 @@ #include #include "controller.h" -#include "roommanager.h" #include "customemojimodel.h" +#include "roommanager.h" ActionsHandler::ActionsHandler(QObject *parent) : QObject(parent) @@ -62,7 +62,6 @@ void ActionsHandler::setConnection(Connection *connection) void ActionsHandler::postEdit(const QString &text) { - const auto localId = Controller::instance().activeConnection()->userId(); for (auto it = m_room->messageEvents().crbegin(); it != m_room->messageEvents().crend(); ++it) { const auto &evt = **it; @@ -104,12 +103,12 @@ void ActionsHandler::postMessage(const QString &text, const QString &replyEventId, const QString &editEventId, const QVariantMap &usernames, - CustomEmojiModel* cem) + CustomEmojiModel *cem) { QString rawText = text; QString cleanedText = text; - auto preprocess = [cem](const QString& it) -> QString { + auto preprocess = [cem](const QString &it) -> QString { if (cem == nullptr) { return it; } @@ -135,8 +134,8 @@ void ActionsHandler::postMessage(const QString &text, static const QString lennyPrefix = QStringLiteral("/lenny"); static const QString tableflipPrefix = QStringLiteral("/tableflip"); static const QString unflipPrefix = QStringLiteral("/unflip"); - //static const QString plainPrefix = QStringLiteral("/plain "); // TODO - //static const QString htmlPrefix = QStringLiteral("/html "); // TODO + // static const QString plainPrefix = QStringLiteral("/plain "); // TODO + // static const QString htmlPrefix = QStringLiteral("/html "); // TODO static const QString rainbowPrefix = QStringLiteral("/rainbow "); static const QString rainbowmePrefix = QStringLiteral("/rainbowme "); static const QString spoilerPrefix = QStringLiteral("/spoiler "); @@ -144,12 +143,12 @@ void ActionsHandler::postMessage(const QString &text, static const QString noticePrefix = QStringLiteral("/notice "); // Actions commands - //static const QString ddgPrefix = QStringLiteral("/ddg "); // TODO - //static const QString nickPrefix = QStringLiteral("/nick "); // TODO - //static const QString meroomnickPrefix = QStringLiteral("/myroomnick "); // TODO - //static const QString roomavatarPrefix = QStringLiteral("/roomavatar "); // TODO - //static const QString myroomavatarPrefix = QStringLiteral("/myroomavatar "); // TODO - //static const QString myavatarPrefix = QStringLiteral("/myavatar "); // TODO + // static const QString ddgPrefix = QStringLiteral("/ddg "); // TODO + // static const QString nickPrefix = QStringLiteral("/nick "); // TODO + // static const QString meroomnickPrefix = QStringLiteral("/myroomnick "); // TODO + // static const QString roomavatarPrefix = QStringLiteral("/roomavatar "); // TODO + // static const QString myroomavatarPrefix = QStringLiteral("/myroomavatar "); // TODO + // static const QString myavatarPrefix = QStringLiteral("/myavatar "); // TODO static const QString invitePrefix = QStringLiteral("/invite "); static const QString joinPrefix = QStringLiteral("/join "); static const QString joinShortPrefix = QStringLiteral("/j "); @@ -157,8 +156,8 @@ void ActionsHandler::postMessage(const QString &text, static const QString leavePrefix = QStringLiteral("/leave"); static const QString ignorePrefix = QStringLiteral("/ignore "); static const QString unignorePrefix = QStringLiteral("/unignore "); - //static const QString queryPrefix = QStringLiteral("/query "); // TODO - //static const QString msgPrefix = QStringLiteral("/msg "); // TODO + // static const QString queryPrefix = QStringLiteral("/query "); // TODO + // static const QString msgPrefix = QStringLiteral("/msg "); // TODO static const QString reactPrefix = QStringLiteral("/react "); // Admin commands diff --git a/src/actionshandler.h b/src/actionshandler.h index af8855769..3e13ab13e 100644 --- a/src/actionshandler.h +++ b/src/actionshandler.h @@ -18,7 +18,6 @@ class ActionsHandler : public QObject { Q_OBJECT - /// \brief The connection that will handle sending the message. Q_PROPERTY(Connection *connection READ connection WRITE setConnection NOTIFY connectionChanged) @@ -35,8 +34,6 @@ public: explicit ActionsHandler(QObject *parent = nullptr); ~ActionsHandler(); - - [[nodiscard]] Connection *connection() const; void setConnection(Connection *connection); @@ -57,8 +54,12 @@ public Q_SLOTS: /// \brief Post a message. /// /// This also interprets commands if any. - void - postMessage(const QString &text, const QString &attachementPath, const QString &replyEventId, const QString &editEventId, const QVariantMap &usernames, CustomEmojiModel* cem); + void postMessage(const QString &text, + const QString &attachementPath, + const QString &replyEventId, + const QString &editEventId, + const QVariantMap &usernames, + CustomEmojiModel *cem); /// \brief Send edit instructions (.e.g s/hallo/hello/) /// diff --git a/src/colorschemer.cpp b/src/colorschemer.cpp index 2b1eef790..39a7fcd55 100644 --- a/src/colorschemer.cpp +++ b/src/colorschemer.cpp @@ -6,7 +6,7 @@ #include "colorschemer.h" -ColorSchemer::ColorSchemer(QObject* parent) +ColorSchemer::ColorSchemer(QObject *parent) : QObject(parent) , c(new KColorSchemeManager(this)) { diff --git a/src/colorschemer.h b/src/colorschemer.h index 206133e91..2dd32cfe4 100644 --- a/src/colorschemer.h +++ b/src/colorschemer.h @@ -3,8 +3,8 @@ #pragma once -#include #include +#include class QAbstractItemModel; class KColorSchemeManager; @@ -14,16 +14,15 @@ class ColorSchemer : public QObject Q_OBJECT Q_PROPERTY(QAbstractItemModel *model READ model CONSTANT) public: - ColorSchemer(QObject* parent = nullptr); + ColorSchemer(QObject *parent = nullptr); ~ColorSchemer(); - QAbstractItemModel* model() const; + QAbstractItemModel *model() const; Q_INVOKABLE void apply(int idx); Q_INVOKABLE void apply(const QString &name); Q_INVOKABLE int indexForScheme(const QString &name) const; Q_INVOKABLE QString nameForIndex(int index) const; private: - KColorSchemeManager* c; + KColorSchemeManager *c; }; - diff --git a/src/commandmodel.cpp b/src/commandmodel.cpp index c9f9dd813..a0db6be70 100644 --- a/src/commandmodel.cpp +++ b/src/commandmodel.cpp @@ -6,7 +6,6 @@ #include "actionshandler.h" #include "commandmodel.h" - QVariantList CommandModel::filterModel(const QString &filter) { QVariantList result; @@ -24,85 +23,47 @@ QVariantList CommandModel::filterModel(const QString &filter) return result; } - QVariantList CommandModel::commands() { QVariantList commands; // Messages commands - commands.append(QVariant::fromValue(Command{ - QStringLiteral("/me "), - QStringLiteral(""), - i18n("Displays action")})); + commands.append(QVariant::fromValue(Command{QStringLiteral("/me "), QStringLiteral(""), i18n("Displays action")})); - commands.append(QVariant::fromValue(Command{ - QStringLiteral("/shrug "), - QStringLiteral(""), - i18n("Prepends ¯\\_(ツ)_/¯ to a plain-text message")})); + commands.append(QVariant::fromValue(Command{QStringLiteral("/shrug "), QStringLiteral(""), i18n("Prepends ¯\\_(ツ)_/¯ to a plain-text message")})); - commands.append(QVariant::fromValue(Command{ - QStringLiteral("/lenny "), - QStringLiteral(""), - i18n("Prepends ( ͡° ͜ʖ ͡°) to a plain-text message")})); + commands.append(QVariant::fromValue(Command{QStringLiteral("/lenny "), QStringLiteral(""), i18n("Prepends ( ͡° ͜ʖ ͡°) to a plain-text message")})); - commands.append(QVariant::fromValue(Command{ - QStringLiteral("/tableflip "), - QStringLiteral(""), - i18n("Prepends (╯°□°)╯︵ ┻━┻ to a plain-text message")})); + commands.append( + QVariant::fromValue(Command{QStringLiteral("/tableflip "), QStringLiteral(""), i18n("Prepends (╯°□°)╯︵ ┻━┻ to a plain-text message")})); - commands.append(QVariant::fromValue(Command{ - QStringLiteral("/unflip "), - QStringLiteral(""), - i18n("Prepends ┬──┬ ノ( ゜-゜ノ) to a plain-text message")})); + commands.append( + QVariant::fromValue(Command{QStringLiteral("/unflip "), QStringLiteral(""), i18n("Prepends ┬──┬ ノ( ゜-゜ノ) to a plain-text message")})); - commands.append(QVariant::fromValue(Command{ - QStringLiteral("/plain "), - QStringLiteral(""), - i18n("Sends a message as plain text, without interpreting it as markdown")})); + commands.append(QVariant::fromValue( + Command{QStringLiteral("/plain "), QStringLiteral(""), i18n("Sends a message as plain text, without interpreting it as markdown")})); - commands.append(QVariant::fromValue(Command{ - QStringLiteral("/html "), - QStringLiteral(""), - i18n("Sends a message as html, without interpreting it as markdown")})); + commands.append(QVariant::fromValue( + Command{QStringLiteral("/html "), QStringLiteral(""), i18n("Sends a message as html, without interpreting it as markdown")})); - commands.append(QVariant::fromValue(Command{ - QStringLiteral("/rainbow "), - QStringLiteral(""), - i18n("Sends the given message coloured as a rainbow")})); + commands.append( + QVariant::fromValue(Command{QStringLiteral("/rainbow "), QStringLiteral(""), i18n("Sends the given message coloured as a rainbow")})); - commands.append(QVariant::fromValue(Command{ - QStringLiteral("/rainbowme "), - QStringLiteral(""), - i18n("Sends the given emote coloured as a rainbow")})); - - commands.append(QVariant::fromValue(Command{ - QStringLiteral("/spoiler "), - QStringLiteral(""), - i18n("Sends the given message as a spoiler")})); + commands.append( + QVariant::fromValue(Command{QStringLiteral("/rainbowme "), QStringLiteral(""), i18n("Sends the given emote coloured as a rainbow")})); + commands.append(QVariant::fromValue(Command{QStringLiteral("/spoiler "), QStringLiteral(""), i18n("Sends the given message as a spoiler")})); // Actions commands - commands.append(QVariant::fromValue(Command{ - QStringLiteral("/join "), QStringLiteral(""), - i18n("Joins room with given address")})); + commands.append(QVariant::fromValue(Command{QStringLiteral("/join "), QStringLiteral(""), i18n("Joins room with given address")})); - commands.append(QVariant::fromValue(Command{ - QStringLiteral("/part "), - QStringLiteral("[]"), - i18n("Leave room")})); + commands.append(QVariant::fromValue(Command{QStringLiteral("/part "), QStringLiteral("[]"), i18n("Leave room")})); - commands.append(QVariant::fromValue(Command{ - QStringLiteral("/invite "), - QStringLiteral(""), - i18n("Invites user with given id to current room")})); + commands.append(QVariant::fromValue(Command{QStringLiteral("/invite "), QStringLiteral(""), i18n("Invites user with given id to current room")})); - commands.append(QVariant::fromValue(Command{ - QStringLiteral("/react "), - QStringLiteral(""), - i18n("React to this message with a text")})); + commands.append(QVariant::fromValue(Command{QStringLiteral("/react "), QStringLiteral(""), i18n("React to this message with a text")})); // TODO more see elements /help action return commands; } - diff --git a/src/commandmodel.h b/src/commandmodel.h index 938bd5f81..d80d2143b 100644 --- a/src/commandmodel.h +++ b/src/commandmodel.h @@ -21,11 +21,10 @@ struct Command { QString parameter; QString help; -Q_GADGET + Q_GADGET Q_PROPERTY(QString command MEMBER command) Q_PROPERTY(QString parameter MEMBER parameter) Q_PROPERTY(QString help MEMBER help) - }; Q_DECLARE_METATYPE(Command) diff --git a/src/controller.cpp b/src/controller.cpp index 8aa1dedff..3651c3006 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -23,12 +23,12 @@ #include #include #include -#include #include #include #include #include #include +#include #include #include #include @@ -50,9 +50,9 @@ #include "neochatconfig.h" #include "neochatroom.h" #include "neochatuser.h" +#include "roommanager.h" #include "settings.h" #include "utils.h" -#include "roommanager.h" #include #ifndef Q_OS_ANDROID @@ -119,8 +119,7 @@ Controller::Controller(QObject *parent) } #endif - connect(m_mgr, &QNetworkConfigurationManager::onlineStateChanged, - this, &Controller::isOnlineChanged); + connect(m_mgr, &QNetworkConfigurationManager::onlineStateChanged, this, &Controller::isOnlineChanged); } Controller::~Controller() @@ -399,7 +398,7 @@ void Controller::changeAvatar(Connection *conn, const QUrl &localFile) { auto job = conn->uploadFile(localFile.toLocalFile()); #ifdef QUOTIENT_07 - if(isJobPending(job)) { + if (isJobPending(job)) { #else if (isJobRunning(job)) { #endif @@ -641,6 +640,5 @@ bool Controller::hasWindowSystem() const return true; #else return false; -#endif +#endif } - diff --git a/src/controller.h b/src/controller.h index ffd822c96..d0568b92f 100644 --- a/src/controller.h +++ b/src/controller.h @@ -4,8 +4,8 @@ #pragma once #include -#include #include +#include #include #include @@ -91,6 +91,7 @@ public: Q_INVOKABLE void openOrCreateDirectChat(NeoChatUser *user); Q_INVOKABLE void setBlur(QQuickItem *item, bool blur); + private: explicit Controller(QObject *parent = nullptr); ~Controller() override; diff --git a/src/customemojimodel+network.cpp b/src/customemojimodel+network.cpp index d26b26545..e8db18b36 100644 --- a/src/customemojimodel+network.cpp +++ b/src/customemojimodel+network.cpp @@ -2,8 +2,8 @@ // SPDX-License-Identifier: GPL-2.0-or-later #include -#include #include +#include #include "customemojimodel_p.h" @@ -19,16 +19,16 @@ void CustomEmojiModel::fetchEmojies() return; } - const auto& data = d->conn->accountData("im.ponies.user_emotes"); + const auto &data = d->conn->accountData("im.ponies.user_emotes"); if (data == nullptr) { return; } QJsonObject emojies = data->contentJson()["images"].toObject(); - //TODO: Remove with stable migration + // TODO: Remove with stable migration const auto legacyEmojies = data->contentJson()["emoticons"].toObject(); - for(const auto &emoji : legacyEmojies.keys()) { - if(!emojies.contains(emoji)) { + for (const auto &emoji : legacyEmojies.keys()) { + if (!emojies.contains(emoji)) { emojies[emoji] = legacyEmojies[emoji]; } } @@ -36,22 +36,18 @@ void CustomEmojiModel::fetchEmojies() beginResetModel(); d->emojies.clear(); - for (const auto& emoji : emojies.keys()) { - const auto& data = emojies[emoji]; + for (const auto &emoji : emojies.keys()) { + const auto &data = emojies[emoji]; const auto e = emoji.startsWith(":") ? emoji : (QStringLiteral(":") + emoji + QStringLiteral(":")); - d->emojies << CustomEmoji { - e, - data.toObject()["url"].toString(), - QRegularExpression(QStringLiteral(R"((^|[^\\]))") + e) - }; + d->emojies << CustomEmoji{e, data.toObject()["url"].toString(), QRegularExpression(QStringLiteral(R"((^|[^\\]))") + e)}; } endResetModel(); } -void CustomEmojiModel::addEmoji(const QString& name, const QUrl& location) +void CustomEmojiModel::addEmoji(const QString &name, const QUrl &location) { using namespace Quotient; @@ -59,7 +55,7 @@ void CustomEmojiModel::addEmoji(const QString& name, const QUrl& location) if (running(job)) { connect(job, &BaseJob::success, this, [this, name, job] { - const auto& data = d->conn->accountData("im.ponies.user_emotes"); + const auto &data = d->conn->accountData("im.ponies.user_emotes"); auto json = data != nullptr ? data->contentJson() : QJsonObject(); auto emojiData = json["images"].toObject(); emojiData[QStringLiteral("%1").arg(name)] = QJsonObject({ @@ -75,30 +71,30 @@ void CustomEmojiModel::addEmoji(const QString& name, const QUrl& location) } } -void CustomEmojiModel::removeEmoji(const QString& name) +void CustomEmojiModel::removeEmoji(const QString &name) { using namespace Quotient; - const auto& data = d->conn->accountData("im.ponies.user_emotes"); + const auto &data = d->conn->accountData("im.ponies.user_emotes"); Q_ASSERT(data != nullptr); // something's screwed if we get here with a nullptr auto json = data->contentJson(); const QString _name = name.mid(1).chopped(1); auto emojiData = json["images"].toObject(); - if(emojiData.contains(name)) { + if (emojiData.contains(name)) { emojiData.remove(name); json["images"] = emojiData; } - if(emojiData.contains(_name)) { + if (emojiData.contains(_name)) { emojiData.remove(_name); json["images"] = emojiData; } emojiData = json["emoticons"].toObject(); - if(emojiData.contains(name)) { + if (emojiData.contains(name)) { emojiData.remove(name); json["emoticons"] = emojiData; } - if(emojiData.contains(_name)) { + if (emojiData.contains(_name)) { emojiData.remove(_name); json["emoticons"] = emojiData; } diff --git a/src/customemojimodel.cpp b/src/customemojimodel.cpp index f07f803d5..8eca35ff1 100644 --- a/src/customemojimodel.cpp +++ b/src/customemojimodel.cpp @@ -1,8 +1,8 @@ // SPDX-FileCopyrightText: 2021 Carson Black // SPDX-License-Identifier: GPL-2.0-or-later -#include "emojimodel.h" #include "customemojimodel_p.h" +#include "emojimodel.h" enum Roles { Name, @@ -10,13 +10,16 @@ enum Roles { ModelData, // for emulating the regular emoji model's usage, otherwise the UI code would get too complicated }; -CustomEmojiModel::CustomEmojiModel(QObject* parent) : QAbstractListModel(parent), d(new Private) +CustomEmojiModel::CustomEmojiModel(QObject *parent) + : QAbstractListModel(parent) + , d(new Private) { connect(this, &CustomEmojiModel::connectionChanged, this, &CustomEmojiModel::fetchEmojies); connect(this, &CustomEmojiModel::connectionChanged, this, [this]() { - if (!d->conn) return; + if (!d->conn) + return; - connect(d->conn, &Connection::accountDataChanged, this, [this](const QString& id) { + connect(d->conn, &Connection::accountDataChanged, this, [this](const QString &id) { if (id != QStringLiteral("im.ponies.user_emotes")) { return; } @@ -27,24 +30,19 @@ CustomEmojiModel::CustomEmojiModel(QObject* parent) : QAbstractListModel(parent) CustomEmojiModel::~CustomEmojiModel() { - } -QVariant CustomEmojiModel::data(const QModelIndex& idx, int role) const +QVariant CustomEmojiModel::data(const QModelIndex &idx, int role) const { const auto row = idx.row(); if (row >= d->emojies.length()) { return QVariant(); } - const auto& data = d->emojies[row]; + const auto &data = d->emojies[row]; switch (Roles(role)) { case Roles::ModelData: - return QVariant::fromValue(Emoji( - QStringLiteral("image://mxc/") + data.url.mid(6), - data.name, - true - )); + return QVariant::fromValue(Emoji(QStringLiteral("image://mxc/") + data.url.mid(6), data.name, true)); case Roles::Name: return data.name; case Roles::ImageURL: @@ -54,28 +52,28 @@ QVariant CustomEmojiModel::data(const QModelIndex& idx, int role) const return QVariant(); } -int CustomEmojiModel::rowCount(const QModelIndex& parent) const +int CustomEmojiModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent) return d->emojies.length(); } -QHash CustomEmojiModel::roleNames() const +QHash CustomEmojiModel::roleNames() const { return { - { Name, "name" }, - { ImageURL, "imageURL" }, - { ModelData, "modelData" }, + {Name, "name"}, + {ImageURL, "imageURL"}, + {ModelData, "modelData"}, }; } -Connection* CustomEmojiModel::connection() const +Connection *CustomEmojiModel::connection() const { return d->conn; } -void CustomEmojiModel::setConnection(Connection* it) +void CustomEmojiModel::setConnection(Connection *it) { if (d->conn == it) { return; @@ -90,8 +88,10 @@ void CustomEmojiModel::setConnection(Connection* it) QString CustomEmojiModel::preprocessText(const QString &it) { auto cp = it; - for (const auto& emoji : qAsConst(d->emojies)) { - cp.replace(emoji.regexp, QStringLiteral(R"(%2)").arg(emoji.url, emoji.name)); + for (const auto &emoji : qAsConst(d->emojies)) { + cp.replace( + emoji.regexp, + QStringLiteral(R"(%2)").arg(emoji.url, emoji.name)); } return cp; } @@ -99,15 +99,13 @@ QString CustomEmojiModel::preprocessText(const QString &it) QVariantList CustomEmojiModel::filterModel(const QString &filter) { QVariantList results; - for (const auto& emoji : qAsConst(d->emojies)) { - if (results.length() >= 10) break; - if (!emoji.name.contains(filter, Qt::CaseInsensitive)) continue; + for (const auto &emoji : qAsConst(d->emojies)) { + if (results.length() >= 10) + break; + if (!emoji.name.contains(filter, Qt::CaseInsensitive)) + continue; - results << QVariant::fromValue(Emoji( - QStringLiteral("image://mxc/") + emoji.url.mid(6), - emoji.name, - true - )); + results << QVariant::fromValue(Emoji(QStringLiteral("image://mxc/") + emoji.url.mid(6), emoji.name, true)); } return results; } diff --git a/src/customemojimodel.h b/src/customemojimodel.h index b2a610b04..028dcd1a9 100644 --- a/src/customemojimodel.h +++ b/src/customemojimodel.h @@ -13,43 +13,39 @@ using namespace Quotient; class CustomEmojiModel : public QAbstractListModel { - Q_OBJECT Q_PROPERTY(Connection *connection READ connection WRITE setConnection NOTIFY connectionChanged) public: - // constructors - explicit CustomEmojiModel(QObject* parent = nullptr); + explicit CustomEmojiModel(QObject *parent = nullptr); ~CustomEmojiModel(); // model - QVariant data(const QModelIndex& idx, int role = Qt::DisplayRole) const override; - int rowCount(const QModelIndex& parent = QModelIndex()) const override; + QVariant data(const QModelIndex &idx, int role = Qt::DisplayRole) const override; + int rowCount(const QModelIndex &parent = QModelIndex()) const override; - QHash roleNames() const override; + QHash roleNames() const override; // property setters - Connection* connection() const; - void setConnection(Connection* it); + Connection *connection() const; + void setConnection(Connection *it); Q_SIGNAL void connectionChanged(); // QML functions - Q_INVOKABLE QString preprocessText(const QString& it); + Q_INVOKABLE QString preprocessText(const QString &it); Q_INVOKABLE QVariantList filterModel(const QString &filter); - Q_INVOKABLE void addEmoji(const QString& name, const QUrl& location); - Q_INVOKABLE void removeEmoji(const QString& name); + Q_INVOKABLE void addEmoji(const QString &name, const QUrl &location); + Q_INVOKABLE void removeEmoji(const QString &name); private: - struct Private; std::unique_ptr d; void fetchEmojies(); - }; diff --git a/src/customemojimodel_p.h b/src/customemojimodel_p.h index a828d1ffe..7f775ead3 100644 --- a/src/customemojimodel_p.h +++ b/src/customemojimodel_p.h @@ -5,15 +5,13 @@ #include "customemojimodel.h" -struct CustomEmoji -{ +struct CustomEmoji { QString name; // with :semicolons: QString url; // mxc:// QRegularExpression regexp; }; -struct CustomEmojiModel::Private -{ - Connection* conn = nullptr; +struct CustomEmojiModel::Private { + Connection *conn = nullptr; QList emojies; }; diff --git a/src/devicesmodel.cpp b/src/devicesmodel.cpp index 14a3a3d9b..336b0efce 100644 --- a/src/devicesmodel.cpp +++ b/src/devicesmodel.cpp @@ -10,8 +10,7 @@ DevicesModel::DevicesModel(QObject *parent) : QAbstractListModel(parent) { - connect(&Controller::instance(), &Controller::activeConnectionChanged, - this, &DevicesModel::fetchDevices); + connect(&Controller::instance(), &Controller::activeConnectionChanged, this, &DevicesModel::fetchDevices); fetchDevices(); } diff --git a/src/login.cpp b/src/login.cpp index 8cdbf06b7..1166a62b0 100644 --- a/src/login.cpp +++ b/src/login.cpp @@ -35,7 +35,7 @@ void Login::init() m_testing = true; Q_EMIT testingChanged(); - if(!m_connection) { + if (!m_connection) { m_connection = new Connection(this); } m_connection->resolveServer(m_matrixId); diff --git a/src/main.cpp b/src/main.cpp index f8b41000c..fb4f426da 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,16 +2,16 @@ // SPDX-License-Identifier: GPL-3.0-only #include +#include #include #include +#include #include #include #include #include #include #include -#include -#include #ifdef Q_OS_ANDROID #include @@ -31,6 +31,7 @@ #include "accountlistmodel.h" #include "actionshandler.h" +#include "blurhashimageprovider.h" #include "chatboxhelper.h" #include "chatdocumenthandler.h" #include "clipboard.h" @@ -38,6 +39,7 @@ #include "controller.h" #include "csapi/joining.h" #include "csapi/leaving.h" +#include "customemojimodel.h" #include "devicesmodel.h" #include "emojimodel.h" #include "filetypesingleton.h" @@ -50,16 +52,14 @@ #include "neochatuser.h" #include "notificationsmanager.h" #include "publicroomlistmodel.h" -#include #include "roomlistmodel.h" #include "roommanager.h" #include "sortfilterroomlistmodel.h" +#include "spellcheckhighlighter.h" #include "userdirectorylistmodel.h" #include "userlistmodel.h" #include "webshortcutmodel.h" -#include "spellcheckhighlighter.h" -#include "customemojimodel.h" -#include "blurhashimageprovider.h" +#include #ifdef HAVE_COLORSCHEME #include "colorschemer.h" #endif @@ -112,27 +112,28 @@ int main(int argc, char *argv[]) about.addAuthor(i18n("Tobias Fella"), QString(), QStringLiteral("fella@posteo.de")); about.setOrganizationDomain("kde.org"); - about.addComponent(QStringLiteral("libQuotient"), i18n("A Qt5 library to write cross-platform clients for Matrix"), QString(), QStringLiteral("https://github.com/quotient-im/libquotient"), KAboutLicense::LGPL_V2_1); + about.addComponent(QStringLiteral("libQuotient"), + i18n("A Qt5 library to write cross-platform clients for Matrix"), + QString(), + QStringLiteral("https://github.com/quotient-im/libquotient"), + KAboutLicense::LGPL_V2_1); KAboutData::setApplicationData(about); QGuiApplication::setWindowIcon(QIcon::fromTheme(QStringLiteral("org.kde.neochat"))); #ifdef HAVE_KDBUSADDONS KDBusService service(KDBusService::Unique); - service.connect(&service, - &KDBusService::activateRequested, - &RoomManager::instance(), - [](const QStringList &arguments, const QString &workingDirectory) { - Q_UNUSED(workingDirectory); - if(arguments.isEmpty()) { - return; - } - auto args = arguments; - args.removeFirst(); - for (const auto &arg : args) { - RoomManager::instance().openResource(arg); - } - }); + service.connect(&service, &KDBusService::activateRequested, &RoomManager::instance(), [](const QStringList &arguments, const QString &workingDirectory) { + Q_UNUSED(workingDirectory); + if (arguments.isEmpty()) { + return; + } + auto args = arguments; + args.removeFirst(); + for (const auto &arg : args) { + RoomManager::instance().openResource(arg); + } + }); #endif #ifdef NEOCHAT_FLATPAK diff --git a/src/matriximageprovider.cpp b/src/matriximageprovider.cpp index 401c0e77d..467b2307b 100644 --- a/src/matriximageprovider.cpp +++ b/src/matriximageprovider.cpp @@ -87,7 +87,7 @@ void ThumbnailResponse::prepareResult() errorStr.clear(); } else if (job->error() == BaseJob::Abandoned) { errorStr = i18n("Image request has been cancelled"); - //qDebug() << "ThumbnailResponse: cancelled for" << mediaId; + // qDebug() << "ThumbnailResponse: cancelled for" << mediaId; } else { errorStr = job->errorString(); qWarning() << "ThumbnailResponse: no valid image for" << mediaId << "-" << errorStr; diff --git a/src/messageeventmodel.cpp b/src/messageeventmodel.cpp index 2f143c897..7ea185e52 100644 --- a/src/messageeventmodel.cpp +++ b/src/messageeventmodel.cpp @@ -18,8 +18,8 @@ #include // for qmlRegisterType() #include -#include #include +#include #include "utils.h" @@ -184,7 +184,7 @@ void MessageEventModel::setRoom(NeoChatRoom *room) beginRemoveRows({}, i, i); }); connect(m_currentRoom, &Room::pendingEventDiscarded, this, &MessageEventModel::endRemoveRows); - connect(m_currentRoom, &Room::readMarkerMoved, this, [=](const QString &fromEventId, const QString &toEventId){ + connect(m_currentRoom, &Room::readMarkerMoved, this, [=](const QString &fromEventId, const QString &toEventId) { Q_UNUSED(fromEventId); moveReadMarker(toEventId); }); @@ -370,7 +370,6 @@ int MessageEventModel::rowCount(const QModelIndex &parent) const } else { return m_currentRoom->timelineSize(); } - } bool MessageEventModel::canFetchMore(const QModelIndex &parent) const @@ -388,7 +387,6 @@ void MessageEventModel::fetchMore(const QModelIndex &parent) } } - inline QVariantMap userAtEvent(NeoChatUser *user, NeoChatRoom *room, const RoomEvent &evt) { Q_UNUSED(evt) @@ -415,22 +413,22 @@ QVariant MessageEventModel::data(const QModelIndex &idx, int role) const bool isPending = row < timelineBaseIndex(); if (m_lastReadEventIndex.row() == row) { - switch(role) { + switch (role) { case EventTypeRole: return QStringLiteral("readMarker"); - case TimeRole: - { - const QDateTime eventDate = data(index(m_lastReadEventIndex.row() + 1, 0), TimeRole).toDateTime(); - const KFormat format; - return format.formatRelativeDateTime(eventDate, QLocale::ShortFormat); - } + case TimeRole: { + const QDateTime eventDate = data(index(m_lastReadEventIndex.row() + 1, 0), TimeRole).toDateTime(); + const KFormat format; + return format.formatRelativeDateTime(eventDate, QLocale::ShortFormat); + } case SpecialMarksRole: return EventStatus::Hidden; } return {}; } - const auto timelineIt = m_currentRoom->messageEvents().crbegin() + std::max(0, row - timelineBaseIndex() - (m_lastReadEventIndex.isValid() && m_lastReadEventIndex.row() < row ? 1 : 0)); + const auto timelineIt = m_currentRoom->messageEvents().crbegin() + + std::max(0, row - timelineBaseIndex() - (m_lastReadEventIndex.isValid() && m_lastReadEventIndex.row() < row ? 1 : 0)); const auto pendingIt = m_currentRoom->pendingEvents().crbegin() + std::min(row, timelineBaseIndex()); const auto &evt = isPending ? **pendingIt : **timelineIt; @@ -684,12 +682,11 @@ QVariant MessageEventModel::data(const QModelIndex &idx, int role) const content = QVariant::fromValue(e->image().originalJson); } - return QVariantMap{ - {"eventId", replyEventId}, - {"display", m_currentRoom->eventToString(replyEvt, Qt::RichText)}, - {"content", content}, - {"type", type}, - {"author", userAtEvent(static_cast(m_currentRoom->user(replyEvt.senderId())), m_currentRoom, evt)}}; + return QVariantMap{{"eventId", replyEventId}, + {"display", m_currentRoom->eventToString(replyEvt, Qt::RichText)}, + {"content", content}, + {"type", type}, + {"author", userAtEvent(static_cast(m_currentRoom->user(replyEvt.senderId())), m_currentRoom, evt)}}; } if (role == ShowAuthorRole) { @@ -759,7 +756,7 @@ int MessageEventModel::eventIDToIndex(const QString &eventID) const { const auto it = m_currentRoom->findInTimeline(eventID); if (it == m_currentRoom->historyEdge()) { - //qWarning() << "Trying to find inexistent event:" << eventID; + // qWarning() << "Trying to find inexistent event:" << eventID; return -1; } return it - m_currentRoom->messageEvents().rbegin() + timelineBaseIndex(); diff --git a/src/neochatroom.cpp b/src/neochatroom.cpp index de4018381..6547ef1bb 100644 --- a/src/neochatroom.cpp +++ b/src/neochatroom.cpp @@ -275,15 +275,13 @@ QVariantList NeoChatRoom::getUsers(const QString &keyword) const return matchedList; } -QVariantMap NeoChatRoom::getUser(const QString& userID) const +QVariantMap NeoChatRoom::getUser(const QString &userID) const { NeoChatUser user(userID, connection()); - return QVariantMap { - { QStringLiteral("id"), user.id() }, - { QStringLiteral("displayName"), user.displayname(this) }, - { QStringLiteral("avatarMediaId"), user.avatarMediaId(this) }, - { QStringLiteral("color"), user.color() } - }; + return QVariantMap{{QStringLiteral("id"), user.id()}, + {QStringLiteral("displayName"), user.displayname(this)}, + {QStringLiteral("avatarMediaId"), user.avatarMediaId(this)}, + {QStringLiteral("color"), user.color()}}; } QUrl NeoChatRoom::urlToMxcUrl(const QUrl &mxcUrl) @@ -328,7 +326,7 @@ QString NeoChatRoom::eventToString(const RoomEvent &evt, Qt::TextFormat format, htmlBody.replace(utils::strikethroughRegExp, "\\1"); auto url = connection()->homeserver(); - auto base = url.scheme() + QStringLiteral("://") + url.host() + (url.port() != -1 ? ':'+QString::number(url.port()) : QString()); + auto base = url.scheme() + QStringLiteral("://") + url.host() + (url.port() != -1 ? ':' + QString::number(url.port()) : QString()); htmlBody.replace(utils::mxcImageRegExp, QStringLiteral(R"( )").arg(base)); return htmlBody; @@ -472,7 +470,7 @@ void NeoChatRoom::changeAvatar(const QUrl &localFile) { const auto job = connection()->uploadFile(localFile.toLocalFile()); #ifdef QUOTIENT_07 - if(isJobPending(job)) { + if (isJobPending(job)) { #else if (isJobRunning(job)) { #endif @@ -553,7 +551,7 @@ QString msgTypeToString(MessageEventType msgType) } } -QString NeoChatRoom::preprocessText(const QString& text) +QString NeoChatRoom::preprocessText(const QString &text) { return markdownToHTML(text); } diff --git a/src/notificationsmanager.cpp b/src/notificationsmanager.cpp index 9a01bd89a..a475c72b1 100644 --- a/src/notificationsmanager.cpp +++ b/src/notificationsmanager.cpp @@ -16,8 +16,8 @@ #endif #include "controller.h" -#include "roommanager.h" #include "neochatconfig.h" +#include "roommanager.h" NotificationsManager &NotificationsManager::instance() { diff --git a/src/roomlistmodel.cpp b/src/roomlistmodel.cpp index e398b1f72..f283c22d9 100644 --- a/src/roomlistmodel.cpp +++ b/src/roomlistmodel.cpp @@ -353,7 +353,7 @@ QVariant RoomListModel::data(const QModelIndex &index, int role) const if (room->isDirectChat()) { return RoomType::Direct; } - const RoomCreateEvent* creationEvent = room->creation(); + const RoomCreateEvent *creationEvent = room->creation(); QJsonObject contentJson = creationEvent->contentJson(); QJsonObject::const_iterator typeIter = contentJson.find("type"); if (typeIter != contentJson.end()) { diff --git a/src/roommanager.cpp b/src/roommanager.cpp index aa2924296..06a6c82e7 100644 --- a/src/roommanager.cpp +++ b/src/roommanager.cpp @@ -3,13 +3,13 @@ // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL #include "roommanager.h" -#include "neochatroom.h" -#include "neochatconfig.h" #include "controller.h" -#include -#include +#include "neochatconfig.h" +#include "neochatroom.h" #include #include +#include +#include #include #include @@ -22,7 +22,8 @@ RoomManager::RoomManager(QObject *parent) } RoomManager::~RoomManager() -{} +{ +} RoomManager &RoomManager::instance() { @@ -37,10 +38,9 @@ NeoChatRoom *RoomManager::currentRoom() const void RoomManager::openResource(const QString &idOrUri, const QString &action) { - Uri uri { idOrUri }; + Uri uri{idOrUri}; if (!uri.isValid()) { - Q_EMIT warning(i18n("Malformed or empty Matrix id"), - i18n("%1 is not a correct Matrix identifier", idOrUri)); + Q_EMIT warning(i18n("Malformed or empty Matrix id"), i18n("%1 is not a correct Matrix identifier", idOrUri)); return; } auto account = Controller::instance().activeConnection(); @@ -57,8 +57,7 @@ void RoomManager::openResource(const QString &idOrUri, const QString &action) const auto result = visitResource(account, uri); if (result == Quotient::CouldNotResolve) { - Q_EMIT warning(i18n("Room not found"), - i18n("There's no room %1 in the room list. Check the spelling and the account.", idOrUri)); + Q_EMIT warning(i18n("Room not found"), i18n("There's no room %1 in the room list. Check the spelling and the account.", idOrUri)); } else { // Invalid cases should have been eliminated earlier Q_ASSERT(result == Quotient::UriResolved); } @@ -89,13 +88,12 @@ void RoomManager::loadInitialRoom() openRoomForActiveConnection(); - connect(&Controller::instance(), &Controller::activeConnectionChanged, - this, &RoomManager::openRoomForActiveConnection); + connect(&Controller::instance(), &Controller::activeConnectionChanged, this, &RoomManager::openRoomForActiveConnection); } void RoomManager::openRoomForActiveConnection() { - if(!Controller::instance().activeConnection()) { + if (!Controller::instance().activeConnection()) { return; } // Read from last open room @@ -110,8 +108,7 @@ void RoomManager::openRoomForActiveConnection() if (!roomId.isEmpty()) { // Here we can cast because the controller has been configured to // return NeoChatRoom instead of simple Quotient::Room - const auto room = qobject_cast( - Controller::instance().activeConnection()->room(roomId)); + const auto room = qobject_cast(Controller::instance().activeConnection()->room(roomId)); if (room) { enterRoom(room); @@ -144,7 +141,7 @@ void RoomManager::openWindow(NeoChatRoom *room) Q_EMIT openRoomInNewWindow(room); } -UriResolveResult RoomManager::visitUser(User* user, const QString &action) +UriResolveResult RoomManager::visitUser(User *user, const QString &action) { if (action == "mention" || action.isEmpty()) { // send it has QVariantMap because the properties in the @@ -186,12 +183,10 @@ void RoomManager::visitRoom(Room *room, const QString &eventId) } } -void RoomManager::joinRoom(Quotient::Connection *account, - const QString &roomAliasOrId, - const QStringList &viaServers) +void RoomManager::joinRoom(Quotient::Connection *account, const QString &roomAliasOrId, const QStringList &viaServers) { account->joinRoom(QUrl::toPercentEncoding(roomAliasOrId), viaServers); - connectSingleShot(account, &Quotient::Connection::newRoom, this, [=](Quotient::Room *room){ + connectSingleShot(account, &Quotient::Connection::newRoom, this, [=](Quotient::Room *room) { enterRoom(dynamic_cast(room)); }); } @@ -199,8 +194,7 @@ void RoomManager::joinRoom(Quotient::Connection *account, bool RoomManager::visitNonMatrix(const QUrl &url) { if (!QDesktopServices::openUrl(url)) { - Q_EMIT warning(i18n("No application for the link"), - i18n("Your operating system could not find an application for the link.")); + Q_EMIT warning(i18n("No application for the link"), i18n("Your operating system could not find an application for the link.")); } return true; } @@ -215,7 +209,7 @@ void RoomManager::reset() void RoomManager::leaveRoom(NeoChatRoom *room) { - if(m_lastCurrentRoom && room->id() == m_lastCurrentRoom->id()) { + if (m_lastCurrentRoom && room->id() == m_lastCurrentRoom->id()) { m_lastCurrentRoom = nullptr; } if (m_currentRoom && m_currentRoom->id() == room->id()) { diff --git a/src/roommanager.h b/src/roommanager.h index 46d221f5b..32a359182 100644 --- a/src/roommanager.h +++ b/src/roommanager.h @@ -3,13 +3,14 @@ #pragma once +#include #include #include -#include class NeoChatRoom; -namespace Quotient { +namespace Quotient +{ class Room; class User; } @@ -53,8 +54,7 @@ public: // Overrided methods from UriResolverBase UriResolveResult visitUser(User *user, const QString &action) override; - void joinRoom(Quotient::Connection *account, const QString &roomAliasOrId, - const QStringList &viaServers) override; + void joinRoom(Quotient::Connection *account, const QString &roomAliasOrId, const QStringList &viaServers) override; Q_INVOKABLE void visitRoom(Quotient::Room *room, const QString &eventId) override; Q_INVOKABLE bool visitNonMatrix(const QUrl &url) override; diff --git a/src/spellcheckhighlighter.cpp b/src/spellcheckhighlighter.cpp index f844cc672..ea5c9e398 100644 --- a/src/spellcheckhighlighter.cpp +++ b/src/spellcheckhighlighter.cpp @@ -79,10 +79,12 @@ SpellcheckHighlighter::SpellcheckHighlighter(QObject *parent) : QSyntaxHighlighter(parent) #ifndef Q_OS_ANDROID , mSpellchecker{new Sonnet::Speller()} - , mLanguageGuesser{new Sonnet::GuessLanguage()} + , mLanguageGuesser +{ + new Sonnet::GuessLanguage() +} #endif - , m_document(nullptr) - , m_cursorPosition(-1) +, m_document(nullptr), m_cursorPosition(-1) { // Danger red from our color scheme mErrorFormat.setForeground(QColor(0xED, 0x15, 0x15)); @@ -232,7 +234,7 @@ QStringList SpellcheckHighlighter::suggestions(int mousePosition, int max) } return suggestions; -#else +#else return QStringList(); #endif } diff --git a/src/userlistmodel.cpp b/src/userlistmodel.cpp index 0a79b45bb..54b0d7b68 100644 --- a/src/userlistmodel.cpp +++ b/src/userlistmodel.cpp @@ -49,7 +49,7 @@ void UserListModel::setRoom(Quotient::Room *room) } for (User *user : qAsConst(m_users)) { #ifdef QUOTIENT_07 - connect(user, &User::defaultAvatarChanged, this, [=](){ + connect(user, &User::defaultAvatarChanged, this, [=]() { avatarChanged(user, m_currentRoom); }); #else @@ -154,7 +154,7 @@ void UserListModel::userAdded(Quotient::User *user) m_users.insert(pos, user); endInsertRows(); #ifdef QUOTIENT_07 - connect(user, &User::defaultAvatarChanged, this, [=](){ + connect(user, &User::defaultAvatarChanged, this, [=]() { avatarChanged(user, m_currentRoom); }); #else diff --git a/src/webshortcutmodel.cpp b/src/webshortcutmodel.cpp index eb1690ccd..a86082ec9 100644 --- a/src/webshortcutmodel.cpp +++ b/src/webshortcutmodel.cpp @@ -5,13 +5,12 @@ #include "webshortcutmodel.h" #ifdef HAVE_KIO -#include #include +#include #endif #include -struct KWebShortcutModelPrivate -{ +struct KWebShortcutModelPrivate { QString selectedText; #ifdef HAVE_KIO KUriFilterData filterData; @@ -29,7 +28,6 @@ KWebShortcutModel::~KWebShortcutModel() { } - QString KWebShortcutModel::selectedText() const { return d->selectedText; @@ -101,12 +99,12 @@ QVariant KWebShortcutModel::data(const QModelIndex &index, int role) const #ifdef HAVE_KIO switch (role) { - case Qt::DisplayRole: - return d->searchProviders[index.row()]; - case Qt::DecorationRole: - return d->filterData.iconNameForPreferredSearchProvider(d->searchProviders[index.row()]); - case Qt::EditRole: - return d->filterData.queryForPreferredSearchProvider(d->searchProviders[index.row()]); + case Qt::DisplayRole: + return d->searchProviders[index.row()]; + case Qt::DecorationRole: + return d->filterData.iconNameForPreferredSearchProvider(d->searchProviders[index.row()]); + case Qt::EditRole: + return d->filterData.queryForPreferredSearchProvider(d->searchProviders[index.row()]); } #endif return {}; @@ -115,10 +113,10 @@ QVariant KWebShortcutModel::data(const QModelIndex &index, int role) const void KWebShortcutModel::trigger(const QString &data) { #ifdef HAVE_KIO - KUriFilterData filterData(data); - if (KUriFilter::self()->filterSearchUri(filterData, KUriFilter::WebShortcutFilter)) { + KUriFilterData filterData(data); + if (KUriFilter::self()->filterSearchUri(filterData, KUriFilter::WebShortcutFilter)) { Q_EMIT openUrl(filterData.uri().url()); - } + } #else Q_UNUSED(data); #endif @@ -127,7 +125,7 @@ void KWebShortcutModel::trigger(const QString &data) void KWebShortcutModel::configureWebShortcuts() { #ifdef HAVE_KIO - auto job = new KIO::CommandLauncherJob("kcmshell5", QStringList() << "webshortcuts", this); - job->exec(); + auto job = new KIO::CommandLauncherJob("kcmshell5", QStringList() << "webshortcuts", this); + job->exec(); #endif } diff --git a/src/webshortcutmodel.h b/src/webshortcutmodel.h index 03f07faa2..0b54fb4dd 100644 --- a/src/webshortcutmodel.h +++ b/src/webshortcutmodel.h @@ -62,6 +62,7 @@ public: Q_SIGNALS: void selectedTextChanged(); void openUrl(const QUrl &url); + private: std::unique_ptr d; };