File indexing completed on 2024-04-28 16:51:32

0001 /*
0002     SPDX-FileCopyrightText: 2017 Kai Uwe Broulik <kde@privat.broulik.de>
0003     SPDX-FileCopyrightText: 2017 David Edmundson <davidedmundson@kde.org>
0004 
0005     SPDX-License-Identifier: MIT
0006 */
0007 
0008 #pragma once
0009 
0010 #include <KJob>
0011 
0012 #include <QElapsedTimer>
0013 #include <QUrl>
0014 
0015 class DownloadJob : public KJob
0016 {
0017     Q_OBJECT
0018 
0019 public:
0020     DownloadJob();
0021 
0022     enum class State {
0023         None,
0024         InProgress,
0025         Interrupted,
0026         Complete,
0027     };
0028 
0029     void start() override;
0030 
0031     void update(const QJsonObject &payload);
0032 
0033 Q_SIGNALS:
0034     void killRequested();
0035     void suspendRequested();
0036     void resumeRequested();
0037 
0038 private Q_SLOTS:
0039     void doStart();
0040 
0041 protected:
0042     bool doKill() override;
0043     bool doSuspend() override;
0044     bool doResume() override;
0045 
0046 private:
0047     void updateDescription();
0048     void addToRecentDocuments();
0049     void saveOriginUrl();
0050 
0051     QUrl originUrl() const;
0052 
0053     QUrl m_url;
0054     QUrl m_finalUrl;
0055     QUrl m_referrer;
0056 
0057     QUrl m_destination;
0058 
0059     QString m_fileName;
0060 
0061     QString m_mimeType;
0062 
0063     qulonglong m_bytesReceived = 0;
0064     QElapsedTimer m_fallbackSpeedTimer;
0065 
0066     // In doubt, assume incognito
0067     bool m_incognito = true;
0068 };