Warning, file /maui/mauikit-filebrowsing/src/code/downloader.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 #include "downloader.h" 0002 #include <QNetworkAccessManager> 0003 #include <QNetworkReply> 0004 #include <QFile> 0005 0006 // #if defined Q_OS_LINUX && !defined Q_OS_ANDROID 0007 // #include <KIO/CopyJob> 0008 // #include <KJob> 0009 // #endif 0010 0011 // QNetworkAccessManager *FMH::Downloader::manager = new QNetworkAccessManager(); 0012 0013 FMH::Downloader::Downloader(QObject *parent) 0014 : QObject(parent) 0015 , reply(nullptr) 0016 , manager( new QNetworkAccessManager(this)) 0017 , file(nullptr) 0018 , array(new QByteArray) 0019 { 0020 } 0021 0022 void FMH::Downloader::setConnections() 0023 { 0024 if(!reply) 0025 { 0026 return; 0027 } 0028 0029 reply->disconnect(); 0030 connect(reply, &QNetworkReply::downloadProgress, this, &Downloader::onDownloadProgress); 0031 connect(reply, &QIODevice::readyRead, this, &Downloader::onReadyRead); 0032 connect(reply, &QNetworkReply::finished, this, &Downloader::onReplyFinished); 0033 connect(reply, &QNetworkReply::errorOccurred, [this](QNetworkReply::NetworkError) 0034 { 0035 Q_EMIT this->warning(reply->errorString()); 0036 }); 0037 0038 // connect(reply, &QNetworkReply::sslErrors, [this](const QList<QSslError> &errors) 0039 // { 0040 // Q_EMIT this->warning(reply->sslErrors().); 0041 // }); 0042 } 0043 0044 FMH::Downloader::~Downloader() 0045 { 0046 qDebug() << "DELETEING DOWNLOADER"; 0047 this->array->clear(); 0048 } 0049 0050 bool FMH::Downloader::isFinished() const 0051 { 0052 if(!reply) 0053 { 0054 return false; 0055 } 0056 0057 return reply->isFinished(); 0058 } 0059 0060 bool FMH::Downloader::isRunning() const 0061 { 0062 if(!reply) 0063 { 0064 return false; 0065 } 0066 0067 return reply->isRunning(); 0068 } 0069 0070 0071 void FMH::Downloader::stop() 0072 { 0073 if(!reply) 0074 { 0075 return; 0076 } 0077 0078 if(this->reply->isRunning()) 0079 { 0080 this->reply->abort(); 0081 this->reply->close(); 0082 Q_EMIT this->aborted(); 0083 0084 if(m_saveToFile) 0085 { 0086 if(this->file) 0087 { 0088 this->file->remove(); 0089 } 0090 }else 0091 { 0092 this->array->clear(); 0093 } 0094 } 0095 } 0096 0097 void FMH::Downloader::downloadFile(const QUrl &source, const QUrl &destination) 0098 { 0099 #ifdef KIO_COPYJOB_H 0100 KIO::CopyJob *downloadJob = KIO::copy(source, destination); 0101 0102 connect(downloadJob, &KIO::CopyJob::warning, [=](KJob *job, QString message) 0103 { 0104 Q_UNUSED(job) 0105 Q_EMIT this->warning(message); 0106 }); 0107 0108 connect(downloadJob, &KIO::CopyJob::processedSize, [=](KJob *job, qulonglong size) 0109 { 0110 Q_EMIT this->progress(size, job->percent()); 0111 }); 0112 0113 connect(downloadJob, &KIO::CopyJob::finished, [=](KJob *job) 0114 { 0115 Q_EMIT this->downloadReady(); 0116 Q_EMIT this->done(); 0117 }); 0118 0119 #else 0120 if (destination.isEmpty() || source.isEmpty()) 0121 return; 0122 0123 QNetworkRequest request; 0124 request.setAttribute(QNetworkRequest::RedirectPolicyAttribute, true); 0125 request.setUrl(source); 0126 0127 m_saveToFile = true; 0128 0129 file = new QFile; 0130 file->setFileName(destination.toLocalFile()); 0131 if (!file->open(QIODevice::WriteOnly)) 0132 { 0133 Q_EMIT this->warning(QStringLiteral("Can not open file to write download")); 0134 return; 0135 } 0136 0137 this->reply = manager->get(request); 0138 this->setConnections(); 0139 0140 #endif 0141 } 0142 0143 void FMH::Downloader::getArray(const QUrl &fileURL, const QMap<QString, QString> &headers) 0144 { 0145 if (fileURL.isEmpty()) 0146 return; 0147 0148 QNetworkRequest request; 0149 request.setUrl(fileURL); 0150 if (!headers.isEmpty()) 0151 { 0152 const auto keys = headers.keys(); 0153 for (const auto &key : keys) 0154 request.setRawHeader(key.toLocal8Bit(), headers[key].toLocal8Bit()); 0155 } 0156 0157 m_saveToFile = false; 0158 reply = manager->get(request); 0159 this->setConnections(); 0160 } 0161 0162 void FMH::Downloader::onDownloadProgress(qint64 bytesRead, qint64 bytesTotal) 0163 { 0164 if(bytesTotal <= 0) 0165 { 0166 return; 0167 } 0168 0169 qDebug() << "DOWNLOAD PROGRESS" << ((bytesRead * 100) / bytesTotal); 0170 Q_EMIT this->progress((bytesRead * 100) / bytesTotal); 0171 } 0172 0173 void FMH::Downloader::onReadyRead() 0174 { 0175 switch (reply->error()) 0176 { 0177 case QNetworkReply::NoError: 0178 { 0179 if(m_saveToFile) 0180 { 0181 this->file->write(reply->readAll()); 0182 0183 }else 0184 { 0185 this->array->append(reply->readAll()); 0186 } 0187 0188 break; 0189 } 0190 0191 default: 0192 { 0193 qDebug() << reply->errorString(); 0194 Q_EMIT this->warning(reply->errorString()); 0195 } 0196 } 0197 } 0198 0199 void FMH::Downloader::onReplyFinished() 0200 { 0201 switch (reply->error()) 0202 { 0203 case QNetworkReply::NoError: 0204 { 0205 if(m_saveToFile) 0206 { 0207 if (file->isOpen()) 0208 { 0209 file->close(); 0210 } 0211 0212 Q_EMIT this->fileSaved(this->file->fileName()); 0213 file->deleteLater(); 0214 0215 }else 0216 { 0217 Q_EMIT this->dataReady(*this->array); 0218 } 0219 0220 Q_EMIT this->done(); 0221 Q_EMIT this->downloadReady(); 0222 break; 0223 } 0224 0225 default: 0226 { 0227 Q_EMIT this->warning(reply->errorString()); 0228 } 0229 } 0230 }