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; }
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 ); }
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; } }
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))); }
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; } } }