diff options
author | Thomas Preud'homme <robotux@celest.fr> | 2013-03-21 11:01:59 +0100 |
---|---|---|
committer | Thomas Preud'homme <robotux@celest.fr> | 2013-03-21 11:01:59 +0100 |
commit | e297dbd8052ef4e66f069e2dd1865ae7fa8af28e (patch) | |
tree | 342fea0a2f6f33b8b62dad2d1729f8209da1a1ba /patch | |
parent | 8f9f382e1c97cab2e72e97495650c73ac4b97314 (diff) |
Imported Upstream version 0.3.1.0
Diffstat (limited to 'patch')
-rw-r--r-- | patch/comercial/rsync-copy-engine.patch | 902 | ||||
-rw-r--r-- | patch/opensource/KDE-Ultracopier.patch | 290 | ||||
-rw-r--r-- | patch/opensource/options-with-pass.patch | 336 |
3 files changed, 1528 insertions, 0 deletions
diff --git a/patch/comercial/rsync-copy-engine.patch b/patch/comercial/rsync-copy-engine.patch new file mode 100644 index 0000000..f469d50 --- /dev/null +++ b/patch/comercial/rsync-copy-engine.patch @@ -0,0 +1,902 @@ +diff -U 3 -H -d -r -N -- Ultracopier-0.3/ListThread.cpp Rsync/ListThread.cpp +--- Ultracopier-0.3/ListThread.cpp 2012-06-26 14:12:53.082114806 +0200 ++++ Rsync/ListThread.cpp 2012-06-29 22:21:40.395733284 +0200 +@@ -28,6 +28,7 @@ + numberOfInodeOperation = 0; + maxSpeed = 0; + doRightTransfer = false; ++ rsync = false; + keepDate = false; + blockSize = 1024; + osBufferLimit = 512; +@@ -265,6 +266,21 @@ + this->autoStart=autoStart; + } + ++/// \brief set rsync ++void ListThread::setRsync(const bool rsync) ++{ ++ this->rsync=rsync; ++ int index=0; ++ loop_sub_size_transfer_thread_search=transferThreadList.size(); ++ while(index<loop_sub_size_transfer_thread_search) ++ { ++ transferThreadList.at(index)->setRsync(rsync); ++ index++; ++ } ++ for(int i=0;i<scanFileOrFolderThreadsPool.size();i++) ++ scanFileOrFolderThreadsPool.at(i)->setRsync(rsync); ++} ++ + //set check destination folder + void ListThread::setCheckDestinationFolderExists(const bool checkDestinationFolderExists) + { +@@ -327,11 +343,13 @@ + #endif + connect(scanFileOrFolderThreadsPool.last(),SIGNAL(newFolderListing(QString)), this,SIGNAL(newFolderListing(QString))); + connect(scanFileOrFolderThreadsPool.last(),SIGNAL(addToRmPath(QString,int)), this,SLOT(addToRmPath(QString,int)), Qt::QueuedConnection); ++ connect(scanFileOrFolderThreadsPool.last(),SIGNAL(addToRmForRsync(QString)), this,SLOT(addToRmForRsync(QString)), Qt::QueuedConnection); + connect(scanFileOrFolderThreadsPool.last(),SIGNAL(addToMkPath(QString)), this,SLOT(addToMkPath(QString)), Qt::QueuedConnection); + + connect(scanFileOrFolderThreadsPool.last(),SIGNAL(errorOnFolder(QFileInfo,QString)), this,SLOT(errorOnFolder(QFileInfo,QString)), Qt::QueuedConnection); + connect(scanFileOrFolderThreadsPool.last(),SIGNAL(folderAlreadyExists(QFileInfo,QFileInfo,bool)), this,SLOT(folderAlreadyExists(QFileInfo,QFileInfo,bool)), Qt::QueuedConnection); + ++ scanFileOrFolderThreadsPool.last()->setRsync(rsync); + scanFileOrFolderThreadsPool.last()->setFilters(include,exclude); + scanFileOrFolderThreadsPool.last()->setCheckDestinationFolderExists(checkDestinationFolderExists && alwaysDoThisActionForFolderExists!=FolderExists_Merge); + if(scanFileOrFolderThreadsPool.size()==1) +@@ -761,6 +779,18 @@ + actionToDoListInode_afterTheTransfer << temp; + } + ++//rsync rm ++void ListThread::addToRmForRsync(const QString& inode) ++{ ++ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"inode: "+inode); ++ actionToDoInode temp; ++ temp.type = ActionType_RmSync; ++ temp.id = generateIdNumber(); ++ temp.folder.setFile(inode); ++ temp.isRunning = false; ++ actionToDoListInode << temp; ++} ++ + //send action done + void ListThread::sendActionDone() + { +@@ -1526,7 +1556,7 @@ + loop_size=actionToDoListInode.size(); + while(int_for_loop<loop_size) + { +- if(actionToDoListInode.at(int_for_loop).type==ActionType_RmPath) ++ if(actionToDoListInode.at(int_for_loop).type==ActionType_RmPath || actionToDoListInode.at(int_for_loop).type==ActionType_RmSync) + { + ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("stop rmpath: %1").arg(actionToDoListInode.at(int_for_loop).folder.absoluteFilePath())); + actionToDoListInode.removeAt(int_for_loop); +@@ -1658,6 +1688,7 @@ + last->set_osBuffer(osBuffer); + last->set_osBufferLimited(osBufferLimited); + last->set_osBufferLimit(osBufferLimit); ++ last->setRsync(rsync); + + #ifdef ULTRACOPIER_PLUGIN_DEBUG + connect(last,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), Qt::QueuedConnection); +@@ -1669,7 +1700,7 @@ + connect(last,SIGNAL(preOperationStopped()), this,SLOT(doNewActions_start_transfer()), Qt::QueuedConnection); + connect(last,SIGNAL(postOperationStopped()), this,SLOT(transferInodeIsClosed()), Qt::QueuedConnection); + connect(last,SIGNAL(checkIfItCanBeResumed()), this,SLOT(restartTransferIfItCan()), Qt::QueuedConnection); +- connect(last,SIGNAL(pushStat(TransferStat,quint64)), this,SLOT(newTransferStat(TransferStat,quint64)), Qt::QueuedConnection); ++ connect(last,SIGNAL(pushStat(TransferStat,quint64)), this,SLOT(newTransferStat(TransferStat,quint64)), Qt::QueuedConnection); + + connect(this,SIGNAL(send_sendNewRenamingRules(QString,QString)), last,SLOT(setRenamingRules(QString,QString)), Qt::QueuedConnection); + +diff -U 3 -H -d -r -N -- Ultracopier-0.3/ListThread.h Rsync/ListThread.h +--- Ultracopier-0.3/ListThread.h 2012-06-25 16:46:19.931261209 +0200 ++++ Rsync/ListThread.h 2012-06-29 21:53:37.495762350 +0200 +@@ -77,7 +77,8 @@ + enum ActionType + { + ActionType_MkPath=1, +- ActionType_RmPath=2 ++ ActionType_RmPath=2, ++ ActionType_RmSync=3 + }; + /// \brief to store one action to do + struct actionToDoInode +@@ -155,6 +156,8 @@ + void setBlockSize(const int blockSize); + /// \brief set auto start + void setAutoStart(const bool autoStart); ++ /// \brief set rsync ++ void setRsync(const bool rsync); + /// \brief set check destination folder + void setCheckDestinationFolderExists(const bool checkDestinationFolderExists); + /// \brief set data local to the thread +@@ -196,6 +199,7 @@ + quint64 bytesToTransfer; + quint64 bytesTransfered; + bool autoStart; ++ bool rsync; + bool putInPause; + QList<returnActionOnCopyList> actionDone;///< to action to send to the interface + quint64 idIncrementNumber;///< to store the last id returned +@@ -302,6 +306,8 @@ + quint64 addToMkPath(const QString& folder); + //add rm path to do + void addToRmPath(const QString& folder,const int& inodeToRemove); ++ //rsync rm ++ void addToRmForRsync(const QString& inode); + //send the progression, after full reset of the interface (then all is empty) + void syncTransferList_internal(); + signals: +diff -U 3 -H -d -r -N -- Ultracopier-0.3/ListThread_InodeAction.cpp Rsync/ListThread_InodeAction.cpp +--- Ultracopier-0.3/ListThread_InodeAction.cpp 2012-06-29 21:57:47.000000000 +0200 ++++ Rsync/ListThread_InodeAction.cpp 2012-06-29 22:19:11.515735854 +0200 +@@ -19,6 +19,14 @@ + if(numberOfInodeOperation>=ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT) + return; + break; ++case ActionType_RmSync: ++ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("launch rm to sync: %1").arg(currentActionToDoInode.folder.absoluteFilePath())); ++ rmPathQueue.addPath(currentActionToDoInode.folder.absoluteFilePath(),true); ++ currentActionToDoInode.isRunning=true; ++ numberOfInodeOperation++; ++ if(numberOfInodeOperation>=ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT) ++ return; ++break; + case ActionType_RmPath: + /* What is this code? + if((int_for_loop+number_rm_path_moved)>=(loop_size-1)) +@@ -34,7 +42,7 @@ + if(numberOfTranferRuning>0) + ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("skipped because already inode = 0 and transfer is running: %1").arg(currentActionToDoInode.folder.absoluteFilePath())); + ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("launch rmpath: %1").arg(currentActionToDoInode.folder.absoluteFilePath())); +- rmPathQueue.addPath(currentActionToDoInode.folder.absoluteFilePath()); ++ rmPathQueue.addPath(currentActionToDoInode.folder.absoluteFilePath(),false); + currentActionToDoInode.isRunning=true; + numberOfInodeOperation++; + if(numberOfInodeOperation>=ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT) +diff -U 3 -H -d -r -N -- Ultracopier-0.3/RmPath.cpp Rsync/RmPath.cpp +--- Ultracopier-0.3/RmPath.cpp 2012-06-29 22:37:41.715716675 +0200 ++++ Rsync/RmPath.cpp 2012-06-29 22:42:25.105711780 +0200 +@@ -16,12 +16,12 @@ + wait(); + } + +-void RmPath::addPath(const QString &path) ++void RmPath::addPath(const QString &path,const bool &toSync) + { + ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+path); + if(stopIt) + return; +- emit internalStartAddPath(path); ++ emit internalStartAddPath(path,toSync); + } + + void RmPath::skip() +@@ -38,7 +38,7 @@ + + void RmPath::run() + { +- connect(this,SIGNAL(internalStartAddPath(QString)),this,SLOT(internalAddPath(QString)),Qt::QueuedConnection); ++ connect(this,SIGNAL(internalStartAddPath(QString,bool)),this,SLOT(internalAddPath(QString,bool)),Qt::QueuedConnection); + connect(this,SIGNAL(internalStartDoThisPath()),this,SLOT(internalDoThisPath()),Qt::QueuedConnection); + connect(this,SIGNAL(internalStartSkip()),this,SLOT(internalSkip()),Qt::QueuedConnection); + connect(this,SIGNAL(internalStartRetry()),this,SLOT(internalRetry()),Qt::QueuedConnection); +@@ -50,23 +50,63 @@ + if(waitAction || pathList.isEmpty()) + return; + ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+pathList.first()); +- if(!rmpath(pathList.first())) ++ if(!toSyncList.first()) + { +- if(stopIt) ++ if(!rmpath(pathList.first(),false)) ++ { ++ if(stopIt) ++ return; ++ waitAction=true; ++ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to remove the folder: "+pathList.first()); ++ emit errorOnFolder(pathList.first(),tr("Unable to remove the folder")); + return; +- waitAction=true; +- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to remove the folder: "+pathList.first()); +- emit errorOnFolder(pathList.first(),tr("Unable to remove the folder")); +- return; ++ } ++ } ++ else ++ { ++ if(QFileInfo(pathList.first()).isDir()) ++ { ++ if(!rmpath(pathList.first(),true)) ++ { ++ if(stopIt) ++ return; ++ waitAction=true; ++ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to remove the folder: "+pathList.first()); ++ emit errorOnFolder(pathList.first(),tr("Unable to remove the folder")); ++ return; ++ } ++ } ++ else if(!rmfile(pathList.first())) ++ { ++ if(stopIt) ++ return; ++ waitAction=true; ++ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to remove the file: "+pathList.first()); ++ emit errorOnFolder(pathList.first(),tr("Unable to remove the file")); ++ return; ++ } + } + pathList.removeFirst(); ++ toSyncList.removeFirst(); + emit firstFolderFinish(); + checkIfCanDoTheNext(); + } + ++bool RmPath::rmfile(QString filePath) ++{ ++ QFile file(filePath); ++ if(!file.remove()) ++ { ++ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to remove the file: "+file.fileName()+", error: "+file.errorString()); ++ return false; ++ } ++ else ++ return true; ++} ++ + /** remplace QDir::rmpath() because it return false if the folder not exists + and seam bug with parent folder */ +-bool RmPath::rmpath(const QDir &dir) ++bool RmPath::rmpath(const QDir &dir,const bool &toSync) + { + if(!dir.exists()) + return true; +@@ -77,28 +117,40 @@ + QFileInfo fileInfo(list.at(i)); + if(!fileInfo.isDir()) + { +- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"found a file: "+fileInfo.fileName()); +- allHaveWork=false; ++ if(toSync) ++ { ++ if(!rmfile(fileInfo.absoluteFilePath())) ++ { ++ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to remove a file: "+fileInfo.fileName()); ++ allHaveWork=false; ++ } ++ } ++ else ++ { ++ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"found a file: "+fileInfo.fileName()); ++ allHaveWork=false; ++ } + } + else + { + //return the fonction for scan the new folder +- if(!rmpath(dir.absolutePath()+'/'+fileInfo.fileName()+'/')) ++ if(!rmpath(dir.absolutePath()+'/'+fileInfo.fileName()+'/',toSync)) + allHaveWork=false; + } + } + if(!allHaveWork) +- return allHaveWork; ++ return false; + allHaveWork=dir.rmdir(dir.absolutePath()); + if(!allHaveWork) + ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to remove the folder: "+dir.absolutePath()); + return allHaveWork; + } + +-void RmPath::internalAddPath(const QString &path) ++void RmPath::internalAddPath(const QString &path,const bool &toSync) + { + ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+path); + pathList << path; ++ toSyncList << toSync; + if(!waitAction) + checkIfCanDoTheNext(); + } +diff -U 3 -H -d -r -N -- Ultracopier-0.3/RmPath.h Rsync/RmPath.h +--- Ultracopier-0.3/RmPath.h 2012-03-19 17:34:43.572371290 +0100 ++++ Rsync/RmPath.h 2012-06-29 22:36:02.135718395 +0200 +@@ -24,11 +24,11 @@ + explicit RmPath(); + ~RmPath(); + /// \brief add new path to remove +- void addPath(const QString &path); ++ void addPath(const QString &path,const bool &toSync); + signals: + void errorOnFolder(const QFileInfo &,const QString &); + void firstFolderFinish(); +- void internalStartAddPath(const QString &path); ++ void internalStartAddPath(const QString &path,const bool &toSync); + void internalStartDoThisPath(); + void internalStartSkip(); + void internalStartRetry(); +@@ -42,12 +42,14 @@ + bool stopIt; + bool skipIt; + QStringList pathList; ++ QList<bool> toSyncList; + void checkIfCanDoTheNext(); + QDir dir; +- bool rmpath(const QDir &dir); ++ bool rmpath(const QDir &dir,const bool &toSync); ++ bool rmfile(QString filePath); + private slots: + void internalDoThisPath(); +- void internalAddPath(const QString &path); ++ void internalAddPath(const QString &path,const bool &toSync); + void internalSkip(); + void internalRetry(); + }; +diff -U 3 -H -d -r -N -- Ultracopier-0.3/TransferThread.cpp Rsync/TransferThread.cpp +--- Ultracopier-0.3/TransferThread.cpp 2012-06-29 15:58:31.546130402 +0200 ++++ Rsync/TransferThread.cpp 2012-06-29 18:58:24.095943961 +0200 +@@ -26,6 +26,7 @@ + alwaysDoFileExistsAction= FileExists_NotSet; + readError = false; + writeError = false; ++ rsync = false; + this->mkpathTransfer = mkpathTransfer; + readThread.setWriteThread(&writeThread); + +@@ -278,7 +279,7 @@ + { + //check if destination exists + ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] overwrite: "+QString::number(fileExistsAction)+", always action: "+QString::number(alwaysDoFileExistsAction)); +- if(alwaysDoFileExistsAction==FileExists_Overwrite || readError || writeError) ++ if(alwaysDoFileExistsAction==FileExists_Overwrite || rsync || readError || writeError) + return false; + if(destinationInfo.exists()) + { +@@ -1124,6 +1125,12 @@ + emit tryPutAtBottom(); + } + ++/// \brief set rsync ++void TransferThread::setRsync(const bool rsync) ++{ ++ this->rsync=rsync; ++} ++ + void TransferThread::set_osBufferLimit(unsigned int osBufferLimit) + { + this->osBufferLimit=osBufferLimit; +diff -U 3 -H -d -r -N -- Ultracopier-0.3/TransferThread.h Rsync/TransferThread.h +--- Ultracopier-0.3/TransferThread.h 2012-06-26 11:10:54.541994070 +0200 ++++ Rsync/TransferThread.h 2012-06-29 15:54:29.286134585 +0200 +@@ -113,6 +113,8 @@ + qint64 copiedSize(); + /// \brief put the current file at bottom + void putAtBottom(); ++ /// \brief set rsync ++ void setRsync(const bool rsync); + + void set_osBufferLimit(unsigned int osBufferLimit); + void setRenamingRules(QString firstRenamingRule,QString otherRenamingRule); +@@ -166,6 +168,7 @@ + bool readIsClosedVariable; + bool writeIsClosedVariable; + bool canBeMovedDirectlyVariable; ++ bool rsync; + QByteArray sourceChecksum,destinationChecksum; + volatile bool stopIt; + volatile bool canStartTransfer; +diff -U 3 -H -d -r -N -- Ultracopier-0.3/copyEngine.cpp Rsync/copyEngine.cpp +--- Ultracopier-0.3/copyEngine.cpp 2012-06-26 14:14:40.892116001 +0200 ++++ Rsync/copyEngine.cpp 2012-06-29 21:22:50.945794251 +0200 +@@ -186,6 +186,7 @@ + connect(ui->keepDate, SIGNAL(toggled(bool)), &threadOfTheTransfer, SLOT(setKeepDate(bool))); + connect(ui->blockSize, SIGNAL(valueChanged(int)), &threadOfTheTransfer, SLOT(setBlockSize(int)));*/ + connect(ui->autoStart, SIGNAL(toggled(bool)), this, SLOT(setAutoStart(bool))); ++ connect(ui->rsync, SIGNAL(toggled(bool)), this, SLOT(setRsync(bool))); + connect(ui->checkBoxDestinationFolderExists, SIGNAL(toggled(bool)), this, SLOT(setCheckDestinationFolderExists(bool))); + uiIsInstalled=true; + setRightTransfer(doRightTransfer); +@@ -193,6 +194,7 @@ + setSpeedLimitation(maxSpeed); + setBlockSize(blockSize); + setAutoStart(autoStart); ++ setRsync(rsync); + setCheckDestinationFolderExists(checkDestinationFolderExists); + set_doChecksum(doChecksum); + set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible); +@@ -216,6 +218,7 @@ + connect(ui->keepDate, SIGNAL(toggled(bool)), this,SLOT(setKeepDate(bool))); + connect(ui->blockSize, SIGNAL(valueChanged(int)), this,SLOT(setBlockSize(int))); + connect(ui->autoStart, SIGNAL(toggled(bool)), this,SLOT(setAutoStart(bool))); ++ connect(ui->rsync, SIGNAL(toggled(bool)), this,SLOT(setRsync(bool))); + connect(ui->doChecksum, SIGNAL(toggled(bool)), this,SLOT(doChecksum_toggled(bool))); + connect(ui->checksumIgnoreIfImpossible, SIGNAL(toggled(bool)), this,SLOT(checksumIgnoreIfImpossible_toggled(bool))); + connect(ui->checksumOnlyOnError, SIGNAL(toggled(bool)), this,SLOT(checksumOnlyOnError_toggled(bool))); +@@ -505,6 +508,13 @@ + /** \brief give the forced mode, to export/import transfer list */ + void copyEngine::forceMode(const CopyMode &mode) + { ++ if(mode==Move) ++ { ++ listThread->setRsync(false); ++ rsync=false; ++ } ++ if(uiIsInstalled) ++ ui->rsync->setEnabled(mode==Copy); + if(forcedMode) + { + ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Mode forced previously")); +@@ -617,6 +627,19 @@ + listThread->setAutoStart(autoStart); + } + ++/// \brief set rsync ++void copyEngine::setRsync(const bool rsync) ++{ ++ this->rsync=rsync; ++ if(uiIsInstalled) ++ { ++ ui->rsync->setChecked(rsync); ++ ui->rsync->setEnabled(forcedMode && mode==Copy); ++ ui->label_rsync->setEnabled(forcedMode && mode==Copy); ++ } ++ listThread->setRsync(rsync); ++} ++ + //set check destination folder + void copyEngine::setCheckDestinationFolderExists(const bool checkDestinationFolderExists) + { +diff -U 3 -H -d -r -N -- Ultracopier-0.3/copyEngine.h Rsync/copyEngine.h +--- Ultracopier-0.3/copyEngine.h 2012-06-25 16:50:12.191263770 +0200 ++++ Rsync/copyEngine.h 2012-06-29 15:49:45.856139485 +0200 +@@ -60,6 +60,7 @@ + bool keepDate; + int blockSize; + bool autoStart; ++ bool rsync; + bool checkDestinationFolderExists; + FileExistsAction alwaysDoThisActionForFileExists; + FileErrorAction alwaysDoThisActionForFileError; +@@ -273,6 +274,8 @@ + void setBlockSize(const int blockSize); + /// \brief set auto start + void setAutoStart(const bool autoStart); ++ /// \brief set rsync ++ void setRsync(const bool rsync); + /// \brief set if need check if the destination folder exists + void setCheckDestinationFolderExists(const bool checkDestinationFolderExists); + /// \brief reset widget +diff -U 3 -H -d -r -N -- Ultracopier-0.3/copyEngine.pro.user Rsync/copyEngine.pro.user +--- Ultracopier-0.3/copyEngine.pro.user 2012-06-26 15:50:53.722179836 +0200 ++++ Rsync/copyEngine.pro.user 2012-06-29 22:42:24.025711798 +0200 +@@ -1,6 +1,6 @@ + <?xml version="1.0" encoding="UTF-8"?> + <!DOCTYPE QtCreatorProject> +-<!-- Written by Qt Creator 2.5.0, 2012-06-26T15:50:53. --> ++<!-- Written by Qt Creator 2.5.0, 2012-06-29T22:42:24. --> + <qtcreator> + <data> + <variable>ProjectExplorer.Project.ActiveTarget</variable> +@@ -163,7 +163,113 @@ + <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">2</value> + <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value> + </valuemap> +- <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">2</value> ++ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2"> ++ <value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">ProjectExplorer.ToolChain.Gcc:{d6ee78f7-3364-4f54-a93f-b3c1e2a8c8c9}</value> ++ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> ++ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> ++ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> ++ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value> ++ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value> ++ <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value> ++ <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> ++ </valuemap> ++ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> ++ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> ++ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value> ++ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value> ++ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> ++ </valuemap> ++ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> ++ </valuemap> ++ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> ++ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> ++ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> ++ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value> ++ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> ++ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> ++ </valuemap> ++ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> ++ </valuemap> ++ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> ++ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> ++ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 5.0.0 (qt-everywhere-opensource-src-5.0.0) Release</value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> ++ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value> ++ <value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">/home/user/Desktop/ultracopier/sources/plugins/CopyEngine/copyEngine-build-desktop-Qt_5_0_0__qt-everywhere-opensource-src-5_0_0__Release</value> ++ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">3</value> ++ <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value> ++ </valuemap> ++ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.3"> ++ <value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">ProjectExplorer.ToolChain.Gcc:{d6ee78f7-3364-4f54-a93f-b3c1e2a8c8c9}</value> ++ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> ++ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> ++ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> ++ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value> ++ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value> ++ <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value> ++ <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> ++ </valuemap> ++ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> ++ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> ++ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value> ++ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value> ++ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> ++ </valuemap> ++ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> ++ </valuemap> ++ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> ++ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> ++ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> ++ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value> ++ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> ++ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> ++ </valuemap> ++ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> ++ </valuemap> ++ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> ++ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> ++ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 5.0.0 (qt-everywhere-opensource-src-5.0.0) Debug</value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> ++ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> ++ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value> ++ <value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">/home/user/Desktop/ultracopier/sources/plugins/CopyEngine/copyEngine-build-desktop-Qt_5_0_0__qt-everywhere-opensource-src-5_0_0__Debug</value> ++ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">3</value> ++ <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value> ++ </valuemap> ++ <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">4</value> + <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value> +diff -U 3 -H -d -r -N -- Ultracopier-0.3/factory.cpp Rsync/factory.cpp +--- Ultracopier-0.3/factory.cpp 2012-06-26 14:10:39.972113336 +0200 ++++ Rsync/factory.cpp 2012-06-29 15:40:43.606148853 +0200 +@@ -35,6 +35,7 @@ + connect(ui->keepDate, SIGNAL(toggled(bool)), this,SLOT(setKeepDate(bool))); + connect(ui->blockSize, SIGNAL(valueChanged(int)), this,SLOT(setBlockSize(int))); + connect(ui->autoStart, SIGNAL(toggled(bool)), this,SLOT(setAutoStart(bool))); ++ connect(ui->rsync, SIGNAL(toggled(bool)), this,SLOT(setRsync(bool))); + connect(ui->doChecksum, SIGNAL(toggled(bool)), this,SLOT(doChecksum_toggled(bool))); + connect(ui->checksumIgnoreIfImpossible, SIGNAL(toggled(bool)), this,SLOT(checksumIgnoreIfImpossible_toggled(bool))); + connect(ui->checksumOnlyOnError, SIGNAL(toggled(bool)), this,SLOT(checksumOnlyOnError_toggled(bool))); +@@ -71,6 +72,7 @@ + realObject->setKeepDate( optionsEngine->getOptionValue("keepDate").toBool()); + realObject->setBlockSize( optionsEngine->getOptionValue("blockSize").toInt()); + realObject->setAutoStart( optionsEngine->getOptionValue("autoStart").toBool()); ++ realObject->setRsync( optionsEngine->getOptionValue("rsync").toBool()); + realObject->on_comboBoxFolderColision_currentIndexChanged(ui->comboBoxFolderColision->currentIndex()); + realObject->on_comboBoxFolderError_currentIndexChanged(ui->comboBoxFolderError->currentIndex()); + realObject->setCheckDestinationFolderExists( optionsEngine->getOptionValue("checkDestinationFolder").toBool()); +@@ -123,6 +125,7 @@ + KeysList.append(qMakePair(QString("keepDate"),QVariant(true))); + KeysList.append(qMakePair(QString("blockSize"),QVariant(1024)));//1024KB as default + KeysList.append(qMakePair(QString("autoStart"),QVariant(true))); ++ KeysList.append(qMakePair(QString("rsync"),QVariant(true))); + KeysList.append(qMakePair(QString("folderError"),QVariant(0))); + KeysList.append(qMakePair(QString("folderColision"),QVariant(0))); + KeysList.append(qMakePair(QString("checkDestinationFolder"),QVariant(true))); +@@ -151,6 +154,7 @@ + ui->keepDate->setChecked(optionsEngine->getOptionValue("keepDate").toBool()); + ui->blockSize->setValue(optionsEngine->getOptionValue("blockSize").toUInt()); + ui->autoStart->setChecked(optionsEngine->getOptionValue("autoStart").toBool()); ++ ui->rsync->setChecked(optionsEngine->getOptionValue("rsync").toBool()); + ui->comboBoxFolderError->setCurrentIndex(optionsEngine->getOptionValue("folderError").toUInt()); + ui->comboBoxFolderColision->setCurrentIndex(optionsEngine->getOptionValue("folderColision").toUInt()); + ui->checkBoxDestinationFolderExists->setChecked(optionsEngine->getOptionValue("checkDestinationFolder").toBool()); +@@ -287,6 +291,15 @@ + else + ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented"); + } ++ ++void Factory::setRsync(bool rsync) ++{ ++ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed"); ++ if(optionsEngine!=NULL) ++ optionsEngine->setOptionValue("rsync",rsync); ++ else ++ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented"); ++} + + void Factory::newLanguageLoaded() + { +diff -U 3 -H -d -r -N -- Ultracopier-0.3/factory.h Rsync/factory.h +--- Ultracopier-0.3/factory.h 2012-05-19 15:44:05.354039716 +0200 ++++ Rsync/factory.h 2012-06-29 15:40:20.016149261 +0200 +@@ -71,6 +71,7 @@ + void setKeepDate(bool keepDate); + void setBlockSize(int blockSize); + void setAutoStart(bool autoStart); ++ void setRsync(bool rsync); + void showFilterDialog(); + void sendNewFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions); + void doChecksum_toggled(bool); +diff -U 3 -H -d -r -N -- Ultracopier-0.3/informations.xml Rsync/informations.xml +--- Ultracopier-0.3/informations.xml 2012-06-25 17:31:49.331291383 +0200 ++++ Rsync/informations.xml 2012-06-29 15:11:53.696178734 +0200 +@@ -1,7 +1,7 @@ + <?xml version="1.0" encoding="UTF-8"?> + <package> +- <title xml:lang="en"><![CDATA[Copy engine of Ultracopier 0.3]]></title><!-- english is required --> +- <title xml:lang="fr"><![CDATA[Moteur de copie d'ultracopier 0.3]]></title> ++ <title xml:lang="en"><![CDATA[Rsync copy engine]]></title><!-- english is required --> ++ <title xml:lang="fr"><![CDATA[Moteur de copie rsync]]></title> + <!-- What kind of plugin this is --> + <category>CopyEngine</category> + <!-- Who wrote this plugin --> +@@ -14,12 +14,12 @@ + <!-- the architecture code of this plugin, found PlatformMacro.h into ultracopier source --> + <architecture>linux-x86_64-pc</architecture> + <!-- Detailed description --> +- <description xml:lang="en"><![CDATA[Copy engine of Ultracopier 0.3, do in Qt for all platform, and copy by stream]]></description> +- <description xml:lang="fr"><![CDATA[Moteur de copie d'ultracopier 0.3, fait en Qt pour toutes les plateformes, et copie par stream]]></description> ++ <description xml:lang="en"><![CDATA[Rsync copy engine, variant of the official copy engine to provide simple way to do backups]]></description> ++ <description xml:lang="fr"><![CDATA[Moteur de copie rsync, variante du moteur de copie officiel pour fournir une maniƩre simple de faire des backups]]></description> + <!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number --> + <version>0.3.0.10</version> + <!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. --> +- <name>Ultracopier-0.3</name> ++ <name>Rsync</name> + <!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. --> + <dependencies><![CDATA[ + >=ultracopier-0.3.0.10 +diff -U 3 -H -d -r -N -- Ultracopier-0.3/options.ui Rsync/options.ui +--- Ultracopier-0.3/options.ui 2012-06-20 14:56:21.509908805 +0200 ++++ Rsync/options.ui 2012-06-29 22:15:47.595739375 +0200 +@@ -6,8 +6,8 @@ + <rect> + <x>0</x> + <y>0</y> +- <width>356</width> +- <height>376</height> ++ <width>354</width> ++ <height>399</height> + </rect> + </property> + <layout class="QGridLayout" name="gridLayout"> +@@ -122,7 +122,7 @@ + <item row="6" column="2"> + <widget class="QCheckBox" name="checkBoxDestinationFolderExists"/> + </item> +- <item row="7" column="0" colspan="3"> ++ <item row="8" column="0" colspan="3"> + <widget class="QGroupBox" name="groupBox"> + <property name="title"> + <string>Checksum</string> +@@ -175,24 +175,24 @@ + </layout> + </widget> + </item> +- <item row="8" column="1"> ++ <item row="9" column="1"> + <widget class="QLabel" name="label_3"> + <property name="text"> + <string>Enable OS buffer</string> + </property> + </widget> + </item> +- <item row="8" column="2"> ++ <item row="9" column="2"> + <widget class="QCheckBox" name="osBuffer"/> + </item> +- <item row="9" column="0" colspan="2"> ++ <item row="10" column="0" colspan="2"> + <widget class="QCheckBox" name="osBufferLimited"> + <property name="text"> + <string>OS buffer only if smaller than</string> + </property> + </widget> + </item> +- <item row="9" column="2"> ++ <item row="10" column="2"> + <widget class="QSpinBox" name="osBufferLimit"> + <property name="suffix"> + <string>KB</string> +@@ -215,7 +215,7 @@ + </property> + </widget> + </item> +- <item row="12" column="1"> ++ <item row="13" column="1"> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> +@@ -228,20 +228,34 @@ + </property> + </spacer> + </item> +- <item row="11" column="1"> ++ <item row="12" column="1"> + <widget class="QPushButton" name="filters"> + <property name="text"> + <string>Filters</string> + </property> + </widget> + </item> +- <item row="10" column="1"> ++ <item row="11" column="1"> + <widget class="QPushButton" name="renamingRules"> + <property name="text"> + <string>Renaming rules</string> + </property> + </widget> + </item> ++ <item row="7" column="2"> ++ <widget class="QCheckBox" name="rsync"> ++ <property name="text"> ++ <string/> ++ </property> ++ </widget> ++ </item> ++ <item row="7" column="0" colspan="2"> ++ <widget class="QLabel" name="label_rsync"> ++ <property name="text"> ++ <string>Rsync (only in copy mode)</string> ++ </property> ++ </widget> ++ </item> + </layout> + </widget> + <resources/> +diff -U 3 -H -d -r -N -- Ultracopier-0.3/scanFileOrFolder.cpp Rsync/scanFileOrFolder.cpp +--- Ultracopier-0.3/scanFileOrFolder.cpp 2012-05-23 11:06:25.001037392 +0200 ++++ Rsync/scanFileOrFolder.cpp 2012-06-29 21:54:15.555761695 +0200 +@@ -1,9 +1,10 @@ + #include "scanFileOrFolder.h" + +-#include <QMessageBox> ++#include <QDateTime> + + scanFileOrFolder::scanFileOrFolder(CopyMode mode) + { ++ rsync=false; + stopped = true; + stopIt = false; + this->mode=mode; +@@ -427,7 +428,17 @@ + if(!included) + {} + else +- emit fileTransfer(fileInfo.absoluteFilePath(),finalDest+fileName,mode); ++ { ++ bool sendToTransfer=false; ++ if(!rsync) ++ sendToTransfer=true; ++ else if(!QFile::exists(finalDest+fileName)) ++ sendToTransfer=true; ++ else if(fileInfo.lastModified()!=QFileInfo(finalDest+fileName).lastModified()) ++ sendToTransfer=true; ++ if(sendToTransfer) ++ emit fileTransfer(fileInfo.absoluteFilePath(),finalDest+fileName,mode); ++ } + } + } + } +@@ -437,9 +448,43 @@ + //listFolder(source,destination,suffixPath+fileInfo.fileName()+QDir::separator()); + listFolder(source,destination,sourceSuffixPath+fileInfo.fileName()+"/",destinationSuffixPath+fileInfo.fileName()+"/");//put unix separator because it's transformed into that's under windows too + else +- emit fileTransfer(fileInfo.absoluteFilePath(),finalDest+fileInfo.fileName(),mode); ++ { ++ bool sendToTransfer=false; ++ if(!rsync) ++ sendToTransfer=true; ++ else if(!QFile::exists(finalDest+fileInfo.fileName())) ++ sendToTransfer=true; ++ else if(fileInfo.lastModified()!=QFileInfo(finalDest+fileInfo.fileName()).lastModified()) ++ sendToTransfer=true; ++ if(sendToTransfer) ++ emit fileTransfer(fileInfo.absoluteFilePath(),finalDest+fileInfo.fileName(),mode); ++ } + } + } ++ if(rsync) ++ { ++ //check the reverse path here ++ QFileInfoList entryListDestination=QDir(finalDest).entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System,QDir::DirsFirst|QDir::Name|QDir::IgnoreCase);//possible wait time here ++ int sizeEntryListDestination=entryListDestination.size(); ++ int index=0; ++ for (int indexDestination=0;indexDestination<sizeEntryListDestination;++indexDestination) ++ { ++ index=0; ++ while(index<sizeEntryList) ++ { ++ if(entryListDestination.at(indexDestination).fileName()==entryList.at(index).fileName()) ++ break; ++ index++; ++ } ++ if(index==sizeEntryList) ++ { ++ //then not found, need be remove ++ emit addToRmForRsync(finalDest+entryListDestination.at(indexDestination).fileName()); ++ } ++ } ++ return; ++ } ++ + if(mode==Move) + { + ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"newSource: "+newSource+", sizeEntryList: "+QString::number(sizeEntryList)); +@@ -458,3 +503,9 @@ + this->firstRenamingRule=firstRenamingRule; + this->otherRenamingRule=otherRenamingRule; + } ++ ++/// \brief set rsync ++void scanFileOrFolder::setRsync(const bool rsync) ++{ ++ this->rsync=rsync; ++} +diff -U 3 -H -d -r -N -- Ultracopier-0.3/scanFileOrFolder.h Rsync/scanFileOrFolder.h +--- Ultracopier-0.3/scanFileOrFolder.h 2012-05-20 20:32:43.695874620 +0200 ++++ Rsync/scanFileOrFolder.h 2012-06-29 21:51:45.235764294 +0200 +@@ -38,6 +38,8 @@ + /// \brief set if need check if the destination exists + void setCheckDestinationFolderExists(const bool checkDestinationFolderExists); + void setRenamingRules(QString firstRenamingRule,QString otherRenamingRule); ++ /// \brief set rsync ++ void setRsync(const bool rsync); + signals: + void fileTransfer(const QFileInfo &source,const QFileInfo &destination,const CopyMode &mode); + /// \brief To debug source +@@ -49,6 +51,7 @@ + void newFolderListing(const QString &path); + void addToMkPath(const QString& folder); + void addToRmPath(const QString& folder,const int& inodeToRemove); ++ void addToRmForRsync(const QString& inode); + public slots: + void addToList(const QStringList& sources,const QString& destination); + void setFilters(QList<Filters_rules> include,QList<Filters_rules> exclude); +@@ -69,6 +72,7 @@ + QString prefix; + QString suffix; + CopyMode mode; ++ bool rsync; + QList<Filters_rules> include,exclude; + QList<Filters_rules> include_send,exclude_send; + bool reloadTheNewFilters; diff --git a/patch/opensource/KDE-Ultracopier.patch b/patch/opensource/KDE-Ultracopier.patch new file mode 100644 index 0000000..4130c08 --- /dev/null +++ b/patch/opensource/KDE-Ultracopier.patch @@ -0,0 +1,290 @@ +diff -U 3 -H -d -r -N -- kde-baseapps-4.8.4/lib/konq/CMakeLists.txt kde-baseapps-4.8.4-ultracopier/lib/konq/CMakeLists.txt +--- kde-baseapps-4.8.4/lib/konq/CMakeLists.txt 2011-09-26 11:43:17.390868969 +0200 ++++ kde-baseapps-4.8.4-ultracopier/lib/konq/CMakeLists.txt 2012-06-27 09:54:15.909492978 +0200 +@@ -9,6 +9,7 @@ + include_directories( ${ZLIB_INCLUDE_DIR} ) + + set(konq_LIB_SRCS ++ ClientCatchcopy.cpp + konq_popupmenu.cpp # used by konqueror, kfind, folderview, kickoff + konq_popupmenuplugin.cpp # for KonqPopupMenu and its plugins + konq_dndpopupmenuplugin.cpp # for KonqDndPopupMenu and its plugins +@@ -53,6 +54,7 @@ + + install( FILES directory_bookmarkbar.desktop DESTINATION ${DATA_INSTALL_DIR}/kbookmark ) + install( FILES ++ ClientCatchcopy.h + konq_popupmenu.h + konq_popupmenuinformation.h + konq_popupmenuplugin.h +diff -U 3 -H -d -r -N -- kde-baseapps-4.8.4/lib/konq/ClientCatchcopy.cpp kde-baseapps-4.8.4-ultracopier/lib/konq/ClientCatchcopy.cpp +--- kde-baseapps-4.8.4/lib/konq/ClientCatchcopy.cpp 1970-01-01 01:00:00.000000000 +0100 ++++ kde-baseapps-4.8.4-ultracopier/lib/konq/ClientCatchcopy.cpp 2012-06-27 10:28:25.049457581 +0200 +@@ -0,0 +1,142 @@ ++/** \file ClientCatchcopy.cpp ++\brief Define the catchcopy client ++\author alpha_one_x86 ++\version 0002 ++\date 2010 */ ++ ++#include "ClientCatchcopy.h" ++ ++ClientCatchcopy::ClientCatchcopy() ++{ ++ disconnectedFromSocket(); ++ connect(&socket, SIGNAL(disconnected()), this, SLOT(disconnectedFromSocket())); ++ connect(&socket, SIGNAL(readyRead()), this, SLOT(readyRead())); ++ connect(&socket, SIGNAL(connected()), this, SLOT(socketIsConnected())); ++} ++ ++void ClientCatchcopy::socketIsConnected() ++{ ++ sendProtocol(); ++} ++ ++void ClientCatchcopy::connectToServer() ++{ ++ socket.connectToServer(pathSocket()); ++ socket.waitForConnected(); ++} ++ ++const QString ClientCatchcopy::pathSocket() ++{ ++#ifdef Q_OS_UNIX ++ return "advanced-copier-"+QString::number(getuid()); ++#else ++ QString userName; ++ DWORD size=0; ++ if(GetUserNameW(NULL,&size) || (GetLastError()!=ERROR_INSUFFICIENT_BUFFER)) ++ { ++ } ++ else ++ { ++ WCHAR * userNameW=new WCHAR[size]; ++ if(GetUserNameW(userNameW,&size)) ++ { ++ userName.fromWCharArray(userNameW,size*2); ++ userName=QString(QByteArray((char*)userNameW,size*2-2).toHex()); ++ } ++ delete userNameW; ++ } ++ return "advanced-copier-"+userName; ++#endif ++} ++ ++void ClientCatchcopy::disconnectFromServer() ++{ ++ socket.abort(); ++ socket.disconnectFromServer(); ++} ++ ++/// \brief to send stream of string list ++quint32 ClientCatchcopy::sendRawOrderList(const QStringList & order) ++{ ++ if(!socket.isValid()) ++ return -1; ++ if(socket.state()!=QLocalSocket::ConnectedState) ++ return -1; ++ idNextOrder++; ++ if(idNextOrder>2000000000) ++ idNextOrder=0; ++ QByteArray block; ++ QDataStream out(&block, QIODevice::WriteOnly); ++ out.setVersion(QDataStream::Qt_4_4); ++ out << int(0); ++ out << idNextOrder; ++ out << order; ++ out.device()->seek(0); ++ out << block.size(); ++ do //cut string list and send it as block of 32KB ++ { ++ QByteArray blockToSend; ++ int byteWriten; ++ blockToSend=block.left(32*1024);//32KB ++ block.remove(0,blockToSend.size()); ++ byteWriten = socket.write(blockToSend); ++ if(!socket.isValid()) ++ return -1; ++ if(socket.errorString()!="Unknown error" && socket.errorString()!="") ++ return -1; ++ if(blockToSend.size()!=byteWriten) ++ return -1; ++ } ++ while(block.size()); ++ return idNextOrder; ++} ++ ++void ClientCatchcopy::readyRead() ++{ ++ while(socket.bytesAvailable()>0) ++ { ++ socket.readAll(); ++ } ++} ++ ++void ClientCatchcopy::disconnectedFromSocket() ++{ ++ idNextOrder = 0; ++} ++ ++/// \brief to send the protocol version used ++void ClientCatchcopy::sendProtocol() ++{ ++ sendRawOrderList(QStringList() << "protocol" << "0002"); ++} ++ ++void ClientCatchcopy::setClientName(const QString & name) ++{ ++ sendRawOrderList(QStringList() << "client" << name); ++} ++ ++bool ClientCatchcopy::addCopyWithDestination(const QStringList & sources,const QString & destination) ++{ ++ if(socket.state()==QLocalSocket::UnconnectedState) ++ connectToServer(); ++ if(socket.state()==QLocalSocket::ConnectedState) ++ { ++ sendRawOrderList(QStringList() << "cp" << sources << destination); ++ return true; ++ } ++ else ++ return false; ++} ++ ++bool ClientCatchcopy::addMoveWithDestination(const QStringList & sources,const QString & destination) ++{ ++ if(socket.state()==QLocalSocket::UnconnectedState) ++ connectToServer(); ++ if(socket.state()==QLocalSocket::ConnectedState) ++ { ++ sendRawOrderList(QStringList() << "mv" << sources << destination); ++ return true; ++ } ++ else ++ return false; ++} +diff -U 3 -H -d -r -N -- kde-baseapps-4.8.4/lib/konq/ClientCatchcopy.h kde-baseapps-4.8.4-ultracopier/lib/konq/ClientCatchcopy.h +--- kde-baseapps-4.8.4/lib/konq/ClientCatchcopy.h 1970-01-01 01:00:00.000000000 +0100 ++++ kde-baseapps-4.8.4-ultracopier/lib/konq/ClientCatchcopy.h 2012-06-27 10:28:52.169457112 +0200 +@@ -0,0 +1,58 @@ ++/** \file ClientCatchcopy.h ++\brief Define the catchcopy client ++\author alpha_one_x86 ++\version 0002 ++\date 2010 */ ++ ++#ifndef CLIENTCATCHCOPY_H ++#define CLIENTCATCHCOPY_H ++ ++#include <QObject> ++#include <QLocalSocket> ++#include <QStringList> ++#include <QString> ++#include <QByteArray> ++ ++#ifdef Q_OS_UNIX ++ #include <unistd.h> ++ #include <sys/types.h> ++#else ++ #include <windows.h> ++#endif ++ ++/// \brief Define the catchcopy client ++class ClientCatchcopy : public QObject ++{ ++ Q_OBJECT ++ public: ++ ClientCatchcopy(); ++ public slots: ++ void connectToServer(); ++ void disconnectFromServer(); ++ //to test and internal use ++ /// \brief set the client name ++ void setClientName(const QString & name); ++ /// \brief add copy with destination ++ bool addCopyWithDestination(const QStringList & sources,const QString & destination); ++ /// \brief add move with destination ++ bool addMoveWithDestination(const QStringList & sources,const QString & destination); ++ private: ++ /// \brief to send order ++ void sendProtocol(); ++ ++ const QString pathSocket(); ++ quint32 idNextOrder; ++ //the local socket ++ QLocalSocket socket; ++ ++ /// \brief to send stream of string list ++ quint32 sendRawOrderList(const QStringList & order); ++ private slots: ++ void readyRead(); ++ void disconnectedFromSocket(); ++ void socketIsConnected(); ++ protected: ++ bool parseReply(quint32 orderId,quint32 returnCode,QStringList returnList); ++}; ++ ++#endif // CLIENTCATCHCOPY_H +diff -U 3 -H -d -r -N -- kde-baseapps-4.8.4/lib/konq/konq_operations.cpp kde-baseapps-4.8.4-ultracopier/lib/konq/konq_operations.cpp +--- kde-baseapps-4.8.4/lib/konq/konq_operations.cpp 2011-09-26 11:43:17.392868951 +0200 ++++ kde-baseapps-4.8.4-ultracopier/lib/konq/konq_operations.cpp 2012-06-27 10:29:32.879456409 +0200 +@@ -154,6 +154,8 @@ + } + } + ++ClientCatchcopy KonqOperations::clientCatchcopy; ++ + void KonqOperations::copy( QWidget * parent, Operation method, const KUrl::List & selectedUrls, const KUrl& destUrl ) + { + kDebug(1203) << parent->metaObject()->className() << selectedUrls << destUrl; +@@ -175,7 +177,30 @@ + else if (method == MOVE) + job = KIO::move( selectedUrls, destUrl ); + else ++ { ++ QStringList selectedFiles; ++ bool isLocal=true; ++ int index=0; ++ while(index<selectedUrls.size()) ++ { ++ if(!selectedUrls.at(index).isLocalFile()) ++ { ++ isLocal=false; ++ break; ++ } ++ selectedFiles << selectedUrls.at(index).toLocalFile(); ++ index++; ++ } ++ isLocal&=destUrl.isLocalFile(); ++ if(isLocal) ++ { ++ if(clientCatchcopy.addCopyWithDestination(selectedFiles,destUrl.toLocalFile())) ++ return; ++ } ++ else + job = KIO::copy( selectedUrls, destUrl ); ++ ++ } + + op->setOperation( job, method, destUrl ); + +diff -U 3 -H -d -r -N -- kde-baseapps-4.8.4/lib/konq/konq_operations.h kde-baseapps-4.8.4-ultracopier/lib/konq/konq_operations.h +--- kde-baseapps-4.8.4/lib/konq/konq_operations.h 2011-07-27 20:36:39.112044764 +0200 ++++ kde-baseapps-4.8.4-ultracopier/lib/konq/konq_operations.h 2012-06-27 09:31:29.109516591 +0200 +@@ -23,6 +23,8 @@ + #ifndef __konq_operations_h__ + #define __konq_operations_h__ + ++#include "ClientCatchcopy.h" ++ + #include <kurl.h> + #include <libkonq_export.h> + +@@ -221,6 +223,7 @@ + + private: + QWidget* parentWidget() const; ++ static ClientCatchcopy clientCatchcopy; + void _del( Operation method, const KUrl::List & selectedUrls, ConfirmationType confirmation ); + void _restoreTrashedItems( const KUrl::List& urls ); + void _statUrl( const KUrl & url, const QObject *receiver, const char *member ); diff --git a/patch/opensource/options-with-pass.patch b/patch/opensource/options-with-pass.patch new file mode 100644 index 0000000..c53cefd --- /dev/null +++ b/patch/opensource/options-with-pass.patch @@ -0,0 +1,336 @@ +diff -U 3 -H -d -r -N -- sources/EventDispatcher.cpp sources-with-pass/EventDispatcher.cpp +--- sources/EventDispatcher.cpp 2012-02-20 11:16:29.402151959 +0100 ++++ sources-with-pass/EventDispatcher.cpp 2012-02-21 19:16:06.540690161 +0100 +@@ -52,6 +52,8 @@ + KeysList.append(qMakePair(QString("Last_version_used"),QVariant("na"))); + KeysList.append(qMakePair(QString("ActionOnManualOpen"),QVariant(1))); + KeysList.append(qMakePair(QString("GroupWindowWhen"),QVariant(0))); ++ KeysList.append(qMakePair(QString("checkBoxPass"),QVariant(true))); ++ KeysList.append(qMakePair(QString("Password"),QVariant("admin"))); + options->addOptionGroup("Ultracopier",KeysList); + if(options->getOptionValue("Ultracopier","Last_version_used")!=QVariant("na") && options->getOptionValue("Ultracopier","Last_version_used")!=QVariant(ULTRACOPIER_VERSION)) + { +diff -U 3 -H -d -r -N -- sources/OptionDialog.cpp sources-with-pass/OptionDialog.cpp +--- sources/OptionDialog.cpp 2012-02-21 19:22:24.990694347 +0100 ++++ sources-with-pass/OptionDialog.cpp 2012-02-21 19:24:59.290696056 +0100 +@@ -222,6 +222,8 @@ + newOptionValue("Themes", "Ultracopier_current_theme", options->getOptionValue("Themes","Ultracopier_current_theme")); + newOptionValue("Ultracopier", "ActionOnManualOpen", options->getOptionValue("Ultracopier","ActionOnManualOpen")); + newOptionValue("Ultracopier", "GroupWindowWhen", options->getOptionValue("Ultracopier","GroupWindowWhen")); ++ newOptionValue("Ultracopier", "checkBoxPass", options->getOptionValue("Ultracopier","checkBoxPass")); ++ newOptionValue("Ultracopier", "Password", options->getOptionValue("Ultracopier","Password")); + newOptionValue("Language", "Language", options->getOptionValue("Language","Language")); + newOptionValue("Language", "Language_autodetect", options->getOptionValue("Language","Language_autodetect")); + newOptionValue("SessionLoader", "LoadAtSessionStarting", options->getOptionValue("SessionLoader","LoadAtSessionStarting")); +@@ -361,6 +363,14 @@ + { + ui->GroupWindowWhen->setCurrentIndex(value.toInt()); + } ++ if(name=="checkBoxPass") ++ { ++ ui->checkBoxPass->setChecked(value.toBool()); ++ } ++ if(name=="Password") ++ { ++ ui->Password->setText(value.toString()); ++ } + } + } + +@@ -706,3 +716,21 @@ + options->setOptionValue("Ultracopier","ActionOnManualOpen",index); + } + } ++ ++void OptionDialog::on_checkBoxPass_toggled(bool checked) ++{ ++ if(index!=-1 && plugins->allPluginHaveBeenLoaded()) ++ { ++ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); ++ options->setOptionValue("Ultracopier","checkBoxPass",checked); ++ } ++} ++ ++void OptionDialog::on_Password_editingFinished() ++{ ++ if(index!=-1 && plugins->allPluginHaveBeenLoaded()) ++ { ++ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); ++ options->setOptionValue("Ultracopier","Password",ui->Password->text()); ++ } ++} +diff -U 3 -H -d -r -N -- sources/OptionDialog.h sources-with-pass/OptionDialog.h +--- sources/OptionDialog.h 2012-02-21 19:22:33.220694431 +0100 ++++ sources-with-pass/OptionDialog.h 2012-02-21 19:25:05.490696125 +0100 +@@ -57,7 +57,8 @@ + void on_checkBoxLog_folder_clicked(); + void on_checkBoxLog_sync_clicked(); + void on_ActionOnManualOpen_currentIndexChanged(int index); +- ++ void on_checkBoxPass_toggled(bool checked); ++ void on_Password_editingFinished(); + private: + Ui::OptionDialog *ui; + struct pluginStore +diff -U 3 -H -d -r -N -- sources/OptionDialog.ui sources-with-pass/OptionDialog.ui +--- sources/OptionDialog.ui 2012-02-10 19:52:43.711122987 +0100 ++++ sources-with-pass/OptionDialog.ui 2012-02-21 19:16:55.130690698 +0100 +@@ -6,7 +6,7 @@ + <rect> + <x>0</x> + <y>0</y> +- <width>638</width> ++ <width>717</width> + <height>455</height> + </rect> + </property> +@@ -80,6 +80,9 @@ + <layout class="QVBoxLayout" name="verticalLayout_10"> + <item> + <layout class="QFormLayout" name="formLayout_2"> ++ <property name="fieldGrowthPolicy"> ++ <enum>QFormLayout::ExpandingFieldsGrow</enum> ++ </property> + <item row="0" column="0"> + <widget class="QLabel" name="labelLanguage"> + <property name="text"> +@@ -158,6 +161,13 @@ + </item> + </widget> + </item> ++ <item row="5" column="0"> ++ <widget class="QLabel" name="label_9"> ++ <property name="text"> ++ <string>Group window when:</string> ++ </property> ++ </widget> ++ </item> + <item row="5" column="1"> + <widget class="QComboBox" name="GroupWindowWhen"> + <item> +@@ -192,10 +202,20 @@ + </item> + </widget> + </item> +- <item row="5" column="0"> +- <widget class="QLabel" name="label_9"> ++ <item row="6" column="0"> ++ <widget class="QCheckBox" name="checkBoxPass"> + <property name="text"> +- <string>Group window when:</string> ++ <string>Protect options with a pass:</string> ++ </property> ++ </widget> ++ </item> ++ <item row="6" column="1"> ++ <widget class="QLineEdit" name="Password"> ++ <property name="enabled"> ++ <bool>false</bool> ++ </property> ++ <property name="echoMode"> ++ <enum>QLineEdit::Password</enum> + </property> + </widget> + </item> +@@ -770,12 +790,12 @@ + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> +- <x>313</x> +- <y>13</y> ++ <x>301</x> ++ <y>5</y> + </hint> + <hint type="destinationlabel"> +- <x>533</x> +- <y>44</y> ++ <x>237</x> ++ <y>9</y> + </hint> + </hints> + </connection> +@@ -786,12 +806,12 @@ + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> +- <x>583</x> +- <y>20</y> ++ <x>301</x> ++ <y>5</y> + </hint> + <hint type="destinationlabel"> +- <x>584</x> +- <y>40</y> ++ <x>300</x> ++ <y>9</y> + </hint> + </hints> + </connection> +@@ -802,12 +822,12 @@ + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> +- <x>345</x> +- <y>21</y> ++ <x>301</x> ++ <y>5</y> + </hint> + <hint type="destinationlabel"> +- <x>582</x> +- <y>105</y> ++ <x>301</x> ++ <y>14</y> + </hint> + </hints> + </connection> +@@ -818,12 +838,12 @@ + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> +- <x>348</x> +- <y>25</y> ++ <x>301</x> ++ <y>5</y> + </hint> + <hint type="destinationlabel"> +- <x>557</x> +- <y>156</y> ++ <x>301</x> ++ <y>19</y> + </hint> + </hints> + </connection> +@@ -834,12 +854,12 @@ + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> +- <x>537</x> +- <y>105</y> ++ <x>301</x> ++ <y>14</y> + </hint> + <hint type="destinationlabel"> +- <x>533</x> +- <y>131</y> ++ <x>301</x> ++ <y>16</y> + </hint> + </hints> + </connection> +@@ -850,12 +870,12 @@ + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> +- <x>501</x> +- <y>156</y> ++ <x>301</x> ++ <y>19</y> + </hint> + <hint type="destinationlabel"> +- <x>501</x> +- <y>182</y> ++ <x>301</x> ++ <y>22</y> + </hint> + </hints> + </connection> +@@ -866,12 +886,12 @@ + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> +- <x>269</x> +- <y>15</y> ++ <x>301</x> ++ <y>5</y> + </hint> + <hint type="destinationlabel"> +- <x>456</x> +- <y>207</y> ++ <x>301</x> ++ <y>25</y> + </hint> + </hints> + </connection> +@@ -882,12 +902,28 @@ + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> +- <x>334</x> +- <y>12</y> ++ <x>301</x> ++ <y>5</y> + </hint> + <hint type="destinationlabel"> +- <x>304</x> +- <y>69</y> ++ <x>301</x> ++ <y>11</y> ++ </hint> ++ </hints> ++ </connection> ++ <connection> ++ <sender>checkBoxPass</sender> ++ <signal>toggled(bool)</signal> ++ <receiver>Password</receiver> ++ <slot>setEnabled(bool)</slot> ++ <hints> ++ <hint type="sourcelabel"> ++ <x>412</x> ++ <y>169</y> ++ </hint> ++ <hint type="destinationlabel"> ++ <x>482</x> ++ <y>172</y> + </hint> + </hints> + </connection> +diff -U 3 -H -d -r -N -- sources/SystrayIcon.cpp sources-with-pass/SystrayIcon.cpp +--- sources/SystrayIcon.cpp 2012-02-05 14:25:43.462930072 +0100 ++++ sources-with-pass/SystrayIcon.cpp 2012-02-21 19:35:36.630703097 +0100 +@@ -5,6 +5,7 @@ + \date 2010 */
+
+ #include <QMessageBox>
++#include <QInputDialog>
+
+ #include "SystrayIcon.h"
+
+@@ -33,7 +34,7 @@ + //connect the action
+ connect(actionMenuQuit, SIGNAL(triggered()), this, SIGNAL(quit()));
+ connect(actionMenuAbout, SIGNAL(triggered()), this, SIGNAL(showHelp()));
+- connect(actionOptions, SIGNAL(triggered()), this, SIGNAL(showOptions()));
++ connect(actionOptions, SIGNAL(triggered()), this, SLOT(askPassIfNeeded()));
+ connect(sysTrayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(CatchAction(QSystemTrayIcon::ActivationReason)));
+ connect(plugins, SIGNAL(pluginListingIsfinish()), this, SLOT(reloadEngineList()));
+ //display the icon
+@@ -375,3 +376,17 @@ + }
+ }
+ }
++
++void SystrayIcon::askPassIfNeeded()
++{
++ if(!options->getOptionValue("Ultracopier","checkBoxPass").toBool())
++ {
++ emit showOptions();
++ return;
++ }
++ QString pass=QInputDialog::getText(NULL,tr("Options password"),tr("Give the option for the password"),QLineEdit::Password);
++ if(pass==options->getOptionValue("Ultracopier","Password").toString())
++ emit showOptions();
++ else
++ QMessageBox::warning(NULL,tr("Error"),tr("Wrong password!"));
++}
+diff -U 3 -H -d -r -N -- sources/SystrayIcon.h sources-with-pass/SystrayIcon.h +--- sources/SystrayIcon.h 2011-12-12 08:53:27.000000000 +0100 ++++ sources-with-pass/SystrayIcon.h 2012-02-21 19:27:11.780697518 +0100 +@@ -78,6 +78,8 @@ + /// \brief to retranslate the ui
+ void retranslateTheUI();
+ void reloadEngineList();
++ /// \brief ask the pass if needed
++ void askPassIfNeeded();
+ signals:
+ /// \brief Quit ultracopier
+ void quit();
|