mirror of
https://github.com/matrix-construct/construct
synced 2024-06-28 23:08:20 +02:00
ircd:Ⓜ️:dbs: Add crucial member key to origins sequence.
This commit is contained in:
parent
d0ef714179
commit
763c14fb7b
|
@ -29,7 +29,7 @@ namespace ircd::m::dbs
|
||||||
extern db::index room_origins;
|
extern db::index room_origins;
|
||||||
|
|
||||||
// Lowlevel util
|
// 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, const id::event &);
|
||||||
string_view room_events_key(const mutable_buffer &out, const id::room &, const uint64_t &depth);
|
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);
|
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];
|
thread_local char buf[512];
|
||||||
const string_view &key
|
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
|
const string_view &membership
|
||||||
|
@ -622,12 +622,14 @@ ircd::m::dbs::desc::events__room_origins__pfx
|
||||||
ircd::string_view
|
ircd::string_view
|
||||||
ircd::m::dbs::room_origins_key(const mutable_buffer &out,
|
ircd::m::dbs::room_origins_key(const mutable_buffer &out,
|
||||||
const id::room &room_id,
|
const id::room &room_id,
|
||||||
const string_view &origin)
|
const string_view &origin,
|
||||||
|
const id::user &member)
|
||||||
{
|
{
|
||||||
size_t len{0};
|
size_t len{0};
|
||||||
len = strlcpy(out, room_id);
|
len = strlcpy(out, room_id);
|
||||||
len = strlcat(out, ":::");
|
len = strlcat(out, ":::");
|
||||||
len = strlcat(out, origin);
|
len = strlcat(out, origin);
|
||||||
|
len = strlcat(out, member);
|
||||||
return { data(out), len };
|
return { data(out), len };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -663,13 +663,33 @@ const
|
||||||
dbs::room_origins
|
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)
|
for(; bool(it); ++it)
|
||||||
{
|
{
|
||||||
const string_view &key(it->first);
|
const string_view &key{it->first};
|
||||||
const string_view &origin(split(key, ":::").second); //TODO: XXX
|
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))
|
if(view(origin))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
last = { lastbuf, copy(lastbuf, origin) };
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in a new issue