diff options
author | Konstantinos Sideris <sideris.konstantin@gmail.com> | 2018-05-08 18:43:56 +0300 |
---|---|---|
committer | Konstantinos Sideris <sideris.konstantin@gmail.com> | 2018-05-08 18:43:56 +0300 |
commit | 4c4ea557b344b035507652cfbc3b616904f958e9 (patch) | |
tree | e8e610bfdaebb0ffb3a472f89b699bc3f65852b8 | |
parent | ffb43836e4a71718949b4971b42f402931845625 (diff) |
Replace shared pointers of MatrixClient with a single instance
31 files changed, 196 insertions, 269 deletions
diff --git a/cmake/CompilerFlags.cmake b/cmake/CompilerFlags.cmake index 2aa92e54..f5860a99 100644 --- a/cmake/CompilerFlags.cmake +++ b/cmake/CompilerFlags.cmake @@ -4,6 +4,7 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU") -Wextra \ -Werror \ -pipe \ + -Wno-unused-function \ -pedantic \ -Wunreachable-code") diff --git a/include/AvatarProvider.h b/include/AvatarProvider.h index fd5f15c4..af13a577 100644 --- a/include/AvatarProvider.h +++ b/include/AvatarProvider.h @@ -22,7 +22,6 @@ #include <QSharedPointer> #include <functional> -class MatrixClient; class TimelineItem; class Cache; @@ -31,11 +30,7 @@ class AvatarProvider : public QObject Q_OBJECT public: - static void init(QSharedPointer<MatrixClient> client, QSharedPointer<Cache> cache) - { - client_ = client; - cache_ = cache; - } + static void init(QSharedPointer<Cache> cache) { cache_ = cache; } //! The callback is called with the downloaded avatar for the given user //! or the avatar is downloaded first and then saved for re-use. static void resolve(const QString &room_id, @@ -44,6 +39,5 @@ public: std::function<void(QImage)> callback); private: - static QSharedPointer<MatrixClient> client_; static QSharedPointer<Cache> cache_; }; diff --git a/include/ChatPage.h b/include/ChatPage.h index 6e0cf2d9..057ce698 100644 --- a/include/ChatPage.h +++ b/include/ChatPage.h @@ -30,7 +30,6 @@ #include <mtx.hpp> -class MatrixClient; class OverlayModal; class QuickSwitcher; class RoomList; @@ -59,9 +58,7 @@ class ChatPage : public QWidget Q_OBJECT public: - ChatPage(QSharedPointer<MatrixClient> client, - QSharedPointer<UserSettings> userSettings, - QWidget *parent = 0); + ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent = 0); // Initialize all the components of the UI. void bootstrap(QString userid, QString homeserver, QString token); @@ -70,14 +67,6 @@ public: QString currentRoom() const { return current_room_; } static ChatPage *instance() { return instance_; } - void readEvent(const QString &room_id, const QString &event_id) - { - client_->readEvent(room_id, event_id); - } - void redactEvent(const QString &room_id, const QString &event_id) - { - client_->redactEvent(room_id, event_id); - } QSharedPointer<UserSettings> userSettings() { return userSettings_; } QSharedPointer<Cache> cache() { return cache_; } @@ -192,9 +181,6 @@ private: QSharedPointer<dialogs::ReadReceipts> receiptsDialog_; QSharedPointer<OverlayModal> receiptsModal_; - // Matrix Client API provider. - QSharedPointer<MatrixClient> client_; - // Global user settings. QSharedPointer<UserSettings> userSettings_; diff --git a/include/CommunitiesList.h b/include/CommunitiesList.h index 81408f58..3299e7c4 100644 --- a/include/CommunitiesList.h +++ b/include/CommunitiesList.h @@ -6,7 +6,6 @@ #include "CommunitiesListItem.h" #include "Community.h" -#include "MatrixClient.h" #include "ui/Theme.h" class CommunitiesList : public QWidget @@ -14,7 +13,7 @@ class CommunitiesList : public QWidget Q_OBJECT public: - CommunitiesList(QSharedPointer<MatrixClient> client, QWidget *parent = nullptr); + CommunitiesList(QWidget *parent = nullptr); void setCommunities(const std::map<QString, QSharedPointer<Community>> &communities); void clear() { communities_.clear(); } @@ -44,6 +43,4 @@ private: QScrollArea *scrollArea_; std::map<QString, QSharedPointer<CommunitiesListItem>> communities_; - - QSharedPointer<MatrixClient> client_; }; diff --git a/include/LoginPage.h b/include/LoginPage.h index 34835229..34a08df9 100644 --- a/include/LoginPage.h +++ b/include/LoginPage.h @@ -24,7 +24,6 @@ class FlatButton; class LoadingIndicator; -class MatrixClient; class OverlayModal; class RaisedButton; class TextField; @@ -34,7 +33,7 @@ class LoginPage : public QWidget Q_OBJECT public: - LoginPage(QSharedPointer<MatrixClient> client, QWidget *parent = 0); + LoginPage(QWidget *parent = 0); void reset(); @@ -97,7 +96,4 @@ private: TextField *matrixid_input_; TextField *password_input_; TextField *serverInput_; - - // Matrix client API provider. - QSharedPointer<MatrixClient> client_; }; diff --git a/include/MainWindow.h b/include/MainWindow.h index 1ffbe850..0fbc7567 100644 --- a/include/MainWindow.h +++ b/include/MainWindow.h @@ -31,7 +31,6 @@ class ChatPage; class LoadingIndicator; -class MatrixClient; class OverlayModal; class SnackBar; class TrayIcon; @@ -125,8 +124,6 @@ private: //! Used to hide undefined states between page transitions. QSharedPointer<OverlayModal> progressModal_; QSharedPointer<LoadingIndicator> spinner_; - //! Matrix Client API provider. - QSharedPointer<MatrixClient> client_; //! Tray icon that shows the unread message count. TrayIcon *trayIcon_; //! Notifications display. diff --git a/include/MatrixClient.h b/include/MatrixClient.h index 35f05c31..6ed1c2c8 100644 --- a/include/MatrixClient.h +++ b/include/MatrixClient.h @@ -43,7 +43,7 @@ class MatrixClient : public QNetworkAccessManager { Q_OBJECT public: - MatrixClient(QString server, QObject *parent = 0); + MatrixClient(QObject *parent = 0); // Client API. void initialSync() noexcept; @@ -211,3 +211,13 @@ private: //! Filter to be send as filter-param for (initial) /sync requests. QString filter_; }; + +namespace http { +//! Initialize the http module +void +init(QObject *parent); + +//! Retrieve the client instance. +MatrixClient * +client(); +} diff --git a/include/RegisterPage.h b/include/RegisterPage.h index 32f2fcf2..f4d97816 100644 --- a/include/RegisterPage.h +++ b/include/RegisterPage.h @@ -23,7 +23,6 @@ #include <memory> class FlatButton; -class MatrixClient; class RaisedButton; class TextField; @@ -36,7 +35,7 @@ class RegisterPage : public QWidget Q_OBJECT public: - RegisterPage(QSharedPointer<MatrixClient> client, QWidget *parent = 0); + RegisterPage(QWidget *parent = 0); protected: void paintEvent(QPaintEvent *event) override; @@ -75,8 +74,6 @@ private: TextField *password_confirmation_; TextField *server_input_; - // Matrix client API provider. - QSharedPointer<MatrixClient> client_; //! ReCaptcha dialog. std::shared_ptr<dialogs::ReCaptcha> captchaDialog_; }; diff --git a/include/RoomList.h b/include/RoomList.h index bdfb7218..202e075c 100644 --- a/include/RoomList.h +++ b/include/RoomList.h @@ -26,7 +26,6 @@ #include <mtx.hpp> class LeaveRoomDialog; -class MatrixClient; class OverlayModal; class RoomInfoListItem; class Sync; @@ -40,9 +39,7 @@ class RoomList : public QWidget Q_OBJECT public: - RoomList(QSharedPointer<MatrixClient> client, - QSharedPointer<UserSettings> userSettings, - QWidget *parent = 0); + RoomList(QSharedPointer<UserSettings> userSettings, QWidget *parent = 0); void setCache(QSharedPointer<Cache> cache) { cache_ = cache; } void initialize(const QMap<QString, RoomInfo> &info); @@ -105,7 +102,6 @@ private: //! Which rooms to include in the room list. std::vector<QString> roomFilter_; - QSharedPointer<MatrixClient> client_; QSharedPointer<Cache> cache_; QSharedPointer<UserSettings> userSettings_; diff --git a/include/timeline/TimelineItem.h b/include/timeline/TimelineItem.h index 82ff5ca7..064dead4 100644 --- a/include/timeline/TimelineItem.h +++ b/include/timeline/TimelineItem.h @@ -26,11 +26,11 @@ #include <QStyleOption> #include "AvatarProvider.h" -#include "ChatPage.h" #include "RoomInfoListItem.h" #include "Utils.h" #include "Cache.h" +#include "MatrixClient.h" class ImageItem; class StickerItem; @@ -121,7 +121,7 @@ public: void sendReadReceipt() const { if (!event_id_.isEmpty()) - ChatPage::instance()->readEvent(room_id_, event_id_); + http::client()->readEvent(room_id_, event_id_); } //! Add a user avatar for this event. diff --git a/include/timeline/TimelineView.h b/include/timeline/TimelineView.h index 02e2872a..2ad00058 100644 --- a/include/timeline/TimelineView.h +++ b/include/timeline/TimelineView.h @@ -25,6 +25,7 @@ #include <QScrollArea> #include <QStyle> #include <QStyleOption> +#include <QTimer> #include <mtx/events.hpp> #include <mtx/responses/messages.hpp> @@ -117,12 +118,9 @@ class TimelineView : public QWidget public: TimelineView(const mtx::responses::Timeline &timeline, - QSharedPointer<MatrixClient> client, - const QString &room_id, - QWidget *parent = 0); - TimelineView(QSharedPointer<MatrixClient> client, const QString &room_id, QWidget *parent = 0); + TimelineView(const QString &room_id, QWidget *parent = 0); // Add new events at the end of the timeline. void addEvents(const mtx::responses::Timeline &timeline); @@ -298,7 +296,6 @@ private: QMap<QString, TimelineItem *> eventIds_; QQueue<PendingMessage> pending_msgs_; QList<PendingMessage> pending_sent_msgs_; - QSharedPointer<MatrixClient> client_; }; template<class Widget, mtx::events::MessageType MsgType> @@ -311,7 +308,7 @@ TimelineView::addUserMessage(const QString &url, auto with_sender = (lastSender_ != local_user_) || isDateDifference(lastMsgTimestamp_); auto trimmed = QFileInfo{filename}.fileName(); // Trim file path. - auto widget = new Widget(client_, url, trimmed, size, this); + auto widget = new Widget(url, trimmed, size, this); TimelineItem *view_item = new TimelineItem(widget, local_user_, with_sender, room_id_, scroll_widget_); @@ -325,7 +322,7 @@ TimelineView::addUserMessage(const QString &url, // Keep track of the sender and the timestamp of the current message. saveLastMessageInfo(local_user_, QDateTime::currentDateTime()); - int txn_id = client_->incrementTransactionId(); + int txn_id = http::client()->incrementTransactionId(); PendingMessage message(MsgType, txn_id, url, trimmed, mime, size, "", view_item); handleNewUserMessage(message); @@ -343,7 +340,7 @@ template<class Event, class Widget> TimelineItem * TimelineView::createTimelineItem(const Event &event, bool withSender) { - auto eventWidget = new Widget(client_, event); + auto eventWidget = new Widget(event); auto item = new TimelineItem(eventWidget, event, withSender, room_id_, scroll_widget_); return item; diff --git a/include/timeline/TimelineViewManager.h b/include/timeline/TimelineViewManager.h index 4c994098..308b83aa 100644 --- a/include/timeline/TimelineViewManager.h +++ b/include/timeline/TimelineViewManager.h @@ -24,7 +24,6 @@ class QFile; -class MatrixClient; class RoomInfoListItem; class TimelineView; struct DescInfo; @@ -34,7 +33,7 @@ class TimelineViewManager : public QStackedWidget Q_OBJECT public: - TimelineViewManager(QSharedPointer<MatrixClient> client, QWidget *parent); + TimelineViewManager(QWidget *parent); // Initialize with timeline events. void initialize(const mtx::responses::Rooms &rooms); @@ -91,5 +90,4 @@ private: QString active_room_; std::map<QString, QSharedPointer<TimelineView>> views_; - QSharedPointer<MatrixClient> client_; }; diff --git a/include/timeline/widgets/AudioItem.h b/include/timeline/widgets/AudioItem.h index b1d47dd5..1020c3e5 100644 --- a/include/timeline/widgets/AudioItem.h +++ b/include/timeline/widgets/AudioItem.h @@ -24,8 +24,6 @@ #include <QSharedPointer> #include <QWidget> -#include "MatrixClient.h" - #include <mtx.hpp> class AudioItem : public QWidget @@ -42,12 +40,10 @@ class AudioItem : public QWidget durationForegroundColor) public: - AudioItem(QSharedPointer<MatrixClient> client, - const mtx::events::RoomEvent<mtx::events::msg::Audio> &event, + AudioItem(const mtx::events::RoomEvent<mtx::events::msg::Audio> &event, QWidget *parent = nullptr); - AudioItem(QSharedPointer<MatrixClient> client, - const QString &url, + AudioItem(const QString &url, const QString &filename, uint64_t size, QWidget *parent = nullptr); @@ -90,7 +86,6 @@ private: QString filenameToSave_; mtx::events::RoomEvent<mtx::events::msg::Audio> event_; - QSharedPointer<MatrixClient> client_; QMediaPlayer *player_; diff --git a/include/timeline/widgets/FileItem.h b/include/timeline/widgets/FileItem.h index bc75913d..4f590df6 100644 --- a/include/timeline/widgets/FileItem.h +++ b/include/timeline/widgets/FileItem.h @@ -25,8 +25,6 @@ #include <mtx.hpp> -#include "MatrixClient.h" - class FileItem : public QWidget { Q_OBJECT @@ -36,12 +34,10 @@ class FileItem : public QWidget Q_PROPERTY(QColor backgroundColor WRITE setBackgroundColor READ backgroundColor) public: - FileItem(QSharedPointer<MatrixClient> client, - const mtx::events::RoomEvent<mtx::events::msg::File> &event, + FileItem(const mtx::events::RoomEvent<mtx::events::msg::File> &event, QWidget *parent = nullptr); - FileItem(QSharedPointer<MatrixClient> client, - const QString &url, + FileItem(const QString &url, const QString &filename, uint64_t size, QWidget *parent = nullptr); @@ -71,7 +67,6 @@ private: QString filenameToSave_; mtx::events::RoomEvent<mtx::events::msg::File> event_; - QSharedPointer<MatrixClient> client_; QIcon icon_; diff --git a/include/timeline/widgets/ImageItem.h b/include/timeline/widgets/ImageItem.h index 146aa7f6..b17b2d8b 100644 --- a/include/timeline/widgets/ImageItem.h +++ b/include/timeline/widgets/ImageItem.h @@ -24,8 +24,6 @@ #include <mtx.hpp> -#include "MatrixClient.h" - namespace dialogs { class ImageOverlay; } @@ -34,12 +32,10 @@ class ImageItem : public QWidget { Q_OBJECT public: - ImageItem(QSharedPointer<MatrixClient> client, - const mtx::events::RoomEvent<mtx::events::msg::Image> &event, + ImageItem(const mtx::events::RoomEvent<mtx::events::msg::Image> &event, QWidget *parent = nullptr); - ImageItem(QSharedPointer<MatrixClient> client, - const QString &url, + ImageItem(const QString &url, const QString &filename, uint64_t size, QWidget *parent = nullptr); @@ -81,8 +77,6 @@ private: QRectF imageRegion_; mtx::events::RoomEvent<mtx::events::msg::Image> event_; - - QSharedPointer<MatrixClient> client_; }; class StickerItem : public ImageItem @@ -90,11 +84,8 @@ class StickerItem : public ImageItem Q_OBJECT public: - StickerItem(QSharedPointer<MatrixClient> client, - const mtx::events::Sticker &event, - QWidget *parent = nullptr) - : ImageItem{client, - QString::fromStdString(event.content.url), + StickerItem(const mtx::events::Sticker &event, QWidget *parent = nullptr) + : ImageItem{QString::fromStdString(event.content.url), QString::fromStdString(event.content.body), event.content.info.size, parent} diff --git a/include/timeline/widgets/VideoItem.h b/include/timeline/widgets/VideoItem.h index 89732975..26fa1c35 100644 --- a/include/timeline/widgets/VideoItem.h +++ b/include/timeline/widgets/VideoItem.h @@ -20,10 +20,9 @@ #include <QEvent> #include <QLabel> #include <QSharedPointer> +#include <QUrl> #include <QWidget> -#include "MatrixClient.h" - #include <mtx.hpp> class VideoItem : public QWidget @@ -31,12 +30,10 @@ class VideoItem : public QWidget Q_OBJECT public: - VideoItem(QSharedPointer<MatrixClient> client, - const mtx::events::RoomEvent<mtx::events::msg::Video> &event, + VideoItem(const mtx::events::RoomEvent<mtx::events::msg::Video> &event, QWidget *parent = nullptr); - VideoItem(QSharedPointer<MatrixClient> client, - const QString &url, + VideoItem(const QString &url, const QString &filename, uint64_t size, QWidget *parent = nullptr); @@ -51,5 +48,4 @@ private: QLabel *label_; mtx::events::RoomEvent<mtx::events::msg::Video> event_; - QSharedPointer<MatrixClient> client_; }; diff --git a/src/AvatarProvider.cc b/src/AvatarProvider.cc index c7745239..51ff27ac 100644 --- a/src/AvatarProvider.cc +++ b/src/AvatarProvider.cc @@ -22,7 +22,6 @@ #include "Cache.h" #include "MatrixClient.h" -QSharedPointer<MatrixClient> AvatarProvider::client_; QSharedPointer<Cache> AvatarProvider::cache_; void @@ -46,7 +45,7 @@ AvatarProvider::resolve(const QString &room_id, return; } - auto proxy = client_->fetchUserAvatar(avatarUrl); + auto proxy = http::client()->fetchUserAvatar(avatarUrl); if (proxy.isNull()) return; diff --git a/src/ChatPage.cc b/src/ChatPage.cc index 1f5fa995..649d783c 100644 --- a/src/ChatPage.cc +++ b/src/ChatPage.cc @@ -48,11 +48,8 @@ constexpr int INITIAL_SYNC_RETRY_TIMEOUT = 240 * 1000; ChatPage *ChatPage::instance_ = nullptr; -ChatPage::ChatPage(QSharedPointer<MatrixClient> client, - QSharedPointer<UserSettings> userSettings, - QWidget *parent) +ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent) : QWidget(parent) - , client_(client) , userSettings_{userSettings} { setObjectName("chatPage"); @@ -61,7 +58,7 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, topLayout_->setSpacing(0); topLayout_->setMargin(0); - communitiesList_ = new CommunitiesList(client, this); + communitiesList_ = new CommunitiesList(this); topLayout_->addWidget(communitiesList_); auto splitter = new Splitter(this); @@ -82,12 +79,12 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, connect( sidebarActions_, &SideBarActions::showSettings, this, &ChatPage::showUserSettingsPage); connect( - sidebarActions_, &SideBarActions::joinRoom, client_.data(), &MatrixClient::joinRoom); + sidebarActions_, &SideBarActions::joinRoom, http::client(), &MatrixClient::joinRoom); connect( - sidebarActions_, &SideBarActions::createRoom, client_.data(), &MatrixClient::createRoom); + sidebarActions_, &SideBarActions::createRoom, http::client(), &MatrixClient::createRoom); user_info_widget_ = new UserInfoWidget(sideBar_); - room_list_ = new RoomList(client, userSettings_, sideBar_); + room_list_ = new RoomList(userSettings_, sideBar_); sideBarLayout_->addWidget(user_info_widget_); sideBarLayout_->addWidget(room_list_); @@ -105,7 +102,7 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, contentLayout_->setMargin(0); top_bar_ = new TopRoomBar(this); - view_manager_ = new TimelineViewManager(client, this); + view_manager_ = new TimelineViewManager(this); contentLayout_->addWidget(top_bar_); contentLayout_->addWidget(view_manager_); @@ -124,15 +121,15 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, typingRefresher_->setInterval(TYPING_REFRESH_TIMEOUT); connect(user_info_widget_, &UserInfoWidget::logout, this, [this]() { - client_->logout(); + http::client()->logout(); emit showOverlayProgressBar(); }); - connect(client_.data(), &MatrixClient::loggedOut, this, &ChatPage::logout); + connect(http::client(), &MatrixClient::loggedOut, this, &ChatPage::logout); connect(top_bar_, &TopRoomBar::inviteUsers, this, [this](QStringList users) { for (int ii = 0; ii < users.size(); ++ii) { QTimer::singleShot(ii * 1000, this, [this, ii, users]() { - client_->inviteUser(current_room_, users.at(ii)); + http::client()->inviteUser(current_room_, users.at(ii)); }); } }); @@ -158,12 +155,12 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, connect(room_list_, &RoomList::acceptInvite, this, [this](const QString &room_id) { view_manager_->addRoom(room_id); - client_->joinRoom(room_id); + http::client()->joinRoom(room_id); room_list_->removeRoom(room_id, currentRoom() == room_id); }); connect(room_list_, &RoomList::declineInvite, this, [this](const QString &room_id) { - client_->leaveRoom(room_id); + http::client()->leaveRoom(room_id); room_list_->removeRoom(room_id, currentRoom() == room_id); }); @@ -172,7 +169,7 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, return; typingRefresher_->start(); - client_->sendTypingNotification(current_room_); + http::client()->sendTypingNotification(current_room_); }); connect(text_input_, &TextInputWidget::stoppedTyping, this, [this]() { @@ -180,14 +177,14 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, return; typingRefresher_->stop(); - client_->removeTypingNotification(current_room_); + http::client()->removeTypingNotification(current_room_); }); connect(typingRefresher_, &QTimer::timeout, this, [this]() { if (!userSettings_->isTypingNotificationsEnabled()) return; - client_->sendTypingNotification(current_room_); + http::client()->sendTypingNotification(current_room_); }); connect(view_manager_, @@ -212,45 +209,45 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, connect(text_input_, &TextInputWidget::sendJoinRoomRequest, - client_.data(), + http::client(), &MatrixClient::joinRoom); connect(text_input_, &TextInputWidget::uploadImage, this, [this](QSharedPointer<QIODevice> data, const QString &fn) { - client_->uploadImage(current_room_, fn, data); + http::client()->uploadImage(current_room_, fn, data); }); connect(text_input_, &TextInputWidget::uploadFile, this, [this](QSharedPointer<QIODevice> data, const QString &fn) { - |