summaryrefslogtreecommitdiff
path: root/plugins/CopyEngine/Ultracopier
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/CopyEngine/Ultracopier')
-rw-r--r--plugins/CopyEngine/Ultracopier/AvancedQFile.cpp208
-rw-r--r--plugins/CopyEngine/Ultracopier/AvancedQFile.h45
-rw-r--r--plugins/CopyEngine/Ultracopier/CompilerInfo.h1
-rw-r--r--plugins/CopyEngine/Ultracopier/CopyEngine-collision-and-error.cpp567
-rw-r--r--plugins/CopyEngine/Ultracopier/CopyEngine.cpp1238
-rw-r--r--plugins/CopyEngine/Ultracopier/CopyEngine.h381
-rw-r--r--plugins/CopyEngine/Ultracopier/CopyEngine.pro101
-rw-r--r--plugins/CopyEngine/Ultracopier/CopyEngineFactory.cpp692
-rw-r--r--plugins/CopyEngine/Ultracopier/CopyEngineFactory.h132
-rw-r--r--plugins/CopyEngine/Ultracopier/DebugDialog.cpp44
-rw-r--r--plugins/CopyEngine/Ultracopier/DebugDialog.h39
-rw-r--r--plugins/CopyEngine/Ultracopier/DebugEngineMacro.h28
-rw-r--r--plugins/CopyEngine/Ultracopier/DiskSpace.cpp53
-rw-r--r--plugins/CopyEngine/Ultracopier/DiskSpace.h28
-rw-r--r--plugins/CopyEngine/Ultracopier/DiskSpace.ui68
-rw-r--r--plugins/CopyEngine/Ultracopier/DriveManagement.cpp102
-rw-r--r--plugins/CopyEngine/Ultracopier/DriveManagement.h34
-rw-r--r--plugins/CopyEngine/Ultracopier/Environment.h11
-rw-r--r--plugins/CopyEngine/Ultracopier/FileErrorDialog.cpp163
-rw-r--r--plugins/CopyEngine/Ultracopier/FileErrorDialog.h51
-rw-r--r--plugins/CopyEngine/Ultracopier/FileExistsDialog.cpp238
-rw-r--r--plugins/CopyEngine/Ultracopier/FileExistsDialog.h60
-rw-r--r--plugins/CopyEngine/Ultracopier/FileIsSameDialog.cpp188
-rw-r--r--plugins/CopyEngine/Ultracopier/FileIsSameDialog.h57
-rw-r--r--plugins/CopyEngine/Ultracopier/FilterRules.cpp193
-rw-r--r--plugins/CopyEngine/Ultracopier/FilterRules.h46
-rw-r--r--plugins/CopyEngine/Ultracopier/FilterRules.ui162
-rw-r--r--plugins/CopyEngine/Ultracopier/Filters.cpp457
-rw-r--r--plugins/CopyEngine/Ultracopier/Filters.h45
-rw-r--r--plugins/CopyEngine/Ultracopier/Filters.ui194
-rw-r--r--plugins/CopyEngine/Ultracopier/FolderExistsDialog.cpp199
-rw-r--r--plugins/CopyEngine/Ultracopier/FolderExistsDialog.h57
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/ar/translation.ts1289
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/de/translation.ts1294
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/el/translation.ts1289
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/en/translation.ts1289
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/es/translation.ts1305
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/fr/translation.ts1338
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/hi/translation.ts1289
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/hu/translation.ts1297
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/id/translation.ts1289
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/it/translation.ts1319
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/ja/translation.ts1289
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/ko/translation.ts1293
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/nl/translation.ts1289
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/no/translation.ts1289
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/pl/translation.ts1289
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/pt/translation.ts1289
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/ru/translation.ts1293
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/th/translation.ts1289
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/tr/translation.ts1289
-rw-r--r--plugins/CopyEngine/Ultracopier/Languages/zh/translation.ts1289
-rw-r--r--plugins/CopyEngine/Ultracopier/ListThread.cpp2379
-rw-r--r--plugins/CopyEngine/Ultracopier/ListThread.h431
-rw-r--r--plugins/CopyEngine/Ultracopier/ListThread_InodeAction.cpp64
-rw-r--r--plugins/CopyEngine/Ultracopier/MkPath.cpp516
-rw-r--r--plugins/CopyEngine/Ultracopier/MkPath.h106
-rw-r--r--plugins/CopyEngine/Ultracopier/ReadThread.cpp687
-rw-r--r--plugins/CopyEngine/Ultracopier/ReadThread.h147
-rw-r--r--plugins/CopyEngine/Ultracopier/RenamingRules.cpp85
-rw-r--r--plugins/CopyEngine/Ultracopier/RenamingRules.h34
-rw-r--r--plugins/CopyEngine/Ultracopier/RenamingRules.ui129
-rw-r--r--plugins/CopyEngine/Ultracopier/ScanFileOrFolder.cpp677
-rw-r--r--plugins/CopyEngine/Ultracopier/ScanFileOrFolder.h108
-rw-r--r--plugins/CopyEngine/Ultracopier/StructEnumDefinition.h1
-rw-r--r--plugins/CopyEngine/Ultracopier/StructEnumDefinition_CopyEngine.h124
-rw-r--r--plugins/CopyEngine/Ultracopier/TransferThread.cpp2081
-rw-r--r--plugins/CopyEngine/Ultracopier/TransferThread.h288
-rw-r--r--plugins/CopyEngine/Ultracopier/Variable.h43
-rw-r--r--plugins/CopyEngine/Ultracopier/WriteThread.cpp967
-rw-r--r--plugins/CopyEngine/Ultracopier/WriteThread.h160
-rw-r--r--plugins/CopyEngine/Ultracopier/copyEngineOptions.ui762
-rw-r--r--plugins/CopyEngine/Ultracopier/copyEngineResources.qrc8
-rw-r--r--plugins/CopyEngine/Ultracopier/debugDialog.ui98
-rw-r--r--plugins/CopyEngine/Ultracopier/documentation.dox39
-rw-r--r--plugins/CopyEngine/Ultracopier/fileErrorDialog.ui264
-rw-r--r--plugins/CopyEngine/Ultracopier/fileExistsDialog.ui412
-rw-r--r--plugins/CopyEngine/Ultracopier/fileIsSameDialog.ui214
-rw-r--r--plugins/CopyEngine/Ultracopier/folderExistsDialog.ui309
-rw-r--r--plugins/CopyEngine/Ultracopier/informations-rsync.xml26
-rw-r--r--plugins/CopyEngine/Ultracopier/informations.xml26
-rw-r--r--plugins/CopyEngine/Ultracopier/plugin.json1
-rw-r--r--plugins/CopyEngine/Ultracopier/resources/add.pngbin0 -> 552 bytes
-rw-r--r--plugins/CopyEngine/Ultracopier/resources/edit.pngbin0 -> 623 bytes
-rw-r--r--plugins/CopyEngine/Ultracopier/resources/filter.pngbin0 -> 685 bytes
-rw-r--r--plugins/CopyEngine/Ultracopier/resources/remove.pngbin0 -> 683 bytes
86 files changed, 42964 insertions, 0 deletions
diff --git a/plugins/CopyEngine/Ultracopier/AvancedQFile.cpp b/plugins/CopyEngine/Ultracopier/AvancedQFile.cpp
new file mode 100644
index 0000000..3d867fb
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/AvancedQFile.cpp
@@ -0,0 +1,208 @@
+/** \file AvancedQFile.cpp
+\brief Define the QFile herited class to set file date/time
+\author alpha_one_x86 */
+
+#include "AvancedQFile.h"
+
+#ifdef Q_CC_GNU
+//this next header is needed to change file time/date under gcc
+#include <utime.h>
+#include <errno.h>
+#endif
+
+//source
+//hSrc=CreateFile(pData->pfiSrcFile->GetFullFilePath(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN | (bNoBuffer ? FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH : 0), NULL);
+//destination
+//hDst=CreateFile(pData->strDstFile, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN | (bNoBuffer ? FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH : 0), NULL);
+
+bool AvancedQFile::setCreated(const QDateTime &time)
+{
+ time_t ctime=time.toTime_t();
+ #ifdef Q_CC_GNU
+ //creation time not exists into unix world
+ Q_UNUSED(ctime)
+ return true;
+ #else
+ setErrorString(tr("Not supported on this platform"));
+ return false;
+ #endif
+}
+
+bool AvancedQFile::setLastModified(const QDateTime &time)
+{
+ time_t actime=QFileInfo(*this).lastRead().toTime_t();
+ //protect to wrong actime
+ if(actime<0)
+ actime=0;
+ time_t modtime=time.toTime_t();
+ if(modtime<0)
+ {
+ setErrorString(tr("Last modified date is wrong"));
+ return false;
+ }
+ #ifdef Q_CC_GNU
+ //this function avalaible on unix and mingw
+ utimbuf butime;
+ butime.actime=actime;
+ butime.modtime=modtime;
+ int returnVal=utime(this->fileName().toLocal8Bit().data(),&butime);
+ if(returnVal==0)
+ return true;
+ else
+ {
+ setErrorString(strerror(errno));
+ return false;
+ }
+ #else
+ setErrorString(tr("Not supported on this platform"));
+ return false;
+ #endif
+}
+
+bool AvancedQFile::setLastRead(const QDateTime &time)
+{
+ time_t modtime=QFileInfo(*this).lastModified().toTime_t();
+ //protect to wrong actime
+ if(modtime<0)
+ modtime=0;
+ time_t actime=time.toTime_t();
+ if(actime<0)
+ {
+ setErrorString(tr("Last access date is wrong"));
+ return false;
+ }
+ #ifdef Q_CC_GNU
+ //this function avalaible on unix and mingw
+ utimbuf butime;
+ butime.actime=actime;
+ butime.modtime=modtime;
+ int returnVal=utime(this->fileName().toLocal8Bit().data(),&butime);
+ if(returnVal==0)
+ return true;
+ else
+ {
+ setErrorString(strerror(errno));
+ return false;
+ }
+ #else
+ setErrorString(tr("Not supported on this platform"));
+ return false;
+ #endif
+}
+
+#ifdef ULTRACOPIER_OVERLAPPED_FILE
+AvancedQFile::avancedQFile()
+{
+ handle=INVALID_HANDLE_VALUE;
+ fileError=QFileDevice::NoError;
+ fileErrorString.clear();
+}
+
+AvancedQFile::~avancedQFile()
+{
+ close();
+}
+
+QString AvancedQFile::getLastWindowsError()
+{
+ WCHAR ErrorStringW[65535];
+ DWORD dw = GetLastError();
+
+ int size=FormatMessage(
+ FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL,
+ dw,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ ErrorStringW,
+ 0, NULL );
+ if(size<0)
+ tr("Unknown error: %1").arg(dw);
+ return QString::fromWCharArray(ErrorStringW,size);
+}
+
+bool AvancedQFile::open(OpenMode mode)
+{
+ fileError=QFileDevice::NoError;
+ fileErrorString.clear();
+ WCHAR fileNameW[fileName().size()+1];
+ if(QDir::toNativeSeparators("\\\\?\\"+fileName()).toWCharArray(fileNameW)!=fileName().size())
+ {
+ fileError=QFileDevice::OpenError;
+ fileErrorString=tr("Path conversion error");
+ return false;
+ }
+ fileNameW[fileName().size()]='\0';
+
+ DWORD dwDesiredAccess=0;
+ if(mode & QIODevice::ReadOnly)
+ dwDesiredAccess|=GENERIC_READ;
+ if(mode & QIODevice::WriteOnly)
+ dwDesiredAccess|=GENERIC_Write;
+
+ DWORD dwCreationDisposition;
+ if(mode & QIODevice::WriteOnly)
+ dwCreationDisposition=CREATE_ALWAYS;
+ else
+ dwCreationDisposition=OPEN_EXISTING;
+
+ handle=CreateFile(
+ fileNameW,
+ dwDesiredAccess,
+ 0,
+ 0,
+ dwCreationDisposition,
+ FILE_FLAG_WRITE_THROUGH | FILE_FLAG_SEQUENTIAL_SCAN,
+ 0
+ );
+ if(handle==INVALID_HANDLE_VALUE)
+ {
+ fileError=QFileDevice::OpenError;
+ fileErrorString=getLastWindowsError();
+ }
+ return (handle!=INVALID_HANDLE_VALUE);
+}
+
+void AvancedQFile::close()
+{
+ if(handle==INVALID_HANDLE_VALUE)
+ return;
+ CloseHandle(handle);
+}
+
+bool AvancedQFile::seek(qint64 pos)
+{
+ toto
+}
+
+bool AvancedQFile::resize(qint64 size)
+{
+ toto
+}
+
+QString AvancedQFile::errorString() const
+{
+ if(fileErrorString.isEmpty())
+ return tr("Unknown error");
+ return fileErrorString;
+}
+
+bool AvancedQFile::isOpen() const
+{
+ return (handle!=INVALID_HANDLE_VALUE);
+}
+
+qint64 AvancedQFile::write(const QByteArray &data)
+{
+}
+
+QByteArray AvancedQFile::read(qint64 maxlen)
+{
+}
+
+QFileDevice::FileError AvancedQFile::error() const
+{
+ return fileError;
+}
+#endif
diff --git a/plugins/CopyEngine/Ultracopier/AvancedQFile.h b/plugins/CopyEngine/Ultracopier/AvancedQFile.h
new file mode 100644
index 0000000..8c3dc4a
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/AvancedQFile.h
@@ -0,0 +1,45 @@
+/** \file AvancedQFile.h
+\brief Define the QFile herited class to set file date/time
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef AVANCEDQFILE_H
+#define AVANCEDQFILE_H
+
+#include <QFile>
+#include <QDateTime>
+#include <QFileInfo>
+
+/// \brief devired class from QFile to set time/date on file
+class AvancedQFile : public QFile
+{
+ Q_OBJECT
+public:
+ /// \brief set created date, not exists in unix world
+ bool setCreated(const QDateTime &time);
+ /// \brief set last modification date
+ bool setLastModified(const QDateTime &time);
+ /// \brief set last read date
+ bool setLastRead(const QDateTime &time);
+
+ #ifdef ULTRACOPIER_OVERLAPPED_FILE
+ explicit AvancedQFile();
+ ~AvancedQFile();
+ bool open(OpenMode mode);
+ void close();
+ bool seek(qint64 pos);
+ bool resize(qint64 size);
+ QString errorString() const;
+ bool isOpen() const;
+ qint64 write(const QByteArray &data);
+ QByteArray read(qint64 maxlen);
+ FileError error() const;
+ QString getLastWindowsError();
+private:
+ HANDLE handle;
+ FileError fileError;
+ QString fileErrorString;
+ #endif
+};
+
+#endif // AVANCEDQFILE_H
diff --git a/plugins/CopyEngine/Ultracopier/CompilerInfo.h b/plugins/CopyEngine/Ultracopier/CompilerInfo.h
new file mode 100644
index 0000000..84625b9
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/CompilerInfo.h
@@ -0,0 +1 @@
+#include "../../../CompilerInfo.h"
diff --git a/plugins/CopyEngine/Ultracopier/CopyEngine-collision-and-error.cpp b/plugins/CopyEngine/Ultracopier/CopyEngine-collision-and-error.cpp
new file mode 100644
index 0000000..5315c84
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/CopyEngine-collision-and-error.cpp
@@ -0,0 +1,567 @@
+/** \file copyEngine.cpp
+\brief Define the copy engine
+\author alpha_one_x86 */
+
+#include "CopyEngine.h"
+#include "FolderExistsDialog.h"
+#include "DiskSpace.h"
+
+//dialog message
+/// \note Can be call without queue because all call will be serialized
+void CopyEngine::fileAlreadyExistsSlot(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread)
+{
+ fileAlreadyExists(source,destination,isSame,thread);
+}
+
+/// \note Can be call without queue because all call will be serialized
+void CopyEngine::errorOnFileSlot(QFileInfo fileInfo,QString errorString,TransferThread * thread,const ErrorType &errorType)
+{
+ errorOnFile(fileInfo,errorString,thread,errorType);
+}
+
+/// \note Can be call without queue because all call will be serialized
+void CopyEngine::folderAlreadyExistsSlot(QFileInfo source,QFileInfo destination,bool isSame,ScanFileOrFolder * thread)
+{
+ folderAlreadyExists(source,destination,isSame,thread);
+}
+
+/// \note Can be call without queue because all call will be serialized
+void CopyEngine::errorOnFolderSlot(QFileInfo fileInfo,QString errorString,ScanFileOrFolder * thread,ErrorType errorType)
+{
+ errorOnFolder(fileInfo,errorString,thread,errorType);
+}
+
+//mkpath event
+void CopyEngine::mkPathErrorOnFolderSlot(QFileInfo folder,QString error,ErrorType errorType)
+{
+ mkPathErrorOnFolder(folder,error,errorType);
+}
+
+/// \note Can be call without queue because all call will be serialized
+void CopyEngine::fileAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread,bool isCalledByShowOneNewDialog)
+{
+ if(stopIt)
+ return;
+ if(thread==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to locate the thread");
+ return;
+ }
+ //load the action
+ if(isSame)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file is same: "+source.absoluteFilePath());
+ FileExistsAction tempFileExistsAction=alwaysDoThisActionForFileExists;
+ if(tempFileExistsAction==FileExists_Overwrite || tempFileExistsAction==FileExists_OverwriteIfNewer || tempFileExistsAction==FileExists_OverwriteIfNotSame || tempFileExistsAction==FileExists_OverwriteIfOlder)
+ tempFileExistsAction=FileExists_NotSet;
+ switch(tempFileExistsAction)
+ {
+ case FileExists_Skip:
+ case FileExists_Rename:
+ thread->setFileExistsAction(tempFileExistsAction);
+ break;
+ default:
+ if(dialogIsOpen)
+ {
+ alreadyExistsQueueItem newItem;
+ newItem.source=source;
+ newItem.destination=destination;
+ newItem.isSame=isSame;
+ newItem.transfer=thread;
+ newItem.scan=NULL;
+ alreadyExistsQueue << newItem;
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog");
+ FileIsSameDialog dialog(interface,source,firstRenamingRule,otherRenamingRule);
+ emit isInPause(true);
+ dialog.exec();/// \bug crash when external close
+ FileExistsAction newAction=dialog.getAction();
+ emit isInPause(false);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"close dialog: "+QString::number(newAction));
+ if(newAction==FileExists_Cancel)
+ {
+ emit cancelAll();
+ return;
+ }
+ if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileExists)
+ {
+ alwaysDoThisActionForFileExists=newAction;
+ listThread->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists);
+ if(uiIsInstalled)
+ switch(newAction)
+ {
+ default:
+ case FileExists_Skip:
+ ui->comboBoxFileCollision->setCurrentIndex(1);
+ break;
+ case FileExists_Rename:
+ ui->comboBoxFileCollision->setCurrentIndex(6);
+ break;
+ }
+ }
+ if(dialog.getAlways() || newAction!=FileExists_Rename)
+ thread->setFileExistsAction(newAction);
+ else
+ thread->setFileRename(dialog.getNewName());
+ dialogIsOpen=false;
+ if(!isCalledByShowOneNewDialog)
+ emit queryOneNewDialog();
+ return;
+ break;
+ }
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file already exists: "+source.absoluteFilePath()+", destination: "+destination.absoluteFilePath());
+ FileExistsAction tempFileExistsAction=alwaysDoThisActionForFileExists;
+ switch(tempFileExistsAction)
+ {
+ case FileExists_Skip:
+ case FileExists_Rename:
+ case FileExists_Overwrite:
+ case FileExists_OverwriteIfNewer:
+ case FileExists_OverwriteIfOlder:
+ case FileExists_OverwriteIfNotSame:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"always do this action: "+QString::number(tempFileExistsAction));
+ thread->setFileExistsAction(tempFileExistsAction);
+ break;
+ default:
+ if(dialogIsOpen)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("dialog open, put in queue: %1 %2")
+ .arg(source.absoluteFilePath())
+ .arg(destination.absoluteFilePath())
+ );
+ alreadyExistsQueueItem newItem;
+ newItem.source=source;
+ newItem.destination=destination;
+ newItem.isSame=isSame;
+ newItem.transfer=thread;
+ newItem.scan=NULL;
+ alreadyExistsQueue << newItem;
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog");
+ FileExistsDialog dialog(interface,source,destination,firstRenamingRule,otherRenamingRule);
+ emit isInPause(true);
+ dialog.exec();/// \bug crash when external close
+ FileExistsAction newAction=dialog.getAction();
+ emit isInPause(false);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"close dialog: "+QString::number(newAction));
+ if(newAction==FileExists_Cancel)
+ {
+ emit cancelAll();
+ return;
+ }
+ if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileExists)
+ {
+ alwaysDoThisActionForFileExists=newAction;
+ listThread->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists);
+ if(uiIsInstalled)
+ switch(newAction)
+ {
+ default:
+ case FileExists_Skip:
+ ui->comboBoxFileCollision->setCurrentIndex(1);
+ break;
+ case FileExists_Rename:
+ ui->comboBoxFileCollision->setCurrentIndex(6);
+ break;
+ case FileExists_Overwrite:
+ ui->comboBoxFileCollision->setCurrentIndex(2);
+ break;
+ case FileExists_OverwriteIfNotSame:
+ ui->comboBoxFileCollision->setCurrentIndex(3);
+ break;
+ case FileExists_OverwriteIfNewer:
+ ui->comboBoxFileCollision->setCurrentIndex(4);
+ break;
+ case FileExists_OverwriteIfOlder:
+ ui->comboBoxFileCollision->setCurrentIndex(5);
+ break;
+ }
+ }
+ if(dialog.getAlways() || newAction!=FileExists_Rename)
+ thread->setFileExistsAction(newAction);
+ else
+ thread->setFileRename(dialog.getNewName());
+ dialogIsOpen=false;
+ if(!isCalledByShowOneNewDialog)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"emit queryOneNewDialog()");
+ emit queryOneNewDialog();
+ }
+ return;
+ break;
+ }
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop");
+}
+
+void CopyEngine::haveNeedPutAtBottom(bool needPutAtBottom, const QFileInfo &fileInfo, const QString &errorString,TransferThread *thread,const ErrorType &errorType)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ if(!needPutAtBottom)
+ {
+ alwaysDoThisActionForFileError=FileError_NotSet;
+ if(uiIsInstalled)
+ ui->comboBoxFileError->setCurrentIndex(0);
+ errorQueueItem newItem;
+ newItem.errorString=errorString;
+ newItem.inode=fileInfo;
+ newItem.mkPath=false;
+ newItem.rmPath=false;
+ newItem.scan=NULL;
+ newItem.transfer=thread;
+ newItem.errorType=errorType;
+ errorQueue << newItem;
+ showOneNewDialog();
+ }
+}
+
+void CopyEngine::missingDiskSpace(QList<Diskspace> list)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog");
+ DiskSpace dialog(facilityEngine,list,interface);
+ emit isInPause(true);
+ dialog.exec();/// \bug crash when external close
+ bool ok=dialog.getAction();
+ emit isInPause(false);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"cancel: "+QString::number(ok));
+ if(!ok)
+ emit cancelAll();
+ else
+ listThread->autoStartIfNeeded();
+}
+
+/// \note Can be call without queue because all call will be serialized
+void CopyEngine::errorOnFile(QFileInfo fileInfo,QString errorString,TransferThread * thread,const ErrorType &errorType,bool isCalledByShowOneNewDialog)
+{
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file have error: "+fileInfo.absoluteFilePath()+", error: "+errorString);
+ if(thread==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to locate the thread");
+ return;
+ }
+ //load the action
+ FileErrorAction tempFileErrorAction=alwaysDoThisActionForFileError;
+ switch(tempFileErrorAction)
+ {
+ case FileError_Skip:
+ thread->skip();
+ return;
+ case FileError_Retry:
+ thread->retryAfterError();
+ return;
+ case FileError_PutToEndOfTheList:
+ emit getNeedPutAtBottom(fileInfo,errorString,thread,errorType);
+ return;
+ case FileError_Cancel:
+ return;
+ default:
+ if(dialogIsOpen)
+ {
+ errorQueueItem newItem;
+ newItem.errorString=errorString;
+ newItem.inode=fileInfo;
+ newItem.mkPath=false;
+ newItem.rmPath=false;
+ newItem.scan=NULL;
+ newItem.transfer=thread;
+ newItem.errorType=errorType;
+ errorQueue << newItem;
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog");
+ emit error(fileInfo.absoluteFilePath(),fileInfo.size(),fileInfo.lastModified(),errorString);
+ FileErrorDialog dialog(interface,fileInfo,errorString,errorType);
+ emit isInPause(true);
+ dialog.exec();/// \bug crash when external close
+ FileErrorAction newAction=dialog.getAction();
+ emit isInPause(false);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"close dialog: "+QString::number(newAction));
+ if(newAction==FileError_Cancel)
+ {
+ emit cancelAll();
+ return;
+ }
+ if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError)
+ {
+ alwaysDoThisActionForFileError=newAction;
+ if(uiIsInstalled)
+ switch(newAction)
+ {
+ default:
+ case FileError_Skip:
+ ui->comboBoxFileError->setCurrentIndex(1);
+ break;
+ case FileError_PutToEndOfTheList:
+ ui->comboBoxFileError->setCurrentIndex(2);
+ break;
+ }
+ }
+ switch(newAction)
+ {
+ case FileError_Skip:
+ thread->skip();
+ break;
+ case FileError_Retry:
+ thread->retryAfterError();
+ break;
+ case FileError_PutToEndOfTheList:
+ thread->putAtBottom();
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"file error action wrong");
+ break;
+ }
+ dialogIsOpen=false;
+ if(!isCalledByShowOneNewDialog)
+ emit queryOneNewDialog();
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"isCalledByShowOneNewDialog==true then not show other dial");
+ return;
+ break;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop");
+}
+
+/// \note Can be call without queue because all call will be serialized
+void CopyEngine::folderAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,ScanFileOrFolder * thread,bool isCalledByShowOneNewDialog)
+{
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"folder already exists: "+source.absoluteFilePath()+", destination: "+destination.absoluteFilePath());
+ if(thread==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to locate the thread");
+ return;
+ }
+ //load the always action
+ FolderExistsAction tempFolderExistsAction=alwaysDoThisActionForFolderExists;
+ switch(tempFolderExistsAction)
+ {
+ case FolderExists_Skip:
+ case FolderExists_Rename:
+ case FolderExists_Merge:
+ thread->setFolderExistsAction(tempFolderExistsAction);
+ break;
+ default:
+ if(dialogIsOpen)
+ {
+ alreadyExistsQueueItem newItem;
+ newItem.source=source;
+ newItem.destination=destination;
+ newItem.isSame=isSame;
+ newItem.transfer=NULL;
+ newItem.scan=thread;
+ alreadyExistsQueue << newItem;
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog");
+ FolderExistsDialog dialog(interface,source,isSame,destination,firstRenamingRule,otherRenamingRule);
+ dialog.exec();/// \bug crash when external close
+ FolderExistsAction newAction=dialog.getAction();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"close dialog: "+QString::number(newAction));
+ if(newAction==FolderExists_Cancel)
+ {
+ emit cancelAll();
+ return;
+ }
+ if(dialog.getAlways() && newAction!=alwaysDoThisActionForFolderExists)
+ setComboBoxFolderCollision(newAction);
+ if(!dialog.getAlways() && newAction==FolderExists_Rename)
+ thread->setFolderExistsAction(newAction,dialog.getNewName());
+ else
+ thread->setFolderExistsAction(newAction);
+ dialogIsOpen=false;
+ if(!isCalledByShowOneNewDialog)
+ emit queryOneNewDialog();
+ return;
+ break;
+ }
+}
+
+/// \note Can be call without queue because all call will be serialized
+/// \todo all this part
+void CopyEngine::errorOnFolder(QFileInfo fileInfo, QString errorString, ScanFileOrFolder * thread, ErrorType errorType, bool isCalledByShowOneNewDialog)
+{
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file have error: "+fileInfo.absoluteFilePath()+", error: "+errorString);
+ if(thread==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to locate the thread");
+ return;
+ }
+ //load the always action
+ FileErrorAction tempFileErrorAction=alwaysDoThisActionForFolderError;
+ switch(tempFileErrorAction)
+ {
+ case FileError_Skip:
+ case FileError_Retry:
+ case FileError_PutToEndOfTheList:
+ thread->setFolderErrorAction(tempFileErrorAction);
+ break;
+ default:
+ if(dialogIsOpen)
+ {
+ errorQueueItem newItem;
+ newItem.errorString=errorString;
+ newItem.inode=fileInfo;
+ newItem.mkPath=false;
+ newItem.rmPath=false;
+ newItem.scan=thread;
+ newItem.transfer=NULL;
+ newItem.errorType=errorType;
+ errorQueue << newItem;
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog");
+ emit error(fileInfo.absoluteFilePath(),fileInfo.size(),fileInfo.lastModified(),errorString);
+ FileErrorDialog dialog(interface,fileInfo,errorString,errorType);
+ dialog.exec();/// \bug crash when external close
+ FileErrorAction newAction=dialog.getAction();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"close dialog: "+QString::number(newAction));
+ if(newAction==FileError_Cancel)
+ {
+ emit cancelAll();
+ return;
+ }
+ if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError)
+ {
+ setComboBoxFolderError(newAction);
+ alwaysDoThisActionForFolderError=newAction;
+ }
+ dialogIsOpen=false;
+ thread->setFolderErrorAction(newAction);
+ if(!isCalledByShowOneNewDialog)
+ emit queryOneNewDialog();
+ return;
+ break;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop");
+}
+
+// -----------------------------------------------------
+
+//mkpath event
+void CopyEngine::mkPathErrorOnFolder(QFileInfo folder,QString errorString,const ErrorType &errorType,bool isCalledByShowOneNewDialog)
+{
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file have error: "+folder.absoluteFilePath()+", error: "+errorString);
+ //load the always action
+ FileErrorAction tempFileErrorAction=alwaysDoThisActionForFolderError;
+ switch(tempFileErrorAction)
+ {
+ case FileError_Skip:
+ listThread->mkPathQueue.skip();
+ return;
+ case FileError_Retry:
+ listThread->mkPathQueue.retry();
+ return;
+ default:
+ if(dialogIsOpen)
+ {
+ errorQueueItem newItem;
+ newItem.errorString=errorString;
+ newItem.inode=folder;
+ newItem.mkPath=true;
+ newItem.rmPath=false;
+ newItem.scan=NULL;
+ newItem.transfer=NULL;
+ newItem.errorType=errorType;
+ errorQueue << newItem;
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog");
+ emit error(folder.absoluteFilePath(),folder.size(),folder.lastModified(),errorString);
+ FileErrorDialog dialog(interface,folder,errorString,errorType);
+ dialog.exec();/// \bug crash when external close
+ FileErrorAction newAction=dialog.getAction();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"close dialog: "+QString::number(newAction));
+ if(newAction==FileError_Cancel)
+ {
+ emit cancelAll();
+ return;
+ }
+ if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError)
+ {
+ setComboBoxFolderError(newAction);
+ alwaysDoThisActionForFolderError=newAction;
+ }
+ dialogIsOpen=false;
+ switch(newAction)
+ {
+ case FileError_Skip:
+ listThread->mkPathQueue.skip();
+ break;
+ case FileError_Retry:
+ listThread->mkPathQueue.retry();
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unknow switch case: "+QString::number(newAction));
+ break;
+ }
+ if(!isCalledByShowOneNewDialog)
+ emit queryOneNewDialog();
+ return;
+ break;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop");
+}
+
+//show one new dialog if needed
+void CopyEngine::showOneNewDialog()
+{
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"alreadyExistsQueue.size(): "+QString::number(alreadyExistsQueue.size()));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"errorQueue.size(): "+QString::number(errorQueue.size()));
+ int loop_size=alreadyExistsQueue.size();
+ while(loop_size>0)
+ {
+ if(alreadyExistsQueue.first().transfer!=NULL)
+ {
+ fileAlreadyExists(alreadyExistsQueue.first().source,
+ alreadyExistsQueue.first().destination,
+ alreadyExistsQueue.first().isSame,
+ alreadyExistsQueue.first().transfer,
+ true);
+ }
+ else if(alreadyExistsQueue.first().scan!=NULL)
+ folderAlreadyExists(alreadyExistsQueue.first().source,
+ alreadyExistsQueue.first().destination,
+ alreadyExistsQueue.first().isSame,
+ alreadyExistsQueue.first().scan,
+ true);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"bug, no thread actived");
+ alreadyExistsQueue.removeFirst();
+ loop_size--;
+ }
+ loop_size=errorQueue.size();
+ while(errorQueue.size()>0 && loop_size>0)
+ {
+ if(errorQueue.first().transfer!=NULL)
+ errorOnFile(errorQueue.first().inode,errorQueue.first().errorString,errorQueue.first().transfer,errorQueue.first().errorType,true);
+ else if(errorQueue.first().scan!=NULL)
+ errorOnFolder(errorQueue.first().inode,errorQueue.first().errorString,errorQueue.first().scan,errorQueue.first().errorType,true);
+ else if(errorQueue.first().mkPath)
+ mkPathErrorOnFolder(errorQueue.first().inode,errorQueue.first().errorString,errorQueue.first().errorType,true);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"bug, no thread actived");
+ errorQueue.removeFirst();
+ loop_size--;
+ }
+}
diff --git a/plugins/CopyEngine/Ultracopier/CopyEngine.cpp b/plugins/CopyEngine/Ultracopier/CopyEngine.cpp
new file mode 100644
index 0000000..f9e16f4
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/CopyEngine.cpp
@@ -0,0 +1,1238 @@
+/** \file copyEngine.cpp
+\brief Define the copy engine
+\author alpha_one_x86 */
+
+#include <QFileDialog>
+#include <QMessageBox>
+#include <cmath>
+
+#include "CopyEngine.h"
+#include "FolderExistsDialog.h"
+#include "../../../interface/PluginInterface_CopyEngine.h"
+
+// The cmath header from MSVC does not contain round()
+#if (defined(_WIN64) || defined(_WIN32)) && defined(_MSC_VER)
+inline double round(double d) {
+ return floor( d + 0.5 );
+}
+#endif
+
+CopyEngine::CopyEngine(FacilityInterface * facilityEngine) :
+ ui(new Ui::copyEngineOptions())
+{
+ listThread=new ListThread(facilityEngine);
+ this->facilityEngine = facilityEngine;
+ filters = NULL;
+ renamingRules = NULL;
+
+ blockSize = ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE;
+ sequentialBuffer = ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE*ULTRACOPIER_PLUGIN_DEFAULT_SEQUENTIAL_NUMBER_OF_BLOCK;
+ parallelBuffer = ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE*ULTRACOPIER_PLUGIN_DEFAULT_PARALLEL_NUMBER_OF_BLOCK;
+ interface = NULL;
+ tempWidget = NULL;
+ uiIsInstalled = false;
+ dialogIsOpen = false;
+ renameTheOriginalDestination = false;
+ maxSpeed = 0;
+ alwaysDoThisActionForFileExists = FileExists_NotSet;
+ alwaysDoThisActionForFileError = FileError_NotSet;
+ checkDestinationFolderExists = false;
+ stopIt = false;
+ size_for_speed = 0;
+ putAtBottom = 0;
+ forcedMode = false;
+ followTheStrictOrder = false;
+ deletePartiallyTransferredFiles = true;
+ inodeThreads = 16;
+ moveTheWholeFolder = true;
+
+ //implement the SingleShot in this class
+ //timerActionDone.setSingleShot(true);
+ timerActionDone.setInterval(ULTRACOPIER_PLUGIN_TIME_UPDATE_TRASNFER_LIST);
+ //timerProgression.setSingleShot(true);
+ timerProgression.setInterval(ULTRACOPIER_PLUGIN_TIME_UPDATE_PROGRESSION);
+
+ timerUpdateMount.setInterval(ULTRACOPIER_PLUGIN_TIME_UPDATE_MOUNT_MS);
+}
+
+CopyEngine::~CopyEngine()
+{
+ /*if(filters!=NULL)
+ delete filters;
+ if(renamingRules!=NULL)
+ delete renamingRules;
+ destroyed by the widget parent, here the interface
+ */
+ stopIt=true;
+ delete listThread;
+ delete ui;
+}
+
+void CopyEngine::connectTheSignalsSlots()
+{
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ debugDialogWindow.show();
+ #endif
+ if(!connect(listThread,&ListThread::actionInProgess, this,&CopyEngine::actionInProgess, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect actionInProgess()");
+ if(!connect(listThread,&ListThread::actionInProgess, this,&CopyEngine::newActionInProgess, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect actionInProgess() to slot");
+ if(!connect(listThread,&ListThread::newFolderListing, this,&CopyEngine::newFolderListing, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect newFolderListing()");
+ if(!connect(listThread,&ListThread::isInPause, this,&CopyEngine::isInPause, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect isInPause()");
+ if(!connect(listThread,&ListThread::error, this,&CopyEngine::error, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect error()");
+ if(!connect(listThread,&ListThread::rmPath, this,&CopyEngine::rmPath, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect rmPath()");
+ if(!connect(listThread,&ListThread::mkPath, this,&CopyEngine::mkPath, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect mkPath()");
+ if(!connect(listThread,&ListThread::newActionOnList, this,&CopyEngine::newActionOnList, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect newActionOnList()");
+ if(!connect(listThread,&ListThread::doneTime, this,&CopyEngine::doneTime, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect doneTime()");
+ if(!connect(listThread,&ListThread::pushFileProgression, this,&CopyEngine::pushFileProgression, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect pushFileProgression()");
+ if(!connect(listThread,&ListThread::pushGeneralProgression, this,&CopyEngine::pushGeneralProgression, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect pushGeneralProgression()");
+ if(!connect(listThread,&ListThread::syncReady, this,&CopyEngine::syncReady, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect syncReady()");
+ if(!connect(listThread,&ListThread::canBeDeleted, this,&CopyEngine::canBeDeleted, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect canBeDeleted()");
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ if(!connect(listThread,&ListThread::debugInformation, this,&CopyEngine::debugInformation, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect debugInformation()");
+ #endif
+
+ if(!connect(listThread,&ListThread::send_fileAlreadyExists, this,&CopyEngine::fileAlreadyExistsSlot, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_fileAlreadyExists()");
+ if(!connect(listThread,&ListThread::send_errorOnFile, this,&CopyEngine::errorOnFileSlot, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_errorOnFile()");
+ if(!connect(listThread,&ListThread::send_folderAlreadyExists, this,&CopyEngine::folderAlreadyExistsSlot, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_folderAlreadyExists()");
+ if(!connect(listThread,&ListThread::send_errorOnFolder, this,&CopyEngine::errorOnFolderSlot, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_errorOnFolder()");
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ if(!connect(listThread,&ListThread::updateTheDebugInfo, this,&CopyEngine::updateTheDebugInfo, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect updateTheDebugInfo()");
+ #endif
+ if(!connect(listThread,&ListThread::errorTransferList, this,&CopyEngine::errorTransferList, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect errorTransferList()");
+ if(!connect(listThread,&ListThread::warningTransferList, this,&CopyEngine::warningTransferList, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect warningTransferList()");
+ if(!connect(listThread,&ListThread::mkPathErrorOnFolder, this,&CopyEngine::mkPathErrorOnFolderSlot, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect mkPathErrorOnFolder()");
+ if(!connect(listThread,&ListThread::send_realBytesTransfered, this,&CopyEngine::get_realBytesTransfered, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_realBytesTransfered()");
+
+ if(!connect(this,&CopyEngine::tryCancel, listThread,&ListThread::cancel, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect tryCancel()");
+ if(!connect(this,&CopyEngine::getNeedPutAtBottom, listThread,&ListThread::getNeedPutAtBottom, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect getNeedPutAtBottom()");
+ if(!connect(listThread,&ListThread::haveNeedPutAtBottom, this,&CopyEngine::haveNeedPutAtBottom, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect haveNeedPutAtBottom()");
+
+
+ if(!connect(this,&CopyEngine::signal_pause, listThread,&ListThread::pause, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_pause()");
+ if(!connect(this,&CopyEngine::signal_exportErrorIntoTransferList,listThread,&ListThread::exportErrorIntoTransferList, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_exportErrorIntoTransferList()");
+ if(!connect(this,&CopyEngine::signal_resume, listThread,&ListThread::resume, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_resume()");
+ if(!connect(this,&CopyEngine::signal_skip, listThread,&ListThread::skip, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_skip()");
+ if(!connect(this,&CopyEngine::signal_setCollisionAction, listThread,&ListThread::setAlwaysFileExistsAction, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_setCollisionAction()");
+ if(!connect(this,&CopyEngine::signal_setTransferAlgorithm, listThread,&ListThread::setTransferAlgorithm, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_setCollisionAction()");
+ if(!connect(this,&CopyEngine::signal_setFolderCollision, listThread,&ListThread::setFolderCollision, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_setFolderCollision()");
+ if(!connect(this,&CopyEngine::signal_removeItems, listThread,&ListThread::removeItems, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_removeItems()");
+ if(!connect(this,&CopyEngine::signal_moveItemsOnTop, listThread,&ListThread::moveItemsOnTop, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_moveItemsOnTop()");
+ if(!connect(this,&CopyEngine::signal_moveItemsUp, listThread,&ListThread::moveItemsUp, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_moveItemsUp()");
+ if(!connect(this,&CopyEngine::signal_moveItemsDown, listThread,&ListThread::moveItemsDown, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_moveItemsDown()");
+ if(!connect(this,&CopyEngine::signal_moveItemsOnBottom, listThread,&ListThread::moveItemsOnBottom, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_moveItemsOnBottom()");
+ if(!connect(this,&CopyEngine::signal_exportTransferList, listThread,&ListThread::exportTransferList, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_exportTransferList()");
+ if(!connect(this,&CopyEngine::signal_importTransferList, listThread,&ListThread::importTransferList, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_importTransferList()");
+ if(!connect(this,&CopyEngine::signal_forceMode, listThread,&ListThread::forceMode, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_forceMode()");
+ if(!connect(this,&CopyEngine::send_osBufferLimit, listThread,&ListThread::set_osBufferLimit, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_osBufferLimit()");
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ if(!connect(this,&CopyEngine::send_speedLimitation, listThread,&ListThread::setSpeedLimitation, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_speedLimitation()");
+ #endif
+ if(!connect(this,&CopyEngine::send_blockSize, listThread,&ListThread::setBlockSize, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_blockSize()");
+ if(!connect(this,&CopyEngine::send_parallelBuffer, listThread,&ListThread::setParallelBuffer, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect setParallelBuffer()");
+ if(!connect(this,&CopyEngine::send_sequentialBuffer, listThread,&ListThread::setSequentialBuffer, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect setSequentialBuffer()");
+ if(!connect(this,&CopyEngine::send_parallelizeIfSmallerThan, listThread,&ListThread::setParallelizeIfSmallerThan, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect setParallelizeIfSmallerThan()");
+ if(!connect(this,&CopyEngine::send_moveTheWholeFolder, listThread,&ListThread::setMoveTheWholeFolder, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect moveTheWholeFolder()");
+ if(!connect(this,&CopyEngine::send_deletePartiallyTransferredFiles, listThread,&ListThread::setDeletePartiallyTransferredFiles, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect deletePartiallyTransferredFiles()");
+ if(!connect(this,&CopyEngine::send_setRenameTheOriginalDestination, listThread,&ListThread::setRenameTheOriginalDestination, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect setRenameTheOriginalDestination()");
+ if(!connect(this,&CopyEngine::send_setInodeThreads, listThread,&ListThread::setInodeThreads, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect setInodeThreads()");
+ if(!connect(this,&CopyEngine::send_followTheStrictOrder, listThread,&ListThread::setFollowTheStrictOrder, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect followTheStrictOrder()");
+ if(!connect(this,&CopyEngine::send_setFilters,listThread,&ListThread::set_setFilters, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_setFilters()");
+ if(!connect(this,&CopyEngine::send_sendNewRenamingRules,listThread,&ListThread::set_sendNewRenamingRules, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_sendNewRenamingRules()");
+ if(!connect(&timerActionDone,&QTimer::timeout, listThread,&ListThread::sendActionDone))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect timerActionDone");
+ if(!connect(&timerProgression,&QTimer::timeout, listThread,&ListThread::sendProgression))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect timerProgression");
+ if(!connect(listThread,&ListThread::missingDiskSpace, this,&CopyEngine::missingDiskSpace,Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect timerProgression");
+
+ if(!connect(this,&CopyEngine::queryOneNewDialog,this,&CopyEngine::showOneNewDialog,Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect queryOneNewDialog()");
+ if(!connect(listThread,&ListThread::errorToRetry,this,&CopyEngine::errorToRetry,Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect errorToRetry()");
+
+ if(!connect(&timerUpdateMount,&QTimer::timeout,listThread,&ListThread::set_updateMount, Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect set_updateMount()");
+}
+
+#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+void CopyEngine::updateTheDebugInfo(const QStringList &newList, const QStringList &newList2, const int &numberOfInodeOperation)
+{
+ debugDialogWindow.setTransferThreadList(newList);
+ debugDialogWindow.setTransferList(newList2);
+ debugDialogWindow.setInodeUsage(numberOfInodeOperation);
+}
+#endif
+
+//to send the options panel
+bool CopyEngine::getOptionsEngine(QWidget * tempWidget)
+{
+ this->tempWidget=tempWidget;
+ ui->setupUi(tempWidget);
+ ui->toolBox->setCurrentIndex(0);
+ ui->blockSize->setMaximum(ULTRACOPIER_PLUGIN_MAX_BLOCK_SIZE);
+ connect(tempWidget, &QWidget::destroyed, this, &CopyEngine::resetTempWidget);
+ //conect the ui widget
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ if(!setSpeedLimitation(maxSpeed))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to set the speed limitation");
+ #endif
+
+ //here else, the default settings can't be loaded
+ uiIsInstalled=true;
+
+ setBlockSize(blockSize);
+ setSequentialBuffer(sequentialBuffer);
+ setParallelBuffer(parallelBuffer);
+ setAutoStart(autoStart);
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ setRsync(rsync);
+ #else
+ ui->label_rsync->setVisible(false);
+ ui->rsync->setVisible(false);
+ #endif
+ setCheckDestinationFolderExists(checkDestinationFolderExists);
+ set_doChecksum(doChecksum);
+ set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible);
+ set_checksumOnlyOnError(checksumOnlyOnError);
+ set_osBuffer(osBuffer);
+ set_osBufferLimited(osBufferLimited);
+ set_osBufferLimit(osBufferLimit);
+ setRightTransfer(doRightTransfer);
+ setKeepDate(keepDate);
+ setParallelizeIfSmallerThan(parallelizeIfSmallerThan);
+ setFollowTheStrictOrder(followTheStrictOrder);
+ setDeletePartiallyTransferredFiles(deletePartiallyTransferredFiles);
+ setInodeThreads(inodeThreads);
+ setRenameTheOriginalDestination(renameTheOriginalDestination);
+ setMoveTheWholeFolder(moveTheWholeFolder);
+ setCheckDiskSpace(checkDiskSpace);
+ setDefaultDestinationFolder(defaultDestinationFolder);
+
+ switch(alwaysDoThisActionForFileExists)
+ {
+ case FileExists_NotSet:
+ ui->comboBoxFileCollision->setCurrentIndex(0);
+ break;
+ case FileExists_Skip:
+ ui->comboBoxFileCollision->setCurrentIndex(1);
+ break;
+ case FileExists_Overwrite:
+ ui->comboBoxFileCollision->setCurrentIndex(2);
+ break;
+ case FileExists_OverwriteIfNotSame:
+ ui->comboBoxFileCollision->setCurrentIndex(3);
+ break;
+ case FileExists_OverwriteIfNewer:
+ ui->comboBoxFileCollision->setCurrentIndex(4);
+ break;
+ case FileExists_OverwriteIfOlder:
+ ui->comboBoxFileCollision->setCurrentIndex(5);
+ break;
+ case FileExists_Rename:
+ ui->comboBoxFileCollision->setCurrentIndex(6);
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored");
+ ui->comboBoxFileCollision->setCurrentIndex(0);
+ break;
+ }
+ switch(alwaysDoThisActionForFileError)
+ {
+ case FileError_NotSet:
+ ui->comboBoxFileError->setCurrentIndex(0);
+ break;
+ case FileError_Skip:
+ ui->comboBoxFileError->setCurrentIndex(1);
+ break;
+ case FileError_PutToEndOfTheList:
+ ui->comboBoxFileError->setCurrentIndex(2);
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored");
+ ui->comboBoxFileError->setCurrentIndex(0);
+ break;
+ }
+ switch(alwaysDoThisActionForFolderExists)
+ {
+ case FolderExists_NotSet:
+ ui->comboBoxFolderCollision->setCurrentIndex(0);
+ break;
+ case FolderExists_Merge:
+ ui->comboBoxFolderCollision->setCurrentIndex(1);
+ break;
+ case FolderExists_Skip:
+ ui->comboBoxFolderCollision->setCurrentIndex(2);
+ break;
+ case FolderExists_Rename:
+ ui->comboBoxFolderCollision->setCurrentIndex(3);
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored");
+ ui->comboBoxFolderCollision->setCurrentIndex(0);
+ break;
+ }
+ switch(alwaysDoThisActionForFolderError)
+ {
+ case FileError_NotSet:
+ ui->comboBoxFolderError->setCurrentIndex(0);
+ break;
+ case FileError_Skip:
+ ui->comboBoxFolderError->setCurrentIndex(1);
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored: "+QString::number(alwaysDoThisActionForFolderError));
+ ui->comboBoxFolderError->setCurrentIndex(0);
+ break;
+ }
+ switch(transferAlgorithm)
+ {
+ case TransferAlgorithm_Automatic:
+ ui->transferAlgorithm->setCurrentIndex(0);
+ break;
+ case TransferAlgorithm_Sequential:
+ ui->transferAlgorithm->setCurrentIndex(1);
+ break;
+ case TransferAlgorithm_Parallel:
+ ui->transferAlgorithm->setCurrentIndex(2);
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored");
+ ui->transferAlgorithm->setCurrentIndex(0);
+ break;
+ }
+ return true;
+}
+
+//to have interface widget to do modal dialog
+void CopyEngine::setInterfacePointer(QWidget * interface)
+{
+ this->interface=interface;
+ filters=new Filters(tempWidget);
+ renamingRules=new RenamingRules(tempWidget);
+
+ if(uiIsInstalled)
+ {
+ connect(ui->doRightTransfer, &QCheckBox::toggled, this,&CopyEngine::setRightTransfer);
+ connect(ui->keepDate, &QCheckBox::toggled, this,&CopyEngine::setKeepDate);
+ connect(ui->blockSize, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngine::setBlockSize);
+ connect(ui->autoStart, &QCheckBox::toggled, this,&CopyEngine::setAutoStart);
+ connect(ui->doChecksum, &QCheckBox::toggled, this,&CopyEngine::doChecksum_toggled);
+ connect(ui->checksumIgnoreIfImpossible, &QCheckBox::toggled, this,&CopyEngine::checksumIgnoreIfImpossible_toggled);
+ connect(ui->checksumOnlyOnError, &QCheckBox::toggled, this,&CopyEngine::checksumOnlyOnError_toggled);
+ connect(ui->osBuffer, &QCheckBox::toggled, this,&CopyEngine::osBuffer_toggled);
+ connect(ui->osBufferLimited, &QCheckBox::toggled, this,&CopyEngine::osBufferLimited_toggled);
+ connect(ui->osBufferLimit, &QSpinBox::editingFinished, this,&CopyEngine::osBufferLimit_editingFinished);
+ connect(ui->moveTheWholeFolder, &QCheckBox::toggled, this,&CopyEngine::setMoveTheWholeFolder);
+ connect(ui->deletePartiallyTransferredFiles, &QCheckBox::toggled, this,&CopyEngine::setDeletePartiallyTransferredFiles);
+ connect(ui->followTheStrictOrder, &QCheckBox::toggled, this,&CopyEngine::setFollowTheStrictOrder);
+ connect(ui->checkBoxDestinationFolderExists, &QCheckBox::toggled, this,&CopyEngine::setCheckDestinationFolderExists);
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ connect(ui->rsync, &QCheckBox::toggled, this,&CopyEngine::setRsync);
+ #endif
+ connect(ui->renameTheOriginalDestination, &QCheckBox::toggled, this,&CopyEngine::setRenameTheOriginalDestination);
+ connect(filters, &Filters::haveNewFilters, this,&CopyEngine::sendNewFilters);
+ connect(ui->filters, &QPushButton::clicked, this,&CopyEngine::showFilterDialog);
+ connect(ui->inodeThreads, &QSpinBox::editingFinished, this,&CopyEngine::inodeThreadsFinished);
+ connect(ui->inodeThreads, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngine::setInodeThreads);
+ connect(ui->defaultDestinationFolderBrowse, &QPushButton::clicked, this,&CopyEngine::defaultDestinationFolderBrowse);
+
+ connect(ui->sequentialBuffer, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngine::setSequentialBuffer);
+ connect(ui->parallelBuffer, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngine::setParallelBuffer);
+ connect(ui->parallelizeIfSmallerThan, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngine::setParallelizeIfSmallerThan);
+ connect(ui->comboBoxFolderError, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngine::setFolderError);
+ connect(ui->comboBoxFolderCollision, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngine::setFolderCollision);
+ connect(ui->comboBoxFileError, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngine::setFileError);
+ connect(ui->comboBoxFileCollision, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngine::setFileCollision);
+ connect(ui->transferAlgorithm, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngine::setTransferAlgorithm);
+
+ if(!connect(renamingRules,&RenamingRules::sendNewRenamingRules,this,&CopyEngine::sendNewRenamingRules))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect sendNewRenamingRules()");
+ if(!connect(ui->renamingRules,&QPushButton::clicked,this,&CopyEngine::showRenamingRules))
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect renamingRules.clicked()");
+ }
+
+ filters->setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
+ set_setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
+
+ renamingRules->setRenamingRules(firstRenamingRule,otherRenamingRule);
+ emit send_sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
+}
+
+bool CopyEngine::haveSameSource(const QStringList &sources)
+{
+ return listThread->haveSameSource(sources);
+}
+
+bool CopyEngine::haveSameDestination(const QString &destination)
+{
+ return listThread->haveSameDestination(destination);
+}
+
+bool CopyEngine::newCopy(const QStringList &sources)
+{
+ if(forcedMode && mode!=Ultracopier::Copy)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The engine is forced to move, you can't copy with it");
+ QMessageBox::critical(NULL,facilityEngine->translateText(QStringLiteral("Internal error")),tr("The engine is forced to move, you can't copy with it"));
+ return false;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ QString destination;
+ if(!defaultDestinationFolder.isEmpty() && QDir(defaultDestinationFolder).exists())
+ destination = defaultDestinationFolder;
+ else
+ destination = askDestination();
+ if(destination.isEmpty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Canceled by the user");
+ return false;
+ }
+ return listThread->newCopy(sources,destination);
+}
+
+bool CopyEngine::newCopy(const QStringList &sources,const QString &destination)
+{
+ if(forcedMode && mode!=Ultracopier::Copy)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The engine is forced to move, you can't copy with it");
+ QMessageBox::critical(NULL,facilityEngine->translateText(QStringLiteral("Internal error")),tr("The engine is forced to move, you can't copy with it"));
+ return false;
+ }
+ return listThread->newCopy(sources,destination);
+}
+
+bool CopyEngine::newMove(const QStringList &sources)
+{
+ if(forcedMode && mode!=Ultracopier::Move)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The engine is forced to copy, you can't move with it");
+ QMessageBox::critical(NULL,facilityEngine->translateText(QStringLiteral("Internal error")),tr("The engine is forced to copy, you can't move with it"));
+ return false;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ QString destination;
+ if(!ui->defaultDestinationFolder->text().isEmpty() && QDir(ui->defaultDestinationFolder->text()).exists())
+ destination = ui->defaultDestinationFolder->text();
+ else
+ destination = askDestination();
+ if(destination.isEmpty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Canceled by the user");
+ return false;
+ }
+ return listThread->newMove(sources,destination);
+}
+
+bool CopyEngine::newMove(const QStringList &sources,const QString &destination)
+{
+ if(forcedMode && mode!=Ultracopier::Move)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The engine is forced to copy, you can't move with it");
+ QMessageBox::critical(NULL,facilityEngine->translateText(QStringLiteral("Internal error")),tr("The engine is forced to copy, you can't move with it"));
+ return false;
+ }
+ return listThread->newMove(sources,destination);
+}
+
+void CopyEngine::defaultDestinationFolderBrowse()
+{
+ QString destination = askDestination();
+ if(destination.isEmpty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Canceled by the user");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(uiIsInstalled)
+ ui->defaultDestinationFolder->setText(destination);
+}
+
+QString CopyEngine::askDestination()
+{
+ QString destination = listThread->getUniqueDestinationFolder();
+ if(!destination.isEmpty())
+ {
+ QMessageBox::StandardButton button=QMessageBox::question(interface,tr("Destination"),tr("Use the actual destination \"%1\"?").arg(destination),QMessageBox::Yes | QMessageBox::No,QMessageBox::Yes);
+ if(button==QMessageBox::Yes)
+ return destination;
+ }
+ destination=QFileDialog::getExistingDirectory(interface,facilityEngine->translateText(QStringLiteral("Select destination directory")),QStringLiteral(""),QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
+ return destination;
+}
+
+void CopyEngine::newTransferList(const QString &file)
+{
+ emit signal_importTransferList(file);
+}
+
+//because direct access to list thread into the main thread can't be do
+quint64 CopyEngine::realByteTransfered()
+{
+ return size_for_speed;
+}
+
+//speed limitation
+bool CopyEngine::supportSpeedLimitation() const
+{
+ #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+ return true;
+ #else
+ return false;
+ #endif
+}
+
+/** \brief to sync the transfer list
+ * Used when the interface is changed, useful to minimize the memory size */
+void CopyEngine::syncTransferList()
+{
+ listThread->syncTransferList();
+}
+
+void CopyEngine::set_doChecksum(bool doChecksum)
+{
+ listThread->set_doChecksum(doChecksum);
+ if(uiIsInstalled)
+ {
+ ui->doChecksum->setChecked(doChecksum);
+ ui->checksumOnlyOnError->setEnabled(ui->doChecksum->isChecked());
+ ui->checksumIgnoreIfImpossible->setEnabled(ui->doChecksum->isChecked());
+ }
+ this->doChecksum=doChecksum;
+}
+
+void CopyEngine::set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible)
+{
+ listThread->set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible);
+ if(uiIsInstalled)
+ ui->checksumIgnoreIfImpossible->setChecked(checksumIgnoreIfImpossible);
+ this->checksumIgnoreIfImpossible=checksumIgnoreIfImpossible;
+}
+
+void CopyEngine::set_checksumOnlyOnError(bool checksumOnlyOnError)
+{
+ listThread->set_checksumOnlyOnError(checksumOnlyOnError);
+ if(uiIsInstalled)
+ ui->checksumOnlyOnError->setChecked(checksumOnlyOnError);
+ this->checksumOnlyOnError=checksumOnlyOnError;
+}
+
+void CopyEngine::set_osBuffer(bool osBuffer)
+{
+ listThread->set_osBuffer(osBuffer);
+ if(uiIsInstalled)
+ {
+ ui->osBuffer->setChecked(osBuffer);
+ updateBufferCheckbox();
+ }
+ this->osBuffer=osBuffer;
+}
+
+void CopyEngine::set_osBufferLimited(bool osBufferLimited)
+{
+ listThread->set_osBufferLimited(osBufferLimited);
+ if(uiIsInstalled)
+ {
+ ui->osBufferLimited->setChecked(osBufferLimited);
+ updateBufferCheckbox();
+ }
+ this->osBufferLimited=osBufferLimited;
+}
+
+void CopyEngine::set_osBufferLimit(unsigned int osBufferLimit)
+{
+ emit send_osBufferLimit(osBufferLimit);
+ if(uiIsInstalled)
+ ui->osBufferLimit->setValue(osBufferLimit);
+ this->osBufferLimit=osBufferLimit;
+}
+
+void CopyEngine::updateBufferCheckbox()
+{
+ ui->osBufferLimited->setEnabled(ui->osBuffer->isChecked());
+ ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
+}
+
+void CopyEngine::set_setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions)
+{
+ if(filters!=NULL)
+ {
+ filters->setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
+ emit send_setFilters(filters->getInclude(),filters->getExclude());
+ }
+ this->includeStrings=includeStrings;
+ this->includeOptions=includeOptions;
+ this->excludeStrings=excludeStrings;
+ this->excludeOptions=excludeOptions;
+}
+
+void CopyEngine::setRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
+{
+ sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
+}
+
+bool CopyEngine::userAddFolder(const Ultracopier::CopyMode &mode)
+{
+ QString source = QFileDialog::getExistingDirectory(interface,facilityEngine->translateText(QStringLiteral("Select source directory")),QStringLiteral(""),QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
+ if(source.isEmpty() || source.isNull() || source=="")
+ return false;
+ if(mode==Ultracopier::Copy)
+ return newCopy(QStringList() << source);
+ else
+ return newMove(QStringList() << source);
+}
+
+bool CopyEngine::userAddFile(const Ultracopier::CopyMode &mode)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ QStringList sources = QFileDialog::getOpenFileNames(
+ interface,
+ facilityEngine->translateText(QStringLiteral("Select one or more files to open")),
+ QStringLiteral(""),
+ facilityEngine->translateText(QStringLiteral("All files"))+QStringLiteral(" (*)"));
+ if(sources.isEmpty())
+ return false;
+ if(mode==Ultracopier::Copy)
+ return newCopy(sources);
+ else
+ return newMove(sources);
+}
+
+void CopyEngine::pause()
+{
+ emit signal_pause();
+}
+
+void CopyEngine::resume()
+{
+ emit signal_resume();
+}
+
+void CopyEngine::skip(const quint64 &id)
+{
+ emit signal_skip(id);
+}
+
+void CopyEngine::cancel()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ stopIt=true;
+ timerProgression.stop();
+ timerActionDone.stop();
+ emit tryCancel();
+}
+
+void CopyEngine::removeItems(const QList<int> &ids)
+{
+ emit signal_removeItems(ids);
+}
+
+void CopyEngine::moveItemsOnTop(const QList<int> &ids)
+{
+ emit signal_moveItemsOnTop(ids);
+}
+
+void CopyEngine::moveItemsUp(const QList<int> &ids)
+{
+ emit signal_moveItemsUp(ids);
+}
+
+void CopyEngine::moveItemsDown(const QList<int> &ids)
+{
+ emit signal_moveItemsDown(ids);
+}
+
+void CopyEngine::moveItemsOnBottom(const QList<int> &ids)
+{
+ emit signal_moveItemsOnBottom(ids);
+}
+
+/** \brief give the forced mode, to export/import transfer list */
+void CopyEngine::forceMode(const Ultracopier::CopyMode &mode)
+{
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ if(mode==Ultracopier::Move)
+ {
+ listThread->setRsync(false);
+ rsync=false;
+ }
+ if(uiIsInstalled)
+ ui->rsync->setEnabled(mode==Ultracopier::Copy);
+ #endif
+ if(forcedMode)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Mode forced previously"));
+ QMessageBox::critical(NULL,facilityEngine->translateText(QStringLiteral("Internal error")),tr("The mode has been forced previously. This is an internal error, please report it"));
+ return;
+ }
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ if(mode==Ultracopier::Move)
+ rsync=false;
+ #endif
+ if(mode==Ultracopier::Copy)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Force mode to copy"));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Force mode to move"));
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ if(uiIsInstalled)
+ ui->rsync->setEnabled(mode==Ultracopier::Copy);
+ #endif
+ this->mode=mode;
+ forcedMode=true;
+ emit signal_forceMode(mode);
+}
+
+void CopyEngine::exportTransferList()
+{
+ QString fileName = QFileDialog::getSaveFileName(interface,facilityEngine->translateText(QStringLiteral("Save transfer list")),QStringLiteral("transfer-list.lst"),facilityEngine->translateText(QStringLiteral("Transfer list"))+QStringLiteral(" (*.lst)"));
+ if(fileName.isEmpty())
+ return;
+ emit signal_exportTransferList(fileName);
+}
+
+void CopyEngine::importTransferList()
+{
+ QString fileName = QFileDialog::getOpenFileName(interface,facilityEngine->translateText(QStringLiteral("Open transfer list")),QStringLiteral("transfer-list.lst"),facilityEngine->translateText(QStringLiteral("Transfer list"))+QStringLiteral(" (*.lst)"));
+ if(fileName.isEmpty())
+ return;
+ emit signal_importTransferList(fileName);
+}
+
+void CopyEngine::warningTransferList(const QString &warning)
+{
+ QMessageBox::warning(interface,facilityEngine->translateText(QStringLiteral("Error")),warning);
+}
+
+void CopyEngine::errorTransferList(const QString &error)
+{
+ QMessageBox::critical(interface,facilityEngine->translateText(QStringLiteral("Error")),error);
+}
+
+bool CopyEngine::setSpeedLimitation(const qint64 &speedLimitation)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"maxSpeed: "+QString::number(speedLimitation));
+ maxSpeed=speedLimitation;
+ emit send_speedLimitation(speedLimitation);
+ return true;
+}
+
+void CopyEngine::setFileCollision(int index)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("action index: %1").arg(index));
+ if(uiIsInstalled)
+ if(index!=ui->comboBoxFileCollision->currentIndex())
+ ui->comboBoxFileCollision->setCurrentIndex(index);
+ switch(index)
+ {
+ case 0:
+ alwaysDoThisActionForFileExists=FileExists_NotSet;
+ break;
+ case 1:
+ alwaysDoThisActionForFileExists=FileExists_Skip;
+ break;
+ case 2:
+ alwaysDoThisActionForFileExists=FileExists_Overwrite;
+ break;
+ case 3:
+ alwaysDoThisActionForFileExists=FileExists_OverwriteIfNotSame;
+ break;
+ case 4:
+ alwaysDoThisActionForFileExists=FileExists_OverwriteIfNewer;
+ break;
+ case 5:
+ alwaysDoThisActionForFileExists=FileExists_OverwriteIfOlder;
+ break;
+ case 6:
+ alwaysDoThisActionForFileExists=FileExists_Rename;
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored");
+ alwaysDoThisActionForFileExists=FileExists_NotSet;
+ break;
+ }
+ emit signal_setCollisionAction(alwaysDoThisActionForFileExists);
+}
+
+void CopyEngine::setFileError(int index)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("action index: %1").arg(index));
+ if(uiIsInstalled)
+ if(index!=ui->comboBoxFileError->currentIndex())
+ ui->comboBoxFileError->setCurrentIndex(index);
+ switch(index)
+ {
+ case 0:
+ alwaysDoThisActionForFileError=FileError_NotSet;
+ break;
+ case 1:
+ alwaysDoThisActionForFileError=FileError_Skip;
+ break;
+ case 2:
+ alwaysDoThisActionForFileError=FileError_PutToEndOfTheList;
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored");
+ alwaysDoThisActionForFileError=FileError_NotSet;
+ break;
+ }
+ emit signal_setCollisionAction(alwaysDoThisActionForFileExists);
+}
+
+void CopyEngine::setTransferAlgorithm(int index)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("action index: %1").arg(index));
+ if(uiIsInstalled)
+ if(index!=ui->transferAlgorithm->currentIndex())
+ ui->transferAlgorithm->setCurrentIndex(index);
+ switch(index)
+ {
+ case 0:
+ transferAlgorithm=TransferAlgorithm_Automatic;
+ break;
+ case 1:
+ transferAlgorithm=TransferAlgorithm_Sequential;
+ break;
+ case 2:
+ transferAlgorithm=TransferAlgorithm_Parallel;
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored");
+ transferAlgorithm=TransferAlgorithm_Automatic;
+ break;
+ }
+ if(transferAlgorithm==TransferAlgorithm_Sequential)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"transferAlgorithm==TransferAlgorithm_Sequential");
+ else if(transferAlgorithm==TransferAlgorithm_Automatic)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"transferAlgorithm==TransferAlgorithm_Automatic");
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"transferAlgorithm==TransferAlgorithm_Parallel");
+ emit signal_setTransferAlgorithm(transferAlgorithm);
+}
+
+void CopyEngine::setRightTransfer(const bool doRightTransfer)
+{
+ this->doRightTransfer=doRightTransfer;
+ if(uiIsInstalled)
+ ui->doRightTransfer->setChecked(doRightTransfer);
+ listThread->setRightTransfer(doRightTransfer);
+}
+
+//set keep date
+void CopyEngine::setKeepDate(const bool keepDate)
+{
+ this->keepDate=keepDate;
+ if(uiIsInstalled)
+ ui->keepDate->setChecked(keepDate);
+ listThread->setKeepDate(keepDate);
+}
+
+//set block size in KB
+void CopyEngine::setBlockSize(const int blockSize)
+{
+ this->blockSize=blockSize;
+ if(uiIsInstalled)
+ {
+ ui->blockSize->setValue(blockSize);
+ ui->sequentialBuffer->setSingleStep(blockSize);
+ ui->parallelBuffer->setSingleStep(blockSize);
+ }
+ emit send_blockSize(blockSize);
+ updatedBlockSize();
+}
+
+void CopyEngine::setParallelBuffer(int parallelBuffer)
+{
+ parallelBuffer=round((float)parallelBuffer/(float)blockSize)*blockSize;
+ this->parallelBuffer=parallelBuffer;
+ if(uiIsInstalled)
+ ui->parallelBuffer->setValue(parallelBuffer);
+ emit send_parallelBuffer(parallelBuffer/blockSize);
+}
+
+void CopyEngine::setSequentialBuffer(int sequentialBuffer)
+{
+ sequentialBuffer=round((float)sequentialBuffer/(float)blockSize)*blockSize;
+ this->sequentialBuffer=sequentialBuffer;
+ if(uiIsInstalled)
+ ui->sequentialBuffer->setValue(sequentialBuffer);
+ emit send_sequentialBuffer(sequentialBuffer/blockSize);
+}
+
+void CopyEngine::setParallelizeIfSmallerThan(int parallelizeIfSmallerThan)
+{
+ this->parallelizeIfSmallerThan=parallelizeIfSmallerThan;
+ if(uiIsInstalled)
+ ui->parallelizeIfSmallerThan->setValue(parallelizeIfSmallerThan);
+ emit send_parallelizeIfSmallerThan(parallelizeIfSmallerThan*1024);
+}
+
+void CopyEngine::setMoveTheWholeFolder(const bool &moveTheWholeFolder)
+{
+ this->moveTheWholeFolder=moveTheWholeFolder;
+ if(uiIsInstalled)
+ ui->moveTheWholeFolder->setChecked(moveTheWholeFolder);
+ emit send_moveTheWholeFolder(moveTheWholeFolder);
+}
+
+void CopyEngine::setFollowTheStrictOrder(const bool &followTheStrictOrder)
+{
+ this->followTheStrictOrder=followTheStrictOrder;
+ if(uiIsInstalled)
+ ui->followTheStrictOrder->setChecked(followTheStrictOrder);
+ emit send_followTheStrictOrder(followTheStrictOrder);
+}
+
+void CopyEngine::setDeletePartiallyTransferredFiles(const bool &deletePartiallyTransferredFiles)
+{
+ this->deletePartiallyTransferredFiles=deletePartiallyTransferredFiles;
+ if(uiIsInstalled)
+ ui->deletePartiallyTransferredFiles->setChecked(deletePartiallyTransferredFiles);
+ emit send_deletePartiallyTransferredFiles(deletePartiallyTransferredFiles);
+}
+
+void CopyEngine::setInodeThreads(const int &inodeThreads)
+{
+ this->inodeThreads=inodeThreads;
+ if(uiIsInstalled)
+ ui->inodeThreads->setValue(inodeThreads);
+ emit send_setInodeThreads(inodeThreads);
+}
+
+void CopyEngine::setRenameTheOriginalDestination(const bool &renameTheOriginalDestination)
+{
+ this->renameTheOriginalDestination=renameTheOriginalDestination;
+ if(uiIsInstalled)
+ ui->renameTheOriginalDestination->setChecked(renameTheOriginalDestination);
+ emit send_setRenameTheOriginalDestination(renameTheOriginalDestination);
+}
+
+void CopyEngine::inodeThreadsFinished()
+{
+ this->inodeThreads=ui->inodeThreads->value();
+ emit send_setInodeThreads(inodeThreads);
+}
+
+//set auto start
+void CopyEngine::setAutoStart(const bool autoStart)
+{
+ this->autoStart=autoStart;
+ if(uiIsInstalled)
+ ui->autoStart->setChecked(autoStart);
+ listThread->setAutoStart(autoStart);
+}
+
+#ifdef ULTRACOPIER_PLUGIN_RSYNC
+/// \brief set rsync
+void CopyEngine::setRsync(const bool rsync)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"set rsync: "+QString::number(rsync));
+ this->rsync=rsync;
+ if(uiIsInstalled)
+ {
+ ui->rsync->setChecked(rsync);
+ ui->rsync->setEnabled(forcedMode && mode==Ultracopier::Copy);
+ ui->label_rsync->setEnabled(forcedMode && mode==Ultracopier::Copy);
+ }
+ listThread->setRsync(rsync);
+}
+#endif
+
+//set check destination folder
+void CopyEngine::setCheckDestinationFolderExists(const bool checkDestinationFolderExists)
+{
+ this->checkDestinationFolderExists=checkDestinationFolderExists;
+ if(uiIsInstalled)
+ ui->checkBoxDestinationFolderExists->setChecked(checkDestinationFolderExists);
+ listThread->setCheckDestinationFolderExists(checkDestinationFolderExists);
+}
+
+//reset widget
+void CopyEngine::resetTempWidget()
+{
+ uiIsInstalled=false;
+ tempWidget=NULL;
+}
+
+void CopyEngine::setFolderCollision(int index)
+{
+ switch(index)
+ {
+ case 0:
+ setComboBoxFolderCollision(FolderExists_NotSet,false);
+ break;
+ case 1:
+ setComboBoxFolderCollision(FolderExists_Merge,false);
+ break;
+ case 2:
+ setComboBoxFolderCollision(FolderExists_Skip,false);
+ break;
+ case 3:
+ setComboBoxFolderCollision(FolderExists_Rename,false);
+ break;
+ }
+}
+
+void CopyEngine::setFolderError(int index)
+{
+ switch(index)
+ {
+ case 0:
+ setComboBoxFolderError(FileError_NotSet,false);
+ break;
+ case 1:
+ setComboBoxFolderError(FileError_Skip,false);
+ break;
+ }
+}
+
+//set the translate
+void CopyEngine::newLanguageLoaded()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start, retranslate the widget options");
+ if(tempWidget!=NULL)
+ {
+ ui->retranslateUi(tempWidget);
+ ui->comboBoxFolderError->setItemText(0,tr("Ask"));
+ ui->comboBoxFolderError->setItemText(1,tr("Skip"));
+
+ ui->comboBoxFolderCollision->setItemText(0,tr("Ask"));
+ ui->comboBoxFolderCollision->setItemText(1,tr("Merge"));
+ ui->comboBoxFolderCollision->setItemText(2,tr("Skip"));
+ ui->comboBoxFolderCollision->setItemText(3,tr("Rename"));
+
+ ui->comboBoxFileError->setItemText(0,tr("Ask"));
+ ui->comboBoxFileError->setItemText(1,tr("Skip"));
+ ui->comboBoxFileError->setItemText(2,tr("Put at the end"));
+
+ ui->comboBoxFileCollision->setItemText(0,tr("Ask"));
+ ui->comboBoxFileCollision->setItemText(1,tr("Skip"));
+ ui->comboBoxFileCollision->setItemText(2,tr("Overwrite"));
+ ui->comboBoxFileCollision->setItemText(3,tr("Overwrite if different"));
+ ui->comboBoxFileCollision->setItemText(4,tr("Overwrite if newer"));
+ ui->comboBoxFileCollision->setItemText(5,tr("Overwrite if older"));
+ ui->comboBoxFileCollision->setItemText(6,tr("Rename"));
+
+ ui->transferAlgorithm->setItemText(0,tr("Automatic"));
+ ui->transferAlgorithm->setItemText(1,tr("Sequential"));
+ ui->transferAlgorithm->setItemText(2,tr("Parallel"));
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"ui not loaded!");
+}
+
+void CopyEngine::setComboBoxFolderCollision(FolderExistsAction action,bool changeComboBox)
+{
+ alwaysDoThisActionForFolderExists=action;
+ emit signal_setFolderCollision(alwaysDoThisActionForFolderExists);
+ if(!changeComboBox || !uiIsInstalled)
+ return;
+ switch(action)
+ {
+ case FolderExists_Merge:
+ ui->comboBoxFolderCollision->setCurrentIndex(1);
+ break;
+ case FolderExists_Skip:
+ ui->comboBoxFolderCollision->setCurrentIndex(2);
+ break;
+ case FolderExists_Rename:
+ ui->comboBoxFolderCollision->setCurrentIndex(3);
+ break;
+ default:
+ ui->comboBoxFolderCollision->setCurrentIndex(0);
+ break;
+ }
+}
+
+void CopyEngine::setComboBoxFolderError(FileErrorAction action,bool changeComboBox)
+{
+ alwaysDoThisActionForFileError=action;
+ if(!changeComboBox || !uiIsInstalled)
+ return;
+ switch(action)
+ {
+ case FileError_Skip:
+ ui->comboBoxFolderError->setCurrentIndex(1);
+ break;
+ default:
+ ui->comboBoxFolderError->setCurrentIndex(0);
+ break;
+ }
+}
+
+void CopyEngine::doChecksum_toggled(bool doChecksum)
+{
+ listThread->set_doChecksum(doChecksum);
+}
+
+void CopyEngine::checksumOnlyOnError_toggled(bool checksumOnlyOnError)
+{
+ listThread->set_checksumOnlyOnError(checksumOnlyOnError);
+}
+
+void CopyEngine::checksumIgnoreIfImpossible_toggled(bool checksumIgnoreIfImpossible)
+{
+ listThread->set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible);
+}
+
+void CopyEngine::osBuffer_toggled(bool osBuffer)
+{
+ listThread->set_osBuffer(osBuffer);
+ updateBufferCheckbox();
+}
+
+void CopyEngine::osBufferLimited_toggled(bool osBufferLimited)
+{
+ listThread->set_osBufferLimited(osBufferLimited);
+ updateBufferCheckbox();
+}
+
+void CopyEngine::osBufferLimit_editingFinished()
+{
+ emit send_osBufferLimit(ui->osBufferLimit->value());
+}
+
+void CopyEngine::showFilterDialog()
+{
+ if(filters!=NULL)
+ filters->exec();
+}
+
+void CopyEngine::sendNewFilters()
+{
+ if(filters!=NULL)
+ emit send_setFilters(filters->getInclude(),filters->getExclude());
+}
+
+void CopyEngine::sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("new filter"));
+ this->firstRenamingRule=firstRenamingRule;
+ this->otherRenamingRule=otherRenamingRule;
+ emit send_sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
+}
+
+void CopyEngine::showRenamingRules()
+{
+ if(renamingRules==NULL)
+ {
+ QMessageBox::critical(NULL,tr("Options error"),tr("Options engine is not loaded. Unable to access the filters"));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"options not loaded");
+ return;
+ }
+ renamingRules->exec();
+}
+
+void CopyEngine::get_realBytesTransfered(quint64 realBytesTransfered)
+{
+ size_for_speed=realBytesTransfered;
+}
+
+void CopyEngine::newActionInProgess(Ultracopier::EngineActionInProgress action)
+{
+ if(action==Ultracopier::Idle)
+ {
+ timerProgression.stop();
+ timerActionDone.stop();
+ }
+ else
+ {
+ timerProgression.start();
+ timerActionDone.start();
+ }
+}
+
+void CopyEngine::updatedBlockSize()
+{
+ if(uiIsInstalled)
+ {
+ ui->sequentialBuffer->setMinimum(ui->blockSize->value());
+ ui->sequentialBuffer->setSingleStep(ui->blockSize->value());
+ ui->sequentialBuffer->setMaximum(ui->blockSize->value()*ULTRACOPIER_PLUGIN_MAX_SEQUENTIAL_NUMBER_OF_BLOCK);
+ ui->parallelBuffer->setMinimum(ui->blockSize->value());
+ ui->parallelBuffer->setSingleStep(ui->blockSize->value());
+ ui->parallelBuffer->setMaximum(ui->blockSize->value()*ULTRACOPIER_PLUGIN_MAX_PARALLEL_NUMBER_OF_BLOCK);
+ }
+ setParallelBuffer(parallelBuffer);
+ setSequentialBuffer(sequentialBuffer);
+}
+
+void CopyEngine::setCheckDiskSpace(const bool &checkDiskSpace)
+{
+ this->checkDiskSpace=checkDiskSpace;
+ if(uiIsInstalled)
+ ui->checkDiskSpace->setChecked(checkDiskSpace);
+ listThread->setCheckDiskSpace(checkDiskSpace);
+}
+
+void CopyEngine::setDefaultDestinationFolder(const QString &defaultDestinationFolder)
+{
+ this->defaultDestinationFolder=defaultDestinationFolder;
+ if(uiIsInstalled)
+ ui->defaultDestinationFolder->setText(defaultDestinationFolder);
+}
+
+void CopyEngine::setCopyListOrder(const bool &order)
+{
+ listThread->setCopyListOrder(order);
+}
+
+void CopyEngine::exportErrorIntoTransferList()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"exportErrorIntoTransferList");
+ QString fileName = QFileDialog::getSaveFileName(interface,facilityEngine->translateText(QStringLiteral("Save transfer list")),QStringLiteral("transfer-list.lst"),facilityEngine->translateText(QStringLiteral("Transfer list"))+QStringLiteral(" (*.lst)"));
+ if(fileName.isEmpty())
+ return;
+ emit signal_exportErrorIntoTransferList(fileName);
+}
diff --git a/plugins/CopyEngine/Ultracopier/CopyEngine.h b/plugins/CopyEngine/Ultracopier/CopyEngine.h
new file mode 100644
index 0000000..d38fd4e
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/CopyEngine.h
@@ -0,0 +1,381 @@
+/** \file copyEngine.h
+\brief Define the copy engine
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#include <QWidget>
+#include <QObject>
+#include <QList>
+#include <QStringList>
+#include <QFileInfo>
+#include <QFile>
+#include <QFileDialog>
+#include <QMessageBox>
+
+#include "../../../interface/PluginInterface_CopyEngine.h"
+#include "FileErrorDialog.h"
+#include "FileExistsDialog.h"
+#include "FolderExistsDialog.h"
+#include "FileIsSameDialog.h"
+#include "ui_copyEngineOptions.h"
+#include "Environment.h"
+#include "ListThread.h"
+#include "Filters.h"
+#include "RenamingRules.h"
+
+#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+#include "DebugDialog.h"
+#include <QTimer>
+#endif
+
+#ifndef COPY_ENGINE_H
+#define COPY_ENGINE_H
+
+namespace Ui {
+ class copyEngineOptions;
+}
+
+/// \brief the implementation of copy engine plugin, manage directly few stuff, else pass to ListThread class.
+class CopyEngine : public PluginInterface_CopyEngine
+{
+ Q_OBJECT
+public:
+ CopyEngine(FacilityInterface * facilityEngine);
+ ~CopyEngine();
+ void connectTheSignalsSlots();
+private:
+ ListThread * listThread;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ DebugDialog debugDialogWindow;
+ #endif
+ QWidget * tempWidget;
+ Ui::copyEngineOptions * ui;
+ bool uiIsInstalled;
+ QWidget * interface;
+ Filters * filters;
+ RenamingRules * renamingRules;
+ FacilityInterface * facilityEngine;
+ quint32 maxSpeed;
+ bool doRightTransfer;
+ bool keepDate;
+ int blockSize;
+ int parallelBuffer;
+ int sequentialBuffer;
+ int parallelizeIfSmallerThan;
+ bool followTheStrictOrder;
+ bool deletePartiallyTransferredFiles;
+ int inodeThreads;
+ bool renameTheOriginalDestination;
+ bool moveTheWholeFolder;
+ bool autoStart;
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ bool rsync;
+ #endif
+ bool checkDestinationFolderExists;
+ FileExistsAction alwaysDoThisActionForFileExists;
+ FileErrorAction alwaysDoThisActionForFileError;
+ FileErrorAction alwaysDoThisActionForFolderError;
+ FolderExistsAction alwaysDoThisActionForFolderExists;
+ TransferAlgorithm transferAlgorithm;
+ bool dialogIsOpen;
+ volatile bool stopIt;
+ QString defaultDestinationFolder;
+ /// \brief error queue
+ struct errorQueueItem
+ {
+ TransferThread * transfer; ///< NULL if send by scan thread
+ ScanFileOrFolder * scan; ///< NULL if send by transfer thread
+ bool mkPath;
+ bool rmPath;
+ QFileInfo inode;
+ QString errorString;
+ ErrorType errorType;
+ };
+ QList<errorQueueItem> errorQueue;
+ /// \brief already exists queue
+ struct alreadyExistsQueueItem
+ {
+ TransferThread * transfer; ///< NULL if send by scan thread
+ ScanFileOrFolder * scan; ///< NULL if send by transfer thread
+ QFileInfo source;
+ QFileInfo destination;
+ bool isSame;
+ };
+ QList<alreadyExistsQueueItem> alreadyExistsQueue;
+ quint64 size_for_speed;//because direct access to list thread into the main thread can't be do
+ Ultracopier::CopyMode mode;
+ bool forcedMode;
+
+ bool doChecksum;
+ bool checksumIgnoreIfImpossible;
+ bool checksumOnlyOnError;
+ bool osBuffer;
+ bool osBufferLimited;
+ bool checkDiskSpace;
+ unsigned int osBufferLimit;
+ QStringList includeStrings,includeOptions,excludeStrings,excludeOptions;
+ QString firstRenamingRule;
+ QString otherRenamingRule;
+
+ //send action done timer
+ QTimer timerActionDone;
+ //send progression timer
+ QTimer timerProgression;
+
+ QTimer timerUpdateMount;
+ int putAtBottom;//to keep how many automatic put at bottom have been used
+private slots:
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ void updateTheDebugInfo(const QStringList &newList, const QStringList &newList2, const int &numberOfInodeOperation);
+ #endif
+
+ /************* External call ********************/
+ //dialog message
+ /// \note Can be call without queue because all call will be serialized
+ void fileAlreadyExistsSlot(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread);
+ /// \note Can be call without queue because all call will be serialized
+ void errorOnFileSlot(QFileInfo fileInfo, QString errorString, TransferThread * thread, const ErrorType &errorType);
+ /// \note Can be call without queue because all call will be serialized
+ void folderAlreadyExistsSlot(QFileInfo source,QFileInfo destination,bool isSame,ScanFileOrFolder * thread);
+ /// \note Can be call without queue because all call will be serialized
+ void errorOnFolderSlot(QFileInfo fileInfo, QString errorString, ScanFileOrFolder * thread, ErrorType errorType);
+ //mkpath event
+ void mkPathErrorOnFolderSlot(QFileInfo, QString, ErrorType errorType);
+
+ //dialog message
+ /// \note Can be call without queue because all call will be serialized
+ void fileAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread,bool isCalledByShowOneNewDialog=false);
+ /// \note Can be call without queue because all call will be serialized
+ void errorOnFile(QFileInfo fileInfo, QString errorString, TransferThread * thread, const ErrorType &errorType, bool isCalledByShowOneNewDialog=false);
+ /// \note Can be call without queue because all call will be serialized
+ void folderAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,ScanFileOrFolder * thread,bool isCalledByShowOneNewDialog=false);
+ /// \note Can be call without queue because all call will be serialized
+ void errorOnFolder(QFileInfo fileInfo,QString errorString,ScanFileOrFolder * thread, ErrorType errorType,bool isCalledByShowOneNewDialog=false);
+ //mkpath event
+ void mkPathErrorOnFolder(QFileInfo, QString, const ErrorType &errorType, bool isCalledByShowOneNewDialog=false);
+
+ //show one new dialog if needed
+ void showOneNewDialog();
+ void sendNewFilters();
+
+ void doChecksum_toggled(bool);
+ void checksumOnlyOnError_toggled(bool);
+ void checksumIgnoreIfImpossible_toggled(bool);
+ void osBuffer_toggled(bool);
+ void osBufferLimited_toggled(bool);
+ void osBufferLimit_editingFinished();
+ void showFilterDialog();
+ void sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
+ void showRenamingRules();
+ void get_realBytesTransfered(quint64 realBytesTransfered);
+ void newActionInProgess(Ultracopier::EngineActionInProgress);
+ void updatedBlockSize();
+ void updateBufferCheckbox();
+ void haveNeedPutAtBottom(bool needPutAtBottom, const QFileInfo &fileInfo, const QString &errorString, TransferThread *thread, const ErrorType &errorType);
+ void missingDiskSpace(QList<Diskspace> list);
+ void exportErrorIntoTransferList();
+public:
+ /** \brief to send the options panel
+ * \return return false if have not the options
+ * \param tempWidget the widget to generate on it the options */
+ bool getOptionsEngine(QWidget * tempWidget);
+ /** \brief to have interface widget to do modal dialog
+ * \param interface to have the widget of the interface, useful for modal dialog */
+ void setInterfacePointer(QWidget * interface);
+ //return empty if multiple
+ /** \brief compare the current sources of the copy, with the passed arguments
+ * \param sources the sources list to compares with the current sources list
+ * \return true if have same sources, else false (or empty) */
+ bool haveSameSource(const QStringList &sources);
+ /** \brief compare the current destination of the copy, with the passed arguments
+ * \param destination the destination to compares with the current destination
+ * \return true if have same destination, else false (or empty) */
+ bool haveSameDestination(const QString &destination);
+ //external soft like file browser have send copy/move list to do
+ /** \brief send copy without destination, ask the destination
+ * \param sources the sources list to copy
+ * \return true if the copy have been accepted */
+ bool newCopy(const QStringList &sources);
+ /** \brief send copy with destination
+ * \param sources the sources list to copy
+ * \param destination the destination to copy
+ * \return true if the copy have been accepted */
+ bool newCopy(const QStringList &sources,const QString &destination);
+ /** \brief send move without destination, ask the destination
+ * \param sources the sources list to move
+ * \return true if the move have been accepted */
+ bool newMove(const QStringList &sources);
+ /** \brief send move without destination, ask the destination
+ * \param sources the sources list to move
+ * \param destination the destination to move
+ * \return true if the move have been accepted */
+ bool newMove(const QStringList &sources,const QString &destination);
+ /** \brief send the new transfer list
+ * \param file the transfer list */
+ void newTransferList(const QString &file);
+
+ /** \brief to get byte read, use by Ultracopier for the speed calculation
+ * real size transfered to right speed calculation */
+ quint64 realByteTransfered();
+ /** \brief support speed limitation */
+ bool supportSpeedLimitation() const;
+
+ /** \brief to set drives detected
+ * specific to this copy engine */
+
+ /** \brief to sync the transfer list
+ * Used when the interface is changed, useful to minimize the memory size */
+ void syncTransferList();
+
+ void set_doChecksum(bool doChecksum);
+ void set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible);
+ void set_checksumOnlyOnError(bool checksumOnlyOnError);
+ void set_osBuffer(bool osBuffer);
+ void set_osBufferLimited(bool osBufferLimited);
+ void set_osBufferLimit(unsigned int osBufferLimit);
+ void set_setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions);
+ void setRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ void setRsync(const bool rsync);
+ #endif
+ void setCheckDiskSpace(const bool &checkDiskSpace);
+ void setDefaultDestinationFolder(const QString &defaultDestinationFolder);
+ void setCopyListOrder(const bool &order);
+ void defaultDestinationFolderBrowse();
+ QString askDestination();
+public slots:
+ //user ask ask to add folder (add it with interface ask source/destination)
+ /** \brief add folder called on the interface
+ * Used by manual adding */
+ bool userAddFolder(const Ultracopier::CopyMode &mode);
+ /** \brief add file called on the interface
+ * Used by manual adding */
+ bool userAddFile(const Ultracopier::CopyMode &mode);
+ //action on the copy
+ /// \brief put the transfer in pause
+ void pause();
+ /// \brief resume the transfer
+ void resume();
+ /** \brief skip one transfer entry
+ * \param id id of the file to remove */
+ void skip(const quint64 &id);
+ /// \brief cancel all the transfer
+ void cancel();
+ //edit the transfer list
+ /** \brief remove the selected item
+ * \param ids ids is the id list of the selected items */
+ void removeItems(const QList<int> &ids);
+ /** \brief move on top of the list the selected item
+ * \param ids ids is the id list of the selected items */
+ void moveItemsOnTop(const QList<int> &ids);
+ /** \brief move up the list the selected item
+ * \param ids ids is the id list of the selected items */
+ void moveItemsUp(const QList<int> &ids);
+ /** \brief move down the list the selected item
+ * \param ids ids is the id list of the selected items */
+ void moveItemsDown(const QList<int> &ids);
+ /** \brief move on bottom of the list the selected item
+ * \param ids ids is the id list of the selected items */
+ void moveItemsOnBottom(const QList<int> &ids);
+
+ /** \brief give the forced mode, to export/import transfer list */
+ void forceMode(const Ultracopier::CopyMode &mode);
+ /// \brief export the transfer list into a file
+ void exportTransferList();
+ /// \brief import the transfer list into a file
+ void importTransferList();
+
+ /** \brief to set the speed limitation
+ * -1 if not able, 0 if disabled */
+ bool setSpeedLimitation(const qint64 &speedLimitation);
+
+ // specific to this copy engine
+
+ /// \brief set if the rights shoul be keep
+ void setRightTransfer(const bool doRightTransfer);
+ /// \brief set keep date
+ void setKeepDate(const bool keepDate);
+ /// \brief set block size in KB
+ void setBlockSize(const int blockSize);
+
+ void setParallelBuffer(int parallelBuffer);
+ void setSequentialBuffer(int sequentialBuffer);
+ void setParallelizeIfSmallerThan(int parallelizeIfSmallerThan);
+ void setMoveTheWholeFolder(const bool &moveTheWholeFolder);
+ void setFollowTheStrictOrder(const bool &followTheStrictOrder);
+ void setDeletePartiallyTransferredFiles(const bool &deletePartiallyTransferredFiles);
+ void setInodeThreads(const int &inodeThreads);
+ void setRenameTheOriginalDestination(const bool &renameTheOriginalDestination);
+ void inodeThreadsFinished();
+
+ /// \brief set auto start
+ void setAutoStart(const bool autoStart);
+ /// \brief set if need check if the destination folder exists
+ void setCheckDestinationFolderExists(const bool checkDestinationFolderExists);
+ /// \brief reset widget
+ void resetTempWidget();
+ //autoconnect
+ void setFolderCollision(int index);
+ void setFolderError(int index);
+ void setFileCollision(int index);
+ void setFileError(int index);
+ void setTransferAlgorithm(int index);
+ /// \brief need retranslate the insterface
+ void newLanguageLoaded();
+private slots:
+ void setComboBoxFolderCollision(FolderExistsAction action,bool changeComboBox=true);
+ void setComboBoxFolderError(FileErrorAction action,bool changeComboBox=true);
+ void warningTransferList(const QString &warning);
+ void errorTransferList(const QString &error);
+signals:
+ //action on the copy
+ void signal_pause() const;
+ void signal_resume() const;
+ void signal_skip(const quint64 &id) const;
+
+ //edit the transfer list
+ void signal_removeItems(const QList<int> &ids) const;
+ void signal_moveItemsOnTop(const QList<int> &ids) const;
+ void signal_moveItemsUp(const QList<int> &ids) const;
+ void signal_moveItemsDown(const QList<int> &ids) const;
+ void signal_moveItemsOnBottom(const QList<int> &ids) const;
+
+ void signal_forceMode(const Ultracopier::CopyMode &mode) const;
+ void signal_exportTransferList(const QString &fileName) const;
+ void signal_importTransferList(const QString &fileName) const;
+ void signal_exportErrorIntoTransferList(const QString &fileName) const;
+
+ //action
+ void signal_setTransferAlgorithm(TransferAlgorithm transferAlgorithm) const;
+ void signal_setCollisionAction(FileExistsAction alwaysDoThisActionForFileExists) const;
+ void signal_setComboBoxFolderCollision(FolderExistsAction action) const;
+ void signal_setFolderCollision(FolderExistsAction action) const;
+
+ //internal cancel
+ void tryCancel() const;
+ void getNeedPutAtBottom(const QFileInfo &fileInfo,const QString &errorString,TransferThread * thread,const ErrorType &errorType) const;
+
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ /// \brief To debug source
+ void debugInformation(const Ultracopier::DebugLevel &level,QString fonction,QString text,QString file,int ligne) const;
+ #endif
+
+ //other signals
+ void queryOneNewDialog() const;
+
+ void send_speedLimitation(const qint64 &speedLimitation) const;
+ void send_blockSize(const int &blockSize) const;
+ void send_osBufferLimit(const unsigned int &osBufferLimit) const;
+ void send_setFilters(const QList<Filters_rules> &include,const QList<Filters_rules> &exclude) const;
+ void send_sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule) const;
+ void send_parallelBuffer(const int &parallelBuffer) const;
+ void send_sequentialBuffer(const int &sequentialBuffer) const;
+ void send_parallelizeIfSmallerThan(const int &parallelizeIfSmallerThan) const;
+ void send_followTheStrictOrder(const bool &followTheStrictOrder) const;
+ void send_deletePartiallyTransferredFiles(const bool &deletePartiallyTransferredFiles) const;
+ void send_setInodeThreads(const int &inodeThreads) const;
+ void send_moveTheWholeFolder(const bool &moveTheWholeFolder) const;
+ void send_setRenameTheOriginalDestination(const bool &renameTheOriginalDestination) const;
+};
+
+#endif // COPY_ENGINE_H
diff --git a/plugins/CopyEngine/Ultracopier/CopyEngine.pro b/plugins/CopyEngine/Ultracopier/CopyEngine.pro
new file mode 100644
index 0000000..42078af
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/CopyEngine.pro
@@ -0,0 +1,101 @@
+CONFIG += c++11
+QMAKE_CXXFLAGS+="-std=c++0x -Wall -Wextra"
+mac:QMAKE_CXXFLAGS+="-stdlib=libc++"
+
+QT += widgets
+DEFINES += UNICODE _UNICODE
+TEMPLATE = lib
+CONFIG += plugin
+win32 {
+ LIBS += -ladvapi32
+}
+
+HEADERS = \
+ ../Ultracopier/StructEnumDefinition.h \
+ ../Ultracopier/StructEnumDefinition_CopyEngine.h \
+ ../Ultracopier/DebugEngineMacro.h \
+ ../Ultracopier/Variable.h \
+ ../Ultracopier/TransferThread.h \
+ ../Ultracopier/ReadThread.h \
+ ../Ultracopier/WriteThread.h \
+ ../Ultracopier/MkPath.h \
+ ../Ultracopier/AvancedQFile.h \
+ ../Ultracopier/ListThread.h \
+ ../../../interface/PluginInterface_CopyEngine.h \
+ ../../../interface/OptionInterface.h \
+ ../../../interface/FacilityInterface.h \
+ ../Ultracopier/Filters.h \
+ ../Ultracopier/FilterRules.h \
+ ../Ultracopier/RenamingRules.h \
+ ../Ultracopier/DriveManagement.h \
+ ../Ultracopier/CopyEngine.h \
+ ../Ultracopier/DebugDialog.h \
+ ../Ultracopier/CopyEngineFactory.h \
+ ../Ultracopier/FileErrorDialog.h \
+ ../Ultracopier/FileExistsDialog.h \
+ ../Ultracopier/FileIsSameDialog.h \
+ ../Ultracopier/FolderExistsDialog.h \
+ ../Ultracopier/ScanFileOrFolder.h \
+ ../Ultracopier/DiskSpace.h
+SOURCES = \
+ ../Ultracopier/TransferThread.cpp \
+ ../Ultracopier/ReadThread.cpp \
+ ../Ultracopier/WriteThread.cpp \
+ ../Ultracopier/MkPath.cpp \
+ ../Ultracopier/AvancedQFile.cpp \
+ ../Ultracopier/ListThread.cpp \
+ ../Ultracopier/Filters.cpp \
+ ../Ultracopier/FilterRules.cpp \
+ ../Ultracopier/RenamingRules.cpp \
+ ../Ultracopier/ListThread_InodeAction.cpp \
+ ../Ultracopier/DriveManagement.cpp \
+ ../Ultracopier/CopyEngine-collision-and-error.cpp \
+ ../Ultracopier/CopyEngine.cpp \
+ ../Ultracopier/DebugDialog.cpp \
+ ../Ultracopier/CopyEngineFactory.cpp \
+ ../Ultracopier/FileErrorDialog.cpp \
+ ../Ultracopier/FileExistsDialog.cpp \
+ ../Ultracopier/FileIsSameDialog.cpp \
+ ../Ultracopier/FolderExistsDialog.cpp \
+ ../Ultracopier/ScanFileOrFolder.cpp \
+ ../Ultracopier/DiskSpace.cpp
+TARGET = $$qtLibraryTarget(copyEngine)
+TRANSLATIONS += ../Ultracopier/Languages/ar/translation.ts \
+ ../Ultracopier/Languages/de/translation.ts \
+ ../Ultracopier/Languages/el/translation.ts \
+ ../Ultracopier/Languages/en/translation.ts \
+ ../Ultracopier/Languages/es/translation.ts \
+ ../Ultracopier/Languages/fr/translation.ts \
+ ../Ultracopier/Languages/hi/translation.ts \
+ ../Ultracopier/Languages/hu/translation.ts \
+ ../Ultracopier/Languages/id/translation.ts \
+ ../Ultracopier/Languages/it/translation.ts \
+ ../Ultracopier/Languages/ja/translation.ts \
+ ../Ultracopier/Languages/ko/translation.ts \
+ ../Ultracopier/Languages/nl/translation.ts \
+ ../Ultracopier/Languages/no/translation.ts \
+ ../Ultracopier/Languages/pl/translation.ts \
+ ../Ultracopier/Languages/pt/translation.ts \
+ ../Ultracopier/Languages/ru/translation.ts \
+ ../Ultracopier/Languages/th/translation.ts \
+ ../Ultracopier/Languages/tr/translation.ts \
+ ../Ultracopier/Languages/zh/translation.ts
+
+FORMS += \
+ ../Ultracopier/fileErrorDialog.ui \
+ ../Ultracopier/fileExistsDialog.ui \
+ ../Ultracopier/fileIsSameDialog.ui \
+ ../Ultracopier/debugDialog.ui \
+ ../Ultracopier/folderExistsDialog.ui \
+ ../Ultracopier/Filters.ui \
+ ../Ultracopier/FilterRules.ui \
+ ../Ultracopier/RenamingRules.ui \
+ ../Ultracopier/copyEngineOptions.ui \
+ ../Ultracopier/DiskSpace.ui
+
+OTHER_FILES += informations.xml
+
+!CONFIG(static) {
+RESOURCES += \
+ ../Ultracopier/copyEngineResources.qrc
+}
diff --git a/plugins/CopyEngine/Ultracopier/CopyEngineFactory.cpp b/plugins/CopyEngine/Ultracopier/CopyEngineFactory.cpp
new file mode 100644
index 0000000..d4d4bb6
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/CopyEngineFactory.cpp
@@ -0,0 +1,692 @@
+/** \file factory.cpp
+\brief Define the factory to create new instance
+\author alpha_one_x86 */
+
+#include <QFileDialog>
+#include <QList>
+#include <QDebug>
+#include <cmath>
+#include <QStorageInfo>
+
+#include "CopyEngineFactory.h"
+
+// The cmath header from MSVC does not contain round()
+#if (defined(_WIN64) || defined(_WIN32)) && defined(_MSC_VER)
+inline double round(double d) {
+ return floor( d + 0.5 );
+}
+#endif
+
+CopyEngineFactory::CopyEngineFactory() :
+ ui(new Ui::copyEngineOptions())
+{
+ qRegisterMetaType<FolderExistsAction>("FolderExistsAction");
+ qRegisterMetaType<FileExistsAction>("FileExistsAction");
+ qRegisterMetaType<QList<Filters_rules> >("QList<Filters_rules>");
+ qRegisterMetaType<TransferStat>("TransferStat");
+ qRegisterMetaType<QList<QByteArray> >("QList<QByteArray>");
+ qRegisterMetaType<TransferAlgorithm>("TransferAlgorithm");
+ qRegisterMetaType<ActionType>("ActionType");
+ qRegisterMetaType<ErrorType>("ErrorType");
+ qRegisterMetaType<Diskspace>("Diskspace");
+ qRegisterMetaType<QList<Diskspace> >("QList<Diskspace>");
+ qRegisterMetaType<QFileInfo>("QFileInfo");
+ qRegisterMetaType<Ultracopier::CopyMode>("Ultracopier::CopyMode");
+
+ tempWidget=new QWidget();
+ ui->setupUi(tempWidget);
+ ui->toolBox->setCurrentIndex(0);
+ ui->blockSize->setMaximum(ULTRACOPIER_PLUGIN_MAX_BLOCK_SIZE);
+ errorFound=false;
+ optionsEngine=NULL;
+ filters=new Filters(tempWidget);
+ renamingRules=new RenamingRules(tempWidget);
+
+ connect(ui->doRightTransfer, &QCheckBox::toggled, this,&CopyEngineFactory::setDoRightTransfer);
+ connect(ui->keepDate, &QCheckBox::toggled, this,&CopyEngineFactory::setKeepDate);
+ connect(ui->blockSize, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngineFactory::setBlockSize);
+ connect(ui->sequentialBuffer, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngineFactory::setSequentialBuffer);
+ connect(ui->parallelBuffer, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngineFactory::setParallelBuffer);
+ connect(ui->parallelizeIfSmallerThan, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngineFactory::setParallelizeIfSmallerThan);
+ connect(ui->inodeThreads, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngineFactory::on_inodeThreads_editingFinished);
+ connect(ui->autoStart, &QCheckBox::toggled, this,&CopyEngineFactory::setAutoStart);
+ connect(ui->doChecksum, &QCheckBox::toggled, this,&CopyEngineFactory::doChecksum_toggled);
+ connect(ui->comboBoxFolderError, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngineFactory::setFolderError);
+ connect(ui->comboBoxFolderCollision, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngineFactory::setFolderCollision);
+ connect(ui->comboBoxFileError, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngineFactory::setFileError);
+ connect(ui->comboBoxFileCollision, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngineFactory::setFileCollision);
+ connect(ui->transferAlgorithm, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngineFactory::setTransferAlgorithm);
+ connect(ui->checkBoxDestinationFolderExists, &QCheckBox::toggled, this,&CopyEngineFactory::setCheckDestinationFolder);
+ connect(ui->checksumIgnoreIfImpossible, &QCheckBox::toggled, this,&CopyEngineFactory::checksumIgnoreIfImpossible_toggled);
+ connect(ui->checksumOnlyOnError, &QCheckBox::toggled, this,&CopyEngineFactory::checksumOnlyOnError_toggled);
+ connect(ui->osBuffer, &QCheckBox::toggled, this,&CopyEngineFactory::osBuffer_toggled);
+ connect(ui->osBufferLimited, &QCheckBox::toggled, this,&CopyEngineFactory::osBufferLimited_toggled);
+ connect(ui->osBufferLimit, &QSpinBox::editingFinished, this,&CopyEngineFactory::osBufferLimit_editingFinished);
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ connect(ui->rsync, &QCheckBox::toggled, this,&CopyEngineFactory::setRsync);
+ #endif
+ connect(ui->inodeThreads, &QSpinBox::editingFinished, this,&CopyEngineFactory::on_inodeThreads_editingFinished);
+ connect(ui->osBufferLimited, &QAbstractButton::toggled, this,&CopyEngineFactory::updateBufferCheckbox);
+ connect(ui->osBuffer, &QAbstractButton::toggled, this,&CopyEngineFactory::updateBufferCheckbox);
+ connect(ui->moveTheWholeFolder, &QCheckBox::toggled, this,&CopyEngineFactory::moveTheWholeFolder);
+ connect(ui->followTheStrictOrder, &QCheckBox::toggled, this,&CopyEngineFactory::followTheStrictOrder);
+ connect(ui->deletePartiallyTransferredFiles,&QCheckBox::toggled, this,&CopyEngineFactory::deletePartiallyTransferredFiles);
+ connect(ui->renameTheOriginalDestination,&QCheckBox::toggled, this,&CopyEngineFactory::renameTheOriginalDestination);
+ connect(ui->checkDiskSpace, &QCheckBox::toggled, this,&CopyEngineFactory::checkDiskSpace);
+ connect(ui->defaultDestinationFolderBrowse,&QPushButton::clicked, this,&CopyEngineFactory::defaultDestinationFolderBrowse);
+ connect(ui->defaultDestinationFolder,&QLineEdit::editingFinished, this,&CopyEngineFactory::defaultDestinationFolder);
+ connect(ui->copyListOrder, &QCheckBox::toggled, this,&CopyEngineFactory::copyListOrder);
+
+ connect(filters,&Filters::sendNewFilters,this,&CopyEngineFactory::sendNewFilters);
+ connect(ui->filters,&QPushButton::clicked,this,&CopyEngineFactory::showFilterDialog);
+ connect(renamingRules,&RenamingRules::sendNewRenamingRules,this,&CopyEngineFactory::sendNewRenamingRules);
+ connect(ui->renamingRules,&QPushButton::clicked,this,&CopyEngineFactory::showRenamingRules);
+
+ lunchInitFunction.setInterval(0);
+ lunchInitFunction.setSingleShot(true);
+ connect(&lunchInitFunction,&QTimer::timeout,this,&CopyEngineFactory::init,Qt::QueuedConnection);
+ lunchInitFunction.start();
+}
+
+CopyEngineFactory::~CopyEngineFactory()
+{
+ delete renamingRules;
+ delete filters;
+ delete ui;
+}
+
+void CopyEngineFactory::init()
+{
+}
+
+PluginInterface_CopyEngine * CopyEngineFactory::getInstance()
+{
+ CopyEngine *realObject=new CopyEngine(facilityEngine);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ connect(realObject,&CopyEngine::debugInformation,this,&CopyEngineFactory::debugInformation);
+ #endif
+ realObject->connectTheSignalsSlots();
+ PluginInterface_CopyEngine * newTransferEngine=realObject;
+ connect(this,&CopyEngineFactory::reloadLanguage,realObject,&CopyEngine::newLanguageLoaded);
+ realObject->setRightTransfer(ui->doRightTransfer->isChecked());
+ realObject->setKeepDate(ui->keepDate->isChecked());
+ realObject->setBlockSize(ui->blockSize->value());
+ realObject->setAutoStart(ui->autoStart->isChecked());
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ realObject->setRsync(ui->rsync->isChecked());
+ #endif
+ realObject->setFolderCollision(ui->comboBoxFolderCollision->currentIndex());
+ realObject->setFolderError(ui->comboBoxFolderError->currentIndex());
+ realObject->setFileCollision(ui->comboBoxFileCollision->currentIndex());
+ realObject->setFileError(ui->comboBoxFileError->currentIndex());
+ realObject->setTransferAlgorithm(ui->transferAlgorithm->currentIndex());
+ realObject->setCheckDestinationFolderExists(ui->checkBoxDestinationFolderExists->isChecked());
+ realObject->set_doChecksum(ui->doChecksum->isChecked());
+ realObject->set_checksumIgnoreIfImpossible(ui->checksumIgnoreIfImpossible->isChecked());
+ realObject->set_checksumOnlyOnError(ui->checksumOnlyOnError->isChecked());
+ realObject->set_osBuffer(ui->osBuffer->isChecked());
+ realObject->set_osBufferLimited(ui->osBufferLimited->isChecked());
+ realObject->set_osBufferLimit(ui->osBufferLimit->value());
+ realObject->set_setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
+ realObject->setRenamingRules(firstRenamingRule,otherRenamingRule);
+ realObject->setSequentialBuffer(ui->sequentialBuffer->value());
+ realObject->setParallelBuffer(ui->parallelBuffer->value());
+ realObject->setParallelizeIfSmallerThan(ui->parallelizeIfSmallerThan->value());
+ realObject->setMoveTheWholeFolder(ui->moveTheWholeFolder->isChecked());
+ realObject->setFollowTheStrictOrder(ui->followTheStrictOrder->isChecked());
+ realObject->setDeletePartiallyTransferredFiles(ui->deletePartiallyTransferredFiles->isChecked());
+ realObject->setInodeThreads(ui->inodeThreads->value());
+ realObject->setRenameTheOriginalDestination(ui->renameTheOriginalDestination->isChecked());
+ realObject->setCheckDiskSpace(ui->checkDiskSpace->isChecked());
+ realObject->setDefaultDestinationFolder(ui->defaultDestinationFolder->text());
+ realObject->setCopyListOrder(ui->copyListOrder->isChecked());
+ return newTransferEngine;
+}
+
+void CopyEngineFactory::setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityInterface,const bool &portableVersion)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start, writePath: ")+writePath+QStringLiteral(", pluginPath:")+pluginPath);
+ this->facilityEngine=facilityInterface;
+ Q_UNUSED(portableVersion);
+ #ifndef ULTRACOPIER_PLUGIN_DEBUG
+ Q_UNUSED(writePath);
+ Q_UNUSED(pluginPath);
+ #endif
+ #if ! defined (Q_CC_GNU)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("Unable to change date time of files, only gcc is supported"));
+ #endif
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,COMPILERINFO);
+ #if defined (ULTRACOPIER_PLUGIN_CHECKLISTTYPE)
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("CHECK LIST TYPE set"));
+ #else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("CHECK LIST TYPE not set"));
+ #endif
+ if(options!=NULL)
+ {
+ //load the options
+ QList<QPair<QString, QVariant> > KeysList;
+ KeysList.append(qMakePair(QStringLiteral("doRightTransfer"),QVariant(true)));
+ #ifndef Q_OS_LINUX
+ KeysList.append(qMakePair(QStringLiteral("keepDate"),QVariant(false)));
+ #else
+ KeysList.append(qMakePair(QStringLiteral("keepDate"),QVariant(true)));
+ #endif
+ KeysList.append(qMakePair(QStringLiteral("blockSize"),QVariant(ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE)));
+ quint32 sequentialBuffer=ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE*ULTRACOPIER_PLUGIN_DEFAULT_SEQUENTIAL_NUMBER_OF_BLOCK;
+ quint32 parallelBuffer=ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE*ULTRACOPIER_PLUGIN_DEFAULT_PARALLEL_NUMBER_OF_BLOCK;
+ //to prevent swap and other bad effect, only under windows and unix for now
+ #if defined(Q_OS_WIN32) or (defined(Q_OS_LINUX) and defined(_SC_PHYS_PAGES))
+ size_t max_memory=getTotalSystemMemory()/1024;
+ if(max_memory>0)
+ {
+ if(sequentialBuffer>(max_memory/10))
+ sequentialBuffer=max_memory/10;
+ if(parallelBuffer>(max_memory/100))
+ parallelBuffer=max_memory/100;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("detected memory: %1MB").arg(max_memory/1024));
+ #endif
+ KeysList.append(qMakePair(QStringLiteral("sequentialBuffer"),QVariant(sequentialBuffer)));
+ KeysList.append(qMakePair(QStringLiteral("parallelBuffer"),QVariant(parallelBuffer)));
+ KeysList.append(qMakePair(QStringLiteral("parallelizeIfSmallerThan"),QVariant(128)));//128KB, better for modern hardware: Multiple queue en linux, SSD, ...
+ KeysList.append(qMakePair(QStringLiteral("autoStart"),QVariant(true)));
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ KeysList.append(qMakePair(QStringLiteral("rsync"),QVariant(true)));
+ #endif
+ KeysList.append(qMakePair(QStringLiteral("folderError"),QVariant(0)));
+ KeysList.append(qMakePair(QStringLiteral("folderCollision"),QVariant(0)));
+ KeysList.append(qMakePair(QStringLiteral("fileError"),QVariant(2)));
+ KeysList.append(qMakePair(QStringLiteral("fileCollision"),QVariant(0)));
+ KeysList.append(qMakePair(QStringLiteral("transferAlgorithm"),QVariant(0)));
+ KeysList.append(qMakePair(QStringLiteral("checkDestinationFolder"),QVariant(true)));
+ KeysList.append(qMakePair(QStringLiteral("includeStrings"),QVariant(QStringList())));
+ KeysList.append(qMakePair(QStringLiteral("includeOptions"),QVariant(QStringList())));
+ KeysList.append(qMakePair(QStringLiteral("excludeStrings"),QVariant(QStringList())));
+ KeysList.append(qMakePair(QStringLiteral("excludeOptions"),QVariant(QStringList())));
+ KeysList.append(qMakePair(QStringLiteral("doChecksum"),QVariant(false)));
+ KeysList.append(qMakePair(QStringLiteral("checksumIgnoreIfImpossible"),QVariant(true)));
+ KeysList.append(qMakePair(QStringLiteral("checksumOnlyOnError"),QVariant(true)));
+ KeysList.append(qMakePair(QStringLiteral("osBuffer"),QVariant(false)));
+ KeysList.append(qMakePair(QStringLiteral("firstRenamingRule"),QVariant("")));
+ KeysList.append(qMakePair(QStringLiteral("otherRenamingRule"),QVariant("")));
+ KeysList.append(qMakePair(QStringLiteral("osBufferLimited"),QVariant(false)));
+ KeysList.append(qMakePair(QStringLiteral("osBufferLimit"),QVariant(512)));
+ KeysList.append(qMakePair(QStringLiteral("deletePartiallyTransferredFiles"),QVariant(true)));
+ KeysList.append(qMakePair(QStringLiteral("moveTheWholeFolder"),QVariant(true)));
+ KeysList.append(qMakePair(QStringLiteral("followTheStrictOrder"),QVariant(false)));
+ KeysList.append(qMakePair(QStringLiteral("renameTheOriginalDestination"),QVariant(false)));
+ KeysList.append(qMakePair(QStringLiteral("checkDiskSpace"),QVariant(true)));
+ KeysList.append(qMakePair(QStringLiteral("defaultDestinationFolder"),QVariant(QString())));
+ KeysList.append(qMakePair(QStringLiteral("inodeThreads"),QVariant(1)));
+ KeysList.append(qMakePair(QStringLiteral("copyListOrder"),QVariant(false)));
+ options->addOptionGroup(KeysList);
+ #if ! defined (Q_CC_GNU)
+ ui->keepDate->setEnabled(false);
+ ui->keepDate->setToolTip(QStringLiteral("Not supported with this compiler"));
+ #endif
+ ui->doRightTransfer->setChecked(options->getOptionValue(QStringLiteral("doRightTransfer")).toBool());
+ ui->keepDate->setChecked(options->getOptionValue(QStringLiteral("keepDate")).toBool());
+ ui->blockSize->setValue(options->getOptionValue(QStringLiteral("blockSize")).toUInt());//keep before sequentialBuffer and parallelBuffer
+ ui->autoStart->setChecked(options->getOptionValue(QStringLiteral("autoStart")).toBool());
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ ui->rsync->setChecked(options->getOptionValue(QStringLiteral("rsync")).toBool());
+ #else
+ ui->label_rsync->setVisible(false);
+ ui->rsync->setVisible(false);
+ #endif
+ ui->comboBoxFolderError->setCurrentIndex(options->getOptionValue(QStringLiteral("folderError")).toUInt());
+ ui->comboBoxFolderCollision->setCurrentIndex(options->getOptionValue(QStringLiteral("folderCollision")).toUInt());
+ ui->comboBoxFileError->setCurrentIndex(options->getOptionValue(QStringLiteral("fileError")).toUInt());
+ ui->comboBoxFileCollision->setCurrentIndex(options->getOptionValue(QStringLiteral("fileCollision")).toUInt());
+ ui->transferAlgorithm->setCurrentIndex(options->getOptionValue(QStringLiteral("transferAlgorithm")).toUInt());
+ ui->checkBoxDestinationFolderExists->setChecked(options->getOptionValue(QStringLiteral("checkDestinationFolder")).toBool());
+ ui->parallelizeIfSmallerThan->setValue(options->getOptionValue(QStringLiteral("parallelizeIfSmallerThan")).toUInt());
+ ui->sequentialBuffer->setValue(options->getOptionValue(QStringLiteral("sequentialBuffer")).toUInt());
+ ui->parallelBuffer->setValue(options->getOptionValue(QStringLiteral("parallelBuffer")).toUInt());
+ ui->sequentialBuffer->setSingleStep(ui->blockSize->value());
+ ui->parallelBuffer->setSingleStep(ui->blockSize->value());
+ ui->deletePartiallyTransferredFiles->setChecked(options->getOptionValue(QStringLiteral("deletePartiallyTransferredFiles")).toBool());
+ ui->moveTheWholeFolder->setChecked(options->getOptionValue(QStringLiteral("moveTheWholeFolder")).toBool());
+ ui->followTheStrictOrder->setChecked(options->getOptionValue(QStringLiteral("followTheStrictOrder")).toBool());
+ ui->inodeThreads->setValue(options->getOptionValue(QStringLiteral("inodeThreads")).toUInt());
+ ui->renameTheOriginalDestination->setChecked(options->getOptionValue(QStringLiteral("renameTheOriginalDestination")).toBool());
+ ui->checkDiskSpace->setChecked(options->getOptionValue(QStringLiteral("checkDiskSpace")).toBool());
+ ui->defaultDestinationFolder->setText(options->getOptionValue(QStringLiteral("defaultDestinationFolder")).toString());
+
+ ui->doChecksum->setChecked(options->getOptionValue(QStringLiteral("doChecksum")).toBool());
+ ui->checksumIgnoreIfImpossible->setChecked(options->getOptionValue(QStringLiteral("checksumIgnoreIfImpossible")).toBool());
+ ui->checksumOnlyOnError->setChecked(options->getOptionValue(QStringLiteral("checksumOnlyOnError")).toBool());
+
+ ui->osBuffer->setChecked(options->getOptionValue(QStringLiteral("osBuffer")).toBool());
+ ui->osBufferLimited->setChecked(options->getOptionValue(QStringLiteral("osBufferLimited")).toBool());
+ ui->osBufferLimit->setValue(options->getOptionValue(QStringLiteral("osBufferLimit")).toUInt());
+ //ui->autoStart->setChecked(options->getOptionValue(QStringLiteral("autoStart")).toBool());//moved from options(), wrong previous place
+ includeStrings=options->getOptionValue(QStringLiteral("includeStrings")).toStringList();
+ includeOptions=options->getOptionValue(QStringLiteral("includeOptions")).toStringList();
+ excludeStrings=options->getOptionValue(QStringLiteral("excludeStrings")).toStringList();
+ excludeOptions=options->getOptionValue(QStringLiteral("excludeOptions")).toStringList();
+ filters->setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
+ firstRenamingRule=options->getOptionValue(QStringLiteral("firstRenamingRule")).toString();
+ otherRenamingRule=options->getOptionValue(QStringLiteral("otherRenamingRule")).toString();
+ renamingRules->setRenamingRules(firstRenamingRule,otherRenamingRule);
+
+ ui->checksumOnlyOnError->setEnabled(ui->doChecksum->isChecked());
+ ui->checksumIgnoreIfImpossible->setEnabled(ui->doChecksum->isChecked());
+ ui->copyListOrder->setChecked(options->getOptionValue(QStringLiteral("copyListOrder")).toBool());
+
+ updateBufferCheckbox();
+ optionsEngine=options;
+
+ updatedBlockSize();
+ }
+}
+
+QStringList CopyEngineFactory::supportedProtocolsForTheSource() const
+{
+ return QStringList() << QStringLiteral("file");
+}
+
+QStringList CopyEngineFactory::supportedProtocolsForTheDestination() const
+{
+ return QStringList() << QStringLiteral("file");
+}
+
+Ultracopier::CopyType CopyEngineFactory::getCopyType()
+{
+ return Ultracopier::FileAndFolder;
+}
+
+Ultracopier::TransferListOperation CopyEngineFactory::getTransferListOperation()
+{
+ return Ultracopier::TransferListOperation_ImportExport;
+}
+
+bool CopyEngineFactory::canDoOnlyCopy() const
+{
+ return false;
+}
+
+void CopyEngineFactory::resetOptions()
+{
+}
+
+QWidget * CopyEngineFactory::options()
+{
+ return tempWidget;
+}
+
+void CopyEngineFactory::setDoRightTransfer(bool doRightTransfer)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("doRightTransfer"),doRightTransfer);
+}
+
+void CopyEngineFactory::setKeepDate(bool keepDate)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("keepDate"),keepDate);
+}
+
+void CopyEngineFactory::setBlockSize(int blockSize)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("blockSize"),blockSize);
+ updatedBlockSize();
+}
+
+void CopyEngineFactory::setParallelBuffer(int parallelBuffer)
+{
+ if(optionsEngine!=NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ parallelBuffer=round((float)parallelBuffer/(float)ui->blockSize->value())*ui->blockSize->value();
+ ui->parallelBuffer->setValue(parallelBuffer);
+ optionsEngine->setOptionValue(QStringLiteral("parallelBuffer"),parallelBuffer);
+ }
+}
+
+void CopyEngineFactory::setSequentialBuffer(int sequentialBuffer)
+{
+ if(optionsEngine!=NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("the value have changed"));
+ sequentialBuffer=round((float)sequentialBuffer/(float)ui->blockSize->value())*ui->blockSize->value();
+ ui->sequentialBuffer->setValue(sequentialBuffer);
+ optionsEngine->setOptionValue(QStringLiteral("sequentialBuffer"),sequentialBuffer);
+ }
+}
+
+void CopyEngineFactory::setParallelizeIfSmallerThan(int parallelizeIfSmallerThan)
+{
+ if(optionsEngine!=NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ optionsEngine->setOptionValue(QStringLiteral("parallelizeIfSmallerThan"),parallelizeIfSmallerThan);
+ }
+}
+
+void CopyEngineFactory::setAutoStart(bool autoStart)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("autoStart"),autoStart);
+}
+
+void CopyEngineFactory::setFolderCollision(int index)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("folderCollision"),index);
+}
+
+void CopyEngineFactory::setFolderError(int index)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("folderError"),index);
+}
+
+void CopyEngineFactory::setTransferAlgorithm(int index)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("transferAlgorithm"),index);
+}
+
+void CopyEngineFactory::setCheckDestinationFolder()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("checkDestinationFolder"),ui->checkBoxDestinationFolderExists->isChecked());
+}
+
+void CopyEngineFactory::newLanguageLoaded()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start, retranslate the widget options");
+ OptionInterface * optionsEngine=this->optionsEngine;
+ this->optionsEngine=NULL;
+ ui->retranslateUi(tempWidget);
+ ui->comboBoxFolderError->setItemText(0,tr("Ask"));
+ ui->comboBoxFolderError->setItemText(1,tr("Skip"));
+
+ ui->comboBoxFolderCollision->setItemText(0,tr("Ask"));
+ ui->comboBoxFolderCollision->setItemText(1,tr("Merge"));
+ ui->comboBoxFolderCollision->setItemText(2,tr("Skip"));
+ ui->comboBoxFolderCollision->setItemText(3,tr("Rename"));
+
+ ui->comboBoxFileError->setItemText(0,tr("Ask"));
+ ui->comboBoxFileError->setItemText(1,tr("Skip"));
+ ui->comboBoxFileError->setItemText(2,tr("Put at the end"));
+
+ ui->comboBoxFileCollision->setItemText(0,tr("Ask"));
+ ui->comboBoxFileCollision->setItemText(1,tr("Skip"));
+ ui->comboBoxFileCollision->setItemText(2,tr("Overwrite"));
+ ui->comboBoxFileCollision->setItemText(3,tr("Overwrite if different"));
+ ui->comboBoxFileCollision->setItemText(4,tr("Overwrite if newer"));
+ ui->comboBoxFileCollision->setItemText(5,tr("Overwrite if older"));
+ ui->comboBoxFileCollision->setItemText(6,tr("Rename"));
+
+ ui->transferAlgorithm->setItemText(0,tr("Automatic"));
+ ui->transferAlgorithm->setItemText(1,tr("Sequential"));
+ ui->transferAlgorithm->setItemText(2,tr("Parallel"));
+ if(optionsEngine!=NULL)
+ {
+ filters->newLanguageLoaded();
+ renamingRules->newLanguageLoaded();
+ }
+ emit reloadLanguage();
+ this->optionsEngine=optionsEngine;
+}
+
+void CopyEngineFactory::doChecksum_toggled(bool doChecksum)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("doChecksum"),doChecksum);
+}
+
+void CopyEngineFactory::checksumOnlyOnError_toggled(bool checksumOnlyOnError)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("checksumOnlyOnError"),checksumOnlyOnError);
+}
+
+void CopyEngineFactory::osBuffer_toggled(bool osBuffer)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("osBuffer"),osBuffer);
+ ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
+}
+
+void CopyEngineFactory::osBufferLimited_toggled(bool osBufferLimited)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("osBufferLimited"),osBufferLimited);
+ ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
+}
+
+void CopyEngineFactory::osBufferLimit_editingFinished()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the spinbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("osBufferLimit"),ui->osBufferLimit->value());
+}
+
+void CopyEngineFactory::showFilterDialog()
+{
+ if(optionsEngine==NULL)
+ {
+ QMessageBox::critical(NULL,tr("Options error"),tr("Options engine is not loaded. Unable to access the filters"));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"options not loaded");
+ return;
+ }
+ filters->exec();
+}
+
+void CopyEngineFactory::sendNewFilters(const QStringList &includeStrings,const QStringList &includeOptions,const QStringList &excludeStrings,const QStringList &excludeOptions)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("new filter"));
+ this->includeStrings=includeStrings;
+ this->includeOptions=includeOptions;
+ this->excludeStrings=excludeStrings;
+ this->excludeOptions=excludeOptions;
+ if(optionsEngine!=NULL)
+ {
+ optionsEngine->setOptionValue(QStringLiteral("includeStrings"),includeStrings);
+ optionsEngine->setOptionValue(QStringLiteral("includeOptions"),includeOptions);
+ optionsEngine->setOptionValue(QStringLiteral("excludeStrings"),excludeStrings);
+ optionsEngine->setOptionValue(QStringLiteral("excludeOptions"),excludeOptions);
+ }
+}
+
+void CopyEngineFactory::sendNewRenamingRules(const QString &firstRenamingRule,const QString &otherRenamingRule)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"new filter");
+ this->firstRenamingRule=firstRenamingRule;
+ this->otherRenamingRule=otherRenamingRule;
+ if(optionsEngine!=NULL)
+ {
+ optionsEngine->setOptionValue(QStringLiteral("firstRenamingRule"),firstRenamingRule);
+ optionsEngine->setOptionValue(QStringLiteral("otherRenamingRule"),otherRenamingRule);
+ }
+}
+
+void CopyEngineFactory::showRenamingRules()
+{
+ if(optionsEngine==NULL)
+ {
+ QMessageBox::critical(NULL,tr("Options error"),tr("Options engine is not loaded, can't access to the filters"));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"options not loaded");
+ return;
+ }
+ renamingRules->exec();
+}
+
+void CopyEngineFactory::updateBufferCheckbox()
+{
+ ui->osBufferLimited->setEnabled(ui->osBuffer->isChecked());
+ ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
+}
+
+void CopyEngineFactory::checksumIgnoreIfImpossible_toggled(bool checksumIgnoreIfImpossible)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("checksumIgnoreIfImpossible"),checksumIgnoreIfImpossible);
+}
+
+void CopyEngineFactory::setFileCollision(int index)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("action index: %1").arg(index));
+ if(optionsEngine==NULL)
+ return;
+ switch(index)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ optionsEngine->setOptionValue(QStringLiteral("fileCollision"),index);
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored");
+ break;
+ }
+}
+
+void CopyEngineFactory::setFileError(int index)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("action index: %1").arg(index));
+ if(optionsEngine==NULL)
+ return;
+ switch(index)
+ {
+ case 0:
+ case 1:
+ case 2:
+ optionsEngine->setOptionValue(QStringLiteral("fileError"),index);
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored");
+ break;
+ }
+}
+
+void CopyEngineFactory::updatedBlockSize()
+{
+ ui->sequentialBuffer->setMinimum(ui->blockSize->value());
+ ui->sequentialBuffer->setSingleStep(ui->blockSize->value());
+ ui->sequentialBuffer->setMaximum(ui->blockSize->value()*ULTRACOPIER_PLUGIN_MAX_SEQUENTIAL_NUMBER_OF_BLOCK);
+ ui->parallelBuffer->setMinimum(ui->blockSize->value());
+ ui->parallelBuffer->setSingleStep(ui->blockSize->value());
+ ui->parallelBuffer->setMaximum(ui->blockSize->value()*ULTRACOPIER_PLUGIN_MAX_PARALLEL_NUMBER_OF_BLOCK);
+ setParallelBuffer(ui->parallelBuffer->value());
+ setSequentialBuffer(ui->sequentialBuffer->value());
+}
+
+void CopyEngineFactory::deletePartiallyTransferredFiles(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("deletePartiallyTransferredFiles"),checked);
+}
+
+void CopyEngineFactory::renameTheOriginalDestination(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("renameTheOriginalDestination"),checked);
+}
+
+void CopyEngineFactory::checkDiskSpace(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("checkDiskSpace"),checked);
+}
+
+void CopyEngineFactory::defaultDestinationFolderBrowse()
+{
+ QString destination = QFileDialog::getExistingDirectory(ui->defaultDestinationFolder,facilityEngine->translateText(QStringLiteral("Select destination directory")),QStringLiteral(""),QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
+ if(destination.isEmpty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Canceled by the user");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ ui->defaultDestinationFolder->setText(destination);
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("defaultDestinationFolder"),destination);
+}
+
+void CopyEngineFactory::defaultDestinationFolder()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("defaultDestinationFolder"),ui->defaultDestinationFolder->text());
+}
+
+void CopyEngineFactory::followTheStrictOrder(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("followTheStrictOrder"),checked);
+}
+
+void CopyEngineFactory::moveTheWholeFolder(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("moveTheWholeFolder"),checked);
+}
+
+void CopyEngineFactory::on_inodeThreads_editingFinished()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the spinbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("inodeThreads"),ui->inodeThreads->value());
+}
+
+#ifdef Q_OS_WIN32
+size_t CopyEngineFactory::getTotalSystemMemory()
+{
+ MEMORYSTATUSEX status;
+ status.dwLength = sizeof(status);
+ GlobalMemoryStatusEx(&status);
+ return status.ullTotalPhys;
+}
+#endif
+
+#ifdef Q_OS_LINUX
+size_t CopyEngineFactory::getTotalSystemMemory()
+{
+ long pages = sysconf(_SC_PHYS_PAGES);
+ long page_size = sysconf(_SC_PAGE_SIZE);
+ return pages * page_size;
+}
+#endif
+
+#ifdef ULTRACOPIER_PLUGIN_RSYNC
+void CopyEngineFactory::setRsync(bool rsync)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("rsync",rsync);
+}
+#endif
+
+void CopyEngineFactory::copyListOrder(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue(QStringLiteral("copyListOrder"),checked);
+}
diff --git a/plugins/CopyEngine/Ultracopier/CopyEngineFactory.h b/plugins/CopyEngine/Ultracopier/CopyEngineFactory.h
new file mode 100644
index 0000000..548588f
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/CopyEngineFactory.h
@@ -0,0 +1,132 @@
+/** \file factory.h
+\brief Define the factory to create new instance
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#include "StructEnumDefinition_CopyEngine.h"
+
+#include <QObject>
+#include <QList>
+#include <QStringList>
+#include <QFileInfo>
+#include <QProcess>
+#include <QTimer>
+
+#include "../../../interface/PluginInterface_CopyEngine.h"
+#include "qstorageinfo.h"
+#include "StructEnumDefinition.h"
+#include "ui_copyEngineOptions.h"
+#include "CopyEngine.h"
+#include "Environment.h"
+#include "Filters.h"
+#include "RenamingRules.h"
+
+#ifdef Q_OS_WIN32
+ #ifndef NOMINMAX
+ #define NOMINMAX
+ #endif
+ #include <windows.h>
+#endif
+#ifdef Q_OS_LINUX
+ #include <unistd.h>
+#endif
+
+#ifndef FACTORY_H
+#define FACTORY_H
+
+namespace Ui {
+ class copyEngineOptions;
+}
+
+/** \brief to generate copy engine instance */
+class CopyEngineFactory : public PluginInterface_CopyEngineFactory
+{
+ Q_OBJECT
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
+ Q_PLUGIN_METADATA(IID "first-world.info.ultracopier.PluginInterface.CopyEngineFactory/1.0.0.0" FILE "plugin.json")
+ Q_INTERFACES(PluginInterface_CopyEngineFactory)
+ #endif
+public:
+ CopyEngineFactory();
+ ~CopyEngineFactory();
+ /// \brief to return the instance of the copy engine
+ PluginInterface_CopyEngine * getInstance();
+ /// \brief set the resources, to store options, to have facilityInterface
+ void setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityInterface,const bool &portableVersion);
+ //get mode allowed
+ /// \brief define if can copy file, folder or both
+ Ultracopier::CopyType getCopyType();
+ /// \brief to return which kind of transfer list operation is supported
+ Ultracopier::TransferListOperation getTransferListOperation();
+ /// \brief define if can only copy, or copy and move
+ bool canDoOnlyCopy() const;
+ /// \brief to get the supported protocols for the source
+ QStringList supportedProtocolsForTheSource() const;
+ /// \brief to get the supported protocols for the destination
+ QStringList supportedProtocolsForTheDestination() const;
+ /// \brief to get the options of the copy engine
+ QWidget * options();
+
+private:
+ Ui::copyEngineOptions *ui;
+ QWidget* tempWidget;
+ OptionInterface * optionsEngine;
+ bool errorFound;
+ FacilityInterface * facilityEngine;
+ Filters *filters;
+ RenamingRules *renamingRules;
+ QStorageInfo storageInfo;
+ QTimer lunchInitFunction;
+ QStringList includeStrings,includeOptions,excludeStrings,excludeOptions;
+ QString firstRenamingRule,otherRenamingRule;
+
+#if defined(Q_OS_WIN32) || (defined(Q_OS_LINUX) && defined(_SC_PHYS_PAGES))
+ static size_t getTotalSystemMemory();
+#endif
+private slots:
+ void init();
+ void setDoRightTransfer(bool doRightTransfer);
+ void setKeepDate(bool keepDate);
+ void setBlockSize(int blockSize);
+ void setParallelBuffer(int parallelBuffer);
+ void setSequentialBuffer(int sequentialBuffer);
+ void setParallelizeIfSmallerThan(int parallelizeIfSmallerThan);
+ void setAutoStart(bool autoStart);
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ void setRsync(bool rsync);
+ #endif
+ void setFolderCollision(int index);
+ void setFolderError(int index);
+ void setTransferAlgorithm(int index);
+ void setCheckDestinationFolder();
+ void showFilterDialog();
+ void sendNewFilters(const QStringList &includeStrings,const QStringList &includeOptions,const QStringList &excludeStrings,const QStringList &excludeOptions);
+ void doChecksum_toggled(bool);
+ void checksumOnlyOnError_toggled(bool);
+ void osBuffer_toggled(bool);
+ void osBufferLimited_toggled(bool);
+ void osBufferLimit_editingFinished();
+ void checksumIgnoreIfImpossible_toggled(bool);
+ void sendNewRenamingRules(const QString &firstRenamingRule, const QString &otherRenamingRule);
+ void showRenamingRules();
+ void updateBufferCheckbox();
+ void setFileCollision(int index);
+ void setFileError(int index);
+ void updatedBlockSize();
+ void deletePartiallyTransferredFiles(bool checked);
+ void renameTheOriginalDestination(bool checked);
+ void checkDiskSpace(bool checked);
+ void defaultDestinationFolderBrowse();
+ void defaultDestinationFolder();
+ void followTheStrictOrder(bool checked);
+ void moveTheWholeFolder(bool checked);
+ void on_inodeThreads_editingFinished();
+ void copyListOrder(bool checked);
+public slots:
+ void resetOptions();
+ void newLanguageLoaded();
+signals:
+ void reloadLanguage() const;
+};
+
+#endif // FACTORY_H
diff --git a/plugins/CopyEngine/Ultracopier/DebugDialog.cpp b/plugins/CopyEngine/Ultracopier/DebugDialog.cpp
new file mode 100644
index 0000000..a20f054
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/DebugDialog.cpp
@@ -0,0 +1,44 @@
+/** \file debugDialog.cpp
+\brief Define the dialog to have debug information
+\author alpha_one_x86 */
+
+#include "DebugDialog.h"
+#include "ui_debugDialog.h"
+
+#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+
+DebugDialog::DebugDialog(QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::debugDialog)
+{
+ ui->setupUi(this);
+}
+
+DebugDialog::~DebugDialog()
+{
+ delete ui;
+}
+
+void DebugDialog::setTransferList(const QStringList &list)
+{
+ ui->tranferList->clear();
+ ui->tranferList->addItems(list);
+}
+
+void DebugDialog::setActiveTransfer(const int &activeTransfer)
+{
+ ui->spinBoxActiveTransfer->setValue(activeTransfer);
+}
+
+void DebugDialog::setInodeUsage(const int &inodeUsage)
+{
+ ui->spinBoxNumberOfInode->setValue(inodeUsage);
+}
+
+void DebugDialog::setTransferThreadList(const QStringList &list)
+{
+ ui->transferThreadList->clear();
+ ui->transferThreadList->addItems(list);
+}
+
+#endif
diff --git a/plugins/CopyEngine/Ultracopier/DebugDialog.h b/plugins/CopyEngine/Ultracopier/DebugDialog.h
new file mode 100644
index 0000000..d2b1d6b
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/DebugDialog.h
@@ -0,0 +1,39 @@
+/** \file debugDialog.h
+\brief Define the dialog to have debug information
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef DEBUGDAILOG_H
+#define DEBUGDAILOG_H
+
+#include "Environment.h"
+
+#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+#include <QWidget>
+
+namespace Ui {
+ class debugDialog;
+}
+
+/// \brief class to the dialog to have debug information
+class DebugDialog : public QWidget
+{
+ Q_OBJECT
+public:
+ explicit DebugDialog(QWidget *parent = 0);
+ ~DebugDialog();
+ /// \brief to set the transfer list, limited in result to not slow down the application
+ void setTransferList(const QStringList &list);
+ /// \brief show the transfer thread, it show be a thread pool in normal time
+ void setTransferThreadList(const QStringList &list);
+ /// \brief show how many transfer is active
+ void setActiveTransfer(const int &activeTransfer);
+ /// \brief show many many inode is manipulated
+ void setInodeUsage(const int &inodeUsage);
+private:
+ Ui::debugDialog *ui;
+};
+
+#endif // ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+
+#endif // DEBUGDAILOG_H
diff --git a/plugins/CopyEngine/Ultracopier/DebugEngineMacro.h b/plugins/CopyEngine/Ultracopier/DebugEngineMacro.h
new file mode 100644
index 0000000..f9b5349
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/DebugEngineMacro.h
@@ -0,0 +1,28 @@
+/** \file DebugEngineMacro.h
+\brief Define the macro for the debug
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef DEBUGENGINEMACRO_H
+#define DEBUGENGINEMACRO_H
+
+#ifdef WIN32
+# define __func__ __FUNCTION__
+#endif
+
+/// \brief Macro for the debug log
+#ifdef ULTRACOPIER_PLUGIN_DEBUG
+ #if defined (__FILE__) && defined (__LINE__)
+ #define ULTRACOPIER_DEBUGCONSOLE(a,b) emit debugInformation(a,__func__,b,__FILE__,__LINE__)
+ #else
+ #define ULTRACOPIER_DEBUGCONSOLE(a,b) emit debugInformation(a,__func__,b)
+ #endif
+#else // ULTRACOPIER_PLUGIN_DEBUG
+ #define ULTRACOPIER_DEBUGCONSOLE(a,b) void()
+#endif // ULTRACOPIER_PLUGIN_DEBUG
+
+#endif // DEBUGENGINEMACRO_H
+
+
+
+
diff --git a/plugins/CopyEngine/Ultracopier/DiskSpace.cpp b/plugins/CopyEngine/Ultracopier/DiskSpace.cpp
new file mode 100644
index 0000000..2b8fec7
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/DiskSpace.cpp
@@ -0,0 +1,53 @@
+#include "DiskSpace.h"
+#include "ui_DiskSpace.h"
+#include "StructEnumDefinition_CopyEngine.h"
+
+DiskSpace::DiskSpace(FacilityInterface * facilityEngine,QList<Diskspace> list,QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::DiskSpace)
+{
+ Qt::WindowFlags flags = windowFlags();
+ #ifdef Q_OS_LINUX
+ flags=flags & ~Qt::X11BypassWindowManagerHint;
+ #endif
+ flags=flags | Qt::WindowStaysOnTopHint;
+ setWindowFlags(flags);
+
+ ui->setupUi(this);
+ ok=false;
+ int index=0;
+ int size=list.size();
+ QString drives;
+ while(index<size)
+ {
+ drives+=tr("Drives %1 have %2 available but need %3")
+ .arg(list.at(index).drive)
+ .arg(facilityEngine->sizeToString(list.at(index).freeSpace))
+ .arg(facilityEngine->sizeToString(list.at(index).requiredSpace));
+ drives+=QStringLiteral("<br />");
+ index++;
+ }
+ ui->drives->setText(drives);
+}
+
+DiskSpace::~DiskSpace()
+{
+ delete ui;
+}
+
+void DiskSpace::on_ok_clicked()
+{
+ ok=true;
+ close();
+}
+
+void DiskSpace::on_cancel_clicked()
+{
+ ok=false;
+ close();
+}
+
+bool DiskSpace::getAction() const
+{
+ return ok;
+}
diff --git a/plugins/CopyEngine/Ultracopier/DiskSpace.h b/plugins/CopyEngine/Ultracopier/DiskSpace.h
new file mode 100644
index 0000000..7d52b52
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/DiskSpace.h
@@ -0,0 +1,28 @@
+#ifndef DISKSPACE_H
+#define DISKSPACE_H
+
+#include <QDialog>
+#include "../../../interface/PluginInterface_CopyEngine.h"
+#include "StructEnumDefinition_CopyEngine.h"
+
+namespace Ui {
+class DiskSpace;
+}
+
+class DiskSpace : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit DiskSpace(FacilityInterface * facilityEngine,QList<Diskspace> list,QWidget *parent = 0);
+ ~DiskSpace();
+ bool getAction() const;
+private slots:
+ void on_ok_clicked();
+ void on_cancel_clicked();
+private:
+ Ui::DiskSpace *ui;
+ bool ok;
+};
+
+#endif // DISKSPACE_H
diff --git a/plugins/CopyEngine/Ultracopier/DiskSpace.ui b/plugins/CopyEngine/Ultracopier/DiskSpace.ui
new file mode 100644
index 0000000..10b5c69
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/DiskSpace.ui
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>DiskSpace</class>
+ <widget class="QDialog" name="DiskSpace">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>367</width>
+ <height>146</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Disk space</string>
+ </property>
+ <property name="windowIcon">
+ <iconset resource="copyEngineResources.qrc">
+ <normaloff>:/CopyEngine/Ultracopier/resources/remove.png</normaloff>:/CopyEngine/Ultracopier/resources/remove.png</iconset>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>You need more space on this drive to finish this transfer</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QTextBrowser" name="drives"/>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="ok">
+ <property name="text">
+ <string>Continue</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="cancel">
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <resources>
+ <include location="copyEngineResources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/plugins/CopyEngine/Ultracopier/DriveManagement.cpp b/plugins/CopyEngine/Ultracopier/DriveManagement.cpp
new file mode 100644
index 0000000..221b4e8
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/DriveManagement.cpp
@@ -0,0 +1,102 @@
+#include "DriveManagement.h"
+
+#include <QDir>
+#include <QFileInfoList>
+#include <QStorageInfo>
+
+DriveManagement::DriveManagement()
+{
+ tryUpdate();
+ #ifdef Q_OS_WIN32
+ reg1=QRegularExpression(QStringLiteral("^(\\\\\\\\|//)[^\\\\\\\\/]+(\\\\|/)[^\\\\\\\\/]+"));
+ reg2=QRegularExpression(QStringLiteral("^((\\\\\\\\|//)[^\\\\\\\\/]+(\\\\|/)[^\\\\\\\\/]+).*$"));
+ reg3=QRegularExpression(QStringLiteral("^[a-zA-Z]:[\\\\/]"));
+ reg4=QRegularExpression(QStringLiteral("^([a-zA-Z]:[\\\\/]).*$"));
+ #endif
+ /// \warn ULTRACOPIER_DEBUGCONSOLE() don't work here because the sinal slot is not connected!
+}
+
+//get drive of an file or folder
+QString DriveManagement::getDrive(const QString &fileOrFolder) const
+{
+ const QString &inode=QDir::toNativeSeparators(fileOrFolder);
+ int size=mountSysPoint.size();
+ for (int i = 0; i < size; ++i) {
+ if(inode.startsWith(mountSysPoint.at(i)))
+ return QDir::toNativeSeparators(mountSysPoint.at(i));
+ }
+ #ifdef Q_OS_WIN32
+ if(fileOrFolder.contains(reg1))
+ {
+ QString returnString=fileOrFolder;
+ returnString.replace(reg2,QStringLiteral("\\1"));
+ return returnString;
+ }
+ //due to lack of WMI support into mingw, the new drive event is never called, this is a workaround
+ if(fileOrFolder.contains(reg3))
+ {
+ QString returnString=fileOrFolder;
+ returnString.replace(reg4,QStringLiteral("\\1"));
+ return QDir::toNativeSeparators(returnString).toUpper();
+ }
+ #endif
+ //if unable to locate the right mount point
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("unable to locate the right mount point for: %1, mount point: %2").arg(fileOrFolder).arg(mountSysPoint.join(";")));
+ return QString();
+}
+
+QByteArray DriveManagement::getDriveType(const QString &drive) const
+{
+ int index=mountSysPoint.indexOf(drive);
+ if(index!=-1)
+ return driveType.at(index);
+ return QByteArray();
+}
+
+bool DriveManagement::isSameDrive(const QString &file1,const QString &file2) const
+{
+ if(mountSysPoint.size()==0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("no mount point found"));
+ return false;
+ }
+ const QString &drive1=getDrive(file1);
+ if(drive1.isEmpty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("drive for the file1 not found: %1").arg(file1));
+ return false;
+ }
+ const QString &drive2=getDrive(file2);
+ if(drive2.isEmpty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("drive for the file2 not found: %1").arg(file2));
+ return false;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("%1 is egal to %2?").arg(drive1).arg(drive2));
+ if(drive1==drive2)
+ return true;
+ else
+ return false;
+}
+
+void DriveManagement::tryUpdate()
+{
+ mountSysPoint.clear();
+ driveType.clear();
+ const QList<QStorageInfo> mountedVolumesList=QStorageInfo::mountedVolumes();
+ int index=0;
+ while(index<mountedVolumesList.size())
+ {
+ mountSysPoint << QDir::toNativeSeparators(mountedVolumesList.at(index).rootPath());
+ #ifdef Q_OS_WIN32
+ if(mountSysPoint.last()!="A:\\" && mountSysPoint.last()!="A:/" && mountSysPoint.last()!="A:" && mountSysPoint.last()!="A" &&
+ mountSysPoint.last()!="a:\\" && mountSysPoint.last()!="a:/" && mountSysPoint.last()!="a:" && mountSysPoint.last()!="a")
+ driveType << mountedVolumesList.at(index).fileSystemType();
+ else
+ driveType << QByteArray();
+ #else
+ driveType << mountedVolumesList.at(index).fileSystemType();
+ #endif
+ index++;
+ }
+}
diff --git a/plugins/CopyEngine/Ultracopier/DriveManagement.h b/plugins/CopyEngine/Ultracopier/DriveManagement.h
new file mode 100644
index 0000000..765a753
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/DriveManagement.h
@@ -0,0 +1,34 @@
+#ifndef DRIVEMANAGEMENT_H
+#define DRIVEMANAGEMENT_H
+
+#include <QObject>
+#include <QString>
+#include <QStringList>
+#include <QRegularExpression>
+#include <QStorageInfo>
+#include <QTimer>
+
+#include "Environment.h"
+
+class DriveManagement : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DriveManagement();
+ bool isSameDrive(const QString &file1,const QString &file2) const;
+ /// \brief get drive of an file or folder
+ QString getDrive(const QString &fileOrFolder) const;
+ QByteArray getDriveType(const QString &drive) const;
+ void tryUpdate();
+protected:
+ QStringList mountSysPoint;
+ QList<QByteArray> driveType;
+ #ifdef Q_OS_WIN32
+ QRegularExpression reg1,reg2,reg3,reg4;
+ #endif
+signals:
+ /// \brief To debug source
+ void debugInformation(const Ultracopier::DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne) const;
+};
+
+#endif // DRIVEMANAGEMENT_H
diff --git a/plugins/CopyEngine/Ultracopier/Environment.h b/plugins/CopyEngine/Ultracopier/Environment.h
new file mode 100644
index 0000000..34db2a2
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Environment.h
@@ -0,0 +1,11 @@
+/** \file Environment.h
+\brief Define the environment variable and global function
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#include "Variable.h"
+/// \brief The global include
+#include "StructEnumDefinition.h"
+#include "StructEnumDefinition_CopyEngine.h"
+#include "DebugEngineMacro.h"
+#include "CompilerInfo.h"
diff --git a/plugins/CopyEngine/Ultracopier/FileErrorDialog.cpp b/plugins/CopyEngine/Ultracopier/FileErrorDialog.cpp
new file mode 100644
index 0000000..736cfeb
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/FileErrorDialog.cpp
@@ -0,0 +1,163 @@
+#include "FileErrorDialog.h"
+#include "ui_fileErrorDialog.h"
+#include "TransferThread.h"
+
+#include <QString>
+
+bool FileErrorDialog::isInAdmin=false;
+
+FileErrorDialog::FileErrorDialog(QWidget *parent, QFileInfo fileInfo, QString errorString, const ErrorType &errorType) :
+ QDialog(parent),
+ ui(new Ui::fileErrorDialog)
+{
+ Qt::WindowFlags flags = windowFlags();
+ #ifdef Q_OS_LINUX
+ flags=flags & ~Qt::X11BypassWindowManagerHint;
+ #endif
+ flags=flags | Qt::WindowStaysOnTopHint;
+ setWindowFlags(flags);
+
+ ui->setupUi(this);
+ action=FileError_Cancel;
+ ui->label_error->setText(errorString);
+ if(fileInfo.exists())
+ {
+ ui->label_content_file_name->setText(TransferThread::resolvedName(fileInfo));
+ if(ui->label_content_file_name->text().isEmpty())
+ {
+ ui->label_content_file_name->setText(fileInfo.absoluteFilePath());
+ ui->label_folder->setVisible(false);
+ ui->label_content_folder->setVisible(false);
+ }
+ else
+ {
+ QString folder=fileInfo.absolutePath();
+ if(folder.size()>80)
+ folder=folder.mid(0,38)+"..."+folder.mid(folder.size()-38);
+ ui->label_content_folder->setText(fileInfo.absolutePath());
+ }
+ ui->label_content_size->setText(QString::number(fileInfo.size()));
+ QDateTime maxTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1));
+ if(maxTime<fileInfo.lastModified())
+ {
+ ui->label_modified->setVisible(true);
+ ui->label_content_modified->setVisible(true);
+ ui->label_content_modified->setText(fileInfo.lastModified().toString());
+ }
+ else
+ {
+ ui->label_modified->setVisible(false);
+ ui->label_content_modified->setVisible(false);
+ }
+ if(fileInfo.isDir())
+ {
+ this->setWindowTitle(tr("Error on folder"));
+ ui->label_size->hide();
+ ui->label_content_size->hide();
+ ui->label_file_name->setText(tr("Folder name"));
+ }
+ ui->label_file_destination->setVisible(fileInfo.isSymLink());
+ ui->label_content_file_destination->setVisible(fileInfo.isSymLink());
+ if(fileInfo.isSymLink())
+ ui->label_content_file_destination->setText(fileInfo.symLinkTarget());
+ }
+ else
+ {
+ ui->label_content_file_name->setText(TransferThread::resolvedName(fileInfo));
+ if(ui->label_content_file_name->text().isEmpty())
+ {
+ ui->label_content_file_name->setText(fileInfo.absoluteFilePath());
+ ui->label_folder->setVisible(false);
+ ui->label_content_folder->setVisible(false);
+ }
+ else
+ ui->label_content_folder->setText(fileInfo.absolutePath());
+
+ ui->label_file_destination->hide();
+ ui->label_content_file_destination->hide();
+ ui->label_size->hide();
+ ui->label_content_size->hide();
+ ui->label_modified->hide();
+ ui->label_content_modified->hide();
+ }
+ if(errorType==ErrorType_Folder || errorType==ErrorType_FolderWithRety)
+ ui->PutToBottom->hide();
+ if(errorType==ErrorType_Folder)
+ ui->Retry->hide();
+
+ ui->Rights->hide();
+ #ifdef ULTRACOPIER_PLUGIN_RIGHTS
+ if(isInAdmin)
+ ui->Rights->hide();
+ #ifdef Q_OS_WIN32
+ if(errorType!=ErrorType_Rights)
+ ui->Rights->hide();
+ #else
+ ui->Rights->hide();
+ #endif
+ #else
+ ui->Rights->hide();
+ #endif
+}
+
+FileErrorDialog::~FileErrorDialog()
+{
+ delete ui;
+}
+
+void FileErrorDialog::changeEvent(QEvent *e)
+{
+ QWidget::changeEvent(e);
+ switch (e->type()) {
+ case QEvent::LanguageChange:
+ ui->retranslateUi(this);
+ break;
+ default:
+ break;
+ }
+}
+
+void FileErrorDialog::on_PutToBottom_clicked()
+{
+ action=FileError_PutToEndOfTheList;
+ this->close();
+}
+
+void FileErrorDialog::on_Retry_clicked()
+{
+ action=FileError_Retry;
+ this->close();
+}
+
+void FileErrorDialog::on_Skip_clicked()
+{
+ action=FileError_Skip;
+ this->close();
+}
+
+void FileErrorDialog::on_Cancel_clicked()
+{
+ action=FileError_Cancel;
+ this->close();
+}
+
+bool FileErrorDialog::getAlways()
+{
+ return ui->checkBoxAlways->isChecked();
+}
+
+FileErrorAction FileErrorDialog::getAction()
+{
+ return action;
+}
+
+void FileErrorDialog::on_checkBoxAlways_clicked()
+{
+ ui->Rights->setEnabled(!ui->checkBoxAlways->isChecked());
+}
+
+#ifdef ULTRACOPIER_PLUGIN_RIGHTS
+void FileErrorDialog::on_Rights_clicked()
+{
+}
+#endif
diff --git a/plugins/CopyEngine/Ultracopier/FileErrorDialog.h b/plugins/CopyEngine/Ultracopier/FileErrorDialog.h
new file mode 100644
index 0000000..09a481e
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/FileErrorDialog.h
@@ -0,0 +1,51 @@
+/** \file fileErrorDialog.h
+\brief Define the dialog error on the file
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#include <QDialog>
+#include <QWidget>
+#include <QString>
+#include <QDateTime>
+#include <QFileInfo>
+#include "Environment.h"
+
+#ifndef FILEERRORDIALOG_H
+#define FILEERRORDIALOG_H
+
+
+
+namespace Ui {
+ class fileErrorDialog;
+}
+
+/// \brief to show error dialog, and ask what do
+class FileErrorDialog : public QDialog
+{
+ Q_OBJECT
+public:
+ /// \brief create the object and pass all the informations to it
+ explicit FileErrorDialog(QWidget *parent,QFileInfo fileInfo,QString errorString,const ErrorType &errorType);
+ ~FileErrorDialog();
+ /// \brief return the the always checkbox is checked
+ bool getAlways();
+ /// \brief return the action clicked
+ FileErrorAction getAction();
+protected:
+ void changeEvent(QEvent *e);
+ static bool isInAdmin;
+private slots:
+ void on_PutToBottom_clicked();
+ void on_Retry_clicked();
+ void on_Skip_clicked();
+ void on_Cancel_clicked();
+ void on_checkBoxAlways_clicked();
+ #ifdef ULTRACOPIER_PLUGIN_RIGHTS
+ void on_Rights_clicked();
+ #endif
+private:
+ Ui::fileErrorDialog *ui;
+ FileErrorAction action;
+};
+
+#endif // FILEERRORDIALOG_H
diff --git a/plugins/CopyEngine/Ultracopier/FileExistsDialog.cpp b/plugins/CopyEngine/Ultracopier/FileExistsDialog.cpp
new file mode 100644
index 0000000..0e3ca78
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/FileExistsDialog.cpp
@@ -0,0 +1,238 @@
+#include "FileExistsDialog.h"
+#include "ui_fileExistsDialog.h"
+#include "TransferThread.h"
+
+#include <QRegularExpression>
+#include <QFileInfo>
+#include <QMessageBox>
+
+FileExistsDialog::FileExistsDialog(QWidget *parent,QFileInfo source,QFileInfo destination,QString firstRenamingRule,QString otherRenamingRule) :
+ QDialog(parent),
+ ui(new Ui::fileExistsDialog)
+{
+ Qt::WindowFlags flags = windowFlags();
+ #ifdef Q_OS_LINUX
+ flags=flags & ~Qt::X11BypassWindowManagerHint;
+ #endif
+ flags=flags | Qt::WindowStaysOnTopHint;
+ setWindowFlags(flags);
+
+ ui->setupUi(this);
+ action=FileExists_Cancel;
+ destinationInfo=destination;
+ oldName=TransferThread::resolvedName(destination);
+ ui->lineEditNewName->setText(oldName);
+ ui->lineEditNewName->setPlaceholderText(oldName);
+ ui->Overwrite->addAction(ui->actionOverwrite_if_newer);
+ ui->Overwrite->addAction(ui->actionOverwrite_if_not_same_modification_date);
+ ui->label_content_source_size->setText(QString::number(source.size()));
+ ui->label_content_source_modified->setText(source.lastModified().toString());
+ ui->label_content_source_file_name->setText(TransferThread::resolvedName(source));
+ QString folder=source.absolutePath();
+ if(folder.size()>80)
+ folder=folder.mid(0,38)+"..."+folder.mid(folder.size()-38);
+ ui->label_content_source_folder->setText(folder);
+ ui->label_content_destination_size->setText(QString::number(destination.size()));
+ ui->label_content_destination_modified->setText(destination.lastModified().toString());
+ ui->label_content_destination_file_name->setText(TransferThread::resolvedName(destination));
+ folder=destination.absolutePath();
+ if(folder.size()>80)
+ folder=folder.mid(0,38)+"..."+folder.mid(folder.size()-38);
+ ui->label_content_destination_folder->setText(folder);
+ QDateTime maxTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1));
+ if(maxTime<source.lastModified())
+ {
+ ui->label_source_modified->setVisible(true);
+ ui->label_content_source_modified->setVisible(true);
+ ui->label_content_source_modified->setText(source.lastModified().toString());
+ }
+ else
+ {
+ ui->label_source_modified->setVisible(false);
+ ui->label_content_source_modified->setVisible(false);
+ }
+ if(maxTime<destination.lastModified())
+ {
+ ui->label_destination_modified->setVisible(true);
+ ui->label_content_destination_modified->setVisible(true);
+ ui->label_content_destination_modified->setText(destination.lastModified().toString());
+ }
+ else
+ {
+ ui->label_destination_modified->setVisible(false);
+ ui->label_content_destination_modified->setVisible(false);
+ }
+ if(!source.exists())
+ {
+ ui->label_content_source_size->setVisible(false);
+ ui->label_source_size->setVisible(false);
+ ui->label_source_modified->setVisible(false);
+ ui->label_content_source_modified->setVisible(false);
+ }
+ if(!destination.exists())
+ {
+ ui->label_content_destination_size->setVisible(false);
+ ui->label_destination_size->setVisible(false);
+ ui->label_destination_modified->setVisible(false);
+ ui->label_content_destination_modified->setVisible(false);
+ }
+ this->firstRenamingRule=firstRenamingRule;
+ this->otherRenamingRule=otherRenamingRule;
+ on_SuggestNewName_clicked();
+}
+
+FileExistsDialog::~FileExistsDialog()
+{
+ delete ui;
+}
+
+void FileExistsDialog::changeEvent(QEvent *e)
+{
+ QWidget::changeEvent(e);
+ switch (e->type()) {
+ case QEvent::LanguageChange:
+ ui->retranslateUi(this);
+ break;
+ default:
+ break;
+ }
+}
+
+QString FileExistsDialog::getNewName()
+{
+ if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked())
+ return oldName;
+ else
+ return ui->lineEditNewName->text();
+}
+
+void FileExistsDialog::on_SuggestNewName_clicked()
+{
+ QFileInfo destinationInfo=this->destinationInfo;
+ QString absolutePath=destinationInfo.absolutePath();
+ QString fileName=TransferThread::resolvedName(destinationInfo);
+ QString suffix="";
+ QString destination;
+ QString newFileName;
+ //resolv the suffix
+ if(fileName.contains(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$"))))
+ {
+ suffix=fileName;
+ suffix.replace(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$")),QStringLiteral("\\2"));
+ fileName.replace(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$")),QStringLiteral("\\1"));
+ }
+ //resolv the new name
+ int num=1;
+ do
+ {
+ if(num==1)
+ {
+ if(firstRenamingRule==QStringLiteral(""))
+ newFileName=tr("%1 - copy").arg(fileName);
+ else
+ {
+ newFileName=firstRenamingRule;
+ newFileName.replace("%name%",fileName);
+ }
+ }
+ else
+ {
+ if(otherRenamingRule=="")
+ newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num);
+ else
+ {
+ newFileName=otherRenamingRule;
+ newFileName.replace(QStringLiteral("%name%"),fileName);
+ newFileName.replace(QStringLiteral("%number%"),QString::number(num));
+ }
+ }
+ destination=absolutePath+QDir::separator()+newFileName+suffix;
+ destinationInfo.setFile(destination);
+ num++;
+ }
+ while(destinationInfo.exists());
+ ui->lineEditNewName->setText(newFileName+suffix);
+}
+
+void FileExistsDialog::on_Rename_clicked()
+{
+ action=FileExists_Rename;
+ this->close();
+}
+
+void FileExistsDialog::on_Overwrite_clicked()
+{
+ action=FileExists_Overwrite;
+ this->close();
+}
+
+void FileExistsDialog::on_Skip_clicked()
+{
+ action=FileExists_Skip;
+ this->close();
+}
+
+void FileExistsDialog::on_Cancel_clicked()
+{
+ action=FileExists_Cancel;
+ this->close();
+}
+
+void FileExistsDialog::on_actionOverwrite_if_newer_triggered()
+{
+ action=FileExists_OverwriteIfNewer;
+ this->close();
+}
+
+void FileExistsDialog::on_actionOverwrite_if_not_same_modification_date_triggered()
+{
+ action=FileExists_OverwriteIfNotSame;
+ this->close();
+}
+
+FileExistsAction FileExistsDialog::getAction()
+{
+ return action;
+}
+
+bool FileExistsDialog::getAlways()
+{
+ return ui->checkBoxAlways->isChecked();
+}
+
+void FileExistsDialog::updateRenameButton()
+{
+ ui->Rename->setEnabled(ui->checkBoxAlways->isChecked() || (!ui->lineEditNewName->text().contains(QRegularExpression("[/\\\\\\*]")) && oldName!=ui->lineEditNewName->text() && !ui->lineEditNewName->text().isEmpty()));
+}
+
+void FileExistsDialog::on_checkBoxAlways_toggled(bool checked)
+{
+ Q_UNUSED(checked);
+ updateRenameButton();
+}
+
+void FileExistsDialog::on_lineEditNewName_textChanged(const QString &arg1)
+{
+ Q_UNUSED(arg1);
+ updateRenameButton();
+}
+
+void FileExistsDialog::on_lineEditNewName_returnPressed()
+{
+ updateRenameButton();
+ if(ui->Rename->isEnabled())
+ on_Rename_clicked();
+ else
+ QMessageBox::warning(this,tr("Error"),tr("Try rename with using special characters"));
+}
+
+void FileExistsDialog::on_actionOverwrite_if_older_triggered()
+{
+ action=FileExists_OverwriteIfOlder;
+ this->close();
+}
+
+void FileExistsDialog::on_lineEditNewName_editingFinished()
+{
+ updateRenameButton();
+}
diff --git a/plugins/CopyEngine/Ultracopier/FileExistsDialog.h b/plugins/CopyEngine/Ultracopier/FileExistsDialog.h
new file mode 100644
index 0000000..c637e3b
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/FileExistsDialog.h
@@ -0,0 +1,60 @@
+/** \file fileExistsDialog.h
+\brief Define the dialog when file already exists
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#include <QDialog>
+#include <QWidget>
+#include <QString>
+#include <QDateTime>
+#include <QFileInfo>
+#include <QDir>
+#include "Environment.h"
+
+#ifndef FILEEXISTSDIALOG_H
+#define FILEEXISTSDIALOG_H
+
+namespace Ui {
+ class fileExistsDialog;
+}
+
+/// \brief to show file exists dialog, and ask what do
+class FileExistsDialog : public QDialog
+{
+ Q_OBJECT
+public:
+ /// \brief create the object and pass all the informations to it
+ explicit FileExistsDialog(QWidget *parent,QFileInfo source,QFileInfo destination,QString firstRenamingRule,QString otherRenamingRule);
+ ~FileExistsDialog();
+ /// \brief return the the always checkbox is checked
+ bool getAlways();
+ /// \brief return the action clicked
+ FileExistsAction getAction();
+ /// \brief return the new rename is case in manual renaming
+ QString getNewName();
+protected:
+ void changeEvent(QEvent *e);
+private slots:
+ void on_SuggestNewName_clicked();
+ void on_Rename_clicked();
+ void on_Overwrite_clicked();
+ void on_Skip_clicked();
+ void on_Cancel_clicked();
+ void on_actionOverwrite_if_newer_triggered();
+ void on_actionOverwrite_if_not_same_modification_date_triggered();
+ void updateRenameButton();
+ void on_checkBoxAlways_toggled(bool checked);
+ void on_lineEditNewName_textChanged(const QString &arg1);
+ void on_lineEditNewName_returnPressed();
+ void on_actionOverwrite_if_older_triggered();
+ void on_lineEditNewName_editingFinished();
+private:
+ Ui::fileExistsDialog *ui;
+ FileExistsAction action;
+ QString oldName;
+ QFileInfo destinationInfo;
+ QString firstRenamingRule;
+ QString otherRenamingRule;
+};
+
+#endif // FILEEXISTSDIALOG_H
diff --git a/plugins/CopyEngine/Ultracopier/FileIsSameDialog.cpp b/plugins/CopyEngine/Ultracopier/FileIsSameDialog.cpp
new file mode 100644
index 0000000..7f3d565
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/FileIsSameDialog.cpp
@@ -0,0 +1,188 @@
+#include "FileIsSameDialog.h"
+#include "ui_fileIsSameDialog.h"
+#include "TransferThread.h"
+
+#include <QRegularExpression>
+#include <QFileInfo>
+#include <QMessageBox>
+
+FileIsSameDialog::FileIsSameDialog(QWidget *parent,QFileInfo fileInfo,QString firstRenamingRule,QString otherRenamingRule) :
+ QDialog(parent),
+ ui(new Ui::fileIsSameDialog)
+{
+ Qt::WindowFlags flags = windowFlags();
+ #ifdef Q_OS_LINUX
+ flags=flags & ~Qt::X11BypassWindowManagerHint;
+ #endif
+ flags=flags | Qt::WindowStaysOnTopHint;
+ setWindowFlags(flags);
+
+ ui->setupUi(this);
+ action=FileExists_Cancel;
+ oldName=TransferThread::resolvedName(fileInfo);
+ destinationInfo=fileInfo;
+ ui->lineEditNewName->setText(oldName);
+ ui->lineEditNewName->setPlaceholderText(oldName);
+ ui->label_content_size->setText(QString::number(fileInfo.size()));
+ ui->label_content_modified->setText(fileInfo.lastModified().toString());
+ ui->label_content_file_name->setText(TransferThread::resolvedName(fileInfo));
+ QString folder=fileInfo.absolutePath();
+ if(folder.size()>80)
+ folder=folder.mid(0,38)+"..."+folder.mid(folder.size()-38);
+ ui->label_content_folder->setText(folder);
+ updateRenameButton();
+ QDateTime maxTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1));
+ if(maxTime<fileInfo.lastModified())
+ {
+ ui->label_modified->setVisible(true);
+ ui->label_content_modified->setVisible(true);
+ ui->label_content_modified->setText(fileInfo.lastModified().toString());
+ }
+ else
+ {
+ ui->label_modified->setVisible(false);
+ ui->label_content_modified->setVisible(false);
+ }
+ if(!fileInfo.exists())
+ {
+ ui->label_content_size->setVisible(false);
+ ui->label_size->setVisible(false);
+ ui->label_modified->setVisible(false);
+ ui->label_content_modified->setVisible(false);
+ }
+ this->firstRenamingRule=firstRenamingRule;
+ this->otherRenamingRule=otherRenamingRule;
+ on_SuggestNewName_clicked();
+}
+
+FileIsSameDialog::~FileIsSameDialog()
+{
+ delete ui;
+}
+
+void FileIsSameDialog::changeEvent(QEvent *e)
+{
+ QWidget::changeEvent(e);
+ switch (e->type()) {
+ case QEvent::LanguageChange:
+ ui->retranslateUi(this);
+ break;
+ default:
+ break;
+ }
+}
+
+QString FileIsSameDialog::getNewName()
+{
+ if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked())
+ return oldName;
+ else
+ return ui->lineEditNewName->text();
+}
+
+void FileIsSameDialog::on_SuggestNewName_clicked()
+{
+ QFileInfo destinationInfo=this->destinationInfo;
+ QString absolutePath=destinationInfo.absolutePath();
+ QString fileName=TransferThread::resolvedName(destinationInfo);
+ QString suffix="";
+ QString destination;
+ QString newFileName;
+ //resolv the suffix
+ if(fileName.contains(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$"))))
+ {
+ suffix=fileName;
+ suffix.replace(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$")),QStringLiteral("\\2"));
+ fileName.replace(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$")),QStringLiteral("\\1"));
+ }
+ //resolv the new name
+ int num=1;
+ do
+ {
+ if(num==1)
+ {
+ if(firstRenamingRule=="")
+ newFileName=tr("%1 - copy").arg(fileName);
+ else
+ {
+ newFileName=firstRenamingRule;
+ newFileName.replace(QStringLiteral("%name%"),fileName);
+ }
+ }
+ else
+ {
+ if(otherRenamingRule=="")
+ newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num);
+ else
+ {
+ newFileName=otherRenamingRule;
+ newFileName.replace(QStringLiteral("%name%"),fileName);
+ newFileName.replace(QStringLiteral("%number%"),QString::number(num));
+ }
+ }
+ destination=absolutePath+QDir::separator()+newFileName+suffix;
+ destinationInfo.setFile(destination);
+ num++;
+ }
+ while(destinationInfo.exists());
+ ui->lineEditNewName->setText(newFileName+suffix);
+}
+
+void FileIsSameDialog::on_Rename_clicked()
+{
+ action=FileExists_Rename;
+ this->close();
+}
+
+void FileIsSameDialog::on_Skip_clicked()
+{
+ action=FileExists_Skip;
+ this->close();
+}
+
+void FileIsSameDialog::on_Cancel_clicked()
+{
+ action=FileExists_Cancel;
+ this->close();
+}
+
+FileExistsAction FileIsSameDialog::getAction()
+{
+ return action;
+}
+
+bool FileIsSameDialog::getAlways()
+{
+ return ui->checkBoxAlways->isChecked();
+}
+
+void FileIsSameDialog::updateRenameButton()
+{
+ ui->Rename->setEnabled(ui->checkBoxAlways->isChecked() || (!ui->lineEditNewName->text().contains(QRegularExpression("[/\\\\\\*]")) && oldName!=ui->lineEditNewName->text() && !ui->lineEditNewName->text().isEmpty()));
+}
+
+void FileIsSameDialog::on_lineEditNewName_textChanged(const QString &arg1)
+{
+ Q_UNUSED(arg1);
+ updateRenameButton();
+}
+
+void FileIsSameDialog::on_checkBoxAlways_toggled(bool checked)
+{
+ Q_UNUSED(checked);
+ updateRenameButton();
+}
+
+void FileIsSameDialog::on_lineEditNewName_returnPressed()
+{
+ updateRenameButton();
+ if(ui->Rename->isEnabled())
+ on_Rename_clicked();
+ else
+ QMessageBox::warning(this,tr("Error"),tr("Try rename with using special characters"));
+}
+
+void FileIsSameDialog::on_lineEditNewName_editingFinished()
+{
+ updateRenameButton();
+}
diff --git a/plugins/CopyEngine/Ultracopier/FileIsSameDialog.h b/plugins/CopyEngine/Ultracopier/FileIsSameDialog.h
new file mode 100644
index 0000000..c9be99c
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/FileIsSameDialog.h
@@ -0,0 +1,57 @@
+/** \file fileIsSameDialog.h
+\brief Define the dialog when file is same
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#include <QDialog>
+#include <QWidget>
+#include <QString>
+#include <QDateTime>
+#include <QFileInfo>
+#include <QDir>
+#include "Environment.h"
+
+#ifndef FILEISSAMEDIALOG_H
+#define FILEISSAMEDIALOG_H
+
+namespace Ui {
+ class fileIsSameDialog;
+}
+
+/// \brief to show file is same dialog, and ask what do
+class FileIsSameDialog : public QDialog
+{
+ Q_OBJECT
+public:
+ /// \brief create the object and pass all the informations to it
+ explicit FileIsSameDialog(QWidget *parent,QFileInfo fileInfo,QString firstRenamingRule,QString otherRenamingRule);
+ ~FileIsSameDialog();
+ /// \brief return the the always checkbox is checked
+ bool getAlways();
+ /// \brief return the action clicked
+ FileExistsAction getAction();
+ /// \brief return the new rename is case in manual renaming
+ QString getNewName();
+protected:
+ void changeEvent(QEvent *e);
+private slots:
+ void on_SuggestNewName_clicked();
+ void on_Rename_clicked();
+ void on_Skip_clicked();
+ void on_Cancel_clicked();
+ void updateRenameButton();
+ void on_lineEditNewName_textChanged(const QString &arg1);
+ void on_checkBoxAlways_toggled(bool checked);
+ void on_lineEditNewName_returnPressed();
+ void on_lineEditNewName_editingFinished();
+private:
+ Ui::fileIsSameDialog *ui;
+ FileExistsAction action;
+ QString oldName;
+ QFileInfo destinationInfo;
+ QString firstRenamingRule;
+ QString otherRenamingRule;
+
+};
+
+#endif // FILEISSAMEDIALOG_H
diff --git a/plugins/CopyEngine/Ultracopier/FilterRules.cpp b/plugins/CopyEngine/Ultracopier/FilterRules.cpp
new file mode 100644
index 0000000..5d1827e
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/FilterRules.cpp
@@ -0,0 +1,193 @@
+#include "FilterRules.h"
+#include "ui_FilterRules.h"
+
+#include <QRegularExpression>
+
+FilterRules::FilterRules(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::FilterRules)
+{
+ ui->setupUi(this);
+ updateChecking();
+ haveBeenValided=false;
+}
+
+FilterRules::~FilterRules()
+{
+ delete ui;
+}
+
+bool FilterRules::getIsValid()
+{
+ return isValid && haveBeenValided;
+}
+
+QString FilterRules::get_search_text()
+{
+ return ui->search->text();
+}
+
+SearchType FilterRules::get_search_type()
+{
+ switch(ui->search_type->currentIndex())
+ {
+ case 0:
+ return SearchType_rawText;
+ case 1:
+ return SearchType_simpleRegex;
+ case 2:
+ return SearchType_perlRegex;
+ }
+ return SearchType_simpleRegex;
+}
+
+ApplyOn FilterRules::get_apply_on()
+{
+ switch(ui->apply_on->currentIndex())
+ {
+ case 0:
+ return ApplyOn_file;
+ case 1:
+ return ApplyOn_fileAndFolder;
+ case 2:
+ return ApplyOn_folder;
+ }
+ return ApplyOn_fileAndFolder;
+}
+
+bool FilterRules::get_need_match_all()
+{
+ return ui->need_match_all->isChecked();
+}
+
+void FilterRules::set_search_text(QString search_text)
+{
+ ui->search->setText(search_text);
+}
+
+void FilterRules::set_search_type(SearchType search_type)
+{
+ switch(search_type)
+ {
+ case SearchType_rawText:
+ ui->search_type->setCurrentIndex(0);
+ break;
+ case SearchType_simpleRegex:
+ ui->search_type->setCurrentIndex(1);
+ break;
+ case SearchType_perlRegex:
+ ui->search_type->setCurrentIndex(2);
+ break;
+ }
+}
+
+void FilterRules::set_apply_on(ApplyOn apply_on)
+{
+ switch(apply_on)
+ {
+ case ApplyOn_file:
+ ui->apply_on->setCurrentIndex(0);
+ break;
+ case ApplyOn_fileAndFolder:
+ ui->apply_on->setCurrentIndex(1);
+ break;
+ case ApplyOn_folder:
+ ui->apply_on->setCurrentIndex(2);
+ break;
+ }
+}
+
+void FilterRules::set_need_match_all(bool need_match_all)
+{
+ ui->need_match_all->setChecked(need_match_all);
+}
+
+void FilterRules::on_search_textChanged(const QString &arg1)
+{
+ Q_UNUSED(arg1);
+ updateChecking();
+}
+
+void FilterRules::updateChecking()
+{
+ QRegularExpression regex;
+ isValid=!ui->search->text().isEmpty();
+ if(isValid)
+ {
+ QString tempString;
+ if(ui->search_type->currentIndex()==0)
+ {
+ tempString=QRegularExpression::escape(ui->search->text());
+ if(tempString.contains('/') || tempString.contains('\\'))
+ isValid=false;
+ }
+ else if(ui->search_type->currentIndex()==1)
+ {
+ tempString=QRegularExpression::escape(ui->search->text());
+ tempString.replace(QStringLiteral("\\*"),QStringLiteral("[^\\\\/]*"));
+ }
+ else if(ui->search_type->currentIndex()==2)
+ {
+ tempString=ui->search->text();
+ if(tempString.startsWith('^') && tempString.endsWith('$'))
+ {
+ ui->need_match_all->setChecked(true);
+ tempString.remove(QRegularExpression(QStringLiteral("^\\^")));
+ tempString.remove(QRegularExpression(QStringLiteral("\\$$")));
+ ui->search->setText(tempString);
+ }
+ }
+ if(isValid)
+ {
+ if(ui->need_match_all->isChecked())
+ tempString=QStringLiteral("^")+tempString+QStringLiteral("$");
+ regex=QRegularExpression(tempString);
+ isValid=regex.isValid();
+ }
+ }
+
+ ui->isValid->setChecked(isValid);
+ ui->testString->setEnabled(isValid);
+ ui->label_test_string->setEnabled(isValid);
+ ui->matched->setEnabled(isValid);
+ ui->matched->setChecked(isValid && ui->testString->text().contains(regex));
+ ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(isValid);
+}
+
+void FilterRules::on_isValid_clicked()
+{
+ updateChecking();
+}
+
+void FilterRules::on_testString_textChanged(const QString &arg1)
+{
+ Q_UNUSED(arg1);
+ updateChecking();
+}
+
+void FilterRules::on_matched_clicked()
+{
+ updateChecking();
+}
+
+void FilterRules::on_search_type_currentIndexChanged(int index)
+{
+ Q_UNUSED(index);
+ updateChecking();
+}
+
+void FilterRules::on_need_match_all_clicked()
+{
+ updateChecking();
+}
+
+void FilterRules::on_buttonBox_clicked(QAbstractButton *button)
+{
+ if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::RejectRole)
+ reject();
+ else
+ {
+ haveBeenValided=true;
+ accept();
+ }
+}
diff --git a/plugins/CopyEngine/Ultracopier/FilterRules.h b/plugins/CopyEngine/Ultracopier/FilterRules.h
new file mode 100644
index 0000000..f06f0cb
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/FilterRules.h
@@ -0,0 +1,46 @@
+#ifndef FILTERRULES_H
+#define FILTERRULES_H
+
+#include <QDialog>
+#include <QAbstractButton>
+#include <QPushButton>
+
+#include "StructEnumDefinition_CopyEngine.h"
+
+namespace Ui {
+class FilterRules;
+}
+
+/** All the filter rules to include/exclude some file during the listing */
+class FilterRules : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit FilterRules(QWidget *parent = 0);
+ ~FilterRules();
+ bool getIsValid();
+ QString get_search_text();
+ SearchType get_search_type();
+ ApplyOn get_apply_on();
+ bool get_need_match_all();
+ void set_search_text(QString search_text);
+ void set_search_type(SearchType search_type);
+ void set_apply_on(ApplyOn apply_on);
+ void set_need_match_all(bool need_match_all);
+private slots:
+ void on_search_textChanged(const QString &arg1);
+ void on_isValid_clicked();
+ void on_testString_textChanged(const QString &arg1);
+ void on_matched_clicked();
+ void on_search_type_currentIndexChanged(int index);
+ void on_need_match_all_clicked();
+ void on_buttonBox_clicked(QAbstractButton *button);
+private:
+ Ui::FilterRules *ui;
+ void updateChecking();
+ bool isValid;
+ bool haveBeenValided;
+};
+
+#endif // FILTERRULES_H
diff --git a/plugins/CopyEngine/Ultracopier/FilterRules.ui b/plugins/CopyEngine/Ultracopier/FilterRules.ui
new file mode 100644
index 0000000..a4006fe
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/FilterRules.ui
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>FilterRules</class>
+ <widget class="QDialog" name="FilterRules">
+ <property name="windowModality">
+ <enum>Qt::WindowModal</enum>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>289</width>
+ <height>231</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Filters dialog</string>
+ </property>
+ <property name="windowIcon">
+ <iconset resource="copyEngineResources.qrc">
+ <normaloff>:/CopyEngine/resources/resources/filter.png</normaloff>:/CopyEngine/resources/resources/filter.png</iconset>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <property name="margin">
+ <number>1</number>
+ </property>
+ <property name="spacing">
+ <number>1</number>
+ </property>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Search:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="search"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Search type:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QComboBox" name="search_type">
+ <item>
+ <property name="text">
+ <string>Raw text</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Simplified regex</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Perl's regex</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>Apply on:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QComboBox" name="apply_on">
+ <item>
+ <property name="text">
+ <string>File</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Folder</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>File and folder</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="3" column="0" colspan="2">
+ <widget class="QCheckBox" name="need_match_all">
+ <property name="text">
+ <string>Whole string must match</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="0" colspan="2">
+ <widget class="QGroupBox" name="groupBoxChecking">
+ <property name="title">
+ <string>Checking</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0" colspan="2">
+ <widget class="QCheckBox" name="isValid">
+ <property name="text">
+ <string>The regex is valid</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_test_string">
+ <property name="text">
+ <string>Test string:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLineEdit" name="testString"/>
+ </item>
+ <item row="2" column="0" colspan="2">
+ <widget class="QCheckBox" name="matched">
+ <property name="text">
+ <string>The test string matches with the regex</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="5" column="0" colspan="2">
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>68</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <resources>
+ <include location="copyEngineResources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/plugins/CopyEngine/Ultracopier/Filters.cpp b/plugins/CopyEngine/Ultracopier/Filters.cpp
new file mode 100644
index 0000000..3bb81d1
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Filters.cpp
@@ -0,0 +1,457 @@
+#include "Filters.h"
+#include "ui_Filters.h"
+
+#include <QRegularExpression>
+
+Filters::Filters(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::Filters)
+{
+ ui->setupUi(this);
+}
+
+Filters::~Filters()
+{
+ delete ui;
+}
+
+void Filters::setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions)
+{
+ if(includeStrings.size()!=includeOptions.size() || excludeStrings.size()!=excludeOptions.size())
+ return;
+ Filters_rules new_item;
+
+ include.clear();
+ int index=0;
+ while(index<includeStrings.size())
+ {
+ new_item.search_text=includeStrings.at(index);
+ QStringList options=includeOptions.at(index).split(QStringLiteral(";"));
+ new_item.need_match_all=false;
+ new_item.search_type=SearchType_rawText;
+ new_item.apply_on=ApplyOn_fileAndFolder;
+
+ if(options.contains(QStringLiteral("SearchType_simpleRegex")))
+ new_item.search_type=SearchType_simpleRegex;
+ if(options.contains(QStringLiteral("SearchType_perlRegex")))
+ new_item.search_type=SearchType_perlRegex;
+ if(options.contains(QStringLiteral("ApplyOn_file")))
+ new_item.apply_on=ApplyOn_file;
+ if(options.contains(QStringLiteral("ApplyOn_folder")))
+ new_item.apply_on=ApplyOn_folder;
+ if(options.contains(QStringLiteral("need_match_all")))
+ new_item.need_match_all=true;
+
+ if(convertToRegex(new_item))
+ include << new_item;
+
+ index++;
+ }
+
+ exclude.clear();
+ index=0;
+ while(index<excludeStrings.size())
+ {
+ new_item.search_text=excludeStrings.at(index);
+ QStringList options=excludeOptions.at(index).split(QStringLiteral(";"));
+ new_item.need_match_all=false;
+ new_item.search_type=SearchType_rawText;
+ new_item.apply_on=ApplyOn_fileAndFolder;
+
+ if(options.contains(QStringLiteral("SearchType_simpleRegex")))
+ new_item.search_type=SearchType_simpleRegex;
+ if(options.contains(QStringLiteral("SearchType_perlRegex")))
+ new_item.search_type=SearchType_perlRegex;
+ if(options.contains(QStringLiteral("ApplyOn_file")))
+ new_item.apply_on=ApplyOn_file;
+ if(options.contains(QStringLiteral("ApplyOn_folder")))
+ new_item.apply_on=ApplyOn_folder;
+ if(options.contains(QStringLiteral("need_match_all")))
+ new_item.need_match_all=true;
+
+ if(convertToRegex(new_item))
+ exclude << new_item;
+
+ index++;
+ }
+
+ reShowAll();
+}
+
+void Filters::reShowAll()
+{
+ ui->inclusion->clear();
+ int index=0;
+ while(index<include.size())
+ {
+ QString entryShow=include.at(index).search_text+QStringLiteral(" (");
+ QStringList optionsToShow;
+ switch(include.at(index).search_type)
+ {
+ case SearchType_rawText:
+ optionsToShow << tr("Raw text");
+ break;
+ case SearchType_simpleRegex:
+ optionsToShow << tr("Simplified regex");
+ break;
+ case SearchType_perlRegex:
+ optionsToShow << tr("Perl's regex");
+ break;
+ default:
+ break;
+ }
+ switch(include.at(index).apply_on)
+ {
+ case ApplyOn_file:
+ optionsToShow << tr("Only on file");
+ break;
+ case ApplyOn_folder:
+ optionsToShow << tr("Only on folder");
+ break;
+ default:
+ break;
+ }
+ if(include.at(index).need_match_all)
+ optionsToShow << tr("Full match");
+ entryShow+=optionsToShow.join(QStringLiteral(","));
+ entryShow+=")";
+ ui->inclusion->addItem(new QListWidgetItem(entryShow));
+ index++;
+ }
+ ui->exclusion->clear();
+ index=0;
+ while(index<exclude.size())
+ {
+ QString entryShow=exclude.at(index).search_text+QStringLiteral(" (");
+ QStringList optionsToShow;
+ switch(exclude.at(index).search_type)
+ {
+ case SearchType_rawText:
+ optionsToShow << tr("Raw text");
+ break;
+ case SearchType_simpleRegex:
+ optionsToShow << tr("Simplified regex");
+ break;
+ case SearchType_perlRegex:
+ optionsToShow << tr("Perl's regex");
+ break;
+ default:
+ break;
+ }
+ switch(exclude.at(index).apply_on)
+ {
+ case ApplyOn_file:
+ optionsToShow << tr("Only on file");
+ break;
+ case ApplyOn_folder:
+ optionsToShow << tr("Only on folder");
+ break;
+ default:
+ break;
+ }
+ if(exclude.at(index).need_match_all)
+ optionsToShow << tr("Full match");
+ entryShow+=optionsToShow.join(QStringLiteral(","));
+ entryShow+=")";
+ ui->exclusion->addItem(new QListWidgetItem(entryShow));
+ index++;
+ }
+}
+
+QList<Filters_rules> Filters::getInclude() const
+{
+ return include;
+}
+
+QList<Filters_rules> Filters::getExclude() const
+{
+ return exclude;
+}
+
+void Filters::newLanguageLoaded()
+{
+ ui->retranslateUi(this);
+ reShowAll();
+}
+
+void Filters::updateFilters()
+{
+ QStringList includeStrings,includeOptions,excludeStrings,excludeOptions;
+ int index=0;
+ while(index<include.size())
+ {
+ includeStrings<<include.at(index).search_text;
+ QStringList optionsToShow;
+
+ switch(include.at(index).search_type)
+ {
+ case SearchType_rawText:
+ optionsToShow << QStringLiteral("SearchType_rawText");
+ break;
+ case SearchType_simpleRegex:
+ optionsToShow << QStringLiteral("SearchType_simpleRegex");
+ break;
+ case SearchType_perlRegex:
+ optionsToShow << QStringLiteral("SearchType_perlRegex");
+ break;
+ default:
+ break;
+ }
+ switch(include.at(index).apply_on)
+ {
+ case ApplyOn_file:
+ optionsToShow << QStringLiteral("ApplyOn_file");
+ break;
+ case ApplyOn_fileAndFolder:
+ optionsToShow << QStringLiteral("ApplyOn_fileAndFolder");
+ break;
+ case ApplyOn_folder:
+ optionsToShow << QStringLiteral("ApplyOn_folder");
+ break;
+ default:
+ break;
+ }
+ if(include.at(index).need_match_all)
+ optionsToShow << tr("Full match");
+ includeOptions<<optionsToShow.join(QStringLiteral(";"));
+ index++;
+ }
+ index=0;
+ while(index<exclude.size())
+ {
+ excludeStrings<<exclude.at(index).search_text;
+ QStringList optionsToShow;
+
+ switch(exclude.at(index).search_type)
+ {
+ case SearchType_rawText:
+ optionsToShow << QStringLiteral("SearchType_rawText");
+ break;
+ case SearchType_simpleRegex:
+ optionsToShow << QStringLiteral("SearchType_simpleRegex");
+ break;
+ case SearchType_perlRegex:
+ optionsToShow << QStringLiteral("SearchType_perlRegex");
+ break;
+ default:
+ break;
+ }
+ switch(exclude.at(index).apply_on)
+ {
+ case ApplyOn_file:
+ optionsToShow << QStringLiteral("ApplyOn_file");
+ break;
+ case ApplyOn_fileAndFolder:
+ optionsToShow << QStringLiteral("ApplyOn_fileAndFolder");
+ break;
+ case ApplyOn_folder:
+ optionsToShow << QStringLiteral("ApplyOn_folder");
+ break;
+ default:
+ break;
+ }
+ if(exclude.at(index).need_match_all)
+ optionsToShow << tr("Full match");
+ excludeOptions<<optionsToShow.join(QStringLiteral(";"));
+ index++;
+ }
+ emit sendNewFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
+ emit haveNewFilters();
+}
+
+bool Filters::convertToRegex(Filters_rules &item)
+{
+ bool isValid=!item.search_text.isEmpty();
+ if(isValid)
+ {
+ QRegularExpression regex;
+ QString tempString;
+ if(item.search_type==SearchType_rawText)
+ {
+ tempString=QRegularExpression::escape(item.search_text);
+ if(tempString.contains('/') || tempString.contains('\\'))
+ isValid=false;
+ }
+ else if(item.search_type==SearchType_simpleRegex)
+ {
+ tempString=QRegularExpression::escape(item.search_text);
+ tempString.replace(QStringLiteral("\\*"),QStringLiteral("[^\\\\/]*"));
+ }
+ else if(item.search_type==SearchType_perlRegex)
+ {
+ tempString=item.search_text;
+ if(tempString.startsWith('^') && tempString.endsWith('$'))
+ {
+ item.need_match_all=true;
+ tempString.remove(QRegularExpression("^\\^"));
+ tempString.remove(QRegularExpression("\\$$"));
+ item.search_text=tempString;
+ }
+ }
+ if(isValid)
+ {
+ if(item.need_match_all==true)
+ tempString=QStringLiteral("^")+tempString+QStringLiteral("$");
+ regex=QRegularExpression(tempString);
+ //isValid=regex.isValid();
+ item.regex=regex;
+ return true;
+ }
+ else
+ return false;
+ }
+ return false;
+}
+
+void Filters::on_remove_exclusion_clicked()
+{
+ bool removedEntry=false;
+ int index=0;
+ while(index<ui->exclusion->count())
+ {
+ if(ui->exclusion->item(index)->isSelected())
+ {
+ delete ui->exclusion->item(index);
+ exclude.removeAt(index);
+ removedEntry=true;
+ }
+ else
+ index++;
+ }
+ if(removedEntry)
+ {
+ reShowAll();
+ updateFilters();
+ }
+}
+
+void Filters::on_remove_inclusion_clicked()
+{
+ bool removedEntry=false;
+ int index=0;
+ while(index<ui->inclusion->count())
+ {
+ if(ui->inclusion->item(index)->isSelected())
+ {
+ delete ui->inclusion->item(index);
+ include.removeAt(index);
+ removedEntry=true;
+ }
+ else
+ index++;
+ }
+ if(removedEntry)
+ {
+ reShowAll();
+ updateFilters();
+ }
+}
+
+void Filters::on_add_exclusion_clicked()
+{
+ FilterRules dialog(this);
+ dialog.exec();
+ if(dialog.getIsValid())
+ {
+ Filters_rules new_item;
+ new_item.apply_on=dialog.get_apply_on();
+ new_item.need_match_all=dialog.get_need_match_all();
+ new_item.search_text=dialog.get_search_text();
+ new_item.search_type=dialog.get_search_type();
+ exclude << new_item;
+ reShowAll();
+ updateFilters();
+ }
+}
+
+void Filters::on_buttonBox_clicked(QAbstractButton *button)
+{
+ if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::RejectRole)
+ reject();
+}
+
+void Filters::on_add_inclusion_clicked()
+{
+ FilterRules dialog(this);
+ dialog.exec();
+ if(dialog.getIsValid())
+ {
+ Filters_rules new_item;
+ new_item.apply_on=dialog.get_apply_on();
+ new_item.need_match_all=dialog.get_need_match_all();
+ new_item.search_text=dialog.get_search_text();
+ new_item.search_type=dialog.get_search_type();
+ if(convertToRegex(new_item))
+ include << new_item;
+ reShowAll();
+ updateFilters();
+ }
+}
+
+void Filters::on_edit_exclusion_clicked()
+{
+ bool editedEntry=false;
+ int index=0;
+ while(index<ui->exclusion->count())
+ {
+ if(ui->exclusion->item(index)->isSelected())
+ {
+ FilterRules dialog(this);
+ dialog.set_apply_on(exclude.at(index).apply_on);
+ dialog.set_need_match_all(exclude.at(index).need_match_all);
+ dialog.set_search_text(exclude.at(index).search_text);
+ dialog.set_search_type(exclude.at(index).search_type);
+ dialog.exec();
+ if(dialog.getIsValid())
+ {
+ exclude[index].apply_on=dialog.get_apply_on();
+ exclude[index].need_match_all=dialog.get_need_match_all();
+ exclude[index].search_text=dialog.get_search_text();
+ exclude[index].search_type=dialog.get_search_type();
+ if(!convertToRegex(exclude[index]))
+ exclude.removeAt(index);
+ editedEntry=true;
+ }
+ }
+ index++;
+ }
+ if(editedEntry)
+ {
+ reShowAll();
+ updateFilters();
+ }
+}
+
+void Filters::on_edit_inclusion_clicked()
+{
+ bool editedEntry=false;
+ int index=0;
+ while(index<ui->inclusion->count())
+ {
+ if(ui->inclusion->item(index)->isSelected())
+ {
+ FilterRules dialog(this);
+ dialog.set_apply_on(exclude.at(index).apply_on);
+ dialog.set_need_match_all(exclude.at(index).need_match_all);
+ dialog.set_search_text(exclude.at(index).search_text);
+ dialog.set_search_type(exclude.at(index).search_type);
+ dialog.exec();
+ if(dialog.getIsValid())
+ {
+ exclude[index].apply_on=dialog.get_apply_on();
+ exclude[index].need_match_all=dialog.get_need_match_all();
+ exclude[index].search_text=dialog.get_search_text();
+ exclude[index].search_type=dialog.get_search_type();
+ if(!convertToRegex(exclude[index]))
+ exclude.removeAt(index);
+ editedEntry=true;
+ }
+ }
+ index++;
+ }
+ if(editedEntry)
+ {
+ reShowAll();
+ updateFilters();
+ }
+}
diff --git a/plugins/CopyEngine/Ultracopier/Filters.h b/plugins/CopyEngine/Ultracopier/Filters.h
new file mode 100644
index 0000000..337f8cb
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Filters.h
@@ -0,0 +1,45 @@
+#ifndef FILTERS_H
+#define FILTERS_H
+
+#include <QDialog>
+#include <QStringList>
+
+#include "FilterRules.h"
+#include "StructEnumDefinition_CopyEngine.h"
+
+namespace Ui {
+class Filters;
+}
+
+/** To add/edit one filter rules */
+class Filters : public QDialog
+{
+ Q_OBJECT
+public:
+ explicit Filters(QWidget *parent = 0);
+ ~Filters();
+ void setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions);
+ void reShowAll();
+ QList<Filters_rules> getInclude() const;
+ QList<Filters_rules> getExclude() const;
+ void newLanguageLoaded();
+private:
+ Ui::Filters *ui;
+ QList<Filters_rules> include;
+ QList<Filters_rules> exclude;
+ void updateFilters();
+ bool convertToRegex(Filters_rules &item);
+signals:
+ void sendNewFilters(const QStringList &includeStrings,const QStringList &includeOptions,const QStringList &excludeStrings,const QStringList &excludeOptions) const;
+ void haveNewFilters() const;
+private slots:
+ void on_remove_exclusion_clicked();
+ void on_remove_inclusion_clicked();
+ void on_add_exclusion_clicked();
+ void on_buttonBox_clicked(QAbstractButton *button);
+ void on_add_inclusion_clicked();
+ void on_edit_exclusion_clicked();
+ void on_edit_inclusion_clicked();
+};
+
+#endif // FILTERS_H
diff --git a/plugins/CopyEngine/Ultracopier/Filters.ui b/plugins/CopyEngine/Ultracopier/Filters.ui
new file mode 100644
index 0000000..33822af
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Filters.ui
@@ -0,0 +1,194 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Filters</class>
+ <widget class="QDialog" name="Filters">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>507</width>
+ <height>502</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Filters</string>
+ </property>
+ <property name="windowIcon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/CopyEngine/Ultracopier/resources/filter.png</normaloff>:/CopyEngine/Ultracopier/resources/filter.png</iconset>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <property name="spacing">
+ <number>1</number>
+ </property>
+ <property name="margin">
+ <number>1</number>
+ </property>
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string>Exclusion filters</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <property name="spacing">
+ <number>1</number>
+ </property>
+ <property name="margin">
+ <number>2</number>
+ </property>
+ <item>
+ <widget class="QListWidget" name="exclusion">
+ <property name="selectionMode">
+ <enum>QAbstractItemView::MultiSelection</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <widget class="QToolButton" name="add_exclusion">
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/CopyEngine/Ultracopier/resources/add.png</normaloff>:/CopyEngine/Ultracopier/resources/add.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="edit_exclusion">
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/CopyEngine/Ultracopier/resources/edit.png</normaloff>:/CopyEngine/Ultracopier/resources/edit.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="remove_exclusion">
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/CopyEngine/Ultracopier/resources/remove.png</normaloff>:/CopyEngine/Ultracopier/resources/remove.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox_2">
+ <property name="title">
+ <string>Inclusion filters</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_4">
+ <property name="spacing">
+ <number>1</number>
+ </property>
+ <property name="margin">
+ <number>2</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>None = Include all</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QListWidget" name="inclusion">
+ <property name="selectionMode">
+ <enum>QAbstractItemView::MultiSelection</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <item>
+ <widget class="QToolButton" name="add_inclusion">
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/CopyEngine/Ultracopier/resources/add.png</normaloff>:/CopyEngine/Ultracopier/resources/add.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="edit_inclusion">
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/CopyEngine/Ultracopier/resources/edit.png</normaloff>:/CopyEngine/Ultracopier/resources/edit.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="remove_inclusion">
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/CopyEngine/Ultracopier/resources/remove.png</normaloff>:/CopyEngine/Ultracopier/resources/remove.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <resources>
+ <include location="resources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/plugins/CopyEngine/Ultracopier/FolderExistsDialog.cpp b/plugins/CopyEngine/Ultracopier/FolderExistsDialog.cpp
new file mode 100644
index 0000000..ac1e74e
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/FolderExistsDialog.cpp
@@ -0,0 +1,199 @@
+#include "FolderExistsDialog.h"
+#include "ui_folderExistsDialog.h"
+#include "TransferThread.h"
+
+#include <QMessageBox>
+#include <QFileInfo>
+#include <QMessageBox>
+
+FolderExistsDialog::FolderExistsDialog(QWidget *parent,QFileInfo source,bool isSame,QFileInfo destination,QString firstRenamingRule,QString otherRenamingRule) :
+ QDialog(parent),
+ ui(new Ui::folderExistsDialog)
+{
+ Qt::WindowFlags flags = windowFlags();
+ #ifdef Q_OS_LINUX
+ flags=flags & ~Qt::X11BypassWindowManagerHint;
+ #endif
+ flags=flags | Qt::WindowStaysOnTopHint;
+ setWindowFlags(flags);
+
+ ui->setupUi(this);
+ action=FolderExists_Cancel;
+ oldName=TransferThread::resolvedName(destination);
+ ui->lineEditNewName->setText(oldName);
+ ui->lineEditNewName->setPlaceholderText(oldName);
+ ui->label_content_source_modified->setText(source.lastModified().toString());
+ ui->label_content_source_folder_name->setText(source.fileName());
+ QString folder=source.absolutePath();
+ if(folder.size()>80)
+ folder=folder.mid(0,38)+"..."+folder.mid(folder.size()-38);
+ ui->label_content_source_folder->setText(folder);
+ if(ui->label_content_source_folder_name->text().isEmpty())
+ {
+ ui->label_source_folder_name->hide();
+ ui->label_content_source_folder_name->hide();
+ }
+ if(isSame)
+ {
+ this->destinationInfo=source;
+ ui->label_source->hide();
+ ui->label_destination->hide();
+ ui->label_destination_modified->hide();
+ ui->label_destination_folder_name->hide();
+ ui->label_destination_folder->hide();
+ ui->label_content_destination_modified->hide();
+ ui->label_content_destination_folder_name->hide();
+ ui->label_content_destination_folder->hide();
+ }
+ else
+ {
+ this->destinationInfo=destination;
+ this->setWindowTitle(tr("Folder already exists"));
+ ui->label_content_destination_modified->setText(destination.lastModified().toString());
+ ui->label_content_destination_folder_name->setText(destination.fileName());
+ QString folder=destination.absolutePath();
+ if(folder.size()>80)
+ folder=folder.mid(0,38)+"..."+folder.mid(folder.size()-38);
+ ui->label_content_destination_folder->setText(folder);
+ if(ui->label_content_destination_folder_name->text().isEmpty())
+ {
+ ui->label_destination_folder_name->hide();
+ ui->label_content_destination_folder_name->hide();
+ }
+ }
+ this->firstRenamingRule=firstRenamingRule;
+ this->otherRenamingRule=otherRenamingRule;
+ on_SuggestNewName_clicked();
+}
+
+FolderExistsDialog::~FolderExistsDialog()
+{
+ delete ui;
+}
+
+void FolderExistsDialog::changeEvent(QEvent *e)
+{
+ QDialog::changeEvent(e);
+ switch (e->type()) {
+ case QEvent::LanguageChange:
+ ui->retranslateUi(this);
+ break;
+ default:
+ break;
+ }
+}
+
+QString FolderExistsDialog::getNewName()
+{
+ if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked())
+ return "";
+ else
+ return ui->lineEditNewName->text();
+}
+
+void FolderExistsDialog::on_SuggestNewName_clicked()
+{
+ QFileInfo destinationInfo=this->destinationInfo;
+ QString absolutePath=destinationInfo.absolutePath();
+ QString fileName=TransferThread::resolvedName(destinationInfo);
+ QString suffix=QStringLiteral("");
+ QString destination;
+ QString newFileName;
+ //resolv the suffix
+ if(fileName.contains(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$"))))
+ {
+ suffix=fileName;
+ suffix.replace(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$")),QStringLiteral("\\2"));
+ fileName.replace(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$")),QStringLiteral("\\1"));
+ }
+ //resolv the new name
+ int num=1;
+ do
+ {
+ if(num==1)
+ {
+ if(firstRenamingRule.isEmpty())
+ newFileName=tr("%1 - copy").arg(fileName);
+ else
+ {
+ newFileName=firstRenamingRule;
+ newFileName.replace(QStringLiteral("%name%"),fileName);
+ }
+ }
+ else
+ {
+ if(otherRenamingRule.isEmpty())
+ newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num);
+ else
+ {
+ newFileName=otherRenamingRule;
+ newFileName.replace(QStringLiteral("%name%"),fileName);
+ newFileName.replace(QStringLiteral("%number%"),QString::number(num));
+ }
+ }
+ destination=absolutePath+QDir::separator()+newFileName+suffix;
+ destinationInfo.setFile(destination);
+ num++;
+ }
+ while(destinationInfo.exists());
+ ui->lineEditNewName->setText(newFileName+suffix);
+}
+
+void FolderExistsDialog::on_Rename_clicked()
+{
+ action=FolderExists_Rename;
+ this->close();
+}
+
+void FolderExistsDialog::on_Skip_clicked()
+{
+ action=FolderExists_Skip;
+ this->close();
+}
+
+void FolderExistsDialog::on_Cancel_clicked()
+{
+ action=FolderExists_Cancel;
+ this->close();
+}
+
+FolderExistsAction FolderExistsDialog::getAction()
+{
+ return action;
+}
+
+bool FolderExistsDialog::getAlways()
+{
+ return ui->checkBoxAlways->isChecked();
+}
+
+void FolderExistsDialog::on_Merge_clicked()
+{
+ action=FolderExists_Merge;
+ this->close();
+}
+
+void FolderExistsDialog::on_lineEditNewName_editingFinished()
+{
+ updateRenameButton();
+}
+
+void FolderExistsDialog::on_lineEditNewName_returnPressed()
+{
+ updateRenameButton();
+ if(ui->Rename->isEnabled())
+ on_Rename_clicked();
+ else
+ QMessageBox::warning(this,tr("Error"),tr("Try rename with using special characters"));
+}
+
+void FolderExistsDialog::on_lineEditNewName_textChanged(const QString &arg1)
+{
+ Q_UNUSED(arg1);
+ updateRenameButton();
+}
+
+void FolderExistsDialog::updateRenameButton()
+{
+ ui->Rename->setEnabled(ui->checkBoxAlways->isChecked() || (!ui->lineEditNewName->text().contains(QRegularExpression("[/\\\\\\*]")) && oldName!=ui->lineEditNewName->text() && !ui->lineEditNewName->text().isEmpty()));
+}
diff --git a/plugins/CopyEngine/Ultracopier/FolderExistsDialog.h b/plugins/CopyEngine/Ultracopier/FolderExistsDialog.h
new file mode 100644
index 0000000..c043f65
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/FolderExistsDialog.h
@@ -0,0 +1,57 @@
+/** \file folderExistsDialog.h
+\brief Define the dialog when file exists
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef FOLDERISSAMEDIALOG_H
+#define FOLDERISSAMEDIALOG_H
+
+#include <QDialog>
+#include <QFileInfo>
+#include <QString>
+#include <QDateTime>
+#include <QDir>
+
+#include "Environment.h"
+
+namespace Ui {
+ class folderExistsDialog;
+}
+
+/// \brief to show file exists dialog, and ask what do
+class FolderExistsDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ /// \brief create the object and pass all the informations to it
+ explicit FolderExistsDialog(QWidget *parent,QFileInfo source,bool isSame,QFileInfo destination,QString firstRenamingRule,QString otherRenamingRule);
+ ~FolderExistsDialog();
+ /// \brief return the the always checkbox is checked
+ bool getAlways();
+ /// \brief return the action clicked
+ FolderExistsAction getAction();
+ /// \brief return the new rename is case in manual renaming
+ QString getNewName();
+protected:
+ void changeEvent(QEvent *e);
+private slots:
+ void updateRenameButton();
+ void on_SuggestNewName_clicked();
+ void on_Rename_clicked();
+ void on_Skip_clicked();
+ void on_Cancel_clicked();
+ void on_Merge_clicked();
+ void on_lineEditNewName_editingFinished();
+ void on_lineEditNewName_returnPressed();
+ void on_lineEditNewName_textChanged(const QString &arg1);
+private:
+ Ui::folderExistsDialog *ui;
+ FolderExistsAction action;
+ QString oldName;
+ QString firstRenamingRule;
+ QString otherRenamingRule;
+ QFileInfo destinationInfo;
+};
+
+#endif // FOLDERISSAMEDIALOG_H
diff --git a/plugins/CopyEngine/Ultracopier/Languages/ar/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/ar/translation.ts
new file mode 100644
index 0000000..3362659
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/ar/translation.ts
@@ -0,0 +1,1289 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="80"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="268"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="671"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="696"/>
+ <source>File truncated during read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngineOptions</name>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="35"/>
+ <source>Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="44"/>
+ <source>Move the whole folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="51"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="61"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="74"/>
+ <source>Autostart the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="81"/>
+ <location filename="../../copyEngineOptions.ui" line="101"/>
+ <source>Less performance if checked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="104"/>
+ <source>Follow the strict order</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="130"/>
+ <source>Error and collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="136"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="146"/>
+ <source>When file error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="172"/>
+ <source>When file collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="232"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="263"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="270"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="290"/>
+ <source>Delete partially transferred files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="303"/>
+ <source>Rename the original destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="334"/>
+ <source>Control</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="340"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="356"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="373"/>
+ <source>Verify checksums</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="405"/>
+ <source>Performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="411"/>
+ <source>Parallel buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="418"/>
+ <location filename="../../copyEngineOptions.ui" line="431"/>
+ <location filename="../../copyEngineOptions.ui" line="444"/>
+ <location filename="../../copyEngineOptions.ui" line="481"/>
+ <location filename="../../copyEngineOptions.ui" line="550"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="460"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="467"/>
+ <source>Sequential buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="474"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="497"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="504"/>
+ <source>Transfer algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="543"/>
+ <source>Parallelize if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="573"/>
+ <source>Inode threads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="580"/>
+ <location filename="../../copyEngineOptions.ui" line="590"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="593"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="609"/>
+ <source>Misc</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="615"/>
+ <source>Check the disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="625"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="637"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="659"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error with file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="59"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="76"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="93"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="110"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="127"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="173"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="193"/>
+ <source>Try in with elevated privileges</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="200"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="207"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="214"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="221"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="204"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="133"/>
+ <location filename="../../fileExistsDialog.ui" line="221"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="277"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="288"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="346"/>
+ <location filename="../../fileExistsDialog.ui" line="349"/>
+ <source>Overwrite if modification date differs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="308"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="315"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="325"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="332"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="341"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="354"/>
+ <location filename="../../fileExistsDialog.ui" line="357"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="40"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="110"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="70"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>The source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="90"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="159"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="170"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="190"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="197"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="204"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>The source and destination is identical</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="82"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="99"/>
+ <location filename="../../folderExistsDialog.ui" line="160"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="116"/>
+ <location filename="../../folderExistsDialog.ui" line="184"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="227"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="238"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="245"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="252"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="259"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="266"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier/Languages/de/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/de/translation.ts
new file mode 100644
index 0000000..2952152
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/de/translation.ts
@@ -0,0 +1,1294 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="de" sourcelanguage="en">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation>Auf dieser Plattform nicht unterstützt</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation>Datum der letzten Änderung ist falsch</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translatorcomment> </translatorcomment>
+ <translation>Datum des letzten Zugriffs ist falsch</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation>Unbekannter Fehler: %1</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation>Unbekannter Fehler</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation>Pfad Konvertierungsfehler</translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation>Verschiebemodus - Sie können nicht kopieren</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation>Kopiermodus - Sie können nicht verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation>Ziel</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation>Aktuelles Ziel: &quot;%1&quot; benutzen?</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation>Der Modus wurde vorher erzwungen. Interner Fehler - Bitte bei mir melden! </translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation>Fragen</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation>Überspringen</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation>Fusionieren</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation>Umbenennen</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation>Ans Ende verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation>Überschreiben</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation>Überschreiben, falls verschieden</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation>Überschreiben, falls neuer</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation>Überschreiben, falls älter</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation>Automatisch</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation>Sequentiell</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation>Parallel</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation>Fehlerhafte Optionen</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation>Optionen nicht geladen - Kein Zugriff auf Filter</translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation>Fragen</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation>Überspringen</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation>Fusionieren</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation>Umbenennen</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation>Ans Ende verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation>Überschreiben</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation>Überschreiben, falls verschieden</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation>Überschreiben, falls neuer</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation>Überschreiben, falls älter</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation>Automatisch</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation>Sequentiell</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation>Parallel</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation>Fehlerhafte Optionen</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation>Option nicht geladen - Kein Zugriff auf Filter</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation>Option nicht geladen - Kann nicht auf Filter zugreifen</translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation>Speicherplatz</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation>Zu wenig Speicherplatz auf diesem Laufwerk</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation>Fortsetzen</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation>Abbrechen</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation>Laufwerk %1: %2 verfügbar %3 benötigt</translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation>Ordnerfehler</translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation>Ordnername</translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation>%1 - Kopie</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - Kopie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation>Versuche Umbenennung mit Sonderzeichen</translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation>%1 - kopieren</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - kopieren (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation>Versuche Umbenennung mit Sonderzeichen</translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation>Suche:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation>Suche (Typ):</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation>Roh-Text</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation>Vereinfachte RegEx</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation>Perls RegEx</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation>Anwenden auf:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation>Datei</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation>Ordner</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation>Datei und Ordner</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation>Die Test-Zeichenfolge stimmt mit RegEx überein</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation>Überprüfen</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation>Test-Zeichenfolge:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation>Filter-Dialog</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation>Ganze Zeichenfolge muss übereinstimmen</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation>Die RegEx ist gültig</translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation>Filter</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation>Ausschließungs-Filter</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation>Einschließungs-Filter</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation>Keiner = Alle einschließen</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation>Roh-Text</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation>Vereinfachte RegEx</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation>Perls RegEx</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation>Nur auf Datei</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation>Nur auf Ordner</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation>Volle Übereinstimmung</translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation>Ordner existiert bereits</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation>%1 - Kopie</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - Kopie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation>Versuche Umbenennung mit Sonderzeichen</translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation>Falscher Modus: %1 - Kann Element nicht verschieben oder kopieren</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation>Konnte die Transferliste: %1 nicht speichern</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation>Lesefehler, oder Dateigröße=0</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation>Falscher Header: &quot;%1&quot;</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation>Die Transferliste ist im gemischten Modus, aber diese Instanz ist nicht im selben Modus</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation>Die Transferliste ist im Kopiermodus, aber diese Instanz ist nicht im selben Modus</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation>Die Transferliste ist im Verschiebe-Modus, aber diese Instanz ist nicht im selben Modus</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation>Bei der Zeilenanalyse sind Fehler aufgetreten</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation>Transferliste: %1 kann nicht geöffnet werden</translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation>Der Ordner kann nicht erstellt werden</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation>Quell-Ordner existiert nicht</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation>Kann den Ordner nicht temporär umbenennen</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation>Kann den Ordner nicht endgültig verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation>Kann den Ordner nicht verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation>Kann nicht löschen</translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation>Interner Fehler - Bitte bei mir melden!</translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation>Interner Fehler beim Lesen der Quelldatei: Blockgröße außerhalb des zulässigen Bereichs</translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation>Die Quelldatei kann nicht gelesen werden: </translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation>Datei während des Lesevorgangs abgeschnitten, Daten wurden möglicherweise verändert</translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation>Erste Umbenennung</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation>%name% - Kopie</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variablen: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; für den ursprünglichen Dateinamen&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation>Zweite Umbenennung</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation>%name% - Kopie (%number%)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variablen: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; für den ursprünglichen Dateinamen&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; für die zusätzliche Zahl&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation>%1 - Kopie</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - Kopie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation>Umbennungsregeln</translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation>Ordner der schwarzen Liste</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation>%1 - Kopie</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - Kopie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation>Dies ist kein Ordner</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation>Ordner existiert bereits</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation>Der Ordner kann nicht gelesen werden</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation>Problem mit der Namen-Encodierung</translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation>Datei nicht gefunden</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished">Interner Fehler: Bereits geöffnet</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation type="unfinished">Laufwerk %1</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished">Unbekannter Ordner</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation type="unfinished">Stammverzeichnis</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished">%1 - Kopie</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished">%1 - Kopie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished">Quelle existiert nicht</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished">Quelldatei existiert nicht</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished">Prüfsummen sind verschieden</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished">Interner Fehler: Ubertragene Größe ungleich</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished">Ordner kann nicht erstellt werden</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation>Versuche Umbenennung mit Sonderzeichen</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished">Andere Datei befindet sich am selben Ort</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished">Interner Fehler: Ziel ist nicht geschlossen</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished">Interner Fehler: Puffer ist nicht leer</translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="80"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation>Pfad-Auflösungsfehler (leerer Pfad)</translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="268"/>
+ <source>Internal error, please report it!</source>
+ <translation>Interner Fehler - Bitte bei mir melden!</translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="671"/>
+ <source>Unable to read the source file: </source>
+ <translation>Quelldatei kann nicht gelesen werden: </translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="696"/>
+ <source>File truncated during read, possible data change</source>
+ <translation>Datenabbruch beim Lesen, Daten wurden möglicherweise verändert</translation>
+ </message>
+</context>
+<context>
+ <name>copyEngineOptions</name>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="35"/>
+ <source>Transfer</source>
+ <translation>Übertragung</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="44"/>
+ <source>Move the whole folder</source>
+ <translation>Verschiebe den ganzen Ordner</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="51"/>
+ <source>Transfer the file rights</source>
+ <translation>Übertrage die Dateirechte</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="61"/>
+ <source>Keep the file date</source>
+ <translation>Datum der Dateien beibehalten</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="74"/>
+ <source>Autostart the transfer</source>
+ <translation>Übertragung automatisch starten</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="81"/>
+ <location filename="../../copyEngineOptions.ui" line="101"/>
+ <source>Less performance if checked</source>
+ <translation>Leistung drosseln</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="104"/>
+ <source>Follow the strict order</source>
+ <translation>Genau nach Reihenfolge</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="130"/>
+ <source>Error and collision</source>
+ <translation>Fehler und Kollision</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="136"/>
+ <source>When folder error</source>
+ <translation>Bei Ordnerfehlern:</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="146"/>
+ <source>When file error</source>
+ <translation>Bei Dateifehlern:</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="172"/>
+ <source>When file collision</source>
+ <translation>Bei Dateikollisionen:</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="232"/>
+ <source>When folder collision</source>
+ <translation>Bei Ordnerkollisionen:</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="263"/>
+ <source>Check if destination folder exists</source>
+ <translation>Prüfen ob Zielordner vorhanden ist</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="270"/>
+ <source>Renaming rules</source>
+ <translation>Umbennungsregeln</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="290"/>
+ <source>Delete partially transferred files</source>
+ <translation>Unvollständig übertragene Dateien löschen</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="303"/>
+ <source>Rename the original destination</source>
+ <translation>Original-Ziel umbenennen</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="334"/>
+ <source>Control</source>
+ <translation>Überprüfung</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="340"/>
+ <source>Checksum</source>
+ <translation>Prüfsumme</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Only after error</source>
+ <translation>Nur nach einem Fehler</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="356"/>
+ <source>Ignore if impossible</source>
+ <translation>Ignorieren falls unmöglich</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="373"/>
+ <source>Verify checksums</source>
+ <translation>Prüfsummen vergleichen</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="405"/>
+ <source>Performance</source>
+ <translation>Leistung</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="411"/>
+ <source>Parallel buffer</source>
+ <translation>Paralleler Puffer</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="418"/>
+ <location filename="../../copyEngineOptions.ui" line="431"/>
+ <location filename="../../copyEngineOptions.ui" line="444"/>
+ <location filename="../../copyEngineOptions.ui" line="481"/>
+ <location filename="../../copyEngineOptions.ui" line="550"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="460"/>
+ <source>Block size</source>
+ <translation>Blockgröße</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="467"/>
+ <source>Sequential buffer</source>
+ <translation>Sequentieller Puffer</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="474"/>
+ <source>Enable OS buffer</source>
+ <translation>OS-Puffer aktivieren</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="497"/>
+ <source>OS buffer only if smaller than</source>
+ <translation>OS-Puffer nur verwenden, wenn kleiner als</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="504"/>
+ <source>Transfer algorithm</source>
+ <translation>Übertragungs-Algorithmus</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="543"/>
+ <source>Parallelize if smaller than</source>
+ <translation>Parallelisieren wenn kleiner als</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="573"/>
+ <source>Inode threads</source>
+ <translation>Inode Threads</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="580"/>
+ <location filename="../../copyEngineOptions.ui" line="590"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="593"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="609"/>
+ <source>Misc</source>
+ <translation>Verschiedenes</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="615"/>
+ <source>Check the disk space</source>
+ <translation>Auf freien Speicherplatz überprüfen</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="625"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use this folder when destination is empty</source>
+ <translation type="obsolete">Benutze diesen Ordner wenn Ziel nicht benannt</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="637"/>
+ <source>Browse</source>
+ <translation>Wählen</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="659"/>
+ <source>Filters</source>
+ <translation>Filter</translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error with file</source>
+ <translation>Dateifehler</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="59"/>
+ <source>Size</source>
+ <translation>Größe</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="76"/>
+ <source>Modified</source>
+ <translation>Geändert</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="93"/>
+ <source>File name</source>
+ <translation>Dateiname</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="110"/>
+ <source>Destination</source>
+ <translation>Ziel</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="127"/>
+ <source>Folder</source>
+ <translation>Ordner</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="173"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Aktion immer ausführen</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="193"/>
+ <source>Try in with elevated privileges</source>
+ <translation>Mit erweiterten Rechten versuchen</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="200"/>
+ <source>Put to bottom</source>
+ <translation>Ans Ende verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="207"/>
+ <source>Retry</source>
+ <translation>Wiederholen</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="214"/>
+ <source>&amp;Skip</source>
+ <translation>Über&amp;springen</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="221"/>
+ <source>&amp;Cancel</source>
+ <translation>Abbrechen (&amp;C)</translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation>Die Datei existiert</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>Quelle</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>Ziel</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Size</source>
+ <translation>Größe</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>Modified</source>
+ <translation>Geändert</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="204"/>
+ <source>File name</source>
+ <translation>Dateiname</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="133"/>
+ <location filename="../../fileExistsDialog.ui" line="221"/>
+ <source>Folder</source>
+ <translation>Ordner</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="277"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Neuen &amp;Namen vorschlagen</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="288"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Aktion immer ausführen</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="346"/>
+ <location filename="../../fileExistsDialog.ui" line="349"/>
+ <source>Overwrite if modification date differs</source>
+ <translation>Überschreiben, falls Änderungsdatum verschieden</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="308"/>
+ <source>&amp;Rename</source>
+ <translation>Umbenennen (&amp;R)</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="315"/>
+ <source>&amp;Overwrite</source>
+ <translation>Überschreiben (&amp;O)</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="325"/>
+ <source>&amp;Skip</source>
+ <translation>Über&amp;springen</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="332"/>
+ <source>&amp;Cancel</source>
+ <translation>Abbrechen (&amp;C)</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="341"/>
+ <source>Overwrite if newer</source>
+ <translation>Überschreiben, falls neuer</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="354"/>
+ <location filename="../../fileExistsDialog.ui" line="357"/>
+ <source>Overwrite if older</source>
+ <translation>Überschreiben, falls älter</translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="40"/>
+ <source>Size</source>
+ <translation>Größe</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="110"/>
+ <source>Modified</source>
+ <translation>Geändert</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="70"/>
+ <source>File name</source>
+ <translation>Dateiname</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>The source and destination are same</source>
+ <translation>Quelle und Ziel sind gleich</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="90"/>
+ <source>Folder</source>
+ <translation>Ordner</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="159"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Neuen &amp;Namen vorschlagen</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="170"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Aktion immer ausführen</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="190"/>
+ <source>&amp;Rename</source>
+ <translation>Umbenennen (&amp;R)</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="197"/>
+ <source>&amp;Skip</source>
+ <translation>Über&amp;springen</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="204"/>
+ <source>&amp;Cancel</source>
+ <translation>Abbrechen (&amp;C)</translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>Quelle</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>Ziel</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>The source and destination is identical</source>
+ <translation>Quelle und Ziel sind identisch</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="82"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Modified</source>
+ <translation>Geändert</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="99"/>
+ <location filename="../../folderExistsDialog.ui" line="160"/>
+ <source>Folder name</source>
+ <translation>Ordnername</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="116"/>
+ <location filename="../../folderExistsDialog.ui" line="184"/>
+ <source>Folder</source>
+ <translation>Ordner</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="227"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Neuen &amp;Namen vorschlagen</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="238"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Aktion immer ausführen</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="245"/>
+ <source>&amp;Rename</source>
+ <translation>Umbenennen (&amp;R)</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="252"/>
+ <source>Merge</source>
+ <translation>Fusionieren</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="259"/>
+ <source>Skip</source>
+ <translation>Überspringen</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="266"/>
+ <source>&amp;Cancel</source>
+ <translation>Abbrechen (&amp;C)</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier/Languages/el/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/el/translation.ts
new file mode 100644
index 0000000..3362659
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/el/translation.ts
@@ -0,0 +1,1289 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="80"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="268"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="671"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="696"/>
+ <source>File truncated during read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngineOptions</name>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="35"/>
+ <source>Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="44"/>
+ <source>Move the whole folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="51"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="61"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="74"/>
+ <source>Autostart the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="81"/>
+ <location filename="../../copyEngineOptions.ui" line="101"/>
+ <source>Less performance if checked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="104"/>
+ <source>Follow the strict order</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="130"/>
+ <source>Error and collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="136"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="146"/>
+ <source>When file error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="172"/>
+ <source>When file collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="232"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="263"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="270"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="290"/>
+ <source>Delete partially transferred files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="303"/>
+ <source>Rename the original destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="334"/>
+ <source>Control</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="340"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="356"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="373"/>
+ <source>Verify checksums</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="405"/>
+ <source>Performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="411"/>
+ <source>Parallel buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="418"/>
+ <location filename="../../copyEngineOptions.ui" line="431"/>
+ <location filename="../../copyEngineOptions.ui" line="444"/>
+ <location filename="../../copyEngineOptions.ui" line="481"/>
+ <location filename="../../copyEngineOptions.ui" line="550"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="460"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="467"/>
+ <source>Sequential buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="474"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="497"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="504"/>
+ <source>Transfer algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="543"/>
+ <source>Parallelize if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="573"/>
+ <source>Inode threads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="580"/>
+ <location filename="../../copyEngineOptions.ui" line="590"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="593"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="609"/>
+ <source>Misc</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="615"/>
+ <source>Check the disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="625"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="637"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="659"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error with file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="59"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="76"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="93"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="110"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="127"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="173"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="193"/>
+ <source>Try in with elevated privileges</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="200"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="207"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="214"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="221"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="204"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="133"/>
+ <location filename="../../fileExistsDialog.ui" line="221"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="277"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="288"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="346"/>
+ <location filename="../../fileExistsDialog.ui" line="349"/>
+ <source>Overwrite if modification date differs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="308"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="315"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="325"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="332"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="341"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="354"/>
+ <location filename="../../fileExistsDialog.ui" line="357"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="40"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="110"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="70"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>The source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="90"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="159"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="170"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="190"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="197"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="204"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>The source and destination is identical</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="82"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="99"/>
+ <location filename="../../folderExistsDialog.ui" line="160"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="116"/>
+ <location filename="../../folderExistsDialog.ui" line="184"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="227"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="238"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="245"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="252"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="259"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="266"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier/Languages/en/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/en/translation.ts
new file mode 100644
index 0000000..a6b1027
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/en/translation.ts
@@ -0,0 +1,1289 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="en">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="80"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="268"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="671"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="696"/>
+ <source>File truncated during read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngineOptions</name>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="35"/>
+ <source>Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="44"/>
+ <source>Move the whole folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="51"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="61"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="74"/>
+ <source>Autostart the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="81"/>
+ <location filename="../../copyEngineOptions.ui" line="101"/>
+ <source>Less performance if checked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="104"/>
+ <source>Follow the strict order</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="130"/>
+ <source>Error and collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="136"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="146"/>
+ <source>When file error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="172"/>
+ <source>When file collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="232"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="263"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="270"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="290"/>
+ <source>Delete partially transferred files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="303"/>
+ <source>Rename the original destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="334"/>
+ <source>Control</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="340"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="356"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="373"/>
+ <source>Verify checksums</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="405"/>
+ <source>Performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="411"/>
+ <source>Parallel buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="418"/>
+ <location filename="../../copyEngineOptions.ui" line="431"/>
+ <location filename="../../copyEngineOptions.ui" line="444"/>
+ <location filename="../../copyEngineOptions.ui" line="481"/>
+ <location filename="../../copyEngineOptions.ui" line="550"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="460"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="467"/>
+ <source>Sequential buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="474"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="497"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="504"/>
+ <source>Transfer algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="543"/>
+ <source>Parallelize if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="573"/>
+ <source>Inode threads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="580"/>
+ <location filename="../../copyEngineOptions.ui" line="590"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="593"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="609"/>
+ <source>Misc</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="615"/>
+ <source>Check the disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="625"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="637"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="659"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error with file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="59"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="76"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="93"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="110"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="127"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="173"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="193"/>
+ <source>Try in with elevated privileges</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="200"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="207"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="214"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="221"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="204"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="133"/>
+ <location filename="../../fileExistsDialog.ui" line="221"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="277"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="288"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="346"/>
+ <location filename="../../fileExistsDialog.ui" line="349"/>
+ <source>Overwrite if modification date differs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="308"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="315"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="325"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="332"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="341"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="354"/>
+ <location filename="../../fileExistsDialog.ui" line="357"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="40"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="110"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="70"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>The source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="90"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="159"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="170"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="190"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="197"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="204"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>The source and destination is identical</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="82"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="99"/>
+ <location filename="../../folderExistsDialog.ui" line="160"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="116"/>
+ <location filename="../../folderExistsDialog.ui" line="184"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="227"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="238"/>
+ <source>&amp;Always perform this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="245"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="252"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="259"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="266"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier/Languages/es/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/es/translation.ts
new file mode 100644
index 0000000..d2a294f
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/es/translation.ts
@@ -0,0 +1,1305 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="es" sourcelanguage="en">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation>No es compatible con esta plataforma</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation>Fecha de última modificación es incorrecto</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translation>Fecha de último acceso es incorrecto</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation>Error desconocido: %1</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation>Error desconocido</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation>Error de conversión de Sendero</translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation>El motor se ve obligado a moverse, no se puede copiar con ella</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation>El motor se ve obligado a copiar, no te puedes mover con él</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation>Destino</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation>Utilice el destino &quot;%1&quot; actual?</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation>El modo se ha visto obligado previamente. Este es un error interno, por favor repórtelo</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation>Pedir</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation>Omitir</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation>Unir</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation>Cambiar el nombre</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation>Ponga al final</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation>Sobrescribir</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation>Sobrescribir si es diferente</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation>Sobrescribir si nuevo</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation>Sobrescribir si es mayor</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation>Automático</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation>Secuencial</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation>Paralelo</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation>error Opciones</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation>Opciones del motor no está cargado. No es posible acceder a los filtros</translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation>Pedir</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation>Omitir</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation>Unir</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation>Cambiar el nombre</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation>Ponga al final</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation>Sobrescribir</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation>Sobrescribir si es diferente</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation>Sobrescribir si nuevo</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation>Sobrescribir si es mayor</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation>Automático</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation>Secuencial</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation>Paralelo</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation>error Opciones</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation>Opciones del motor no está cargado. No es posible acceder a los filtros</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation>Opciones del motor no está cargado, no se puede acceder a los filtros</translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation>Espacio en disco</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation>Necesita más espacio en esta unidad para terminar esta transferencia</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation>Continuar</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation>Drives %1 tienen %2 disponible, pero necesitan %3</translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation>Error en la carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation>Nombre de la carpeta</translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation>Error</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation>Trate de cambiar el nombre con el uso de caracteres especiales</translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation>Error</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation>Trate de cambiar el nombre con el uso de caracteres especiales</translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation>Buscar:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation>Tipo de búsqueda:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation>texto Fuente</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation>Regex simplificado</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation>Perl&apos;s regex</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation>Aplicar sobre:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation>Archivos</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation>Carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation>Archivos y carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation>La cadena de prueba coincide con la expresión regular</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation>Verification</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation>Prueba de la cuerda:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation>Filtros de diálogo</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation>Todo cadena debe coincidir</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation>La expresión regular es válido</translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation>Filtros</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation>Filtros de exclusión</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation>Filtros de inclusión</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation>Ninguno = Incluya todos los</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation>texto Fuente</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation>Simplificado regex</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation>Perl&apos;s regex</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation>Sólo en el archivo</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation>Sólo en la carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation>Partido completo</translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation>Carpeta ya existe</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation>Error</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation>Trate de cambiar el nombre con el uso de caracteres especiales</translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation>No se puede hacer para mover o copiar elemento en modo incorrecto obligado: %1</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation>No se puede guardar la lista de transferencias: %1</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation>Problema al leer el archivo o archivos de tamaño es 0</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation>Encabezado incorrecto: &quot;%1&quot;</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation>La lista de transferencia está en modo mixto, pero este caso no es de este modo</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation>La lista de transferencia está en el modo de copia, pero esta instancia no está en este modo</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation>La lista de transferencia es el modo de desplazamiento, pero esta instancia no está en este modo</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation>Algunos errores han sido encontrados durante el análisis de línea</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation>No se puede abrir la lista de transferencias: %1</translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <source>Unable to get time</source>
+ <translation type="obsolete">No es posible obtener el tiempo</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation>No se puede crear la carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation>La carpeta de origen no existe</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation>No es posible cambiar el nombre de la carpeta temporal</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation>No se puede hacer el movimiento final real de la carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation>No se puede mover la carpeta</translation>
+ </message>
+ <message>
+ <source>Unable to set the access-right</source>
+ <translation type="obsolete">No se puede establecer el acceso a la derecha</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation>No se puede eliminar</translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation>Error interno, por favor informe de ello!</translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation>Error interno de leer el archivo de origen: tamaño de bloque fuera de rango</translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation>No se puede leer el archivo de origen: </translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation>Archivo truncada durante el cambio de lectura, los datos posibles</translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation>En primer lugar el cambio de nombre</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation>%name% - copia</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; para el nombre del archivo original&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation>En segundo lugar el cambio de nombre</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation>%name% - copia (%number%)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; para el nombre del archivo original&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; para el número adicional&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation>Reglas de Cambio de nombre</translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation>Carpeta de la lista negra</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation>Esto no es una carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation>La carpeta no existe</translation>
+ </message>
+ <message>
+ <source>The folder not exists</source>
+ <translation type="obsolete">La carpeta no existe</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation>La carpeta no se puede leer</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation>Problema con codificación de nombres</translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation>Archivo no encontrado</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished">Error interno: Ya la apertura</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation type="unfinished">Drive %1</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished">Desconocido carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation type="unfinished">raíz</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished">%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished">%1 - copia (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished">La fuente no existe</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished">El archivo de origen no existe</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished">Las sumas de comprobación no coinciden</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished">Error interno: El tamaño transferido no coincide</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished">Incapaz de hacer la carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation>Trate de cambiar el nombre con el uso de caracteres especiales</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished">Otro archivo existe en el mismo lugar</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished">Error interno: El destino no está cerrado</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished">Error interno: El buffer no está vacío</translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="80"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation>Error de resolución de ruta (camino vacío)</translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="268"/>
+ <source>Internal error, please report it!</source>
+ <translation>Error interno, por favor informe de ello!</translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="671"/>
+ <source>Unable to read the source file: </source>
+ <translation>No se puede leer el archivo de origen: </translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="696"/>
+ <source>File truncated during read, possible data change</source>
+ <translation>Archivo truncado durante lectura, posible cambio de datos</translation>
+ </message>
+</context>
+<context>
+ <name>copyEngineOptions</name>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="35"/>
+ <source>Transfer</source>
+ <translation>Transferencia</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="44"/>
+ <source>Move the whole folder</source>
+ <translation>Mueva la carpeta completa</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="51"/>
+ <source>Transfer the file rights</source>
+ <translation>Transferencia de los derechos de archivo</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="61"/>
+ <source>Keep the file date</source>
+ <translation>Mantener la fecha de archivo</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="74"/>
+ <source>Autostart the transfer</source>
+ <translation>Inicio automático de la transferencia</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="81"/>
+ <location filename="../../copyEngineOptions.ui" line="101"/>
+ <source>Less performance if checked</source>
+ <translation>Si comprueba Menos rendimiento</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="104"/>
+ <source>Follow the strict order</source>
+ <translation>Siga el orden estricto</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="130"/>
+ <source>Error and collision</source>
+ <translation>Error y de la colisión</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="136"/>
+ <source>When folder error</source>
+ <translation>Cuando el error carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="146"/>
+ <source>When file error</source>
+ <translation>Cuando archivo error</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="172"/>
+ <source>When file collision</source>
+ <translation>Cuando archivo colisión</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="232"/>
+ <source>When folder collision</source>
+ <translation>Cuando la colisión carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="263"/>
+ <source>Check if destination folder exists</source>
+ <translation>Compruebe si existe la carpeta de destino</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="270"/>
+ <source>Renaming rules</source>
+ <translation>Reglas de Cambio de nombre</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="290"/>
+ <source>Delete partially transferred files</source>
+ <translation>Eliminar archivos parcialmente transferidos</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="303"/>
+ <source>Rename the original destination</source>
+ <translation>Cambie el nombre del destino original</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="334"/>
+ <source>Control</source>
+ <translation>Controlar</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="340"/>
+ <source>Checksum</source>
+ <translation>Suma de comprobación</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Only after error</source>
+ <translation>Sólo después de un error</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="356"/>
+ <source>Ignore if impossible</source>
+ <translation>No haga caso si no es posible</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="373"/>
+ <source>Verify checksums</source>
+ <translation>Verifique checksums</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="405"/>
+ <source>Performance</source>
+ <translation>Rendimiento</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="411"/>
+ <source>Parallel buffer</source>
+ <translation>Búfer paralelo</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="418"/>
+ <location filename="../../copyEngineOptions.ui" line="431"/>
+ <location filename="../../copyEngineOptions.ui" line="444"/>
+ <location filename="../../copyEngineOptions.ui" line="481"/>
+ <location filename="../../copyEngineOptions.ui" line="550"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="460"/>
+ <source>Block size</source>
+ <translation>Tamaño del bloque</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="467"/>
+ <source>Sequential buffer</source>
+ <translation>Tampón secuencial</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="474"/>
+ <source>Enable OS buffer</source>
+ <translation>Habilitar el OS de amortiguación</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="497"/>
+ <source>OS buffer only if smaller than</source>
+ <translation>OS de amortiguación sólo si menor que</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="504"/>
+ <source>Transfer algorithm</source>
+ <translation>Algoritmo de transferencia</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="543"/>
+ <source>Parallelize if smaller than</source>
+ <translation>Paralelice si más pequeño que</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="573"/>
+ <source>Inode threads</source>
+ <translation>Temas inodo</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="580"/>
+ <location filename="../../copyEngineOptions.ui" line="590"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="593"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="609"/>
+ <source>Misc</source>
+ <translation>Misc</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="615"/>
+ <source>Check the disk space</source>
+ <translation>Compruebe el espacio en disco</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="625"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Use this folder when destination is empty</source>
+ <translation type="obsolete">Utilice esta carpeta al destino está vacía</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="637"/>
+ <source>Browse</source>
+ <translation>Busque</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="659"/>
+ <source>Filters</source>
+ <translation>Filtros</translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error with file</source>
+ <translation>Error con el archivo</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation>Error</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="59"/>
+ <source>Size</source>
+ <translation>Tamaño</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="76"/>
+ <source>Modified</source>
+ <translation>Modificado</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="93"/>
+ <source>File name</source>
+ <translation>Nombre de archivo</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="110"/>
+ <source>Destination</source>
+ <translation>Destino</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="127"/>
+ <source>Folder</source>
+ <translation>Carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="173"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Siempre realice esta acción</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="193"/>
+ <source>Try in with elevated privileges</source>
+ <translation>Pruebe con privilegios elevados</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="200"/>
+ <source>Put to bottom</source>
+ <translation>Ponga a abajo</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="207"/>
+ <source>Retry</source>
+ <translation>Reintentar</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="214"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Omitir</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="221"/>
+ <source>&amp;Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation>El archivo ya existe</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>Fuente</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>Destino</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Size</source>
+ <translation>Tamaño</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>Modified</source>
+ <translation>Modificado</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="204"/>
+ <source>File name</source>
+ <translation>Nombre de archivo</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="133"/>
+ <location filename="../../fileExistsDialog.ui" line="221"/>
+ <source>Folder</source>
+ <translation>Carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="277"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Sugerir nuevo &amp;nombre</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="288"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Siempre realice esta acción</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="346"/>
+ <location filename="../../fileExistsDialog.ui" line="349"/>
+ <source>Overwrite if modification date differs</source>
+ <translation>Sobrescribir si la fecha de modificación difiere</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="308"/>
+ <source>&amp;Rename</source>
+ <translation>&amp;Cambiar el nombre</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="315"/>
+ <source>&amp;Overwrite</source>
+ <translation>&amp;Sobrescribir</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="325"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Omitir</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="332"/>
+ <source>&amp;Cancel</source>
+ <translation>Ca&amp;ncelar</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="341"/>
+ <source>Overwrite if newer</source>
+ <translation>Sobrescribir si nuevo</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="354"/>
+ <location filename="../../fileExistsDialog.ui" line="357"/>
+ <source>Overwrite if older</source>
+ <translation>Sobrescribir si es mayor</translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="40"/>
+ <source>Size</source>
+ <translation>Tamaño</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="110"/>
+ <source>Modified</source>
+ <translation>Modificado</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="70"/>
+ <source>File name</source>
+ <translation>Nombre de archivo</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>The source and destination are same</source>
+ <translation>El origen y el destino son los mismos</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="90"/>
+ <source>Folder</source>
+ <translation>Carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="159"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Sugerir nuevo nombre</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="170"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Siempre realice esta acción</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="190"/>
+ <source>&amp;Rename</source>
+ <translation>Cambiar el nombre</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="197"/>
+ <source>&amp;Skip</source>
+ <translation>Omitir</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="204"/>
+ <source>&amp;Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>Fuente</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>Destino</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>The source and destination is identical</source>
+ <translation>La fuente y el destino es idéntica</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="82"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Modified</source>
+ <translation>Modificado</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="99"/>
+ <location filename="../../folderExistsDialog.ui" line="160"/>
+ <source>Folder name</source>
+ <translation>Nombre de la carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="116"/>
+ <location filename="../../folderExistsDialog.ui" line="184"/>
+ <source>Folder</source>
+ <translation>Carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="227"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Sugerir nuevo nombre</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="238"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Siempre realice esta acción</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="245"/>
+ <source>&amp;Rename</source>
+ <translation>Cambiar el nombre</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="252"/>
+ <source>Merge</source>
+ <translation>Unir</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="259"/>
+ <source>Skip</source>
+ <translation>Omitir</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="266"/>
+ <source>&amp;Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier/Languages/fr/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/fr/translation.ts
new file mode 100644
index 0000000..8ed7524
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/fr/translation.ts
@@ -0,0 +1,1338 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="fr" sourcelanguage="en">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation>Non supporté sur cette plateforme</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation>Date de dernière modification du fichier incorrecte</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translation>Date du dernier accès au fichier incorrecte</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation>Erreur inconnue: %1</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation>Erreur inconnue</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation>Erreur de conversion de chemain</translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation>Le moteur est forcé en déplacement, vous ne pouvez pas copier avec</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation>Le moteur est forcé en copie, vous ne pouvez pas déplacer avec</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation>Destination</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation>Utiliser la destination actuelle &quot;%1&quot;?</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation>Le mode a été forcé. C&apos;est une erreur interne, merci de la repporter</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation>Demander</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation>Passer</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation>Fusionner</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation>Renommer</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation>Mettre à la fin</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation>Écraser</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation>Écraser si différent</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation>Écraser si plus récent</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation>Écraser si plus vieux</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation>Automatique</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation>Séquentiel</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation>Parallèle</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation>Erreur d&apos;options</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation>Le moteur d&apos;options n&apos;est pas chargé. Impossible d&apos;accédé aux filtres</translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation>Demander</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation>Passer</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation>Fusionner</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation>Renommer</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation>Mettre à la fin</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation>Écraser</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation>Écraser si différent</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation>Écraser si plus récent</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation>Écraser si plus vieux</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation>Automatique</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation>Séquentiel</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation>Parallèle</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation>Erreur d&apos;options</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation>Le moteur d&apos;options n&apos;est pas chargé. Impossible d&apos;accédé aux filtres</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation>Moteur d&apos;options non chargé, impossible d&apos;accéder aux filtres</translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation>Espace disque</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation>Vous avez besoin de plus d&apos;espace pour finir ce transfert</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation>Continuer</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation>Annuler</translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation>Lecteur %1 as %2 disponible mais à besoin de %3</translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation>Erreur sur un dossier</translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation>Nom de répertoire</translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copie</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation>Erreur</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation>Essaie de renommage avec caratéres interdits</translation>
+ </message>
+ <message>
+ <source>Try rename with unauthorized characters</source>
+ <translation type="obsolete">Essaie de renommage avec caratéres interdits</translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copie</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation>Erreur</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation>Essaie de renommage avec caratéres interdits</translation>
+ </message>
+ <message>
+ <source>Try rename with unauthorized characters</source>
+ <translation type="obsolete">Essaie de renommage avec caratéres interdits</translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation>Recherche:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation>Type de recherche:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation>Texte brut</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation>Regex simplifiée</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation>Regex perl</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation>Appliquer sur:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation>Fichier</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation>Dossier</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation>Fichier et dossier</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation>La chaine de texte corresponds avec la regex</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation>Vérification</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation>Chaine de test:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation>Dialogue des filtres</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation>Toute la chaine doit correspondre</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation>La regex est valid</translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation>Filtres</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation>Filtres d&apos;exclusion</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation>Filtres d&apos;inclusion</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation>Aucun = tout inclure</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation>Texte brute</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation>Regex simplifié</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation>Regex perl</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation>Appliquer sur fichier</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation>Appliquer sur dossier</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation>Correspondance totale</translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation>Dossier déjà existant</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copie</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation>Erreur</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation>Essaie de renommage avec caratéres interdits</translation>
+ </message>
+ <message>
+ <source>Try rename with unauthorized characters</source>
+ <translation type="obsolete">Essaie de renommage avec caratéres interdits</translation>
+ </message>
+ <message>
+ <source>Try rename with unauthorized charateres</source>
+ <translation type="obsolete">Tentative de renommage de des caratéres non autorisés</translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation>Impossible de faire un déplacement ou une copie dans le mauvais mode forcé: %1</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation>Impossible de sauvegarder la liste de transfert: %1</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation>Problem durant la lecture, ou taille de fichier est 0</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation>Mauvais en-tête: &quot;%1&quot;</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation>La liste de transfert est en mode mixte, mais l&apos;instance n&apos;est pas dans ce mode</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation>La liste de transfert est en mode copie, mais l&apos;instance n&apos;est pas dans ce mode</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation>La liste de transfert est en mode déplacement, mais l&apos;instance n&apos;est pas dans ce mode</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation>Certaine erreur ont été trouvé durant l&apos;analise de la line</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation>Impossible d&apos;ouvrir la list de transfert: %1</translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <source>Unable to get time</source>
+ <translation type="obsolete">Impossible d&apos;obtenir l&apos;heure</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation>Impossible de créer le répertoire</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation>Le dossier source n&apos;éxiste pas</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation>Impossible de renommer le dossier</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation>Impossible de faire le déplacement final du dossier</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation>Impossible de déplacer le dossier</translation>
+ </message>
+ <message>
+ <source>Unable to set time</source>
+ <translation type="obsolete">Impossible de définir l&apos;heure</translation>
+ </message>
+ <message>
+ <source>Unable to set the access-right</source>
+ <translation type="obsolete">Impossible de définir les droits d&apos;accés</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation>Impossible de supprimer</translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation>Erreur interne, merci de la reporter!</translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation>Erreur interne lisant le fichier source: taille de block hors de la plage</translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation>Impossible de lire le fichier source: </translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translatorcomment>La taille du fichier a diminué durant -&gt; changé le texte original</translatorcomment>
+ <translation>Fichier a diminué durant la lecture, possible changement de données</translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation>Premier renommage</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translatorcomment>variables need never be translated</translatorcomment>
+ <translation>%name% - copie</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translatorcomment>variables need never be translated</translatorcomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; pour le nom originel&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation>Second renommage</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translatorcomment>variables need never be translated</translatorcomment>
+ <translation>%name% - copie (%number%)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translatorcomment>variables need never be translated</translatorcomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; pour le nom originel&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; pour le nombre extra&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copie</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation>Règles de renommage</translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation>Dossier banis</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copie</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation>N&apos;est pas un dossier</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation>Le répertoire n&apos;existe pas</translation>
+ </message>
+ <message>
+ <source>The folder not exists</source>
+ <translation type="obsolete">Le répertoire n&apos;existe pas</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation>Le répertoire n&apos;est pas lisible</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation>Problém d&apos;encodage</translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation>Fichier non trouvé</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation>Lecteur %1</translation>
+ </message>
+ <message>
+ <source>Try rename with unauthorized characters</source>
+ <translation type="obsolete">Essaie de renommage avec caratéres interdits</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation>Dossier inconnu</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation>racine</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copie</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation>La source n&apos;existe pas</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation>Le fichier source n&apos;existe pas</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation>Les sommes de controle ne correspondent pas</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation>Erreur interne: La taille transféré ne corresponds pas</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation>Impossible de créer le dossier</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation>Essaie de renommage avec caratéres interdits</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation>Mauvaise date de modification ou impossible de l&apos;avoir, vous pouvez désactivé le transfert de celui-ci</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation>Erreur interne: Déjà ouvert</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation>Un autre fichier exists à la même place</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation>Erreur interne: La destination n&apos;est pas fermé</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation>Erreur interne: Le buffer n&apos;est pas vide</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation>Impossible de changer la date</translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="80"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation>Erreur de résolution de chemain (chemain vide)</translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="268"/>
+ <source>Internal error, please report it!</source>
+ <translation>Erreur interne, merci de la reporter!</translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="671"/>
+ <source>Unable to read the source file: </source>
+ <translation>Impossible de lire le fichier source: </translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="696"/>
+ <source>File truncated during read, possible data change</source>
+ <translation>Fichier rétréci pendant la lecture, possible changement de données</translation>
+ </message>
+</context>
+<context>
+ <name>copyEngineOptions</name>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="35"/>
+ <source>Transfer</source>
+ <translation>Transfert</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="44"/>
+ <source>Move the whole folder</source>
+ <translation>Déplacer le dossier complet</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="51"/>
+ <source>Transfer the file rights</source>
+ <translation>Transférer les droits des fichiers</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="61"/>
+ <source>Keep the file date</source>
+ <translation>Garder la date du fichier</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="74"/>
+ <source>Autostart the transfer</source>
+ <translation>Démarrer automatiquement le transfert</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="81"/>
+ <location filename="../../copyEngineOptions.ui" line="101"/>
+ <source>Less performance if checked</source>
+ <translation>Moins de performance si coché</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="104"/>
+ <source>Follow the strict order</source>
+ <translation>Suivre l&apos;ordre strict</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="130"/>
+ <source>Error and collision</source>
+ <translation>Erreur et collision</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="136"/>
+ <source>When folder error</source>
+ <translation>En cas d&apos;erreur de répertoire</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="146"/>
+ <source>When file error</source>
+ <translation>En cas d&apos;erreur de fichier</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="172"/>
+ <source>When file collision</source>
+ <translation>En cas de collision de fichier</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="232"/>
+ <source>When folder collision</source>
+ <translation>Lors d&apos;une collision de dossier</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="263"/>
+ <source>Check if destination folder exists</source>
+ <translation>Vérifier si le répertoire de destination existe</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="270"/>
+ <source>Renaming rules</source>
+ <translation>Règles de renommage</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="290"/>
+ <source>Delete partially transferred files</source>
+ <translation>Supprimer les transferts partiels</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="303"/>
+ <source>Rename the original destination</source>
+ <translation>Renommer la destination originale</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="334"/>
+ <source>Control</source>
+ <translation>Controle</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="340"/>
+ <source>Checksum</source>
+ <translation>Somme de contrôle</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Only after error</source>
+ <translation>Seulement après erreur</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="356"/>
+ <source>Ignore if impossible</source>
+ <translation>Ignorer si impossible</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="373"/>
+ <source>Verify checksums</source>
+ <translation>Vérifier les sommes de contrôles</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="405"/>
+ <source>Performance</source>
+ <translation>Performance</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="411"/>
+ <source>Parallel buffer</source>
+ <translation>Buffer paralléle</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="418"/>
+ <location filename="../../copyEngineOptions.ui" line="431"/>
+ <location filename="../../copyEngineOptions.ui" line="444"/>
+ <location filename="../../copyEngineOptions.ui" line="481"/>
+ <location filename="../../copyEngineOptions.ui" line="550"/>
+ <source>KB</source>
+ <translation>Ko</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="460"/>
+ <source>Block size</source>
+ <translation>Taille de bloc</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="467"/>
+ <source>Sequential buffer</source>
+ <translation>Buffer séquentiel</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="474"/>
+ <source>Enable OS buffer</source>
+ <translation>Activer le tampon de l&apos;OS</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="497"/>
+ <source>OS buffer only if smaller than</source>
+ <translation>Tampon de l&apos;OS seulement si plus petit que</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="504"/>
+ <source>Transfer algorithm</source>
+ <translation>Algorithme de transfert</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="543"/>
+ <source>Parallelize if smaller than</source>
+ <translation>Parallèlise si plus petit que</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="573"/>
+ <source>Inode threads</source>
+ <translation>Thread d&apos;inode</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="580"/>
+ <location filename="../../copyEngineOptions.ui" line="590"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation>Plus de cpu mais meilleur organisation sur le disque</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="593"/>
+ <source>Order the list</source>
+ <translation>Ordonner la liste</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="609"/>
+ <source>Misc</source>
+ <translation>Divers</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="615"/>
+ <source>Check the disk space</source>
+ <translation>Vérifier l&apos;espace disque</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="625"/>
+ <source>Use this folder when destination is not set</source>
+ <translation>Utiliser ce dossier quand la destination n&apos;est pas défini</translation>
+ </message>
+ <message>
+ <source>Use this folder when destination is empty</source>
+ <translation type="obsolete">Utiliser ce dossier quand la destination est vide</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="637"/>
+ <source>Browse</source>
+ <translation>Parcourir</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="659"/>
+ <source>Filters</source>
+ <translation>Filtres</translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error with file</source>
+ <translation>Erreur avec un fichier</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation>Erreur</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="59"/>
+ <source>Size</source>
+ <translation>Taille</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="76"/>
+ <source>Modified</source>
+ <translation>Modifié</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="93"/>
+ <source>File name</source>
+ <translation>Nom de fichier</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="110"/>
+ <source>Destination</source>
+ <translation>Destination</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="127"/>
+ <source>Folder</source>
+ <translation>Dossier</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="173"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Toujours faire cette action</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="193"/>
+ <source>Try in with elevated privileges</source>
+ <translation>Essayer avec des priviléges suppérieurs</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="200"/>
+ <source>Put to bottom</source>
+ <translation>Mettre à la fin</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="207"/>
+ <source>Retry</source>
+ <translation>Réessayer</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="214"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Passer</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="221"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Annuler</translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation>Le fichier existe</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>Source</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>Destination</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Size</source>
+ <translation>Taille</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>Modified</source>
+ <translation>Modifié</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="204"/>
+ <source>File name</source>
+ <translation>Nom de fichier</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="133"/>
+ <location filename="../../fileExistsDialog.ui" line="221"/>
+ <source>Folder</source>
+ <translation>Dossier</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="277"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Suggérer un &amp;nouveau nom</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="288"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Toujours faire cette action</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="346"/>
+ <location filename="../../fileExistsDialog.ui" line="349"/>
+ <source>Overwrite if modification date differs</source>
+ <translation>Écraser si les dates différes</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="308"/>
+ <source>&amp;Rename</source>
+ <translation>&amp;Renommer</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="315"/>
+ <source>&amp;Overwrite</source>
+ <translation>&amp;Écraser</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="325"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Passer</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="332"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Annuler</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="341"/>
+ <source>Overwrite if newer</source>
+ <translation>Écraser si plus récent</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="354"/>
+ <location filename="../../fileExistsDialog.ui" line="357"/>
+ <source>Overwrite if older</source>
+ <translation>Écraser si plus vieux</translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="40"/>
+ <source>Size</source>
+ <translation>Taille</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="110"/>
+ <source>Modified</source>
+ <translation>Modifié</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="70"/>
+ <source>File name</source>
+ <translation>Nom de fichier</translation>
+ </message>
+ <message>
+ <source>The source and destination is identical</source>
+ <translation type="obsolete">La source et la destination sont identique</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>The source and destination are same</source>
+ <translation>La source et la destination sont identique</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="90"/>
+ <source>Folder</source>
+ <translation>Dossier</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="159"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Suggérer un &amp;nouveau nom</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="170"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Toujours faire cette action</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="190"/>
+ <source>&amp;Rename</source>
+ <translation>&amp;Renommer</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="197"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Passer</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="204"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Annuler</translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>Source</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>Destination</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>The source and destination is identical</source>
+ <translation>La source et la destination sont identique</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="82"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Modified</source>
+ <translation>Modifié</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="99"/>
+ <location filename="../../folderExistsDialog.ui" line="160"/>
+ <source>Folder name</source>
+ <translation>Nom de répertoire</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="116"/>
+ <location filename="../../folderExistsDialog.ui" line="184"/>
+ <source>Folder</source>
+ <translation>Dossier</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="227"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Suggérer un &amp;nouveau nom</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="238"/>
+ <source>&amp;Always perform this action</source>
+ <translation>&amp;Toujours faire cette action</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="245"/>
+ <source>&amp;Rename</source>
+ <translation>&amp;Renommer</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="252"/>
+ <source>Merge</source>
+ <translation>Fusionner</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="259"/>
+ <source>Skip</source>
+ <translation>Passer</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="266"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Annuler</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier/Languages/hi/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/hi/translation.ts
new file mode 100644
index 0000000..3362659
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier/Languages/hi/translation.ts
@@ -0,0 +1,1289 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="26"/>
+ <location filename="../../AvancedQFile.cpp" line="57"/>
+ <location filename="../../AvancedQFile.cpp" line="88"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="121"/>
+ <source>Unknown error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="187"/>
+ <source>Unknown error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="133"/>
+ <source>Path conversion error</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngine</name>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="429"/>
+ <location filename="../../CopyEngine.cpp" line="451"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="462"/>
+ <location filename="../../CopyEngine.cpp" line="484"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="508"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="717"/>
+ <source>The mode has been forced previously. This is an internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1047"/>
+ <location filename="../../CopyEngine.cpp" line="1050"/>
+ <location filename="../../CopyEngine.cpp" line="1055"/>
+ <location filename="../../CopyEngine.cpp" line="1059"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1048"/>
+ <location filename="../../CopyEngine.cpp" line="1052"/>
+ <location filename="../../CopyEngine.cpp" line="1056"/>
+ <location filename="../../CopyEngine.cpp" line="1060"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1051"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1053"/>
+ <location filename="../../CopyEngine.cpp" line="1065"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1057"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1061"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1062"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1063"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1064"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1067"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1068"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1069"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1170"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineFactory</name>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="412"/>
+ <location filename="../../CopyEngineFactory.cpp" line="415"/>
+ <location filename="../../CopyEngineFactory.cpp" line="420"/>
+ <location filename="../../CopyEngineFactory.cpp" line="424"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="413"/>
+ <location filename="../../CopyEngineFactory.cpp" line="417"/>
+ <location filename="../../CopyEngineFactory.cpp" line="421"/>
+ <location filename="../../CopyEngineFactory.cpp" line="425"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="416"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="418"/>
+ <location filename="../../CopyEngineFactory.cpp" line="430"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="422"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="426"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="427"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="428"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="429"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="432"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="433"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="485"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="524"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DiskSpace</name>
+ <message>
+ <location filename="../../DiskSpace.ui" line="14"/>
+ <source>Disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="24"/>
+ <source>You need more space on this drive to finish this transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="49"/>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.ui" line="56"/>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../DiskSpace.cpp" line="23"/>
+ <source>Drives %1 have %2 available but need %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileErrorDialog</name>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="54"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileErrorDialog.cpp" line="57"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileExistsDialog</name>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="131"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="141"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="226"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="105"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="115"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="182"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="61"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="69"/>
+ <source>Apply on:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string matches with the regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>Whole string must match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="51"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="116"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="126"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="187"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1447"/>
+ <location filename="../../ListThread.cpp" line="2369"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1454"/>
+ <location filename="../../ListThread.cpp" line="2376"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1470"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1477"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1486"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1495"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1501"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1557"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1565"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="142"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="155"/>
+ <source>The source folder don&apos;t exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="183"/>
+ <source>Unable to temporary rename the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="206"/>
+ <source>Unable to do the final real move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="232"/>
+ <source>Unable to move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="275"/>
+ <source>Unable to remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="55"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="184"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="192"/>
+ <location filename="../../ReadThread.cpp" line="408"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="233"/>
+ <location filename="../../ReadThread.cpp" line="456"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="265"/>
+ <source>Blacklisted folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="327"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="393"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="337"/>
+ <location filename="../../ScanFileOrFolder.cpp" line="403"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="441"/>
+ <source>This is not a folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="443"/>
+ <source>The folder does exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="445"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="456"/>
+ <source>Problem with name encoding</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="235"/>
+ <location filename="../../TransferThread.cpp" line="663"/>
+ <location filename="../../TransferThread.cpp" line="735"/>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <source>File not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="336"/>
+ <location filename="../../TransferThread.cpp" line="353"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="408"/>
+ <location filename="../../TransferThread.cpp" line="431"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="572"/>
+ <source>Drive %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="574"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="578"/>
+ <source>root</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="631"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="641"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="701"/>
+ <location filename="../../TransferThread.cpp" line="816"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="741"/>
+ <location filename="../../TransferThread.cpp" line="828"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="777"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="822"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1124"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1213"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1227"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1238"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1303"/>
+ <location filename="../../TransferThread.cpp" line="1321"/>
+ <location filename="../../TransferThread.cpp" line="1336"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="219"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread&