/* This file is part of jellything (https://codeberg.org/metamuffin/jellything) which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2025 metamuffin */ use anyhow::Result; use bincode::{Decode, Encode}; use jellybase::cache::async_cache_memory; use serde::Deserialize; use std::{path::Path, process::Stdio, sync::Arc}; use tokio::{io::AsyncReadExt, process::Command}; #[derive(Debug, Encode, Decode, Deserialize)] pub(crate) struct Fingerprint { duration: f32, fingerprint: String, } #[allow(unused)] pub(crate) async fn acoustid_fingerprint(path: &Path) -> Result> { async_cache_memory("fpcalc", path, || async move { let child = Command::new("fpcalc") .arg("-json") .arg(path) .stdout(Stdio::piped()) .spawn()?; let mut buf = Vec::new(); child.stdout.unwrap().read_to_end(&mut buf).await?; let out: Fingerprint = serde_json::from_slice(&buf)?; Ok(out) }) .await } // pub(crate) async fn acoustid_mbid(fingerprint: Fingerprint) -> Result>> { // async_cache_memory(&["api-acoustid", fingerprint], generate) // }