recycleactor commited on
Commit
ee3d27b
·
verified ·
1 Parent(s): 792ad6d

Upload 2 files

Browse files
Files changed (1) hide show
  1. src/main.rs +46 -9
src/main.rs CHANGED
@@ -297,16 +297,27 @@ async fn media_url_for_track(
297
  id: u64,
298
  formats: &Vec<Format>,
299
  ) -> Result<(String, String, u64), String> {
 
 
 
 
300
  if client.license_token.is_empty() {
301
  if let Err(e) = client.force_renew().await {
 
302
  return Err(format!("renew:{e}"));
303
  }
304
  }
305
 
306
  let q_json = serde_json::json!({"sng_ids":[id],"array_default":["SNG_ID","TRACK_TOKEN","FALLBACK"]});
307
- let r: serde_json::Value = client.api_call("song.getListData", &q_json).await.map_err(|e| e.to_string())?;
 
 
 
308
 
309
- let item = r.pointer("/data/0").ok_or_else(|| "No valid ID".to_string())?;
 
 
 
310
 
311
  let track_token = item.get("TRACK_TOKEN").and_then(|v| v.as_str()).unwrap_or("").to_string();
312
  let fallback = item.get("FALLBACK");
@@ -320,19 +331,33 @@ async fn media_url_for_track(
320
  })
321
  }).unwrap_or(0);
322
 
 
 
323
  if fallback_id > 0 {
324
  let q_fb = serde_json::json!({"sng_ids":[fallback_id],"array_default":["SNG_ID","TRACK_TOKEN","FALLBACK"]});
 
325
  if let Ok(r_fb) = client.api_call::<serde_json::Value, serde_json::Value>("song.getListData", &q_fb).await {
326
  if let Some(item_fb) = r_fb.pointer("/data/0") {
327
  if let Some(real_tk) = item_fb.get("TRACK_TOKEN").and_then(|v| v.as_str()) {
 
328
  let tokens = vec![real_tk];
329
- if let Ok((url, fmt, _)) = fetch_media_url(client, formats, tokens).await {
330
- // Ensure we return the high quality one if found, else let it fall through?
331
- // Wait, no. If it succeeds at all, we should just return it.
332
- return Ok((url, fmt, fallback_id));
 
 
 
 
333
  }
 
 
334
  }
 
 
335
  }
 
 
336
  }
337
  }
338
 
@@ -349,12 +374,23 @@ async fn media_url_for_track(
349
  }
350
 
351
  if tokens.is_empty() {
 
352
  return Err("empty TRACK_TOKEN and FALLBACK".to_string());
353
  }
354
 
355
- let (url, fmt, idx) = fetch_media_url(client, formats, tokens).await?;
356
- let id_to_use = *token_ids.get(idx).unwrap_or(&id);
357
- Ok((url, fmt, id_to_use))
 
 
 
 
 
 
 
 
 
 
358
  }
359
 
360
  fn upstream_bases() -> Vec<String> {
@@ -649,6 +685,7 @@ async fn stream_info(State(state): State<AppState>, Query(q): Query<StreamParams
649
  _ => vec![Format::FLAC, Format::MP3_320, Format::MP3_128],
650
  };
651
 
 
652
  let requested = q.format.clone().unwrap_or_else(|| "AUTO".to_string());
653
  let mut url: String = String::new();
654
  let mut used: String = String::new();
 
297
  id: u64,
298
  formats: &Vec<Format>,
299
  ) -> Result<(String, String, u64), String> {
300
+ use std::io::Write;
301
+ let mut log_file = std::fs::OpenOptions::new().create(true).append(true).open("debug_dzmedia.log").unwrap();
302
+ let _ = writeln!(log_file, "--- NEW REQUEST FOR ID {} ---", id);
303
+
304
  if client.license_token.is_empty() {
305
  if let Err(e) = client.force_renew().await {
306
+ let _ = writeln!(log_file, "force_renew err: {}", e);
307
  return Err(format!("renew:{e}"));
308
  }
309
  }
310
 
311
  let q_json = serde_json::json!({"sng_ids":[id],"array_default":["SNG_ID","TRACK_TOKEN","FALLBACK"]});
312
+ let r: serde_json::Value = client.api_call("song.getListData", &q_json).await.map_err(|e| {
313
+ let _ = writeln!(log_file, "api_call err: {}", e);
314
+ e.to_string()
315
+ })?;
316
 
317
+ let item = r.pointer("/data/0").ok_or_else(|| {
318
+ let _ = writeln!(log_file, "No valid ID");
319
+ "No valid ID".to_string()
320
+ })?;
321
 
322
  let track_token = item.get("TRACK_TOKEN").and_then(|v| v.as_str()).unwrap_or("").to_string();
323
  let fallback = item.get("FALLBACK");
 
331
  })
332
  }).unwrap_or(0);
333
 
334
+ let _ = writeln!(log_file, "track_token: {}, fallback_id: {}, fallback_token: {}", track_token, fallback_id, fallback_token);
335
+
336
  if fallback_id > 0 {
337
  let q_fb = serde_json::json!({"sng_ids":[fallback_id],"array_default":["SNG_ID","TRACK_TOKEN","FALLBACK"]});
338
+ let _ = writeln!(log_file, "Querying fallback ID: {}", fallback_id);
339
  if let Ok(r_fb) = client.api_call::<serde_json::Value, serde_json::Value>("song.getListData", &q_fb).await {
340
  if let Some(item_fb) = r_fb.pointer("/data/0") {
341
  if let Some(real_tk) = item_fb.get("TRACK_TOKEN").and_then(|v| v.as_str()) {
342
+ let _ = writeln!(log_file, "Fetched real_tk for fallback: {}", real_tk);
343
  let tokens = vec![real_tk];
344
+ match fetch_media_url(client, formats, tokens).await {
345
+ Ok((url, fmt, _)) => {
346
+ let _ = writeln!(log_file, "fetch_media_url SUCCESS for fallback: fmt={}", fmt);
347
+ return Ok((url, fmt, fallback_id));
348
+ },
349
+ Err(e) => {
350
+ let _ = writeln!(log_file, "fetch_media_url FAILED for fallback: {}", e);
351
+ }
352
  }
353
+ } else {
354
+ let _ = writeln!(log_file, "NO TRACK_TOKEN in fallback response");
355
  }
356
+ } else {
357
+ let _ = writeln!(log_file, "Empty data array in fallback response");
358
  }
359
+ } else {
360
+ let _ = writeln!(log_file, "api_call for fallback ID FAILED");
361
  }
362
  }
363
 
 
374
  }
375
 
376
  if tokens.is_empty() {
377
+ let _ = writeln!(log_file, "empty TRACK_TOKEN and FALLBACK");
378
  return Err("empty TRACK_TOKEN and FALLBACK".to_string());
379
  }
380
 
381
+ let _ = writeln!(log_file, "Falling back to old logic. Tokens: {:?}", tokens);
382
+ let res = fetch_media_url(client, formats, tokens).await;
383
+ match res {
384
+ Ok((url, fmt, idx)) => {
385
+ let _ = writeln!(log_file, "Old logic SUCCESS: fmt={}", fmt);
386
+ let id_to_use = *token_ids.get(idx).unwrap_or(&id);
387
+ Ok((url, fmt, id_to_use))
388
+ },
389
+ Err(e) => {
390
+ let _ = writeln!(log_file, "Old logic FAILED: {}", e);
391
+ Err(e)
392
+ }
393
+ }
394
  }
395
 
396
  fn upstream_bases() -> Vec<String> {
 
685
  _ => vec![Format::FLAC, Format::MP3_320, Format::MP3_128],
686
  };
687
 
688
+
689
  let requested = q.format.clone().unwrap_or_else(|| "AUTO".to_string());
690
  let mut url: String = String::new();
691
  let mut used: String = String::new();