@@ -180,23 +180,30 @@ public async Task SaveSongToFileSystem(IFormFile songFile)
180180 DirectoryManager dirMgr = new DirectoryManager ( _config , song ) ;
181181 dirMgr . CreateDirectory ( ) ;
182182
183- var filePath = dirMgr . SongDirectory ;
184- filePath += $ "{ song . Filename } ";
183+ var tempPath = song . SongPath ( ) ;
184+ song . Filename = song . GenerateFilename ( 1 ) ;
185+ var filePath = $ "{ dirMgr . SongDirectory } { song . Filename } ";
185186
186187 _logger . Info ( $ "Absolute song path: { filePath } ") ;
187188
188189
189- using ( var fileStream = new FileStream ( filePath , FileMode . Create ) )
190+ await Task . Run ( ( ) =>
190191 {
191- var songBytes = await System . IO . File . ReadAllBytesAsync ( song . SongPath ( ) ) ;
192+ using ( var fileStream = new FileStream ( filePath , FileMode . Create ) )
193+ {
194+ var songBytes = System . IO . File . ReadAllBytes ( tempPath ) ;
192195
193- System . IO . File . WriteAllBytesAsync ( filePath , songBytes ) ;
194- System . IO . File . Delete ( song . SongPath ( ) ) ;
196+ _logger . Info ( "Saving song to the filesystem" ) ;
197+ fileStream . Write ( songBytes , 0 , songBytes . Count ( ) ) ;
195198
196- song . SongDirectory = dirMgr . SongDirectory ;
199+ System . IO . File . Delete ( tempPath ) ;
200+ _logger . Info ( "Deleting temp file" ) ;
197201
198- _logger . Info ( "Song successfully saved to filesystem" ) ;
199- }
202+ _logger . Info ( "Song successfully saved to filesystem" ) ;
203+ }
204+ } ) ;
205+
206+ song . SongDirectory = dirMgr . SongDirectory ;
200207
201208 var coverMgr = new CoverArtManager ( _config ) ;
202209 var coverArt = coverMgr . SaveCoverArt ( song ) ;
@@ -211,51 +218,74 @@ public async Task SaveSongToFileSystem(IFormFile songFile)
211218 }
212219 }
213220
214- public async Task SaveSongToFileSystem ( IFormFile songFile , IFormFile coverArtData , Song song )
221+ public void SaveSongToFileSystem ( IFormFile songFile , IFormFile coverArtData , Song song )
215222 {
223+ song . SongDirectory = _tempDirectoryRoot ;
224+ song . DateCreated = DateTime . Now ;
225+
216226 if ( string . IsNullOrEmpty ( song . Filename ) )
217227 {
218228 song . Filename = song . GenerateFilename ( 1 ) ;
219229 }
220230
221- song . SongDirectory = _tempDirectoryRoot ;
222- song . DateCreated = DateTime . Now ;
231+ _logger . Info ( $ "Temporary directory: { _tempDirectoryRoot } ") ;
223232
224- using ( var filestream = new FileStream ( song . SongPath ( ) , FileMode . Create ) )
233+ var tempPath = song . SongPath ( ) ;
234+
235+ _logger . Info ( "Temporary song path: {0}" , tempPath ) ;
236+
237+ using ( var filestream = new FileStream ( tempPath , FileMode . Create ) )
225238 {
226239 _logger . Info ( "Saving song to temporary directory" ) ;
227- await songFile . CopyToAsync ( filestream ) ;
240+ songFile . CopyTo ( filestream ) ;
228241 }
229242
230243 var coverMgr = new CoverArtManager ( _config ) ;
231- var coverArt = coverMgr . SaveCoverArt ( coverArtData , song ) ;
232-
233244 var meta = new MetadataRetriever ( ) ;
245+ var coverArt = coverMgr . SaveCoverArt ( coverArtData , song ) ;
246+ meta . UpdateCoverArt ( song , coverArt ) ;
234247 song . Duration = meta . RetrieveSongDuration ( song . SongPath ( ) ) ;
235248
236249 meta . UpdateMetadata ( song , song ) ;
237- meta . UpdateCoverArt ( song , coverArt ) ;
250+
238251
239252 DirectoryManager dirMgr = new DirectoryManager ( _config , song ) ;
240253 dirMgr . CreateDirectory ( ) ;
241254
242- var filePath = dirMgr . SongDirectory + song . Filename ;
255+ song . SongDirectory = dirMgr . SongDirectory ;
243256
257+ var filePath = song . SongPath ( ) ;
244258 _logger . Info ( $ "Absolute song path: { filePath } ") ;
245259
246-
247260 using ( var fileStream = new FileStream ( filePath , FileMode . Create ) )
248261 {
249- var songBytes = await System . IO . File . ReadAllBytesAsync ( song . SongPath ( ) ) ;
262+ var songBytes = System . IO . File . ReadAllBytes ( tempPath ) ;
250263
251- await System . IO . File . WriteAllBytesAsync ( filePath , songBytes ) ;
252- System . IO . File . Delete ( song . SongPath ( ) ) ;
253- song . SongDirectory = dirMgr . SongDirectory ;
264+ try
265+ {
266+ if ( System . IO . File . Exists ( filePath ) && System . IO . File . Exists ( tempPath ) && fileStream . Length > 0 )
267+ {
268+ System . IO . File . Delete ( tempPath ) ;
269+ _logger . Info ( "Deleted temp song from filesystem: {0}" , tempPath ) ;
270+ }
271+ else
272+ {
273+ fileStream . Write ( songBytes , 0 , songBytes . Count ( ) ) ;
274+ _logger . Info ( "Saved song to filesystem: {0}" , filePath ) ;
275+
276+ System . IO . File . Delete ( tempPath ) ;
277+ _logger . Info ( "Deleted temp song from filesystem: {0}" , tempPath ) ;
278+ }
279+ }
280+ catch ( Exception ex )
281+ {
282+ var msg = ex . Message ;
283+ _logger . Error ( $ "An error occurred: { msg } ") ;
284+ }
254285
255286 _logger . Info ( "Song successfully saved to filesystem" ) ;
256287 }
257288
258-
259289 coverMgr . SaveCoverArtToDatabase ( ref song , ref coverArt ) ;
260290 SaveSongToDatabase ( song ) ;
261291 }
@@ -296,20 +326,23 @@ private async Task<Song> SaveSongTemp(IFormFile songFile)
296326 var song = new Song ( ) ;
297327 _logger . Info ( "Assigning song filename" ) ;
298328 song . SongDirectory = _tempDirectoryRoot ;
299- song . Filename = song . GenerateFilename ( 1 ) ;
329+ var filename = song . GenerateFilename ( 1 ) ;
330+ song . Filename = filename ;
300331
301332 using ( var filestream = new FileStream ( song . SongPath ( ) , FileMode . Create ) )
302333 {
303- _logger . Info ( "Saving song to temporary directory" ) ;
334+ _logger . Info ( "Saving temp song: {0}" , song . SongPath ( ) ) ;
304335 await songFile . CopyToAsync ( filestream ) ;
305336 }
306-
307- MetadataRetriever meta = new MetadataRetriever ( ) ;
308- song = meta . RetrieveMetaData ( song . SongPath ( ) ) ;
337+ await Task . Run ( ( ) =>
338+ {
339+ MetadataRetriever meta = new MetadataRetriever ( ) ;
340+ song = meta . RetrieveMetaData ( song . SongPath ( ) ) ;
341+ } ) ;
309342
310343 song . SongDirectory = _tempDirectoryRoot ;
311- song . Filename = song . GenerateFilename ( 1 ) ;
312344 song . DateCreated = DateTime . Now ;
345+ song . Filename = filename ;
313346
314347 return song ;
315348 }
0 commit comments