Skip to content
Snippets Groups Projects
Verified Commit e7d4aec6 authored by Nicolas Werner's avatar Nicolas Werner
Browse files

Only mark as direct, if invite was direct

parent 3d92e8ae
No related branches found
No related tags found
No related merge requests found
Pipeline #2142 passed
......@@ -1640,7 +1640,7 @@ Cache::saveInvite(lmdb::txn &txn,
auto display_name =
msg->content.display_name.empty() ? msg->state_key : msg->content.display_name;
MemberInfo tmp{display_name, msg->content.avatar_url};
MemberInfo tmp{display_name, msg->content.avatar_url, msg->content.is_direct};
membersdb.put(txn, msg->state_key, json(tmp).dump());
} else {
......@@ -2777,7 +2777,8 @@ Cache::getMembersFromInvite(const std::string &room_id, std::size_t startIndex,
try {
MemberInfo tmp = json::parse(user_data);
members.emplace_back(RoomMember{QString::fromStdString(std::string(user_id)),
QString::fromStdString(tmp.name)});
QString::fromStdString(tmp.name),
tmp.is_direct});
} catch (const json::exception &e) {
nhlog::db()->warn("{}", e.what());
}
......@@ -4563,6 +4564,8 @@ to_json(json &j, const MemberInfo &info)
{
j["name"] = info.name;
j["avatar_url"] = info.avatar_url;
if (info.is_direct)
j["is_direct"] = info.is_direct;
}
void
......@@ -4570,6 +4573,7 @@ from_json(const json &j, MemberInfo &info)
{
info.name = j.at("name");
info.avatar_url = j.at("avatar_url");
info.is_direct = j.value("is_direct", false);
}
void
......
......@@ -26,6 +26,7 @@ struct RoomMember
{
QString user_id;
QString display_name;
bool is_direct = false;
};
//! Used to uniquely identify a list of read receipts.
......@@ -98,6 +99,7 @@ struct MemberInfo
{
std::string name;
std::string avatar_url;
bool is_direct = false;
};
void
......
......@@ -586,8 +586,9 @@ RoomlistModel::initializeRooms()
}
invites = cache::client()->invites();
for (const auto &id : invites.keys())
for (const auto &id : invites.keys()) {
roomids.push_back(id);
}
for (const auto &id : cache::client()->roomIds())
addRoom(id, true);
......@@ -626,9 +627,17 @@ RoomlistModel::acceptInvite(QString roomid)
{
if (invites.contains(roomid)) {
// Don't remove invite yet, so that we can switch to it
auto members = cache::getMembersFromInvite(roomid.toStdString(), 0, -1);
auto local = utils::localUser();
for (const auto &m : members) {
if (m.user_id == local && m.is_direct) {
nhlog::db()->info("marking {} as direct", roomid.toStdString());
utils::markRoomAsDirect(roomid, members);
break;
}
}
ChatPage::instance()->joinRoom(roomid);
utils::markRoomAsDirect(roomid,
cache::client()->getMembersFromInvite(roomid.toStdString(), 0, -1));
}
}
void
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment