bool FtpCmdList :: endFtpCmd() { // emit mes("end list "); //emit mes(QVariant(listF->size()).toString()); disconnect(ftpconn,SIGNAL(listInfo(QUrlInfo)),this, SLOT(ftpList(QUrlInfo))); return true; }
void uiLoader::setupFTP() { qDebug( " ========== Setting up FTP environment" ); // create dirs on ftp server ftpMkDir( ftpBaseDir ); ftpBaseDir += "/" + QLibraryInfo::buildKey(); ftpMkDir( ftpBaseDir ); ftpBaseDir += "/" + QString( qVersion() ); ftpMkDir( ftpBaseDir ); QString dir = ""; ftpList(ftpBaseDir + '/' + dir); QList<QString> dirListing(lsDirList); // create *.failed, *.diff if necessary, else remove the files in it // if *.baseline does not exist, memorize it QHashIterator<QString, QString> j(enginesToTest); while ( j.hasNext() ) { j.next(); QString curDir = QString( j.key() ) + ".failed"; if ( dirListing.contains( curDir ) ) { ftpClearDirectory(ftpBaseDir + "/" + curDir + "/"); } else { ftpMkDir(ftpBaseDir + "/" + curDir + "/"); } curDir = QString( j.key() ) + ".diff"; if ( dirListing.contains( curDir ) ) { ftpClearDirectory(ftpBaseDir + "/" + curDir + "/"); } else { ftpMkDir(ftpBaseDir + "/" + curDir + "/"); } curDir = QString( j.key() ) + ".baseline"; lsNeedBaseline.clear(); if ( !dirListing.contains( curDir ) ) { ftpMkDir(ftpBaseDir + "/" + curDir + "/"); lsNeedBaseline << j.key(); } else { qDebug() << "\t(I)" << curDir << "exists on server."; } } }
void uiLoader::downloadBaseline() { qDebug() << " ========== Downloading baseline..."; QHashIterator<QString, QString> i(enginesToTest); while ( i.hasNext() ) { i.next(); QString engineName = i.key(); QString dirWithFiles = ftpBaseDir + '/' + engineName + ".baseline"; QString ftpDir = ftpBaseDir + '/' + engineName + ".baseline"; QString saveToDir = QDir::currentPath() + '/' + output + '/' + engineName + ".baseline"; ftpList(dirWithFiles); QList<QString> filesToDownload(lsDirList); ftpGetFiles(filesToDownload, ftpDir, saveToDir); } }
bool FtpCmdList :: doFtpCmd() { if(listF==0) { lastErr.redefine("List of files id NULL."); return false; } listF->clear(); /* if(not ftpName.isValid()) { lastErr.redefine("FTP catalog name is not valid"); return false; } //emit mes(ftpName.getFullName()); */ if( QMetaType::type("QUrlInfo") == 0) qRegisterMetaType<QUrlInfo>("QUrlInfo"); connect(ftpconn,SIGNAL(listInfo(QUrlInfo)),this,SLOT(ftpList(QUrlInfo))); ftpconn->list(ftpName.getFullName()); return true; }
void uiLoader::ftpClearDirectory(const QString& pathDir) { qDebug() << "\t(I) Clearing directory remote: " << pathDir; ftpList(pathDir); QList<QString> dirListing(lsDirList); QFtp ftp; ftp.connectToHost( ftpHost ); ftp.login( ftpUser, ftpPass ); for (int i = 0; i < dirListing.size(); ++i) { QString file = dirListing.at(i); qDebug() << "\t(I) Removing" << pathDir + file; ftp.remove(pathDir + file); } ftp.close(); while ( ftp.hasPendingCommands() ) QCoreApplication::instance()->processEvents(); }
DEFINE_THREAD_ROUTINE(academy_upload, data) { char *directoryList = NULL; char *fileList = NULL; char dirname[ACADEMY_MAX_FILENAME]; _ftp_t *academy_ftp = NULL; _ftp_status academy_status; char *ptr = NULL; academy_upload_t *academy = (academy_upload_t *)data; printf("Start thread %s\n", __FUNCTION__); while( academy_upload_started && !ardrone_tool_exit() ) { vp_os_mutex_lock(&academy->mutex); vp_os_memset(&academy->user, 0, sizeof(academy_user_t)); academy->callback = &academy_upload_private_callback; academy->connected = FALSE; academy_upload_resetState(academy); vp_os_cond_wait(&academy->cond); vp_os_mutex_unlock(&academy->mutex); while(academy_upload_started && academy->connected) { academy_status = FTP_FAIL; academy_upload_nextState(academy); switch(academy->state.state) { case ACADEMY_STATE_CONNECTION: { struct dirent *dirent = NULL; DIR *dir = NULL; academy_status = FTP_FAIL; // Check if flight_* directory exist in local dir if((dir = opendir(flight_dir)) != NULL) { struct stat statbuf; while(FTP_FAILED(academy_status) && (dirent = readdir(dir)) != NULL) { if((strncmp(dirent->d_name, "flight_", strlen("flight_")) == 0)) { char local_dir[ACADEMY_MAX_FILENAME]; sprintf(dirname, "%s", dirent->d_name); sprintf(local_dir, "%s/%s", flight_dir, dirname); if((stat(local_dir, &statbuf) == 0) && S_ISDIR(statbuf.st_mode)) academy_status = FTP_SUCCESS; } } closedir(dir); } if(FTP_SUCCEDED(academy_status)) { if(academy_ftp == NULL) academy_ftp = ftpConnectFromName(ACADEMY_SERVERNAME, ACADEMY_PORT, academy->user.username, academy->user.password, &academy_status); } } break; case ACADEMY_STATE_PREPARE_PROCESS: academy_status = ftpCd(academy_ftp, "/Uploaded"); if(FTP_FAILED(academy_status)) { ftpMkdir(academy_ftp, "/Uploaded"); academy_status = ftpCd(academy_ftp, "/Uploaded"); } if(FTP_SUCCEDED(academy_status)) { academy_status = ftpList(academy_ftp, &directoryList, NULL); if(FTP_SUCCEDED(academy_status)) { bool_t found = FALSE; char *next_dir = NULL; while(!found && (ptr = academy_get_next_item_with_prefix(directoryList, &next_dir, "flight_", TRUE))) { if(strcmp(ptr, dirname) == 0) { found = TRUE; academy_upload_setState(academy, ACADEMY_STATE_FINISH_PROCESS); } } if(directoryList != NULL) { vp_os_free(directoryList); directoryList = NULL; } } } break; case ACADEMY_STATE_PROCESS: academy_status = ftpCd(academy_ftp, "/Uploading"); if(FTP_FAILED(academy_status)) { ftpMkdir(academy_ftp, "/Uploading"); academy_status = ftpCd(academy_ftp, "/Uploading"); } if(FTP_SUCCEDED(academy_status)) { ftpMkdir(academy_ftp, dirname); academy_status = ftpCd(academy_ftp, dirname); if(FTP_SUCCEDED(academy_status)) { char local_dir[ACADEMY_MAX_FILENAME]; struct dirent *dirent = NULL; DIR *dir = NULL; sprintf(local_dir, "%s/%s", flight_dir, dirname); if((dir = opendir(local_dir)) != NULL) { char local_filename[ACADEMY_MAX_FILENAME]; struct stat statbuf; while(FTP_SUCCEDED(academy_status) && ((dirent = readdir(dir)) != NULL)) { if((strncmp(dirent->d_name, "picture_", strlen("picture_")) == 0) || (strncmp(dirent->d_name, "userbox_", strlen("userbox_")) == 0)) { sprintf(local_filename, "%s/%s", local_dir, dirent->d_name); if((stat(local_filename, &statbuf) == 0) && !S_ISDIR(statbuf.st_mode)) { PA_DEBUG("Put %s from local directory to server...", dirent->d_name); academy_status = ftpPut(academy_ftp, local_filename, dirent->d_name, 1, NULL); if(FTP_SUCCEDED(academy_status)) PA_DEBUG("OK\n"); else PA_DEBUG("ERROR\n"); } } } closedir(dir); } } } break; case ACADEMY_STATE_FINISH_PROCESS: { char local_dir[ACADEMY_MAX_FILENAME]; char src[ACADEMY_MAX_FILENAME]; char dest[ACADEMY_MAX_FILENAME]; sprintf(src, "/Uploading/%s", dirname); sprintf(dest, "/Uploaded/%s", dirname); academy_status = ftpRename(academy_ftp, src, dest); // Penser à supprimer le fichier local academy_status = FTP_FAIL; sprintf(local_dir, "%s/%s", flight_dir, dirname); if(!ftw(local_dir, &academy_remove, 1)) { rmdir(local_dir); academy_status = FTP_SUCCESS; } } break; case ACADEMY_STATE_DISCONNECTION: if(academy_ftp != NULL) ftpClose(&academy_ftp); academy_status = FTP_SUCCESS; break; default: // Nothing to do break; } if(FTP_SUCCEDED(academy_status)) { PA_DEBUG("continue state from %d to %d\n", academy->state.state, (academy->state.state + 1) % ACADEMY_STATE_MAX); academy_upload_stateOK(academy); } else { PA_DEBUG("stop\n"); academy_upload_stateERROR(academy); if(fileList != NULL) { vp_os_free(fileList); fileList = NULL; } if(academy_ftp) ftpClose(&academy_ftp); vp_os_delay(1000); } } if(fileList != NULL) { vp_os_free(fileList); fileList = NULL; } if(academy_ftp) ftpClose(&academy_ftp); } // while THREAD_RETURN(C_OK); }