Exemple #1
0
        static WebUntisApi GetWebUntisApi(string sourceSchool, string sourceDomain)
        {
            string source = $"{sourceSchool}@{sourceDomain.ToLower()}";

            WebUntisApi api;

            if (webUntisDict.TryGetValue(source, out api))
            {
                return(api);
            }

            api = new WebUntisApi(sourceDomain, sourceSchool);
            webUntisDict.Add(source, api);
            return(api);
        }
Exemple #2
0
        private static void Classes(string[] args)
        {
            string teacherFilter   = null;
            string classNameFilter = null;
            string serverUrl       = "stundenplan.hamburg.de";
            string school          = "hh5849";

            for (int i = 0; i < args.Length; i++)
            {
                switch (args[i])
                {
                case "--teacher":
                case "-t":
                    teacherFilter = args[++i];
                    break;

                case "--class":
                case "-c":
                    classNameFilter = args[++i];
                    break;

                case "--url":
                case "-u":
                    serverUrl = args[++i];
                    if (Regex.Match(serverUrl, "[^.:/?&@_-]+(\\.[^.:/?&@_-]+)+").Success)
                    {
                        Console.Error.WriteLine("Error: Url has to be in format [^.:/?&@_-]+(\\.[^.:/?&@_-]+)+ without protocol, path or query.");
                        goto help;
                    }
                    break;

                case "--school":
                case "-s":
                    school = args[++i];
                    break;

                default:
                    Console.Error.WriteLine("Error parsing Arguments");
                    goto help;

                case "--help":
                case "-h":
                case "-?":
                    help : WriteClassesHelp(); return;
                }
            }

            var api     = new WebUntisApi(serverUrl, school);
            var classes = api.QueryClasses().Result;

            var selectedClasses = classes
                                  .FindAll(teacherFilter, classNameFilter);

            if (selectedClasses.Any())
            {
                foreach (var c in selectedClasses)
                {
                    Console.WriteLine(c);
                }
            }
            else
            {
                Console.WriteLine("No classes match filter or no classes at all");
            }
        }
Exemple #3
0
        public static void Timetable(string[] args)
        {
            string   teacherFilter   = null;
            string   classNameFilter = null;
            string   serverUrl       = "stundenplan.hamburg.de";
            string   school          = "hh5849";
            DateTime date            = DateTime.Now;

            for (int i = 0; i < args.Length; i++)
            {
                switch (args[i])
                {
                case "--teacher":
                case "-t":
                    teacherFilter = args[++i];
                    break;

                case "--class":
                case "-c":
                    classNameFilter = args[++i];
                    break;

                case "--url":
                case "-u":
                    serverUrl = args[++i];
                    if (Regex.Match(serverUrl, "[^.:/?&@_-]+(\\.[^.:/?&@_-]+)+").Success)
                    {
                        Console.Error.WriteLine("Error: Url has to be in format [^.:/?&@_-]+(\\.[^.:/?&@_-]+)+ without protocol, path or query.");
                        goto help;
                    }
                    break;

                case "--school":
                case "-s":
                    school = args[++i];
                    break;

                case "--date":
                case "-d":
                    if (!DateTime.TryParseExact(args[++i], "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out date))
                    {
                        Console.Error.WriteLine("Error: Date has to be in format yyyy-mm-dd");
                        goto help;
                    }
                    break;

                default:
                    Console.Error.WriteLine("Error parsing Arguments");
                    goto help;

                case "--help":
                case "-h":
                case "-?":
                    help : WriteTimeTableHelp(); return;
                }
            }

            if (classNameFilter == null && teacherFilter == null)
            {
                Console.Error.WriteLine("Error: Either --teacher or --class have to be specified");
                WriteTimeTableHelp();
                return;
            }

            var api     = new WebUntisApi(serverUrl, school);
            var classes = api.QueryClasses().Result;

            var selectedClasses = classes
                                  .FindAll(teacherFilter, classNameFilter);

            if (selectedClasses.Count() == 0)
            {
                Console.Error.WriteLine("Error: No class fits filter"); return;
            }
            else if (selectedClasses.Count() == 1)
            {
                Console.WriteLine($"Found class: {selectedClasses.First()}");
            }
            else
            {
                Console.WriteLine($"Multiple classes fit filter: [{string.Join(",", selectedClasses)}], Selecting {selectedClasses.First()}");
            }

            var lessons = api.QueryLessons(selectedClasses.First(), date).Result;

            foreach (var l in lessons.Lessons)
            {
                Console.WriteLine(l);
            }
        }