summary refs log tree commit diff
path: root/src/timeline
diff options
context:
space:
mode:
authorJoseph Donofry <joedonofry@gmail.com>2020-04-23 19:22:54 -0400
committerJoseph Donofry <joedonofry@gmail.com>2020-04-23 19:22:54 -0400
commit619d9bc1858b12350d95f64a1340d56f32e28bfe (patch)
tree7c597bbe8f40059b8ef6c935d64f8a69ff107a94 /src/timeline
parentUpdate versions to 0.7.1 (diff)
parentMerge pull request #173 from Nheko-Reborn/decrypt-sidebar (diff)
downloadnheko-619d9bc1858b12350d95f64a1340d56f32e28bfe.tar.xz
Merge remote-tracking branch 'origin/master' into release-prep-0.7.1
Diffstat (limited to 'src/timeline')
-rw-r--r--src/timeline/TimelineModel.cpp26
-rw-r--r--src/timeline/TimelineModel.h4
-rw-r--r--src/timeline/TimelineViewManager.cpp21
-rw-r--r--src/timeline/TimelineViewManager.h1
4 files changed, 43 insertions, 9 deletions
diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp

index bb793945..e3a1a781 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp
@@ -8,6 +8,7 @@ #include <QFileDialog> #include <QMimeDatabase> #include <QRegularExpression> +#include <QSettings> #include <QStandardPaths> #include "ChatPage.h" @@ -476,14 +477,14 @@ TimelineModel::addEvents(const mtx::responses::Timeline &timeline) std::vector<QString> ids = internalAddEvents(timeline.events); - if (ids.empty()) - return; - - beginInsertRows(QModelIndex(), 0, static_cast<int>(ids.size() - 1)); - this->eventOrder.insert(this->eventOrder.begin(), ids.rbegin(), ids.rend()); - endInsertRows(); + if (!ids.empty()) { + beginInsertRows(QModelIndex(), 0, static_cast<int>(ids.size() - 1)); + this->eventOrder.insert(this->eventOrder.begin(), ids.rbegin(), ids.rend()); + endInsertRows(); + } - updateLastMessage(); + if (!timeline.events.empty()) + updateLastMessage(); } template<typename T> @@ -501,6 +502,13 @@ isMessage(const mtx::events::Event<T> &) return false; } +template<typename T> +auto +isMessage(const mtx::events::EncryptedEvent<T> &) +{ + return true; +} + void TimelineModel::updateLastMessage() { @@ -508,7 +516,9 @@ TimelineModel::updateLastMessage() auto event = events.value(*it); if (auto e = std::get_if<mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>>( &event)) { - event = decryptEvent(*e).event; + if (decryptDescription) { + event = decryptEvent(*e).event; + } } if (!std::visit([](const auto &e) -> bool { return isMessage(e); }, event)) diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h
index 84e9ec26..ae468c09 100644 --- a/src/timeline/TimelineModel.h +++ b/src/timeline/TimelineModel.h
@@ -189,6 +189,7 @@ public: Q_INVOKABLE void cacheMedia(QString eventId); Q_INVOKABLE bool saveMedia(QString eventId) const; + void updateLastMessage(); void addEvents(const mtx::responses::Timeline &events); template<class T> void sendMessage(const T &msg); @@ -223,6 +224,7 @@ public slots: emit replyChanged(reply_); } } + void setDecryptDescription(bool decrypt) { decryptDescription = decrypt; } private slots: // Add old events at the top of the timeline. @@ -257,7 +259,6 @@ private: const std::string &user_id, const mtx::responses::ClaimKeys &res, mtx::http::RequestErr err); - void updateLastMessage(); void readEvent(const std::string &id); QHash<QString, mtx::events::collections::TimelineEvents> events; @@ -270,6 +271,7 @@ private: bool isInitialSync = true; bool paginationInProgress = false; + bool decryptDescription = true; QString currentId; QString reply_; diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp
index 0a339825..b9565be8 100644 --- a/src/timeline/TimelineViewManager.cpp +++ b/src/timeline/TimelineViewManager.cpp
@@ -17,6 +17,21 @@ Q_DECLARE_METATYPE(mtx::events::collections::TimelineEvents) void +TimelineViewManager::updateEncryptedDescriptions() +{ + auto decrypt = settings->isDecryptSidebarEnabled(); + QHash<QString, QSharedPointer<TimelineModel>>::iterator i; + for (i = models.begin(); i != models.end(); ++i) { + auto ptr = i.value(); + + if (!ptr.isNull()) { + ptr->setDecryptDescription(decrypt); + ptr->updateLastMessage(); + } + } +} + +void TimelineViewManager::updateColorPalette() { userColors.clear(); @@ -83,6 +98,10 @@ TimelineViewManager::TimelineViewManager(QSharedPointer<UserSettings> userSettin &ChatPage::themeChanged, this, &TimelineViewManager::updateColorPalette); + connect(dynamic_cast<ChatPage *>(parent), + &ChatPage::decryptSidebarChanged, + this, + &TimelineViewManager::updateEncryptedDescriptions); } void @@ -114,6 +133,8 @@ TimelineViewManager::addRoom(const QString &room_id) { if (!models.contains(room_id)) { QSharedPointer<TimelineModel> newRoom(new TimelineModel(this, room_id)); + newRoom->setDecryptDescription(settings->isDecryptSidebarEnabled()); + connect(newRoom.data(), &TimelineModel::newEncryptedImage, imgProvider, diff --git a/src/timeline/TimelineViewManager.h b/src/timeline/TimelineViewManager.h
index 122e4aec..45a603af 100644 --- a/src/timeline/TimelineViewManager.h +++ b/src/timeline/TimelineViewManager.h
@@ -84,6 +84,7 @@ public slots: const QString &url, const QString &mime, uint64_t dsize); + void updateEncryptedDescriptions(); private: #ifdef USE_QUICK_VIEW