summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-05-08 18:43:56 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-05-08 18:43:56 +0300
commit4c4ea557b344b035507652cfbc3b616904f958e9 (patch)
treee8e610bfdaebb0ffb3a472f89b699bc3f65852b8 /src
parentRemove the pseudo deb & rpm packages from releases (diff)
downloadnheko-4c4ea557b344b035507652cfbc3b616904f958e9.tar.xz
Replace shared pointers of MatrixClient with a single instance
Diffstat (limited to 'src')
-rw-r--r--src/AvatarProvider.cc3
-rw-r--r--src/ChatPage.cc111
-rw-r--r--src/CommunitiesList.cc20
-rw-r--r--src/LoginPage.cc25
-rw-r--r--src/MainWindow.cc18
-rw-r--r--src/MatrixClient.cc24
-rw-r--r--src/RegisterPage.cc12
-rw-r--r--src/RoomList.cc11
-rw-r--r--src/timeline/TimelineItem.cc4
-rw-r--r--src/timeline/TimelineView.cc24
-rw-r--r--src/timeline/TimelineViewManager.cc13
-rw-r--r--src/timeline/widgets/AudioItem.cc17
-rw-r--r--src/timeline/widgets/FileItem.cc17
-rw-r--r--src/timeline/widgets/ImageItem.cc23
-rw-r--r--src/timeline/widgets/VideoItem.cc15
15 files changed, 159 insertions, 178 deletions
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) { - client_->uploadFile(current_room_, fn, data); + http::client()->uploadFile(current_room_, fn, data); }); connect(text_input_, &TextInputWidget::uploadAudio, this, [this](QSharedPointer<QIODevice> data, const QString &fn) { - client_->uploadAudio(current_room_, fn, data); + http::client()->uploadAudio(current_room_, fn, data); }); connect(text_input_, &TextInputWidget::uploadVideo, this, [this](QSharedPointer<QIODevice> data, const QString &fn) { - client_->uploadVideo(current_room_, fn, data); + http::client()->uploadVideo(current_room_, fn, data); }); connect( - client_.data(), &MatrixClient::roomCreationFailed, this, &ChatPage::showNotification); - connect(client_.data(), &MatrixClient::joinFailed, this, &ChatPage::showNotification); - connect(client_.data(), &MatrixClient::uploadFailed, this, [this](int, const QString &msg) { + http::client(), &MatrixClient::roomCreationFailed, this, &ChatPage::showNotification); + connect(http::client(), &MatrixClient::joinFailed, this, &ChatPage::showNotification); + connect(http::client(), &MatrixClient::uploadFailed, this, [this](int, const QString &msg) { text_input_->hideUploadSpinner(); emit showNotification(msg); }); connect( - client_.data(), + http::client(), &MatrixClient::imageUploaded, this, [this](QString roomid, QString filename, QString url, QString mime, uint64_t dsize) { @@ -258,7 +255,7 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, view_manager_->queueImageMessage(roomid, filename, url, mime, dsize); }); connect( - client_.data(), + http::client(), &MatrixClient::fileUploaded, this, [this](QString roomid, QString filename, QString url, QString mime, uint64_t dsize) { @@ -266,7 +263,7 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, view_manager_->queueFileMessage(roomid, filename, url, mime, dsize); }); connect( - client_.data(), + http::client(), &MatrixClient::audioUploaded, this, [this](QString roomid, QString filename, QString url, QString mime, uint64_t dsize) { @@ -274,7 +271,7 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, view_manager_->queueAudioMessage(roomid, filename, url, mime, dsize); }); connect( - client_.data(), + http::client(), &MatrixClient::videoUploaded, this, [this](QString roomid, QString filename, QString url, QString mime, uint64_t dsize) { @@ -284,28 +281,28 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, connect(room_list_, &RoomList::roomAvatarChanged, this, &ChatPage::updateTopBarAvatar); - connect(client_.data(), + connect(http::client(), &MatrixClient::initialSyncCompleted, this, &ChatPage::initialSyncCompleted); connect( - client_.data(), &MatrixClient::initialSyncFailed, this, &ChatPage::retryInitialSync); - connect(client_.data(), &MatrixClient::syncCompleted, this, &ChatPage::syncCompleted); - connect(client_.data(), + http::client(), &MatrixClient::initialSyncFailed, this, &ChatPage::retryInitialSync); + connect(http::client(), &MatrixClient::syncCompleted, this, &ChatPage::syncCompleted); + connect(http::client(), &MatrixClient::getOwnProfileResponse, this, &ChatPage::updateOwnProfileInfo); - connect(client_.data(), + connect(http::client(), SIGNAL(getOwnCommunitiesResponse(QList<QString>)), this, SLOT(updateOwnCommunitiesInfo(QList<QString>))); - connect(client_.data(), + connect(http::client(), &MatrixClient::communityProfileRetrieved, this, [this](QString communityId, QJsonObject profile) { communities_[communityId]->parseProfile(profile); }); - connect(client_.data(), + connect(http::client(), &MatrixClient::communityRoomsRetrieved, this, [this](QString communityId, QJsonObject rooms) { @@ -321,7 +318,7 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, } }); - connect(client_.data(), &MatrixClient::joinedRoom, this, [this](const QString &room_id) { + connect(http::client(), &MatrixClient::joinedRoom, this, [this](const QString &room_id) { emit showNotification("You joined the room."); // We remove any invites with the same room_id. @@ -332,17 +329,17 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, .arg(QString::fromStdString(e.what()))); } }); - connect(client_.data(), &MatrixClient::leftRoom, this, &ChatPage::removeRoom); - connect(client_.data(), &MatrixClient::invitedUser, this, [this](QString, QString user) { + connect(http::client(), &MatrixClient::leftRoom, this, &ChatPage::removeRoom); + connect(http::client(), &MatrixClient::invitedUser, this, [this](QString, QString user) { emit showNotification(QString("Invited user %1").arg(user)); }); - connect(client_.data(), &MatrixClient::roomCreated, this, [this](QString room_id) { + connect(http::client(), &MatrixClient::roomCreated, this, [this](QString room_id) { emit showNotification(QString("Room %1 created").arg(room_id)); }); - connect(client_.data(), &MatrixClient::redactionFailed, this, [this](const QString &error) { + connect(http::client(), &MatrixClient::redactionFailed, this, [this](const QString &error) { emit showNotification(QString("Message redaction failed: %1").arg(error)); }); - connect(client_.data(), + connect(http::client(), &MatrixClient::notificationsRetrieved, this, &ChatPage::sendDesktopNotifications); @@ -369,13 +366,13 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, syncTimeoutTimer_ = new QTimer(this); connect(syncTimeoutTimer_, &QTimer::timeout, this, [this]() { - if (client_->getHomeServer().isEmpty()) { + if (http::client()->getHomeServer().isEmpty()) { syncTimeoutTimer_->stop(); return; } qDebug() << "Sync took too long. Retrying..."; - client_->sync(); + http::client()->sync(); }); connect(communitiesList_, @@ -399,8 +396,8 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, connect(this, &ChatPage::continueSync, this, [this](const QString &next_batch) { syncTimeoutTimer_->start(SYNC_RETRY_TIMEOUT); - client_->setNextBatchToken(next_batch); - client_->sync(); + http::client()->setNextBatchToken(next_batch); + http::client()->sync(); }); connect(this, &ChatPage::startConsesusTimer, this, [this]() { @@ -440,7 +437,7 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, } if (hasNotifications) - client_->getNotifications(); + http::client()->getNotifications(); }); connect(this, &ChatPage::syncRoomlist, room_list_, &RoomList::sync); @@ -489,22 +486,22 @@ ChatPage::deleteConfigs() cache_->deleteData(); - client_->reset(); + http::client()->reset(); } void ChatPage::bootstrap(QString userid, QString homeserver, QString token) { - client_->setServer(homeserver); - client_->setAccessToken(token); - client_->getOwnProfile(); - client_->getOwnCommunities(); + http::client()->setServer(homeserver); + http::client()->setAccessToken(token); + http::client()->getOwnProfile(); + http::client()->getOwnCommunities(); cache_ = QSharedPointer<Cache>(new Cache(userid)); room_list_->setCache(cache_); text_input_->setCache(cache_); - AvatarProvider::init(client_, cache_); + AvatarProvider::init(cache_); try { cache_->setup(); @@ -525,7 +522,7 @@ ChatPage::bootstrap(QString userid, QString homeserver, QString token) qInfo() << "Falling back to initial sync ..."; } - client_->initialSync(); + http::client()->initialSync(); initialSyncTimer_->start(INITIAL_SYNC_RETRY_TIMEOUT); } @@ -602,7 +599,7 @@ ChatPage::updateOwnProfileInfo(const QUrl &avatar_url, const QString &display_na } } - auto proxy = client_->fetchUserAvatar(avatar_url); + auto proxy = http::client()->fetchUserAvatar(avatar_url); if (proxy.isNull()) return; @@ -825,7 +822,7 @@ ChatPage::retryInitialSync(int status_code) { initialSyncTimer_->stop(); - if (client_->getHomeServer().isEmpty()) { + if (http::client()->getHomeServer().isEmpty()) { deleteConfigs(); resetUI(); emit showLoginPage("Sync error. Please try again."); @@ -836,7 +833,7 @@ ChatPage::retryInitialSync(int status_code) if (status_code == -1 || status_code == 504 || status_code == 502 || status_code == 524) { qWarning() << "retrying initial sync"; - client_->initialSync(); + http::client()->initialSync(); initialSyncTimer_->start(INITIAL_SYNC_RETRY_TIMEOUT); } else { // Drop into the login screen. diff --git a/src/CommunitiesList.cc b/src/CommunitiesList.cc
index 25021ba4..0d7f5aab 100644 --- a/src/CommunitiesList.cc +++ b/src/CommunitiesList.cc
@@ -1,10 +1,10 @@ #include "CommunitiesList.h" +#include "MatrixClient.h" #include <QLabel> -CommunitiesList::CommunitiesList(QSharedPointer<MatrixClient> client, QWidget *parent) +CommunitiesList::CommunitiesList(QWidget *parent) : QWidget(parent) - , client_(client) { QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); sizePolicy.setHorizontalStretch(0); @@ -38,14 +38,14 @@ CommunitiesList::CommunitiesList(QSharedPointer<MatrixClient> client, QWidget *p scrollArea_->setWidget(scrollAreaContents_); topLayout_->addWidget(scrollArea_); - connect(client_.data(), + connect(http::client(), &MatrixClient::communityProfileRetrieved, this, - [this](QString communityId, QJsonObject profile) { - client_->fetchCommunityAvatar(communityId, - QUrl(profile["avatar_url"].toString())); + [](QString communityId, QJsonObject profile) { + http::client()->fetchCommunityAvatar( + communityId, QUrl(profile["avatar_url"].toString())); }); - connect(client_.data(), + connect(http::client(), SIGNAL(communityAvatarRetrieved(const QString &, const QPixmap &)), this, SLOT(updateCommunityAvatar(const QString &, const QPixmap &))); @@ -61,8 +61,8 @@ CommunitiesList::setCommunities(const std::map<QString, QSharedPointer<Community for (const auto &community : communities) { addCommunity(community.second, community.first); - client_->fetchCommunityProfile(community.first); - client_->fetchCommunityRooms(community.first); + http::client()->fetchCommunityProfile(community.first); + http::client()->fetchCommunityRooms(community.first); } communities_["world"]->setPressedState(true); @@ -77,7 +77,7 @@ CommunitiesList::addCommunity(QSharedPointer<Community> community, const QString communities_.emplace(community_id, QSharedPointer<CommunitiesListItem>(list_item)); - client_->fetchCommunityAvatar(community_id, community->getAvatar()); + http::client()->fetchCommunityAvatar(community_id, community->getAvatar()); contentsLayout_->insertWidget(contentsLayout_->count() - 1, list_item); diff --git a/src/LoginPage.cc b/src/LoginPage.cc
index b8207226..c7f9b042 100644 --- a/src/LoginPage.cc +++ b/src/LoginPage.cc
@@ -30,10 +30,9 @@ using namespace mtx::identifiers; -LoginPage::LoginPage(QSharedPointer<MatrixClient> client, QWidget *parent) +LoginPage::LoginPage(QWidget *parent) : QWidget(parent) , inferredServerAddress_() - , client_{client} { top_layout_ = new QVBoxLayout(); @@ -143,11 +142,11 @@ LoginPage::LoginPage(QSharedPointer<MatrixClient> client, QWidget *parent) connect(matrixid_input_, SIGNAL(returnPressed()), login_button_, SLOT(click())); connect(password_input_, SIGNAL(returnPressed()), login_button_, SLOT(click())); connect(serverInput_, SIGNAL(returnPressed()), login_button_, SLOT(click())); - connect(client_.data(), SIGNAL(loginError(QString)), this, SLOT(loginError(QString))); - connect(client_.data(), SIGNAL(loginError(QString)), this, SIGNAL(errorOccurred())); + connect(http::client(), SIGNAL(loginError(QString)), this, SLOT(loginError(QString))); + connect(http::client(), SIGNAL(loginError(QString)), this, SIGNAL(errorOccurred())); connect(matrixid_input_, SIGNAL(editingFinished()), this, SLOT(onMatrixIdEntered())); - connect(client_.data(), SIGNAL(versionError(QString)), this, SLOT(versionError(QString))); - connect(client_.data(), SIGNAL(versionSuccess()), this, SLOT(versionSuccess())); + connect(http::client(), SIGNAL(versionError(QString)), this, SLOT(versionError(QString))); + connect(http::client(), SIGNAL(versionSuccess()), this, SLOT(versionSuccess())); connect(serverInput_, SIGNAL(editingFinished()), this, SLOT(onServerAddressEntered())); } @@ -181,8 +180,8 @@ LoginPage::onMatrixIdEntered() inferredServerAddress_ = homeServer; serverInput_->setText(homeServer); - client_->setServer(homeServer); - client_->versions(); + http::client()->setServer(homeServer); + http::client()->versions(); } } @@ -190,8 +189,8 @@ void LoginPage::onServerAddressEntered() { error_label_->setText(""); - client_->setServer(serverInput_->text()); - client_->versions(); + http::client()->setServer(serverInput_->text()); + http::client()->versions(); serverLayout_->removeWidget(errorIcon_); errorIcon_->hide(); @@ -202,7 +201,7 @@ LoginPage::onServerAddressEntered() void LoginPage::versionError(QString error) { - QUrl currentServer = client_->getHomeServer(); + QUrl currentServer = http::client()->getHomeServer(); QString mxidAddress = matrixid_input_->text().split(":").at(1); error_label_->setText(error); @@ -242,8 +241,8 @@ LoginPage::onLoginButtonClicked() if (password_input_->text().isEmpty()) return loginError(tr("Empty password")); - client_->setServer(serverInput_->text()); - client_->login(QString::fromStdString(user.localpart()), password_input_->text()); + http::client()->setServer(serverInput_->text()); + http::client()->login(QString::fromStdString(user.localpart()), password_input_->text()); emit loggingIn(); } diff --git a/src/MainWindow.cc b/src/MainWindow.cc
index 404baec5..b0a0af4a 100644 --- a/src/MainWindow.cc +++ b/src/MainWindow.cc
@@ -54,6 +54,9 @@ MainWindow::MainWindow(QWidget *parent) setWindowTitle("nheko"); setObjectName("MainWindow"); + // Initialize the http client. + http::init(this); + restoreWindowSize(); QFont font("Open Sans"); @@ -61,14 +64,13 @@ MainWindow::MainWindow(QWidget *parent) font.setStyleStrategy(QFont::PreferAntialias); setFont(font); - client_ = QSharedPointer<MatrixClient>(new MatrixClient("matrix.org")); userSettings_ = QSharedPointer<UserSettings>(new UserSettings); trayIcon_ = new TrayIcon(":/logos/nheko-32.png", this); welcome_page_ = new WelcomePage(this); - login_page_ = new LoginPage(client_, this); - register_page_ = new RegisterPage(client_, this); - chat_page_ = new ChatPage(client_, userSettings_, this); + login_page_ = new LoginPage(this); + register_page_ = new RegisterPage(this); + chat_page_ = new ChatPage(userSettings_, this); userSettingsPage_ = new UserSettingsPage(userSettings_, this); // Initialize sliding widget manager. @@ -122,16 +124,16 @@ MainWindow::MainWindow(QWidget *parent) connect( chat_page_, &ChatPage::showUserSettingsPage, this, &MainWindow::showUserSettingsPage); - connect(client_.data(), + connect(http::client(), SIGNAL(loginSuccess(QString, QString, QString)), this, SLOT(showChatPage(QString, QString, QString))); - connect(client_.data(), + connect(http::client(), SIGNAL(registerSuccess(QString, QString, QString)), this, SLOT(showChatPage(QString, QString, QString))); - connect(client_.data(), &MatrixClient::invalidToken, this, [this]() { + connect(http::client(), &MatrixClient::invalidToken, this, [this]() { chat_page_->deleteConfigs(); showLoginPage(); login_page_->loginError("Invalid token detected. Please try to login again."); @@ -315,7 +317,7 @@ MainWindow::openLeaveRoomDialog(const QString &room_id) leaveRoomModal_->hide(); if (leaving) - client_->leaveRoom(roomToLeave); + http::client()->leaveRoom(roomToLeave); }); leaveRoomModal_ = diff --git a/src/MatrixClient.cc b/src/MatrixClient.cc
index 54756c7c..c6ca74ad 100644 --- a/src/MatrixClient.cc +++ b/src/MatrixClient.cc
@@ -33,7 +33,27 @@ #include "MatrixClient.h" -MatrixClient::MatrixClient(QString server, QObject *parent) +namespace { +MatrixClient *instance_ = nullptr; +} + +namespace http { + +void +init(QObject *parent) +{ + if (!instance_) + instance_ = new MatrixClient(parent); +} + +MatrixClient * +client() +{ + return instance_; +} +} + +MatrixClient::MatrixClient(QObject *parent) : QNetworkAccessManager(parent) , clientApiUrl_{"/_matrix/client/r0"} , mediaApiUrl_{"/_matrix/media/r0"} @@ -55,8 +75,6 @@ MatrixClient::MatrixClient(QString server, QObject *parent) [](QNetworkReply *reply, const QList<QSslError> &) { reply->ignoreSslErrors(); }); } - setServer(server); - QJsonObject default_filter{ { "room", diff --git a/src/RegisterPage.cc b/src/RegisterPage.cc
index c0fa11a6..7d80b727 100644 --- a/src/RegisterPage.cc +++ b/src/RegisterPage.cc
@@ -28,9 +28,8 @@ #include "dialogs/ReCaptcha.hpp" -RegisterPage::RegisterPage(QSharedPointer<MatrixClient> client, QWidget *parent) +RegisterPage::RegisterPage(QWidget *parent) : QWidget(parent) - , client_(client) { top_layout_ = new QVBoxLayout(); @@ -126,11 +125,11 @@ RegisterPage::RegisterPage(QSharedPointer<MatrixClient> client, QWidget *parent) connect(password_input_, SIGNAL(returnPressed()), register_button_, SLOT(click())); connect(password_confirmation_, SIGNAL(returnPressed()), register_button_, SLOT(click())); connect(server_input_, SIGNAL(returnPressed()), register_button_, SLOT(click())); - connect(client_.data(), + connect(http::client(), SIGNAL(registerError(const QString &)), this, SLOT(registerError(const QString &))); - connect(client_.data(), + connect(http::client(), &MatrixClient::registrationFlow, this, [this](const QString &user, @@ -148,7 +147,8 @@ RegisterPage::RegisterPage(QSharedPointer<MatrixClient> client, QWidget *parent) [this, user, pass, server, session]() { captchaDialog_->close(); emit registering(); - client_->registerUser(user, pass, server, session); + http::client()->registerUser( + user, pass, server, session); }); } @@ -189,7 +189,7 @@ RegisterPage::onRegisterButtonClicked() QString password = password_input_->text(); QString server = server_input_->text(); - client_->registerUser(username, password, server); + http::client()->registerUser(username, password, server); emit registering(); } } diff --git a/src/RoomList.cc b/src/RoomList.cc
index c0447f9a..12fec318 100644 --- a/src/RoomList.cc +++ b/src/RoomList.cc
@@ -29,11 +29,8 @@ #include "UserSettingsPage.h" #include "Utils.h" -RoomList::RoomList(QSharedPointer<MatrixClient> client, - QSharedPointer<UserSettings> userSettings, - QWidget *parent) +RoomList::RoomList(QSharedPointer<UserSettings> userSettings, QWidget *parent) : QWidget(parent) - , client_(client) , userSettings_{userSettings} { setStyleSheet("border: none;"); @@ -58,7 +55,7 @@ RoomList::RoomList(QSharedPointer<MatrixClient> client, scrollArea_->setWidget(scrollAreaContents_); topLayout_->addWidget(scrollArea_); - connect(client_.data(), + connect(http::client(), &MatrixClient::roomAvatarRetrieved, this, [this](const QString &room_id, @@ -104,7 +101,7 @@ RoomList::updateAvatar(const QString &room_id, const QString &url) savedImgData = cache_->image(url); if (savedImgData.isEmpty()) { - client_->fetchRoomAvatar(room_id, url); + http::client()->fetchRoomAvatar(room_id, url); } else { QPixmap img; img.loadFromData(savedImgData); @@ -317,7 +314,7 @@ RoomList::closeJoinRoomDialog(bool isJoining, QString roomAlias) joinRoomModal_->hide(); if (isJoining) - client_->joinRoom(roomAlias); + http::client()->joinRoom(roomAlias); } void diff --git a/src/timeline/TimelineItem.cc b/src/timeline/TimelineItem.cc
index 5084b978..6f126d3d 100644 --- a/src/timeline/TimelineItem.cc +++ b/src/timeline/TimelineItem.cc
@@ -19,8 +19,10 @@ #include <QFontDatabase> #include <QMenu> #include <QTextEdit> +#include <QTimer> #include "Avatar.h" +#include "ChatPage.h" #include "Config.h" #include "timeline/TimelineItem.h" @@ -63,7 +65,7 @@ TimelineItem::init() connect(redactMsg_, &QAction::triggered, this, [this]() { if (!event_id_.isEmpty()) - ChatPage::instance()->redactEvent(room_id_, event_id_); + http::client()->redactEvent(room_id_, event_id_); }); connect(markAsRead_, &QAction::triggered, this, [this]() { sendReadReceipt(); }); diff --git a/src/timeline/TimelineView.cc b/src/timeline/TimelineView.cc
index 5b433674..94ecb304 100644 --- a/src/timeline/TimelineView.cc +++ b/src/timeline/TimelineView.cc
@@ -84,26 +84,21 @@ DateSeparator::paintEvent(QPaintEvent *) } TimelineView::TimelineView(const mtx::responses::Timeline &timeline, - QSharedPointer<MatrixClient> client, const QString &room_id, QWidget *parent) : QWidget(parent) , room_id_{room_id} - , client_{client} { init(); addEvents(timeline); } -TimelineView::TimelineView(QSharedPointer<MatrixClient> client, - const QString &room_id, - QWidget *parent) +TimelineView::TimelineView(const QString &room_id, QWidget *parent) : QWidget(parent) , room_id_{room_id} - , client_{client} { init(); - client_->messages(room_id_, ""); + http::client()->messages(room_id_, ""); } void @@ -143,7 +138,7 @@ TimelineView::fetchHistory() return; isPaginationInProgress_ = true; - client_->messages(room_id_, prev_batch_token_); + http::client()->messages(room_id_, prev_batch_token_); paginationTimer_->start(5000); return; @@ -194,7 +189,7 @@ TimelineView::sliderMoved(int position) // FIXME: Maybe move this to TimelineViewManager to remove the // extra calls? - client_->messages(room_id_, prev_batch_token_); + http::client()->messages(room_id_, prev_batch_token_); } } @@ -430,7 +425,7 @@ TimelineView::init() paginationTimer_ = new QTimer(this); connect(paginationTimer_, &QTimer::timeout, this, &TimelineView::fetchHistory); - connect(client_.data(), + connect(http::client(), &MatrixClient::messagesRetrieved, this, &TimelineView::addBackwardsEvents); @@ -551,7 +546,7 @@ TimelineView::addUserMessage(mtx::events::MessageType ty, const QString &body) saveLastMessageInfo(local_user_, QDateTime::currentDateTime()); - int txn_id = client_->incrementTransactionId(); + int txn_id = http::client()->incrementTransactionId(); PendingMessage message(ty, txn_id, body, "", "", -1, "", view_item); handleNewUserMessage(message); } @@ -577,11 +572,12 @@ TimelineView::sendNextPendingMessage() case mtx::events::MessageType::Video: case mtx::events::MessageType::File: // FIXME: Improve the API - client_->sendRoomMessage( + http::client()->sendRoomMessage( m.ty, m.txn_id, room_id_, m.filename, m.mime, m.media_size, m.body); break; default: - client_->sendRoomMessage(m.ty, m.txn_id, room_id_, m.body, m.mime, m.media_size); + http::client()->sendRoomMessage( + m.ty, m.txn_id, room_id_, m.body, m.mime, m.media_size); break; } } @@ -675,7 +671,7 @@ TimelineView::readLastEvent() const const auto eventId = getLastEventId(); if (!eventId.isEmpty()) - client_->readEvent(room_id_, eventId); + http::client()->readEvent(room_id_, eventId); } QString diff --git a/src/timeline/TimelineViewManager.cc b/src/timeline/TimelineViewManager.cc
index 28f44770..b7ce53ae 100644 --- a/src/timeline/TimelineViewManager.cc +++ b/src/timeline/TimelineViewManager.cc
@@ -31,21 +31,20 @@ #include "timeline/widgets/ImageItem.h" #include "timeline/widgets/VideoItem.h" -TimelineViewManager::TimelineViewManager(QSharedPointer<MatrixClient> client, QWidget *parent) +TimelineViewManager::TimelineViewManager(QWidget *parent) : QStackedWidget(parent) - , client_(client) { setStyleSheet("border: none;"); connect( - client_.data(), &MatrixClient::messageSent, this, &TimelineViewManager::messageSent); + http::client(), &MatrixClient::messageSent, this, &TimelineViewManager::messageSent); - connect(client_.data(), + connect(http::client(), &MatrixClient::messageSendFailed, this, &TimelineViewManager::messageSendFailed); - connect(client_.data(), + connect(http::client(), &MatrixClient::redactionCompleted, this, [this](const QString &room_id, const QString &event_id) { @@ -190,7 +189,7 @@ TimelineViewManager::addRoom(const mtx::responses::JoinedRoom &room, const QStri return; // Create a history view with the room events. - TimelineView *view = new TimelineView(room.timeline, client_, room_id); + TimelineView *view = new TimelineView(room.timeline, room_id); views_.emplace(room_id, QSharedPointer<TimelineView>(view)); connect(view, @@ -209,7 +208,7 @@ TimelineViewManager::addRoom(const QString &room_id) return; // Create a history view without any events. - TimelineView *view = new TimelineView(client_, room_id); + TimelineView *view = new TimelineView(room_id); views_.emplace(room_id, QSharedPointer<TimelineView>(view)); connect(view, diff --git a/src/timeline/widgets/AudioItem.cc b/src/timeline/widgets/AudioItem.cc
index 79f944ff..5a2bca92 100644 --- a/src/timeline/widgets/AudioItem.cc +++ b/src/timeline/widgets/AudioItem.cc
@@ -23,6 +23,7 @@ #include <QPainter> #include <QPixmap> +#include "MatrixClient.h" #include "Utils.h" #include "timeline/widgets/AudioItem.h" @@ -57,7 +58,7 @@ AudioItem::init() QString media_params = url_parts[1]; url_ = QString("%1/_matrix/media/r0/download/%2") - .arg(client_.data()->getHomeServer().toString(), media_params); + .arg(http::client()->getHomeServer().toString(), media_params); player_ = new QMediaPlayer; player_->setMedia(QUrl(url_)); @@ -73,29 +74,21 @@ AudioItem::init() }); } -AudioItem::AudioItem(QSharedPointer<MatrixClient> client, - const mtx::events::RoomEvent<mtx::events::msg::Audio> &event, - QWidget *parent) +AudioItem::AudioItem(const mtx::events::RoomEvent<mtx::events::msg::Audio> &event, QWidget *parent) : QWidget(parent) , url_{QUrl(QString::fromStdString(event.content.url))} , text_{QString::fromStdString(event.content.body)} , event_{event} - , client_{client} { readableFileSize_ = utils::humanReadableFileSize(event.content.info.size); init(); } -AudioItem::AudioItem(QSharedPointer<MatrixClient> client, - const QString &url, - const QString &filename, - uint64_t size, - QWidget *parent) +AudioItem::AudioItem(const QString &url, const QString &filename, uint64_t size, QWidget *parent) : QWidget(parent) , url_{url} , text_{filename} - , client_{client} { readableFileSize_ = utils::humanReadableFileSize(size); @@ -134,7 +127,7 @@ AudioItem::mousePressEvent(QMouseEvent *event) if (filenameToSave_.isEmpty()) return; - auto proxy = client_->downloadFile(url_); + auto proxy = http::client()->downloadFile(url_); connect(proxy.data(), &DownloadMediaProxy::fileDownloaded, this, diff --git a/src/timeline/widgets/FileItem.cc b/src/timeline/widgets/FileItem.cc
index 7445eb0f..7ff60d87 100644 --- a/src/timeline/widgets/FileItem.cc +++ b/src/timeline/widgets/FileItem.cc
@@ -23,6 +23,7 @@ #include <QPainter> #include <QPixmap> +#include "MatrixClient.h" #include "Utils.h" #include "timeline/widgets/FileItem.h" @@ -56,32 +57,24 @@ FileItem::init() QString media_params = url_parts[1]; url_ = QString("%1/_matrix/media/r0/download/%2") - .arg(client_.data()->getHomeServer().toString(), media_params); + .arg(http::client()->getHomeServer().toString(), media_params); } -FileItem::FileItem(QSharedPointer<MatrixClient> client, - const mtx::events::RoomEvent<mtx::events::msg::File> &event, - QWidget *parent) +FileItem::FileItem(const mtx::events::RoomEvent<mtx::events::msg::File> &event, QWidget *parent) : QWidget(parent) , url_{QString::fromStdString(event.content.url)} , text_{QString::fromStdString(event.content.body)} , event_{event} - , client_{client} { readableFileSize_ = utils::humanReadableFileSize(event.content.info.size); init(); } -FileItem::FileItem(QSharedPointer<MatrixClient> client, - const QString &url, - const QString &filename, - uint64_t size, - QWidget *parent) +FileItem::FileItem(const QString &url, const QString &filename, uint64_t size, QWidget *parent) : QWidget(parent) , url_{url} , text_{filename} - , client_{client} { readableFileSize_ = utils::humanReadableFileSize(size); @@ -120,7 +113,7 @@ FileItem::mousePressEvent(QMouseEvent *event) if (filenameToSave_.isEmpty()) return; - auto proxy = client_->downloadFile(url_); + auto proxy = http::client()->downloadFile(url_); connect(proxy.data(), &DownloadMediaProxy::fileDownloaded, this, diff --git a/src/timeline/widgets/ImageItem.cc b/src/timeline/widgets/ImageItem.cc
index 03f9741b..66cd31ab 100644 --- a/src/timeline/widgets/ImageItem.cc +++ b/src/timeline/widgets/ImageItem.cc
@@ -25,16 +25,14 @@ #include <QUuid> #include "Config.h" +#include "MatrixClient.h" #include "Utils.h" #include "dialogs/ImageOverlay.h" #include "timeline/widgets/ImageItem.h" -ImageItem::ImageItem(QSharedPointer<MatrixClient> client, - const mtx::events::RoomEvent<mtx::events::msg::Image> &event, - QWidget *parent) +ImageItem::ImageItem(const mtx::events::RoomEvent<mtx::events::msg::Image> &event, QWidget *parent) : QWidget(parent) , event_{event} - , client_{client} { setMouseTracking(true); setCursor(Qt::PointingHandCursor); @@ -52,9 +50,9 @@ ImageItem::ImageItem(QSharedPointer<MatrixClient> client, QString media_params = url_parts[1]; url_ = QString("%1/_matrix/media/r0/download/%2") - .arg(client_.data()->getHomeServer().toString(), media_params); + .arg(http::client()->getHomeServer().toString(), media_params); - auto proxy = client_.data()->downloadImage(url_); + auto proxy = http::client()->downloadImage(url_); connect(proxy.data(), &DownloadMediaProxy::imageDownloaded, @@ -65,15 +63,10 @@ ImageItem::ImageItem(QSharedPointer<MatrixClient> client, }); } -ImageItem::ImageItem(QSharedPointer<MatrixClient> client, - const QString &url, - const QString &filename, - uint64_t size, - QWidget *parent) +ImageItem::ImageItem(const QString &url, const QString &filename, uint64_t size, QWidget *parent) : QWidget(parent) , url_{url} , text_{filename} - , client_{client} { Q_UNUSED(size); @@ -90,9 +83,9 @@ ImageItem::ImageItem(QSharedPointer<MatrixClient> client, QString media_params = url_parts[1]; url_ = QString("%1/_matrix/media/r0/download/%2") - .arg(client_.data()->getHomeServer().toString(), media_params); + .arg(http::client()->getHomeServer().toString(), media_params); - auto proxy = client_.data()->downloadImage(url_); + auto proxy = http::client()->downloadImage(url_); connect(proxy.data(), &DownloadMediaProxy::imageDownloaded, @@ -238,7 +231,7 @@ ImageItem::saveAs() if (filename.isEmpty()) return; - auto proxy = client_->downloadFile(url_); + auto proxy = http::client()->downloadFile(url_); connect(proxy.data(), &DownloadMediaProxy::fileDownloaded, this, diff --git a/src/timeline/widgets/VideoItem.cc b/src/timeline/widgets/VideoItem.cc
index 788db0ed..f5bcfd6e 100644 --- a/src/timeline/widgets/VideoItem.cc +++ b/src/timeline/widgets/VideoItem.cc
@@ -20,6 +20,7 @@ #include <QVBoxLayout> #include "Config.h" +#include "MatrixClient.h" #include "Utils.h" #include "timeline/widgets/VideoItem.h" @@ -34,17 +35,14 @@ VideoItem::init() QString media_params = url_parts[1]; url_ = QString("%1/_matrix/media/r0/download/%2") - .arg(client_.data()->getHomeServer().toString(), media_params); + .arg(http::client()->getHomeServer().toString(), media_params); } -VideoItem::VideoItem(QSharedPointer<MatrixClient> client, - const mtx::events::RoomEvent<mtx::events::msg::Video> &event, - QWidget *parent) +VideoItem::VideoItem(const mtx::events::RoomEvent<mtx::events::msg::Video> &event, QWidget *parent) : QWidget(parent) , url_{QString::fromStdString(event.content.url)} , text_{QString::fromStdString(event.content.body)} , event_{event} - , client_{client} { readableFileSize_ = utils::humanReadableFileSize(event.content.info.size); @@ -65,15 +63,10 @@ VideoItem::VideoItem(QSharedPointer<MatrixClient> client, layout->addWidget(label_); } -VideoItem::VideoItem(QSharedPointer<MatrixClient> client, - const QString &url, - const QString &filename, - uint64_t size, - QWidget *parent) +VideoItem::VideoItem(const QString &url, const QString &filename, uint64_t size, QWidget *parent) : QWidget(parent) , url_{url} , text_{filename} - , client_{client} { readableFileSize_ = utils::humanReadableFileSize(size);