Exemple #1
0
void
DownloadJob::onDownloadFinished()
{
    tLog() << Q_FUNC_INFO << m_rcvdSize << m_fileSize;
    if ( state() == Paused )
    {
        m_finished = true;
        return;
    }

    if ( ( m_fileSize > 0 && m_rcvdSize < m_fileSize ) || m_rcvdSize == 0 )
    {
        onDownloadError( QNetworkReply::UnknownContentError );
        return;
    }

    disconnect( m_reply, SIGNAL( error( QNetworkReply::NetworkError ) ), this, SLOT( onDownloadError( QNetworkReply::NetworkError ) ) );
    disconnect( m_reply, SIGNAL( downloadProgress( qint64, qint64 ) ), this, SLOT( onDownloadProgress( qint64, qint64 ) ) );
    disconnect( m_reply, SIGNAL( finished() ), this, SLOT( onDownloadNetworkFinished() ) );
    m_reply->abort();

    if ( m_file && m_file->isOpen() )
    {
        m_file->flush();
        m_file->close();
    }

    delete m_file;
    m_file = 0;

    m_finishedTimestamp = QDateTime::currentDateTimeUtc();
    setState( Finished );
    tLog() << Q_FUNC_INFO << "Finished downloading:" << toString();
    tLog() << Q_FUNC_INFO << m_finished;
}
Exemple #2
0
void
DownloadJob::onUrlRetrieved( const QVariantMap& data )
{
    tDebug() << Q_FUNC_INFO << data;
    QUrl localFile = prepareFilename();
    if ( m_file )
    {
        tLog() << "Recovering from failed download for track:" << toString() << "-" << m_retries << "retries so far.";
        m_finished = false;
        delete m_file;
        m_file = 0;
    }

    tLog() << "Saving download" << m_format.url << "to file:" << localFile << localFile.toLocalFile();

    m_file = new QFile( localFile.toString() );
    m_localFile = localFile.toString();

    if ( m_tryResuming && checkForResumedFile() )
        return;

    m_reply = Tomahawk::Utils::nam()->get( QNetworkRequest( data[ "url" ].toString() ) );

    connect( m_reply, SIGNAL( error( QNetworkReply::NetworkError ) ), SLOT( onDownloadError( QNetworkReply::NetworkError ) ) );
    connect( m_reply, SIGNAL( downloadProgress( qint64, qint64 ) ), SLOT( onDownloadProgress( qint64, qint64 ) ) );
    connect( m_reply, SIGNAL( finished() ), SLOT( onDownloadNetworkFinished() ) );

    setState( Running );
}
Exemple #3
0
void
DownloadJob::onDownloadNetworkFinished()
{
    tLog() << Q_FUNC_INFO << m_rcvdSize << m_fileSize;
    if ( m_reply && m_reply->bytesAvailable() > 0 )
    {
        tLog() << "Expecting more data!";
        return;
    }

    if ( ( m_fileSize > 0 && m_rcvdSize < m_fileSize ) || m_rcvdSize == 0 )
    {
        if ( m_reply )
            onDownloadError( QNetworkReply::UnknownContentError );
        return;
    }
}
Exemple #4
0
GBUpdate::GBUpdate()
{
	_isUpdateEnabled = false;
	_isAutoUpdate = false;
	_remoteVersion = "";
	_localVersion = "";
	_localExternalVersion = "";
	
	_downloader.reset(new network::Downloader());
	_downloader->onFileTaskSuccess = [this](const DownloadTask& task) { onDownloadSuccess(task); };
	_downloader->onTaskError = [this](const DownloadTask& task, int errorCode, int errorCodeInternal, const std::string& errorStr) {onDownloadError(task, errorCode, errorCodeInternal, errorStr); };
	
	DIRECTOR()->getEventDispatcher()->addCustomEventListener(GBUPDATE_EVENT_UPDATE_START, [this](EventCustom * pEvent){
		for (map<string, GBUpdateInfo>::iterator it = _downloadList.begin(); it != _downloadList.end(); it++)
		{
			if (it->second.location.empty())
			{
				GBVersion version = splitVersion(_remoteVersion);
				_downloader->createDownloadFileTask(StringUtils::format("%s/%d.%d/%s", _updateUrl.c_str(), version.version1, version.version2, it->first.c_str()), GBUtils::getExternalPath(it->first), it->first);
				return;
			}
		}
		DIRECTOR()->getEventDispatcher()->dispatchCustomEvent(GBUPDATE_EVENT_UPDATE_FINISH, (void *)0);
	});

	DIRECTOR()->getEventDispatcher()->addCustomEventListener(GBUPDATE_EVENT_UPDATED_ONE, [this](EventCustom * pEvent){
		for (map<string, GBUpdateInfo>::iterator it = _downloadList.begin(); it != _downloadList.end(); it++)
		{
			if (it->second.location.empty())
			{
				GBVersion version = splitVersion(_remoteVersion);
				_downloader->createDownloadFileTask(StringUtils::format("%s/%d.%d/%s", _updateUrl.c_str(), version.version1, version.version2, it->first.c_str()), GBUtils::getExternalPath(it->first), it->first);
				return;
			}
		}
		DIRECTOR()->getEventDispatcher()->dispatchCustomEvent(GBUPDATE_EVENT_UPDATE_FINISH, (void *)1);
	});

	DIRECTOR()->getEventDispatcher()->addCustomEventListener(GBUPDATE_EVENT_UPDATE_FINISH, [this](EventCustom * pEvent){
		long isDownloadFinish = (long)pEvent->getUserData();
		if(isDownloadFinish) parseMD5();
	});
}
void AdBlockDownloader::downloadFile(const QString& path, const QString &filename, const QString& localfile)
{
    this->_progressvalue = 0;
    this->_progresstotal = 0;

    emit connectionStarted();

    this->_localfile = localfile;
    this->_tempfile.setFileName(localfile);
    this->_tempfile.open(QFile::WriteOnly | QFile::Truncate);

    QUrl url(QString("%1/%2").arg(path, filename));
    QNetworkRequest request(url);

    this->_downloadreply = this->_networkmanager.get(request);
    connect(this->_downloadreply, SIGNAL(readyRead()), this, SLOT(onNetworkReplyReadyRead()));
    connect(this->_downloadreply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(onDownloadProgress(qint64,qint64)));
    connect(this->_downloadreply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onDownloadError(QNetworkReply::NetworkError)));
}
Exemple #6
0
void
DownloadJob::onDownloadProgress( qint64 rcvd, qint64 total )
{
    if ( m_reply == 0 )
        return;

    if ( rcvd >= m_fileSize && m_fileSize > 0 )
    {
        m_finished = true;
    }

    if ( state() == Paused )
        return;

    m_rcvdSize = rcvd;
    m_fileSize = total;

    qint64 now = QDateTime::currentDateTime().toMSecsSinceEpoch();
    if ( ( now - 50 > m_rcvdStamp ) || ( rcvd == total ) )
    {
        m_rcvdStamp = now;
        if ( ( m_rcvdSize - 16384 > m_rcvdEmit ) || ( rcvd == total ) )
        {
            m_rcvdEmit = m_rcvdSize;
            emit progress( progressPercentage() );
        }
    }

    if ( !m_file )
        return;

    if ( !m_file->isOpen() )
    {
        if ( m_tryResuming && checkForResumedFile() )
            return;

        if ( !m_file->open( QIODevice::WriteOnly ) )
        {
            tLog() << Q_FUNC_INFO << "Failed opening file:" << m_file->fileName();
            setState( Failed );
            return;
        }
    }

    QByteArray data = m_reply->readAll();
    if ( data.isEmpty() )
        return;

    if ( m_file->write( data ) < 0 )
    {
        tLog() << Q_FUNC_INFO << "Failed writing to file:" << data.length();
        onDownloadError( QNetworkReply::UnknownContentError );
        return;
    }

    if ( m_rcvdSize >= m_fileSize && m_fileSize > 0 )
    {
        onDownloadFinished();
    }
    else if ( m_reply->isFinished() && m_reply->bytesAvailable() == 0 )
    {
        if ( ( m_fileSize > 0 && m_rcvdSize < m_fileSize ) || m_rcvdSize == 0 )
        {
            onDownloadError( QNetworkReply::UnknownContentError );
            return;
        }
    }
}