void ExternalLogger::DownloadFlightFrom(DeviceDescriptor &device) { MessageOperationEnvironment env; // Download the list of flights that the logger contains RecordedFlightList flight_list; switch (DoReadFlightList(device, flight_list)) { case TriStateJobResult::SUCCESS: break; case TriStateJobResult::ERROR: device.EnableNMEA(env); ShowMessageBox(_("Failed to download flight list."), _("Download flight"), MB_OK | MB_ICONERROR); return; case TriStateJobResult::CANCELLED: return; } // The logger seems to be empty -> cancel if (flight_list.empty()) { device.EnableNMEA(env); ShowMessageBox(_("Logger is empty."), _("Download flight"), MB_OK | MB_ICONINFORMATION); return; } while (true) { // Show list of the flights const RecordedFlightInfo *flight = ShowFlightList(flight_list); if (!flight) break; // Download chosen IGC file into temporary file TCHAR path[MAX_PATH]; LocalPath(path, _T("logs"), _T("temp.igc")); switch (DoDownloadFlight(device, *flight, path)) { case TriStateJobResult::SUCCESS: break; case TriStateJobResult::ERROR: // Delete temporary file File::Delete(path); ShowMessageBox(_("Failed to download flight."), _("Download flight"), MB_OK | MB_ICONERROR); continue; case TriStateJobResult::CANCELLED: // Delete temporary file File::Delete(path); continue; } /* read the IGC header and build the final IGC file name with it */ IGCHeader header; BrokenDate date; ReadIGCMetaData(path, header, date); if (header.flight == 0) header.flight = GetFlightNumber(flight_list, *flight); TCHAR name[64]; FormatIGCFilenameLong(name, date, header.manufacturer, header.id, header.flight); TCHAR final_path[MAX_PATH]; LocalPath(final_path, _T("logs"), name); // Remove a file with the same name if it exists if (File::Exists(final_path)) File::Delete(final_path); // Rename the temporary file to the actual filename File::Rename(path, final_path); if (ShowMessageBox(_("Do you want to download another flight?"), _("Download flight"), MB_YESNO | MB_ICONQUESTION) != IDYES) break; } device.EnableNMEA(env); }
void ExternalLogger::DownloadFlightFrom(DeviceDescriptor &device) { MessageOperationEnvironment env; // Download the list of flights that the logger contains RecordedFlightList flight_list; switch (DoReadFlightList(device, flight_list)) { case TriStateJobResult::SUCCESS: break; case TriStateJobResult::ERROR: device.EnableNMEA(env); ShowMessageBox(_("Failed to download flight list."), _("Download flight"), MB_OK | MB_ICONERROR); return; case TriStateJobResult::CANCELLED: return; } // The logger seems to be empty -> cancel if (flight_list.empty()) { device.EnableNMEA(env); ShowMessageBox(_("Logger is empty."), _("Download flight"), MB_OK | MB_ICONINFORMATION); return; } const auto logs_path = MakeLocalPath(_T("logs")); while (true) { // Show list of the flights const RecordedFlightInfo *flight = ShowFlightList(flight_list); if (!flight) break; // Download chosen IGC file into temporary file FileTransaction transaction(AllocatedPath::Build(logs_path, _T("temp.igc"))); switch (DoDownloadFlight(device, *flight, transaction.GetTemporaryPath())) { case TriStateJobResult::SUCCESS: break; case TriStateJobResult::ERROR: ShowMessageBox(_("Failed to download flight."), _("Download flight"), MB_OK | MB_ICONERROR); continue; case TriStateJobResult::CANCELLED: continue; } /* read the IGC header and build the final IGC file name with it */ IGCHeader header; BrokenDate date; ReadIGCMetaData(transaction.GetTemporaryPath(), header, date); if (header.flight == 0) header.flight = GetFlightNumber(flight_list, *flight); TCHAR name[64]; FormatIGCFilenameLong(name, date, header.manufacturer, header.id, header.flight); transaction.SetPath(AllocatedPath::Build(logs_path, name)); transaction.Commit(); if (ShowMessageBox(_("Do you want to download another flight?"), _("Download flight"), MB_YESNO | MB_ICONQUESTION) != IDYES) break; } device.EnableNMEA(env); }