private void InvokeLoadedActions(List <string> sceneNames, SceneType sceneType)
        {
            foreach (string sceneName in sceneNames)
            {  // Announce scenes individually regardless of type
                OnSceneLoaded?.Invoke(sceneName);
            }

            switch (sceneType)
            {
            case SceneType.Content:
                // Announce content as a set
                OnContentLoaded?.Invoke(sceneNames);
                break;

            case SceneType.Lighting:
                // We only handle lighting scenes one at a time
                Debug.Assert(sceneNames.Count == 1);
                OnLightingLoaded?.Invoke(sceneNames[0]);
                break;

            default:
                // Don't announce other types of scenes invidually
                break;
            }
        }
Exemplo n.º 2
0
        private void InvokeLoadedActions(List <string> sceneNames, SceneType sceneType)
        {
            try
            {
                foreach (string sceneName in sceneNames)
                {  // Announce scenes individually regardless of type
                    OnSceneLoaded?.Invoke(sceneName);
                }

                switch (sceneType)
                {
                case SceneType.Content:
                    // Announce content as a set
                    OnContentLoaded?.Invoke(sceneNames);
                    break;

                case SceneType.Lighting:
                    // We only handle lighting scenes one at a time
                    Debug.Assert(sceneNames.Count == 1);
                    OnLightingLoaded?.Invoke(sceneNames[0]);
                    break;

                default:
                    // Don't announce other types of scenes invidually
                    break;
                }
            }
            catch (Exception e)
            {
                Debug.LogError("Error when attempting to invoke loaded actions for " + string.Join(", ", sceneNames));
                Debug.LogException(e);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Internal Use Only.
        /// </summary>
        /// <param name="type">The type of event</param>
        /// <param name="eventObject">The WVE object to pass</param>
        /// <returns></returns>
        public object InvokeEvent(WebViewEventType type, WebViewDelegate eventObject)
        {
            switch (type)
            {
            case WebViewEventType.NavigationRequested:
                return(OnNavigationStarted == null ? eventObject as NavigationRequestedDelegate : OnNavigationStarted.Invoke(eventObject as NavigationRequestedDelegate));

            case WebViewEventType.NavigationComplete:
                OnNavigationCompleted?.Invoke(eventObject as NavigationCompletedDelegate);
                break;

            case WebViewEventType.ContentLoaded:
                OnContentLoaded?.Invoke(eventObject as ContentLoadedDelegate);
                break;

            case WebViewEventType.JavascriptCallback:
                var            data = (eventObject as JavascriptResponseDelegate).Data;
                ActionResponse ar;
                if (data.ValidateJSON() && (ar = data.AttemptParseActionResponse()) != null)
                {
                    if (RegisteredActions.ContainsKey(ar.Action))
                    {
                        RegisteredActions[ar.Action]?.Invoke(ar.Data);
                    }
                }
                else
                {
                    OnJavascriptResponse?.Invoke(eventObject as JavascriptResponseDelegate);
                }
                break;
            }

            return(eventObject);
        }
Exemplo n.º 4
0
 public async Task Refresh()
 {
     OnContentLoading?.Invoke(this, new NavigationViewContentEvent());
     try {
         viewModel.Notifications = await Model.MatrixRequest.GetNotificationList();
     } catch (MatrixException.MatrixException err) {
         OnContentError?.Invoke(this, new NavigationViewContentEvent(err, $"获取通知列表失败:{err.Message}"));
     }
     OnContentLoaded?.Invoke(this, new NavigationViewContentEvent());
 }
Exemplo n.º 5
0
 public async Task Refresh()
 {
     OnContentLoading?.Invoke(this, new NavigationViewContentEvent());
     try {
         viewModel.TodoAssignments = await Model.MatrixRequest.GetUnfinishAssignment();
     } catch (MatrixException.MatrixException err) {
         OnContentError?.Invoke(this, new NavigationViewContentEvent(err));
     }
     OnContentLoaded?.Invoke(this, new NavigationViewContentEvent());
 }
Exemplo n.º 6
0
 public async Task Refresh()
 {
     OnContentLoading?.Invoke(this, new NavigationViewContentEvent());
     try {
         viewModel.Courses = await Model.MatrixRequest.GetCourseList();
     } catch (MatrixException.MatrixException err) {
         Debug.WriteLine($"获取课程列表失败: {err.Message}");
         OnContentError?.Invoke(this, new NavigationViewContentEvent(err));
     }
     OnContentLoaded?.Invoke(this, new NavigationViewContentEvent());
 }
Exemplo n.º 7
0
        /// <summary>
        /// Internal Use Only.
        /// </summary>
        /// <param name="type">The type of event</param>
        /// <param name="eventObject">The WVE object to pass</param>
        /// <returns></returns>
        public object InvokeEvent(WebViewEventType type, WebViewDelegate eventObject)
        {
            switch (type)
            {
            case WebViewEventType.NavigationRequested:
                return(OnNavigationStarted == null ? eventObject as NavigationRequestedDelegate : OnNavigationStarted.Invoke(eventObject as NavigationRequestedDelegate));

            case WebViewEventType.NavigationComplete:
                OnNavigationCompleted?.Invoke(eventObject as NavigationCompletedDelegate);
                break;

            case WebViewEventType.NavigationError:
                OnNavigationError?.Invoke(eventObject as NavigationErrorDelegate);
                break;

            case WebViewEventType.ContentLoaded:
                OnContentLoaded?.Invoke(eventObject as ContentLoadedDelegate);
                break;

            case WebViewEventType.NavigationStackUpdate:
                CanGoBack    = (eventObject as NavigationStackUpdateDelegate).CanGoBack;
                CanGoForward = (eventObject as NavigationStackUpdateDelegate).CanGoForward;
                break;

            case WebViewEventType.JavascriptCallback:
                var            data = (eventObject as JavascriptResponseDelegate).Data;
                ActionResponse ar;

                if (data.ValidateJSON() && (ar = data.AttemptParseActionResponse()) != null)
                {
                    // Attempt Locals
                    if (RegisteredActions[this].ContainsKey(ar.Action))
                    {
                        RegisteredActions[this][ar.Action]?.Invoke(ar.Data);
                    }

                    // Attempt Globals
                    if (RegisteredActions[_globalKey].ContainsKey(ar.Action))
                    {
                        RegisteredActions[_globalKey][ar.Action]?.Invoke(ar.Data);
                    }
                }
                else
                {
                    OnJavascriptResponse?.Invoke(eventObject as JavascriptResponseDelegate);
                }

                break;
            }

            return(eventObject);
        }
Exemplo n.º 8
0
 public async Task Refresh()
 {
     // notify start loading
     OnContentLoading?.Invoke(this, new NavigationViewContentEvent());
     try {
         viewModel.Libraries = await Model.MatrixRequest.GetLibraryList();
     } catch (MatrixException.MatrixException err) {
         var message = "获取题库列表失败";
         Debug.WriteLine($"{message}: {err.Message}");
         OnContentError?.Invoke(this, new NavigationViewContentEvent(err, message));
     }
     // notify loaded end
     OnContentLoaded?.Invoke(this, new NavigationViewContentEvent());
 }
Exemplo n.º 9
0
        // Interface Refresh
        public async Task Refresh()
        {
            // notify loading
            OnContentLoading?.Invoke(this, new NavigationViewContentEvent());
            try {
                viewModel.curUser = await Model.MatrixRequest.GetProfile();
            } catch (MatrixException.MatrixException err) {
                var message = "获取用户信息失败";
                Debug.WriteLine($"{message}, {err.Message}");
                OnContentError?.Invoke(this, new NavigationViewContentEvent(err, message));
            }

            // notify loaded
            OnContentLoaded?.Invoke(this, new NavigationViewContentEvent());
        }
Exemplo n.º 10
0
        public async Task Refresh()
        {
            OnContentLoading?.Invoke(this, new NavigationViewContentEvent());
            try {
                viewModel.Course = await Model.MatrixRequest.GetCourse(viewModel.CourseId);

                viewModel.Assignments = await Model.MatrixRequest.GetAssignmentList(viewModel.CourseId);
            } catch (MatrixException.MatrixException err) {
                Debug.WriteLine($"请求课程信息错误:{err.Message}");
                OnContentError?.Invoke(this, new NavigationViewContentEvent(err));
            }
            OnContentLoaded?.Invoke(this, new NavigationViewContentEvent());

            TitleChanged?.Invoke(this, new NavigationViewContentEvent(GetTitle()));
        }
Exemplo n.º 11
0
        public async Task Refresh()
        {
            int courseId = viewModel.Assignment.course_id;
            int caId     = viewModel.Assignment.ca_id;

            // notify loading
            OnContentLoading?.Invoke(this, new NavigationViewContentEvent());

            try {
                viewModel.Assignment = await Model.MatrixRequest.GetAssignment(courseId, caId);
            } catch (MatrixException.MatrixException err) {
                var message = $"获取课程{courseId}作业{caId}详情失败";
                Debug.WriteLine($"{message}: {err.Message}");
                OnContentError?.Invoke(this, new NavigationViewContentEvent(err, message));
            }

            // notify loaded
            OnContentLoaded?.Invoke(this, new NavigationViewContentEvent());

            // set title since assignment name changed.
            TitleChanged?.Invoke(this, new NavigationViewContentEvent(viewModel.Assignment.name));
        }
Exemplo n.º 12
0
        /// <summary>
        /// Internal Use Only.
        /// </summary>
        /// <param name="type">The type of event</param>
        /// <param name="eventObject">The WVE object to pass</param>
        /// <returns></returns>
        public object InvokeEvent(WebViewEventType type, WebViewDelegate eventObject)
        {
            switch (type)
            {
            case WebViewEventType.NavigationRequested:
                SetValue(NavigatingProperty, true);
                return(OnNavigationStarted?.Invoke(eventObject as NavigationRequestedDelegate));

            case WebViewEventType.NavigationComplete:
                SetValue(NavigatingProperty, false);
                OnNavigationCompleted?.Invoke(eventObject as NavigationCompletedDelegate);
                break;

            case WebViewEventType.NavigationError:
                SetValue(NavigatingProperty, false);
                OnNavigationError?.Invoke(eventObject as NavigationErrorDelegate);
                break;

            case WebViewEventType.ContentLoaded:
                SetValue(NavigatingProperty, false);
                OnContentLoaded?.Invoke(eventObject as ContentLoadedDelegate);
                break;

            case WebViewEventType.NavigationStackUpdate:
                var stackUpdateDelegate           = eventObject as NavigationStackUpdateDelegate;
                var navigationStackUpdateDelegate = eventObject as NavigationStackUpdateDelegate;

                if (stackUpdateDelegate != null)
                {
                    SetValue(CanGoBackProperty, stackUpdateDelegate.CanGoBack);
                }

                if (navigationStackUpdateDelegate != null)
                {
                    SetValue(CanGoForwardProperty, navigationStackUpdateDelegate.CanGoForward);
                }
                break;

            case WebViewEventType.JavascriptCallback:
                var javascriptResponseDelegate = eventObject as JavascriptResponseDelegate;
                if (javascriptResponseDelegate != null)
                {
                    var            data = javascriptResponseDelegate.Data;
                    ActionResponse ar;
                    if (data.ValidateJSON() && (ar = data.AttemptParseActionResponse()) != null)
                    {
                        // Attempt Locals
                        if (LocalRegisteredActions.ContainsKey(ar.Action))
                        {
                            LocalRegisteredActions[ar.Action]?.Invoke(ar.Data);
                        }

                        // Attempt Globals
                        if (GlobalRegisteredActions.ContainsKey(ar.Action))
                        {
                            GlobalRegisteredActions[ar.Action]?.Invoke(ar.Data);
                        }
                    }
                    else
                    {
                        OnJavascriptResponse?.Invoke((JavascriptResponseDelegate)eventObject);
                    }
                }
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(type), type, null);
            }

            return(eventObject);
        }