public async Task <ReadWriteResult> SaveDataAsync(WorkYear year) { Dictionary <string, List <string> > changedFiles = year.Months .Where(m => m.Days.Any(wd => wd.IsChanged)) .ToDictionary( m => Path.Combine(this.dataDirectory, $"{year.Year}_{m.Month:00}.md"), m => m.Days .Where(wd => wd.IsChanged && !wd.IsEmpty() || !wd.IsEmpty()) .Select(wd => $"{wd.Year},{wd.Month},{wd.Day}|{wd.OriginalString.Replace(Environment.NewLine, "<br />").Replace("|", "|")}") .ToList()); foreach (var fileInfo in changedFiles.Where(f => f.Value.Any())) { using (var stream = new FileStream(fileInfo.Key, FileMode.Create, FileAccess.Write, FileShare.ReadWrite, 4096, true)) using (var sw = new StreamWriter(stream)) { foreach (var line in fileInfo.Value) { await sw.WriteLineAsync(line); } await sw.FlushAsync(); await stream.FlushAsync(); } } return(new ReadWriteResult { Success = true }); }
public void Export(WorkYear year) { foreach (var month in year.Months) { var dataFileName = FilenameForMonth(month); this.Export(month, dataFileName); } }
public async Task ExportAsync(WorkYear year) { foreach (var month in year.Months) { var dataFileName = FilenameForMonth(month); await this.ExportAsync(month, dataFileName).ConfigureAwait(false); } }
public void WorkYear_ctor_CreateWholeYear() { WorkYear wy = new WorkYear(2011, new WorkDayParserSettings(), 0, 1, null, null); Assert.AreEqual(12, wy.Months.Count); //test sample month var march = wy.Months.ElementAt(2); Assert.AreEqual(5, march.Weeks.Count); Assert.AreEqual(31, march.Weeks.Sum(w => w.Days.Count())); Assert.AreEqual(DayOfWeek.Tuesday, march.Weeks.First().Days.First().DayOfWeek); }
public ReadWriteResult SetDataOfYear(WorkYear workYear) { var ret = ReadData(); if (ret.Success) { foreach (WorkDayPersistenceData data in this.WorkDaysData.Where(wdpd => wdpd.Year == workYear.Year).ToList()) { var workDay = workYear.GetDay(data.Month, data.Day); WorkDay errorDay = workDay; try { workDay.SetData(data.OriginalString); } catch (Exception exception) { ret.ErrorCount++; // only remember first error for now if (ret.Success) { ret.Success = false; string errorMessage = exception.Message; if (errorDay != null) { errorMessage = string.Format("Beim Einlesen von {0} in der Datei {1} trat in Zeile {2} folgender Fehler auf: {3}", errorDay, data.FileName, data.LineNumber, exception.Message); logger.Error(errorMessage); } ret.Error = errorMessage; } } } if (ret.ErrorCount > 1) { ret.Error += string.Format("\n\n\nEs liegen noch {0} weitere Fehler vor.", ret.ErrorCount); } } return(ret); }
public ReadWriteResult SaveData(WorkYear year) { foreach (var month in year.Months) { List <string> data = new List <string>(); var changedWorkDays = month.Days.Where(wd => wd.IsChanged || !string.IsNullOrWhiteSpace(wd.OriginalString)).ToList(); foreach (var workDay in changedWorkDays) { var description = workDay.OriginalString .Replace(Environment.NewLine, "<br />") .Replace("|", "|"); data.Add(string.Format("{0},{1},{2}|{3}", workDay.Year, workDay.Month, workDay.Day, description)); } var dataFileName = string.Format("{0}_{1}.md", year.Year, month.Month.ToString("00")); var dataFilePath = Path.Combine(this.dataDirectory, dataFileName); if (data.Any()) { File.WriteAllLines(dataFilePath, data); } } return(new ReadWriteResult { Success = true }); }
public async Task <ReadWriteResult> SaveDataAsync(WorkYear year) { foreach (var month in year.Months) { var anyChanges = month.Days.Any(wd => wd.IsChanged); if (!anyChanges) { continue; } var changedWorkDays = month.Days.Where(wd => wd.IsChanged || !string.IsNullOrWhiteSpace(wd.OriginalString)).ToList(); var data = changedWorkDays .Select(workDay => $"{workDay.Year},{workDay.Month},{workDay.Day}|{workDay.OriginalString.Replace(Environment.NewLine, "<br />").Replace("|", "|")}") .ToList(); if (data.Any()) { var dataFileName = $"{year.Year}_{month.Month:00}.md"; var dataFilePath = Path.Combine(this.dataDirectory, dataFileName); using (var stream = new FileStream(dataFilePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None, 4096, true)) using (var sw = new StreamWriter(stream)) { foreach (var line in data) { await sw.WriteLineAsync(line).ConfigureAwait(false); } } } } return(new ReadWriteResult { Success = true }); }
public async Task ExportAsync(WorkYear year) { var listOfTasks = year.Months.Select(month => this.ExportAsync(month, FilenameForMonth(month))).ToList(); await Task.WhenAll(listOfTasks); }
public ReadWriteResult SetDataOfYear(WorkYear workYear) { var ret = ReadData(); if (ret.Success) { foreach (WorkDayPersistenceData data in this.WorkDaysData.Where(wdpd => wdpd.Year == workYear.Year).ToList()) { var workDay = workYear.GetDay(data.Month, data.Day); WorkDay errorDay = workDay; try { workDay.SetData(data.OriginalString); } catch (Exception exception) { ret.ErrorCount++; // only remember first error for now if (ret.Success) { ret.Success = false; string errorMessage = exception.Message; if (errorDay != null) { errorMessage = string.Format("Beim Einlesen von {0} in der Datei {1} trat in Zeile {2} folgender Fehler auf: {3}", errorDay, data.FileName, data.LineNumber, exception.Message); logger.Error(errorMessage); } ret.Error = errorMessage; } } } if (ret.ErrorCount > 1) { ret.Error += string.Format("\n\n\nEs liegen noch {0} weitere Fehler vor.", ret.ErrorCount); } } return ret; }
public ReadWriteResult SaveData(WorkYear year) { foreach (var month in year.Months) { List<string> data = new List<string>(); var changedWorkDays = month.Days.Where(wd => wd.IsChanged || !string.IsNullOrWhiteSpace(wd.OriginalString)).ToList(); foreach (var workDay in changedWorkDays) { data.Add(string.Format("{0},{1},{2}|{3}", workDay.Year, workDay.Month, workDay.Day, workDay.OriginalString.Replace(Environment.NewLine, "<br />"))); } var dataFileName = string.Format("{0}_{1}.md", year.Year, month.Month.ToString("00")); var dataFilePath = Path.Combine(this.dataDirectory, dataFileName); if (data.Any()) { File.WriteAllLines(dataFilePath, data); } } return new ReadWriteResult {Success = true}; }