summary refs log tree commit diff
path: root/src/timeline
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2021-06-16 00:09:45 +0200
committerNicolas Werner <nicolas.werner@hotmail.de>2021-06-25 11:34:17 +0200
commit12ce7686ce8a7cae411c280d30a12934b8707550 (patch)
tree3c5e769ed366c53afdaaed155f08f39ea06e8e94 /src/timeline
parentMerge pull request #611 from balsoft/allow-edits-of-pending-messages (diff)
downloadnheko-12ce7686ce8a7cae411c280d30a12934b8707550.tar.xz
Show some spaces in the community sidebar
Diffstat (limited to 'src/timeline')
-rw-r--r--src/timeline/CommunitiesModel.cpp42
-rw-r--r--src/timeline/CommunitiesModel.h4
2 files changed, 37 insertions, 9 deletions
diff --git a/src/timeline/CommunitiesModel.cpp b/src/timeline/CommunitiesModel.cpp
index 6c236784..88464bf9 100644
--- a/src/timeline/CommunitiesModel.cpp
+++ b/src/timeline/CommunitiesModel.cpp
@@ -44,8 +44,23 @@ CommunitiesModel::data(const QModelIndex &index, int role) const
                 case CommunitiesModel::Roles::Id:
                         return "";
                 }
-        } else if (index.row() - 1 < tags_.size()) {
-                auto tag = tags_.at(index.row() - 1);
+        } else if (index.row() - 1 < spaceOrder_.size()) {
+                auto id = spaceOrder_.at(index.row() - 1);
+                switch (role) {
+                case CommunitiesModel::Roles::AvatarUrl:
+                        return QString::fromStdString(spaces_.at(id).avatar_url);
+                case CommunitiesModel::Roles::DisplayName:
+                case CommunitiesModel::Roles::Tooltip:
+                        return QString::fromStdString(spaces_.at(id).name);
+                case CommunitiesModel::Roles::ChildrenHidden:
+                        return true;
+                case CommunitiesModel::Roles::Hidden:
+                        return hiddentTagIds_.contains("space:" + id);
+                case CommunitiesModel::Roles::Id:
+                        return "space:" + id;
+                }
+        } else if (index.row() - 1 < tags_.size() + spaceOrder_.size()) {
+                auto tag = tags_.at(index.row() - 1 - spaceOrder_.size());
                 if (tag == "m.favourite") {
                         switch (role) {
                         case CommunitiesModel::Roles::AvatarUrl:
@@ -78,7 +93,6 @@ CommunitiesModel::data(const QModelIndex &index, int role) const
                         case CommunitiesModel::Roles::AvatarUrl:
                                 return QString(":/icons/icons/ui/tag.png");
                         case CommunitiesModel::Roles::DisplayName:
-                                return tag.mid(2);
                         case CommunitiesModel::Roles::Tooltip:
                                 return tag.mid(2);
                         }
@@ -99,17 +113,27 @@ CommunitiesModel::data(const QModelIndex &index, int role) const
 void
 CommunitiesModel::initializeSidebar()
 {
+        beginResetModel();
+        tags_.clear();
+        spaceOrder_.clear();
+        spaces_.clear();
+
         std::set<std::string> ts;
-        for (const auto &e : cache::roomInfo()) {
-                for (const auto &t : e.tags) {
-                        if (t.find("u.") == 0 || t.find("m." == 0)) {
-                                ts.insert(t);
+        std::vector<RoomInfo> tempSpaces;
+        auto infos = cache::roomInfo();
+        for (auto it = infos.begin(); it != infos.end(); it++) {
+                if (it.value().is_space) {
+                        spaceOrder_.push_back(it.key());
+                        spaces_[it.key()] = it.value();
+                } else {
+                        for (const auto &t : it.value().tags) {
+                                if (t.find("u.") == 0 || t.find("m." == 0)) {
+                                        ts.insert(t);
+                                }
                         }
                 }
         }
 
-        beginResetModel();
-        tags_.clear();
         for (const auto &t : ts)
                 tags_.push_back(QString::fromStdString(t));
 
diff --git a/src/timeline/CommunitiesModel.h b/src/timeline/CommunitiesModel.h
index 66d6b21b..8c40ec5b 100644
--- a/src/timeline/CommunitiesModel.h
+++ b/src/timeline/CommunitiesModel.h
@@ -11,6 +11,8 @@
 
 #include <mtx/responses/sync.hpp>
 
+#include "CacheStructs.h"
+
 class CommunitiesModel : public QAbstractListModel
 {
         Q_OBJECT
@@ -71,4 +73,6 @@ private:
         QStringList tags_;
         QString currentTagId_;
         QStringList hiddentTagIds_;
+        QStringList spaceOrder_;
+        std::map<QString, RoomInfo> spaces_;
 };