bool QNetworkReplyProto::isReadable() const { QNetworkReply *item = qscriptvalue_cast<QNetworkReply*>(thisObject()); if (item) return item->isReadable(); return false; }
void FvUpdater::httpUpdateDownloadFinished() { QNetworkReply* reply = qobject_cast<QNetworkReply*>(sender()); if(reply==NULL) { qWarning()<<"The slot httpUpdateDownloadFinished() should only be invoked by S&S."; return; } if(reply->error() == QNetworkReply::NoError) { int httpstatuscode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toUInt(); // no error received? if (reply->error() == QNetworkReply::NoError) { if (reply->isReadable()) { #ifdef Q_OS_MAC CFURLRef appURLRef = CFBundleCopyBundleURL(CFBundleGetMainBundle()); char path[PATH_MAX]; if (!CFURLGetFileSystemRepresentation(appURLRef, TRUE, (UInt8 *)path, PATH_MAX)) { // error! } CFRelease(appURLRef); QString filePath = QString(path); QString rootDirectory = filePath.left(filePath.lastIndexOf("/")); #else QString rootDirectory = QCoreApplication::applicationDirPath() + "/"; #endif // Write download into File QFileInfo fileInfo=reply->url().path(); QString fileName = rootDirectory + fileInfo.fileName(); //qDebug()<<"Writing downloaded file into "<<fileName; QFile file(fileName); file.open(QIODevice::WriteOnly); file.write(reply->readAll()); file.close(); // Retrieve List of updated files (Placed in an extra scope to avoid QuaZIP handles the archive permanently and thus avoids the deletion.) { QuaZip zip(fileName); if (!zip.open(QuaZip::mdUnzip)) { qWarning("testRead(): zip.open(): %d", zip.getZipError()); return; } zip.setFileNameCodec("IBM866"); QList<QuaZipFileInfo> updateFiles = zip.getFileInfoList(); // Rename all current files with available update. for (int i=0;i<updateFiles.size();i++) { QString sourceFilePath = rootDirectory + "\\" + updateFiles[i].name; QDir appDir( QCoreApplication::applicationDirPath() ); QFileInfo file( sourceFilePath ); if(file.exists()) { //qDebug()<<tr("Moving file %1 to %2").arg(sourceFilePath).arg(sourceFilePath+".oldversion"); appDir.rename( sourceFilePath, sourceFilePath+".oldversion" ); } } } // Install updated Files unzipUpdate(fileName, rootDirectory); // Delete update archive while(QFile::remove(fileName) ) { }; // Restart ap to clean up and start usual business restartApplication(); } else qDebug()<<"Error: QNetworkReply is not readable!"; } else { qDebug()<<"Download errors ocurred! HTTP Error Code:"<<httpstatuscode; } reply->deleteLater(); } // If !reply->error END } // httpUpdateDownloadFinished END