mirror of
https://github.com/matrix-construct/construct
synced 2024-11-29 10:12:39 +01:00
ircd:Ⓜ️:room: Finesse a messages::seek_idx() into the seek stack.
This commit is contained in:
parent
7dd0d3b522
commit
632278e607
2 changed files with 34 additions and 21 deletions
|
@ -196,6 +196,7 @@ struct ircd::m::room::messages
|
||||||
const m::event &fetch(std::nothrow_t);
|
const m::event &fetch(std::nothrow_t);
|
||||||
const m::event &fetch();
|
const m::event &fetch();
|
||||||
|
|
||||||
|
bool seek_idx(const event::idx &);
|
||||||
bool seek(const uint64_t &depth);
|
bool seek(const uint64_t &depth);
|
||||||
bool seek(const event::id &);
|
bool seek(const event::id &);
|
||||||
bool seek();
|
bool seek();
|
||||||
|
|
|
@ -553,31 +553,12 @@ bool
|
||||||
ircd::m::room::messages::seek(const event::id &event_id)
|
ircd::m::room::messages::seek(const event::id &event_id)
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
auto &column
|
const event::idx &event_idx
|
||||||
{
|
|
||||||
dbs::event_column.at(json::indexof<event, "depth"_>())
|
|
||||||
};
|
|
||||||
|
|
||||||
const event::idx event_idx
|
|
||||||
{
|
{
|
||||||
index(event_id)
|
index(event_id)
|
||||||
};
|
};
|
||||||
|
|
||||||
uint64_t depth;
|
return seek_idx(event_idx);
|
||||||
column(byte_view<string_view>(event_idx), [&depth]
|
|
||||||
(const string_view &value)
|
|
||||||
{
|
|
||||||
depth = byte_view<uint64_t>(value);
|
|
||||||
});
|
|
||||||
|
|
||||||
char buf[dbs::ROOM_EVENTS_KEY_MAX_SIZE];
|
|
||||||
const auto seek_key
|
|
||||||
{
|
|
||||||
dbs::room_events_key(buf, room.room_id, depth, event_idx)
|
|
||||||
};
|
|
||||||
|
|
||||||
this->it = dbs::room_events.begin(seek_key);
|
|
||||||
return bool(*this);
|
|
||||||
}
|
}
|
||||||
catch(const db::not_found &e)
|
catch(const db::not_found &e)
|
||||||
{
|
{
|
||||||
|
@ -597,6 +578,37 @@ ircd::m::room::messages::seek(const uint64_t &depth)
|
||||||
return bool(*this);
|
return bool(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
ircd::m::room::messages::seek_idx(const event::idx &event_idx)
|
||||||
|
try
|
||||||
|
{
|
||||||
|
uint64_t depth;
|
||||||
|
m::get(event_idx, "depth", mutable_buffer
|
||||||
|
{
|
||||||
|
reinterpret_cast<char *>(&depth), sizeof(depth)
|
||||||
|
});
|
||||||
|
|
||||||
|
char buf[dbs::ROOM_EVENTS_KEY_MAX_SIZE];
|
||||||
|
const auto &seek_key
|
||||||
|
{
|
||||||
|
dbs::room_events_key(buf, room.room_id, depth, event_idx)
|
||||||
|
};
|
||||||
|
|
||||||
|
this->it = dbs::room_events.begin(seek_key);
|
||||||
|
if(!bool(*this))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Check if this event_idx is actually in this room
|
||||||
|
if(event_idx != this->event_idx())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch(const db::not_found &e)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
ircd::m::event::id::buf
|
ircd::m::event::id::buf
|
||||||
ircd::m::room::messages::event_id()
|
ircd::m::room::messages::event_id()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue