Example #1
0
    public async Task Run(IContainer ioc, IProgress <CommandProgressReport> progress, CancellationToken cancellationToken = default)
    {
        if (NoWarning)
        {
            NonInteractive = true;
        }

        Log.Information("Running...");

        var report             = CommandProgressReport.Starting(CommandProgressReportVerbType.DatabaseExport);
        var dbReportTranslator = progress.From().Translate <DatabaseUpdateReport>(TranslateDatabaseUpdate);

        // TODO: Add a translator for DB Exporter.
        progress.Report(report);

        await ioc.UpdateCardDatabase(dbReportTranslator, cancellationToken);

        using (var database = new CardDatabaseContext(new AppConfig()
        {
            DbName = Source
        }))
        {
            var exporter = ioc.GetAllInstances <IDatabaseExporter <CardDatabaseContext, WeissSchwarzCard> >()
                           .Where(exporter => exporter.Alias.Contains(Exporter))
                           .First();

            await exporter.Export(database, this);
        }

        report = report.AsDone();
        progress.Report(report);

        /*
         *
         * var deck = await parser.Parse(Source);
         * var inspectionOptions = new InspectionOptions()
         * {
         *  IsNonInteractive = this.NonInteractive,
         *  NoWarning = this.NoWarning
         * };
         * deck = await ioc.GetAllInstances<IExportedDeckInspector>()
         *  .OrderByDescending(inspector => inspector.Priority)
         *  .ToAsyncEnumerable()
         *  .AggregateAwaitAsync(deck, async (d, inspector) => await inspector.Inspect(d, inspectionOptions));
         *
         * if (deck != WeissSchwarzDeck.Empty)
         * {
         *  var exporter = ioc.GetAllInstances<IDeckExporter>()
         *      .Where(exporter => exporter.Alias.Contains(Exporter))
         *      .First();
         *
         *  await exporter.Export(deck, this);
         * }
         */
    }
        public async Task Export(CardDatabaseContext database, IDatabaseExportInfo info)
        {
            Log.Information("Starting...");
            var query      = CreateQuery(database.WeissSchwarzCards, info);
            var resultFile = Path.CreateDirectory(info.Destination).Combine("cockatrice_card_db.xml");
            var serializer = new XmlSerializer(typeof(CockatriceCardDatabase));
            var cardSet    = await CockatriceCardDatabase.CreateFromDatabase(query);

            resultFile.Open(s => serializer.Serialize(s, cardSet),
                            System.IO.FileMode.Create,
                            System.IO.FileAccess.Write,
                            System.IO.FileShare.ReadWrite
                            );
            Log.Information($"Done: {resultFile.FullPath}");
        }
Example #3
0
        public async Task Run(IContainer ioc)
        {
            if (NoWarning)
            {
                NonInteractive = true;
            }

            Log.Information("Running...");

            using (var database = new CardDatabaseContext(new AppConfig()
            {
                DbName = Source
            }))
            {
                var exporter = ioc.GetAllInstances <IDatabaseExporter>()
                               .Where(exporter => exporter.Alias.Contains(Exporter))
                               .First();

                await exporter.Export(database, this);
            }


            /*
             *
             * var deck = await parser.Parse(Source);
             * var inspectionOptions = new InspectionOptions()
             * {
             *  IsNonInteractive = this.NonInteractive,
             *  NoWarning = this.NoWarning
             * };
             * deck = await ioc.GetAllInstances<IExportedDeckInspector>()
             *  .OrderByDescending(inspector => inspector.Priority)
             *  .ToAsyncEnumerable()
             *  .AggregateAwaitAsync(deck, async (d, inspector) => await inspector.Inspect(d, inspectionOptions));
             *
             * if (deck != WeissSchwarzDeck.Empty)
             * {
             *  var exporter = ioc.GetAllInstances<IDeckExporter>()
             *      .Where(exporter => exporter.Alias.Contains(Exporter))
             *      .First();
             *
             *  await exporter.Export(deck, this);
             * }
             */
        }
Example #4
0
    private async Task DeleteCards(CardDatabaseContext db, ActivityLog activityLog, CancellationToken ct)
    {
        var deleteArgs = JsonSerializer.Deserialize <DeleteArgs>(activityLog.Target);
        var query      = db.WeissSchwarzCards.AsAsyncEnumerable();

        if (!string.IsNullOrWhiteSpace(deleteArgs.Language))
        {
            CardLanguage?lang = TranslateLanguage(deleteArgs.Language);
            if (lang is not null)
            {
                query = query.Where(card => card.Language == lang);
            }
        }
        if (!string.IsNullOrWhiteSpace(deleteArgs.Language))
        {
            var version = new Version(deleteArgs.VersionLessThan);
            query = query.Where(card => Version.Parse(card.VersionTimestamp.Replace(new Regex(@"(-[\w\d]+)?(\+[\w\d]+)?"), "")) < version);
        }
        db.RemoveRange(query.ToEnumerable());
        await db.SaveChangesAsync(ct);
    }