Tricky implementing taglib's APIC extracting/saving feature, but I got it. Left some TODO's on where to pick up #56

This commit is contained in:
kdeng00
2019-08-11 17:51:42 -04:00
parent 023c467a9d
commit 51d40f270d
11 changed files with 183 additions and 68 deletions
+28 -3
View File
@@ -67,15 +67,22 @@ namespace Icarus.Controllers.Managers
DirectoryManager.create_directory(SongManager.ConvertSongToSng(song),
_rootCoverArtPath, imgPath);
var imagePath = imgPath.ToString().Substring(0, strCount);
imagePath += song.Title + ".png";
var imagePath = imgPath.ToString().Substring(0, strCount) +
song.Title + ".png";
var coverArt = new CoverArt
{
SongTitle = song.Title,
ImagePath = imagePath
};
var metaData = new MetadataRetriever();
var cov = ConvertCoverArtToCovArt(coverArt);
var stock_path = _rootCoverArtPath + "CoverArt.png";
//var metaData = new MetadataRetriever();
// TODO: Work on the function on the c++ side
// I left some TODO's
MetadataRetriever.update_cover_art(ref cov, stock_path, song.SongPath);
/**
var imgBytes = metaData.RetrieveCoverArtBytes(song);
if (imgBytes != null)
@@ -89,6 +96,7 @@ namespace Icarus.Controllers.Managers
coverArt.ImagePath = _rootCoverArtPath + "CoverArt.png";
metaData.UpdateCoverArt(song, coverArt);
}
*/
return coverArt;
}
@@ -101,6 +109,23 @@ namespace Icarus.Controllers.Managers
return null;
}
public static CovArt ConvertCoverArtToCovArt(CoverArt cover)
{
return new CovArt
{
SongTitle = cover.SongTitle,
ImagePath = cover.ImagePath
};
}
public static CoverArt ConvertCovArtToCoverArt(CovArt cov)
{
return new CoverArt
{
SongTitle = cov.SongTitle,
ImagePath = cov.ImagePath
};
}
private void Initialize()
{
var stockCover = _rootCoverArtPath + "CoverArt.png";
+3 -3
View File
@@ -16,7 +16,7 @@ namespace Icarus.Controllers.Managers
#region Methods
#region C++ libs
[DllImport("libicarus.so")]
public static extern void create_directory(SongManager.Sng song, string root_path, StringBuilder created_dir);
public static extern void create_directory(Sng song, string root_path, StringBuilder created_dir);
[DllImport("libicarus.so")]
public static extern void copy_stock_cover_art(string target_path, string source_path);
@@ -28,10 +28,10 @@ namespace Icarus.Controllers.Managers
public static extern void delete_cover_art(string cover_art_path, string stock_path);
[DllImport("libicarus.so")]
public static extern void delete_empty_directories(SongManager.Sng song, string root_path);
public static extern void delete_empty_directories(Sng song, string root_path);
[DllImport("libicarus.so")]
public static extern void delete_song_empty_directories(SongManager.Sng song, string root_path);
public static extern void delete_song_empty_directories(Sng song, string root_path);
#endregion
#endregion
}
-21
View File
@@ -760,26 +760,5 @@ namespace Icarus.Controllers.Managers
yearStore.DeleteYear(year);
}
#endregion
#region Structs
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct Sng
{
public int Id;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1024)]
public string Title;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1024)]
public string Artist;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1024)]
public string Album;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1024)]
public string Genre;
public int Year;
public int Duration;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1024)]
public string SongPath;
};
#endregion
}
}
+10 -2
View File
@@ -58,11 +58,17 @@ namespace Icarus.Controllers.Utilities
#region C++ Libs
[DllImport("libicarus.so")]
public static extern void retrieve_metadata(ref SongManager.Sng sng, string file_path);
public static extern void retrieve_metadata(ref Sng sng, string file_path);
[DllImport("libicarus.so")]
public static extern void update_metadata(ref SongManager.Sng sng_updated, ref SongManager.Sng sng_old);
public static extern void update_metadata(ref Sng sng_updated, ref Sng sng_old);
[DllImport("libicarus.so")]
public static extern void update_cover_art(ref CovArt cov, string stock_cover_path, string song_path);
#endregion
// TODO: Remove this when the update_cover_art(..) has been implemented
/**
public byte[] RetrieveCoverArtBytes(Song song)
{
try
@@ -81,7 +87,9 @@ namespace Icarus.Controllers.Utilities
return null;
}
*/
// TODO: Remove this when the update_cover_art(..) has been implemented
public void UpdateCoverArt(Song song, CoverArt coverArt)
{
Console.WriteLine("Updating song's cover art");