예제 #1
0
        public void LoadingData()
        {
            try
            {
                #region 로딩 제외 후 테스트

                /*
                 * var controller = new JsonController("data_info");
                 * var json = controller.ReadString();
                 *
                 * if (json != null)
                 *  dataInfo = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(json);
                 *
                 * InitUI();
                 *
                 * await GetData();
                 * await GetArticle();
                 *
                 * var appInfo = GetAppInfo();
                 *
                 * if (appInfo != null && appInfo["Version"] != App.Version)
                 * {
                 *  var store = "";
                 *  var uri = "";
                 *
                 *  switch (Device.RuntimePlatform)
                 *  {
                 *      case Device.Android:
                 *          store = "Google Play 스토어";
                 *          uri = "market://details?id=io.github.banb3515.hanyang";
                 *          break;
                 *      case Device.iOS:
                 *          store = "앱 스토어";
                 *          uri = "itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=io.github.banb3515.hanyang&amp;onlyLatestVersion=true&amp;pageNumber=0&amp;sortOrdering=1&amp;type=Purple+Software";
                 *          break;
                 *  }
                 *
                 *  var result = await DisplayAlert("업데이트", "최신 버전(v" + appInfo["Version"] + ")으로 업데이트할 수 있습니다.\n\n" +
                 *      "※ 업데이트 내용\n" + appInfo["UpdateContent"] + "\n\n" +
                 *      "[이동] 버튼 클릭 시 " + store + "로 이동합니다.", "이동", "취소");
                 *
                 *  if (result)
                 *      await Launcher.OpenAsync(new Uri(uri));
                 * }
                 */
                #endregion

                Configurations.LoadingConfig = new LoadingConfig
                {
                    IndicatorColor = Color.White,
                    OverlayColor   = Color.Black,
                    Opacity        = 0.75,
                    DefaultMessage = "잠시만 기다려주세요 ...",
                };

                Device.BeginInvokeOnMainThread(async() =>
                {
                    await Loading.Instance.StartAsync(async progress =>
                    {
                        try
                        {
                            var per = 0;
                            var ran = new Random();

                            for (; per < 10; per++)
                            {
                                await Task.Delay(ran.Next(5, 21));
                                progress.Report((per + 1) * 0.01d);
                            }

                            // 데이터 정보 파일 읽기
                            Loading.Instance.SetMessage("로컬 파일을 읽는 중입니다 ...");
                            var controller = new JsonController("data_info");
                            for (; per < 15; per++)
                            {
                                await Task.Delay(ran.Next(5, 21));
                                progress.Report((per + 1) * 0.01d);
                            }

                            var json = controller.ReadString();
                            for (; per < 20; per++)
                            {
                                await Task.Delay(ran.Next(5, 21));
                                progress.Report((per + 1) * 0.01d);
                            }

                            if (json != null)
                            {
                                dataInfo = JsonConvert.DeserializeObject <Dictionary <string, Dictionary <string, string> > >(json);
                            }
                            for (; per < 30; per++)
                            {
                                await Task.Delay(ran.Next(5, 21));
                                progress.Report((per + 1) * 0.01d);
                            }

                            Loading.Instance.SetMessage("데이터를 가져오는 중입니다 ...");
                            await GetData();
                            for (; per < 50; per++)
                            {
                                await Task.Delay(ran.Next(5, 21));
                                progress.Report((per + 1) * 0.01d);
                            }

                            Loading.Instance.SetMessage("게시글을 가져오는 중입니다 ...");
                            await GetArticle();
                            for (; per < 70; per++)
                            {
                                await Task.Delay(ran.Next(5, 21));
                                progress.Report((per + 1) * 0.01d);
                            }

                            Loading.Instance.SetMessage("UI를 초기화하는 중입니다 ...");
                            InitUI();
                            for (; per < 90; per++)
                            {
                                await Task.Delay(ran.Next(5, 21));
                                progress.Report((per + 1) * 0.01d);
                            }

                            #region 앱 정보 가져오기
                            Loading.Instance.SetMessage("앱 정보를 가져오는 중입니다 ...");
                            var appInfo = GetAppInfo();
                            for (; per < 99; per++)
                            {
                                await Task.Delay(ran.Next(5, 21));
                                progress.Report((per + 1) * 0.01d);
                            }

                            if (appInfo != null && appInfo["Version"] != App.Version)
                            {
                                var store = "";
                                var uri   = "";

                                switch (Device.RuntimePlatform)
                                {
                                case Device.Android:
                                    store = "Google Play 스토어";
                                    uri   = "market://details?id=io.github.banb3515.hanyang";
                                    break;

                                case Device.iOS:
                                    store = "앱 스토어";
                                    uri   = "itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=io.github.banb3515.hanyang&amp;onlyLatestVersion=true&amp;pageNumber=0&amp;sortOrdering=1&amp;type=Purple+Software";
                                    break;
                                }

                                var result = await DisplayAlert("업데이트", "최신 버전(v" + appInfo["Version"] + ")으로 업데이트할 수 있습니다.\n\n" +
                                                                "※ 업데이트 내용\n" + appInfo["UpdateContent"] + "\n\n" +
                                                                "[이동] 버튼 클릭 시 " + store + "로 이동합니다.", "이동", "취소");

                                if (result)
                                {
                                    await Launcher.OpenAsync(new Uri(uri));
                                }
                            }
                            #endregion

                            Loading.Instance.SetMessage("로딩이 완료되었습니다.");

                            for (; per < 100; per++)
                            {
                                await Task.Delay(ran.Next(5, 21));
                                progress.Report((per + 1) * 0.01d);
                            }
                            await Task.Delay(250);
                        }
                        catch (Exception e)
                        {
                            _ = ErrorAlert("로딩", "알 수 없는 오류가 발생했습니다:\n" + e.Message);
                        }
                    });
                });
            }
            catch (Exception) { }
        }
