diff --git a/Cargo.lock b/Cargo.lock index 1508538..c47abf5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -964,7 +964,7 @@ dependencies = [ [[package]] name = "icarus" -version = "0.3.13" +version = "0.3.14" dependencies = [ "axum", "axum-extra", diff --git a/Cargo.toml b/Cargo.toml index 24d91a2..53c8c25 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "icarus" -version = "0.3.13" +version = "0.3.14" edition = "2024" rust-version = "1.90" diff --git a/migrations/20250420185217_init_migration.sql b/migrations/20250420185217_init_migration.sql index 0083b57..1b67b0e 100644 --- a/migrations/20250420185217_init_migration.sql +++ b/migrations/20250420185217_init_migration.sql @@ -58,6 +58,6 @@ CREATE TABLE IF NOT EXISTS "coverart" ( title TEXT NOT NULL, directory TEXT NOT NULL, filename TEXT NOT NULL, + file_type TEXT NOT NULL, song_id UUID NOT NULL - -- TODO: Add type later ); diff --git a/src/callers/coverart.rs b/src/callers/coverart.rs index 553b254..118e23f 100644 --- a/src/callers/coverart.rs +++ b/src/callers/coverart.rs @@ -77,6 +77,10 @@ pub mod endpoint { &directory, &filename, ); coverart.title = song.album.clone(); + coverart.file_type = + icarus_meta::detection::coverart::file_type_from_data(&data) + .unwrap() + .file_type; coverart.data = data; match coverart.save_to_filesystem() { diff --git a/src/repo/coverart.rs b/src/repo/coverart.rs index 8ed25a2..bc6dfd7 100644 --- a/src/repo/coverart.rs +++ b/src/repo/coverart.rs @@ -7,12 +7,13 @@ pub async fn create( ) -> Result { let result = sqlx::query( r#" - INSERT INTO "coverart" (title, directory, filename, song_id) VALUES($1, $2, $3, $4) RETURNING id; + INSERT INTO "coverart" (title, directory, filename, file_type, song_id) VALUES($1, $2, $3, $4, $5) RETURNING id; "#, ) .bind(&coverart.title) .bind(&coverart.directory) .bind(&coverart.filename) + .bind(&coverart.file_type) .bind(song_id) .fetch_one(pool) .await @@ -38,7 +39,7 @@ pub async fn get_coverart( ) -> Result { let result = sqlx::query( r#" - SELECT id, title, directory, filename, song_id FROM "coverart" WHERE id = $1; + SELECT id, title, directory, filename, file_type, song_id FROM "coverart" WHERE id = $1; "#, ) .bind(id) @@ -66,6 +67,10 @@ pub async fn get_coverart( .try_get("filename") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(), + file_type: row + .try_get("file_type") + .map_err(|_e| sqlx::Error::RowNotFound) + .unwrap(), song_id: row .try_get("song_id") .map_err(|_e| sqlx::Error::RowNotFound) @@ -82,7 +87,7 @@ pub async fn get_coverart_with_song_id( ) -> Result { let result = sqlx::query( r#" - SELECT id, title, directory, filename, song_id FROM "coverart" WHERE song_id = $1; + SELECT id, title, directory, filename, file_type, song_id FROM "coverart" WHERE song_id = $1; "#, ) .bind(song_id) @@ -110,12 +115,15 @@ pub async fn get_coverart_with_song_id( .try_get("filename") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(), + file_type: row + .try_get("file_type") + .map_err(|_e| sqlx::Error::RowNotFound) + .unwrap(), data: Vec::new(), song_id: row .try_get("song_id") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(), - ..Default::default() }), Err(_) => Err(sqlx::Error::RowNotFound), } @@ -129,7 +137,7 @@ pub async fn delete_coverart( r#" DELETE FROM "coverart" WHERE id = $1 - RETURNING id, title, directory, filename, song_id + RETURNING id, title, directory, filename, file_type, song_id "#, ) .bind(id) @@ -157,12 +165,15 @@ pub async fn delete_coverart( .try_get("filename") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(), + file_type: row + .try_get("file_type") + .map_err(|_e| sqlx::Error::RowNotFound) + .unwrap(), song_id: row .try_get("song_id") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(), data: Vec::new(), - ..Default::default() }), Err(_err) => Err(sqlx::Error::RowNotFound), } diff --git a/test_migrations/20250725213944_init.sql b/test_migrations/20250725213944_init.sql index d186f00..c4c922f 100644 --- a/test_migrations/20250725213944_init.sql +++ b/test_migrations/20250725213944_init.sql @@ -56,5 +56,6 @@ CREATE TABLE IF NOT EXISTS "coverart" ( title TEXT NOT NULL, directory TEXT NOT NULL, filename TEXT NOT NULL, + file_type TEXT NOT NULL, song_id UUID NOT NULL ); diff --git a/test_migrations/20250725214735_song_queue_processed.sql b/test_migrations/20250725214735_song_queue_processed.sql index 016f0a4..96f179b 100644 --- a/test_migrations/20250725214735_song_queue_processed.sql +++ b/test_migrations/20250725214735_song_queue_processed.sql @@ -1,6 +1,6 @@ -- Add migration script here INSERT INTO "song" (id, title, artist, album_artist, album, genre, year, track, disc, track_count, disc_count, duration, audio_type, date_created, filename, directory, user_id) VALUES('44cf7940-34ff-489f-9124-d0ec90a55af9', 'Hypocrite Like The Rest', 'Kuoth', 'Kuoth', 'I', 'Alternative Hip-Hop', 2020, 1, 1, 9, 1, 139, 'flac', '2020-01-01 13:00:00-05', 'track01.flac', 'tests/I', '47491f9b-725a-4ba4-b9a5-711e1be46670'); -INSERT INTO "coverart" (id, title, directory, filename, song_id) VALUES('996122cd-5ae9-4013-9934-60768d3006ed', 'I', 'tests/I', 'Coverart-1.jpg', '44cf7940-34ff-489f-9124-d0ec90a55af9'); +INSERT INTO "coverart" (id, title, directory, filename, file_type, song_id) VALUES('996122cd-5ae9-4013-9934-60768d3006ed', 'I', 'tests/I', 'Coverart-1.jpg', 'jpeg', '44cf7940-34ff-489f-9124-d0ec90a55af9'); INSERT INTO "song" (id, title, artist, album_artist, album, genre, year, track, disc, track_count, disc_count, duration, audio_type, date_created, filename, directory, user_id) VALUES('94cf7940-34ff-489f-9124-d0ec90a55af4', 'It''s Too Late', 'Kuoth', 'Kuoth', 'I', 'Alternative Hip-Hop', 2020, 2, 1, 9, 1, 116, 'flac', '2020-01-01 13:01:00-05', 'track02.flac', 'tests/I', '47491f9b-725a-4ba4-b9a5-711e1be46670'); -INSERT INTO "coverart" (id, title, directory, filename, song_id) VALUES('d96122cd-5ae9-4013-9934-60768d3006e9', 'I', 'tests/I', 'Coverart-2.jpg', '94cf7940-34ff-489f-9124-d0ec90a55af4'); +INSERT INTO "coverart" (id, title, directory, filename, file_type, song_id) VALUES('d96122cd-5ae9-4013-9934-60768d3006e9', 'I', 'tests/I', 'Coverart-2.jpg', 'jpeg', '94cf7940-34ff-489f-9124-d0ec90a55af4');