Don't use WA_DeleteOnClose for progess dialogs, as a crash can occur if the user closes the window before the download is complete.

pull/1036/head
Jon Beniston 2021-11-03 11:02:04 +00:00
rodzic 5cbd607f4a
commit af841dd88f
5 zmienionych plików z 54 dodań i 49 usunięć

Wyświetl plik

@ -1625,7 +1625,6 @@ void ADSBDemodGUI::on_getOSNDB_clicked()
// Download Opensky network database to a file
QUrl dbURL(QString(OSNDB_URL));
m_progressDialog = new QProgressDialog(this);
m_progressDialog->setAttribute(Qt::WA_DeleteOnClose);
m_progressDialog->setCancelButton(nullptr);
m_progressDialog->setLabelText(QString("Downloading %1.").arg(OSNDB_URL));
QNetworkReply *reply = m_dlm.download(dbURL, osnDBFilename);
@ -1645,7 +1644,6 @@ void ADSBDemodGUI::on_getAirportDB_clicked()
// Download Opensky network database to a file
QUrl dbURL(QString(AIRPORTS_URL));
m_progressDialog = new QProgressDialog(this);
m_progressDialog->setAttribute(Qt::WA_DeleteOnClose);
m_progressDialog->setCancelButton(nullptr);
m_progressDialog->setLabelText(QString("Downloading %1.").arg(AIRPORTS_URL));
QNetworkReply *reply = m_dlm.download(dbURL, airportDBFile);
@ -1740,12 +1738,16 @@ bool ADSBDemodGUI::readFastDB(const QString& filename)
void ADSBDemodGUI::updateDownloadProgress(qint64 bytesRead, qint64 totalBytes)
{
m_progressDialog->setMaximum(totalBytes);
m_progressDialog->setValue(bytesRead);
if (m_progressDialog)
{
m_progressDialog->setMaximum(totalBytes);
m_progressDialog->setValue(bytesRead);
}
}
void ADSBDemodGUI::downloadFinished(const QString& filename, bool success)
{
bool closeDialog = true;
if (success)
{
if (filename == getOSNDBFilename())
@ -1754,8 +1756,6 @@ void ADSBDemodGUI::downloadFinished(const QString& filename, bool success)
// Convert to condensed format for faster loading later
m_progressDialog->setLabelText("Processing.");
AircraftInformation::writeFastDB(getFastDBFilename(), m_aircraftInfo);
m_progressDialog->close();
m_progressDialog = nullptr;
}
else if (filename == getAirportDBFilename())
{
@ -1765,6 +1765,7 @@ void ADSBDemodGUI::downloadFinished(const QString& filename, bool success)
m_progressDialog->setLabelText(QString("Downloading %1.").arg(AIRPORT_FREQUENCIES_URL));
QNetworkReply *reply = m_dlm.download(dbURL, getAirportFrequenciesDBFilename());
connect(reply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(updateDownloadProgress(qint64,qint64)));
closeDialog = false;
}
else if (filename == getAirportFrequenciesDBFilename())
{
@ -1774,19 +1775,16 @@ void ADSBDemodGUI::downloadFinished(const QString& filename, bool success)
// Update airports on map
updateAirports();
}
m_progressDialog->close();
m_progressDialog = nullptr;
}
else
{
qDebug() << "ADSBDemodGUI::downloadFinished: Unexpected filename: " << filename;
m_progressDialog->close();
m_progressDialog = nullptr;
}
}
else
if (closeDialog && m_progressDialog)
{
m_progressDialog->close();
delete m_progressDialog;
m_progressDialog = nullptr;
}
}

Wyświetl plik

