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
|