Exemplo n.º 1
0
        /// <summary>
        /// Creates files for release using Squirrel.Windows and upload them to GitHub release page.
        /// All information (Repository, Versions, Title, Description) should be specified in csproj file.
        /// Example:
        /// UpdateManager test.csproj
        /// will seek first csproj file in the current directory
        /// after that will generate release files from the package in bin\Release
        /// The name of package is 'PackageId.Version.nupkg'
        /// </summary>
        /// <param name="fileProject">Path of csproj file. By default first csproj file in the current directory.</param>
        // static void Main(string fileProject)
        static void Main(string[] args)
        {
            var upd = new ReleaseFactory(args[0]);

            upd.CreateRelease();
            upd.UploadReleaseToGithub().Wait();
        }
Exemplo n.º 2
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
            });
        }
        public ReleaseSystemFixture()
        {
            rf    = new ReleaseFactory(@"D:\GoogleDrive\Job\flnp\dev\tests\TestAutoUpdateRepo\TestAutoUpdateRepo.csproj");
            _path = @"D:\GoogleDrive\Job\flnp\dev\tests\TestAutoUpdateRepo";

            Configuration = new ConfigurationBuilder()
                            .AddUserSecrets <ReleaseFactory>()
                            .Build();

            client = new GitHubClient(new ProductHeaderValue("regata-jinr"));
            var tokenAuth = new Credentials(Configuration["Settings:GitHubToken"]);

            client.Credentials = tokenAuth;

            owner = "regata-jinr";
            repo  = "TestAutoUpdateRepo";
        }
Exemplo n.º 4
0
        public async Task <OperationResult <bool> > DeleteArtistReleases(ApplicationUser user, Guid artistId,
                                                                         bool doDeleteFiles = false)
        {
            var sw = new Stopwatch();

            sw.Start();
            var errors = new List <Exception>();
            var artist = DbContext.Artists.FirstOrDefault(x => x.RoadieId == artistId);

            if (artist == null)
            {
                await LogAndPublish($"DeleteArtistReleases Unknown Artist [{artistId}]", LogLevel.Warning);

                return(new OperationResult <bool>(true, $"Artist Not Found [{artistId}]"));
            }

            try
            {
                await ReleaseFactory.DeleteReleases(
                    DbContext.Releases.Where(x => x.ArtistId == artist.Id).Select(x => x.RoadieId).ToArray(),
                    doDeleteFiles);

                await DbContext.SaveChangesAsync();
            }
            catch (Exception ex)
            {
                Logger.LogError(ex);
                await LogAndPublish("Error deleting artist.");

                errors.Add(ex);
            }

            sw.Stop();
            await LogAndPublish($"DeleteArtistReleases `{artist}`, By User `{user}`", LogLevel.Information);

            return(new OperationResult <bool>
            {
                IsSuccess = !errors.Any(),
                Data = true,
                OperationTime = sw.ElapsedMilliseconds,
                Errors = errors
            });
        }
Exemplo n.º 5
0
        public async Task <OperationResult <bool> > DeleteRelease(ApplicationUser user, Guid releaseId,
                                                                  bool?doDeleteFiles)
        {
            var sw = new Stopwatch();

            sw.Start();

            var errors = new List <Exception>();

            var release = DbContext.Releases.Include(x => x.Artist).FirstOrDefault(x => x.RoadieId == releaseId);

            try
            {
                if (release == null)
                {
                    await LogAndPublish($"DeleteRelease Unknown Release [{releaseId}]", LogLevel.Warning);

                    return(new OperationResult <bool>(true, $"Release Not Found [{releaseId}]"));
                }

                await ReleaseFactory.Delete(release, doDeleteFiles ?? false);
            }
            catch (Exception ex)
            {
                Logger.LogError(ex);
                await LogAndPublish("Error deleting release.");

                errors.Add(ex);
            }

            sw.Stop();
            await LogAndPublish($"DeleteRelease `{release}`, By User `{user}`", LogLevel.Information);

            CacheManager.Clear();
            return(new OperationResult <bool>
            {
                IsSuccess = !errors.Any(),
                Data = true,
                OperationTime = sw.ElapsedMilliseconds,
                Errors = errors
            });
        }
Exemplo n.º 6
0
        public AdminService(IRoadieSettings configuration,
                            IHttpEncoder httpEncoder,
                            IHttpContext httpContext,
                            data.IRoadieDbContext context,
                            ICacheManager cacheManager,
                            ILogger <ArtistService> logger,
                            IHubContext <ScanActivityHub> scanActivityHub
                            )
            : base(configuration, httpEncoder, context, cacheManager, logger, httpContext)
        {
            ScanActivityHub              = scanActivityHub;
            EventMessageLogger           = new EventMessageLogger();
            EventMessageLogger.Messages += EventMessageLogger_Messages;

            MusicBrainzProvider = new MusicBrainzProvider(configuration, cacheManager, MessageLogger);
            LastFmHelper        = new LastFmHelper(configuration, cacheManager, MessageLogger, context, httpEncoder);
            FileNameHelper      = new FileNameHelper(configuration, cacheManager, MessageLogger);
            ID3TagsHelper       = new ID3TagsHelper(configuration, cacheManager, MessageLogger);

            ArtistLookupEngine =
                new ArtistLookupEngine(configuration, httpEncoder, context, cacheManager, MessageLogger);
            LabelLookupEngine   = new LabelLookupEngine(configuration, httpEncoder, context, cacheManager, MessageLogger);
            ReleaseLookupEngine = new ReleaseLookupEngine(configuration, httpEncoder, context, cacheManager,
                                                          MessageLogger, ArtistLookupEngine, LabelLookupEngine);
            ImageFactory = new ImageFactory(configuration, httpEncoder, context, cacheManager, MessageLogger,
                                            ArtistLookupEngine, ReleaseLookupEngine);
            LabelFactory = new LabelFactory(configuration, httpEncoder, context, cacheManager, MessageLogger,
                                            ArtistLookupEngine, ReleaseLookupEngine);
            AudioMetaDataHelper = new AudioMetaDataHelper(configuration, httpEncoder, context, MusicBrainzProvider,
                                                          LastFmHelper, cacheManager,
                                                          MessageLogger, ArtistLookupEngine, ImageFactory, FileNameHelper, ID3TagsHelper);
            ReleaseFactory = new ReleaseFactory(configuration, httpEncoder, context, cacheManager, MessageLogger,
                                                ArtistLookupEngine, LabelFactory, AudioMetaDataHelper, ReleaseLookupEngine);
            ArtistFactory = new ArtistFactory(configuration, httpEncoder, context, cacheManager, MessageLogger,
                                              ArtistLookupEngine, ReleaseFactory, ImageFactory, ReleaseLookupEngine, AudioMetaDataHelper);
        }
Exemplo n.º 7
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
            });
        }
 public ReleaseSystemTest(ReleaseSystemFixture upd, ITestOutputHelper output)
 {
     _rf         = upd;
     _rfMemb     = _rf.rf;
     this.output = output;
 }