Spaces:
Running
Running
Upload 2 files
Browse files- src/main.rs +7 -19
src/main.rs
CHANGED
|
@@ -242,12 +242,8 @@ async fn fetch_media_url(
|
|
| 242 |
format!("media_bad_json:{}:{}", status.as_u16(), snip)
|
| 243 |
})?;
|
| 244 |
|
| 245 |
-
let
|
| 246 |
-
|
| 247 |
-
Format::MP3_320 => "MP3_320",
|
| 248 |
-
Format::MP3_MISC => "MP3_MISC",
|
| 249 |
-
Format::MP3_128 => "MP3_128",
|
| 250 |
-
}).collect();
|
| 251 |
|
| 252 |
let (url, fmt, idx) = extract_media_url_and_format(&media_json, &format_strs);
|
| 253 |
if !url.is_empty() {
|
|
@@ -405,12 +401,8 @@ async fn upstream_get_url_text(formats: &Vec<Format>, ids: &Vec<u64>) -> Result<
|
|
| 405 |
async fn upstream_media_url(id: u64, formats: &Vec<Format>) -> Result<String, String> {
|
| 406 |
let text = upstream_get_url_text(formats, &vec![id]).await?;
|
| 407 |
let v: serde_json::Value = serde_json::from_str(&text).map_err(|_| "upstream:parse".to_string())?;
|
| 408 |
-
let
|
| 409 |
-
|
| 410 |
-
Format::MP3_320 => "MP3_320",
|
| 411 |
-
Format::MP3_MISC => "MP3_MISC",
|
| 412 |
-
Format::MP3_128 => "MP3_128",
|
| 413 |
-
}).collect();
|
| 414 |
let (url, _, _) = extract_media_url_and_format(&v, &format_strs);
|
| 415 |
if url.is_empty() {
|
| 416 |
return Err("upstream:no_url".to_string());
|
|
@@ -622,12 +614,8 @@ async fn stream_info(State(state): State<AppState>, Query(q): Query<StreamParams
|
|
| 622 |
// Upstream (опционально — если DZMEDIA_UPSTREAM задан)
|
| 623 |
if let Ok(text) = upstream_get_url_text(&formats, &vec![q.id]).await {
|
| 624 |
if let Ok(v) = serde_json::from_str::<serde_json::Value>(&text) {
|
| 625 |
-
let
|
| 626 |
-
|
| 627 |
-
Format::MP3_320 => "MP3_320",
|
| 628 |
-
Format::MP3_MISC => "MP3_MISC",
|
| 629 |
-
Format::MP3_128 => "MP3_128",
|
| 630 |
-
}).collect();
|
| 631 |
let (u, f, _) = extract_media_url_and_format(&v, &format_strs);
|
| 632 |
url = u;
|
| 633 |
used = f;
|
|
@@ -759,7 +747,7 @@ async fn stream(
|
|
| 759 |
};
|
| 760 |
|
| 761 |
match res {
|
| 762 |
-
Ok((u, id_used)) => { url = Some(u); decrypt_id = id_used; break; }
|
| 763 |
Err(e) => { last_err = Some(e); }
|
| 764 |
}
|
| 765 |
}
|
|
|
|
| 242 |
format!("media_bad_json:{}:{}", status.as_u16(), snip)
|
| 243 |
})?;
|
| 244 |
|
| 245 |
+
let format_strings: Vec<String> = formats.iter().map(|f| format!("{:?}", f)).collect();
|
| 246 |
+
let format_strs: Vec<&str> = format_strings.iter().map(|s| s.as_str()).collect();
|
|
|
|
|
|
|
|
|
|
|
|
|
| 247 |
|
| 248 |
let (url, fmt, idx) = extract_media_url_and_format(&media_json, &format_strs);
|
| 249 |
if !url.is_empty() {
|
|
|
|
| 401 |
async fn upstream_media_url(id: u64, formats: &Vec<Format>) -> Result<String, String> {
|
| 402 |
let text = upstream_get_url_text(formats, &vec![id]).await?;
|
| 403 |
let v: serde_json::Value = serde_json::from_str(&text).map_err(|_| "upstream:parse".to_string())?;
|
| 404 |
+
let format_strings: Vec<String> = formats.iter().map(|f| format!("{:?}", f)).collect();
|
| 405 |
+
let format_strs: Vec<&str> = format_strings.iter().map(|s| s.as_str()).collect();
|
|
|
|
|
|
|
|
|
|
|
|
|
| 406 |
let (url, _, _) = extract_media_url_and_format(&v, &format_strs);
|
| 407 |
if url.is_empty() {
|
| 408 |
return Err("upstream:no_url".to_string());
|
|
|
|
| 614 |
// Upstream (опционально — если DZMEDIA_UPSTREAM задан)
|
| 615 |
if let Ok(text) = upstream_get_url_text(&formats, &vec![q.id]).await {
|
| 616 |
if let Ok(v) = serde_json::from_str::<serde_json::Value>(&text) {
|
| 617 |
+
let format_strings: Vec<String> = formats.iter().map(|f| format!("{:?}", f)).collect();
|
| 618 |
+
let format_strs: Vec<&str> = format_strings.iter().map(|s| s.as_str()).collect();
|
|
|
|
|
|
|
|
|
|
|
|
|
| 619 |
let (u, f, _) = extract_media_url_and_format(&v, &format_strs);
|
| 620 |
url = u;
|
| 621 |
used = f;
|
|
|
|
| 747 |
};
|
| 748 |
|
| 749 |
match res {
|
| 750 |
+
Ok((u, _, id_used)) => { url = Some(u); decrypt_id = id_used; break; }
|
| 751 |
Err(e) => { last_err = Some(e); }
|
| 752 |
}
|
| 753 |
}
|