0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-06-16 08:58:20 +02:00

ircd:Ⓜ️:dbs: Add crucial member key to origins sequence.

This commit is contained in:
Jason Volk 2018-03-03 05:40:53 -08:00
parent d0ef714179
commit 763c14fb7b
3 changed files with 28 additions and 6 deletions

View file

@ -29,7 +29,7 @@ namespace ircd::m::dbs
extern db::index room_origins;
// Lowlevel util
string_view room_origins_key(const mutable_buffer &out, const id::room &, const string_view &origin);
string_view room_origins_key(const mutable_buffer &out, const id::room &, const string_view &origin, const id::user &member);
string_view room_events_key(const mutable_buffer &out, const id::room &, const uint64_t &depth, const id::event &);
string_view room_events_key(const mutable_buffer &out, const id::room &, const uint64_t &depth);
std::tuple<uint64_t, string_view> room_events_key(const string_view &amalgam);

View file

@ -244,7 +244,7 @@ ircd::m::dbs::_index__room_origins(db::txn &txn,
thread_local char buf[512];
const string_view &key
{
room_origins_key(buf, at<"room_id"_>(event), at<"origin"_>(event))
room_origins_key(buf, at<"room_id"_>(event), at<"origin"_>(event), at<"state_key"_>(event))
};
const string_view &membership
@ -622,12 +622,14 @@ ircd::m::dbs::desc::events__room_origins__pfx
ircd::string_view
ircd::m::dbs::room_origins_key(const mutable_buffer &out,
const id::room &room_id,
const string_view &origin)
const string_view &origin,
const id::user &member)
{
size_t len{0};
len = strlcpy(out, room_id);
len = strlcat(out, ":::");
len = strlcat(out, origin);
len = strlcat(out, member);
return { data(out), len };
}

View file

@ -663,13 +663,33 @@ const
dbs::room_origins
};
auto it(index.begin(room.room_id));
auto it
{
index.begin(room.room_id)
};
string_view last;
char lastbuf[256];
for(; bool(it); ++it)
{
const string_view &key(it->first);
const string_view &origin(split(key, ":::").second); //TODO: XXX
const string_view &key{it->first};
const string_view &origin_member //TODO: XXX
{
split(key, ":::").second
};
const string_view &origin //TODO: XXX
{
split(origin_member, "@").first
};
if(origin == last)
continue;
if(view(origin))
return true;
last = { lastbuf, copy(lastbuf, origin) };
}
return false;