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); }