// Copyright (C) 2020 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #ifndef HTTPWINDOW_H #define HTTPWINDOW_H #include #include #include #include QT_BEGIN_NAMESPACE class QFile; class QLabel; class QLineEdit; class QPushButton; class QSslError; class QAuthenticator; class QNetworkReply; class QCheckBox; QT_END_NAMESPACE class ProgressDialog : public QProgressDialog { Q_OBJECT public: explicit ProgressDialog(const QUrl &url, QWidget *parent = nullptr); public slots: void networkReplyProgress(qint64 bytesRead, qint64 totalBytes); }; class HttpWindow : public QDialog { Q_OBJECT public: explicit HttpWindow(QWidget *parent = nullptr); ~HttpWindow(); void startRequest(const QUrl &requestedUrl); private slots: void downloadFile(); void cancelDownload(); void httpFinished(); void httpReadyRead(); void enableDownloadButton(); void slotAuthenticationRequired(QNetworkReply *, QAuthenticator *authenticator); #if QT_CONFIG(ssl) void sslErrors(const QList &errors); #endif private: std::unique_ptr openFileForWrite(const QString &fileName); QLabel *statusLabel; QLineEdit *urlLineEdit; QPushButton *downloadButton; QCheckBox *launchCheckBox; QLineEdit *defaultFileLineEdit; QLineEdit *downloadDirectoryLineEdit; QUrl url; QNetworkAccessManager qnam; QScopedPointer reply; std::unique_ptr file; bool httpRequestAborted = false; }; #endif