diff --git a/Controllers/Managers/AlbumManager.cs b/Controllers/Managers/AlbumManager.cs index 82b2603..23a3bc5 100644 --- a/Controllers/Managers/AlbumManager.cs +++ b/Controllers/Managers/AlbumManager.cs @@ -19,7 +19,7 @@ public class AlbumManager : BaseManager { _config = config; _connectionString = _config.GetConnectionString("DefaultConnection"); - _albumContext = new AlbumContext(_connectionString); + _albumContext = new AlbumContext(_connectionString!); } #endregion @@ -89,7 +89,7 @@ public class AlbumManager : BaseManager oldAlbumTitle.Equals(newAlbumTitle) && oldAlbumArtist.Equals(newAlbumArtist))) { _logger.Info("No change to the song's album"); - return albumRecord; + return albumRecord!; } info = "Change to the song's album"; @@ -137,7 +137,7 @@ public class AlbumManager : BaseManager private int SongsInAlbum(Album album) { - var sngContext = new SongContext(_connectionString); + var sngContext = new SongContext(_connectionString!); var songs = sngContext.Songs.Where(sng => sng.AlbumId == album.Id).ToList(); return songs.Count; diff --git a/Controllers/Managers/BaseManagers.cs b/Controllers/Managers/BaseManagers.cs index 93e6a5e..5b2ac4f 100644 --- a/Controllers/Managers/BaseManagers.cs +++ b/Controllers/Managers/BaseManagers.cs @@ -7,7 +7,7 @@ public class BaseManager { #region Fields protected static Logger _logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger(); - protected IConfiguration _config; - protected string _connectionString; + protected IConfiguration? _config; + protected string? _connectionString; #endregion } diff --git a/Controllers/Managers/CoverArtManager.cs b/Controllers/Managers/CoverArtManager.cs index 56b8f78..1f687fb 100644 --- a/Controllers/Managers/CoverArtManager.cs +++ b/Controllers/Managers/CoverArtManager.cs @@ -78,7 +78,7 @@ public class CoverArtManager : BaseManager var coverArt = new CoverArt { - SongTitle = song.Title + SongTitle = song.Title! }; var segment = coverArt.GenerateFilename(0); diff --git a/Controllers/Managers/DirectoryManager.cs b/Controllers/Managers/DirectoryManager.cs index 216c1c7..e4570cb 100644 --- a/Controllers/Managers/DirectoryManager.cs +++ b/Controllers/Managers/DirectoryManager.cs @@ -187,9 +187,9 @@ public class DirectoryManager : BaseManager private class DirEnt { - public string Pre { get; set;} - public string Path { get; set; } - public string Post { get; set; } + public string? Pre { get; set;} + public string? Path { get; set; } + public string? Post { get; set; } } private void GenerateDirectories(List dirs) @@ -197,7 +197,7 @@ public class DirectoryManager : BaseManager foreach (var di in dirs) { _logger.Info(di.Pre); - Directory.CreateDirectory(di.Path); + Directory.CreateDirectory(di.Path!); _logger.Info(di.Post); } } @@ -207,10 +207,10 @@ public class DirectoryManager : BaseManager switch (dirTypes) { case DirectoryType.Music: - _rootSongDirectory = _config.GetValue("RootMusicPath"); + _rootSongDirectory = _config!.GetValue("RootMusicPath")!; break; case DirectoryType.CoverArt: - _rootSongDirectory = _config.GetValue("CoverArtPath"); + _rootSongDirectory = _config!.GetValue("CoverArtPath")!; break; } } @@ -227,7 +227,7 @@ public class DirectoryManager : BaseManager private string AlbumDirectory(Song song) { var directory = ArtistDirectory(song); - var segment = SerializeValue(song.AlbumTitle); + var segment = SerializeValue(song.AlbumTitle!); directory += $@"{segment}/"; Console.WriteLine($"Album directory {directory}"); @@ -240,7 +240,7 @@ public class DirectoryManager : BaseManager private string ArtistDirectory(Song song) { var directory = _rootSongDirectory; - var segment = SerializeValue(song.Artist); + var segment = SerializeValue(song.Artist!); directory += $@"{segment}/"; Console.WriteLine($"Artist directory {directory}"); diff --git a/Controllers/Managers/GenreManager.cs b/Controllers/Managers/GenreManager.cs index 0f2ecb7..b2b9261 100644 --- a/Controllers/Managers/GenreManager.cs +++ b/Controllers/Managers/GenreManager.cs @@ -19,7 +19,7 @@ public class GenreManager : BaseManager { _config = config; _connectionString = _config.GetConnectionString("DefaultConnection"); - _genreContext = new GenreContext(_connectionString); + _genreContext = new GenreContext(_connectionString!); } #endregion @@ -93,10 +93,10 @@ public class GenreManager : BaseManager var existingGenreRecord = _genreContext.Genres.FirstOrDefault(gnr => gnr.GenreName.Equals(oldGenreRecord.GenreName)); - _genreContext.Update(existingGenreRecord); + _genreContext.Update(existingGenreRecord!); _genreContext.SaveChanges(); - return existingGenreRecord; + return existingGenreRecord!; } } @@ -110,16 +110,16 @@ public class GenreManager : BaseManager var genre = _genreContext.Genres.FirstOrDefault(gnr => gnr.GenreName.Equals(song.Genre)); - if (SongsInGenre(genre) <= 1) + if (SongsInGenre(genre!) <= 1) { - _genreContext.Remove(genre); + _genreContext.Remove(genre!); _genreContext.SaveChanges(); } } private int SongsInGenre(Genre genre) { - var sngContext = new SongContext(_connectionString); + var sngContext = new SongContext(_connectionString!); var songs = sngContext.Songs.Where(sng => sng.GenreId == genre.Id).ToList(); return songs.Count; diff --git a/Controllers/Managers/SongManager.cs b/Controllers/Managers/SongManager.cs index b23b012..dc6357c 100644 --- a/Controllers/Managers/SongManager.cs +++ b/Controllers/Managers/SongManager.cs @@ -9,11 +9,11 @@ namespace Icarus.Controllers.Managers; public class SongManager : BaseManager { #region Fields - private string _tempDirectoryRoot; - private string _archiveDirectoryRoot; - private string _compressedSongFilename; - private string _message; - private SongContext _songContext; + private string? _tempDirectoryRoot; + private string? _archiveDirectoryRoot; + private string? _compressedSongFilename; + private string? _message; + private SongContext? _songContext; #endregion @@ -234,10 +234,10 @@ public class SongManager : BaseManager } } - var coverMgr = new CoverArtManager(_config); + var coverMgr = new CoverArtManager(_config!); var coverArt = coverMgr.SaveCoverArt(coverArtData, song); - DirectoryManager dirMgr = new DirectoryManager(_config, song); + DirectoryManager dirMgr = new DirectoryManager(_config!, song); dirMgr.CreateDirectory(); song.SongDirectory = dirMgr.SongDirectory; @@ -262,13 +262,13 @@ public class SongManager : BaseManager // Save cover art to the database // Save song to the database - var coverMgr = new CoverArtManager(_config); + var coverMgr = new CoverArtManager(_config!); var coverArt = coverMgr.SaveCoverArt(coverArtData, song); var meta = new Utilities.MetadataRetriever(); meta.UpdateMetadata(song, song); - DirectoryManager dirMgr = new DirectoryManager(_config, song); + DirectoryManager dirMgr = new DirectoryManager(_config!, song); dirMgr.CreateDirectory(); var tempPath = song.SongPath(); @@ -350,7 +350,7 @@ public class SongManager : BaseManager public async Task SaveSongTemp(IFormFile songFile) { _logger.Info("Assigning song filename"); - var song = new Song { SongDirectory = this._tempDirectoryRoot }; + var song = new Song { SongDirectory = this._tempDirectoryRoot! }; var filename = await song.GenerateFilenameAsync(false) + "-" + songFile.FileName; song.Filename = filename; var songPath = song.SongPath(); @@ -371,7 +371,6 @@ public class SongManager : BaseManager // song.SongDirectory = _tempDirectoryRoot; song.DateCreated = DateTime.Now; - // song.Filename = filename; return song; } @@ -385,9 +384,9 @@ public class SongManager : BaseManager var currentGenre = currentSong.Genre; var currentYear = currentSong.Year; - if (!currentTitle.Equals(songUpdates.Title) || !currentArtist.Equals(songUpdates.Artist) || - !currentAlbum.Equals(songUpdates.AlbumTitle) || - !currentGenre.Equals(songUpdates.Genre) || currentYear != songUpdates.Year) + if (!currentTitle!.Equals(songUpdates.Title) || !currentArtist!.Equals(songUpdates.Artist) || + !currentAlbum!.Equals(songUpdates.AlbumTitle) || + !currentGenre!.Equals(songUpdates.Genre) || currentYear != songUpdates.Year) return true; return false; @@ -395,7 +394,7 @@ public class SongManager : BaseManager private void DeleteEmptyDirectories(ref Song oldSong, ref Song updatedSong) { - DirectoryManager mgr = new DirectoryManager(_config); + DirectoryManager mgr = new DirectoryManager(_config!); _logger.Info("Checking to see if there are any directories to delete"); mgr.DeleteEmptyDirectories(oldSong); @@ -405,8 +404,8 @@ public class SongManager : BaseManager { try { - _connectionString = _config.GetConnectionString("DefaultConnection"); - _songContext = new SongContext(_connectionString); + _connectionString = _config!.GetConnectionString("DefaultConnection"); + _songContext = new SongContext(_connectionString!); } catch (Exception ex) { @@ -420,10 +419,10 @@ public class SongManager : BaseManager { _logger.Info("Starting process to save the song to the database"); - var albumMgr = new AlbumManager(_config); - var artistMgr = new ArtistManager(_config); - var genreMgr = new GenreManager(_config); - var coverMgr = new CoverArtManager(_config); + var albumMgr = new AlbumManager(_config!); + var artistMgr = new ArtistManager(_config!); + var genreMgr = new GenreManager(_config!); + var coverMgr = new CoverArtManager(_config!); albumMgr.SaveAlbumToDatabase(ref song); artistMgr.SaveArtistToDatabase(ref song); genreMgr.SaveGenreToDatabase(ref song); @@ -431,10 +430,10 @@ public class SongManager : BaseManager var info = "Saving Song to DB"; _logger.Info(info); - _songContext.Add(song); - _songContext.SaveChanges(); + _songContext!.Add(song); + _songContext!.SaveChanges(); - coverMgr.SaveCoverArtToDatabase(ref song, ref cover); + coverMgr.SaveCoverArtToDatabase(ref song, ref cover!); } @@ -479,7 +478,7 @@ public class SongManager : BaseManager { var updatedSongRecord = oldSongRecord; - var songContext = new SongContext(_connectionString); + var songContext = new SongContext(_connectionString!); if (!SongRecordChanged(oldSongRecord, newSongRecord)) { @@ -519,17 +518,17 @@ public class SongManager : BaseManager newSongRecord = updatedSongRecord; result.Message = "Successfully updated song"; - result.SongTitle = updatedSongRecord.Title; + result.SongTitle = updatedSongRecord.Title!; } private void DeleteSongFromDatabase(Song song) { _logger.Info("Starting process to delete records related to the song from the database"); - var albumMgr = new AlbumManager(_config); - var artistMgr = new ArtistManager(_config); - var genreMgr = new GenreManager(_config); - var sngContext = new SongContext(_connectionString); + var albumMgr = new AlbumManager(_config!); + var artistMgr = new ArtistManager(_config!); + var genreMgr = new GenreManager(_config!); + var sngContext = new SongContext(_connectionString!); sngContext.Songs.Remove(song); sngContext.SaveChanges(); artistMgr.DeleteArtistFromDatabase(song); diff --git a/Controllers/Utilities/MetadataRetriever.cs b/Controllers/Utilities/MetadataRetriever.cs index 1d03e7e..6a50f61 100644 --- a/Controllers/Utilities/MetadataRetriever.cs +++ b/Controllers/Utilities/MetadataRetriever.cs @@ -11,12 +11,12 @@ public class MetadataRetriever private static NLog.Logger _logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger(); private List _supportedAudioFileTypes = new List {"wav", "flac"}; private List _supportedImageFileTypes = new List {"jpeg", "jpg", "png"}; - private Song _updatedSong; - private string _message; - private string _title; - private string _artist; - private string _album; - private string _genre; + private Song? _updatedSong; + private string? _message; + private string? _title; + private string? _artist; + private string? _album; + private string? _genre; private int _year; private int _duration; #endregion @@ -197,7 +197,7 @@ public class MetadataRetriever _logger.Error(msg, "An error occurred in MetadataRetriever"); } - return null; + return []; } @@ -263,43 +263,43 @@ public class MetadataRetriever switch (key.ToLower()) { case "title": - _updatedSong.Title = title; + _updatedSong!.Title = title; fileTag.Tag.Title = title; break; case "artists": - _updatedSong.Artist = artist; + _updatedSong!.Artist = artist; fileTag.Tag.Performers = new []{artist}; break; case "album": - _updatedSong.AlbumTitle = album; + _updatedSong!.AlbumTitle = album; fileTag.Tag.Album = album; break; case "genre": - _updatedSong.Genre = genre; + _updatedSong!.Genre = genre; fileTag.Tag.Genres = new []{genre}; break; case "year": - _updatedSong.Year = year; - fileTag.Tag.Year = (uint)year; + _updatedSong!.Year = year; + fileTag.Tag.Year = (uint)year!; break; case "albumartist": - _updatedSong.AlbumArtist = albumArtist; + _updatedSong!.AlbumArtist = albumArtist; fileTag.Tag.AlbumArtists = new []{albumArtist}; break; case "track": - _updatedSong.Track = track; + _updatedSong!.Track = track; fileTag.Tag.Track = (uint)(track); break; case "trackcount": - _updatedSong.TrackCount = trackCount; + _updatedSong!.TrackCount = trackCount; fileTag.Tag.TrackCount = (uint)(trackCount); break; case "disc": - _updatedSong.Disc = disc; + _updatedSong!.Disc = disc; fileTag.Tag.Disc = (uint)(disc); break; case "disccount": - _updatedSong.DiscCount = discCount; + _updatedSong!.DiscCount = discCount; fileTag.Tag.DiscCount = (uint)(discCount); break; } diff --git a/Controllers/Utilities/SongCompression.cs b/Controllers/Utilities/SongCompression.cs index ef7035a..7bacc2e 100644 --- a/Controllers/Utilities/SongCompression.cs +++ b/Controllers/Utilities/SongCompression.cs @@ -1,4 +1,4 @@ -using Ionic.Zip; +// using Ionic.Zip; using Icarus.Models; @@ -63,11 +63,24 @@ public class SongCompression try { + using (var fi = new FileStream(songDetails.SongPath(), FileMode.Open)) + { + using (var z = new Ionic.Zlib.ZlibStream(fi, Ionic.Zlib.CompressionMode.Compress)) + { + using (var tr = new FileStream(tmpZipFilePath, FileMode.CreateNew)) + { + z.CopyTo(tr); + } + } + } + /* + var f = new Ionic.Zlib.ZlibStream(); using (ZipFile zip = new ZipFile()) { zip.AddFile(songDetails.SongPath()); zip.Save(tmpZipFilePath); } + */ Console.WriteLine("Successfully compressed"); } diff --git a/Controllers/v1/ArtistController.cs b/Controllers/v1/ArtistController.cs index 6bf41ce..7cc9be9 100644 --- a/Controllers/v1/ArtistController.cs +++ b/Controllers/v1/ArtistController.cs @@ -12,8 +12,8 @@ namespace Icarus.Controllers.V1; public class ArtistController : BaseController { #region Fields - private readonly ILogger _logger; - private string _connectionString; + private readonly ILogger? _logger; + private string? _connectionString; #endregion @@ -35,7 +35,7 @@ public class ArtistController : BaseController [HttpGet] public IActionResult GetArtists() { - var artistContext = new ArtistContext(_connectionString); + var artistContext = new ArtistContext(_connectionString!); var artists = artistContext.Artists.ToList(); @@ -50,7 +50,7 @@ public class ArtistController : BaseController { Artist artist = new Artist { Id = id }; - var artistContext = new ArtistContext(_connectionString); + var artistContext = new ArtistContext(_connectionString!); if (artistContext.DoesRecordExist(artist)) { diff --git a/Controllers/v1/CoverArtController.cs b/Controllers/v1/CoverArtController.cs index 0cc1523..5f47405 100644 --- a/Controllers/v1/CoverArtController.cs +++ b/Controllers/v1/CoverArtController.cs @@ -82,7 +82,7 @@ public class CoverArtController : BaseController var songMetaData = songContext.RetrieveRecord(new Song { Id = id}); var c = covMgr.GetCoverArt(songMetaData); - var filename = DirectoryManager.GenerateDownloadFilename(10, Constants.FileExtensions.JPG_EXTENSION, songMetaData.Title, randomizeFilename); + var filename = DirectoryManager.GenerateDownloadFilename(10, Constants.FileExtensions.JPG_EXTENSION, songMetaData.Title!, randomizeFilename); var data = await c.GetData(); diff --git a/Controllers/v1/LoginController.cs b/Controllers/v1/LoginController.cs index dfc917c..426e3cc 100644 --- a/Controllers/v1/LoginController.cs +++ b/Controllers/v1/LoginController.cs @@ -17,8 +17,8 @@ namespace Icarus.Controllers.V1; public class LoginController : ControllerBase { #region Fields - private string _connectionString; - private IConfiguration _config; + private string? _connectionString; + private IConfiguration? _config; private ILogger _logger; #endregion @@ -41,7 +41,7 @@ public class LoginController : ControllerBase [HttpPost] public IActionResult Login([FromBody] User user) { - var context = new UserContext(_connectionString); + var context = new UserContext(_connectionString!); _logger.LogInformation("Starting process of validating credentials"); @@ -57,10 +57,10 @@ public class LoginController : ControllerBase { if (context.Users.FirstOrDefault(usr => usr.Username.Equals(user.Username)) != null) { - user = context.Users.FirstOrDefault(usr => usr.Username.Equals(user.Username)); + user = context.Users.FirstOrDefault(usr => usr.Username.Equals(user.Username))!; var validatePass = new PasswordEncryption(); - var validated = validatePass.VerifyPassword(user, password); + var validated = validatePass.VerifyPassword(user!, password); if (!validated) { loginRes.Message = message; @@ -71,9 +71,9 @@ public class LoginController : ControllerBase _logger.LogInformation("Successfully validated user credentials"); - TokenManager tk = new TokenManager(_config); + TokenManager tk = new TokenManager(_config!); - loginRes = tk.LoginSymmetric(user); + loginRes = tk.LoginSymmetric(user!); return Ok(loginRes); } @@ -87,7 +87,7 @@ public class LoginController : ControllerBase catch (Exception ex) { _logger.LogError("An error occurred: {0}", ex.Message); - _logger.LogError("Inner Exception: {0}", ex.InnerException.Message); + _logger.LogError("Inner Exception: {0}", ex.InnerException!.Message); } return NotFound(loginRes); diff --git a/Icarus.csproj b/Icarus.csproj index 4a7e949..00d31d4 100644 --- a/Icarus.csproj +++ b/Icarus.csproj @@ -3,6 +3,7 @@ net8.0 enable + enable InProcess 0.1.10 @@ -10,9 +11,9 @@ - + diff --git a/Models/Song.cs b/Models/Song.cs index 20d7cb0..519b3d3 100644 --- a/Models/Song.cs +++ b/Models/Song.cs @@ -10,24 +10,24 @@ public class Song [JsonProperty("id")] public int Id { get; set; } [JsonProperty("title")] - public string Title { get; set; } + public string? Title { get; set; } [JsonProperty("album")] [Column("Album")] - public string AlbumTitle { get; set; } + public string? AlbumTitle { get; set; } [JsonProperty("artist")] - public string Artist { get; set; } + public string? Artist { get; set; } [JsonProperty("album_artist")] - public string AlbumArtist { get; set; } + public string? AlbumArtist { get; set; } [JsonProperty("year")] public int? Year { get; set; } [JsonProperty("genre")] - public string Genre { get; set; } + public string? Genre { get; set; } [JsonProperty("duration")] public int Duration { get; set; } [JsonProperty("filename")] - public string Filename { get; set; } + public string? Filename { get; set; } [JsonIgnore] - public string SongDirectory { get; set; } + public string? SongDirectory { get; set; } [JsonProperty("audio_type")] public string? AudioType { get; set; } [JsonProperty("track")] diff --git a/README.md b/README.md index 7287543..407cbcc 100644 --- a/README.md +++ b/README.md @@ -16,8 +16,8 @@ One can interface with Icarus the music server either by: * [MySql](https://www.nuget.org/packages/MySql.Data/) * OpenSSL * BCrypt.Net-Next -* DotNetZip * ID3 +* Iconic.Zlib.Netstandard * JWT * Microsoft.AspNetCore.Authentication.JwtBearer * Microsoft.AspNetCore.Mvc.NewtonsoftJson