diff --git a/Controllers/Managers/DirectoryManager.cs b/Controllers/Managers/DirectoryManager.cs index e02e56d..07f905f 100644 --- a/Controllers/Managers/DirectoryManager.cs +++ b/Controllers/Managers/DirectoryManager.cs @@ -48,6 +48,14 @@ public class DirectoryManager : BaseManager #region Methods + // Does not include extension + public static string GenerateFilename(int length) + { + string chars = Constants.DirectoryPaths.FILENAME_CHARACTERS; + var random = new Random(); + return new string(Enumerable.Repeat(chars, length).Select(s => + s[random.Next(s.Length)]).ToArray()); + } public void CreateDirectory() { CreateDirectory(_song); diff --git a/Controllers/v1/SongDataController.cs b/Controllers/v1/SongDataController.cs index 5ae5529..9f52aa4 100644 --- a/Controllers/v1/SongDataController.cs +++ b/Controllers/v1/SongDataController.cs @@ -48,14 +48,24 @@ public class SongDataController : BaseController [HttpGet("download/{id}")] - public IActionResult Download(int id) + public IActionResult Download(int id, [FromQuery] bool? randomizeFilename) { var songContext = new SongContext(_connectionString); var songMetaData = songContext.RetrieveRecord(new Song { SongID = id}); var song = _songMgr.RetrieveSong(songMetaData).Result; + var filename = ""; + + if (randomizeFilename.HasValue && randomizeFilename.Value) + { + filename = Managers.DirectoryManager.GenerateFilename(10) + Constants.FileExtensions.WAV_EXTENSION; + } + else + { + filename = songMetaData.Title + Constants.FileExtensions.WAV_EXTENSION; + } - return File(song.Data, "application/x-msdownload", songMetaData.Filename); + return File(song.Data, "application/x-msdownload", filename); } // Assumes that the song already has metadata such as diff --git a/Models/Song.cs b/Models/Song.cs index 828005e..53c58b9 100644 --- a/Models/Song.cs +++ b/Models/Song.cs @@ -75,9 +75,7 @@ public class Song { int length = Constants.DirectoryPaths.FILENAME_LENGTH; string chars = Constants.DirectoryPaths.FILENAME_CHARACTERS; - var random = new Random(); - var filename = new string(Enumerable.Repeat(chars, length).Select(s => - s[random.Next(s.Length)]).ToArray()); + var filename = this.Generate(length, chars); var extension = Icarus.Constants.FileExtensions.WAV_EXTENSION; return flag == 0 ? filename : $"{filename}{extension}"; @@ -87,15 +85,20 @@ public class Song int length = Constants.DirectoryPaths.FILENAME_LENGTH; string chars = Constants.DirectoryPaths.FILENAME_CHARACTERS; var extension = Icarus.Constants.FileExtensions.WAV_EXTENSION; - var random = new Random(); var filename = await Task.Run(() => { - return new string(Enumerable.Repeat(chars, length).Select(s => - s[random.Next(s.Length)]).ToArray()); + return this.Generate(length, chars); }); - return flag == 0 ? filename : $"{filename}{extension}"; } + + private string Generate(int length, string chars) + { + var random = new Random(); + var filename = new string(Enumerable.Repeat(chars, length).Select(s => + s[random.Next(s.Length)]).ToArray()); + return filename; + } #endregion }