mirror of
https://github.com/matrix-construct/construct
synced 2024-11-29 10:12:39 +01:00
ircd:Ⓜ️:user::highlight: Add for_each() to interface; simplify stack (#87).
This commit is contained in:
parent
a4d61ba51b
commit
76889eab6e
2 changed files with 21 additions and 12 deletions
|
@ -30,6 +30,7 @@ struct ircd::m::user::highlight
|
|||
bool has(const event &) const;
|
||||
bool has(const event::idx &) const;
|
||||
|
||||
bool for_each(const m::room &, const event::idx_range &, const event::closure_idx_bool &) const;
|
||||
size_t count_between(const m::room &, const event::idx_range &) const;
|
||||
size_t count_to(const m::room &, const event::idx &) const;
|
||||
size_t count(const m::room &) const;
|
||||
|
|
|
@ -117,17 +117,27 @@ ircd::m::user::highlight::count_between(const m::room &room,
|
|||
const event::idx_range &range)
|
||||
const
|
||||
{
|
||||
static const event::fetch::opts fopts{[]
|
||||
size_t ret(0);
|
||||
for_each(room, range, [this, &ret]
|
||||
(const m::event::idx &event_idx)
|
||||
{
|
||||
event::fetch::opts ret;
|
||||
ret.keys = event::keys::include {"type", "content"};
|
||||
ret.query_json_force = true;
|
||||
return ret;
|
||||
}()};
|
||||
ret += has(event_idx);
|
||||
return true;
|
||||
});
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool
|
||||
IRCD_MODULE_EXPORT
|
||||
ircd::m::user::highlight::for_each(const m::room &room,
|
||||
const event::idx_range &range,
|
||||
const event::closure_idx_bool &closure)
|
||||
const
|
||||
{
|
||||
m::room::messages it
|
||||
{
|
||||
room, &fopts
|
||||
room
|
||||
};
|
||||
|
||||
assert(range.first <= range.second);
|
||||
|
@ -150,13 +160,11 @@ const
|
|||
string_view{user.user_id},
|
||||
};
|
||||
|
||||
size_t ret{0};
|
||||
for(++it; it && it.event_idx() < range.second; ++it)
|
||||
ret += cached(it.event_idx(), fopts)?
|
||||
has(*it):
|
||||
has(it.event_idx());
|
||||
if(!closure(it.event_idx()))
|
||||
return false;
|
||||
|
||||
return ret;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
Loading…
Reference in a new issue