コード例 #1
0
    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);
        }
    }
コード例 #2
0
    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);
    }