mirror of
https://github.com/matrix-construct/construct
synced 2024-09-27 11:18:51 +02:00
ircd:Ⓜ️:dbs: Add crucial member key to origins sequence.
This commit is contained in:
parent
d0ef714179
commit
763c14fb7b
3 changed files with 28 additions and 6 deletions
|
@ -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);
|
||||
|
|
|
@ -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 };
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue