public async Task Export(WeissSchwarzDeck deck, IExportInfo info, CancellationToken cancellationToken = default) { Log.Information("Exporting as Deck JSON."); var report = DeckExportProgressReport.Starting(deck.Name, ".dek Exporter"); var progress = info.Progress; progress.Report(report); var jsonFilename = Path.CreateDirectory(info.Destination).Combine($"deck_{deck.Name.AsFileNameFriendly()}.json"); var simplifiedDeck = new { Name = deck.Name, Remarks = deck.Remarks, Ratios = deck.AsSimpleDictionary() }; jsonFilename.Open( async s => await JsonSerializer.SerializeAsync(s, simplifiedDeck, options: _defaultOptions, cancellationToken), System.IO.FileMode.Create, System.IO.FileAccess.Write, System.IO.FileShare.ReadWrite ); Log.Information($"Done: {jsonFilename.FullPath}"); report = report.Done(jsonFilename.FullPath); progress.Report(report); if (!String.IsNullOrWhiteSpace(info.OutCommand)) { await _focProcessor().Process(info.OutCommand, jsonFilename.FullPath, cancellationToken); } }
public async Task Export(WeissSchwarzDeck deck, IExportInfo info, CancellationToken cancellationToken = default) { Log.Information("Serializing: {name}", deck.Name); var progress = info.Progress; var report = DeckExportProgressReport.Starting(deck.Name, "Cockatrice"); progress.Report(report); using (var db = _database()) { Log.Information("Replacing all foils with non-foils..."); report = report with { Percentage = 1, ReportMessage = new MultiLanguageString { EN = "Replacing foils with non-foils..." } }; progress.Report(report); foreach (var card in deck.Ratios.Keys) { if (card.IsFoil) { deck.ReplaceCard(card, await db.FindNonFoil(card, cancellationToken)); } } } report = report with { Percentage = 30, ReportMessage = new MultiLanguageString { EN = "Creating Deck for COD format." } }; progress.Report(report); Log.Information("Creating deck.cod..."); var cckDeck = new CockatriceDeck(); cckDeck.DeckName = deck.Name; cckDeck.Comments = deck.Remarks; cckDeck.Ratios = new CockatriceDeckRatio(); cckDeck.Ratios.Ratios = deck.Ratios.Select(Translate).ToList(); report = report with { Percentage = 30, ReportMessage = new MultiLanguageString { EN = "Saving COD file..." } }; progress.Report(report); var deckFilename = deck.Name?.AsFileNameFriendly(); if (String.IsNullOrEmpty(deckFilename)) { deckFilename = "deck"; } var resultDeck = Path.CreateDirectory(info.Destination).Combine($"{deckFilename}.cod"); await resultDeck.WriteAsync(s => _serializer.Serialize(s, cckDeck), cancellationToken); Log.Information($"Saved: {resultDeck.FullPath}"); report = report.Done(resultDeck.FullPath); progress.Report(report); }