| 231 | } |
| 232 | |
| 233 | void MainFrame::StartSymbolDownload() |
| 234 | { |
| 235 | if (m_symbolDownloadRunning || !m_isAdmin) |
| 236 | { |
| 237 | return; |
| 238 | } |
| 239 | |
| 240 | m_closeWhenSymbolDownloadStops = false; |
| 241 | m_symbolDownloadRunning = true; |
| 242 | m_btnDownloadSymbols->Enable(false); |
| 243 | m_btnCancelSymbolDownload->Enable(true); |
| 244 | UpdateSymbolDownloadResult(wxART_INFORMATION, wxEmptyString, wxEmptyString); |
| 245 | UpdateSymbolDownloadProgress(SymbolDownloadProgress{ |
| 246 | 0, |
| 247 | true, |
| 248 | L"Connecting to Microsoft Symbol Server...", |
| 249 | L"Preparing symbol download." |
| 250 | }); |
| 251 | |
| 252 | m_symbolDownloadThread = std::jthread([this](std::stop_token stopToken) |
| 253 | { |
| 254 | const auto progressCallback = [this](const SymbolDownloadProgress& progress) |
| 255 | { |
| 256 | CallAfter([this, progress] |
| 257 | { |
| 258 | UpdateSymbolDownloadProgress(progress); |
| 259 | }); |
| 260 | }; |
| 261 | |
| 262 | const SymbolDownloadOutcome outcome = DownloadSymbols(stopToken, progressCallback); |
| 263 | CallAfter([this, outcome] |
| 264 | { |
| 265 | FinishSymbolDownload(outcome); |
| 266 | }); |
| 267 | }); |
| 268 | } |
| 269 | |
| 270 | void MainFrame::RefreshSymbolDownloadLayout() |
| 271 | { |
nothing calls this directly
no test coverage detected