diff --git a/runtime/BrowserWindow.cpp b/runtime/BrowserWindow.cpp index 6b962bd..d58a094 100644 --- a/runtime/BrowserWindow.cpp +++ b/runtime/BrowserWindow.cpp @@ -353,8 +353,9 @@ void BrowserWindow::downloadFileProgress(qint64 readData, qint64 totalData) m_file->write(reply->read(readData)); m_progressDialog->setValue(readData); - // As read data and totalData difference is zero means downloading is finished - if ((totalData - readData) == 0) + // As read data and totalData difference is zero means downloading is finished. + if ((totalData - readData) == 0 || + (readData != 0 && totalData == -1)) { // As downloading is finished so remove progress bar dialog if (m_progressDialog) @@ -438,6 +439,11 @@ void BrowserWindow::downloadFinished() // Below slot will be called when user directly click on any download link void BrowserWindow::unsupportedContent(QNetworkReply * reply) { + // Extract filename and query from encoded URL + QUrlQuery query_data(reply->url()); + QString file_name = query_data.queryItemValue("filename"); + QString query = query_data.queryItemValue("query"); + if (m_downloadStarted) { // Inform user that download is already started @@ -445,7 +451,12 @@ void BrowserWindow::unsupportedContent(QNetworkReply * reply) return; } - m_defaultFilename = QFileInfo(reply->url().toString()).fileName(); + // If encoded URL contains 'filename' attribute then use that filename in file dialog. + if (file_name.isEmpty() && query.isEmpty()) + m_defaultFilename = QFileInfo(reply->url().toString()).fileName(); + else + m_defaultFilename = file_name; + QFileDialog save_dialog(this); save_dialog.setAcceptMode(QFileDialog::AcceptSave); save_dialog.setWindowTitle(tr("Save file"));