diff --git a/Controllers/Managers/CoverArtManager.cs b/Controllers/Managers/CoverArtManager.cs index 6b769d5..2e02024 100644 --- a/Controllers/Managers/CoverArtManager.cs +++ b/Controllers/Managers/CoverArtManager.cs @@ -5,6 +5,7 @@ using System.IO; using Icarus.Controllers.Utilities; using Icarus.Database.Repositories; using Icarus.Models; +using Icarus.Types; namespace Icarus.Controllers.Managers { @@ -27,8 +28,12 @@ namespace Icarus.Controllers.Managers public void SaveCoverArtToDatabase(ref Song song, ref CoverArt coverArt, CoverArtRepository coverArtRepository) { - // TODO: Implement saving Cover Art record to - // the database. + coverArtRepository.SaveCoverArt(coverArt); + + coverArt = coverArtRepository.GetCoverArt(CoverArtField.SongTitle, + coverArt); + + song.CoverArtId = coverArt.CoverArtId; } public CoverArt SaveCoverArt(Song song) { @@ -43,11 +48,9 @@ namespace Icarus.Controllers.Managers ImagePath = imagePath }; - Console.WriteLine($"Cover path {imagePath}"); var metaData = new MetadataRetriever(); var imgBytes = metaData.RetrieveCoverArtBytes(song); - Console.WriteLine("Saving image"); File.WriteAllBytes(imagePath, imgBytes); return coverArt; diff --git a/Database/Repositories/CoverArtRepository.cs b/Database/Repositories/CoverArtRepository.cs index 4da2da6..9aaebe3 100644 --- a/Database/Repositories/CoverArtRepository.cs +++ b/Database/Repositories/CoverArtRepository.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using MySql.Data.MySqlClient; using Icarus.Models; +using Icarus.Types; namespace Icarus.Database.Repositories { @@ -74,6 +75,41 @@ namespace Icarus.Database.Repositories return null; } + public CoverArt GetCoverArt(CoverArtField field, CoverArt cover) + { + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + using (var cmd = new MySqlCommand(BuildQuery(field), + conn)) + { + switch (field) + { + case CoverArtField.SongTitle: + cmd.Parameters.AddWithValue("@SongTitle", + cover.SongTitle); + break; + case CoverArtField.ImagePath: + cmd.Parameters.AddWithValue("@ImagePath", + cover.ImagePath); + break; + } + + using (var reader = cmd.ExecuteReader()) + return ParseSingleData(reader); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + } + + return null; + } public bool DoesCoverArtExist(CoverArt cover) { @@ -165,13 +201,27 @@ namespace Icarus.Database.Repositories { CoverArtId = Convert.ToInt32(reader["CoverArtId"]), SongTitle = reader["SongTitle"].ToString(), - ImagePath = reader["ImagePath}"].ToString() + ImagePath = reader["ImagePath"].ToString() }; } return null; } + private string BuildQuery(CoverArtField field) + { + switch (field) + { + case CoverArtField.SongTitle: + return "SELECT * FROM CoverArt WHERE SongTitle=@SongTitle"; + case CoverArtField.ImagePath: + return "SELECT * FROM CoverArt WHERE ImagePath=" + + "@ImagePath"; + } + + return null; + } + private bool? AnyCoverArt() { using (var conn = GetConnection()) diff --git a/Database/Repositories/SongRepository.cs b/Database/Repositories/SongRepository.cs index 00d3164..de8b3d3 100644 --- a/Database/Repositories/SongRepository.cs +++ b/Database/Repositories/SongRepository.cs @@ -53,6 +53,7 @@ namespace Icarus.Database.Repositories cmd.Parameters.AddWithValue("@ArtistId", song.ArtistId); cmd.Parameters.AddWithValue("@GenreId", song.GenreId); cmd.Parameters.AddWithValue("@YearId", song.YearId); + cmd.Parameters.AddWithValue("@CoverArtId", song.CoverArtId); cmd.ExecuteNonQuery(); } @@ -284,7 +285,8 @@ namespace Icarus.Database.Repositories AlbumId = Convert.ToInt32(reader["AlbumId"].ToString()), ArtistId = Convert.ToInt32(reader["ArtistId"].ToString()), GenreId = Convert.ToInt32(reader["GenreId"].ToString()), - YearId = Convert.ToInt32(reader["YearId"].ToString()) + YearId = Convert.ToInt32(reader["YearId"].ToString()), + CoverArtId = Convert.ToInt32(reader["CoverArtId"].ToString()) }); } @@ -310,6 +312,7 @@ namespace Icarus.Database.Repositories song.ArtistId = Convert.ToInt32(reader["ArtistId"].ToString()); song.GenreId = Convert.ToInt32(reader["GenreId"].ToString()); song.YearId = Convert.ToInt32(reader["YearId"].ToString()); + song.CoverArtId = Convert.ToInt32(reader["CoverArtId"].ToString()); } return song; diff --git a/Scripts/MySQL/delete_all.sql b/Scripts/MySQL/delete_all.sql index d274c22..6e336dd 100644 --- a/Scripts/MySQL/delete_all.sql +++ b/Scripts/MySQL/delete_all.sql @@ -1,3 +1,6 @@ -delete from Song where Id>0; -delete from Album where AlbumId>0; -delete from Artist where ArtistId>0; +delete from Song; +delete from Album; +delete from Artist; +delete from Genre; +delete from Year; +delete from CoverArt; diff --git a/Types/CoverArtTypes.cs b/Types/CoverArtTypes.cs new file mode 100644 index 0000000..98edd43 --- /dev/null +++ b/Types/CoverArtTypes.cs @@ -0,0 +1,10 @@ +using System; + +namespace Icarus.Types +{ + public enum CoverArtField + { + SongTitle = 0, + ImagePath + }; +}