mirror of
https://github.com/matrix-construct/construct
synced 2024-12-26 15:33:54 +01:00
modules/m_room: Improve the is_complete util.
This commit is contained in:
parent
4d9027088f
commit
1365bed78c
1 changed files with 25 additions and 15 deletions
|
@ -261,10 +261,26 @@ make_prev__buf(const m::room &room,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" std::pair<bool, int64_t>
|
|
||||||
is_complete(const m::room &room)
|
namespace ircd::m
|
||||||
{
|
{
|
||||||
const m::room::state state
|
extern "C" std::pair<bool, int64_t> ircd__m__is_complete___room(const room &);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::pair<bool, int64_t>
|
||||||
|
ircd::m::ircd__m__is_complete___room(const room &room)
|
||||||
|
{
|
||||||
|
static const event::keys::include fkeys
|
||||||
|
{
|
||||||
|
"depth"
|
||||||
|
};
|
||||||
|
|
||||||
|
static const event::fetch::opts fopts
|
||||||
|
{
|
||||||
|
fkeys, { db::get::NO_CACHE }
|
||||||
|
};
|
||||||
|
|
||||||
|
const room::state state
|
||||||
{
|
{
|
||||||
room
|
room
|
||||||
};
|
};
|
||||||
|
@ -274,32 +290,26 @@ is_complete(const m::room &room)
|
||||||
state.get("m.room.create")
|
state.get("m.room.create")
|
||||||
};
|
};
|
||||||
|
|
||||||
static const m::event::fetch::opts fopts
|
room::messages it
|
||||||
{
|
|
||||||
m::event::keys::include{"depth"},
|
|
||||||
{ db::get::NO_CACHE }
|
|
||||||
};
|
|
||||||
|
|
||||||
m::room::messages it
|
|
||||||
{
|
{
|
||||||
room, create_id, &fopts
|
room, create_id, &fopts
|
||||||
};
|
};
|
||||||
|
|
||||||
int64_t depth{0};
|
int64_t depth(-1);
|
||||||
if(!it)
|
if(!it)
|
||||||
return {false, depth};
|
return { false, depth };
|
||||||
|
|
||||||
for(; it; ++it)
|
for(; it; ++it)
|
||||||
{
|
{
|
||||||
const m::event &event{*it};
|
const event &event{*it};
|
||||||
if(at<"depth"_>(event) == depth + 1)
|
if(at<"depth"_>(event) == depth + 1)
|
||||||
++depth;
|
++depth;
|
||||||
|
|
||||||
if(at<"depth"_>(event) != depth)
|
if(at<"depth"_>(event) != depth)
|
||||||
return {false, depth};
|
return { false, depth };
|
||||||
}
|
}
|
||||||
|
|
||||||
return {true, depth};
|
return { true, depth };
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" bool
|
extern "C" bool
|
||||||
|
|
Loading…
Reference in a new issue