@ -980,12 +980,16 @@ QString VORDemodGUI::getVORDBFilename()
void VORDemodGUI::updateDownloadProgress(qint64 bytesRead, qint64 totalBytes)
{
m_progressDialog->setMaximum(totalBytes);
m_progressDialog->setValue(bytesRead);
if (m_progressDialog)
{
m_progressDialog->setMaximum(totalBytes);
m_progressDialog->setValue(bytesRead);
}
}
void VORDemodGUI::downloadFinished(const QString& filename, bool success)
{
bool closeDialog = true;
if (success)
{
if (filename == getVORDBFilename())
@ -993,8 +997,6 @@ void VORDemodGUI::downloadFinished(const QString& filename, bool success)
m_vors = NavAid::readNavAidsDB(filename);
if (m_vors != nullptr)
updateVORs();
m_progressDialog->close();
m_progressDialog = nullptr;
}
else if (filename == getOpenAIPVORDBFilename(m_countryIndex))
{
@ -1007,30 +1009,31 @@ void VORDemodGUI::downloadFinished(const QString& filename, bool success)
m_progressDialog->setLabelText(QString("Downloading %1.").arg(urlString));
m_progressDialog->setValue(m_countryIndex);
m_dlm.download(dbURL, vorDBFile);
closeDialog = false;
}
else
{
readNavAids();
if (m_vors != nullptr)
updateVORs();
m_progressDialog->close();
m_progressDialog = nullptr;
}
}
else
{
qDebug() << "VORDemodGUI::downloadFinished: Unexpected filename: " << filename;
m_progressDialog->close();
m_progressDialog = nullptr;
}
}
else
{
qDebug() << "VORDemodGUI::downloadFinished: Failed: " << filename;
m_progressDialog->close();
m_progressDialog = nullptr;
QMessageBox::warning(this, "Download failed", QString("Failed to download %1").arg(filename));
}
if (closeDialog && m_progressDialog)
{
m_progressDialog->close();
delete m_progressDialog;
m_progressDialog = nullptr;
}
}
void VORDemodGUI::on_getOurAirportsVORDB_clicked(bool checked)
@ -1046,7 +1049,6 @@ void VORDemodGUI::on_getOurAirportsVORDB_clicked(bool checked)
// Download OurAirports navaid database to disk
QUrl dbURL(QString(OURAIRPORTS_NAVAIDS_URL));
m_progressDialog = new QProgressDialog(this);
m_progressDialog->setAttribute(Qt::WA_DeleteOnClose);
m_progressDialog->setCancelButton(nullptr);
m_progressDialog->setMinimumDuration(500);
m_progressDialog->setLabelText(QString("Downloading %1.").arg(OURAIRPORTS_NAVAIDS_URL));
@ -1071,7 +1073,6 @@ void VORDemodGUI::on_getOpenAIPVORDB_clicked(bool checked)
QString urlString = getOpenAIPVORDBURL(m_countryIndex);
QUrl dbURL(urlString);
m_progressDialog = new QProgressDialog(this);
m_progressDialog->setAttribute(Qt::WA_DeleteOnClose);
m_progressDialog->setCancelButton(nullptr);
m_progressDialog->setMinimumDuration(500);
m_progressDialog->setMaximum(sizeof(countryCodes)/sizeof(countryCodes[0]));

Wyświetl plik

@ -113,8 +113,11 @@ bool MapBeaconDialog::confirmDownload(QString filename)
void MapBeaconDialog::updateDownloadProgress(qint64 bytesRead, qint64 totalBytes)
{
m_progressDialog->setMaximum(totalBytes);
m_progressDialog->setValue(bytesRead);
if (m_progressDialog)
{
m_progressDialog->setMaximum(totalBytes);
m_progressDialog->setValue(bytesRead);
}
}
void MapBeaconDialog::accept()
@ -132,7 +135,6 @@ void MapBeaconDialog::on_downloadIARU_clicked()
// Download IARU beacons database to disk
QUrl dbURL(QString(IARU_BEACONS_URL));
m_progressDialog = new QProgressDialog(this);
m_progressDialog->setAttribute(Qt::WA_DeleteOnClose);
m_progressDialog->setCancelButton(nullptr);
m_progressDialog->setMinimumDuration(500);
m_progressDialog->setLabelText(QString("Downloading %1.").arg(IARU_BEACONS_URL));
@ -151,23 +153,23 @@ void MapBeaconDialog::downloadFinished(const QString& filename, bool success)
QList<Beacon *> *beacons = Beacon::readIARUCSV(filename);
if (beacons != nullptr)
m_gui->setBeacons(beacons);
m_progressDialog->close();
m_progressDialog = nullptr;
}
else
{
qDebug() << "MapBeaconDialog::downloadFinished: Unexpected filename: " << filename;
m_progressDialog->close();
m_progressDialog = nullptr;
}
}
else
{
qDebug() << "MapBeaconDialog::downloadFinished: Failed: " << filename;
m_progressDialog->close();
m_progressDialog = nullptr;
QMessageBox::warning(this, "Download failed", QString("Failed to download %1").arg(filename));
}
if (m_progressDialog)
{
m_progressDialog->close();
delete m_progressDialog;
m_progressDialog = nullptr;
}
}
void MapBeaconDialog::on_beacons_cellDoubleClicked(int row, int column)

Wyświetl plik

