Ejemplo n.º 1
0
        private async Task GetCourseDetail(string courseId)
        {
            try
            {
                var result = await NPAPI.GetCourseDetail(courseId);

                ApplyCourseDetail(result);
            }
            catch (NPAPI.SessionExpiredException)
            {
                //Send GA Event
                App.Current.GATracker.SendEvent("Session", "Session Expired", null, 0);

                //Try background login
                try
                {
                    await NPAPI.BackgroundLogin();
                    await GetCourseDetail(courseId);
                }
                catch
                {
                    Frame.Navigate(typeof(LoginPage));
                }
            }
            catch (Exception e)
            {
                detailTextBlock.Text = e.Message;
            }
        }
Ejemplo n.º 2
0
        public static async Task <Credits> Parse(string html)
        {
            var blockMatch = new Regex("請先完成[^教]+教學評量。", RegexOptions.IgnoreCase | RegexOptions.Multiline).Match(html);

            if (blockMatch.Success)
            {
                throw new System.Exception(blockMatch.Value);
            }

            var credits      = new Credits();
            var tableRegex   = new Regex("<img src=\\./image/or_ball\\.gif>([^<]+)</h3>\n<table border=1 BGCOLOR=#CCFFFF>(?:(?!<\\/table>).|\n)*", RegexOptions.Multiline | RegexOptions.IgnoreCase);
            var tablematches = tableRegex.Matches(html);
            var semesters    = new List <Semester>();

            foreach (Match match in tablematches)
            {
                semesters.Add(ParseTable(match));
            }
            credits.Semesters = semesters;


            var tasks = new List <Task>();

            foreach (Semester semester in semesters)
            {
                tasks.AddRange(semester.Credits.Select(async credit =>
                {
                    var courseDetail = await NPAPI.GetCourseDetail(credit.CourseId);

                    //Set course detail
                    credit.Detail = courseDetail;

                    if (credit.Grade >= 60)
                    {
                        //Sum credits for each detailed type
                        if (credits.TotalDetailTypeCredits.ContainsKey(credit.Detail.Type))
                        {
                            credits.TotalDetailTypeCredits[credit.Detail.Type] += credit.Credits;
                        }
                        else
                        {
                            credits.TotalDetailTypeCredits.Add(credit.Detail.Type, credit.Credits);
                        }

                        //Sum credits for each type
                        if (credits.TotalTypeCredits.ContainsKey(credit.Type))
                        {
                            credits.TotalTypeCredits[credit.Type] += credit.Credits;
                        }
                        else
                        {
                            credits.TotalTypeCredits.Add(credit.Type, credit.Credits);
                        }

                        //Sum semester credits
                        credits.TotalCreditsGot += credit.Credits;
                    }
                }));
            }

            //Run all tasks in parallel
            await Task.WhenAll(tasks.ToArray());

            return(credits);
        }