aboutsummaryrefslogtreecommitdiff
path: root/import/src/acoustid.rs
diff options
context:
space:
mode:
Diffstat (limited to 'import/src/acoustid.rs')
-rw-r--r--import/src/acoustid.rs26
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)
})