public async Task <OperationResult <bool> > ScanRelease(ApplicationUser user, Guid releaseId, bool isReadOnly = false, bool wasDoneForInvalidTrackPlay = false) { var sw = new Stopwatch(); sw.Start(); var errors = new List <Exception>(); var release = DbContext.Releases .Include(x => x.Artist) .Include(x => x.Labels) .FirstOrDefault(x => x.RoadieId == releaseId); if (release == null) { await LogAndPublish($"ScanRelease Unknown Release [{releaseId}]", LogLevel.Warning); return(new OperationResult <bool>(true, $"Release Not Found [{releaseId}]")); } try { var result = await ReleaseFactory.ScanReleaseFolder(release.RoadieId, Configuration.LibraryFolder, isReadOnly, release); await UpdateReleaseRank(release.Id); CacheManager.ClearRegion(release.CacheRegion); } catch (Exception ex) { await LogAndPublish(ex.ToString(), LogLevel.Error); errors.Add(ex); } sw.Stop(); DbContext.ScanHistories.Add(new data.ScanHistory { UserId = user.Id, ForReleaseId = release.Id, NewTracks = ReleaseFactory.AddedTrackIds.Count(), TimeSpanInSeconds = (int)sw.Elapsed.TotalSeconds }); await DbContext.SaveChangesAsync(); await LogAndPublish( $"ScanRelease `{release}`, By User `{user}`, WasDoneForInvalidTrackPlay [{wasDoneForInvalidTrackPlay}]", LogLevel.Information); return(new OperationResult <bool> { IsSuccess = !errors.Any(), Data = true, OperationTime = sw.ElapsedMilliseconds, Errors = errors }); }
public async Task <OperationResult <bool> > DeleteTrack(ApplicationUser user, Guid trackId, bool?doDeleteFile) { var sw = new Stopwatch(); sw.Start(); var errors = new List <Exception>(); var track = DbContext.Tracks.Include(x => x.ReleaseMedia) .Include(x => x.ReleaseMedia.Release) .Include(x => x.ReleaseMedia.Release.Artist) .FirstOrDefault(x => x.RoadieId == trackId); try { if (track == null) { await LogAndPublish($"DeleteTrack Unknown Track [{trackId}]", LogLevel.Warning); return(new OperationResult <bool>(true, $"Track Not Found [{trackId}]")); } DbContext.Tracks.Remove(track); await DbContext.SaveChangesAsync(); if (doDeleteFile ?? false) { string trackPath = null; try { trackPath = track.PathToTrack(Configuration, Configuration.LibraryFolder); if (File.Exists(trackPath)) { File.Delete(trackPath); Logger.LogWarning($"x For Track `{track}`, Deleted File [{trackPath}]"); } var trackThumbnailName = track.PathToTrackThumbnail(Configuration, Configuration.LibraryFolder); if (File.Exists(trackThumbnailName)) { File.Delete(trackThumbnailName); Logger.LogWarning($"x For Track `{track}`, Deleted Thumbnail File [{trackThumbnailName}]"); } } catch (Exception ex) { Logger.LogError(ex, string.Format("Error Deleting File [{0}] For Track [{1}] Exception [{2}]", trackPath, track.Id, ex.Serialize())); } } await ReleaseFactory.ScanReleaseFolder(track.ReleaseMedia.Release.RoadieId, Configuration.LibraryFolder, false, track.ReleaseMedia.Release); } catch (Exception ex) { Logger.LogError(ex); await LogAndPublish("Error deleting track."); errors.Add(ex); } sw.Stop(); await LogAndPublish($"DeleteTrack `{track}`, By User `{user}`", LogLevel.Information); CacheManager.Clear(); return(new OperationResult <bool> { IsSuccess = !errors.Any(), Data = true, OperationTime = sw.ElapsedMilliseconds, Errors = errors }); }