Ejemplo n.º 1
0
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;
    }
}
Ejemplo n.º 2
0
void Download::setBytesDownloaded(qint64 bytes)
{    
    m_bytesDownloaded = bytes;

    if(isDownloadFinished())
        emit downloadFinished();
}
Ejemplo n.º 3
0
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);
        }
    }
}
Ejemplo n.º 4
0
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));
    }
}