|
|
|
@ -2338,10 +2338,8 @@ pub fn sync_route( |
|
|
|
); |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
joined_rooms.insert( |
|
|
|
let joined_room = sync_events::JoinedRoom { |
|
|
|
room_id.clone().try_into().unwrap(), |
|
|
|
account_data: sync_events::AccountData { |
|
|
|
sync_events::JoinedRoom { |
|
|
|
|
|
|
|
account_data: Some(sync_events::AccountData { |
|
|
|
|
|
|
|
events: db |
|
|
|
events: db |
|
|
|
.account_data |
|
|
|
.account_data |
|
|
|
.changes_since(Some(&room_id), &user_id, since) |
|
|
|
.changes_since(Some(&room_id), &user_id, since) |
|
|
|
@ -2349,7 +2347,7 @@ pub fn sync_route( |
|
|
|
.into_iter() |
|
|
|
.into_iter() |
|
|
|
.map(|(_, v)| v) |
|
|
|
.map(|(_, v)| v) |
|
|
|
.collect(), |
|
|
|
.collect(), |
|
|
|
}), |
|
|
|
}, |
|
|
|
summary: sync_events::RoomSummary { |
|
|
|
summary: sync_events::RoomSummary { |
|
|
|
heroes, |
|
|
|
heroes, |
|
|
|
joined_member_count: joined_member_count.map(|n| (n as u32).into()), |
|
|
|
joined_member_count: joined_member_count.map(|n| (n as u32).into()), |
|
|
|
@ -2380,8 +2378,11 @@ pub fn sync_route( |
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
ephemeral: sync_events::Ephemeral { events: edus }, |
|
|
|
ephemeral: sync_events::Ephemeral { events: edus }, |
|
|
|
}, |
|
|
|
}; |
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
if !joined_room.is_empty() { |
|
|
|
|
|
|
|
joined_rooms.insert(room_id.clone().try_into().unwrap(), joined_room); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
let mut left_rooms = BTreeMap::new(); |
|
|
|
let mut left_rooms = BTreeMap::new(); |
|
|
|
@ -2390,6 +2391,7 @@ pub fn sync_route( |
|
|
|
let pdus = db.rooms.pdus_since(&room_id, since).unwrap(); |
|
|
|
let pdus = db.rooms.pdus_since(&room_id, since).unwrap(); |
|
|
|
let room_events = pdus.map(|pdu| pdu.unwrap().to_room_event()).collect(); |
|
|
|
let room_events = pdus.map(|pdu| pdu.unwrap().to_room_event()).collect(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// TODO: Only until leave point
|
|
|
|
let mut edus = db |
|
|
|
let mut edus = db |
|
|
|
.rooms |
|
|
|
.rooms |
|
|
|
.edus |
|
|
|
.edus |
|
|
|
@ -2416,27 +2418,26 @@ pub fn sync_route( |
|
|
|
); |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
left_rooms.insert( |
|
|
|
let left_room = sync_events::LeftRoom { |
|
|
|
room_id.clone().try_into().unwrap(), |
|
|
|
account_data: sync_events::AccountData { events: Vec::new() }, |
|
|
|
sync_events::LeftRoom { |
|
|
|
|
|
|
|
account_data: Some(sync_events::AccountData { events: Vec::new() }), |
|
|
|
|
|
|
|
timeline: sync_events::Timeline { |
|
|
|
timeline: sync_events::Timeline { |
|
|
|
limited: Some(false), |
|
|
|
limited: Some(false), |
|
|
|
prev_batch: Some(next_batch.clone()), |
|
|
|
prev_batch: Some(next_batch.clone()), |
|
|
|
events: room_events, |
|
|
|
events: room_events, |
|
|
|
}, |
|
|
|
}, |
|
|
|
state: sync_events::State { events: Vec::new() }, |
|
|
|
state: sync_events::State { events: Vec::new() }, |
|
|
|
}, |
|
|
|
}; |
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
if !left_room.is_empty() { |
|
|
|
|
|
|
|
left_rooms.insert(room_id.clone().try_into().unwrap(), left_room); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
let mut invited_rooms = BTreeMap::new(); |
|
|
|
let mut invited_rooms = BTreeMap::new(); |
|
|
|
for room_id in db.rooms.rooms_invited(&user_id) { |
|
|
|
for room_id in db.rooms.rooms_invited(&user_id) { |
|
|
|
let room_id = room_id.unwrap(); |
|
|
|
let room_id = room_id.unwrap(); |
|
|
|
|
|
|
|
|
|
|
|
invited_rooms.insert( |
|
|
|
let invited_room = sync_events::InvitedRoom { |
|
|
|
room_id.clone(), |
|
|
|
|
|
|
|
sync_events::InvitedRoom { |
|
|
|
|
|
|
|
invite_state: sync_events::InviteState { |
|
|
|
invite_state: sync_events::InviteState { |
|
|
|
events: db |
|
|
|
events: db |
|
|
|
.rooms |
|
|
|
.rooms |
|
|
|
@ -2446,8 +2447,11 @@ pub fn sync_route( |
|
|
|
.map(|(_, pdu)| pdu.to_stripped_state_event()) |
|
|
|
.map(|(_, pdu)| pdu.to_stripped_state_event()) |
|
|
|
.collect(), |
|
|
|
.collect(), |
|
|
|
}, |
|
|
|
}, |
|
|
|
}, |
|
|
|
}; |
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
if !invited_room.is_empty() { |
|
|
|
|
|
|
|
invited_rooms.insert(room_id.clone(), invited_room); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
MatrixResult(Ok(sync_events::Response { |
|
|
|
MatrixResult(Ok(sync_events::Response { |
|
|
|
@ -2482,17 +2486,16 @@ pub fn sync_route( |
|
|
|
.map(|(_, v)| v) |
|
|
|
.map(|(_, v)| v) |
|
|
|
.collect(), |
|
|
|
.collect(), |
|
|
|
}, |
|
|
|
}, |
|
|
|
device_lists: if since != 0 { |
|
|
|
device_lists: sync_events::DeviceLists { |
|
|
|
Some(sync_events::DeviceLists { |
|
|
|
changed: if since != 0 { |
|
|
|
changed: db |
|
|
|
db.users |
|
|
|
.users |
|
|
|
|
|
|
|
.device_keys_changed(since) |
|
|
|
.device_keys_changed(since) |
|
|
|
.map(|u| u.unwrap()) |
|
|
|
.map(|u| u.unwrap()) |
|
|
|
.collect(), |
|
|
|
.collect() |
|
|
|
left: Vec::new(), // TODO
|
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
} else { |
|
|
|
} else { |
|
|
|
None // TODO: left
|
|
|
|
Vec::new() |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
left: Vec::new(), // TODO
|
|
|
|
}, |
|
|
|
}, |
|
|
|
device_one_time_keys_count: Default::default(), // TODO
|
|
|
|
device_one_time_keys_count: Default::default(), // TODO
|
|
|
|
to_device: sync_events::ToDevice { |
|
|
|
to_device: sync_events::ToDevice { |
|
|
|
|