Compare commits
2 commits
Author | SHA1 | Date | |
---|---|---|---|
c38fed0938 | |||
daf91278ba |
3 changed files with 50 additions and 13 deletions
|
@ -1,7 +1,7 @@
|
||||||
[package]
|
[package]
|
||||||
name = "spotifyio-downloader"
|
name = "spotifyio-downloader"
|
||||||
description = "CLI for downloading music from Spotify"
|
description = "CLI for downloading music from Spotify"
|
||||||
version = "0.5.0"
|
version = "0.5.1"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
authors.workspace = true
|
authors.workspace = true
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
|
|
@ -1114,18 +1114,55 @@ impl SpotifyDownloader {
|
||||||
if let Some(item) = item {
|
if let Some(item) = item {
|
||||||
return Ok(Some(item.subdir_path));
|
return Ok(Some(item.subdir_path));
|
||||||
} else {
|
} else {
|
||||||
let row = sqlx::query!("select path from tracks where id=$1", id_str)
|
let row = sqlx::query!(
|
||||||
.fetch_optional(&self.i.pool)
|
"select album, album_id, path from tracks where id=$1",
|
||||||
.await?;
|
id_str
|
||||||
if let Some(subdir_path) = row.and_then(|r| r.path) {
|
)
|
||||||
let audio_path = path!(self.i.base_dir / subdir_path);
|
.fetch_optional(&self.i.pool)
|
||||||
if audio_path.is_file() {
|
.await?;
|
||||||
return Ok(Some(path!(subdir_path)));
|
if let Some(row) = row {
|
||||||
|
if let Some(subdir_path) = row.path {
|
||||||
|
let audio_path = path!(self.i.base_dir / subdir_path);
|
||||||
|
if audio_path.is_file() {
|
||||||
|
return Ok(Some(path!(subdir_path)));
|
||||||
|
} else {
|
||||||
|
if let (Some(album), Some(album_id)) =
|
||||||
|
(row.album, row.album_id)
|
||||||
|
{
|
||||||
|
// Try new path (with album ID)
|
||||||
|
let pb = PathBuf::from(subdir_path);
|
||||||
|
let mut cmp = pb.components().collect::<Vec<_>>();
|
||||||
|
if cmp.len() > 1 {
|
||||||
|
let album_dirname = better_filenamify(
|
||||||
|
&album,
|
||||||
|
Some(&format!(" [{}]", &album_id[..8])),
|
||||||
|
);
|
||||||
|
cmp[1] = std::path::Component::Normal(
|
||||||
|
std::ffi::OsStr::new(&album_dirname),
|
||||||
|
);
|
||||||
|
|
||||||
|
let subdir_path =
|
||||||
|
cmp.into_iter().collect::<PathBuf>();
|
||||||
|
let audio_path =
|
||||||
|
path!(self.i.base_dir / subdir_path);
|
||||||
|
if audio_path.is_file() {
|
||||||
|
tracing::info!(
|
||||||
|
"Audio file moved, new path: {}",
|
||||||
|
subdir_path.to_string_lossy()
|
||||||
|
);
|
||||||
|
return Ok(Some(subdir_path));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tracing::error!(
|
||||||
|
"[{id}] audio file not found: {}",
|
||||||
|
audio_path.to_string_lossy()
|
||||||
|
);
|
||||||
|
success.store(false, Ordering::SeqCst);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
tracing::error!(
|
tracing::error!("[{id}] audio file path not found in db");
|
||||||
"[{id}] audio file not found: {}",
|
|
||||||
audio_path.to_string_lossy()
|
|
||||||
);
|
|
||||||
success.store(false, Ordering::SeqCst);
|
success.store(false, Ordering::SeqCst);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -62,7 +62,7 @@ rand = "0.8"
|
||||||
rsa = "0.9.2"
|
rsa = "0.9.2"
|
||||||
httparse = "1.7"
|
httparse = "1.7"
|
||||||
base64 = "0.22"
|
base64 = "0.22"
|
||||||
oauth2 = { version = "5.0.0-rc.1", default-features = false, features = [
|
oauth2 = { version = "5.0.0", default-features = false, features = [
|
||||||
"reqwest",
|
"reqwest",
|
||||||
], optional = true }
|
], optional = true }
|
||||||
pin-project-lite = "0.2"
|
pin-project-lite = "0.2"
|
||||||
|
|
Loading…
Add table
Reference in a new issue