/// <summary> /// Writes the database to disk. /// </summary> private void WriteDatabaseToDisk() { if (GameDataLog.HasChanges()) { Logger.Log("Flushing dataset to disk", Category.Info, Priority.None); try { string fileName = Path.Combine(CreateDataDirectory(), GetDataSetFileName()); using (ReaderWriterLockMgr impactLockMgr = new ReaderWriterLockMgr(GameDataLog.Impacts.Lock)) using (ReaderWriterLockMgr scoreLockMgr = new ReaderWriterLockMgr(GameDataLog.Scores.Lock)) { impactLockMgr.EnterWriteLock(); scoreLockMgr.EnterWriteLock(); foreach (var row in GameDataLog.Impacts.Where(row => row.Timestamp.Date != DateTime.Today).ToList()) { GameDataLog.Impacts.RemoveImpactsRow(row); } foreach (var row in GameDataLog.Scores.Where(row => row.Timestamp.Date != DateTime.Today).ToList()) { GameDataLog.Scores.RemoveScoresRow(row); } GameDataLog.AcceptChanges(); GameDataLog.WriteXml(fileName, XmlWriteMode.WriteSchema); } } catch (IOException ex) { Logger.Log(ex.GetBaseException().ToString(), Category.Exception, Priority.High); EventAggregator.GetEvent <ApplicationEvents.NotifyUserEvent>().Publish(new ApplicationEvents.NotifyUserEvent() { Message = "Trying to write game data. " + ex.GetBaseException().Message, Buttons = System.Windows.MessageBoxButton.OK, Image = System.Windows.MessageBoxImage.Error }); } } else { Logger.Log("Skipping flushing of dataset (no changes)", Category.Info, Priority.None); } }
/// <summary> /// Writes the database to disk. /// </summary> /// <param name="sender">The sender.</param> /// <param name="e">The <see cref="System.ComponentModel.DoWorkEventArgs"/> instance containing the event data.</param> private void WriteDatabaseToDisk() { if (_dataLog.HasChanges()) { _logger.Log("Flushing dataset to disk", Category.Info, Priority.None); try { string fileName = Path.Combine(CreateDataDirectory(), GetDataSetFileName()); using (ReaderWriterLockMgr impactLockMgr = new ReaderWriterLockMgr(_dataLog.Impacts.Lock)) using (ReaderWriterLockMgr scoreLockMgr = new ReaderWriterLockMgr(_dataLog.Scores.Lock)) { impactLockMgr.EnterWriteLock(); scoreLockMgr.EnterWriteLock(); foreach (var row in _dataLog.Impacts.Where(row => row.Timestamp.Date != DateTime.Today).ToList()) { _dataLog.Impacts.RemoveImpactsRow(row); } foreach (var row in _dataLog.Scores.Where(row => row.Timestamp.Date != DateTime.Today).ToList()) { _dataLog.Scores.RemoveScoresRow(row); } _dataLog.AcceptChanges(); _dataLog.WriteXml(fileName, XmlWriteMode.WriteSchema); } } catch (IOException ex) { _logger.Log(ex.GetBaseException().ToString(), Category.Exception, Priority.High); //FIXME: Need to handle this exception with a user notification } } else { _logger.Log("Skipping flushing of dataset (no changes)", Category.Info, Priority.None); } }