Remove lots of redundant string allocations
This commit is contained in:
		
							parent
							
								
									fe744c856f
								
							
						
					
					
						commit
						dbe8c2ce19
					
				
					 7 changed files with 87 additions and 95 deletions
				
			
		|  | @ -217,7 +217,7 @@ impl Database { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub async fn watch(&self, user_id: &UserId, device_id: &DeviceId) { |     pub async fn watch(&self, user_id: &UserId, device_id: &DeviceId) { | ||||||
|         let userid_bytes = user_id.to_string().as_bytes().to_vec(); |         let userid_bytes = user_id.as_bytes().to_vec(); | ||||||
|         let mut userid_prefix = userid_bytes.clone(); |         let mut userid_prefix = userid_bytes.clone(); | ||||||
|         userid_prefix.push(0xff); |         userid_prefix.push(0xff); | ||||||
| 
 | 
 | ||||||
|  | @ -241,7 +241,7 @@ impl Database { | ||||||
| 
 | 
 | ||||||
|         // Events for rooms we are in
 |         // Events for rooms we are in
 | ||||||
|         for room_id in self.rooms.rooms_joined(user_id).filter_map(|r| r.ok()) { |         for room_id in self.rooms.rooms_joined(user_id).filter_map(|r| r.ok()) { | ||||||
|             let roomid_bytes = room_id.to_string().as_bytes().to_vec(); |             let roomid_bytes = room_id.as_bytes().to_vec(); | ||||||
|             let mut roomid_prefix = roomid_bytes.clone(); |             let mut roomid_prefix = roomid_bytes.clone(); | ||||||
|             roomid_prefix.push(0xff); |             roomid_prefix.push(0xff); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -30,7 +30,7 @@ impl AccountData { | ||||||
|             .as_bytes() |             .as_bytes() | ||||||
|             .to_vec(); |             .to_vec(); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
|         prefix.extend_from_slice(&user_id.to_string().as_bytes()); |         prefix.extend_from_slice(&user_id.as_bytes()); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
| 
 | 
 | ||||||
|         // Remove old entry
 |         // Remove old entry
 | ||||||
|  | @ -42,7 +42,7 @@ impl AccountData { | ||||||
|         let mut key = prefix; |         let mut key = prefix; | ||||||
|         key.extend_from_slice(&globals.next_count()?.to_be_bytes()); |         key.extend_from_slice(&globals.next_count()?.to_be_bytes()); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|         key.extend_from_slice(event_type.to_string().as_bytes()); |         key.extend_from_slice(event_type.as_ref().as_bytes()); | ||||||
| 
 | 
 | ||||||
|         let json = serde_json::to_value(data).expect("all types here can be serialized"); // TODO: maybe add error handling
 |         let json = serde_json::to_value(data).expect("all types here can be serialized"); // TODO: maybe add error handling
 | ||||||
|         if json.get("type").is_none() || json.get("content").is_none() { |         if json.get("type").is_none() || json.get("content").is_none() { | ||||||
|  | @ -89,7 +89,7 @@ impl AccountData { | ||||||
|             .as_bytes() |             .as_bytes() | ||||||
|             .to_vec(); |             .to_vec(); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
|         prefix.extend_from_slice(&user_id.to_string().as_bytes()); |         prefix.extend_from_slice(&user_id.as_bytes()); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
| 
 | 
 | ||||||
|         // Skip the data that's exactly at since, because we sent that last time
 |         // Skip the data that's exactly at since, because we sent that last time
 | ||||||
|  | @ -135,7 +135,7 @@ impl AccountData { | ||||||
|             .as_bytes() |             .as_bytes() | ||||||
|             .to_vec(); |             .to_vec(); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
|         prefix.extend_from_slice(&user_id.to_string().as_bytes()); |         prefix.extend_from_slice(&user_id.as_bytes()); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
|         let kind = kind.clone(); |         let kind = kind.clone(); | ||||||
| 
 | 
 | ||||||
|  | @ -148,7 +148,7 @@ impl AccountData { | ||||||
|                         k.rsplit(|&b| b == 0xff) |                         k.rsplit(|&b| b == 0xff) | ||||||
|                             .next() |                             .next() | ||||||
|                             .map(|current_event_type| { |                             .map(|current_event_type| { | ||||||
|                                 current_event_type == kind.to_string().as_bytes() |                                 current_event_type == kind.as_ref().as_bytes() | ||||||
|                             }) |                             }) | ||||||
|                             .unwrap_or(false) |                             .unwrap_or(false) | ||||||
|                     }) |                     }) | ||||||
|  |  | ||||||
|  | @ -24,7 +24,7 @@ impl KeyBackups { | ||||||
|     ) -> Result<String> { |     ) -> Result<String> { | ||||||
|         let version = globals.next_count()?.to_string(); |         let version = globals.next_count()?.to_string(); | ||||||
| 
 | 
 | ||||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); |         let mut key = user_id.as_bytes().to_vec(); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|         key.extend_from_slice(&version.as_bytes()); |         key.extend_from_slice(&version.as_bytes()); | ||||||
| 
 | 
 | ||||||
|  | @ -39,7 +39,7 @@ impl KeyBackups { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn delete_backup(&self, user_id: &UserId, version: &str) -> Result<()> { |     pub fn delete_backup(&self, user_id: &UserId, version: &str) -> Result<()> { | ||||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); |         let mut key = user_id.as_bytes().to_vec(); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|         key.extend_from_slice(&version.as_bytes()); |         key.extend_from_slice(&version.as_bytes()); | ||||||
| 
 | 
 | ||||||
|  | @ -67,7 +67,7 @@ impl KeyBackups { | ||||||
|         backup_metadata: &BackupAlgorithm, |         backup_metadata: &BackupAlgorithm, | ||||||
|         globals: &super::globals::Globals, |         globals: &super::globals::Globals, | ||||||
|     ) -> Result<String> { |     ) -> Result<String> { | ||||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); |         let mut key = user_id.as_bytes().to_vec(); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|         key.extend_from_slice(&version.as_bytes()); |         key.extend_from_slice(&version.as_bytes()); | ||||||
| 
 | 
 | ||||||
|  | @ -89,7 +89,7 @@ impl KeyBackups { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn get_latest_backup(&self, user_id: &UserId) -> Result<Option<(String, BackupAlgorithm)>> { |     pub fn get_latest_backup(&self, user_id: &UserId) -> Result<Option<(String, BackupAlgorithm)>> { | ||||||
|         let mut prefix = user_id.to_string().as_bytes().to_vec(); |         let mut prefix = user_id.as_bytes().to_vec(); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
|         self.backupid_algorithm |         self.backupid_algorithm | ||||||
|             .scan_prefix(&prefix) |             .scan_prefix(&prefix) | ||||||
|  | @ -113,7 +113,7 @@ impl KeyBackups { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn get_backup(&self, user_id: &UserId, version: &str) -> Result<Option<BackupAlgorithm>> { |     pub fn get_backup(&self, user_id: &UserId, version: &str) -> Result<Option<BackupAlgorithm>> { | ||||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); |         let mut key = user_id.as_bytes().to_vec(); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|         key.extend_from_slice(version.as_bytes()); |         key.extend_from_slice(version.as_bytes()); | ||||||
| 
 | 
 | ||||||
|  | @ -132,7 +132,7 @@ impl KeyBackups { | ||||||
|         key_data: &KeyBackupData, |         key_data: &KeyBackupData, | ||||||
|         globals: &super::globals::Globals, |         globals: &super::globals::Globals, | ||||||
|     ) -> Result<()> { |     ) -> Result<()> { | ||||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); |         let mut key = user_id.as_bytes().to_vec(); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|         key.extend_from_slice(version.as_bytes()); |         key.extend_from_slice(version.as_bytes()); | ||||||
| 
 | 
 | ||||||
|  | @ -147,7 +147,7 @@ impl KeyBackups { | ||||||
|             .insert(&key, &globals.next_count()?.to_be_bytes())?; |             .insert(&key, &globals.next_count()?.to_be_bytes())?; | ||||||
| 
 | 
 | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|         key.extend_from_slice(room_id.to_string().as_bytes()); |         key.extend_from_slice(room_id.as_bytes()); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|         key.extend_from_slice(session_id.as_bytes()); |         key.extend_from_slice(session_id.as_bytes()); | ||||||
| 
 | 
 | ||||||
|  | @ -160,7 +160,7 @@ impl KeyBackups { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn count_keys(&self, user_id: &UserId, version: &str) -> Result<usize> { |     pub fn count_keys(&self, user_id: &UserId, version: &str) -> Result<usize> { | ||||||
|         let mut prefix = user_id.to_string().as_bytes().to_vec(); |         let mut prefix = user_id.as_bytes().to_vec(); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
|         prefix.extend_from_slice(version.as_bytes()); |         prefix.extend_from_slice(version.as_bytes()); | ||||||
| 
 | 
 | ||||||
|  | @ -168,7 +168,7 @@ impl KeyBackups { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn get_etag(&self, user_id: &UserId, version: &str) -> Result<String> { |     pub fn get_etag(&self, user_id: &UserId, version: &str) -> Result<String> { | ||||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); |         let mut key = user_id.as_bytes().to_vec(); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|         key.extend_from_slice(&version.as_bytes()); |         key.extend_from_slice(&version.as_bytes()); | ||||||
| 
 | 
 | ||||||
|  | @ -187,7 +187,7 @@ impl KeyBackups { | ||||||
|         user_id: &UserId, |         user_id: &UserId, | ||||||
|         version: &str, |         version: &str, | ||||||
|     ) -> Result<BTreeMap<RoomId, RoomKeyBackup>> { |     ) -> Result<BTreeMap<RoomId, RoomKeyBackup>> { | ||||||
|         let mut prefix = user_id.to_string().as_bytes().to_vec(); |         let mut prefix = user_id.as_bytes().to_vec(); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
|         prefix.extend_from_slice(version.as_bytes()); |         prefix.extend_from_slice(version.as_bytes()); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
|  | @ -240,7 +240,7 @@ impl KeyBackups { | ||||||
|         version: &str, |         version: &str, | ||||||
|         room_id: &RoomId, |         room_id: &RoomId, | ||||||
|     ) -> BTreeMap<String, KeyBackupData> { |     ) -> BTreeMap<String, KeyBackupData> { | ||||||
|         let mut prefix = user_id.to_string().as_bytes().to_vec(); |         let mut prefix = user_id.as_bytes().to_vec(); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
|         prefix.extend_from_slice(version.as_bytes()); |         prefix.extend_from_slice(version.as_bytes()); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
|  | @ -278,7 +278,7 @@ impl KeyBackups { | ||||||
|         room_id: &RoomId, |         room_id: &RoomId, | ||||||
|         session_id: &str, |         session_id: &str, | ||||||
|     ) -> Result<Option<KeyBackupData>> { |     ) -> Result<Option<KeyBackupData>> { | ||||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); |         let mut key = user_id.as_bytes().to_vec(); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|         key.extend_from_slice(version.as_bytes()); |         key.extend_from_slice(version.as_bytes()); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|  | @ -297,7 +297,7 @@ impl KeyBackups { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn delete_all_keys(&self, user_id: &UserId, version: &str) -> Result<()> { |     pub fn delete_all_keys(&self, user_id: &UserId, version: &str) -> Result<()> { | ||||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); |         let mut key = user_id.as_bytes().to_vec(); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|         key.extend_from_slice(&version.as_bytes()); |         key.extend_from_slice(&version.as_bytes()); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|  | @ -320,7 +320,7 @@ impl KeyBackups { | ||||||
|         version: &str, |         version: &str, | ||||||
|         room_id: &RoomId, |         room_id: &RoomId, | ||||||
|     ) -> Result<()> { |     ) -> Result<()> { | ||||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); |         let mut key = user_id.as_bytes().to_vec(); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|         key.extend_from_slice(&version.as_bytes()); |         key.extend_from_slice(&version.as_bytes()); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|  | @ -346,7 +346,7 @@ impl KeyBackups { | ||||||
|         room_id: &RoomId, |         room_id: &RoomId, | ||||||
|         session_id: &str, |         session_id: &str, | ||||||
|     ) -> Result<()> { |     ) -> Result<()> { | ||||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); |         let mut key = user_id.as_bytes().to_vec(); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|         key.extend_from_slice(&version.as_bytes()); |         key.extend_from_slice(&version.as_bytes()); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|  |  | ||||||
|  | @ -151,7 +151,7 @@ impl Rooms { | ||||||
|         event_type: &EventType, |         event_type: &EventType, | ||||||
|         state_key: &str, |         state_key: &str, | ||||||
|     ) -> Result<Option<PduEvent>> { |     ) -> Result<Option<PduEvent>> { | ||||||
|         let mut key = event_type.to_string().as_bytes().to_vec(); |         let mut key = event_type.as_ref().as_bytes().to_vec(); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|         key.extend_from_slice(&state_key.as_bytes()); |         key.extend_from_slice(&state_key.as_bytes()); | ||||||
| 
 | 
 | ||||||
|  | @ -416,7 +416,7 @@ impl Rooms { | ||||||
|     /// Returns the pdu's id.
 |     /// Returns the pdu's id.
 | ||||||
|     pub fn get_pdu_id(&self, event_id: &EventId) -> Result<Option<IVec>> { |     pub fn get_pdu_id(&self, event_id: &EventId) -> Result<Option<IVec>> { | ||||||
|         self.eventid_pduid |         self.eventid_pduid | ||||||
|             .get(event_id.to_string().as_bytes())? |             .get(event_id.as_bytes())? | ||||||
|             .map_or(Ok(None), |pdu_id| Ok(Some(pdu_id))) |             .map_or(Ok(None), |pdu_id| Ok(Some(pdu_id))) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -690,7 +690,7 @@ impl Rooms { | ||||||
|                         .split_terminator(|c: char| !c.is_alphanumeric()) |                         .split_terminator(|c: char| !c.is_alphanumeric()) | ||||||
|                         .map(str::to_lowercase) |                         .map(str::to_lowercase) | ||||||
|                     { |                     { | ||||||
|                         let mut key = pdu.room_id.to_string().as_bytes().to_vec(); |                         let mut key = pdu.room_id.as_bytes().to_vec(); | ||||||
|                         key.push(0xff); |                         key.push(0xff); | ||||||
|                         key.extend_from_slice(word.as_bytes()); |                         key.extend_from_slice(word.as_bytes()); | ||||||
|                         key.push(0xff); |                         key.push(0xff); | ||||||
|  | @ -1264,7 +1264,7 @@ impl Rooms { | ||||||
|         room_id: &RoomId, |         room_id: &RoomId, | ||||||
|         since: u64, |         since: u64, | ||||||
|     ) -> Result<impl DoubleEndedIterator<Item = Result<(IVec, PduEvent)>>> { |     ) -> Result<impl DoubleEndedIterator<Item = Result<(IVec, PduEvent)>>> { | ||||||
|         let mut prefix = room_id.to_string().as_bytes().to_vec(); |         let mut prefix = room_id.as_bytes().to_vec(); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
| 
 | 
 | ||||||
|         // Skip the first pdu if it's exactly at since, because we sent that last time
 |         // Skip the first pdu if it's exactly at since, because we sent that last time
 | ||||||
|  | @ -1298,7 +1298,7 @@ impl Rooms { | ||||||
|         until: u64, |         until: u64, | ||||||
|     ) -> impl Iterator<Item = Result<(IVec, PduEvent)>> { |     ) -> impl Iterator<Item = Result<(IVec, PduEvent)>> { | ||||||
|         // Create the first part of the full pdu id
 |         // Create the first part of the full pdu id
 | ||||||
|         let mut prefix = room_id.to_string().as_bytes().to_vec(); |         let mut prefix = room_id.as_bytes().to_vec(); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
| 
 | 
 | ||||||
|         let mut current = prefix.clone(); |         let mut current = prefix.clone(); | ||||||
|  | @ -1332,7 +1332,7 @@ impl Rooms { | ||||||
|         from: u64, |         from: u64, | ||||||
|     ) -> impl Iterator<Item = Result<(IVec, PduEvent)>> { |     ) -> impl Iterator<Item = Result<(IVec, PduEvent)>> { | ||||||
|         // Create the first part of the full pdu id
 |         // Create the first part of the full pdu id
 | ||||||
|         let mut prefix = room_id.to_string().as_bytes().to_vec(); |         let mut prefix = room_id.as_bytes().to_vec(); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
| 
 | 
 | ||||||
|         let mut current = prefix.clone(); |         let mut current = prefix.clone(); | ||||||
|  | @ -1883,9 +1883,9 @@ impl Rooms { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn once_joined(&self, user_id: &UserId, room_id: &RoomId) -> Result<bool> { |     pub fn once_joined(&self, user_id: &UserId, room_id: &RoomId) -> Result<bool> { | ||||||
|         let mut userroom_id = user_id.to_string().as_bytes().to_vec(); |         let mut userroom_id = user_id.as_bytes().to_vec(); | ||||||
|         userroom_id.push(0xff); |         userroom_id.push(0xff); | ||||||
|         userroom_id.extend_from_slice(room_id.to_string().as_bytes()); |         userroom_id.extend_from_slice(room_id.as_bytes()); | ||||||
| 
 | 
 | ||||||
|         Ok(self.roomuseroncejoinedids.get(userroom_id)?.is_some()) |         Ok(self.roomuseroncejoinedids.get(userroom_id)?.is_some()) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -34,7 +34,7 @@ impl RoomEdus { | ||||||
|         event: EduEvent, |         event: EduEvent, | ||||||
|         globals: &super::super::globals::Globals, |         globals: &super::super::globals::Globals, | ||||||
|     ) -> Result<()> { |     ) -> Result<()> { | ||||||
|         let mut prefix = room_id.to_string().as_bytes().to_vec(); |         let mut prefix = room_id.as_bytes().to_vec(); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
| 
 | 
 | ||||||
|         // Remove old entry
 |         // Remove old entry
 | ||||||
|  | @ -49,7 +49,7 @@ impl RoomEdus { | ||||||
|                 key.rsplit(|&b| b == 0xff) |                 key.rsplit(|&b| b == 0xff) | ||||||
|                     .next() |                     .next() | ||||||
|                     .expect("rsplit always returns an element") |                     .expect("rsplit always returns an element") | ||||||
|                     == user_id.to_string().as_bytes() |                     == user_id.as_bytes() | ||||||
|             }) |             }) | ||||||
|         { |         { | ||||||
|             // This is the old room_latest
 |             // This is the old room_latest
 | ||||||
|  | @ -59,7 +59,7 @@ impl RoomEdus { | ||||||
|         let mut room_latest_id = prefix; |         let mut room_latest_id = prefix; | ||||||
|         room_latest_id.extend_from_slice(&globals.next_count()?.to_be_bytes()); |         room_latest_id.extend_from_slice(&globals.next_count()?.to_be_bytes()); | ||||||
|         room_latest_id.push(0xff); |         room_latest_id.push(0xff); | ||||||
|         room_latest_id.extend_from_slice(&user_id.to_string().as_bytes()); |         room_latest_id.extend_from_slice(&user_id.as_bytes()); | ||||||
| 
 | 
 | ||||||
|         self.readreceiptid_readreceipt.insert( |         self.readreceiptid_readreceipt.insert( | ||||||
|             room_latest_id, |             room_latest_id, | ||||||
|  | @ -76,7 +76,7 @@ impl RoomEdus { | ||||||
|         room_id: &RoomId, |         room_id: &RoomId, | ||||||
|         since: u64, |         since: u64, | ||||||
|     ) -> Result<impl Iterator<Item = Result<Raw<ruma::events::AnySyncEphemeralRoomEvent>>>> { |     ) -> Result<impl Iterator<Item = Result<Raw<ruma::events::AnySyncEphemeralRoomEvent>>>> { | ||||||
|         let mut prefix = room_id.to_string().as_bytes().to_vec(); |         let mut prefix = room_id.as_bytes().to_vec(); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
| 
 | 
 | ||||||
|         let mut first_possible_edu = prefix.clone(); |         let mut first_possible_edu = prefix.clone(); | ||||||
|  | @ -102,9 +102,9 @@ impl RoomEdus { | ||||||
|         count: u64, |         count: u64, | ||||||
|         globals: &super::super::globals::Globals, |         globals: &super::super::globals::Globals, | ||||||
|     ) -> Result<()> { |     ) -> Result<()> { | ||||||
|         let mut key = room_id.to_string().as_bytes().to_vec(); |         let mut key = room_id.as_bytes().to_vec(); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|         key.extend_from_slice(&user_id.to_string().as_bytes()); |         key.extend_from_slice(&user_id.as_bytes()); | ||||||
| 
 | 
 | ||||||
|         self.roomuserid_privateread |         self.roomuserid_privateread | ||||||
|             .insert(&key, &count.to_be_bytes())?; |             .insert(&key, &count.to_be_bytes())?; | ||||||
|  | @ -118,9 +118,9 @@ impl RoomEdus { | ||||||
|     /// Returns the private read marker.
 |     /// Returns the private read marker.
 | ||||||
|     #[tracing::instrument(skip(self))] |     #[tracing::instrument(skip(self))] | ||||||
|     pub fn private_read_get(&self, room_id: &RoomId, user_id: &UserId) -> Result<Option<u64>> { |     pub fn private_read_get(&self, room_id: &RoomId, user_id: &UserId) -> Result<Option<u64>> { | ||||||
|         let mut key = room_id.to_string().as_bytes().to_vec(); |         let mut key = room_id.as_bytes().to_vec(); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|         key.extend_from_slice(&user_id.to_string().as_bytes()); |         key.extend_from_slice(&user_id.as_bytes()); | ||||||
| 
 | 
 | ||||||
|         self.roomuserid_privateread.get(key)?.map_or(Ok(None), |v| { |         self.roomuserid_privateread.get(key)?.map_or(Ok(None), |v| { | ||||||
|             Ok(Some(utils::u64_from_bytes(&v).map_err(|_| { |             Ok(Some(utils::u64_from_bytes(&v).map_err(|_| { | ||||||
|  | @ -131,9 +131,9 @@ impl RoomEdus { | ||||||
| 
 | 
 | ||||||
|     /// Returns the count of the last typing update in this room.
 |     /// Returns the count of the last typing update in this room.
 | ||||||
|     pub fn last_privateread_update(&self, user_id: &UserId, room_id: &RoomId) -> Result<u64> { |     pub fn last_privateread_update(&self, user_id: &UserId, room_id: &RoomId) -> Result<u64> { | ||||||
|         let mut key = room_id.to_string().as_bytes().to_vec(); |         let mut key = room_id.as_bytes().to_vec(); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|         key.extend_from_slice(&user_id.to_string().as_bytes()); |         key.extend_from_slice(&user_id.as_bytes()); | ||||||
| 
 | 
 | ||||||
|         Ok(self |         Ok(self | ||||||
|             .roomuserid_lastprivatereadupdate |             .roomuserid_lastprivatereadupdate | ||||||
|  | @ -155,7 +155,7 @@ impl RoomEdus { | ||||||
|         timeout: u64, |         timeout: u64, | ||||||
|         globals: &super::super::globals::Globals, |         globals: &super::super::globals::Globals, | ||||||
|     ) -> Result<()> { |     ) -> Result<()> { | ||||||
|         let mut prefix = room_id.to_string().as_bytes().to_vec(); |         let mut prefix = room_id.as_bytes().to_vec(); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
| 
 | 
 | ||||||
|         let count = globals.next_count()?.to_be_bytes(); |         let count = globals.next_count()?.to_be_bytes(); | ||||||
|  | @ -166,10 +166,10 @@ impl RoomEdus { | ||||||
|         room_typing_id.extend_from_slice(&count); |         room_typing_id.extend_from_slice(&count); | ||||||
| 
 | 
 | ||||||
|         self.typingid_userid |         self.typingid_userid | ||||||
|             .insert(&room_typing_id, &*user_id.to_string().as_bytes())?; |             .insert(&room_typing_id, &*user_id.as_bytes())?; | ||||||
| 
 | 
 | ||||||
|         self.roomid_lasttypingupdate |         self.roomid_lasttypingupdate | ||||||
|             .insert(&room_id.to_string().as_bytes(), &count)?; |             .insert(&room_id.as_bytes(), &count)?; | ||||||
| 
 | 
 | ||||||
|         Ok(()) |         Ok(()) | ||||||
|     } |     } | ||||||
|  | @ -181,7 +181,7 @@ impl RoomEdus { | ||||||
|         room_id: &RoomId, |         room_id: &RoomId, | ||||||
|         globals: &super::super::globals::Globals, |         globals: &super::super::globals::Globals, | ||||||
|     ) -> Result<()> { |     ) -> Result<()> { | ||||||
|         let mut prefix = room_id.to_string().as_bytes().to_vec(); |         let mut prefix = room_id.as_bytes().to_vec(); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
| 
 | 
 | ||||||
|         let user_id = user_id.to_string(); |         let user_id = user_id.to_string(); | ||||||
|  | @ -200,10 +200,8 @@ impl RoomEdus { | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if found_outdated { |         if found_outdated { | ||||||
|             self.roomid_lasttypingupdate.insert( |             self.roomid_lasttypingupdate | ||||||
|                 &room_id.to_string().as_bytes(), |                 .insert(&room_id.as_bytes(), &globals.next_count()?.to_be_bytes())?; | ||||||
|                 &globals.next_count()?.to_be_bytes(), |  | ||||||
|             )?; |  | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         Ok(()) |         Ok(()) | ||||||
|  | @ -215,7 +213,7 @@ impl RoomEdus { | ||||||
|         room_id: &RoomId, |         room_id: &RoomId, | ||||||
|         globals: &super::super::globals::Globals, |         globals: &super::super::globals::Globals, | ||||||
|     ) -> Result<()> { |     ) -> Result<()> { | ||||||
|         let mut prefix = room_id.to_string().as_bytes().to_vec(); |         let mut prefix = room_id.as_bytes().to_vec(); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
| 
 | 
 | ||||||
|         let current_timestamp = utils::millis_since_unix_epoch(); |         let current_timestamp = utils::millis_since_unix_epoch(); | ||||||
|  | @ -248,10 +246,8 @@ impl RoomEdus { | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if found_outdated { |         if found_outdated { | ||||||
|             self.roomid_lasttypingupdate.insert( |             self.roomid_lasttypingupdate | ||||||
|                 &room_id.to_string().as_bytes(), |                 .insert(&room_id.as_bytes(), &globals.next_count()?.to_be_bytes())?; | ||||||
|                 &globals.next_count()?.to_be_bytes(), |  | ||||||
|             )?; |  | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         Ok(()) |         Ok(()) | ||||||
|  | @ -268,7 +264,7 @@ impl RoomEdus { | ||||||
| 
 | 
 | ||||||
|         Ok(self |         Ok(self | ||||||
|             .roomid_lasttypingupdate |             .roomid_lasttypingupdate | ||||||
|             .get(&room_id.to_string().as_bytes())? |             .get(&room_id.as_bytes())? | ||||||
|             .map_or(Ok::<_, Error>(None), |bytes| { |             .map_or(Ok::<_, Error>(None), |bytes| { | ||||||
|                 Ok(Some(utils::u64_from_bytes(&bytes).map_err(|_| { |                 Ok(Some(utils::u64_from_bytes(&bytes).map_err(|_| { | ||||||
|                     Error::bad_database("Count in roomid_lastroomactiveupdate is invalid.") |                     Error::bad_database("Count in roomid_lastroomactiveupdate is invalid.") | ||||||
|  | @ -281,7 +277,7 @@ impl RoomEdus { | ||||||
|         &self, |         &self, | ||||||
|         room_id: &RoomId, |         room_id: &RoomId, | ||||||
|     ) -> Result<SyncEphemeralRoomEvent<ruma::events::typing::TypingEventContent>> { |     ) -> Result<SyncEphemeralRoomEvent<ruma::events::typing::TypingEventContent>> { | ||||||
|         let mut prefix = room_id.to_string().as_bytes().to_vec(); |         let mut prefix = room_id.as_bytes().to_vec(); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
| 
 | 
 | ||||||
|         let mut user_ids = Vec::new(); |         let mut user_ids = Vec::new(); | ||||||
|  | @ -322,11 +318,11 @@ impl RoomEdus { | ||||||
| 
 | 
 | ||||||
|         let count = globals.next_count()?.to_be_bytes(); |         let count = globals.next_count()?.to_be_bytes(); | ||||||
| 
 | 
 | ||||||
|         let mut presence_id = room_id.to_string().as_bytes().to_vec(); |         let mut presence_id = room_id.as_bytes().to_vec(); | ||||||
|         presence_id.push(0xff); |         presence_id.push(0xff); | ||||||
|         presence_id.extend_from_slice(&count); |         presence_id.extend_from_slice(&count); | ||||||
|         presence_id.push(0xff); |         presence_id.push(0xff); | ||||||
|         presence_id.extend_from_slice(&presence.sender.to_string().as_bytes()); |         presence_id.extend_from_slice(&presence.sender.as_bytes()); | ||||||
| 
 | 
 | ||||||
|         self.presenceid_presence.insert( |         self.presenceid_presence.insert( | ||||||
|             presence_id, |             presence_id, | ||||||
|  | @ -334,7 +330,7 @@ impl RoomEdus { | ||||||
|         )?; |         )?; | ||||||
| 
 | 
 | ||||||
|         self.userid_lastpresenceupdate.insert( |         self.userid_lastpresenceupdate.insert( | ||||||
|             &user_id.to_string().as_bytes(), |             &user_id.as_bytes(), | ||||||
|             &utils::millis_since_unix_epoch().to_be_bytes(), |             &utils::millis_since_unix_epoch().to_be_bytes(), | ||||||
|         )?; |         )?; | ||||||
| 
 | 
 | ||||||
|  | @ -345,7 +341,7 @@ impl RoomEdus { | ||||||
|     #[tracing::instrument(skip(self))] |     #[tracing::instrument(skip(self))] | ||||||
|     pub fn ping_presence(&self, user_id: &UserId) -> Result<()> { |     pub fn ping_presence(&self, user_id: &UserId) -> Result<()> { | ||||||
|         self.userid_lastpresenceupdate.insert( |         self.userid_lastpresenceupdate.insert( | ||||||
|             &user_id.to_string().as_bytes(), |             &user_id.as_bytes(), | ||||||
|             &utils::millis_since_unix_epoch().to_be_bytes(), |             &utils::millis_since_unix_epoch().to_be_bytes(), | ||||||
|         )?; |         )?; | ||||||
| 
 | 
 | ||||||
|  | @ -355,7 +351,7 @@ impl RoomEdus { | ||||||
|     /// Returns the timestamp of the last presence update of this user in millis since the unix epoch.
 |     /// Returns the timestamp of the last presence update of this user in millis since the unix epoch.
 | ||||||
|     pub fn last_presence_update(&self, user_id: &UserId) -> Result<Option<u64>> { |     pub fn last_presence_update(&self, user_id: &UserId) -> Result<Option<u64>> { | ||||||
|         self.userid_lastpresenceupdate |         self.userid_lastpresenceupdate | ||||||
|             .get(&user_id.to_string().as_bytes())? |             .get(&user_id.as_bytes())? | ||||||
|             .map(|bytes| { |             .map(|bytes| { | ||||||
|                 utils::u64_from_bytes(&bytes).map_err(|_| { |                 utils::u64_from_bytes(&bytes).map_err(|_| { | ||||||
|                     Error::bad_database("Invalid timestamp in userid_lastpresenceupdate.") |                     Error::bad_database("Invalid timestamp in userid_lastpresenceupdate.") | ||||||
|  | @ -398,7 +394,7 @@ impl RoomEdus { | ||||||
|                 .try_into() |                 .try_into() | ||||||
|                 .map_err(|_| Error::bad_database("Invalid UserId in userid_lastpresenceupdate."))?; |                 .map_err(|_| Error::bad_database("Invalid UserId in userid_lastpresenceupdate."))?; | ||||||
|             for room_id in rooms.rooms_joined(&user_id).filter_map(|r| r.ok()) { |             for room_id in rooms.rooms_joined(&user_id).filter_map(|r| r.ok()) { | ||||||
|                 let mut presence_id = room_id.to_string().as_bytes().to_vec(); |                 let mut presence_id = room_id.as_bytes().to_vec(); | ||||||
|                 presence_id.push(0xff); |                 presence_id.push(0xff); | ||||||
|                 presence_id.extend_from_slice(&count); |                 presence_id.extend_from_slice(&count); | ||||||
|                 presence_id.push(0xff); |                 presence_id.push(0xff); | ||||||
|  | @ -424,7 +420,7 @@ impl RoomEdus { | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             self.userid_lastpresenceupdate.insert( |             self.userid_lastpresenceupdate.insert( | ||||||
|                 &user_id.to_string().as_bytes(), |                 &user_id.as_bytes(), | ||||||
|                 &utils::millis_since_unix_epoch().to_be_bytes(), |                 &utils::millis_since_unix_epoch().to_be_bytes(), | ||||||
|             )?; |             )?; | ||||||
|         } |         } | ||||||
|  | @ -443,7 +439,7 @@ impl RoomEdus { | ||||||
|     ) -> Result<HashMap<UserId, PresenceEvent>> { |     ) -> Result<HashMap<UserId, PresenceEvent>> { | ||||||
|         self.presence_maintain(rooms, globals)?; |         self.presence_maintain(rooms, globals)?; | ||||||
| 
 | 
 | ||||||
|         let mut prefix = room_id.to_string().as_bytes().to_vec(); |         let mut prefix = room_id.as_bytes().to_vec(); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
| 
 | 
 | ||||||
|         let mut first_possible_edu = prefix.clone(); |         let mut first_possible_edu = prefix.clone(); | ||||||
|  |  | ||||||
|  | @ -148,7 +148,7 @@ impl Uiaa { | ||||||
|         device_id: &DeviceId, |         device_id: &DeviceId, | ||||||
|         uiaainfo: Option<&UiaaInfo>, |         uiaainfo: Option<&UiaaInfo>, | ||||||
|     ) -> Result<()> { |     ) -> Result<()> { | ||||||
|         let mut userdeviceid = user_id.to_string().as_bytes().to_vec(); |         let mut userdeviceid = user_id.as_bytes().to_vec(); | ||||||
|         userdeviceid.push(0xff); |         userdeviceid.push(0xff); | ||||||
|         userdeviceid.extend_from_slice(device_id.as_bytes()); |         userdeviceid.extend_from_slice(device_id.as_bytes()); | ||||||
| 
 | 
 | ||||||
|  | @ -170,7 +170,7 @@ impl Uiaa { | ||||||
|         device_id: &DeviceId, |         device_id: &DeviceId, | ||||||
|         session: &str, |         session: &str, | ||||||
|     ) -> Result<UiaaInfo> { |     ) -> Result<UiaaInfo> { | ||||||
|         let mut userdeviceid = user_id.to_string().as_bytes().to_vec(); |         let mut userdeviceid = user_id.as_bytes().to_vec(); | ||||||
|         userdeviceid.push(0xff); |         userdeviceid.push(0xff); | ||||||
|         userdeviceid.extend_from_slice(device_id.as_bytes()); |         userdeviceid.extend_from_slice(device_id.as_bytes()); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -185,7 +185,7 @@ impl Users { | ||||||
|         // This method should never be called for nonexistent users.
 |         // This method should never be called for nonexistent users.
 | ||||||
|         assert!(self.exists(user_id)?); |         assert!(self.exists(user_id)?); | ||||||
| 
 | 
 | ||||||
|         let mut userdeviceid = user_id.to_string().as_bytes().to_vec(); |         let mut userdeviceid = user_id.as_bytes().to_vec(); | ||||||
|         userdeviceid.push(0xff); |         userdeviceid.push(0xff); | ||||||
|         userdeviceid.extend_from_slice(device_id.as_bytes()); |         userdeviceid.extend_from_slice(device_id.as_bytes()); | ||||||
| 
 | 
 | ||||||
|  | @ -208,7 +208,7 @@ impl Users { | ||||||
| 
 | 
 | ||||||
|     /// Removes a device from a user.
 |     /// Removes a device from a user.
 | ||||||
|     pub fn remove_device(&self, user_id: &UserId, device_id: &DeviceId) -> Result<()> { |     pub fn remove_device(&self, user_id: &UserId, device_id: &DeviceId) -> Result<()> { | ||||||
|         let mut userdeviceid = user_id.to_string().as_bytes().to_vec(); |         let mut userdeviceid = user_id.as_bytes().to_vec(); | ||||||
|         userdeviceid.push(0xff); |         userdeviceid.push(0xff); | ||||||
|         userdeviceid.extend_from_slice(device_id.as_bytes()); |         userdeviceid.extend_from_slice(device_id.as_bytes()); | ||||||
| 
 | 
 | ||||||
|  | @ -234,7 +234,7 @@ impl Users { | ||||||
| 
 | 
 | ||||||
|     /// Returns an iterator over all device ids of this user.
 |     /// Returns an iterator over all device ids of this user.
 | ||||||
|     pub fn all_device_ids(&self, user_id: &UserId) -> impl Iterator<Item = Result<Box<DeviceId>>> { |     pub fn all_device_ids(&self, user_id: &UserId) -> impl Iterator<Item = Result<Box<DeviceId>>> { | ||||||
|         let mut prefix = user_id.to_string().as_bytes().to_vec(); |         let mut prefix = user_id.as_bytes().to_vec(); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
|         // All devices have metadata
 |         // All devices have metadata
 | ||||||
|         self.userdeviceid_metadata |         self.userdeviceid_metadata | ||||||
|  | @ -254,7 +254,7 @@ impl Users { | ||||||
| 
 | 
 | ||||||
|     /// Replaces the access token of one device.
 |     /// Replaces the access token of one device.
 | ||||||
|     pub fn set_token(&self, user_id: &UserId, device_id: &DeviceId, token: &str) -> Result<()> { |     pub fn set_token(&self, user_id: &UserId, device_id: &DeviceId, token: &str) -> Result<()> { | ||||||
|         let mut userdeviceid = user_id.to_string().as_bytes().to_vec(); |         let mut userdeviceid = user_id.as_bytes().to_vec(); | ||||||
|         userdeviceid.push(0xff); |         userdeviceid.push(0xff); | ||||||
|         userdeviceid.extend_from_slice(device_id.as_bytes()); |         userdeviceid.extend_from_slice(device_id.as_bytes()); | ||||||
| 
 | 
 | ||||||
|  | @ -282,7 +282,7 @@ impl Users { | ||||||
|         one_time_key_value: &OneTimeKey, |         one_time_key_value: &OneTimeKey, | ||||||
|         globals: &super::globals::Globals, |         globals: &super::globals::Globals, | ||||||
|     ) -> Result<()> { |     ) -> Result<()> { | ||||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); |         let mut key = user_id.as_bytes().to_vec(); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|         key.extend_from_slice(device_id.as_bytes()); |         key.extend_from_slice(device_id.as_bytes()); | ||||||
| 
 | 
 | ||||||
|  | @ -305,10 +305,8 @@ impl Users { | ||||||
|                 .expect("OneTimeKey::to_string always works"), |                 .expect("OneTimeKey::to_string always works"), | ||||||
|         )?; |         )?; | ||||||
| 
 | 
 | ||||||
|         self.userid_lastonetimekeyupdate.insert( |         self.userid_lastonetimekeyupdate | ||||||
|             &user_id.to_string().as_bytes(), |             .insert(&user_id.as_bytes(), &globals.next_count()?.to_be_bytes())?; | ||||||
|             &globals.next_count()?.to_be_bytes(), |  | ||||||
|         )?; |  | ||||||
| 
 | 
 | ||||||
|         Ok(()) |         Ok(()) | ||||||
|     } |     } | ||||||
|  | @ -316,7 +314,7 @@ impl Users { | ||||||
|     #[tracing::instrument(skip(self))] |     #[tracing::instrument(skip(self))] | ||||||
|     pub fn last_one_time_keys_update(&self, user_id: &UserId) -> Result<u64> { |     pub fn last_one_time_keys_update(&self, user_id: &UserId) -> Result<u64> { | ||||||
|         self.userid_lastonetimekeyupdate |         self.userid_lastonetimekeyupdate | ||||||
|             .get(&user_id.to_string().as_bytes())? |             .get(&user_id.as_bytes())? | ||||||
|             .map(|bytes| { |             .map(|bytes| { | ||||||
|                 utils::u64_from_bytes(&bytes).map_err(|_| { |                 utils::u64_from_bytes(&bytes).map_err(|_| { | ||||||
|                     Error::bad_database("Count in roomid_lastroomactiveupdate is invalid.") |                     Error::bad_database("Count in roomid_lastroomactiveupdate is invalid.") | ||||||
|  | @ -332,18 +330,16 @@ impl Users { | ||||||
|         key_algorithm: &DeviceKeyAlgorithm, |         key_algorithm: &DeviceKeyAlgorithm, | ||||||
|         globals: &super::globals::Globals, |         globals: &super::globals::Globals, | ||||||
|     ) -> Result<Option<(DeviceKeyId, OneTimeKey)>> { |     ) -> Result<Option<(DeviceKeyId, OneTimeKey)>> { | ||||||
|         let mut prefix = user_id.to_string().as_bytes().to_vec(); |         let mut prefix = user_id.as_bytes().to_vec(); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
|         prefix.extend_from_slice(device_id.as_bytes()); |         prefix.extend_from_slice(device_id.as_bytes()); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
|         prefix.push(b'"'); // Annoying quotation mark
 |         prefix.push(b'"'); // Annoying quotation mark
 | ||||||
|         prefix.extend_from_slice(key_algorithm.to_string().as_bytes()); |         prefix.extend_from_slice(key_algorithm.as_ref().as_bytes()); | ||||||
|         prefix.push(b':'); |         prefix.push(b':'); | ||||||
| 
 | 
 | ||||||
|         self.userid_lastonetimekeyupdate.insert( |         self.userid_lastonetimekeyupdate | ||||||
|             &user_id.to_string().as_bytes(), |             .insert(&user_id.as_bytes(), &globals.next_count()?.to_be_bytes())?; | ||||||
|             &globals.next_count()?.to_be_bytes(), |  | ||||||
|         )?; |  | ||||||
| 
 | 
 | ||||||
|         self.onetimekeyid_onetimekeys |         self.onetimekeyid_onetimekeys | ||||||
|             .scan_prefix(&prefix) |             .scan_prefix(&prefix) | ||||||
|  | @ -373,7 +369,7 @@ impl Users { | ||||||
|         user_id: &UserId, |         user_id: &UserId, | ||||||
|         device_id: &DeviceId, |         device_id: &DeviceId, | ||||||
|     ) -> Result<BTreeMap<DeviceKeyAlgorithm, UInt>> { |     ) -> Result<BTreeMap<DeviceKeyAlgorithm, UInt>> { | ||||||
|         let mut userdeviceid = user_id.to_string().as_bytes().to_vec(); |         let mut userdeviceid = user_id.as_bytes().to_vec(); | ||||||
|         userdeviceid.push(0xff); |         userdeviceid.push(0xff); | ||||||
|         userdeviceid.extend_from_slice(device_id.as_bytes()); |         userdeviceid.extend_from_slice(device_id.as_bytes()); | ||||||
| 
 | 
 | ||||||
|  | @ -409,7 +405,7 @@ impl Users { | ||||||
|         rooms: &super::rooms::Rooms, |         rooms: &super::rooms::Rooms, | ||||||
|         globals: &super::globals::Globals, |         globals: &super::globals::Globals, | ||||||
|     ) -> Result<()> { |     ) -> Result<()> { | ||||||
|         let mut userdeviceid = user_id.to_string().as_bytes().to_vec(); |         let mut userdeviceid = user_id.as_bytes().to_vec(); | ||||||
|         userdeviceid.push(0xff); |         userdeviceid.push(0xff); | ||||||
|         userdeviceid.extend_from_slice(device_id.as_bytes()); |         userdeviceid.extend_from_slice(device_id.as_bytes()); | ||||||
| 
 | 
 | ||||||
|  | @ -434,7 +430,7 @@ impl Users { | ||||||
|     ) -> Result<()> { |     ) -> Result<()> { | ||||||
|         // TODO: Check signatures
 |         // TODO: Check signatures
 | ||||||
| 
 | 
 | ||||||
|         let mut prefix = user_id.to_string().as_bytes().to_vec(); |         let mut prefix = user_id.as_bytes().to_vec(); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
| 
 | 
 | ||||||
|         // Master key
 |         // Master key
 | ||||||
|  | @ -532,9 +528,9 @@ impl Users { | ||||||
|         rooms: &super::rooms::Rooms, |         rooms: &super::rooms::Rooms, | ||||||
|         globals: &super::globals::Globals, |         globals: &super::globals::Globals, | ||||||
|     ) -> Result<()> { |     ) -> Result<()> { | ||||||
|         let mut key = target_id.to_string().as_bytes().to_vec(); |         let mut key = target_id.as_bytes().to_vec(); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|         key.extend_from_slice(key_id.to_string().as_bytes()); |         key.extend_from_slice(key_id.as_bytes()); | ||||||
| 
 | 
 | ||||||
|         let mut cross_signing_key = |         let mut cross_signing_key = | ||||||
|             serde_json::from_slice::<serde_json::Value>(&self.keyid_key.get(&key)?.ok_or( |             serde_json::from_slice::<serde_json::Value>(&self.keyid_key.get(&key)?.ok_or( | ||||||
|  | @ -617,14 +613,14 @@ impl Users { | ||||||
|                 continue; |                 continue; | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             let mut key = room_id.to_string().as_bytes().to_vec(); |             let mut key = room_id.as_bytes().to_vec(); | ||||||
|             key.push(0xff); |             key.push(0xff); | ||||||
|             key.extend_from_slice(&count); |             key.extend_from_slice(&count); | ||||||
| 
 | 
 | ||||||
|             self.keychangeid_userid.insert(key, &*user_id.to_string())?; |             self.keychangeid_userid.insert(key, &*user_id.to_string())?; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); |         let mut key = user_id.as_bytes().to_vec(); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|         key.extend_from_slice(&count); |         key.extend_from_slice(&count); | ||||||
|         self.keychangeid_userid.insert(key, &*user_id.to_string())?; |         self.keychangeid_userid.insert(key, &*user_id.to_string())?; | ||||||
|  | @ -637,7 +633,7 @@ impl Users { | ||||||
|         user_id: &UserId, |         user_id: &UserId, | ||||||
|         device_id: &DeviceId, |         device_id: &DeviceId, | ||||||
|     ) -> Result<Option<DeviceKeys>> { |     ) -> Result<Option<DeviceKeys>> { | ||||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); |         let mut key = user_id.as_bytes().to_vec(); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|         key.extend_from_slice(device_id.as_bytes()); |         key.extend_from_slice(device_id.as_bytes()); | ||||||
| 
 | 
 | ||||||
|  | @ -724,7 +720,7 @@ impl Users { | ||||||
|         content: serde_json::Value, |         content: serde_json::Value, | ||||||
|         globals: &super::globals::Globals, |         globals: &super::globals::Globals, | ||||||
|     ) -> Result<()> { |     ) -> Result<()> { | ||||||
|         let mut key = target_user_id.to_string().as_bytes().to_vec(); |         let mut key = target_user_id.as_bytes().to_vec(); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|         key.extend_from_slice(target_device_id.as_bytes()); |         key.extend_from_slice(target_device_id.as_bytes()); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
|  | @ -751,7 +747,7 @@ impl Users { | ||||||
|     ) -> Result<Vec<Raw<AnyToDeviceEvent>>> { |     ) -> Result<Vec<Raw<AnyToDeviceEvent>>> { | ||||||
|         let mut events = Vec::new(); |         let mut events = Vec::new(); | ||||||
| 
 | 
 | ||||||
|         let mut prefix = user_id.to_string().as_bytes().to_vec(); |         let mut prefix = user_id.as_bytes().to_vec(); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
|         prefix.extend_from_slice(device_id.as_bytes()); |         prefix.extend_from_slice(device_id.as_bytes()); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
|  | @ -773,7 +769,7 @@ impl Users { | ||||||
|         device_id: &DeviceId, |         device_id: &DeviceId, | ||||||
|         until: u64, |         until: u64, | ||||||
|     ) -> Result<()> { |     ) -> Result<()> { | ||||||
|         let mut prefix = user_id.to_string().as_bytes().to_vec(); |         let mut prefix = user_id.as_bytes().to_vec(); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
|         prefix.extend_from_slice(device_id.as_bytes()); |         prefix.extend_from_slice(device_id.as_bytes()); | ||||||
|         prefix.push(0xff); |         prefix.push(0xff); | ||||||
|  | @ -808,7 +804,7 @@ impl Users { | ||||||
|         device_id: &DeviceId, |         device_id: &DeviceId, | ||||||
|         device: &Device, |         device: &Device, | ||||||
|     ) -> Result<()> { |     ) -> Result<()> { | ||||||
|         let mut userdeviceid = user_id.to_string().as_bytes().to_vec(); |         let mut userdeviceid = user_id.as_bytes().to_vec(); | ||||||
|         userdeviceid.push(0xff); |         userdeviceid.push(0xff); | ||||||
|         userdeviceid.extend_from_slice(device_id.as_bytes()); |         userdeviceid.extend_from_slice(device_id.as_bytes()); | ||||||
| 
 | 
 | ||||||
|  | @ -831,7 +827,7 @@ impl Users { | ||||||
|         user_id: &UserId, |         user_id: &UserId, | ||||||
|         device_id: &DeviceId, |         device_id: &DeviceId, | ||||||
|     ) -> Result<Option<Device>> { |     ) -> Result<Option<Device>> { | ||||||
|         let mut userdeviceid = user_id.to_string().as_bytes().to_vec(); |         let mut userdeviceid = user_id.as_bytes().to_vec(); | ||||||
|         userdeviceid.push(0xff); |         userdeviceid.push(0xff); | ||||||
|         userdeviceid.extend_from_slice(device_id.as_bytes()); |         userdeviceid.extend_from_slice(device_id.as_bytes()); | ||||||
| 
 | 
 | ||||||
|  | @ -845,7 +841,7 @@ impl Users { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn all_devices_metadata(&self, user_id: &UserId) -> impl Iterator<Item = Result<Device>> { |     pub fn all_devices_metadata(&self, user_id: &UserId) -> impl Iterator<Item = Result<Device>> { | ||||||
|         let mut key = user_id.to_string().as_bytes().to_vec(); |         let mut key = user_id.as_bytes().to_vec(); | ||||||
|         key.push(0xff); |         key.push(0xff); | ||||||
| 
 | 
 | ||||||
|         self.userdeviceid_metadata |         self.userdeviceid_metadata | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue