diff options
Diffstat (limited to 'import/src/acoustid.rs')
-rw-r--r-- | import/src/acoustid.rs | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/import/src/acoustid.rs b/import/src/acoustid.rs index 8e8a603..49c5e38 100644 --- a/import/src/acoustid.rs +++ b/import/src/acoustid.rs @@ -25,12 +25,18 @@ pub(crate) struct AcoustID { rate_limit: Arc<Semaphore>, } -#[derive(Debug, Hash, Clone, Encode, Decode, Deserialize)] +#[derive(Debug, Hash, Clone, Encode, Decode)] pub(crate) struct Fingerprint { duration: u32, fingerprint: String, } +#[derive(Debug, Deserialize)] +pub(crate) struct FpCalcOutput { + duration: f32, + fingerprint: String, +} + #[derive(Deserialize, Encode, Decode)] pub(crate) struct AcoustIDLookupResultRecording { id: String, @@ -65,8 +71,8 @@ impl AcoustID { } } - pub async fn get_atid_mbid(&self, fp: Fingerprint) -> Result<Option<(String, String)>> { - let res = self.lookup(fp).await?; + pub async fn get_atid_mbid(&self, fp: &Fingerprint) -> Result<Option<(String, String)>> { + let res = self.lookup(fp.to_owned()).await?; for r in &res.results { if let Some(k) = r.recordings.get(0) { return Ok(Some((r.id.clone(), k.id.clone()))); @@ -81,19 +87,19 @@ impl AcoustID { let permit_drop_ts = Instant::now() + Duration::SECOND; let duration = fp.duration; - let fingerprint = &fp.fingerprint; + let fingerprint = fp.fingerprint.replace("=", "%3D"); let client = &self.key; - let meta = "recordingids"; - let body = format!("format=json&client={client}&duration={duration}&fingerprint={fingerprint}&meta={meta}"); + let body = format!("format=json&meta=recordingids&client={client}&duration={duration}&fingerprint={fingerprint}"); let resp = self .client .post(format!("https://api.acoustid.org/v2/lookup")) + // .post(format!("http://127.0.0.1:1234/v2/lookup")) + .header("Content-Type", "application/x-www-form-urlencoded") .body(body) .send() .await?.error_for_status()?.json::<AcoustIDLookupResponse>().await?; - tokio::task::spawn(async move { sleep_until(permit_drop_ts).await; drop(_permit); @@ -116,7 +122,11 @@ pub(crate) async fn acoustid_fingerprint(path: &Path) -> Result<Arc<Fingerprint> let mut buf = Vec::new(); child.stdout.unwrap().read_to_end(&mut buf).await?; - let out: Fingerprint = serde_json::from_slice(&buf)?; + let out: FpCalcOutput = serde_json::from_slice(&buf)?; + let out = Fingerprint { + duration: out.duration as u32, + fingerprint: out.fingerprint, + }; Ok(out) }) |