summary refs log tree commit diff
path: root/src/timeline/RoomlistModel.cpp
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2021-05-28 17:25:46 +0200
committerNicolas Werner <nicolas.werner@hotmail.de>2021-05-28 17:25:46 +0200
commite2765212fb229e8d025d2255314a04a376207749 (patch)
tree62e6c90edd681c2963a69bc348d2cfe3adde5aca /src/timeline/RoomlistModel.cpp
parentReenable invites (diff)
downloadnheko-e2765212fb229e8d025d2255314a04a376207749.tar.xz
Reimplement room context menus
Diffstat (limited to 'src/timeline/RoomlistModel.cpp')
-rw-r--r--src/timeline/RoomlistModel.cpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/timeline/RoomlistModel.cpp b/src/timeline/RoomlistModel.cpp

index f3d4dad7..63054aa9 100644 --- a/src/timeline/RoomlistModel.cpp +++ b/src/timeline/RoomlistModel.cpp
@@ -49,6 +49,7 @@ RoomlistModel::roleNames() const {NotificationCount, "notificationCount"}, {IsInvite, "isInvite"}, {IsSpace, "isSpace"}, + {Tags, "tags"}, }; } @@ -84,6 +85,13 @@ RoomlistModel::data(const QModelIndex &index, int role) const case Roles::IsInvite: case Roles::IsSpace: return false; + case Roles::Tags: { + auto info = cache::singleRoomInfo(roomid.toStdString()); + QStringList list; + for (const auto &t : info.tags) + list.push_back(QString::fromStdString(t)); + return list; + } default: return {}; } @@ -111,6 +119,8 @@ RoomlistModel::data(const QModelIndex &index, int role) const return true; case Roles::IsSpace: return false; + case Roles::Tags: + return QStringList(); default: return {}; } @@ -364,6 +374,21 @@ RoomlistModel::declineInvite(QString roomid) } } } +void +RoomlistModel::leave(QString roomid) +{ + if (models.contains(roomid)) { + auto idx = roomidToIndex(roomid); + + if (idx != -1) { + beginRemoveRows(QModelIndex(), idx, idx); + roomids.erase(roomids.begin() + idx); + models.remove(roomid); + endRemoveRows(); + ChatPage::instance()->leaveRoom(roomid); + } + } +} namespace { enum NotificationImportance : short @@ -440,3 +465,50 @@ FilteredRoomlistModel::FilteredRoomlistModel(RoomlistModel *model, QObject *pare sort(0); } + +QStringList +FilteredRoomlistModel::tags() +{ + std::set<std::string> ts; + for (const auto &e : cache::roomInfo()) { + for (const auto &t : e.tags) { + if (t.find("u.") == 0) { + ts.insert(t); + } + } + } + + QStringList ret{{ + "m.favourite", + "m.lowpriority", + }}; + + for (const auto &t : ts) + ret.push_back(QString::fromStdString(t)); + + return ret; +} + +void +FilteredRoomlistModel::toggleTag(QString roomid, QString tag, bool on) +{ + if (on) { + http::client()->put_tag( + roomid.toStdString(), tag.toStdString(), {}, [tag](mtx::http::RequestErr err) { + if (err) { + nhlog::ui()->error("Failed to add tag: {}, {}", + tag.toStdString(), + err->matrix_error.error); + } + }); + } else { + http::client()->delete_tag( + roomid.toStdString(), tag.toStdString(), [tag](mtx::http::RequestErr err) { + if (err) { + nhlog::ui()->error("Failed to delete tag: {}, {}", + tag.toStdString(), + err->matrix_error.error); + } + }); + } +}