Exemplo n.º 1
0
        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
            });
        }
Exemplo n.º 2
0
        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
            });
        }