void ImageThread::errorHandler(QUrl url, int err) { switch (err) { case 202: case 404: if (isImage(url)) { _blackList->add(url.toString()); setCompleted(url.toString(), ""); } else { // If there are still images in the list, wait until they finished (maybe they still exist) // else close immediately if (isDownloadFinished()) { stop(); emit errorMessage("404 - Page not found"); emit closeRequest(this, 404); } else { _closeWhenFinished = true; } } break; case 999: emit errorMessage("You are banned"); break; default: QLOG_ERROR() << "ImageOverview :: Unhandled error (" << url.toString() << "," << err << ")"; break; } }
void Download::setBytesDownloaded(qint64 bytes) { m_bytesDownloaded = bytes; if(isDownloadFinished()) emit downloadFinished(); }
void ImageThread::mergeImageList(QList<_IMAGE> list) { bool imagesAdded; imagesAdded = false; for (int i=0; i<list.count(); i++) { if(addImage(list.at(i))) imagesAdded = true; } if (imagesAdded) { QLOG_TRACE() << "ImageThread :: added images"; download(true); } else { if (isDownloadFinished()) { download(false); } } }
void Download::calculateSpeed() const { if(!m_speedTimer.isValid()) { m_speedTimer.start(); return; } if(isDownloadFinished()) { m_speed = 0; m_weightedSpeed = 0; m_eta = QTime(); return; } qint64 elapsedTime = m_speedTimer.elapsed(); if(elapsedTime > 100) { qint64 bytesProcessedSinceLastMeasurement = m_bytesDownloaded - m_bytesProcessedAtLastSpeedMeasurement; if(bytesProcessedSinceLastMeasurement == 0 && elapsedTime < 3000) return; if(m_bytesProcessedAtLastSpeedMeasurement < 0) { m_bytesProcessedAtLastSpeedMeasurement = m_bytesDownloaded; return; } m_bytesProcessedAtLastSpeedMeasurement = m_bytesDownloaded; m_speed = bytesProcessedSinceLastMeasurement * 1000 / elapsedTime; m_speed = qMax(qint64(0), m_speed); if(m_weightedSpeed < 1000) // if weighted is less than 1kb/s just reset it. m_weightedSpeed = m_speed; else if(m_speed <= 0) m_weightedSpeed /= 10; else m_weightedSpeed = m_speed * s_speedAlpha + m_weightedSpeed * (1 - s_speedAlpha); m_weightedSpeed = qMax(qint64(0), m_weightedSpeed); m_speedTimer.restart(); if(m_weightedSpeed <= 0) { m_eta = QTime(); return; } qint64 bytesLeft = m_fileSize - m_bytesDownloaded; if(bytesLeft < 0) { m_eta = QTime(); return; } if(bytesLeft == 0) { m_eta = QTime(0,0,0); return; } m_eta = QTime(0,0,0); m_eta = m_eta.addSecs(qint64(bytesLeft / m_weightedSpeed)); } }