@ -1013,12 +1013,16 @@ QString VORLocalizerGUI::getVORDBFilename()
void VORLocalizerGUI::updateDownloadProgress(qint64 bytesRead, qint64 totalBytes)
{
m_progressDialog->setMaximum(totalBytes);
m_progressDialog->setValue(bytesRead);
if (m_progressDialog)
{
m_progressDialog->setMaximum(totalBytes);
m_progressDialog->setValue(bytesRead);
}
}
void VORLocalizerGUI::downloadFinished(const QString& filename, bool success)
{
bool closeDialog = true;
if (success)
{
if (filename == getVORDBFilename())
@ -1028,9 +1032,6 @@ void VORLocalizerGUI::downloadFinished(const QString& filename, bool success)
if (m_vors != nullptr) {
updateVORs();
}
m_progressDialog->close();
m_progressDialog = nullptr;
}
else if (filename == getOpenAIPVORDBFilename(m_countryIndex))
{
@ -1044,6 +1045,7 @@ void VORLocalizerGUI::downloadFinished(const QString& filename, bool success)
m_progressDialog->setLabelText(QString("Downloading %1.").arg(urlString));
m_progressDialog->setValue(m_countryIndex);
m_dlm.download(dbURL, vorDBFile);
closeDialog = false;
}
else
{
@ -1052,25 +1054,24 @@ void VORLocalizerGUI::downloadFinished(const QString& filename, bool success)
if (m_vors) {
updateVORs();
}
m_progressDialog->close();
m_progressDialog = nullptr;
}
}
else
{
qDebug() << "VORLocalizerGUI::downloadFinished: Unexpected filename: " << filename;
m_progressDialog->close();
m_progressDialog = nullptr;
}
}
else
{
qDebug() << "VORLocalizerGUI::downloadFinished: Failed: " << filename;
m_progressDialog->close();
m_progressDialog = nullptr;
QMessageBox::warning(this, "Download failed", QString("Failed to download %1").arg(filename));
}
if (closeDialog && m_progressDialog)
{
m_progressDialog->close();
delete m_progressDialog;
m_progressDialog = nullptr;
}
}
void VORLocalizerGUI::on_startStop_toggled(bool checked)
@ -1094,7 +1095,6 @@ void VORLocalizerGUI::on_getOurAirportsVORDB_clicked()
// Download OurAirports navaid database to disk
QUrl dbURL(QString(OURAIRPORTS_NAVAIDS_URL));
m_progressDialog = new QProgressDialog(this);
m_progressDialog->setAttribute(Qt::WA_DeleteOnClose);
m_progressDialog->setCancelButton(nullptr);
m_progressDialog->setMinimumDuration(500);
m_progressDialog->setLabelText(QString("Downloading %1.").arg(OURAIRPORTS_NAVAIDS_URL));
@ -1118,7 +1118,6 @@ void VORLocalizerGUI::on_getOpenAIPVORDB_clicked()
QString urlString = getOpenAIPVORDBURL(m_countryIndex);
QUrl dbURL(urlString);
m_progressDialog = new QProgressDialog(this);
m_progressDialog->setAttribute(Qt::WA_DeleteOnClose);
m_progressDialog->setCancelButton(nullptr);
m_progressDialog->setMinimumDuration(500);
m_progressDialog->setMaximum(sizeof(countryCodes)/sizeof(countryCodes[0]));

Wyświetl plik

@ -32,14 +32,16 @@ QNetworkReply *HttpDownloadManagerGUI::download(const QUrl &url, const QString &
if (parent != nullptr)
{
QProgressDialog *progressDialog = new QProgressDialog(parent);
progressDialog->setAttribute(Qt::WA_DeleteOnClose);
progressDialog->setCancelButton(nullptr);
progressDialog->setMinimumDuration(500);
progressDialog->setLabelText(QString("Downloading %1.").arg(url.toString()));
m_progressDialogs.append(progressDialog);
connect(reply, &QNetworkReply::downloadProgress, this, [progressDialog](qint64 bytesRead, qint64 totalBytes) {
progressDialog->setMaximum(totalBytes);
progressDialog->setValue(bytesRead);
if (progressDialog)
{
progressDialog->setMaximum(totalBytes);
progressDialog->setValue(bytesRead);
}
});
}
else
@ -75,7 +77,10 @@ void HttpDownloadManagerGUI::downloadCompleteGUI(const QString& filename, bool s
{
QProgressDialog *progressDialog = m_progressDialogs[idx];
if (progressDialog != nullptr)
{
progressDialog->close();
delete progressDialog;
}
m_filenames.remove(idx);
m_progressDialogs.remove(idx);
}