diff --git a/Controllers/Managers/SongManager.cs b/Controllers/Managers/SongManager.cs index 8997d71..2b45a22 100644 --- a/Controllers/Managers/SongManager.cs +++ b/Controllers/Managers/SongManager.cs @@ -235,6 +235,19 @@ namespace Icarus.Controllers.Managers SongPath = song.SongPath }; } + public static Song ConvertSngToSong(Sng song) + { + return new Song + { + Id = song.Id, + Title = song.Title, + Artist = song.Artist, + AlbumTitle = song.Album, + Genre = song.Genre, + Year = song.Year, + SongPath = song.SongPath + }; + } private async Task RetrieveSongFromFileSystem(Song details) @@ -257,15 +270,26 @@ namespace Icarus.Controllers.Managers await songFile.CopyToAsync(filestream); } - MetadataRetriever meta = new MetadataRetriever(); - song = meta.RetrieveMetaData(filePath); + //MetadataRetriever meta = new MetadataRetriever(); + //song = meta.RetrieveMetaData(filePath); + Console.WriteLine("try"); + unsafe + { + Song *sng = new Sng(); + MetadataRetriever.retrieve_metadata(ref sng, filePath); + Console.WriteLine("Hmmmm"); + Console.WriteLine($"sng title {sng.Title}"); + song = ConvertSngToSong(sng); + } _logger.Info("Assigning song filename"); song.Filename = songFile.FileName; + Console.WriteLine("what?"); return song; } + /** private async Task SaveSongToFileSystemTemp(IFormFile song, string filePath) { using (var fileStream = new FileStream(filePath, FileMode.Create)) @@ -283,6 +307,7 @@ namespace Icarus.Controllers.Managers Console.WriteLine($"Song filename retrieved: {song.FileName}"); } } + */ private bool SongRecordChanged(Song currentSong, Song songUpdates) { @@ -761,20 +786,24 @@ namespace Icarus.Controllers.Managers if (year.SongCount <= 1) yearStore.DeleteYear(year); } - #endregion #region Structs - [StructLayout(LayoutKind.Sequential)] + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct Sng { public int Id; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)] public string Title; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)] public string Artist; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)] public string Album; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)] public string Genre; public int Year; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)] public string SongPath; }; #endregion diff --git a/Controllers/Utilities/MetadataRetriever.cs b/Controllers/Utilities/MetadataRetriever.cs index cc1919f..913dc70 100644 --- a/Controllers/Utilities/MetadataRetriever.cs +++ b/Controllers/Utilities/MetadataRetriever.cs @@ -103,7 +103,8 @@ namespace Icarus.Controllers.Utilities } [DllImport("libicarus.so")] - public static extern Icarus.Controllers.Managers.SongManager.Sng retrieve_metadata(string file_path); + //public static extern Icarus.Controllers.Managers.SongManager.Sng retrieve_metadata(string file_path); + public static extern void retrieve_metadata(ref Icarus.Controllers.Managers.SongManager.Sng sng, string file_path); public byte[] RetrieveCoverArtBytes(Song song) { diff --git a/Libs/include/metadata_retriever.h b/Libs/include/metadata_retriever.h index 44cab5d..4d84c82 100644 --- a/Libs/include/metadata_retriever.h +++ b/Libs/include/metadata_retriever.h @@ -2,4 +2,4 @@ #include "models.h" -Song fetch_metadata(const char*); +void fetch_metadata(Song&, const char*); diff --git a/Libs/src/metadata_retriever.cpp b/Libs/src/metadata_retriever.cpp index f3911ca..ec465ba 100644 --- a/Libs/src/metadata_retriever.cpp +++ b/Libs/src/metadata_retriever.cpp @@ -1,26 +1,79 @@ #include #include +#include +#include +#include #include "metadata_retriever.h" -Song fetch_metadata(const char *song_path) +void fetch_metadata(Song &sng, const char *song_path) { - Song sng; - std::string title = "ddd"; - sng.Title = (char*)title.c_str(); - sng.SongPath = (char*)song_path; + //Song sng; + std::cout<<"extracting metadata from: "<title().toCString(); + //sng->Title = (char*)file.tag()->title().toCString(); + std::cout<<"Title: "<Title<artist().toCString(); + //sng->Artist = (char*)file.tag()->artist().toCString(); + //std::cout<<"0"<album().toCString(); + //sng->Album = (char*)file.tag()->album().toCString(); + //std::cout<<"0"<genre().toCString(); + //sng->Genre = (char*)file.tag()->genre().toCString(); + //std::cout<<"0"<year(); + //sng->Year = file.tag()->year(); + //std::cout<<"0"<SongPath = (char*)song_path; + //std::cout<<"0"<title().toCString(); + sng->Title = (char*)file.tag()->title().toCString(); + //strcpy(sng->Title, file.tag()->title().toCString()); + //std::cout<<"Title: "<Title<artist().toCString(); + sng->Artist = (char*)file.tag()->artist().toCString(); + //std::cout<<"0"<album().toCString(); + sng->Album = (char*)file.tag()->album().toCString(); + //std::cout<<"0"<genre().toCString(); + sng->Genre = (char*)file.tag()->genre().toCString(); + //std::cout<<"0"<year(); + sng->Year = file.tag()->year(); + //std::cout<<"0"<SongPath = (char*)song_path; + //std::cout<<"res"<