Spaces:
Running
Running
Upload main.rs
Browse files- src/main.rs +17 -0
src/main.rs
CHANGED
|
@@ -840,6 +840,22 @@ async fn stream(
|
|
| 840 |
};
|
| 841 |
let mut decrypt_id = target_id;
|
| 842 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 843 |
for attempt in 0..2u8 {
|
| 844 |
if url.is_some() { break; }
|
| 845 |
|
|
@@ -872,6 +888,7 @@ async fn stream(
|
|
| 872 |
}
|
| 873 |
}
|
| 874 |
|
|
|
|
| 875 |
let url = match url {
|
| 876 |
Some(u) => u,
|
| 877 |
None => {
|
|
|
|
| 840 |
};
|
| 841 |
let mut decrypt_id = target_id;
|
| 842 |
|
| 843 |
+
// Try DZMEDIA_UPSTREAM first — gives highest available quality (FLAC/320)
|
| 844 |
+
// We already have correct decrypt_id from ARL above, so decryption will be correct
|
| 845 |
+
if url.is_none() {
|
| 846 |
+
if let Ok(text) = upstream_get_url_text(&formats, &vec![target_id]).await {
|
| 847 |
+
if let Ok(v) = serde_json::from_str::<serde_json::Value>(&text) {
|
| 848 |
+
let format_strings: Vec<String> = formats.iter().map(|f| format!("{:?}", f)).collect();
|
| 849 |
+
let format_strs: Vec<&str> = format_strings.iter().map(|s| s.as_str()).collect();
|
| 850 |
+
let (u, _, _) = extract_media_url_and_format(&v, &format_strs);
|
| 851 |
+
if !u.is_empty() {
|
| 852 |
+
url = Some(u);
|
| 853 |
+
}
|
| 854 |
+
}
|
| 855 |
+
}
|
| 856 |
+
}
|
| 857 |
+
|
| 858 |
+
// Fallback: use ARL to get CDN URL via Deezer API (quality limited by account tier)
|
| 859 |
for attempt in 0..2u8 {
|
| 860 |
if url.is_some() { break; }
|
| 861 |
|
|
|
|
| 888 |
}
|
| 889 |
}
|
| 890 |
|
| 891 |
+
|
| 892 |
let url = match url {
|
| 893 |
Some(u) => u,
|
| 894 |
None => {
|