public IEnumerator GetHomeworks(Homework.Period period, Action onComplete) { if (string.IsNullOrEmpty(sessionId)) { yield return(Connect(Modules.Accounts.GetCredential)); } Manager.UpdateLoadingStatus("provider.homeworks", "Getting homeworks"); var request = UnityWebRequest.Get($"https://cambridgekids.sophiacloud.com/console/sophiacloud/data_mgr.php?s=interactive_worksheet×tamp=0&service_id={period.id}"); request.SetRequestHeader("User-Agent", "Mozilla/5.0 Firefox/74.0"); request.SetRequestHeader("Cookie", sessionId); yield return(request.SendWebRequest()); var result = new FileFormat.JSON($"{{\"list\":{request.downloadHandler.text}}}"); if (Manager.Data.ActiveChild.Subjects == null) { Manager.Data.ActiveChild.Subjects = new List <Subject>(); } if (Manager.Data.ActiveChild.Homeworks == null) { Manager.Data.ActiveChild.Homeworks = new List <Homework>(); } Manager.Data.ActiveChild.Homeworks.AddRange(result.jToken.SelectToken("list").SelectMany(obj => { var data = obj.SelectToken("page_section"); var docs = obj.SelectToken("link_file").Select(doc => new Document { id = doc.Value <string>("up_file_id"), name = doc.Value <string>("file_name") }); return(data.Select(d => { if (!Manager.Data.ActiveChild.Subjects.Any(s => s.id == d.Value <string>("page_section_id"))) { Manager.Data.ActiveChild.Subjects.Add(new Subject { id = d.Value <string>("page_section_id"), name = d.Value <string>("sec_title"), color = new Color(0.3F, 0.3F, 0.3F) }); } return new Homework { periodID = period.id, subjectID = d.Value <string>("page_section_id"), forThe = (double.TryParse(obj.Value <string>("date_evenement"), out var date) ? date : 0).UnixTimeStampToDateTime(), addedBy = data.First.Value <string>("prenom") + " " + data.First.Value <string>("nom"), addedThe = (double.TryParse(obj.Value <string>("date_creation"), out var _d) ? _d : 0).UnixTimeStampToDateTime(), content = Renderer.HTML.ToRichText(d.Value <string>("text")).RemoveEmptyLines(), documents = docs.ToList() }; })); })); onComplete?.Invoke(); Manager.HideLoadingPanel(); }
void Refresh(IEnumerable <Homework> homeworks, Homework.Period period) { var WeekSwitcher = transform.Find("Top").Find("Week"); WeekSwitcher.Find("Text").GetComponent <Text>().text = period.name; WeekSwitcher.Find("Previous").GetComponent <Button>().interactable = periods.Count > periodIndex + 1 || LoadNext(); WeekSwitcher.Find("Next").GetComponent <Button>().interactable = periodIndex > 0; var Content = transform.Find("Content").GetComponent <ScrollRect>().content; for (int i = 1; i < Content.childCount; i++) { Destroy(Content.GetChild(i).gameObject); } transform.Find("Content").Find("Empty").gameObject.SetActive(!homeworks.Any()); if (!homeworks.Any()) { return; } var language = LangueAPI.Culture; foreach (var Homeworks in homeworks.GroupBy(h => h.forThe)) { var datePanel = Instantiate(Content.GetChild(0).gameObject, Content).transform; datePanel.Find("Head").Find("Date").GetComponent <Text>().text = Homeworks.Key.ToString("D", language); var panel = datePanel.Find("Panel"); for (int i = 1; i < panel.childCount; i++) { Destroy(panel.GetChild(i).gameObject); } foreach (var homework in Homeworks) { var go = Instantiate(panel.GetChild(0).gameObject, panel).transform; // Set to subect color SetColor(go.GetComponent <Image>(), homework.subject?.color ?? new Color()); SetColor(go.Find("Tint").GetComponentInChildren <Image>(), homework.subject?.color ?? new Color()); var goContent = go.Find("Content"); // Infos var infos = goContent.Find("Infos"); infos.Find("Subject").GetComponent <Text>().text = homework.subject?.name; infos.Find("Extra").GetComponent <Text>().text = LangueAPI.Get("homeworks.added", "Added on [0] by [1]", homework.addedThe.ToString("dd/MM"), homework.addedBy); var docs = infos.Find("Docs"); foreach (var doc in homework.documents) { var docGo = Instantiate(docs.GetChild(0).gameObject, docs).transform; docGo.GetComponent <Text>().text = $"• {doc.name}"; docGo.GetComponent <Button>().onClick.AddListener(() => UnityThread.executeCoroutine(Manager.provider.GetModule <Integrations.Homeworks>().OpenHomeworkAttachment(doc))); docGo.gameObject.SetActive(true); } // Content goContent.Find("Content").GetComponent <TMPro.TMP_InputField>().text = homework.content; // Indicator var indicator = go.Find("Indicator"); SetIndicator(); if (!homework.exam) { indicator.GetComponent <Button>().onClick.AddListener(() => { homework.done = !homework.done; UnityThread.executeCoroutine(Manager.provider.GetModule <Integrations.Homeworks>().HomeworkDoneStatus(homework)); SetIndicator(); }); } void SetIndicator() => indicator.GetComponentInChildren <Image>().color = homework.exam ? colorExam : (homework.done ? colorDone : colorToDo); go.gameObject.SetActive(true); } panel.gameObject.SetActive(false); datePanel.gameObject.SetActive(true); } }