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; } }
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); } }
/// <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); }
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()); }
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()); }
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()); }
/// <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); }
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()); }
// 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()); }
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())); }
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)); }
/// <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); }