Beispiel #1
0
        Task IDeckRepository.ReplaceAllDecks(
            IEnumerable <Models.Client.DeckDetail> deckDetails)
        {
            deckDetails.Require(nameof(deckDetails));

            return(__ReplaceAllDecks());

            async Task __ReplaceAllDecks()
            {
                using (await _asyncMutex.WaitAsync().ConfigureAwait(false))
                {
                    await _deckFileStorage.SaveAll(
                        deckDetails
                        .GroupJoin(
                            (await _deckFileStorage.GetAll().ConfigureAwait(false)),
                            __deckDetails => __deckDetails.DeckID,
                            __deck => __deck.DeckID,
                            (__deckDetails, __decks) => (DeckDetails : __deckDetails, Decks : __decks))
                        .SelectMany(
                            __joinResult => __joinResult.Decks.Cast <Models.Data.Deck?>().DefaultIfEmpty(),
                            (__joinResult, __deck) =>
                            new Models.Data.Deck(
                                __joinResult.DeckDetails.DeckID,
                                __joinResult.DeckDetails.DeckString,
                                __joinResult.DeckDetails.Title,
                                __joinResult.DeckDetails.Position,
                                __deck?.GameResults ?? Enumerable.Empty <Models.Data.GameResult>()))).ConfigureAwait(false);
                }
            }
        }
Beispiel #2
0
        async Task IPowerLogManager.DeleteSavedLog(
            Guid savedLogID)
        {
            try
            {
                File.Delete(Path.Combine(_directoryPath, $"{savedLogID}.txt"));
            }
            catch (FileNotFoundException) {}

            using (await _asyncMutex.WaitAsync().ConfigureAwait(false))
                await PersistSavedLogManifest(
                    (await ParseSavedLogManifest().ConfigureAwait(false))
                    .Where(__savedLog => __savedLog.ID != savedLogID)).ConfigureAwait(false);
        }
        async Task IGameResultRepository.AddGameResult(
            Guid deckID,
            Models.Client.GameResult gameResult)
        {
            using (await _asyncMutex.WaitAsync().ConfigureAwait(false))
            {
                await _deckFileStorage.SaveAll(
                    (await _deckFileStorage.GetAll().ConfigureAwait(false))
                    .Select(
                        __deck =>
                {
                    if (__deck.DeckID != deckID)
                    {
                        return(__deck);
                    }

                    return
                    (new Models.Data.Deck(
                         __deck.DeckID,
                         __deck.DeckString,
                         __deck.Title,
                         __deck.Position,
                         __deck.GameResults.Append(
                             new Models.Data.GameResult(
                                 gameResult.Timestamp,
                                 gameResult.GameWon,
                                 gameResult.OpponentClass))));
                })).ConfigureAwait(false);
            }
        }
        async Task IConfigurationStorage.SaveChanges(
            Models.Client.ConfigurationSettings configurationSettings)
        {
            using (await _asyncMutex.WaitAsync().ConfigureAwait(false))
            {
                var directoryInfo = new DirectoryInfo(Path.GetDirectoryName(_filePath));
                if (!directoryInfo.Exists)
                {
                    directoryInfo.Create();
                }

                using (var stream = new FileStream(_filePath, FileMode.Create))
                {
                    await _configurationDataSerializer.Serialize(
                        stream,
                        new Models.Data.ConfigurationData(
                            configurationSettings.CardTextOffset,
                            configurationSettings.FontSize,
                            configurationSettings.HasLoaded,
                            configurationSettings.PowerLogFilePath,
                            configurationSettings.TextEditorFilePath,
                            configurationSettings.TrackerWindowLocation,
                            configurationSettings.TrackerWindowSize)).ConfigureAwait(false);
                }
            }
        }