Spaces:
Running
Running
Upload 2 files
Browse files- src/main.rs +38 -3
src/main.rs
CHANGED
|
@@ -148,8 +148,30 @@ fn extract_media_url_and_format(media_json: &serde_json::Value, formats: &[&str]
|
|
| 148 |
let media_arr = data_item.get("media").and_then(|v| v.as_array());
|
| 149 |
let Some(media_arr) = media_arr else { continue; };
|
| 150 |
for m in media_arr {
|
| 151 |
-
let m_format = m.get("format").and_then(|v| v.as_str()).unwrap_or("");
|
| 152 |
-
if m_format
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 153 |
if let Some(sources) = m.get("sources").and_then(|v| v.as_array()) {
|
| 154 |
let mut preferred = Vec::new();
|
| 155 |
if let Some(s1) = sources.get(1).and_then(|s| s.get("url")).and_then(|u| u.as_str()) { preferred.push(s1); }
|
|
@@ -181,7 +203,20 @@ fn extract_media_url_and_format(media_json: &serde_json::Value, formats: &[&str]
|
|
| 181 |
let media_arr = data_item.get("media").and_then(|v| v.as_array());
|
| 182 |
let Some(media_arr) = media_arr else { continue; };
|
| 183 |
for m in media_arr {
|
| 184 |
-
let m_format = m.get("format").and_then(|v| v.as_str()).unwrap_or("");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 185 |
if let Some(sources) = m.get("sources").and_then(|v| v.as_array()) {
|
| 186 |
for s in sources {
|
| 187 |
if let Some(u) = s.get("url").and_then(|v| v.as_str()) {
|
|
|
|
| 148 |
let media_arr = data_item.get("media").and_then(|v| v.as_array());
|
| 149 |
let Some(media_arr) = media_arr else { continue; };
|
| 150 |
for m in media_arr {
|
| 151 |
+
let mut m_format = m.get("format").and_then(|v| v.as_str()).unwrap_or("");
|
| 152 |
+
if m_format.is_empty() {
|
| 153 |
+
m_format = m.get("format_name").and_then(|v| v.as_str()).unwrap_or("");
|
| 154 |
+
}
|
| 155 |
+
|
| 156 |
+
let mut matched = false;
|
| 157 |
+
if m_format.eq_ignore_ascii_case(*f_str) {
|
| 158 |
+
matched = true;
|
| 159 |
+
} else if m_format.is_empty() {
|
| 160 |
+
if let Some(n) = m.get("format").and_then(|v| v.as_i64()) {
|
| 161 |
+
let n_str = match n {
|
| 162 |
+
9 => "FLAC",
|
| 163 |
+
3 => "MP3_320",
|
| 164 |
+
1 => "MP3_128",
|
| 165 |
+
_ => "",
|
| 166 |
+
};
|
| 167 |
+
if n_str.eq_ignore_ascii_case(*f_str) {
|
| 168 |
+
matched = true;
|
| 169 |
+
m_format = n_str;
|
| 170 |
+
}
|
| 171 |
+
}
|
| 172 |
+
}
|
| 173 |
+
|
| 174 |
+
if matched {
|
| 175 |
if let Some(sources) = m.get("sources").and_then(|v| v.as_array()) {
|
| 176 |
let mut preferred = Vec::new();
|
| 177 |
if let Some(s1) = sources.get(1).and_then(|s| s.get("url")).and_then(|u| u.as_str()) { preferred.push(s1); }
|
|
|
|
| 203 |
let media_arr = data_item.get("media").and_then(|v| v.as_array());
|
| 204 |
let Some(media_arr) = media_arr else { continue; };
|
| 205 |
for m in media_arr {
|
| 206 |
+
let mut m_format = m.get("format").and_then(|v| v.as_str()).unwrap_or("");
|
| 207 |
+
if m_format.is_empty() {
|
| 208 |
+
m_format = m.get("format_name").and_then(|v| v.as_str()).unwrap_or("");
|
| 209 |
+
}
|
| 210 |
+
if m_format.is_empty() {
|
| 211 |
+
if let Some(n) = m.get("format").and_then(|v| v.as_i64()) {
|
| 212 |
+
m_format = match n {
|
| 213 |
+
9 => "FLAC",
|
| 214 |
+
3 => "MP3_320",
|
| 215 |
+
1 => "MP3_128",
|
| 216 |
+
_ => "",
|
| 217 |
+
};
|
| 218 |
+
}
|
| 219 |
+
}
|
| 220 |
if let Some(sources) = m.get("sources").and_then(|v| v.as_array()) {
|
| 221 |
for s in sources {
|
| 222 |
if let Some(u) = s.get("url").and_then(|v| v.as_str()) {
|