networkdownloader.cpp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include "networkdownloader.h"
  2. #include <QEventLoop>
  3. NetworkDownloader::NetworkDownloader(QObject *parent) :QObject(parent), busy(false)
  4. {
  5. connect(&m_WebCtrl, SIGNAL(finished(QNetworkReply*)), this, SLOT(onDownloadFinished(QNetworkReply*)));
  6. }
  7. NetworkDownloader::~NetworkDownloader() {
  8. }
  9. QUrl NetworkDownloader::getUrl()
  10. {
  11. return url;
  12. }
  13. void NetworkDownloader::setUrl(const QUrl &_url)
  14. {
  15. url = _url;
  16. }
  17. void NetworkDownloader::waitForDownloaded()
  18. {
  19. QEventLoop loop;
  20. connect(this, &NetworkDownloader::downloadFinished, &loop, &QEventLoop::quit);
  21. loop.exec();
  22. }
  23. void NetworkDownloader::start()
  24. {
  25. if (busy) {
  26. qDebug() << "Cannot download " << url << ", downloader is busy!";
  27. return;
  28. }
  29. qDebug() << "Starting download " << url;
  30. busy = true;
  31. QNetworkRequest request(url);
  32. m_CurrentReply = m_WebCtrl.get(request);
  33. m_CurrentReply->setReadBufferSize(download_speed_limit);
  34. connect(m_CurrentReply, &QNetworkReply::readyRead, this, &NetworkDownloader::onReadyRead);
  35. connect(m_CurrentReply, &QNetworkReply::downloadProgress, this, &NetworkDownloader::progressChanged);
  36. }
  37. void NetworkDownloader::updateDownloadSpeedLimit(int bytes_per_sec)
  38. {
  39. download_speed_limit = bytes_per_sec;
  40. if (m_CurrentReply)
  41. m_CurrentReply->setReadBufferSize(bytes_per_sec);
  42. }
  43. void NetworkDownloader::stop()
  44. {
  45. m_CurrentReply->abort();
  46. busy = false;
  47. }
  48. void NetworkDownloader::onDownloadFinished(QNetworkReply*) {
  49. busy = false;
  50. emit downloadFinished();
  51. }
  52. void NetworkDownloader::onReadyRead()
  53. {
  54. QByteArray readdata = m_CurrentReply->readAll();
  55. if (targetFile && targetFile->isWritable())
  56. targetFile->write(readdata);
  57. if (targetBytearray)
  58. targetBytearray->append(readdata);
  59. }