Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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());
        }