crypto: Change the way we load the devices/sessions in the SqliteStore.

master
Damir Jelić 2020-08-11 14:43:18 +02:00
parent 01bcbaf063
commit 8f4ac3da7f
1 changed files with 18 additions and 25 deletions

View File

@ -363,7 +363,7 @@ impl SqliteStore {
.collect::<Result<Vec<Session>>>()?) .collect::<Result<Vec<Session>>>()?)
} }
async fn load_inbound_group_sessions(&self) -> Result<Vec<InboundGroupSession>> { async fn load_inbound_group_sessions(&self) -> Result<()> {
let account_id = self.account_id().ok_or(CryptoStoreError::AccountUnset)?; let account_id = self.account_id().ok_or(CryptoStoreError::AccountUnset)?;
let mut connection = self.connection.lock().await; let mut connection = self.connection.lock().await;
@ -375,7 +375,7 @@ impl SqliteStore {
.fetch_all(&mut *connection) .fetch_all(&mut *connection)
.await?; .await?;
Ok(rows let mut group_sessions = rows
.iter() .iter()
.map(|row| { .map(|row| {
let pickle = &row.0; let pickle = &row.0;
@ -391,7 +391,16 @@ impl SqliteStore {
RoomId::try_from(room_id.as_str()).unwrap(), RoomId::try_from(room_id.as_str()).unwrap(),
)?) )?)
}) })
.collect::<Result<Vec<InboundGroupSession>>>()?) .collect::<Result<Vec<InboundGroupSession>>>()?;
group_sessions
.drain(..)
.map(|s| {
self.inbound_group_sessions.add(s);
})
.for_each(drop);
Ok(())
} }
async fn save_tracked_user(&self, user: &UserId, dirty: bool) -> Result<()> { async fn save_tracked_user(&self, user: &UserId, dirty: bool) -> Result<()> {
@ -444,7 +453,7 @@ impl SqliteStore {
Ok(()) Ok(())
} }
async fn load_devices(&self) -> Result<DeviceStore> { async fn load_devices(&self) -> Result<()> {
let account_id = self.account_id().ok_or(CryptoStoreError::AccountUnset)?; let account_id = self.account_id().ok_or(CryptoStoreError::AccountUnset)?;
let mut connection = self.connection.lock().await; let mut connection = self.connection.lock().await;
@ -456,8 +465,6 @@ impl SqliteStore {
.fetch_all(&mut *connection) .fetch_all(&mut *connection)
.await?; .await?;
let store = DeviceStore::new();
for row in rows { for row in rows {
let device_row_id = row.0; let device_row_id = row.0;
let user_id: &str = &row.1; let user_id: &str = &row.1;
@ -550,10 +557,10 @@ impl SqliteStore {
signatures, signatures,
); );
store.add(device); self.devices.add(device);
} }
Ok(store) Ok(())
} }
async fn save_device_helper(&self, device: Device) -> Result<()> { async fn save_device_helper(&self, device: Device) -> Result<()> {
@ -683,18 +690,8 @@ impl CryptoStore for SqliteStore {
drop(connection); drop(connection);
let mut group_sessions = self.load_inbound_group_sessions().await?; self.load_inbound_group_sessions().await?;
self.load_devices().await?;
group_sessions
.drain(..)
.map(|s| {
self.inbound_group_sessions.add(s);
})
.for_each(drop);
let devices = self.load_devices().await?;
self.devices = devices;
self.load_tracked_users().await?; self.load_tracked_users().await?;
Ok(result) Ok(result)
@ -1164,16 +1161,12 @@ mod test {
) )
.expect("Can't create session"); .expect("Can't create session");
let session_id = session.session_id().to_owned();
store store
.save_inbound_group_session(session.clone()) .save_inbound_group_session(session.clone())
.await .await
.expect("Can't save group session"); .expect("Can't save group session");
let sessions = store.load_inbound_group_sessions().await.unwrap(); store.load_inbound_group_sessions().await.unwrap();
assert_eq!(session_id, sessions[0].session_id());
let loaded_session = store let loaded_session = store
.get_inbound_group_session(&session.room_id, &session.sender_key, session.session_id()) .get_inbound_group_session(&session.room_id, &session.sender_key, session.session_id())