mirror of
https://gitlab.computer.surgery/matrix/grapevine.git
synced 2025-12-16 15:21:24 +01:00
MSC3575: use explicit loop for ops creation
This commit is contained in:
parent
dd705a2bb2
commit
6d4f165629
1 changed files with 50 additions and 55 deletions
|
|
@ -305,64 +305,59 @@ pub(crate) async fn sync_events_v4_route(
|
|||
|
||||
let mut new_known_rooms = BTreeSet::new();
|
||||
|
||||
let mut ops = Vec::new();
|
||||
for (mut from, mut to) in list.ranges {
|
||||
from = from.clamp(
|
||||
uint!(0),
|
||||
UInt::try_from(all_joined_rooms.len() - 1).unwrap_or(UInt::MAX),
|
||||
);
|
||||
to = to.clamp(
|
||||
from,
|
||||
UInt::try_from(all_joined_rooms.len() - 1).unwrap_or(UInt::MAX),
|
||||
);
|
||||
let room_ids =
|
||||
all_joined_rooms[from.try_into().unwrap_or(usize::MAX)
|
||||
..=to.try_into().unwrap_or(usize::MAX)]
|
||||
.to_vec();
|
||||
|
||||
new_known_rooms.extend(room_ids.iter().cloned());
|
||||
for room_id in &room_ids {
|
||||
let todo_room = todo_rooms.entry(room_id.clone()).or_insert((
|
||||
BTreeSet::new(),
|
||||
0,
|
||||
u64::MAX,
|
||||
));
|
||||
let limit = list
|
||||
.room_details
|
||||
.timeline_limit
|
||||
.map_or(10, u64::from)
|
||||
.min(100);
|
||||
todo_room
|
||||
.0
|
||||
.extend(list.room_details.required_state.iter().cloned());
|
||||
todo_room.1 = todo_room.1.max(limit);
|
||||
// 0 means unknown because it got out of date
|
||||
todo_room.2 = todo_room.2.min(
|
||||
known_rooms
|
||||
.get(&list_id)
|
||||
.and_then(|k| k.get(room_id))
|
||||
.copied()
|
||||
.unwrap_or(0),
|
||||
);
|
||||
}
|
||||
ops.push(sync_events::v4::SyncOp {
|
||||
op: SlidingOp::Sync,
|
||||
range: Some((from, to)),
|
||||
index: None,
|
||||
room_ids,
|
||||
room_id: None,
|
||||
});
|
||||
}
|
||||
|
||||
lists.insert(
|
||||
list_id.clone(),
|
||||
sync_events::v4::SyncList {
|
||||
ops: list
|
||||
.ranges
|
||||
.into_iter()
|
||||
.map(|mut r| {
|
||||
r.0 = r.0.clamp(
|
||||
uint!(0),
|
||||
UInt::try_from(all_joined_rooms.len() - 1)
|
||||
.unwrap_or(UInt::MAX),
|
||||
);
|
||||
r.1 = r.1.clamp(
|
||||
r.0,
|
||||
UInt::try_from(all_joined_rooms.len() - 1)
|
||||
.unwrap_or(UInt::MAX),
|
||||
);
|
||||
let room_ids = all_joined_rooms[r
|
||||
.0
|
||||
.try_into()
|
||||
.unwrap_or(usize::MAX)
|
||||
..=r.1.try_into().unwrap_or(usize::MAX)]
|
||||
.to_vec();
|
||||
new_known_rooms.extend(room_ids.iter().cloned());
|
||||
for room_id in &room_ids {
|
||||
let todo_room = todo_rooms
|
||||
.entry(room_id.clone())
|
||||
.or_insert((BTreeSet::new(), 0, u64::MAX));
|
||||
let limit = list
|
||||
.room_details
|
||||
.timeline_limit
|
||||
.map_or(10, u64::from)
|
||||
.min(100);
|
||||
todo_room.0.extend(
|
||||
list.room_details
|
||||
.required_state
|
||||
.iter()
|
||||
.cloned(),
|
||||
);
|
||||
todo_room.1 = todo_room.1.max(limit);
|
||||
// 0 means unknown because it got out of date
|
||||
todo_room.2 = todo_room.2.min(
|
||||
known_rooms
|
||||
.get(&list_id)
|
||||
.and_then(|k| k.get(room_id))
|
||||
.copied()
|
||||
.unwrap_or(0),
|
||||
);
|
||||
}
|
||||
sync_events::v4::SyncOp {
|
||||
op: SlidingOp::Sync,
|
||||
range: Some(r),
|
||||
index: None,
|
||||
room_ids,
|
||||
room_id: None,
|
||||
}
|
||||
})
|
||||
.collect(),
|
||||
ops,
|
||||
count: UInt::try_from(all_joined_rooms.len())
|
||||
.unwrap_or(UInt::MAX),
|
||||
},
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue