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}"); }
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); * } */ }
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); }