Merge pull request 'Better notifications and fix redactions' (#44) from notification into master
This commit is contained in:
		
						commit
						4c2c0e2458
					
				
					 3 changed files with 37 additions and 9 deletions
				
			
		|  | @ -2003,7 +2003,14 @@ pub fn sync_route( | |||
| 
 | ||||
|         let notification_count = | ||||
|             if let Some(last_read) = db.rooms.edus.room_read_get(&room_id, &user_id).unwrap() { | ||||
|                 Some((db.rooms.pdus_since(&room_id, last_read).unwrap().count() as u32).into()) | ||||
|                 Some( | ||||
|                     (db.rooms | ||||
|                         .pdus_since(&room_id, last_read) | ||||
|                         .unwrap() | ||||
|                         .filter(|pdu| matches!(pdu.as_ref().unwrap().kind.clone(), EventType::RoomMessage | EventType::RoomEncrypted)) | ||||
|                         .count() as u32) | ||||
|                         .into(), | ||||
|                 ) | ||||
|             } else { | ||||
|                 None | ||||
|             }; | ||||
|  | @ -2079,7 +2086,7 @@ pub fn sync_route( | |||
|                     }, | ||||
|                 }, | ||||
|                 unread_notifications: sync_events::UnreadNotificationsCount { | ||||
|                     highlight_count: notification_count, | ||||
|                     highlight_count: None, | ||||
|                     notification_count, | ||||
|                 }, | ||||
|                 timeline: sync_events::Timeline { | ||||
|  | @ -2253,12 +2260,12 @@ pub fn get_message_events_route( | |||
|             .map(|pdu| pdu.to_room_event()) | ||||
|             .collect::<Vec<_>>(); | ||||
| 
 | ||||
|         MatrixResult(Ok(dbg!(get_message_events::Response { | ||||
|         MatrixResult(Ok(get_message_events::Response { | ||||
|             start: Some(body.from.clone()), | ||||
|             end: prev_batch, | ||||
|             chunk: room_events, | ||||
|             state: Vec::new(), | ||||
|         }))) | ||||
|         })) | ||||
|     } else { | ||||
|         MatrixResult(Err(Error { | ||||
|             kind: ErrorKind::Unknown, | ||||
|  |  | |||
|  | @ -8,6 +8,7 @@ use ruma_events::{ | |||
|     room::{ | ||||
|         join_rules, member, | ||||
|         power_levels::{self, PowerLevelsEventContent}, | ||||
|         redaction, | ||||
|     }, | ||||
|     EventJson, EventType, | ||||
| }; | ||||
|  | @ -207,7 +208,6 @@ impl Rooms { | |||
|         globals: &super::globals::Globals, | ||||
|     ) -> Result<EventId> { | ||||
|         // TODO: Make sure this isn't called twice in parallel
 | ||||
| 
 | ||||
|         let prev_events = self.get_pdu_leaves(&room_id)?; | ||||
| 
 | ||||
|         // Is the event authorized?
 | ||||
|  | @ -404,7 +404,6 @@ impl Rooms { | |||
|                         authorized | ||||
|                     } | ||||
|                     EventType::RoomCreate => prev_events.is_empty(), | ||||
| 
 | ||||
|                     // Not allow any of the following events if the sender is not joined.
 | ||||
|                     _ if sender_membership != member::MembershipState::Join => false, | ||||
| 
 | ||||
|  | @ -450,15 +449,15 @@ impl Rooms { | |||
|             origin_server_ts: utils::millis_since_unix_epoch() | ||||
|                 .try_into() | ||||
|                 .expect("this only fails many years in the future"), | ||||
|             kind: event_type, | ||||
|             content, | ||||
|             kind: event_type.clone(), | ||||
|             content: content.clone(), | ||||
|             state_key, | ||||
|             prev_events, | ||||
|             depth: depth | ||||
|                 .try_into() | ||||
|                 .expect("depth can overflow and should be deprecated..."), | ||||
|             auth_events: Vec::new(), | ||||
|             redacts, | ||||
|             redacts: redacts.clone(), | ||||
|             unsigned, | ||||
|             hashes: ruma_federation_api::EventHash { | ||||
|                 sha256: "aaa".to_owned(), | ||||
|  | @ -506,6 +505,22 @@ impl Rooms { | |||
|             self.roomstateid_pdu.insert(key, &*pdu_json.to_string())?; | ||||
|         } | ||||
| 
 | ||||
|         match event_type { | ||||
|             EventType::RoomRedaction => { | ||||
|                 if let Some(redact_id) = &redacts { | ||||
|                     // TODO: Reason
 | ||||
|                     let _reason = serde_json::from_value::< | ||||
|                         EventJson<redaction::RedactionEventContent>, | ||||
|                     >(content)? | ||||
|                     .deserialize()? | ||||
|                     .reason; | ||||
| 
 | ||||
|                     self.redact_pdu(&redact_id)?; | ||||
|                 } | ||||
|             } | ||||
|             _ => {} | ||||
|         } | ||||
| 
 | ||||
|         self.edus.room_read_set(&room_id, &sender, index)?; | ||||
| 
 | ||||
|         Ok(pdu.event_id) | ||||
|  |  | |||
|  | @ -7,6 +7,7 @@ use ruma_events::{ | |||
| use ruma_federation_api::EventHash; | ||||
| use ruma_identifiers::{EventId, RoomId, UserId}; | ||||
| use serde::{Deserialize, Serialize}; | ||||
| use serde_json::json; | ||||
| use std::collections::HashMap; | ||||
| 
 | ||||
| #[derive(Deserialize, Serialize)] | ||||
|  | @ -62,6 +63,11 @@ impl PduEvent { | |||
|             } | ||||
|         } | ||||
| 
 | ||||
|         self.unsigned.insert( | ||||
|             "redacted_because".to_owned(), | ||||
|             json!({"content": {}, "type": "m.room.redaction"}), | ||||
|         ); | ||||
| 
 | ||||
|         self.content = new_content.into(); | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue