void MainWindow::on_SaveGame_Copy_clicked() { if(selectedSavegame==NULL) return; QString savegamesPath=savegamePathList[selectedSavegame]; if(!savegameWithMetaData[selectedSavegame]) return; int index=0; while(QDir(savegamePath+QString::number(index)+"/").exists()) index++; QString destinationPath=savegamePath+QString::number(index)+"/"; if(!QDir().mkpath(destinationPath)) { QMessageBox::critical(this,tr("Error"),QString("Unable to write another savegame")); return; } if(!QFile::copy(savegamesPath+"metadata.conf",destinationPath+"metadata.conf")) { rmpath(destinationPath); QMessageBox::critical(this,tr("Error"),QString("Unable to write another savegame (Error: metadata.conf)")); return; } if(!QFile::copy(savegamesPath+"catchchallenger.db.sqlite",destinationPath+"catchchallenger.db.sqlite")) { rmpath(destinationPath); QMessageBox::critical(this,tr("Error"),QString("Unable to write another savegame (Error: catchchallenger.db.sqlite)")); return; } QSettings metaData(destinationPath+"metadata.conf",QSettings::IniFormat); metaData.setValue("title",tr("Copy of %1").arg(metaData.value("title").toString())); updateSavegameList(); }
bool MainWindow::rmpath(const QDir &dir) { if(!dir.exists()) return true; bool allHaveWork=true; QFileInfoList list = dir.entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System,QDir::DirsFirst); for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo(list.at(i)); if(!fileInfo.isDir()) { if(!QFile(fileInfo.absoluteFilePath()).remove()) { qDebug() << "Unable the remove the file: " << fileInfo.absoluteFilePath(); allHaveWork=false; } } else { //return the fonction for scan the new folder if(!rmpath(dir.absolutePath()+'/'+fileInfo.fileName()+'/')) allHaveWork=false; } } if(!allHaveWork) return allHaveWork; if(!dir.rmdir(dir.absolutePath())) { qDebug() << "Unable the remove the file: " << dir.absolutePath(); return false; } return true; }
/** remplace QDir::rmpath() because it return false if the folder not exists and seam bug with parent folder */ bool copyEngineUnitTester::rmpath(const QDir &dir) { if(!dir.exists()) return true; bool allHaveWork=true; QFileInfoList list = dir.entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System,QDir::DirsFirst); for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo(list.at(i)); if(!fileInfo.isDir()) { ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"found a file: "+fileInfo.fileName()); allHaveWork=false; } else { //return the fonction for scan the new folder if(!rmpath(dir.absolutePath()+'/'+fileInfo.fileName()+'/')) allHaveWork=false; } } if(!allHaveWork) return allHaveWork; allHaveWork=dir.rmdir(dir.absolutePath()); if(!allHaveWork) ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to remove the folder: "+dir.absolutePath()); return allHaveWork; }
int rmpathTest(char *szPath) { printf ("rmpathTest for %s...\n", szPath); int rv=rmpath(szPath); if ((rv != 0) || doesFileExist(szPath)) { printf ("rmpath failed for %s, rv %d errno %d\n", szPath, rv, errno); return 1; } return 0; }
void MainWindow::on_SaveGame_Delete_clicked() { if(selectedSavegame==NULL) return; if(!rmpath(savegamePathList[selectedSavegame])) { QMessageBox::critical(this,tr("Error"),QString("Unable to remove the savegame")); return; } updateSavegameList(); }
int mkpathTest(char *szPath, char *szCheck) { int rv = 0; printf ("mkpathTest for %s...\n", szPath); rv=mkpath(szPath, S_IRWXU); if (szCheck==NULL) szCheck=szPath; if ((rv != 0) || !doesFileExist(szCheck)) { printf ("mkpath failed for %s, rv %d errno %d\n", szCheck, rv, errno); return 1; } else { rv=rmpath(szCheck); if (rv != 0) { printf ("rmpath failed for %s, rv %d errno %d\n", szCheck, rv, errno); return 1; } } return 0; }
void MkPath::internalDoThisPath() { if(waitAction || pathList.isEmpty()) return; ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("source: %1, destination: %2, move: %3").arg(pathList.first().source.absoluteFilePath()).arg(pathList.first().destination.absoluteFilePath()).arg(pathList.first().actionType)); #ifdef ULTRACOPIER_PLUGIN_RSYNC if(pathList.first().actionType==ActionType_RmSync) { if(pathList.first().destination.isFile()) { QFile removedFile(pathList.first().destination.absoluteFilePath()); if(!removedFile.remove()) { if(stopIt) return; waitAction=true; ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to remove the inode: "+pathList.first().destination.absoluteFilePath()+", error: "+removedFile.errorString()); emit errorOnFolder(pathList.first().destination,removedFile.errorString()); return; } } else if(!rmpath(pathList.first().destination.absoluteFilePath())) { if(stopIt) return; waitAction=true; ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to remove the inode: "+pathList.first().destination.absoluteFilePath()); emit errorOnFolder(pathList.first().destination,tr("Unable to remove")); return; } pathList.removeFirst(); emit firstFolderFinish(); checkIfCanDoTheNext(); return; } #endif doTheDateTransfer=false; if(keepDate) { if(!pathList.first().source.exists()) { ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"the sources not exists: "+pathList.first().source.absoluteFilePath()); doTheDateTransfer=false; } else if(maxTime>=pathList.first().source.lastModified()) { ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"the sources is older to copy the time: "+pathList.first().source.absoluteFilePath()+": "+maxTime.toString("dd.MM.yyyy hh:mm:ss.zzz")+">="+pathList.first().source.lastModified().toString("dd.MM.yyyy hh:mm:ss.zzz")); doTheDateTransfer=false; } else { doTheDateTransfer=readFileDateTime(pathList.first().source); /*if(!doTheDateTransfer) { if(stopIt) return; waitAction=true; ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to get source folder time: "+pathList.first().source.absoluteFilePath()); emit errorOnFolder(pathList.first().source,tr("Unable to get time")); return; }*/ } } if(dir.exists(pathList.first().destination.absoluteFilePath()) && pathList.first().actionType==ActionType_RealMove) pathList.first().actionType=ActionType_MovePath; if(pathList.first().actionType!=ActionType_RealMove) { if(!dir.exists(pathList.first().destination.absoluteFilePath())) if(!dir.mkpath(pathList.first().destination.absoluteFilePath())) { if(!dir.exists(pathList.first().destination.absoluteFilePath())) { if(stopIt) return; waitAction=true; ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to make the folder: "+pathList.first().destination.absoluteFilePath()); emit errorOnFolder(pathList.first().destination,tr("Unable to create the folder")); return; } } } else { if(!pathList.first().source.exists()) { if(stopIt) return; waitAction=true; ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The source folder don't exists: "+pathList.first().source.absoluteFilePath()); emit errorOnFolder(pathList.first().destination,tr("The source folder don't exists")); return; } if(!pathList.first().source.isDir())//it's really an error? { ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The source is not a folder: "+pathList.first().source.absoluteFilePath()); /*if(stopIt) return; waitAction=true; emit errorOnFolder(pathList.first().destination,tr("The source is not a folder")); return;*/ } if(pathList.first().destination.absoluteFilePath().startsWith(pathList.first().source.absoluteFilePath()+text_slash)) { ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"move into it self: "+pathList.first().destination.absoluteFilePath()); int random=rand(); QFileInfo tempFolder=pathList.first().source.absolutePath()+text_slash+QString::number(random); while(tempFolder.exists()) { random=rand(); tempFolder=pathList.first().source.absolutePath()+text_slash+QString::number(random); } if(!dir.rename(pathList.first().source.absoluteFilePath(),tempFolder.absoluteFilePath())) { if(stopIt) return; waitAction=true; ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to temporary rename the folder: "+pathList.first().destination.absoluteFilePath()); emit errorOnFolder(pathList.first().destination,tr("Unable to temporary rename the folder")); return; } /* http://doc.qt.io/qt-5/qdir.html#rename * On most file systems, rename() fails only if oldName does not exist, or if a file with the new name already exists. if(!dir.mkpath(pathList.first().destination.absolutePath())) { if(!dir.exists(pathList.first().destination.absolutePath())) { if(stopIt) return; waitAction=true; ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to make the folder: "+pathList.first().destination.absoluteFilePath()); emit errorOnFolder(pathList.first().destination,tr("Unable to create the folder")); return; } }*/ if(!dir.rename(tempFolder.absoluteFilePath(),pathList.first().destination.absoluteFilePath())) { if(stopIt) return; waitAction=true; ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to do the final real move the folder: "+pathList.first().destination.absoluteFilePath()); emit errorOnFolder(pathList.first().destination,tr("Unable to do the final real move the folder")); return; } } else { /* http://doc.qt.io/qt-5/qdir.html#rename * On most file systems, rename() fails only if oldName does not exist, or if a file with the new name already exists. if(!dir.mkpath(pathList.first().destination.absolutePath())) { if(!dir.exists(pathList.first().destination.absolutePath())) { if(stopIt) return; waitAction=true; ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to make the folder: "+pathList.first().destination.absoluteFilePath()); emit errorOnFolder(pathList.first().destination,tr("Unable to create the folder")); return; } }*/ if(!dir.rename(pathList.first().source.absoluteFilePath(),pathList.first().destination.absoluteFilePath())) { if(stopIt) return; waitAction=true; ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to make the folder: from: "+pathList.first().source.absoluteFilePath()+", soruce exists: "+QString::number(QDir(pathList.first().source.absoluteFilePath()).exists())+", to: "+pathList.first().destination.absoluteFilePath()+", destination exist: "+QString::number(QDir(pathList.first().destination.absoluteFilePath()).exists())); emit errorOnFolder(pathList.first().destination,tr("Unable to move the folder")); return; } } } if(doTheDateTransfer) if(!writeFileDateTime(pathList.first().destination)) { if(!pathList.first().destination.exists()) ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to set destination folder time (not exists): "+pathList.first().destination.absoluteFilePath()); else if(!pathList.first().destination.isDir()) ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to set destination folder time (not a dir): "+pathList.first().destination.absoluteFilePath()); else ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to set destination folder time: "+pathList.first().destination.absoluteFilePath()); /*if(stopIt) return; waitAction=true; emit errorOnFolder(pathList.first().source,tr("Unable to set time")); return;*/ } if(doRightTransfer && pathList.first().actionType!=ActionType_RealMove) { QFile source(pathList.first().source.absoluteFilePath()); QFile destination(pathList.first().destination.absoluteFilePath()); if(!destination.setPermissions(source.permissions())) { ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to set the right: "+pathList.first().destination.absoluteFilePath()); /*if(stopIt) return; waitAction=true; emit errorOnFolder(pathList.first().source,tr("Unable to set the access-right")); return;*/ } } if(pathList.first().actionType==ActionType_MovePath) { if(!rmpath(pathList.first().source.absoluteFilePath())) { if(stopIt) return; waitAction=true; ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to remove the source folder: "+pathList.first().destination.absoluteFilePath()); emit errorOnFolder(pathList.first().source,tr("Unable to remove")); return; } } pathList.removeFirst(); emit firstFolderFinish(); checkIfCanDoTheNext(); }
bool MkPath::rmpath(const QDir &dir #ifdef ULTRACOPIER_PLUGIN_RSYNC ,const bool &toSync #endif ) { if(!dir.exists()) return true; bool allHaveWork=true; QFileInfoList list = dir.entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System,QDir::DirsFirst); for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo(list.at(i)); if(!fileInfo.isDir()) { #ifdef ULTRACOPIER_PLUGIN_RSYNC if(toSync) { QFile file(fileInfo.absoluteFilePath()); if(!file.remove()) { if(toSync) { QFile file(fileInfo.absoluteFilePath()); if(!file.remove()) { ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to remove a file: "+fileInfo.absoluteFilePath()+", due to: "+file.errorString()); allHaveWork=false; } } else { ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"found a file: "+fileInfo.fileName()); allHaveWork=false; } } } else { ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"found a file: "+fileInfo.fileName()); allHaveWork=false; } #else ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"found a file: "+fileInfo.fileName()); allHaveWork=false; #endif } else { //return the fonction for scan the new folder if(!rmpath(dir.absolutePath()+'/'+fileInfo.fileName()+'/')) allHaveWork=false; } } if(!allHaveWork) return false; allHaveWork=dir.rmdir(dir.absolutePath()); if(!allHaveWork) ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to remove the folder: "+dir.absolutePath()); return allHaveWork; }
static int deleteScaffold(const QString &name) { // Removes files QString str = name; str = str.remove('_').toLower().trimmed(); if (QFileInfo(D_HELPERS + str + ".h").exists()) { QStringList helpers; helpers << str + ".h" << str + ".cpp"; rmfiles(helpers, D_HELPERS, "helpers.pro"); } else if (str.endsWith("validator", Qt::CaseInsensitive)) { QStringList helpers; helpers << str + ".h" << str + ".cpp"; rmfiles(helpers, D_HELPERS, "helpers.pro"); } else { QStringList ctrls, models, views; ctrls << str + "controller.h" << str + "controller.cpp"; models << QLatin1String("sqlobjects") + SEP + str + "object.h" << QLatin1String("mongoobjects") + SEP + str + "object.h" << str + ".h" << str + ".cpp"; // Template system if (templateSystem == "otama") { views << str + SEP + "index.html" << str + SEP + "index.otm" << str + SEP + "show.html" << str + SEP + "show.otm" << str + SEP + "entry.html" << str + SEP + "entry.otm" << str + SEP + "edit.html" << str + SEP + "edit.otm"; } else if (templateSystem == "erb") { views << str + SEP + "index.erb" << str + SEP + "show.erb" << str + SEP + "entry.erb" << str + SEP + "edit.erb"; } else { qCritical("Invalid template system specified: %s", qPrintable(templateSystem)); return 2; } bool allRemove = false; bool quit = false; // Removes controllers rmfiles(ctrls, allRemove, quit, D_CTRLS, "controllers.pro"); if (quit) { ::_exit(1); return 1; } // Removes models rmfiles(models, allRemove, quit, D_MODELS, "models.pro"); if (quit) { ::_exit(1); return 1; } // Removes views QStringList rmd = rmfiles(views, allRemove, quit, D_VIEWS); if (!rmd.isEmpty()) { QString path = D_VIEWS + "_src" + SEP + str; QFile::remove(path + "_indexView.cpp"); QFile::remove(path + "_showView.cpp"); QFile::remove(path + "_entryView.cpp"); QFile::remove(path + "_editView.cpp"); } // Removes the sub-directory rmpath(D_VIEWS + str); } return 0; }
void MainWindow::on_SaveGame_New_clicked() { //load the information NewGame nameGame(this); if(!nameGame.haveSkin()) { QMessageBox::critical(this,tr("Error"),QString("Sorry but no skin found into: %1").arg(QFileInfo(datapackPath+DATAPACK_BASE_PATH_SKIN).absoluteFilePath())); return; } nameGame.exec(); if(!nameGame.haveTheInformation()) return; int index=0; //locate the new folder and create it while(QDir().exists(savegamePath+QString::number(index))) index++; QString savegamesPath=savegamePath+QString::number(index)+"/"; if(!QDir().mkpath(savegamesPath)) { QMessageBox::critical(this,tr("Error"),QString("Unable to write savegame into: %1").arg(savegamesPath)); return; } //initialize the db QFile dbSource(":/catchchallenger.db.sqlite"); if(!dbSource.open(QIODevice::ReadOnly)) { QMessageBox::critical(this,tr("Error"),QString("Unable to open the db model: %1").arg(savegamesPath)); rmpath(savegamesPath); return; } QByteArray dbData=dbSource.readAll(); if(dbData.isEmpty()) { QMessageBox::critical(this,tr("Error"),QString("Unable to read the db model: %1").arg(savegamesPath)); rmpath(savegamesPath); return; } dbSource.close(); QFile dbDestination(savegamesPath+"catchchallenger.db.sqlite"); if(!dbDestination.open(QIODevice::WriteOnly)) { QMessageBox::critical(this,tr("Error"),QString("Unable to write savegame into: %1").arg(savegamesPath)); rmpath(savegamesPath); return; } if(!dbDestination.write(dbData)) { dbDestination.close(); QMessageBox::critical(this,tr("Error"),QString("Unable to write savegame into: %1").arg(savegamesPath)); rmpath(savegamesPath); return; } dbDestination.close(); //initialise the pass QString pass=CatchChallenger::FacilityLib::randomPassword("abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890",16); QCryptographicHash hash(QCryptographicHash::Sha1); hash.addData(pass.toUtf8()); QByteArray passHash=hash.result(); //initialise the meta data bool settingOk=false; { QSettings metaData(savegamesPath+"metadata.conf",QSettings::IniFormat); if(metaData.isWritable()) { if(metaData.status()==QSettings::NoError) { metaData.setValue("title",nameGame.gameName()); metaData.setValue("location","Starting city"); metaData.setValue("time_played",0); metaData.setValue("pass",pass); settingOk=true; } else qDebug() << "Settings error: " << metaData.status(); } } //check if meta data is ok, and db can be open if(!settingOk) { QMessageBox::critical(this,tr("Error"),QString("Unable to write savegame into: %1").arg(savegamesPath)); rmpath(savegamesPath); return; } QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName(savegamesPath+"catchchallenger.db.sqlite"); if(!db.open()) { QMessageBox::critical(this,tr("Error"),QString("Unable to initialize the savegame\nError: open database: %1").arg(db.lastError().text())); rmpath(savegamesPath); return; } //empty the player db and put the new player into it QSqlQuery sqlQuery; if(!sqlQuery.exec(QString("DELETE FROM \"player\""))) { db.close(); QMessageBox::critical(this,tr("Error"),QString("Unable to initialize the savegame (error: clean the table: %1)").arg(sqlQuery.lastError().text())); rmpath(savegamesPath); return; } if(!sqlQuery.exec(QString("INSERT INTO \"player\"(\"id\",\"login\",\"password\",\"pseudo\",\"skin\",\"position_x\",\"position_y\",\"orientation\",\"map_name\",\"type\",\"clan\",\"cash\") VALUES(1,'admin','%1','%2','%3',1,1,'bottom','world/0.0.tmx','normal',NULL,0);").arg(QString(passHash.toHex())).arg(nameGame.pseudo()).arg(nameGame.skin()))) { db.close(); QMessageBox::critical(this,tr("Error"),QString("Unable to initialize the savegame (error: initialize the entry: %1)").arg(sqlQuery.lastError().text())); rmpath(savegamesPath); return; } db.close(); updateSavegameList(); play(savegamesPath); }
copyEngineUnitTester::~copyEngineUnitTester() { rmpath(path); }