| 101 | } |
| 102 | |
| 103 | fire_and_forget MonacoEditPage::OnNavigatedTo(NavigationEventArgs const& e) { |
| 104 | try { |
| 105 | auto const lifetime{ get_strong() }; |
| 106 | auto const param = e.Parameter().as<Maple_App::ConfigViewModel>(); |
| 107 | hstring fileName; |
| 108 | try |
| 109 | { |
| 110 | fileName = param.File().Name(); |
| 111 | } |
| 112 | catch (...) {} |
| 113 | if (fileName.empty()) |
| 114 | { |
| 115 | co_return; |
| 116 | } |
| 117 | auto const parent = co_await param.File().GetParentAsync(); |
| 118 | if (!parent) |
| 119 | { |
| 120 | UI::NotifyUser("Failed to load config folder.", L"Error: loading file"); |
| 121 | co_return; |
| 122 | } |
| 123 | auto const parentPath = parent.Path(); |
| 124 | if (parentPath != m_lastConfigFolderPath) |
| 125 | { |
| 126 | m_lastConfigFolderPath = parentPath; |
| 127 | m_webviewState = MonacoEditPageWebViewState::Uninitialized; |
| 128 | } |
| 129 | m_currentFileName = fileName; |
| 130 | switch (m_webviewState) |
| 131 | { |
| 132 | case MonacoEditPageWebViewState::Uninitialized: |
| 133 | co_await initializeWebView(); |
| 134 | co_await lifetime->WebView().ExecuteScriptAsync(L"window.mapleHostApi.resetFiles()"); |
| 135 | break; |
| 136 | case MonacoEditPageWebViewState::AwaitingEditorReady: |
| 137 | break; |
| 138 | case MonacoEditPageWebViewState::EditorReady: |
| 139 | co_await lifetime->WebView().ExecuteScriptAsync(hstring{ L"window.mapleHostApi.loadFile(`http://maple-monaco-editor-config-root.com/" } + |
| 140 | fileName + |
| 141 | L"`)"); |
| 142 | break; |
| 143 | } |
| 144 | } |
| 145 | catch (...) |
| 146 | { |
| 147 | UI::NotifyException(L"Loading WebView page"); |
| 148 | } |
| 149 | } |
| 150 | |
| 151 | fire_and_forget MonacoEditPage::WebView_WebMessageReceived( |
| 152 | MUXC::WebView2 const& sender, |