예제 #2
0
        public async void InitUI()
        {
            try
            {
                string timetableJson = null;

                if (App.Class != 0)
                {
                    var timetableCtrl = new JsonController("timetable-" + App.GetClassName());
                    timetableJson = timetableCtrl.ReadString();
                }

                var lunchMenuCtrl = new JsonController("lunch_menu");
                var lunchMenuJson = lunchMenuCtrl.ReadString();

                var schoolScheduleCtrl = new JsonController("school_schedule");
                var schoolScheduleJson = schoolScheduleCtrl.ReadString();

                var schoolNoticeCtrl = new JsonController("school_notice");
                var schoolNoticeJson = schoolNoticeCtrl.ReadString();

                var schoolNewsletterCtrl = new JsonController("school_newsletter");
                var schoolNewsletterJson = schoolNewsletterCtrl.ReadString();

                var appNoticeCtrl = new JsonController("app_notice");
                var appNoticeJson = appNoticeCtrl.ReadString();

                #region 시간표 파일 읽기
                if (timetableJson != null)
                {
                    App.Timetable = JsonConvert.DeserializeObject <Timetable>(timetableJson);

                    TabbedSchedulePage.GetInstance().task = true;
                    _ = TabbedSchedulePage.GetInstance().ViewScheduleAnimation();
                }
                #endregion

                #region  식 메뉴 파일 읽기
                if (lunchMenuJson != null)
                {
                    App.LunchMenu = JsonConvert.DeserializeObject <LunchMenu>(lunchMenuJson);

                    TabbedSchedulePage.GetInstance().InitLunchMenu();
                }
                #endregion

                #region 학사 일정 파일 읽기
                if (schoolScheduleJson != null)
                {
                    App.SchoolSchedule = JsonConvert.DeserializeObject <Dictionary <string, SchoolSchedule> >(schoolScheduleJson);

                    TabbedSchedulePage.GetInstance().InitSchoolSchedule();
                }
                #endregion

                #region 학교 공지사항 파일 읽기
                if (schoolNoticeJson != null)
                {
                    App.SchoolNotice = JsonConvert.DeserializeObject <Dictionary <string, Dictionary <string, string> > >(schoolNoticeJson);

                    TabbedHomePage.GetInstance().InitSchoolNotice();
                }
                #endregion

                #region 가정통신문 파일 읽기
                if (schoolNewsletterJson != null)
                {
                    App.SchoolNewsletter = JsonConvert.DeserializeObject <Dictionary <string, Dictionary <string, string> > >(schoolNewsletterJson);

                    TabbedHomePage.GetInstance().InitSchoolNewsletter();
                }
                #endregion

                #region 앱 공지사항 파일 읽기
                if (appNoticeJson != null)
                {
                    App.AppNotice = JsonConvert.DeserializeObject <Dictionary <string, Dictionary <string, string> > >(appNoticeJson);

                    TabbedHomePage.GetInstance().InitAppNotice();
                }
                #endregion
            }
            catch (Exception e)
            {
                await ErrorAlert("UI 초기화", "UI를 초기화하는 도중 오류가 발생했습니다.\n" + e.Message);
            }
        }