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); } } }
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); } } }