@@ -16,6 +16,7 @@ use salvo::cors::Cors;
16
16
use salvo:: prelude:: * ;
17
17
use salvo:: proxy:: Proxy as SalvoProxy ;
18
18
use std:: time:: Duration ;
19
+ use tokio:: task:: JoinSet ;
19
20
use tonic:: metadata:: MetadataMap ;
20
21
use tracing_subscriber:: layer:: SubscriberExt ;
21
22
use tracing_subscriber:: prelude:: * ;
@@ -91,18 +92,30 @@ async fn test(req: &mut Request, _depot: &mut Depot, res: &mut Response) {
91
92
Some ( "com.plexapp.plugins.library" . to_string ( ) ) ;
92
93
return res. render ( container) ;
93
94
}
94
-
95
+
95
96
// first directory, load everything here because we wanna reemiiiixxx
96
97
97
- for id in params. clone ( ) . content_directory_id . unwrap ( ) {
98
- add_query_param_salvo (
99
- req,
100
- "contentDirectoryID" . to_string ( ) ,
101
- id,
102
- ) ;
103
- let u = plex_client. request ( req) . await . unwrap ( ) ;
104
- let mut c: MediaContainerWrapper < MediaContainer > =
105
- from_reqwest_response ( u) . await . unwrap ( ) ;
98
+
99
+ let mut set = JoinSet :: new ( ) ;
100
+ for id in params. clone ( ) . pinned_content_directory_id . unwrap ( ) {
101
+ add_query_param_salvo ( req, "contentDirectoryID" . to_string ( ) , id) ;
102
+ set. spawn ( {
103
+ dbg ! ( "run" ) ;
104
+ let u = plex_client. request ( req) . await . unwrap ( ) ;
105
+ from_reqwest_response ( u)
106
+ } ) ;
107
+ // let mut c: MediaContainerWrapper<MediaContainer> =
108
+ // from_reqwest_response(u).await.unwrap();
109
+ // container.media_container.hub.append(c.media_container.children_mut());
110
+ }
111
+
112
+ let mut container: MediaContainerWrapper < MediaContainer > =
113
+ MediaContainerWrapper :: default ( ) ;
114
+ container. content_type =
115
+ get_content_type_from_headers ( req. headers_mut ( ) ) ;
116
+
117
+ while let Some ( res) = set. join_next ( ) . await {
118
+ container. media_container . hub . append ( res. unwrap ( ) . unwrap ( ) . media_container . children_mut ( ) ) ;
106
119
}
107
120
108
121
// Hack, as the list could be smaller when removing watched items. So we request more.
@@ -114,9 +127,9 @@ async fn test(req: &mut Request, _depot: &mut Depot, res: &mut Response) {
114
127
) ;
115
128
}
116
129
117
- let upstream_res = plex_client. request ( req) . await . unwrap ( ) ;
118
- let mut container: MediaContainerWrapper < MediaContainer > =
119
- from_reqwest_response ( upstream_res) . await . unwrap ( ) ;
130
+ // let upstream_res = plex_client.request(req).await.unwrap();
131
+ // let mut container: MediaContainerWrapper<MediaContainer> =
132
+ // from_reqwest_response(upstream_res).await.unwrap();
120
133
121
134
TransformBuilder :: new ( plex_client, params. clone ( ) )
122
135
. with_transform ( HubStyleTransform )
@@ -134,9 +147,6 @@ async fn hello(req: &mut Request, _depot: &mut Depot, res: &mut Response) {
134
147
return res. render ( "Hello world!" ) ;
135
148
}
136
149
137
- // TODO: Seems like loading in invidual sections of the hubs is faster then all in one endpoint
138
- // load in all hubs with indivudial endpoints and merge them.
139
- // Another pro point is that we can async these calls. So even faster.
140
150
#[ handler]
141
151
pub async fn get_hubs_promoted ( req : & mut Request , res : & mut Response ) {
142
152
let params: PlexParams = req. extract ( ) . await . unwrap ( ) ;
@@ -165,7 +175,7 @@ pub async fn get_hubs_promoted(req: &mut Request, res: &mut Response) {
165
175
Some ( "com.plexapp.plugins.library" . to_string ( ) ) ;
166
176
return res. render ( container) ;
167
177
}
168
-
178
+
169
179
// first directory, load everything here because we wanna reemiiiixxx
170
180
add_query_param_salvo (
171
181
req,
0 commit comments