Fix hiding rooms from a space

This commit is contained in:
Nicolas Werner 2021-06-18 12:10:13 +02:00
parent 71129d4edc
commit 0ec7be3090
No known key found for this signature in database
GPG key ID: C8D75E610773F2D9
3 changed files with 50 additions and 13 deletions

View file

@ -214,7 +214,13 @@ CommunitiesModel::toggleTagId(QString tagId)
if (tagId.startsWith("tag:")) { if (tagId.startsWith("tag:")) {
auto idx = tags_.indexOf(tagId.mid(4)); auto idx = tags_.indexOf(tagId.mid(4));
if (idx != -1) if (idx != -1)
emit dataChanged(index(idx), index(idx), {Hidden}); emit dataChanged(index(idx + 1 + spaceOrder_.size()),
index(idx + 1 + spaceOrder_.size()),
{Hidden});
} else if (tagId.startsWith("space:")) {
auto idx = spaceOrder_.indexOf(tagId.mid(6));
if (idx != -1)
emit dataChanged(index(idx + 1), index(idx + 1), {Hidden});
} }
emit hiddenTagsChanged(); emit hiddenTagsChanged();

View file

@ -51,6 +51,7 @@ RoomlistModel::roleNames() const
{IsInvite, "isInvite"}, {IsInvite, "isInvite"},
{IsSpace, "isSpace"}, {IsSpace, "isSpace"},
{Tags, "tags"}, {Tags, "tags"},
{ParentSpaces, "parentSpaces"},
}; };
} }
@ -93,6 +94,14 @@ RoomlistModel::data(const QModelIndex &index, int role) const
list.push_back(QString::fromStdString(t)); list.push_back(QString::fromStdString(t));
return list; return list;
} }
case Roles::ParentSpaces: {
auto parents =
cache::client()->getParentRoomIds(roomid.toStdString());
QStringList list;
for (const auto &t : parents)
list.push_back(QString::fromStdString(t));
return list;
}
default: default:
return {}; return {};
} }
@ -122,6 +131,14 @@ RoomlistModel::data(const QModelIndex &index, int role) const
return false; return false;
case Roles::Tags: case Roles::Tags:
return QStringList(); return QStringList();
case Roles::ParentSpaces: {
auto parents =
cache::client()->getParentRoomIds(roomid.toStdString());
QStringList list;
for (const auto &t : parents)
list.push_back(QString::fromStdString(t));
return list;
}
default: default:
return {}; return {};
} }
@ -514,6 +531,14 @@ FilteredRoomlistModel::filterAcceptsRow(int sourceRow, const QModelIndex &) cons
for (const auto &t : tags) for (const auto &t : tags)
if (hiddenTags.contains(t)) if (hiddenTags.contains(t))
return false; return false;
} else if (!hiddenSpaces.empty()) {
auto parents =
sourceModel()
->data(sourceModel()->index(sourceRow, 0), RoomlistModel::ParentSpaces)
.toStringList();
for (const auto &t : parents)
if (hiddenSpaces.contains(t))
return false;
} }
return true; return true;
@ -528,30 +553,35 @@ FilteredRoomlistModel::filterAcceptsRow(int sourceRow, const QModelIndex &) cons
for (const auto &t : tags) for (const auto &t : tags)
if (t != filterStr && hiddenTags.contains(t)) if (t != filterStr && hiddenTags.contains(t))
return false; return false;
} else if (!hiddenSpaces.empty()) {
auto parents =
sourceModel()
->data(sourceModel()->index(sourceRow, 0), RoomlistModel::ParentSpaces)
.toStringList();
for (const auto &t : parents)
if (hiddenSpaces.contains(t))
return false;
} }
return true; return true;
} else if (filterType == FilterBy::Space) { } else if (filterType == FilterBy::Space) {
auto roomid = sourceModel() auto parents =
->data(sourceModel()->index(sourceRow, 0), RoomlistModel::RoomId) sourceModel()
.toString(); ->data(sourceModel()->index(sourceRow, 0), RoomlistModel::ParentSpaces)
.toStringList();
auto tags = sourceModel() auto tags = sourceModel()
->data(sourceModel()->index(sourceRow, 0), RoomlistModel::Tags) ->data(sourceModel()->index(sourceRow, 0), RoomlistModel::Tags)
.toStringList(); .toStringList();
auto contains = [](const std::vector<std::string> &v, const std::string &str) { if (!parents.contains(filterStr))
for (const auto &e : v)
if (e == str)
return true;
return false;
};
auto parents = cache::client()->getParentRoomIds(roomid.toStdString());
if (!contains(parents, filterStr.toStdString()))
return false; return false;
else if (!hiddenTags.empty()) { else if (!hiddenTags.empty()) {
for (const auto &t : tags) for (const auto &t : tags)
if (hiddenTags.contains(t)) if (hiddenTags.contains(t))
return false; return false;
} else if (!hiddenSpaces.empty()) {
for (const auto &t : parents)
if (hiddenSpaces.contains(t))
return false;
} }
return true; return true;
} else { } else {

View file

@ -38,6 +38,7 @@ public:
IsInvite, IsInvite,
IsSpace, IsSpace,
Tags, Tags,
ParentSpaces,
}; };
RoomlistModel(TimelineViewManager *parent = nullptr); RoomlistModel(TimelineViewManager *parent = nullptr);