@@ -8,7 +8,7 @@ use tokio_util::sync::CancellationToken;
88use crate :: config:: Config ;
99use async_trait:: async_trait;
1010
11- use std:: { error:: Error , fmt} ;
11+ use std:: { error:: Error , fmt, io :: ErrorKind } ;
1212use std:: { fmt:: Debug , sync:: Arc } ;
1313
1414#[ cfg( test) ]
@@ -106,49 +106,35 @@ impl NCRequest {
106106 log:: trace!( "got a new API Request {req}" ) ;
107107 match req {
108108 ApiRequests :: FetchChatInitial ( token, maxMessage, response) => {
109- response
110- . send ( Ok ( worker
111- . fetch_chat_initial ( & token, maxMessage)
112- . await
113- . unwrap ( ) ) )
114- . expect ( "could not Send." ) ;
109+ NCRequest :: handle_fetch_chat_initial ( worker, token, maxMessage, response) . await ;
115110 }
116111 ApiRequests :: FetchChatUpdate ( token, maxMessage, last_message, response) => {
117- response
118- . send ( Ok ( worker
119- . fetch_chat_update ( & token, maxMessage, last_message)
120- . await
121- . unwrap ( ) ) )
122- . expect ( "could not Send." ) ;
112+ NCRequest :: handle_fetch_chat_update (
113+ worker,
114+ token,
115+ maxMessage,
116+ last_message,
117+ response,
118+ )
119+ . await ;
123120 }
124121 ApiRequests :: FetchRoomsInitial ( response) => {
125- response
126- . send ( Ok ( worker. fetch_rooms_initial ( ) . await . unwrap ( ) ) )
127- . expect ( "could not Send." ) ;
122+ NCRequest :: handle_fetch_rooms_initial ( worker, response) . await ;
128123 }
129124 ApiRequests :: FetchRoomsUpdate ( last_timestamp, response) => {
130- response
131- . send ( Ok ( worker. fetch_rooms_update ( last_timestamp) . await . unwrap ( ) ) )
132- . expect ( "could not Send." ) ;
125+ NCRequest :: handle_fetch_rooms_update ( worker, last_timestamp, response) . await ;
133126 }
134127 ApiRequests :: SendMessage ( token, message, response) => {
135- response
136- . send ( Ok ( worker. send_message ( message, & token) . await . unwrap ( ) ) )
137- . expect ( "could not Send." ) ;
128+ NCRequest :: handle_send_message ( worker, token, message, response) . await ;
138129 }
139130 ApiRequests :: FetchAutocompleteUsers ( name, response) => {
140- response
141- . send ( Ok ( worker. fetch_autocomplete_users ( & name) . await . unwrap ( ) ) )
142- . expect ( "could not Send." ) ;
131+ NCRequest :: handle_autocomplete_users ( worker, name, response) . await ;
143132 }
144133 ApiRequests :: FetchParticipants ( token, response) => {
145- response
146- . send ( Ok ( worker. fetch_participants ( & token) . await . unwrap ( ) ) )
147- . expect ( "could not Send." ) ;
134+ NCRequest :: handle_fetch_participants ( worker, token, response) . await ;
148135 }
149136 ApiRequests :: MarkChatRead ( token, last_message, response) => {
150- worker. mark_chat_read ( & token, last_message) . await . unwrap ( ) ;
151- response. send ( Ok ( ( ) ) ) . expect ( "could not Send." ) ;
137+ NCRequest :: handle_mark_read ( worker, token, last_message, response) . await ;
152138 }
153139 ApiRequests :: None => {
154140 log:: warn!( "Unknown Request" ) ;
@@ -225,6 +211,157 @@ impl NCRequest {
225211 cancel_token,
226212 }
227213 }
214+ async fn handle_fetch_chat_initial (
215+ worker : & NCRequestWorker ,
216+ token : String ,
217+ maxMessage : i32 ,
218+ response : ApiResponseChannel < Vec < NCReqDataMessage > > ,
219+ ) {
220+ let req_response = worker. fetch_chat_initial ( & token, maxMessage) . await ;
221+ if let Ok ( data_content) = req_response {
222+ response. send ( Ok ( data_content) ) . expect ( "could not Send." ) ;
223+ } else {
224+ log:: error!( "Failed to fetch initial chat {req_response:?}" ) ;
225+ response
226+ . send ( Err ( Arc :: new ( std:: io:: Error :: new (
227+ ErrorKind :: NetworkDown ,
228+ format ! ( "Got a Request Rejected! {req_response:?}" ) ,
229+ ) ) ) )
230+ . expect ( "could not Send." ) ;
231+ }
232+ }
233+ async fn handle_fetch_chat_update (
234+ worker : & NCRequestWorker ,
235+ token : String ,
236+ maxMessage : i32 ,
237+ last_message : i32 ,
238+ response : ApiResponseChannel < Vec < NCReqDataMessage > > ,
239+ ) {
240+ let data = worker
241+ . fetch_chat_update ( & token, maxMessage, last_message)
242+ . await ;
243+
244+ if let Ok ( data_content) = data {
245+ response. send ( Ok ( data_content) ) . expect ( "could not Send." ) ;
246+ } else {
247+ log:: error!( "Failed to fetch chat update {data:?}" ) ;
248+ response
249+ . send ( Err ( Arc :: new ( std:: io:: Error :: new (
250+ ErrorKind :: NetworkDown ,
251+ format ! ( "Got a Request Rejected! {data:?}" ) ,
252+ ) ) ) )
253+ . expect ( "could not Send." ) ;
254+ }
255+ }
256+ async fn handle_fetch_rooms_initial (
257+ worker : & NCRequestWorker ,
258+ response : ApiResponseChannel < ( Vec < NCReqDataRoom > , i64 ) > ,
259+ ) {
260+ let req_response = worker. fetch_rooms_initial ( ) . await ;
261+ if let Ok ( data_content) = req_response {
262+ response. send ( Ok ( data_content) ) . expect ( "could not Send." ) ;
263+ } else {
264+ log:: error!( "Failed to fetch initial rooms {req_response:?}" ) ;
265+ response
266+ . send ( Err ( Arc :: new ( std:: io:: Error :: new (
267+ ErrorKind :: NetworkDown ,
268+ format ! ( "Got a Request Rejected! {req_response:?}" ) ,
269+ ) ) ) )
270+ . expect ( "could not Send." ) ;
271+ }
272+ }
273+ async fn handle_fetch_rooms_update (
274+ worker : & NCRequestWorker ,
275+ last_timestamp : i64 ,
276+ response : ApiResponseChannel < ( Vec < NCReqDataRoom > , i64 ) > ,
277+ ) {
278+ let req_response = worker. fetch_rooms_update ( last_timestamp) . await ;
279+ if let Ok ( data_content) = req_response {
280+ response. send ( Ok ( data_content) ) . expect ( "could not Send." ) ;
281+ } else {
282+ log:: error!( "Failed to fetch update rooms {req_response:?}" ) ;
283+ response
284+ . send ( Err ( Arc :: new ( std:: io:: Error :: new (
285+ ErrorKind :: NetworkDown ,
286+ format ! ( "Got a Request Rejected! {req_response:?}" ) ,
287+ ) ) ) )
288+ . expect ( "could not Send." ) ;
289+ }
290+ }
291+ async fn handle_send_message (
292+ worker : & NCRequestWorker ,
293+ token : String ,
294+ message : String ,
295+ response : ApiResponseChannel < NCReqDataMessage > ,
296+ ) {
297+ let req_response = worker. send_message ( message, & token) . await ;
298+ if let Ok ( data_content) = req_response {
299+ response. send ( Ok ( data_content) ) . expect ( "could not Send." ) ;
300+ } else {
301+ log:: error!( "Failed to send message {req_response:?}" ) ;
302+ response
303+ . send ( Err ( Arc :: new ( std:: io:: Error :: new (
304+ ErrorKind :: NetworkDown ,
305+ format ! ( "Got a Request Rejected! {req_response:?}" ) ,
306+ ) ) ) )
307+ . expect ( "could not Send." ) ;
308+ }
309+ }
310+ async fn handle_autocomplete_users (
311+ worker : & NCRequestWorker ,
312+ name : String ,
313+ response : ApiResponseChannel < Vec < NCReqDataUser > > ,
314+ ) {
315+ let req_response = worker. fetch_autocomplete_users ( & name) . await ;
316+ if let Ok ( data_content) = req_response {
317+ response. send ( Ok ( data_content) ) . expect ( "could not Send." ) ;
318+ } else {
319+ log:: error!( "Failed to fetch autocomplete users {req_response:?}" ) ;
320+ response
321+ . send ( Err ( Arc :: new ( std:: io:: Error :: new (
322+ ErrorKind :: NetworkDown ,
323+ format ! ( "Got a Request Rejected! {req_response:?}" ) ,
324+ ) ) ) )
325+ . expect ( "could not Send." ) ;
326+ }
327+ }
328+ async fn handle_fetch_participants (
329+ worker : & NCRequestWorker ,
330+ token : String ,
331+ response : ApiResponseChannel < Vec < NCReqDataParticipants > > ,
332+ ) {
333+ let req_response = worker. fetch_participants ( & token) . await ;
334+ if let Ok ( data_content) = req_response {
335+ response. send ( Ok ( data_content) ) . expect ( "could not Send." ) ;
336+ } else {
337+ log:: error!( "Failed to fetch participants {req_response:?}" ) ;
338+ response
339+ . send ( Err ( Arc :: new ( std:: io:: Error :: new (
340+ ErrorKind :: NetworkDown ,
341+ format ! ( "Got a Request Rejected! {req_response:?}" ) ,
342+ ) ) ) )
343+ . expect ( "could not Send." ) ;
344+ }
345+ }
346+ async fn handle_mark_read (
347+ worker : & NCRequestWorker ,
348+ token : String ,
349+ last_message : i32 ,
350+ response : ApiResponseChannel < ( ) > ,
351+ ) {
352+ let req_response = worker. mark_chat_read ( & token, last_message) . await ;
353+ if let Ok ( data_content) = req_response {
354+ response. send ( Ok ( data_content) ) . expect ( "could not Send." ) ;
355+ } else {
356+ log:: error!( "Failed to mark room as read {req_response:?}" ) ;
357+ response
358+ . send ( Err ( Arc :: new ( std:: io:: Error :: new (
359+ ErrorKind :: NetworkDown ,
360+ format ! ( "Got a Request Rejected! {req_response:?}" ) ,
361+ ) ) ) )
362+ . expect ( "could not Send." ) ;
363+ }
364+ }
228365}
229366
230367#[ async_trait]
0 commit comments