Exemplo n.º 1
0
        public static SchoolClass SyncWithCanvas(SchoolClass schoolClass, bool warning = false)
        {
            if (schoolClass.canvasData is null)
            {
                return(schoolClass);
            }

            SchoolClass newSchoolClass = schoolClass;

            if (SyncSettings.ReSyncAllNonStaticData)
            {
                HttpClient?.Dispose();
                HttpClient = new HttpClient
                {
                    BaseAddress = BuildUri(SyncSettings.CanvasURL, SyncSettings.CanvasURL, "courses/" + schoolClass.canvasData.id),
                    Timeout     = new TimeSpan(0, 0, SyncSettings.TimeoutLength)
                };
                HttpResponseMessage response;
                try
                {
                    response = HttpClient.GetAsync(HttpClient.BaseAddress).Result;
                    if (!response.IsSuccessStatusCode)
                    {
                        MessageBox.Show(response.ToString(), "Warning!", MessageBoxButtons.OK,
                                        MessageBoxIcon.Exclamation);
                    }

                    var content = response.Content.ReadAsStringAsync().Result;

                    try
                    {
                        JObject jObj = JObject.Parse(content);
                        newSchoolClass.canvasData.name              = jObj.GetValue("name").ToString();
                        newSchoolClass.canvasData.startDate         = jObj.GetValue("start_at").ToString();
                        newSchoolClass.canvasData.courseCode        = jObj.GetValue("course_code").ToString();
                        newSchoolClass.canvasData.gradingStandardID = jObj.GetValue("grading_standard_id").ToString();
                    }
                    catch
                    {
                        if (warning)
                        {
                            MessageBox.Show(schoolClass.className + ":\nError updating semi-static Canvas data.", "Warning!", MessageBoxButtons.OK,
                                            MessageBoxIcon.Exclamation);
                        }
                    }
                }
                catch
                {
                    //very weird, but we can continue anyway
                }
            }

            newSchoolClass = SyncCanvasCategories(newSchoolClass); //TODO: should prob make this optional later
            if (newSchoolClass.canvasData.syncAssignments)
            {
                newSchoolClass.OverrideAssignments(SyncCanvasAssignments(newSchoolClass));
            }
            if (newSchoolClass.canvasData.syncSemiStatics)
            {
                double[] defaultGradeScale =
                {
                    0.01, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 0.0
                };
                var  gradeScale       = SyncGradeScale(newSchoolClass);
                bool isEqualToDefault = true;
                int  c = 0;

                if (gradeScale != null)
                {
                    foreach (double val in gradeScale)
                    {
                        if (val != defaultGradeScale[c])
                        {
                            isEqualToDefault = false;
                        }

                        c++;
                    }
                }

                if (!isEqualToDefault)
                {
                    newSchoolClass.gradeScale = gradeScale;
                }
            }
            return(newSchoolClass);
        }