Add Client::sync()
This commit is contained in:
		
							parent
							
								
									afa4467448
								
							
						
					
					
						commit
						92728e53e8
					
				
							
								
								
									
										40
									
								
								src/lib.rs
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								src/lib.rs
									
									
									
									
									
								
							| @ -25,6 +25,7 @@ use std::rc::Rc; | ||||
| use std::str::FromStr; | ||||
| 
 | ||||
| use futures::future::{Future, FutureFrom, IntoFuture}; | ||||
| use futures::stream::{self, Stream}; | ||||
| use hyper::{Client as HyperClient, Uri}; | ||||
| use hyper::client::{Connect, HttpConnector}; | ||||
| #[cfg(feature = "hyper-tls")] | ||||
| @ -179,6 +180,45 @@ where | ||||
|         }) | ||||
|     } | ||||
| 
 | ||||
|     /// Convenience method that represents repeated calls to the sync_events endpoint as a stream.
 | ||||
|     ///
 | ||||
|     /// If the since parameter is None, the first Item might take a significant time to arrive and
 | ||||
|     /// be deserialized, because it contains all events that have occured in the whole lifetime of
 | ||||
|     /// the logged-in users account and are visible to them.
 | ||||
|     pub fn sync( | ||||
|         &self, | ||||
|         filter: Option<api::r0::sync::sync_events::Filter>, | ||||
|         since: Option<String>, | ||||
|         set_presence: bool, | ||||
|     ) -> impl Stream<Item = api::r0::sync::sync_events::Response, Error = Error> { | ||||
|         use api::r0::sync::sync_events; | ||||
| 
 | ||||
|         let client = self.clone(); | ||||
|         let set_presence = if set_presence { | ||||
|             None | ||||
|         } else { | ||||
|             Some(sync_events::SetPresence::Offline) | ||||
|         }; | ||||
| 
 | ||||
|         stream::unfold(since, move |since| { | ||||
|             Some( | ||||
|                 sync_events::call( | ||||
|                     client.clone(), | ||||
|                     sync_events::Request { | ||||
|                         filter: filter.clone(), | ||||
|                         since, | ||||
|                         full_state: None, | ||||
|                         set_presence: set_presence.clone(), | ||||
|                         timeout: None, | ||||
|                     }, | ||||
|                 ).map(|res| { | ||||
|                     let next_batch_clone = res.next_batch.clone(); | ||||
|                     (res, Some(next_batch_clone)) | ||||
|                 }) | ||||
|             ) | ||||
|         }) | ||||
|     } | ||||
| 
 | ||||
|     /// Makes a request to a Matrix API endpoint.
 | ||||
|     pub(crate) fn request<E>( | ||||
|         self, | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user