mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-22 19:08:58 +03:00
Fix hiding rooms from a space
This commit is contained in:
parent
71129d4edc
commit
0ec7be3090
3 changed files with 50 additions and 13 deletions
|
@ -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();
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -38,6 +38,7 @@ public:
|
||||||
IsInvite,
|
IsInvite,
|
||||||
IsSpace,
|
IsSpace,
|
||||||
Tags,
|
Tags,
|
||||||
|
ParentSpaces,
|
||||||
};
|
};
|
||||||
|
|
||||||
RoomlistModel(TimelineViewManager *parent = nullptr);
|
RoomlistModel(TimelineViewManager *parent = nullptr);
|
||||||
|
|
Loading…
Reference in a new issue