@@ -9,10 +9,10 @@ use mediastream_rs::format::M3uPlaylist;
99use serde:: Deserialize ;
1010use url:: Url ;
1111
12- use crate :: { AppStateRef , internal_error_with_log} ;
12+ use crate :: { AppStateRef , internal_error_with_log, transfer :: parse_m3u8_async } ;
1313
1414#[ derive( Deserialize ) ]
15- pub struct MediaRequest {
15+ pub struct MediaQuery {
1616 origin : String ,
1717}
1818
@@ -46,28 +46,24 @@ async fn prepare_all(
4646
4747pub async fn get_media (
4848 State ( state) : State < AppStateRef > ,
49- Query ( query) : Query < MediaRequest > ,
49+ Query ( query) : Query < MediaQuery > ,
5050) -> Result < Response , StatusCode > {
51- let response = state
51+ let data = state
5252 . http_client
5353 . get ( & query. origin )
5454 . send ( )
5555 . await
56+ . map_err ( internal_error_with_log ! ( ) ) ?
57+ . bytes ( )
58+ . await
5659 . map_err ( internal_error_with_log ! ( ) ) ?;
57- let data = response . bytes ( ) . await . map_err ( internal_error_with_log ! ( ) ) ? ;
60+
5861 state. tracking_pool . track ( & query. origin ) . await ;
5962
6063 // parse
61- let mut playlist = tokio:: task:: spawn_blocking ( move || {
62- let mut parser = mediastream_rs:: Parser :: new ( Cursor :: new ( data) ) ;
63- if let Err ( e) = parser. parse ( ) {
64- return Err ( e) ;
65- }
66- Ok ( parser. get_result ( ) )
67- } )
68- . await
69- . map_err ( internal_error_with_log ! ( ) ) ?
70- . map_err ( internal_error_with_log ! ( ) ) ?;
64+ let mut playlist = parse_m3u8_async ( Cursor :: new ( data) )
65+ . await
66+ . map_err ( internal_error_with_log ! ( ) ) ?;
7167
7268 prepare_all ( & state, & mut playlist, query. origin )
7369 . await
0 commit comments