/// <summary> /// Gets the data set for a particular date. /// </summary> /// <param name="date">The date.</param> /// <returns></returns> public DataLogModel GetDataSet(DateTime date) { DataLogModel data = new DataLogModel(); string fileName = Path.Combine(GetDataDirectory(), date.ToString("yyyy-MM-dd") + ".dsx"); if (File.Exists(fileName)) { data.ReadXml(fileName, System.Data.XmlReadMode.IgnoreSchema); foreach (var row in data.Impacts.Where(row => row.Timestamp.Date != date).ToList()) data.Impacts.RemoveImpactsRow(row); foreach (var row in data.Scores.Where(row => row.Timestamp.Date != date).ToList()) data.Scores.RemoveScoresRow(row); data.AcceptChanges(); } return data; }
/// <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> /// Gets the data set for a particular date. /// </summary> /// <param name="date">The date.</param> /// <returns></returns> public DataLogModel GetDataSet(DateTime date) { DataLogModel data = new DataLogModel(); string fileName = Path.Combine(GetDataDirectory(), date.ToString("yyyy-MM-dd") + ".dsx"); if (File.Exists(fileName)) { data.ReadXml(fileName, System.Data.XmlReadMode.IgnoreSchema); foreach (var row in data.Impacts.Where(row => row.Timestamp.Date != date).ToList()) { data.Impacts.RemoveImpactsRow(row); } foreach (var row in data.Scores.Where(row => row.Timestamp.Date != date).ToList()) { data.Scores.RemoveScoresRow(row); } data.AcceptChanges(); } return(data); }
/// <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); } }