private static async Task <ChangedObject> SaveEventFile(IEnumerable <EventEntry> events) { var filename = events.First().Filename; var eventFile = FilesystemHelper.GenerateFileInfo(EVENT_DIRECTORY, filename); var content = JsonHelper.ConvertToJson(events); var result = await FilesystemHelper.WriteAllTextAsyncOnlyWhenChanged(eventFile, content); return(new ChangedObject(filename, result.ChangeState)); }
private static async Task SaveAllEventsCsv(IEnumerable <EventEntry> events) { const string datetimeformat = "d MMM yyyy HH:mm"; var file = FilesystemHelper.GenerateFileInfo(EVENT_DIRECTORY, "all", ".csv"); var lines = events.Select(o => string.Join(';', new string[] { o.Name, o.Location, o.StartDateTime.ToString(datetimeformat), o.EndDateTime.ToString(datetimeformat), o.Description })).ToArray(); var headline = string.Join(';', new string[] { "Name", "Location", "StartTime", "EndTime", "Description" }); var content = headline + '\n' + string.Join('\n', lines); await File.WriteAllTextAsync(file.FullName, content); }
private static FileInfo GetCalendarFileOfUser(Userconfig config) { var filename = config.chat.id.ToString(); if (!string.IsNullOrWhiteSpace(config.config.calendarfileSuffix)) { filename += "-" + config.config.calendarfileSuffix; } var file = FilesystemHelper.GenerateFileInfo(CALENDAR_DIRECTORY, filename, ".ics"); return(file); }
private static async Task DoStuff() { Log("start download at " + DateTime.Now); var icsEvents = await GetIcsEvents(SOURCE_URIS); Log("ICS Events: " + icsEvents.Length); //var informatikTxtEvents = await GetInformatikTxtEvents(INFORMATIK_TXT_URI); //Log("informatik.txt Events: " + informatikTxtEvents.Length); var additionals = await GetAdditionalsFromGithub(ADDITIONALS_GITHUB_TEMP_DIRECTORY); Log("Additional Events: " + additionals.Length); var exams = await GetExams(KLAUSUREN_CSV_URI); Log("Exam Events: " + exams.Length); var events = icsEvents //.Concat(informatikTxtEvents) .Concat(additionals) .Concat(exams) .Distinct() .OrderBy(o => o.Name) .ThenBy(o => o.StartTime) .ToArray(); Log("Total Events: " + events.Length); var eventsByName = events.GroupBy(o => o.Name); Log("EventsByName: " + eventsByName.Count()); Log("Save Events to " + EVENT_DIRECTORY.FullName); await SaveAllEventsCsv(events); var changedFiles = await eventsByName.Select(o => SaveEventFile(o)).WhenAll(); if (changedFiles.CountCreated() > 0) { Log(changedFiles.OnlyCreated().ToArrayString("Created")); } if (changedFiles.CountChanged() > 0) { Log(changedFiles.OnlyChanged().ToArrayString("Changed")); } Log("Unchanged " + changedFiles.CountUnchanged()); Log("Delete not anymore existing event files..."); var fileNamesOfEvents = eventsByName .Select(o => o.Key) .Select(EventEntry.GetFilename) .ToArray(); var unneeded = EVENT_DIRECTORY.EnumerateFiles("*.json") .Where(o => !fileNamesOfEvents.Contains(o.Name)) .ToArray(); if (unneeded.Any()) { Log(unneeded.ToArrayString("Delete")); foreach (var item in unneeded) { item.Delete(); } Log("Deleted"); } else { Log("Nothing to delete"); } Log("Save Event list file..."); var eventList = string.Join("\n", eventsByName.Select(o => o.Key)); var eventFileList = FilesystemHelper.GenerateFileInfo(EVENT_DIRECTORY, "all.txt"); await FilesystemHelper.WriteAllTextAsyncOnlyWhenChanged(eventFileList, eventList); Log("Saved Event list"); await File.WriteAllTextAsync("last-successful-run", DateTime.Now.ToString()); }