Ejemplo n.º 1
0
        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&timestamp=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();
        }
Ejemplo n.º 2
0
        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);
            }
        }