void MainWindow::connectToFtp() { ftp = new QFtp(this); connect(ftp, SIGNAL(commandFinished(int,bool)), this, SLOT(cmdFinished(int,bool))); connect(ftp, SIGNAL(listInfo(QUrlInfo)), this, SLOT(dlFile(QUrlInfo))); url = new QUrl(ui->adrEdit->text()); if(!url->isValid() || url->scheme().toLower() != QLatin1String("ftp")){ ftp->connectToHost(ui->adrEdit->text()); ftp->login(ui->loginEdit->text(), ui->pwdEdit->text()); } else { ftp->connectToHost(url->host(), url->port()); ftp->login(ui->loginEdit->text(), ui->pwdEdit->text()); } }
/* * Permet de gérer une connection sur le socket sdClient dans un thread. */ void *manageClient(void* par[]) { pthread_t id_t = pthread_self(); //Socket client int sdClient = ((acceptThreadArg*) par)->sock; struct sockaddr_in client_addr = ((acceptThreadArg*) par)->pair; char buffer[MSG_BUFFER_SIZE]; int ret = 0; while (strncmp(buffer, "909", 3) != 0) { //Lecture du code du message. memset(buffer, 0, MSG_BUFFER_SIZE); ret = recv(sdClient, buffer, 3, 0); if (ret <= 0) { strcat(buffer, "909"); } if (strncmp(buffer, "100", 3) == 0) {//Nouveau client if (initClientConnect(sdClient, client_addr) != 0) { printf("Erreur initClientConnect.\n"); exit(EXIT_FAILURE); } } else if (strncmp(buffer, "200", 3) == 0) {//Partage d'un fichier if (shareFile(sdClient, client_addr) != 0) { printf("Erreur partage fichier.\n"); exit(EXIT_FAILURE); } } else if (strncmp(buffer, "300", 3) == 0) {//DL d'un fichier if (dlFile(sdClient, client_addr) != 0) { printf("Erreur DL fichier.\n"); exit(EXIT_FAILURE); } } else if (strncmp(buffer, "400", 3) == 0) {//Mise a jour meta-data } } //closesocket(sdClient); close(sdClient); pthread_exit((void*) id_t); }
void MainWindow::downloadFinished(QNetworkReply *reply) { QScrollBar *sb = ui->textBrowser->verticalScrollBar(); QUrl url = reply->url(); if (reply->error()) { if ( !url.toString().contains("hgt.zip") ) { ui->textBrowser->append("Download of " + QString(url.toEncoded().constData()) + " failed: " + QString(reply->errorString())); sb->setValue(sb->maximum()); // get the info shown } QString fileUrl = url.toEncoded().constData(); } else { QString path = url.path(); QString fileName = QFileInfo(path).fileName(); if (fileName.isEmpty()) fileName = "download"; QDir dir(dataDirectory); dir.mkpath(dataDirectory); QFile file(dataDirectory+"/"+fileName); if (fileName.contains("dl")) { // obtain url QFile file(dataDirectory+"/"+fileName); } else if (fileName.contains("hgt")) { // obtain elevation files dir.mkpath(dataDirectory+"/SRTM-3/"); file.setFileName(dataDirectory+"/SRTM-3/"+fileName); GUILog( url.toString() + "\n", "download" ); } if (file.open(QIODevice::WriteOnly)) { file.write(reply->readAll()); file.close(); } // download actual shapefile package if (fileName.contains("dl")) { QFile dlFile(dataDirectory+"/"+fileName); if (!dlFile.open(QIODevice::ReadOnly | QIODevice::Text)) return; QTextStream textStream( &dlFile); QString dlUrl = textStream.readAll(); dlUrl.remove("<p>The document has moved <a href=\""); dlUrl.remove("\">here</a></p>\n"); QNetworkReply *r = _manager->get(QNetworkRequest("http://mapserver.flightgear.org"+dlUrl)); connect(r, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(downloadShapefilesProgressBar(qint64, qint64))); } ui->textBrowser->append("Download of "+QString(url.toEncoded().constData())+" succeded saved to: "+QString(fileName)); sb->setValue(sb->maximum()); // get the info shown // unzip shapefile package if (fileName.contains("-")) { // unpack zip QString arguments; #ifdef Q_OS_WIN arguments += "7z.exe x \""+dataDirectory+"/"+fileName+"\" -o\""+dataDirectory+"\" -aoa"; #endif #ifdef Q_OS_UNIX arguments += "unzip -o "+dataDirectory+"/"+fileName+" -d "+dataDirectory; #endif //ui->textBrowser->append(arguments); GUILog( arguments + "\n", "download" ); QProcess proc; proc.start(arguments, QIODevice::ReadWrite); proc.waitForReadyRead(); proc.waitForFinished(-1); // delete temporary files QFile shapeFile(dataDirectory+"/"+fileName); shapeFile.remove(); QFile dlshpFile(dataDirectory+"/dlshp"); dlshpFile.remove(); // re-enable download button ui->downloadShapefilesButton->setText("Download shapefiles"); ui->downloadShapefilesButton->setEnabled(1); } if (fileName.contains(".hgt.zip")){ // adjust progress bar ui->downloadElevationProgressBar->setValue(ui->downloadElevationProgressBar->value()+1); } } // re-enable download button if (ui->downloadElevationProgressBar->value() == ui->downloadElevationProgressBar->maximum()) { ui->downloadElevationButton->setEnabled(1); } }