diff --git a/src/timeline/RoomlistModel.cpp b/src/timeline/RoomlistModel.cpp
index 455ea94f..12fee262 100644
--- a/src/timeline/RoomlistModel.cpp
+++ b/src/timeline/RoomlistModel.cpp
@@ -222,7 +222,7 @@ RoomlistModel::data(const QModelIndex &index, int role) const
case Roles::RoomName:
return tr("No preview available");
case Roles::LastMessage:
- return QString();
+ return tr("This room is possibly inaccessible");
case Roles::Time:
return QString();
case Roles::Timestamp:
@@ -796,11 +796,13 @@ RoomlistModel::setCurrentRoom(const QString &roomid)
p.roomName_ = QString::fromStdString(i->name);
p.roomTopic_ = QString::fromStdString(i->topic);
p.roomAvatarUrl_ = QString::fromStdString(i->avatar_url);
+ p.isFetched_ = true;
currentRoomPreview_ = std::move(p);
nhlog::ui()->debug("Switched to (preview): {}",
currentRoomPreview_->roomid_.toStdString());
} else {
p.roomid_ = roomid;
+ p.isFetched_ = false;
currentRoomPreview_ = p;
nhlog::ui()->debug("Switched to (empty): {}",
currentRoomPreview_->roomid_.toStdString());
@@ -1100,6 +1102,15 @@ FilteredRoomlistModel::filterAcceptsRow(int sourceRow, const QModelIndex &) cons
.toBool();
}
+ // If it is a preview but it can't be fetched, it is probably an inaccessible private room.
+ // Hide it if the user isn't an admin.
+ auto index = sourceModel()->index(sourceRow, 0);
+ if (sourceModel()->data(index, RoomlistModel::IsPreview).toBool() &&
+ !sourceModel()->data(index, RoomlistModel::IsPreviewFetched).toBool() &&
+ !Permissions(filterStr).canChange(qml_mtx_events::SpaceChild)) {
+ return false;
+ }
+
return true;
} else {
return true;
diff --git a/src/timeline/RoomlistModel.h b/src/timeline/RoomlistModel.h
index 60d22cc0..cd1cdcaf 100644
--- a/src/timeline/RoomlistModel.h
+++ b/src/timeline/RoomlistModel.h
@@ -32,6 +32,7 @@ class RoomPreview
Q_PROPERTY(QString roomAvatarUrl READ roomAvatarUrl CONSTANT)
Q_PROPERTY(QString reason READ reason CONSTANT)
Q_PROPERTY(bool isInvite READ isInvite CONSTANT)
+ Q_PROPERTY(bool isFetched READ isFetched CONSTANT)
public:
RoomPreview() {}
@@ -42,9 +43,10 @@ public:
QString roomAvatarUrl() const { return roomAvatarUrl_; }
QString reason() const { return reason_; }
bool isInvite() const { return isInvite_; }
+ bool isFetched() const { return isFetched_; }
QString roomid_, roomName_, roomAvatarUrl_, roomTopic_, reason_;
- bool isInvite_ = false;
+ bool isInvite_ = false, isFetched_ = true;
};
class RoomlistModel final : public QAbstractListModel
|