예제 #1
0
        /// <summary>
        /// 获取注册到数据库提供者的插件服务实例。
        /// </summary>
        /// <typeparam name="TProvider">插件服务的类型。</typeparam>
        /// <returns></returns>
        public override TProvider GetService <TProvider>()
        {
            var database = DatabaseFactory.GetDatabaseFromScope();

            if (database == null)
            {
                return(base.GetService <TProvider>());
            }

            var parameter = GetConnectionParameter(database.ConnectionString);

            if (parameter == null || parameter.Database == null)
            {
                return(base.GetService <TProvider>());
            }

            var fileName = parameter.Database.ToLower();

            if (fileName.EndsWith(".mdb") || fileName.EndsWith(".accdb"))
            {
                return(ProviderExtension.GetService <TProvider>(this, "Access"));
            }

            return(base.GetService <TProvider>());
        }
예제 #2
0
        void Refresh(IEnumerable <ScheduledEvent> schedule, TimeRange period)
        {
            ProviderExtension.GenerateSubjectColors();
            var WeekSwitcher = transform.Find("Top").Find("Week");

            WeekSwitcher.Find("Text").GetComponent <Text>().text = Screen.width > Screen.height ? LangueAPI.Get("schedule.period", "from [0] to [1]", period.Start.ToString("dd/MM"), period.End.ToString("dd/MM")) : period.Start.ToString("dd/MM");

            transform.Find("Content").gameObject.SetActive(schedule?.Count() > 0);
            transform.Find("Empty").gameObject.SetActive(!(schedule?.Count() > 0));
            if (schedule == null || schedule.Count() == 0)
            {
                return;
            }

            for (int i = 1; i < content.childCount; i++)
            {
                Destroy(content.GetChild(i).gameObject);
            }
            min = schedule.Min(s => s.start.TimeOfDay);
            foreach (var Schedule in schedule.GroupBy(e => e.start.Date))
            {
                var datePanel = Instantiate(content.GetChild(0).gameObject, content).transform;
                datePanel.Find("Day").GetComponentInChildren <Text>().text = Schedule.Key.ToString("dddd", language);
                datePanel.name = Schedule.Key.ToString("yyyy-MM-dd");
                var dateContent = datePanel.Find("Content");
                var lastTime    = min;
                foreach (var Event in Schedule)
                {
                    if (lastTime < Event.start.TimeOfDay)
                    {
                        var hole = new GameObject();
                        hole.transform.SetParent(dateContent);
                        hole.AddComponent <RectTransform>().sizeDelta = new Vector2(1, sizePerHour * (float)(Event.start.TimeOfDay - lastTime).TotalHours);
                    }

                    var go      = Instantiate(dateContent.GetChild(0).gameObject, dateContent).transform;
                    var goColor = Event.subject?.color ?? Color.gray;
                    goColor.a = Event.canceled ? 0.4F : 1;
                    go.GetComponent <Image>().color = goColor;
                    var subject = Event.subject;
                    if (subject == null)
                    {
                        Debug.LogError(Event.room + " " + Event.start + "\n" + Event.subjectID);
                    }
                    go.Find("Subject").GetComponent <Text>().text = subject?.name ?? Event.subjectID;
                    go.Find("Room").GetComponent <Text>().text    = Event.canceled ? $"<color=#F56E6E>{LangueAPI.Get("schedule.canceled", "Canceled")}</color>" : Event.room;
                    go.Find("Teacher").GetComponent <Text>().text = Event.teacher ?? string.Join(" / ", subject.teachers);
                    go.Find("Hours").GetComponent <Text>().text   = $"{Event.start.ToString("HH:mm")} - {Event.end.ToString("HH:mm")}";
                    ((RectTransform)go).sizeDelta = new Vector2(1, sizePerHour * (float)(Event.end - Event.start).TotalHours);
                    go.gameObject.SetActive(true);
                    lastTime = Event.end.TimeOfDay;
                }
                datePanel.gameObject.SetActive(true);
            }
        }
예제 #3
0
 public void Reload()
 {
     if (!Manager.provider.TryGetModule(out Integrations.SessionContent module))
     {
         gameObject.SetActive(false); return;
     }
     StartCoroutine(module.GetSessionContent(week, () =>
     {
         ProviderExtension.GenerateSubjectColors();
         Refresh(Manager.Data.ActiveChild.SessionsContents?.Where(h => week.Contains(h.date)));
     }));
 }
예제 #4
0
        public IEnumerator OpenHomeworkAttachment(Document doc)
        {
            if (string.IsNullOrEmpty(sessionId))
            {
                yield return(Connect(Modules.Accounts.GetCredential));
            }
            UnityWebRequest webRequest = UnityWebRequest.Post($"https://cambridgekids.sophiacloud.com/console/sophiacloud/file_mgr.php?up_file_id={doc.id}",
                                                              new Dictionary <string, string> {
                { "User-Agent", "Mozilla/5.0 Firefox/74.0" }, { "Cookie", sessionId }
            });

            yield return(ProviderExtension.DownloadDoc(webRequest, doc));
        }
예제 #5
0
        public void Initialise()
        {
            if (!Manager.provider.TryGetModule(out Integrations.Homeworks module))
            {
                gameObject.SetActive(false); return;
            }

            if (periodsMethod == null)
            {
                periodsMethod = module.DiaryPeriods();
            }
            var period = periods.ElementAtOrDefault(periodIndex);

            if (period != null)
            {
                Void();
            }
            else if (periodIndex >= 0)
            {
                LoadNext((p) => { period = p; Void(); });
            }


            void Void()
            {
                Action <List <Homework> > action = (homeworks) =>
                {
                    ProviderExtension.GenerateSubjectColors();
                    Refresh(homeworks.OrderBy(h => h.forThe), period);
                    Manager.OpenModule(gameObject);
                };

                List <Homework> GetHomeworks() => Manager.Data.ActiveChild.Homeworks?.Where(h => h.periodID != null ? h.periodID == period.id : period.timeRange.Contains(h.forThe)).ToList();

                var _homeworks = GetHomeworks();

                if (_homeworks?.Count > 0)
                {
                    action(_homeworks);
                }
                else
                {
                    StartCoroutine(module.GetHomeworks(period, () => action(GetHomeworks())));
                }
            }
        }
예제 #6
0
 /// <summary>
 /// 获取注册到数据库提供者的所有插件服务。
 /// </summary>
 /// <returns></returns>
 public virtual IEnumerable <IProviderService> GetServices()
 {
     return(ProviderExtension.GetServices(this));
 }
예제 #7
0
 /// <summary>
 /// 获取注册到数据库提供者的插件服务实例。
 /// </summary>
 /// <typeparam name="TProvider">插件服务的类型。</typeparam>
 /// <returns></returns>
 public virtual TProvider GetService <TProvider>() where TProvider : class, IProviderService
 {
     return(ProviderExtension.GetService <TProvider>(this));
 }