summaryrefslogtreecommitdiff
path: root/plugins-unmaintained
diff options
context:
space:
mode:
Diffstat (limited to 'plugins-unmaintained')
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/AvancedQFile.cpp208
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/AvancedQFile.h45
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/CompilerInfo.h1
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine-collision-and-error.cpp568
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.cpp1261
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.h386
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.pro106
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.pro.user.4.8-pre1288
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngineFactory.cpp715
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngineFactory.h135
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngineUltracopierVariable.h45
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/DebugDialog.cpp56
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/DebugDialog.h41
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/DebugEngineMacro.h28
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/DiskSpace.cpp53
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/DiskSpace.h29
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/DiskSpace.ui68
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/DriveManagement.cpp105
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/DriveManagement.h34
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Environment.h11
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/FileErrorDialog.cpp163
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/FileErrorDialog.h51
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/FileExistsDialog.cpp240
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/FileExistsDialog.h60
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/FileIsSameDialog.cpp190
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/FileIsSameDialog.h57
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/FilterRules.cpp193
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/FilterRules.h46
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/FilterRules.ui162
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Filters.cpp460
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Filters.h45
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Filters.ui194
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/FolderExistsDialog.cpp202
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/FolderExistsDialog.h57
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/ar/translation.qmbin0 -> 327 bytes
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/ar/translation.ts1291
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/de/translation.qmbin0 -> 26769 bytes
-rw-r--r--plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/de/translation.ts1292
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/el/translation.qmbin0 -> 327 bytes
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/el/translation.ts1291
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/en/translation.qmbin0 -> 334 bytes
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/en/translation.ts1291
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/es/translation.qmbin0 -> 22315 bytes
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/es/translation.ts1291
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/fr/translation.qmbin0 -> 24417 bytes
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/fr/translation.ts1292
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/hi/translation.qmbin0 -> 327 bytes
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/hi/translation.ts1291
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/hu/translation.qmbin0 -> 20586 bytes
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/hu/translation.ts1291
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/id/translation.qmbin0 -> 327 bytes
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/id/translation.ts1291
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/it/translation.qmbin0 -> 17126 bytes
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/it/translation.ts1297
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/ja/translation.qmbin0 -> 327 bytes
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/ja/translation.ts1291
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/ko/translation.qmbin0 -> 3219 bytes
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/ko/translation.ts1291
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/nl/translation.qmbin0 -> 327 bytes
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/nl/translation.ts1291
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/no/translation.qmbin0 -> 327 bytes
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/no/translation.ts1291
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/pl/translation.qmbin0 -> 327 bytes
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/pl/translation.ts1291
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/pt/translation.qmbin0 -> 327 bytes
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/pt/translation.ts1291
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/ru/translation.qmbin0 -> 7450 bytes
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/ru/translation.ts1291
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/th/translation.qmbin0 -> 327 bytes
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/th/translation.ts1291
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/tr/translation.qmbin0 -> 327 bytes
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/tr/translation.ts1291
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/zh/translation.qmbin0 -> 327 bytes
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/zh/translation.ts1291
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/ListThread.cpp2430
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/ListThread.h434
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/ListThread_InodeAction.cpp64
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/MkPath.cpp517
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/MkPath.h106
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/README.md3
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/ReadThread.cpp701
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/ReadThread.h147
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/RenamingRules.cpp85
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/RenamingRules.h34
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/RenamingRules.ui134
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/ScanFileOrFolder.cpp680
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/ScanFileOrFolder.h108
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/StructEnumDefinition.h1
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/StructEnumDefinition_CopyEngine.h124
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/TransferThread.cpp2101
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/TransferThread.h292
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/WriteThread.cpp976
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/WriteThread.h160
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/copyEngineOptions.ui771
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/copyEngineResources.qrc8
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/debugDialog.ui98
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/documentation.dox39
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/fileErrorDialog.ui264
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/fileExistsDialog.ui412
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/fileIsSameDialog.ui214
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/folderExistsDialog.ui309
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/informations.xml26
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/plugin.json1
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/resources/add.pngbin0 -> 552 bytes
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/resources/edit.pngbin0 -> 623 bytes
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/resources/filter.pngbin0 -> 685 bytes
-rwxr-xr-xplugins-unmaintained/CopyEngine/Ultracopier-Qt/resources/remove.pngbin0 -> 683 bytes
-rw-r--r--plugins-unmaintained/Listener/dbus/informations.xml2
-rw-r--r--plugins-unmaintained/PluginLoader/keybinding/Languages/ar/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/PluginLoader/keybinding/Languages/de/translation.qmbin0 -> 334 bytes
-rw-r--r--plugins-unmaintained/PluginLoader/keybinding/Languages/el/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/PluginLoader/keybinding/Languages/en/translation.qmbin0 -> 334 bytes
-rw-r--r--plugins-unmaintained/PluginLoader/keybinding/Languages/es/translation.qmbin0 -> 334 bytes
-rw-r--r--plugins-unmaintained/PluginLoader/keybinding/Languages/fr/translation.qmbin0 -> 334 bytes
-rw-r--r--plugins-unmaintained/PluginLoader/keybinding/Languages/hi/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/PluginLoader/keybinding/Languages/hu/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/PluginLoader/keybinding/Languages/id/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/PluginLoader/keybinding/Languages/it/translation.qmbin0 -> 334 bytes
-rw-r--r--plugins-unmaintained/PluginLoader/keybinding/Languages/ja/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/PluginLoader/keybinding/Languages/ko/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/PluginLoader/keybinding/Languages/nl/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/PluginLoader/keybinding/Languages/no/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/PluginLoader/keybinding/Languages/pl/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/PluginLoader/keybinding/Languages/pt/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/PluginLoader/keybinding/Languages/ru/translation.qmbin0 -> 345 bytes
-rw-r--r--plugins-unmaintained/PluginLoader/keybinding/Languages/th/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/PluginLoader/keybinding/Languages/tr/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/PluginLoader/keybinding/Languages/zh/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/PluginLoader/keybinding/informations.xml2
-rw-r--r--plugins-unmaintained/SessionLoader/KDE4/informations.xml2
-rw-r--r--plugins-unmaintained/Themes/Clean/Languages/ar/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Clean/Languages/de/translation.qmbin0 -> 1094 bytes
-rw-r--r--plugins-unmaintained/Themes/Clean/Languages/el/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Clean/Languages/en/translation.qmbin0 -> 334 bytes
-rw-r--r--plugins-unmaintained/Themes/Clean/Languages/es/translation.qmbin0 -> 1015 bytes
-rw-r--r--plugins-unmaintained/Themes/Clean/Languages/fr/translation.qmbin0 -> 986 bytes
-rw-r--r--plugins-unmaintained/Themes/Clean/Languages/hi/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Clean/Languages/hu/translation.qmbin0 -> 1065 bytes
-rw-r--r--plugins-unmaintained/Themes/Clean/Languages/id/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Clean/Languages/it/translation.qmbin0 -> 983 bytes
-rw-r--r--plugins-unmaintained/Themes/Clean/Languages/ja/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Clean/Languages/ko/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Clean/Languages/nl/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Clean/Languages/no/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Clean/Languages/pl/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Clean/Languages/ru/translation.qmbin0 -> 1036 bytes
-rw-r--r--plugins-unmaintained/Themes/Clean/Languages/th/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Clean/Languages/tr/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Clean/Languages/zh/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Clean/informations.xml2
-rw-r--r--plugins-unmaintained/Themes/Teracopy/Languages/ar/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Teracopy/Languages/de/translation.qmbin0 -> 3171 bytes
-rw-r--r--plugins-unmaintained/Themes/Teracopy/Languages/el/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Teracopy/Languages/en/translation.qmbin0 -> 334 bytes
-rw-r--r--plugins-unmaintained/Themes/Teracopy/Languages/es/translation.qmbin0 -> 2972 bytes
-rw-r--r--plugins-unmaintained/Themes/Teracopy/Languages/fr/translation.qmbin0 -> 3131 bytes
-rw-r--r--plugins-unmaintained/Themes/Teracopy/Languages/hi/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Teracopy/Languages/hu/translation.qmbin0 -> 3148 bytes
-rw-r--r--plugins-unmaintained/Themes/Teracopy/Languages/id/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Teracopy/Languages/it/translation.qmbin0 -> 3129 bytes
-rw-r--r--plugins-unmaintained/Themes/Teracopy/Languages/ja/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Teracopy/Languages/ko/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Teracopy/Languages/nl/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Teracopy/Languages/no/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Teracopy/Languages/pl/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Teracopy/Languages/ru/translation.qmbin0 -> 3011 bytes
-rw-r--r--plugins-unmaintained/Themes/Teracopy/Languages/th/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Teracopy/Languages/tr/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Teracopy/Languages/zh/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Teracopy/informations.xml2
-rw-r--r--plugins-unmaintained/Themes/Windows/Languages/ar/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Windows/Languages/de/translation.qmbin0 -> 2224 bytes
-rw-r--r--plugins-unmaintained/Themes/Windows/Languages/el/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Windows/Languages/en/translation.qmbin0 -> 807 bytes
-rw-r--r--plugins-unmaintained/Themes/Windows/Languages/es/translation.qmbin0 -> 1380 bytes
-rw-r--r--plugins-unmaintained/Themes/Windows/Languages/fr/translation.qmbin0 -> 2281 bytes
-rw-r--r--plugins-unmaintained/Themes/Windows/Languages/hi/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Windows/Languages/hu/translation.qmbin0 -> 2031 bytes
-rw-r--r--plugins-unmaintained/Themes/Windows/Languages/id/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Windows/Languages/it/translation.qmbin0 -> 2249 bytes
-rw-r--r--plugins-unmaintained/Themes/Windows/Languages/ja/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Windows/Languages/ko/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Windows/Languages/nl/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Windows/Languages/no/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Windows/Languages/pl/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Windows/Languages/ru/translation.qmbin0 -> 859 bytes
-rw-r--r--plugins-unmaintained/Themes/Windows/Languages/th/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Windows/Languages/tr/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Windows/Languages/zh/translation.qmbin0 -> 327 bytes
-rw-r--r--plugins-unmaintained/Themes/Windows/informations.xml2
190 files changed, 43376 insertions, 6 deletions
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/AvancedQFile.cpp b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/AvancedQFile.cpp
new file mode 100755
index 0000000..3d867fb
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/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-unmaintained/CopyEngine/Ultracopier-Qt/AvancedQFile.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/AvancedQFile.h
new file mode 100755
index 0000000..8c3dc4a
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/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-unmaintained/CopyEngine/Ultracopier-Qt/CompilerInfo.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CompilerInfo.h
new file mode 100755
index 0000000..84625b9
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CompilerInfo.h
@@ -0,0 +1 @@
+#include "../../../CompilerInfo.h"
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine-collision-and-error.cpp b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine-collision-and-error.cpp
new file mode 100755
index 0000000..16c36ae
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine-collision-and-error.cpp
@@ -0,0 +1,568 @@
+/** \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,std::string 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,std::string errorString,ScanFileOrFolder * thread,ErrorType errorType)
+{
+ errorOnFolder(fileInfo,errorString,thread,errorType);
+}
+
+//mkpath event
+void CopyEngine::mkPathErrorOnFolderSlot(QFileInfo folder,std::string 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().toStdString());
+ 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.push_back(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: "+std::to_string(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().toStdString()+", destination: "+destination.absoluteFilePath().toStdString());
+ 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: "+std::to_string(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())
+ .toStdString()
+ );
+ alreadyExistsQueueItem newItem;
+ newItem.source=source;
+ newItem.destination=destination;
+ newItem.isSame=isSame;
+ newItem.transfer=thread;
+ newItem.scan=NULL;
+ alreadyExistsQueue.push_back(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: "+std::to_string(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 std::string &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.push_back(newItem);
+ showOneNewDialog();
+ }
+}
+
+void CopyEngine::missingDiskSpace(std::vector<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: "+std::to_string(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,std::string errorString,TransferThread * thread,const ErrorType &errorType,bool isCalledByShowOneNewDialog)
+{
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file have error: "+fileInfo.absoluteFilePath().toStdString()+", 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.push_back(newItem);
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog");
+ emit error(fileInfo.absoluteFilePath().toStdString(),fileInfo.size(),fileInfo.lastModified().toMSecsSinceEpoch()/1000,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: "+std::to_string(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().toStdString()+", destination: "+destination.absoluteFilePath().toStdString());
+ 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.push_back(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: "+std::to_string(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, std::string errorString, ScanFileOrFolder * thread, ErrorType errorType, bool isCalledByShowOneNewDialog)
+{
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file have error: "+fileInfo.absoluteFilePath().toStdString()+", 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.push_back(newItem);
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog");
+ emit error(fileInfo.absoluteFilePath().toStdString(),fileInfo.size(),fileInfo.lastModified().toMSecsSinceEpoch()/1000,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: "+std::to_string(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,std::string errorString,const ErrorType &errorType,bool isCalledByShowOneNewDialog)
+{
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file have error: "+folder.absoluteFilePath().toStdString()+", 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.push_back(newItem);
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog");
+ emit error(folder.absoluteFilePath().toStdString(),folder.size(),folder.lastModified().toMSecsSinceEpoch()/1000,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: "+std::to_string(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: "+std::to_string(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(): "+std::to_string(alreadyExistsQueue.size()));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"errorQueue.size(): "+std::to_string(errorQueue.size()));
+ int loop_size=alreadyExistsQueue.size();
+ while(loop_size>0)
+ {
+ if(alreadyExistsQueue.front().transfer!=NULL)
+ {
+ fileAlreadyExists(alreadyExistsQueue.front().source,
+ alreadyExistsQueue.front().destination,
+ alreadyExistsQueue.front().isSame,
+ alreadyExistsQueue.front().transfer,
+ true);
+ }
+ else if(alreadyExistsQueue.front().scan!=NULL)
+ folderAlreadyExists(alreadyExistsQueue.front().source,
+ alreadyExistsQueue.front().destination,
+ alreadyExistsQueue.front().isSame,
+ alreadyExistsQueue.front().scan,
+ true);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"bug, no thread actived");
+ alreadyExistsQueue.erase(alreadyExistsQueue.cbegin());
+ loop_size--;
+ }
+ loop_size=errorQueue.size();
+ while(errorQueue.size()>0 && loop_size>0)
+ {
+ if(errorQueue.front().transfer!=NULL)
+ errorOnFile(errorQueue.front().inode,errorQueue.front().errorString,errorQueue.front().transfer,errorQueue.front().errorType,true);
+ else if(errorQueue.front().scan!=NULL)
+ errorOnFolder(errorQueue.front().inode,errorQueue.front().errorString,errorQueue.front().scan,errorQueue.front().errorType,true);
+ else if(errorQueue.front().mkPath)
+ mkPathErrorOnFolder(errorQueue.front().inode,errorQueue.front().errorString,errorQueue.front().errorType,true);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"bug, no thread actived");
+ errorQueue.erase(errorQueue.cbegin());
+ loop_size--;
+ }
+}
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.cpp b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.cpp
new file mode 100755
index 0000000..d7cdb6c
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.cpp
@@ -0,0 +1,1261 @@
+/** \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
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ debugDialogWindow.show();
+ #endif
+ #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
+ #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
+ #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
+ #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
+ #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
+#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+void CopyEngine::updateTheDebugInfo(const std::vector<std::string> &newList, const std::vector<std::string> &newList2, const int &numberOfInodeOperation)
+{
+ debugDialogWindow.setTransferThreadList(newList);
+ debugDialogWindow.setTransferList(newList2);
+ debugDialogWindow.setInodeUsage(numberOfInodeOperation);
+}
+#endif
+#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: "+std::to_string(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 std::vector<std::string> &sources)
+{
+ return listThread->haveSameSource(sources);
+}
+
+bool CopyEngine::haveSameDestination(const std::string &destination)
+{
+ return listThread->haveSameDestination(destination);
+}
+
+bool CopyEngine::newCopy(const std::vector<std::string> &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,QString::fromStdString(facilityEngine->translateText("Internal error")),tr("The engine is forced to move, you can't copy with it"));
+ return false;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ std::string destination;
+ if(!defaultDestinationFolder.empty() && QDir(QString::fromStdString(defaultDestinationFolder)).exists())
+ destination = defaultDestinationFolder;
+ else
+ destination = askDestination();
+ if(destination.empty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Canceled by the user");
+ return false;
+ }
+ return listThread->newCopy(sources,destination);
+}
+
+bool CopyEngine::newCopy(const std::vector<std::string> &sources,const std::string &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,QString::fromStdString(facilityEngine->translateText("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 std::vector<std::string> &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,QString::fromStdString(facilityEngine->translateText("Internal error")),tr("The engine is forced to copy, you can't move with it"));
+ return false;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ std::string destination;
+ if(!ui->defaultDestinationFolder->text().isEmpty() && QDir(ui->defaultDestinationFolder->text()).exists())
+ destination = ui->defaultDestinationFolder->text().toStdString();
+ else
+ destination = askDestination();
+ if(destination.empty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Canceled by the user");
+ return false;
+ }
+ return listThread->newMove(sources,destination);
+}
+
+bool CopyEngine::newMove(const std::vector<std::string> &sources,const std::string &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,QString::fromStdString(facilityEngine->translateText("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()
+{
+ std::string destination = askDestination();
+ if(destination.empty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Canceled by the user");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(uiIsInstalled)
+ ui->defaultDestinationFolder->setText(QString::fromStdString(destination));
+}
+
+std::string CopyEngine::askDestination()
+{
+ std::string destination = listThread->getUniqueDestinationFolder();
+ if(!destination.empty())
+ {
+ QMessageBox::StandardButton button=QMessageBox::question(interface,tr("Destination"),tr("Use the actual destination \"%1\"?")
+ .arg(QString::fromStdString(destination)),
+ QMessageBox::Yes | QMessageBox::No,QMessageBox::Yes);
+ if(button==QMessageBox::Yes)
+ return destination;
+ }
+ destination=QFileDialog::getExistingDirectory(interface,QString::fromStdString(facilityEngine->translateText("Select destination directory")),QStringLiteral(""),QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks).toStdString();
+ return destination;
+}
+
+void CopyEngine::newTransferList(const std::string &file)
+{
+ emit signal_importTransferList(file);
+}
+
+//because direct access to list thread into the main thread can't be do
+uint64_t 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(std::vector<std::string> includeStrings,std::vector<std::string> includeOptions,std::vector<std::string> excludeStrings,std::vector<std::string> 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(std::string firstRenamingRule,std::string otherRenamingRule)
+{
+ sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
+}
+
+bool CopyEngine::userAddFolder(const Ultracopier::CopyMode &mode)
+{
+ std::string source = QFileDialog::getExistingDirectory(interface,QString::fromStdString(facilityEngine->translateText("Select source directory")),
+ QStringLiteral(""),
+ QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks).toStdString();
+ if(source.empty() || source=="")
+ return false;
+ std::vector<std::string> sources;
+ sources.push_back(source);
+ if(mode==Ultracopier::Copy)
+ return newCopy(sources);
+ else
+ return newMove(sources);
+}
+
+bool CopyEngine::userAddFile(const Ultracopier::CopyMode &mode)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start");
+ QStringList sources = QFileDialog::getOpenFileNames(
+ interface,
+ QString::fromStdString(facilityEngine->translateText("Select one or more files to open")),
+ QStringLiteral(""),
+ QString::fromStdString(facilityEngine->translateText("All files"))+QStringLiteral(" (*)"));
+
+ std::vector<std::string> sourcesstd;
+ unsigned int index=0;
+ while(index<(unsigned int)sources.size())
+ {
+ sourcesstd.push_back(sources.at(index).toStdString());
+ index++;
+ }
+
+ if(sourcesstd.empty())
+ return false;
+ if(mode==Ultracopier::Copy)
+ return newCopy(sourcesstd);
+ else
+ return newMove(sourcesstd);
+}
+
+void CopyEngine::pause()
+{
+ emit signal_pause();
+}
+
+void CopyEngine::resume()
+{
+ emit signal_resume();
+}
+
+void CopyEngine::skip(const uint64_t &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 std::vector<uint64_t> &ids)
+{
+ emit signal_removeItems(ids);
+}
+
+void CopyEngine::moveItemsOnTop(const std::vector<uint64_t> &ids)
+{
+ emit signal_moveItemsOnTop(ids);
+}
+
+void CopyEngine::moveItemsUp(const std::vector<uint64_t> &ids)
+{
+ emit signal_moveItemsUp(ids);
+}
+
+void CopyEngine::moveItemsDown(const std::vector<uint64_t> &ids)
+{
+ emit signal_moveItemsDown(ids);
+}
+
+void CopyEngine::moveItemsOnBottom(const std::vector<uint64_t> &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,"Mode forced previously");
+ QMessageBox::critical(NULL,QString::fromStdString(facilityEngine->translateText("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,"Force mode to copy");
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"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()
+{
+ std::string fileName = QFileDialog::getSaveFileName(interface,QString::fromStdString(facilityEngine->translateText("Save transfer list")),QStringLiteral("transfer-list.lst"),QString::fromStdString(facilityEngine->translateText("Transfer list"))+QStringLiteral(" (*.lst)")).toStdString();
+ if(fileName.empty())
+ return;
+ emit signal_exportTransferList(fileName);
+}
+
+void CopyEngine::importTransferList()
+{
+ std::string fileName = QFileDialog::getOpenFileName(interface,QString::fromStdString(facilityEngine->translateText("Open transfer list")),QStringLiteral("transfer-list.lst"),QString::fromStdString(facilityEngine->translateText("Transfer list"))+QStringLiteral(" (*.lst)")).toStdString();
+ if(fileName.empty())
+ return;
+ emit signal_importTransferList(fileName);
+}
+
+void CopyEngine::warningTransferList(const std::string &warning)
+{
+ QMessageBox::warning(interface,QString::fromStdString(facilityEngine->translateText("Error")),QString::fromStdString(warning));
+}
+
+void CopyEngine::errorTransferList(const std::string &error)
+{
+ QMessageBox::critical(interface,QString::fromStdString(facilityEngine->translateText("Error")),QString::fromStdString(error));
+}
+
+bool CopyEngine::setSpeedLimitation(const int64_t &speedLimitation)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"maxSpeed: "+std::to_string(speedLimitation));
+ maxSpeed=speedLimitation;
+ emit send_speedLimitation(speedLimitation);
+ return true;
+}
+
+void CopyEngine::setFileCollision(int index)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"action index: "+std::to_string(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,"action index: "+std::to_string(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,"action index: "+std::to_string(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: "+std::to_string(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(std::string firstRenamingRule,std::string otherRenamingRule)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"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 std::string &defaultDestinationFolder)
+{
+ this->defaultDestinationFolder=defaultDestinationFolder;
+ if(uiIsInstalled)
+ ui->defaultDestinationFolder->setText(QString::fromStdString(defaultDestinationFolder));
+}
+
+void CopyEngine::setCopyListOrder(const bool &order)
+{
+ listThread->setCopyListOrder(order);
+}
+
+void CopyEngine::exportErrorIntoTransferList()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"exportErrorIntoTransferList");
+ std::string fileName = QFileDialog::getSaveFileName(interface,QString::fromStdString(facilityEngine->translateText("Save transfer list")),QStringLiteral("transfer-list.lst"),QString::fromStdString(facilityEngine->translateText("Transfer list"))+QStringLiteral(" (*.lst)")).toStdString();
+ if(fileName.empty())
+ return;
+ emit signal_exportErrorIntoTransferList(fileName);
+}
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.h
new file mode 100755
index 0000000..7b0ce36
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.h
@@ -0,0 +1,386 @@
+/** \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 <vector>
+#include <string>
+#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
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ DebugDialog debugDialogWindow;
+ #endif
+ #endif
+ QWidget * tempWidget;
+ Ui::copyEngineOptions * ui;
+ bool uiIsInstalled;
+ QWidget * interface;
+ Filters * filters;
+ RenamingRules * renamingRules;
+ FacilityInterface * facilityEngine;
+ uint32_t 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;
+ std::string 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;
+ std::string errorString;
+ ErrorType errorType;
+ };
+ std::vector<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;
+ };
+ std::vector<alreadyExistsQueueItem> alreadyExistsQueue;
+ uint64_t 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;
+ std::vector<std::string> includeStrings,includeOptions,excludeStrings,excludeOptions;
+ std::string firstRenamingRule;
+ std::string 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
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ void updateTheDebugInfo(const std::vector<std::string> &newList, const std::vector<std::string> &newList2, const int &numberOfInodeOperation);
+ #endif
+ #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, std::string 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, std::string errorString, ScanFileOrFolder * thread, ErrorType errorType);
+ //mkpath event
+ void mkPathErrorOnFolderSlot(QFileInfo, std::string, 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, std::string 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, std::string errorString, ScanFileOrFolder * thread, ErrorType errorType, bool isCalledByShowOneNewDialog=false);
+ //mkpath event
+ void mkPathErrorOnFolder(QFileInfo, std::string, 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(std::string firstRenamingRule,std::string otherRenamingRule);
+ void showRenamingRules();
+ void get_realBytesTransfered(quint64 realBytesTransfered);
+ void newActionInProgess(Ultracopier::EngineActionInProgress);
+ void updatedBlockSize();
+ void updateBufferCheckbox();
+ void haveNeedPutAtBottom(bool needPutAtBottom, const QFileInfo &fileInfo, const std::string &errorString, TransferThread *thread, const ErrorType &errorType);
+ void missingDiskSpace(std::vector<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 std::vector<std::string> &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 std::string &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 std::vector<std::string> &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 std::vector<std::string> &sources,const std::string &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 std::vector<std::string> &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 std::vector<std::string> &sources,const std::string &destination);
+ /** \brief send the new transfer list
+ * \param file the transfer list */
+ void newTransferList(const std::string &file);
+
+ /** \brief to get byte read, use by Ultracopier for the speed calculation
+ * real size transfered to right speed calculation */
+ uint64_t 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(std::vector<std::string> includeStrings,std::vector<std::string> includeOptions,std::vector<std::string> excludeStrings,std::vector<std::string> excludeOptions);
+ void setRenamingRules(std::string firstRenamingRule,std::string otherRenamingRule);
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ void setRsync(const bool rsync);
+ #endif
+ void setCheckDiskSpace(const bool &checkDiskSpace);
+ void setDefaultDestinationFolder(const std::string &defaultDestinationFolder);
+ void setCopyListOrder(const bool &order);
+ void defaultDestinationFolderBrowse();
+ std::string 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 uint64_t &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 std::vector<uint64_t> &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 std::vector<uint64_t> &ids);
+ /** \brief move up the list the selected item
+ * \param ids ids is the id list of the selected items */
+ void moveItemsUp(const std::vector<uint64_t> &ids);
+ /** \brief move down the list the selected item
+ * \param ids ids is the id list of the selected items */
+ void moveItemsDown(const std::vector<uint64_t> &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 std::vector<uint64_t> &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 int64_t &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 std::string &warning);
+ void errorTransferList(const std::string &error);
+signals:
+ //action on the copy
+ void signal_pause() const;
+ void signal_resume() const;
+ void signal_skip(const uint64_t &id) const;
+
+ //edit the transfer list
+ void signal_removeItems(const std::vector<uint64_t> &ids) const;
+ void signal_moveItemsOnTop(const std::vector<uint64_t> &ids) const;
+ void signal_moveItemsUp(const std::vector<uint64_t> &ids) const;
+ void signal_moveItemsDown(const std::vector<uint64_t> &ids) const;
+ void signal_moveItemsOnBottom(const std::vector<uint64_t> &ids) const;
+
+ void signal_forceMode(const Ultracopier::CopyMode &mode) const;
+ void signal_exportTransferList(const std::string &fileName) const;
+ void signal_importTransferList(const std::string &fileName) const;
+ void signal_exportErrorIntoTransferList(const std::string &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 std::string &errorString,TransferThread * thread,const ErrorType &errorType) const;
+
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ /// \brief To debug source
+ void debugInformation(const Ultracopier::DebugLevel &level,std::string fonction,std::string text,std::string file,int ligne) const;
+ #endif
+
+ //other signals
+ void queryOneNewDialog() const;
+
+ void send_speedLimitation(const uint64_t &speedLimitation) const;
+ void send_blockSize(const int &blockSize) const;
+ void send_osBufferLimit(const unsigned int &osBufferLimit) const;
+ void send_setFilters(const std::vector<Filters_rules> &include,const std::vector<Filters_rules> &exclude) const;
+ void send_sendNewRenamingRules(std::string firstRenamingRule,std::string 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-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.pro b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.pro
new file mode 100755
index 0000000..a529e1f
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.pro
@@ -0,0 +1,106 @@
+CONFIG += c++11
+QMAKE_CXXFLAGS+="-std=c++0x -Wall -Wextra"
+mac:QMAKE_CXXFLAGS+="-stdlib=libc++"
+
+QT += widgets xml
+DEFINES += UNICODE _UNICODE
+TEMPLATE = lib
+CONFIG += plugin
+win32 {
+ LIBS += -ladvapi32
+}
+
+HEADERS = \
+ $$PWD/StructEnumDefinition.h \
+ $$PWD/StructEnumDefinition_CopyEngine.h \
+ $$PWD/DebugEngineMacro.h \
+ $$PWD/CopyEngineUltracopierVariable.h \
+ $$PWD/TransferThread.h \
+ $$PWD/ReadThread.h \
+ $$PWD/WriteThread.h \
+ $$PWD/MkPath.h \
+ $$PWD/AvancedQFile.h \
+ $$PWD/ListThread.h \
+ $$PWD/../../../interface/PluginInterface_CopyEngine.h \
+ $$PWD/../../../interface/OptionInterface.h \
+ $$PWD/../../../interface/FacilityInterface.h \
+ $$PWD/../../../cpp11addition.h \
+ $$PWD/Filters.h \
+ $$PWD/FilterRules.h \
+ $$PWD/RenamingRules.h \
+ $$PWD/DriveManagement.h \
+ $$PWD/CopyEngine.h \
+ $$PWD/DebugDialog.h \
+ $$PWD/CopyEngineFactory.h \
+ $$PWD/FileErrorDialog.h \
+ $$PWD/FileExistsDialog.h \
+ $$PWD/FileIsSameDialog.h \
+ $$PWD/FolderExistsDialog.h \
+ $$PWD/ScanFileOrFolder.h \
+ $$PWD/DiskSpace.h
+SOURCES = \
+ $$PWD/TransferThread.cpp \
+ $$PWD/ReadThread.cpp \
+ $$PWD/WriteThread.cpp \
+ $$PWD/MkPath.cpp \
+ $$PWD/AvancedQFile.cpp \
+ $$PWD/ListThread.cpp \
+ $$PWD/../../../cpp11addition.cpp \
+ $$PWD/../../../cpp11additionstringtointcpp.cpp \
+ $$PWD/Filters.cpp \
+ $$PWD/FilterRules.cpp \
+ $$PWD/RenamingRules.cpp \
+ $$PWD/ListThread_InodeAction.cpp \
+ $$PWD/DriveManagement.cpp \
+ $$PWD/CopyEngine-collision-and-error.cpp \
+ $$PWD/CopyEngine.cpp \
+ $$PWD/DebugDialog.cpp \
+ $$PWD/CopyEngineFactory.cpp \
+ $$PWD/FileErrorDialog.cpp \
+ $$PWD/FileExistsDialog.cpp \
+ $$PWD/FileIsSameDialog.cpp \
+ $$PWD/FolderExistsDialog.cpp \
+ $$PWD/ScanFileOrFolder.cpp \
+ $$PWD/DiskSpace.cpp
+TARGET = $$qtLibraryTarget(copyEngine)
+TRANSLATIONS += \
+ $$PWD/Languages/ar/translation.ts \
+ $$PWD/Languages/de/translation.ts \
+ $$PWD/Languages/el/translation.ts \
+ $$PWD/Languages/en/translation.ts \
+ $$PWD/Languages/es/translation.ts \
+ $$PWD/Languages/fr/translation.ts \
+ $$PWD/Languages/hi/translation.ts \
+ $$PWD/Languages/hu/translation.ts \
+ $$PWD/Languages/id/translation.ts \
+ $$PWD/Languages/it/translation.ts \
+ $$PWD/Languages/ja/translation.ts \
+ $$PWD/Languages/ko/translation.ts \
+ $$PWD/Languages/nl/translation.ts \
+ $$PWD/Languages/no/translation.ts \
+ $$PWD/Languages/pl/translation.ts \
+ $$PWD/Languages/pt/translation.ts \
+ $$PWD/Languages/ru/translation.ts \
+ $$PWD/Languages/th/translation.ts \
+ $$PWD/Languages/tr/translation.ts \
+ $$PWD/Languages/zh/translation.ts
+
+FORMS += \
+ $$PWD/fileErrorDialog.ui \
+ $$PWD/fileExistsDialog.ui \
+ $$PWD/fileIsSameDialog.ui \
+ $$PWD/debugDialog.ui \
+ $$PWD/folderExistsDialog.ui \
+ $$PWD/Filters.ui \
+ $$PWD/FilterRules.ui \
+ $$PWD/RenamingRules.ui \
+ $$PWD/copyEngineOptions.ui \
+ $$PWD/DiskSpace.ui
+
+OTHER_FILES += \
+ $$PWD/informations.xml
+
+!CONFIG(static) {
+RESOURCES += \
+ $$PWD/copyEngineResources.qrc
+}
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.pro.user.4.8-pre1 b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.pro.user.4.8-pre1
new file mode 100755
index 0000000..4ed3507
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.pro.user.4.8-pre1
@@ -0,0 +1,288 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QtCreatorProject>
+<!-- Written by QtCreator 4.6.2, 2019-07-02T23:09:58. -->
+<qtcreator>
+ <data>
+ <variable>EnvironmentId</variable>
+ <value type="QByteArray">{74ab603f-f657-4135-92cf-c93af71b2f91}</value>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.ActiveTarget</variable>
+ <value type="int">0</value>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.EditorSettings</variable>
+ <valuemap type="QVariantMap">
+ <value type="bool" key="EditorConfiguration.AutoIndent">true</value>
+ <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
+ <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
+ <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
+ <value type="QString" key="language">Cpp</value>
+ <valuemap type="QVariantMap" key="value">
+ <value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
+ </valuemap>
+ </valuemap>
+ <value type="int" key="EditorConfiguration.CodeStyle.Count">1</value>
+ <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
+ <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
+ <value type="int" key="EditorConfiguration.IndentSize">4</value>
+ <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
+ <value type="int" key="EditorConfiguration.MarginColumn">80</value>
+ <value type="bool" key="EditorConfiguration.MouseHiding">true</value>
+ <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
+ <value type="int" key="EditorConfiguration.PaddingMode">1</value>
+ <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
+ <value type="bool" key="EditorConfiguration.ShowMargin">false</value>
+ <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
+ <value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
+ <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
+ <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
+ <value type="int" key="EditorConfiguration.TabSize">8</value>
+ <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
+ <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
+ <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
+ <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
+ <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
+ <value type="bool" key="EditorConfiguration.inEntireDocument">true</value>
+ </valuemap>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.PluginSettings</variable>
+ <valuemap type="QVariantMap"/>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.Target.0</variable>
+ <valuemap type="QVariantMap">
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{23178a1c-09be-4e9f-9aab-ff55e05e7637}</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
+ <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/user/Desktop/ultracopier/sources/plugins/CopyEngine/build-CopyEngine-Desktop-Debug</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
+ <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
+ <value type="QString">-w</value>
+ <value type="QString">-r</value>
+ </valuelist>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">-j4</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
+ <value type="QString">-w</value>
+ <value type="QString">-r</value>
+ </valuelist>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
+ <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
+ <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/user/Desktop/ultracopier/sources/plugins/CopyEngine/build-CopyEngine-Desktop-Release</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
+ <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">true</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
+ <value type="QString">-w</value>
+ <value type="QString">-r</value>
+ </valuelist>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
+ <value type="QString">-w</value>
+ <value type="QString">-r</value>
+ </valuelist>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
+ <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
+ <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/user/Desktop/ultracopier/sources/plugins/CopyEngine/build-CopyEngine-Desktop-Profile</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
+ <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">true</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
+ <value type="QString">-w</value>
+ <value type="QString">-r</value>
+ </valuelist>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
+ <value type="QString">-w</value>
+ <value type="QString">-r</value>
+ </valuelist>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
+ <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy Configuration</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
+ <value type="int" key="PE.EnvironmentAspect.Base">2</value>
+ <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
+ <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Arguments"></value>
+ <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
+ <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.WorkingDirectory"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
+ <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
+ <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
+ <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
+ <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
+ <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
+ <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
+ </valuemap>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.TargetCount</variable>
+ <value type="int">1</value>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
+ <value type="int">18</value>
+ </data>
+ <data>
+ <variable>Version</variable>
+ <value type="int">18</value>
+ </data>
+</qtcreator>
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngineFactory.cpp b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngineFactory.cpp
new file mode 100755
index 0000000..cb89371
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngineFactory.cpp
@@ -0,0 +1,715 @@
+/** \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 "../../../cpp11addition.h"
+#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");
+ qRegisterMetaType<std::vector<Filters_rules> >("std::vector<Filters_rules>");
+
+ 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().toStdString());
+ realObject->setCopyListOrder(ui->copyListOrder->isChecked());
+ return newTransferEngine;
+}
+
+void CopyEngineFactory::setResources(OptionInterface * options,const std::string &writePath,const std::string &pluginPath,
+ FacilityInterface * facilityInterface,const bool &portableVersion)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start, writePath: "+writePath+", 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,"CHECK LIST TYPE set");
+ #else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"CHECK LIST TYPE not set");
+ #endif
+ if(options!=NULL)
+ {
+ //load the options
+ std::vector<std::pair<std::string, std::string> > KeysList;
+ KeysList.push_back(std::pair<std::string, std::string>("doRightTransfer","true"));
+ #ifndef Q_OS_LINUX
+ KeysList.push_back(std::pair<std::string, std::string>("keepDate","false"));
+ #else
+ KeysList.push_back(std::pair<std::string, std::string>("keepDate","true"));
+ #endif
+ KeysList.push_back(std::pair<std::string, std::string>("blockSize",std::to_string(ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE)));
+ uint32_t sequentialBuffer=ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE*ULTRACOPIER_PLUGIN_DEFAULT_SEQUENTIAL_NUMBER_OF_BLOCK;
+ uint32_t 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(max_memory>2147483648)
+ max_memory=2147483648;
+ 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).toStdString());
+ #endif
+ KeysList.push_back(std::pair<std::string, std::string>("sequentialBuffer",std::to_string(sequentialBuffer)));
+ KeysList.push_back(std::pair<std::string, std::string>("parallelBuffer",std::to_string(parallelBuffer)));
+ KeysList.push_back(std::pair<std::string, std::string>("parallelizeIfSmallerThan",std::to_string(128)));//128KB, better for modern hardware: Multiple queue en linux, SSD, ...
+ KeysList.push_back(std::pair<std::string, std::string>("autoStart","true"));
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ KeysList.push_back(std::pair<std::string, std::string>("rsync","true"));
+ #endif
+ KeysList.push_back(std::pair<std::string, std::string>("folderError",std::to_string(0)));
+ KeysList.push_back(std::pair<std::string, std::string>("folderCollision",std::to_string(0)));
+ KeysList.push_back(std::pair<std::string, std::string>("fileError",std::to_string(2)));
+ KeysList.push_back(std::pair<std::string, std::string>("fileCollision",std::to_string(0)));
+ KeysList.push_back(std::pair<std::string, std::string>("transferAlgorithm",std::to_string(0)));
+ KeysList.push_back(std::pair<std::string, std::string>("checkDestinationFolder","true"));
+ KeysList.push_back(std::pair<std::string, std::string>("includeStrings",""));
+ KeysList.push_back(std::pair<std::string, std::string>("includeOptions",""));
+ KeysList.push_back(std::pair<std::string, std::string>("excludeStrings",""));
+ KeysList.push_back(std::pair<std::string, std::string>("excludeOptions",""));
+ KeysList.push_back(std::pair<std::string, std::string>("doChecksum","false"));
+ KeysList.push_back(std::pair<std::string, std::string>("checksumIgnoreIfImpossible","true"));
+ KeysList.push_back(std::pair<std::string, std::string>("checksumOnlyOnError","true"));
+ KeysList.push_back(std::pair<std::string, std::string>("osBuffer","false"));
+ KeysList.push_back(std::pair<std::string, std::string>("firstRenamingRule",""));
+ KeysList.push_back(std::pair<std::string, std::string>("otherRenamingRule",""));
+ KeysList.push_back(std::pair<std::string, std::string>("osBufferLimited","false"));
+ KeysList.push_back(std::pair<std::string, std::string>("osBufferLimit",std::to_string(512)));
+ KeysList.push_back(std::pair<std::string, std::string>("deletePartiallyTransferredFiles","true"));
+ KeysList.push_back(std::pair<std::string, std::string>("moveTheWholeFolder","true"));
+ KeysList.push_back(std::pair<std::string, std::string>("followTheStrictOrder","false"));
+ KeysList.push_back(std::pair<std::string, std::string>("renameTheOriginalDestination","false"));
+ KeysList.push_back(std::pair<std::string, std::string>("checkDiskSpace","true"));
+ KeysList.push_back(std::pair<std::string, std::string>("defaultDestinationFolder",""));
+ KeysList.push_back(std::pair<std::string, std::string>("inodeThreads",std::to_string(1)));
+ KeysList.push_back(std::pair<std::string, std::string>("copyListOrder","false"));
+ options->addOptionGroup(KeysList);
+
+ optionsEngine=options;
+ resetOptions();
+
+ updateBufferCheckbox();
+
+ updatedBlockSize();
+ }
+}
+
+std::vector<std::string> CopyEngineFactory::supportedProtocolsForTheSource() const
+{
+ std::vector<std::string> l;
+ l.push_back("file");
+ return l;
+}
+
+std::vector<std::string> CopyEngineFactory::supportedProtocolsForTheDestination() const
+{
+ std::vector<std::string> l;
+ l.push_back("file");
+ return l;
+}
+
+Ultracopier::CopyType CopyEngineFactory::getCopyType()
+{
+ return Ultracopier::FileAndFolder;
+}
+
+Ultracopier::TransferListOperation CopyEngineFactory::getTransferListOperation()
+{
+ return Ultracopier::TransferListOperation_ImportExport;
+}
+
+bool CopyEngineFactory::canDoOnlyCopy() const
+{
+ return false;
+}
+
+void CopyEngineFactory::resetOptions()
+{
+ auto options=optionsEngine;
+ optionsEngine=NULL;
+ #if ! defined (Q_CC_GNU)
+ ui->keepDate->setEnabled(false);
+ ui->keepDate->setToolTip(QStringLiteral("Not supported with this compiler"));
+ #endif
+ ui->doRightTransfer->setChecked(stringtobool(options->getOptionValue("doRightTransfer")));
+ ui->keepDate->setChecked(stringtobool(options->getOptionValue("keepDate")));
+ ui->blockSize->setValue(stringtouint32(options->getOptionValue("blockSize")));//keep before sequentialBuffer and parallelBuffer
+ ui->autoStart->setChecked(stringtobool(options->getOptionValue("autoStart")));
+ #ifdef ULTRACOPIER_PLUGIN_RSYNC
+ ui->rsync->setChecked(stringtobool(options->getOptionValue("rsync")));
+ #else
+ ui->label_rsync->setVisible(false);
+ ui->rsync->setVisible(false);
+ #endif
+ ui->comboBoxFolderError->setCurrentIndex(stringtouint32(options->getOptionValue("folderError")));
+ ui->comboBoxFolderCollision->setCurrentIndex(stringtouint32(options->getOptionValue("folderCollision")));
+ ui->comboBoxFileError->setCurrentIndex(stringtouint32(options->getOptionValue("fileError")));
+ ui->comboBoxFileCollision->setCurrentIndex(stringtouint32(options->getOptionValue("fileCollision")));
+ ui->transferAlgorithm->setCurrentIndex(stringtouint32(options->getOptionValue("transferAlgorithm")));
+ ui->checkBoxDestinationFolderExists->setChecked(stringtobool(options->getOptionValue("checkDestinationFolder")));
+ ui->parallelizeIfSmallerThan->setValue(stringtouint32(options->getOptionValue("parallelizeIfSmallerThan")));
+ ui->sequentialBuffer->setValue(stringtouint32(options->getOptionValue("sequentialBuffer")));
+ ui->parallelBuffer->setValue(stringtouint32(options->getOptionValue("parallelBuffer")));
+ ui->sequentialBuffer->setSingleStep(ui->blockSize->value());
+ ui->parallelBuffer->setSingleStep(ui->blockSize->value());
+ ui->deletePartiallyTransferredFiles->setChecked(stringtobool(options->getOptionValue("deletePartiallyTransferredFiles")));
+ ui->moveTheWholeFolder->setChecked(stringtobool(options->getOptionValue("moveTheWholeFolder")));
+ ui->followTheStrictOrder->setChecked(stringtobool(options->getOptionValue("followTheStrictOrder")));
+ ui->inodeThreads->setValue(stringtouint32(options->getOptionValue("inodeThreads")));
+ ui->renameTheOriginalDestination->setChecked(stringtobool(options->getOptionValue("renameTheOriginalDestination")));
+ ui->checkDiskSpace->setChecked(stringtobool(options->getOptionValue("checkDiskSpace")));
+ ui->defaultDestinationFolder->setText(QString::fromStdString(options->getOptionValue("defaultDestinationFolder")));
+
+ ui->doChecksum->setChecked(stringtobool(options->getOptionValue("doChecksum")));
+ ui->checksumIgnoreIfImpossible->setChecked(stringtobool(options->getOptionValue("checksumIgnoreIfImpossible")));
+ ui->checksumOnlyOnError->setChecked(stringtobool(options->getOptionValue("checksumOnlyOnError")));
+
+ ui->osBuffer->setChecked(stringtobool(options->getOptionValue("osBuffer")));
+ ui->osBufferLimited->setChecked(stringtobool(options->getOptionValue("osBufferLimited")));
+ ui->osBufferLimit->setValue(stringtouint32(options->getOptionValue("osBufferLimit")));
+ //ui->autoStart->setChecked(options->getOptionValue("autoStart").toBool());//moved from options(), wrong previous place
+ includeStrings=stringtostringlist(options->getOptionValue("includeStrings"));
+ includeOptions=stringtostringlist(options->getOptionValue("includeOptions"));
+ excludeStrings=stringtostringlist(options->getOptionValue("excludeStrings"));
+ excludeOptions=stringtostringlist(options->getOptionValue("excludeOptions"));
+ filters->setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
+ firstRenamingRule=options->getOptionValue("firstRenamingRule");
+ otherRenamingRule=options->getOptionValue("otherRenamingRule");
+ renamingRules->setRenamingRules(firstRenamingRule,otherRenamingRule);
+
+ ui->checksumOnlyOnError->setEnabled(ui->doChecksum->isChecked());
+ ui->checksumIgnoreIfImpossible->setEnabled(ui->doChecksum->isChecked());
+ ui->copyListOrder->setChecked(stringtobool(options->getOptionValue("copyListOrder")));
+
+ optionsEngine=options;
+}
+
+QWidget * CopyEngineFactory::options()
+{
+ return tempWidget;
+}
+
+/// \brief to get if have pause
+bool CopyEngineFactory::havePause()
+{
+ return true;
+}
+
+void CopyEngineFactory::setDoRightTransfer(bool doRightTransfer)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("doRightTransfer",booltostring(doRightTransfer));
+}
+
+void CopyEngineFactory::setKeepDate(bool keepDate)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("keepDate",booltostring(keepDate));
+}
+
+void CopyEngineFactory::setBlockSize(int blockSize)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("blockSize",std::to_string(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("parallelBuffer",std::to_string(parallelBuffer));
+ }
+}
+
+void CopyEngineFactory::setSequentialBuffer(int sequentialBuffer)
+{
+ if(optionsEngine!=NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ sequentialBuffer=round((float)sequentialBuffer/(float)ui->blockSize->value())*ui->blockSize->value();
+ ui->sequentialBuffer->setValue(sequentialBuffer);
+ optionsEngine->setOptionValue("sequentialBuffer",std::to_string(sequentialBuffer));
+ }
+}
+
+void CopyEngineFactory::setParallelizeIfSmallerThan(int parallelizeIfSmallerThan)
+{
+ if(optionsEngine!=NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ optionsEngine->setOptionValue("parallelizeIfSmallerThan",std::to_string(parallelizeIfSmallerThan));
+ }
+}
+
+void CopyEngineFactory::setAutoStart(bool autoStart)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("autoStart",booltostring(autoStart));
+}
+
+void CopyEngineFactory::setFolderCollision(int index)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("folderCollision",std::to_string(index));
+}
+
+void CopyEngineFactory::setFolderError(int index)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("folderError",std::to_string(index));
+}
+
+void CopyEngineFactory::setTransferAlgorithm(int index)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("transferAlgorithm",std::to_string(index));
+}
+
+void CopyEngineFactory::setCheckDestinationFolder()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("checkDestinationFolder",booltostring(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("doChecksum",booltostring(doChecksum));
+}
+
+void CopyEngineFactory::checksumOnlyOnError_toggled(bool checksumOnlyOnError)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("checksumOnlyOnError",booltostring(checksumOnlyOnError));
+}
+
+void CopyEngineFactory::osBuffer_toggled(bool osBuffer)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("osBuffer",booltostring(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("osBufferLimited",booltostring(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("osBufferLimit",std::to_string(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 std::vector<std::string> &includeStrings,const std::vector<std::string> &includeOptions,const std::vector<std::string> &excludeStrings,const std::vector<std::string> &excludeOptions)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"new filter");
+ this->includeStrings=includeStrings;
+ this->includeOptions=includeOptions;
+ this->excludeStrings=excludeStrings;
+ this->excludeOptions=excludeOptions;
+ if(optionsEngine!=NULL)
+ {
+ optionsEngine->setOptionValue("includeStrings",stringlisttostring(includeStrings));
+ optionsEngine->setOptionValue("includeOptions",stringlisttostring(includeOptions));
+ optionsEngine->setOptionValue("excludeStrings",stringlisttostring(excludeStrings));
+ optionsEngine->setOptionValue("excludeOptions",stringlisttostring(excludeOptions));
+ }
+}
+
+void CopyEngineFactory::sendNewRenamingRules(const std::string &firstRenamingRule,const std::string &otherRenamingRule)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"new filter");
+ this->firstRenamingRule=firstRenamingRule;
+ this->otherRenamingRule=otherRenamingRule;
+ if(optionsEngine!=NULL)
+ {
+ optionsEngine->setOptionValue("firstRenamingRule",firstRenamingRule);
+ optionsEngine->setOptionValue("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("checksumIgnoreIfImpossible",booltostring(checksumIgnoreIfImpossible));
+}
+
+void CopyEngineFactory::setFileCollision(int index)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"action index: "+std::to_string(index));
+ if(optionsEngine==NULL)
+ return;
+ switch(index)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ optionsEngine->setOptionValue("fileCollision",std::to_string(index));
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored");
+ break;
+ }
+}
+
+void CopyEngineFactory::setFileError(int index)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"action index: "+std::to_string(index));
+ if(optionsEngine==NULL)
+ return;
+ switch(index)
+ {
+ case 0:
+ case 1:
+ case 2:
+ optionsEngine->setOptionValue("fileError",std::to_string(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("deletePartiallyTransferredFiles",booltostring(checked));
+}
+
+void CopyEngineFactory::renameTheOriginalDestination(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("renameTheOriginalDestination",booltostring(checked));
+}
+
+void CopyEngineFactory::checkDiskSpace(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("checkDiskSpace",booltostring(checked));
+}
+
+void CopyEngineFactory::defaultDestinationFolderBrowse()
+{
+ QString destination = QFileDialog::getExistingDirectory(ui->defaultDestinationFolder,
+ QString::fromStdString(facilityEngine->translateText("Select destination directory")),
+ "",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("defaultDestinationFolder",destination.toStdString());
+}
+
+void CopyEngineFactory::defaultDestinationFolder()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("defaultDestinationFolder",ui->defaultDestinationFolder->text().toStdString());
+}
+
+void CopyEngineFactory::followTheStrictOrder(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("followTheStrictOrder",booltostring(checked));
+}
+
+void CopyEngineFactory::moveTheWholeFolder(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("moveTheWholeFolder",booltostring(checked));
+}
+
+void CopyEngineFactory::on_inodeThreads_editingFinished()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the spinbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("inodeThreads",std::to_string(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",std::to_string(rsync));
+}
+#endif
+
+void CopyEngineFactory::copyListOrder(bool checked)
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("copyListOrder",booltostring(checked));
+}
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngineFactory.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngineFactory.h
new file mode 100755
index 0000000..e761f4e
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngineFactory.h
@@ -0,0 +1,135 @@
+/** \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 std::string &writePath,const std::string &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
+ std::vector<std::string> supportedProtocolsForTheSource() const;
+ /// \brief to get the supported protocols for the destination
+ std::vector<std::string> supportedProtocolsForTheDestination() const;
+ /// \brief to get the options of the copy engine
+ QWidget * options();
+ /// \brief to get if have pause
+ bool havePause();
+
+private:
+ Ui::copyEngineOptions *ui;
+ QWidget* tempWidget;
+ OptionInterface * optionsEngine;
+ bool errorFound;
+ FacilityInterface * facilityEngine;
+ Filters *filters;
+ RenamingRules *renamingRules;
+ QStorageInfo storageInfo;
+ QTimer lunchInitFunction;
+ std::vector<std::string> includeStrings,includeOptions,excludeStrings,excludeOptions;
+ std::string 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 std::vector<std::string> &includeStrings,const std::vector<std::string> &includeOptions,
+ const std::vector<std::string> &excludeStrings,const std::vector<std::string> &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 std::string &firstRenamingRule, const std::string &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-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngineUltracopierVariable.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngineUltracopierVariable.h
new file mode 100755
index 0000000..3311483
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngineUltracopierVariable.h
@@ -0,0 +1,45 @@
+/** \file Variable.h
+\brief Define the environment variable
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef VARIABLE_H
+#define VARIABLE_H
+
+//Un-comment this next line to put ultracopier plugin in debug mode
+#ifndef ULTRACOPIER_NODEBUG
+#define ULTRACOPIER_PLUGIN_DEBUG
+//#define ULTRACOPIER_PLUGIN_DEBUG_SCHEDULER
+#define ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+#define ULTRACOPIER_PLUGIN_DEBUG_WINDOW_TIMER 150
+#endif
+
+#define ULTRACOPIER_PLUGIN_MINTIMERINTERVAL 50
+#define ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL 100
+#define ULTRACOPIER_PLUGIN_NUMSEMSPEEDMANAGEMENT 2
+#define ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER 1
+#define ULTRACOPIER_PLUGIN_MINIMALYEAR 1995
+#define ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE 256 //in KB
+#define ULTRACOPIER_PLUGIN_DEFAULT_SEQUENTIAL_NUMBER_OF_BLOCK 512
+#define ULTRACOPIER_PLUGIN_DEFAULT_PARALLEL_NUMBER_OF_BLOCK 4 //in KB
+#define ULTRACOPIER_PLUGIN_MAX_BLOCK_SIZE 16*1024 //in KB
+#define ULTRACOPIER_PLUGIN_MAX_SEQUENTIAL_NUMBER_OF_BLOCK 2048
+#define ULTRACOPIER_PLUGIN_MAX_PARALLEL_NUMBER_OF_BLOCK 128 //in KB
+
+//if set, check the inode type at scanFileOrFolder, deprecated into the new algorithm and not used
+#define ULTRACOPIER_PLUGIN_CHECKLISTTYPE
+
+#define ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+//#define ULTRACOPIER_PLUGIN_RIGHTS
+
+/** \brief Need be greater than 2, but greater than 20 to be efficient */
+#define ULTRACOPIER_PLUGIN_TIME_UPDATE_TRASNFER_LIST 40
+#define ULTRACOPIER_PLUGIN_TIME_UPDATE_PROGRESSION 200
+#define ULTRACOPIER_PLUGIN_TIME_UPDATE_MOUNT_MS 60*1000
+
+//#define ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY
+
+#endif // VARIABLE_H
+
+
+
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DebugDialog.cpp b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DebugDialog.cpp
new file mode 100755
index 0000000..8bc559d
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DebugDialog.cpp
@@ -0,0 +1,56 @@
+/** \file debugDialog.cpp
+\brief Define the dialog to have debug information
+\author alpha_one_x86 */
+
+#include "DebugDialog.h"
+
+#ifdef ULTRACOPIER_PLUGIN_DEBUG
+#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+#include "ui_debugDialog.h"
+
+DebugDialog::DebugDialog(QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::debugDialog)
+{
+ ui->setupUi(this);
+}
+
+DebugDialog::~DebugDialog()
+{
+ delete ui;
+}
+
+void DebugDialog::setTransferList(const std::vector<std::string> &list)
+{
+ ui->tranferList->clear();
+ unsigned int index=0;
+ while(index<list.size())
+ {
+ ui->tranferList->addItem(QString::fromStdString(list.at(index)));
+ index++;
+ }
+}
+
+void DebugDialog::setActiveTransfer(const int &activeTransfer)
+{
+ ui->spinBoxActiveTransfer->setValue(activeTransfer);
+}
+
+void DebugDialog::setInodeUsage(const int &inodeUsage)
+{
+ ui->spinBoxNumberOfInode->setValue(inodeUsage);
+}
+
+void DebugDialog::setTransferThreadList(const std::vector<std::string> &list)
+{
+ ui->transferThreadList->clear();
+ unsigned int index=0;
+ while(index<list.size())
+ {
+ ui->transferThreadList->addItem(QString::fromStdString(list.at(index)));
+ index++;
+ }
+}
+
+#endif
+#endif
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DebugDialog.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DebugDialog.h
new file mode 100755
index 0000000..386fd7a
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DebugDialog.h
@@ -0,0 +1,41 @@
+/** \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
+#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 std::vector<std::string> &list);
+ /// \brief show the transfer thread, it show be a thread pool in normal time
+ void setTransferThreadList(const std::vector<std::string> &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 // ULTRACOPIER_PLUGIN_DEBUG
+
+#endif // DEBUGDAILOG_H
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DebugEngineMacro.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DebugEngineMacro.h
new file mode 100755
index 0000000..f9b5349
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/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-unmaintained/CopyEngine/Ultracopier-Qt/DiskSpace.cpp b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DiskSpace.cpp
new file mode 100755
index 0000000..e9b996d
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DiskSpace.cpp
@@ -0,0 +1,53 @@
+#include "DiskSpace.h"
+#include "ui_DiskSpace.h"
+#include "StructEnumDefinition_CopyEngine.h"
+
+DiskSpace::DiskSpace(FacilityInterface * facilityEngine,std::vector<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(QString::fromStdString(list.at(index).drive))
+ .arg(QString::fromStdString(facilityEngine->sizeToString(list.at(index).freeSpace)))
+ .arg(QString::fromStdString(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-unmaintained/CopyEngine/Ultracopier-Qt/DiskSpace.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DiskSpace.h
new file mode 100755
index 0000000..5a923ab
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DiskSpace.h
@@ -0,0 +1,29 @@
+#ifndef DISKSPACE_H
+#define DISKSPACE_H
+
+#include <QDialog>
+#include <vector>
+#include "../../../interface/PluginInterface_CopyEngine.h"
+#include "StructEnumDefinition_CopyEngine.h"
+
+namespace Ui {
+class DiskSpace;
+}
+
+class DiskSpace : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit DiskSpace(FacilityInterface * facilityEngine,std::vector<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-unmaintained/CopyEngine/Ultracopier-Qt/DiskSpace.ui b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DiskSpace.ui
new file mode 100755
index 0000000..10b5c69
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/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-unmaintained/CopyEngine/Ultracopier-Qt/DriveManagement.cpp b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DriveManagement.cpp
new file mode 100755
index 0000000..27fc9cb
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DriveManagement.cpp
@@ -0,0 +1,105 @@
+#include "DriveManagement.h"
+
+#include <QDir>
+#include <QFileInfoList>
+#include <QStorageInfo>
+
+#include "../../../cpp11addition.h"
+
+DriveManagement::DriveManagement()
+{
+ tryUpdate();
+ #ifdef Q_OS_WIN32
+ reg1=std::regex("^(\\\\\\\\|//)[^\\\\\\\\/]+(\\\\|/)[^\\\\\\\\/]+.*");
+ reg2=std::regex("^((\\\\\\\\|//)[^\\\\\\\\/]+(\\\\|/)[^\\\\\\\\/]+).*$");
+ reg3=std::regex("^[a-zA-Z]:[\\\\/].*");
+ reg4=std::regex("^([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
+/// \todo do network drive support for windows
+std::string DriveManagement::getDrive(const std::string &fileOrFolder) const
+{
+ const std::string &inode=QDir::toNativeSeparators(QString::fromStdString(fileOrFolder)).toStdString();
+ int size=mountSysPoint.size();
+ for (int i = 0; i < size; ++i) {
+ if(stringStartWith(inode,mountSysPoint.at(i)))
+ return QDir::toNativeSeparators(QString::fromStdString(mountSysPoint.at(i))).toStdString();
+ }
+ #ifdef Q_OS_WIN32
+ if(std::regex_match(fileOrFolder,reg1))
+ {
+ std::string returnString=fileOrFolder;
+ std::regex_replace(returnString,reg2,"$1");
+ return returnString;
+ }
+ //due to lack of WMI support into mingw, the new drive event is never called, this is a workaround
+ if(std::regex_match(fileOrFolder,reg3))
+ {
+ std::string returnString=fileOrFolder;
+ std::regex_replace(returnString,reg4,"$1");
+ return QDir::toNativeSeparators(QString::fromStdString(returnString)).toUpper().toStdString();
+ }
+ #endif
+ //if unable to locate the right mount point
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"unable to locate the right mount point for: "+inode+", mount point: "+stringimplode(mountSysPoint,";"));
+ return std::string();
+}
+
+QByteArray DriveManagement::getDriveType(const std::string &drive) const
+{
+ int index=vectorindexOf(mountSysPoint,drive);
+ if(index!=-1)
+ return driveType.at(index);
+ return QByteArray();
+}
+
+bool DriveManagement::isSameDrive(const std::string &file1,const std::string &file2) const
+{
+ if(mountSysPoint.size()==0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"no mount point found");
+ return false;
+ }
+ const std::string &drive1=getDrive(file1);
+ if(drive1.empty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"drive for the file1 not found: "+file1);
+ return false;
+ }
+ const std::string &drive2=getDrive(file2);
+ if(drive2.empty())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"drive for the file2 not found: "+file2);
+ return false;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,drive1+" is egal to "+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.push_back(QDir::toNativeSeparators(mountedVolumesList.at(index).rootPath()).toStdString());
+ #ifdef Q_OS_WIN32
+ if(mountSysPoint.back()!="A:\\" && mountSysPoint.back()!="A:/" && mountSysPoint.back()!="A:" && mountSysPoint.back()!="A" &&
+ mountSysPoint.back()!="a:\\" && mountSysPoint.back()!="a:/" && mountSysPoint.back()!="a:" && mountSysPoint.back()!="a")
+ driveType.push_back(mountedVolumesList.at(index).fileSystemType());
+ else
+ driveType.push_back(QByteArray());
+ #else
+ driveType.push_back(mountedVolumesList.at(index).fileSystemType());
+ #endif
+ index++;
+ }
+}
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DriveManagement.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DriveManagement.h
new file mode 100755
index 0000000..8013b7c
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/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 std::string &file1, const std::string &file2) const;
+ /// \brief get drive of an file or folder
+ std::string getDrive(const std::string &fileOrFolder) const;
+ QByteArray getDriveType(const std::string &drive) const;
+ void tryUpdate();
+protected:
+ std::vector<std::string> mountSysPoint;
+ std::vector<QByteArray> driveType;
+ #ifdef Q_OS_WIN32
+ std::regex reg1,reg2,reg3,reg4;
+ #endif
+signals:
+ /// \brief To debug source
+ void debugInformation(const Ultracopier::DebugLevel &level,const std::string &fonction,const std::string &text,const std::string &file,const int &ligne) const;
+};
+
+#endif // DRIVEMANAGEMENT_H
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Environment.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Environment.h
new file mode 100755
index 0000000..85d017b
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/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 "CopyEngineUltracopierVariable.h"
+/// \brief The global include
+#include "StructEnumDefinition.h"
+#include "StructEnumDefinition_CopyEngine.h"
+#include "DebugEngineMacro.h"
+#include "CompilerInfo.h"
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileErrorDialog.cpp b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileErrorDialog.cpp
new file mode 100755
index 0000000..d88fb90
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/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, std::string 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(QString::fromStdString(errorString));
+ if(fileInfo.exists())
+ {
+ ui->label_content_file_name->setText(QString::fromStdString(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(QString::fromStdString(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-unmaintained/CopyEngine/Ultracopier-Qt/FileErrorDialog.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileErrorDialog.h
new file mode 100755
index 0000000..133a8b0
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/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,std::string 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-unmaintained/CopyEngine/Ultracopier-Qt/FileExistsDialog.cpp b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileExistsDialog.cpp
new file mode 100755
index 0000000..10b8543
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileExistsDialog.cpp
@@ -0,0 +1,240 @@
+#include "FileExistsDialog.h"
+#include "ui_fileExistsDialog.h"
+#include "TransferThread.h"
+
+#ifdef Q_OS_WIN32
+#define CURRENTSEPARATOR "\\"
+#else
+#define CURRENTSEPARATOR "/"
+#endif
+
+#include <QRegularExpression>
+#include <QFileInfo>
+#include <QMessageBox>
+
+FileExistsDialog::FileExistsDialog(QWidget *parent, QFileInfo source, QFileInfo destination, std::string firstRenamingRule, std::string 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(QString::fromStdString(oldName));
+ ui->lineEditNewName->setPlaceholderText(QString::fromStdString(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(QString::fromStdString(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(QString::fromStdString(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;
+ }
+}
+
+std::string FileExistsDialog::getNewName()
+{
+ if(oldName==ui->lineEditNewName->text().toStdString() || ui->checkBoxAlways->isChecked())
+ return oldName;
+ else
+ return ui->lineEditNewName->text().toStdString();
+}
+
+void FileExistsDialog::on_SuggestNewName_clicked()
+{
+ QFileInfo destinationInfo=this->destinationInfo;
+ QString absolutePath=destinationInfo.absolutePath();
+ QString fileName=QString::fromStdString(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.empty())
+ newFileName=tr("%name% - copy%suffix%");
+ else
+ newFileName=QString::fromStdString(firstRenamingRule);
+ }
+ else
+ {
+ if(otherRenamingRule.empty())
+ newFileName=tr("%name% - copy (%number%)%suffix%");
+ else
+ newFileName=QString::fromStdString(otherRenamingRule);
+ newFileName.replace(QStringLiteral("%number%"),QString::number(num));
+ }
+ newFileName.replace(QStringLiteral("%name%"),fileName);
+ newFileName.replace(QStringLiteral("%suffix%"),suffix);
+ destination=absolutePath+CURRENTSEPARATOR+newFileName;
+ destinationInfo.setFile(destination);
+ num++;
+ }
+ while(destinationInfo.exists());
+ ui->lineEditNewName->setText(newFileName);
+}
+
+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().toStdString() && !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-unmaintained/CopyEngine/Ultracopier-Qt/FileExistsDialog.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileExistsDialog.h
new file mode 100755
index 0000000..05ff7e0
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/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,std::string firstRenamingRule,std::string 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
+ std::string 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;
+ std::string oldName;
+ QFileInfo destinationInfo;
+ std::string firstRenamingRule;
+ std::string otherRenamingRule;
+};
+
+#endif // FILEEXISTSDIALOG_H
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileIsSameDialog.cpp b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileIsSameDialog.cpp
new file mode 100755
index 0000000..7683d1d
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileIsSameDialog.cpp
@@ -0,0 +1,190 @@
+#include "FileIsSameDialog.h"
+#include "ui_fileIsSameDialog.h"
+#include "TransferThread.h"
+
+#ifdef Q_OS_WIN32
+#define CURRENTSEPARATOR "\\"
+#else
+#define CURRENTSEPARATOR "/"
+#endif
+
+#include <QRegularExpression>
+#include <QFileInfo>
+#include <QMessageBox>
+
+FileIsSameDialog::FileIsSameDialog(QWidget *parent, QFileInfo fileInfo, std::string firstRenamingRule, std::string 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(QString::fromStdString(oldName));
+ ui->lineEditNewName->setPlaceholderText(QString::fromStdString(oldName));
+ ui->label_content_size->setText(QString::number(fileInfo.size()));
+ ui->label_content_modified->setText(fileInfo.lastModified().toString());
+ ui->label_content_file_name->setText(QString::fromStdString(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;
+ }
+}
+
+std::string FileIsSameDialog::getNewName()
+{
+ if(oldName==ui->lineEditNewName->text().toStdString() || ui->checkBoxAlways->isChecked())
+ return oldName;
+ else
+ return ui->lineEditNewName->text().toStdString();
+}
+
+void FileIsSameDialog::on_SuggestNewName_clicked()
+{
+ QFileInfo destinationInfo=this->destinationInfo;
+ QString absolutePath=destinationInfo.absolutePath();
+ QString fileName=QString::fromStdString(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.empty())
+ newFileName=tr("%name% - copy");
+ else
+ newFileName=QString::fromStdString(firstRenamingRule);
+ }
+ else
+ {
+ if(otherRenamingRule.empty())
+ newFileName=tr("%name% - copy (%number%)");
+ else
+ newFileName=QString::fromStdString(otherRenamingRule);
+ newFileName.replace(QStringLiteral("%number%"),QString::number(num));
+ }
+ newFileName.replace(QStringLiteral("%name%"),fileName);
+ newFileName.replace(QStringLiteral("%suffix%"),suffix);
+ destination=absolutePath+CURRENTSEPARATOR+newFileName+suffix;
+ destinationInfo.setFile(destination);
+ num++;
+ }
+ while(destinationInfo.exists());
+ ui->lineEditNewName->setText(newFileName);
+}
+
+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().toStdString() && !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-unmaintained/CopyEngine/Ultracopier-Qt/FileIsSameDialog.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileIsSameDialog.h
new file mode 100755
index 0000000..5dc0067
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/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,std::string firstRenamingRule,std::string 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
+ std::string 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;
+ std::string oldName;
+ QFileInfo destinationInfo;
+ std::string firstRenamingRule;
+ std::string otherRenamingRule;
+
+};
+
+#endif // FILEISSAMEDIALOG_H
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FilterRules.cpp b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FilterRules.cpp
new file mode 100755
index 0000000..0f6bf2c
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/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;
+}
+
+std::string FilterRules::get_search_text()
+{
+ return ui->search->text().toStdString();
+}
+
+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(std::string search_text)
+{
+ ui->search->setText(QString::fromStdString(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 std::string &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 std::string &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-unmaintained/CopyEngine/Ultracopier-Qt/FilterRules.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FilterRules.h
new file mode 100755
index 0000000..0838792
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/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();
+ std::string get_search_text();
+ SearchType get_search_type();
+ ApplyOn get_apply_on();
+ bool get_need_match_all();
+ void set_search_text(std::string 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 std::string &arg1);
+ void on_isValid_clicked();
+ void on_testString_textChanged(const std::string &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-unmaintained/CopyEngine/Ultracopier-Qt/FilterRules.ui b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FilterRules.ui
new file mode 100755
index 0000000..a4006fe
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/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-unmaintained/CopyEngine/Ultracopier-Qt/Filters.cpp b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Filters.cpp
new file mode 100755
index 0000000..c7b1526
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Filters.cpp
@@ -0,0 +1,460 @@
+#include "Filters.h"
+#include "ui_Filters.h"
+#include "../../../cpp11addition.h"
+
+#include <QRegularExpression>
+
+Filters::Filters(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::Filters)
+{
+ ui->setupUi(this);
+}
+
+Filters::~Filters()
+{
+ delete ui;
+}
+
+void Filters::setFilters(std::vector<std::string> includeStrings,std::vector<std::string> includeOptions,std::vector<std::string> excludeStrings,std::vector<std::string> excludeOptions)
+{
+ if(includeStrings.size()!=includeOptions.size() || excludeStrings.size()!=excludeOptions.size())
+ return;
+ Filters_rules new_item;
+
+ include.clear();
+ unsigned int index=0;
+ while(index<(unsigned int)includeStrings.size())
+ {
+ new_item.search_text=includeStrings.at(index);
+ std::vector<std::string> options=stringsplit(includeOptions.at(index),';');
+ new_item.need_match_all=false;
+ new_item.search_type=SearchType_rawText;
+ new_item.apply_on=ApplyOn_fileAndFolder;
+
+ if(vectorcontainsAtLeastOne(options,std::string("SearchType_simpleRegex")))
+ new_item.search_type=SearchType_simpleRegex;
+ if(vectorcontainsAtLeastOne(options,std::string("SearchType_perlRegex")))
+ new_item.search_type=SearchType_perlRegex;
+ if(vectorcontainsAtLeastOne(options,std::string("ApplyOn_file")))
+ new_item.apply_on=ApplyOn_file;
+ if(vectorcontainsAtLeastOne(options,std::string("ApplyOn_folder")))
+ new_item.apply_on=ApplyOn_folder;
+ if(vectorcontainsAtLeastOne(options,std::string("need_match_all")))
+ new_item.need_match_all=true;
+
+ if(convertToRegex(new_item))
+ include.push_back(new_item);
+
+ index++;
+ }
+
+ exclude.clear();
+ index=0;
+ while(index<excludeStrings.size())
+ {
+ new_item.search_text=excludeStrings.at(index);
+ std::vector<std::string> options=stringsplit(excludeOptions.at(index),';');
+ new_item.need_match_all=false;
+ new_item.search_type=SearchType_rawText;
+ new_item.apply_on=ApplyOn_fileAndFolder;
+
+ if(vectorcontainsAtLeastOne(options,std::string("SearchType_simpleRegex")))
+ new_item.search_type=SearchType_simpleRegex;
+ if(vectorcontainsAtLeastOne(options,std::string("SearchType_perlRegex")))
+ new_item.search_type=SearchType_perlRegex;
+ if(vectorcontainsAtLeastOne(options,std::string("ApplyOn_file")))
+ new_item.apply_on=ApplyOn_file;
+ if(vectorcontainsAtLeastOne(options,std::string("ApplyOn_folder")))
+ new_item.apply_on=ApplyOn_folder;
+ if(vectorcontainsAtLeastOne(options,std::string("need_match_all")))
+ new_item.need_match_all=true;
+
+ if(convertToRegex(new_item))
+ exclude.push_back(new_item);
+
+ index++;
+ }
+
+ reShowAll();
+}
+
+void Filters::reShowAll()
+{
+ ui->inclusion->clear();
+ unsigned int index=0;
+ while(index<(unsigned int)include.size())
+ {
+ std::string entryShow=include.at(index).search_text+" (";
+ std::vector<std::string> optionsToShow;
+ switch(include.at(index).search_type)
+ {
+ case SearchType_rawText:
+ optionsToShow.push_back(tr("Raw text").toStdString());
+ break;
+ case SearchType_simpleRegex:
+ optionsToShow.push_back(tr("Simplified regex").toStdString());
+ break;
+ case SearchType_perlRegex:
+ optionsToShow.push_back(tr("Perl's regex").toStdString());
+ break;
+ default:
+ break;
+ }
+ switch(include.at(index).apply_on)
+ {
+ case ApplyOn_file:
+ optionsToShow.push_back(tr("Only on file").toStdString());
+ break;
+ case ApplyOn_folder:
+ optionsToShow.push_back(tr("Only on folder").toStdString());
+ break;
+ default:
+ break;
+ }
+ if(include.at(index).need_match_all)
+ optionsToShow.push_back(tr("Full match").toStdString());
+ entryShow+=stringimplode(optionsToShow,",");
+ entryShow+=")";
+ ui->inclusion->addItem(new QListWidgetItem(QString::fromStdString(entryShow)));
+ index++;
+ }
+ ui->exclusion->clear();
+ index=0;
+ while(index<(unsigned int)exclude.size())
+ {
+ std::string entryShow=exclude.at(index).search_text+" (";
+ std::vector<std::string> optionsToShow;
+ switch(exclude.at(index).search_type)
+ {
+ case SearchType_rawText:
+ optionsToShow.push_back(tr("Raw text").toStdString());
+ break;
+ case SearchType_simpleRegex:
+ optionsToShow.push_back(tr("Simplified regex").toStdString());
+ break;
+ case SearchType_perlRegex:
+ optionsToShow.push_back(tr("Perl's regex").toStdString());
+ break;
+ default:
+ break;
+ }
+ switch(exclude.at(index).apply_on)
+ {
+ case ApplyOn_file:
+ optionsToShow.push_back(tr("Only on file").toStdString());
+ break;
+ case ApplyOn_folder:
+ optionsToShow.push_back(tr("Only on folder").toStdString());
+ break;
+ default:
+ break;
+ }
+ if(exclude.at(index).need_match_all)
+ optionsToShow.push_back(tr("Full match").toStdString());
+ entryShow+=stringimplode(optionsToShow,",");
+ entryShow+=")";
+ ui->exclusion->addItem(new QListWidgetItem(QString::fromStdString(entryShow)));
+ index++;
+ }
+}
+
+std::vector<Filters_rules> Filters::getInclude() const
+{
+ return include;
+}
+
+std::vector<Filters_rules> Filters::getExclude() const
+{
+ return exclude;
+}
+
+void Filters::newLanguageLoaded()
+{
+ ui->retranslateUi(this);
+ reShowAll();
+}
+
+void Filters::updateFilters()
+{
+ std::vector<std::string> includeStrings,includeOptions,excludeStrings,excludeOptions;
+ unsigned int index=0;
+ while(index<(unsigned int)include.size())
+ {
+ includeStrings.push_back(include.at(index).search_text);
+ std::vector<std::string> optionsToShow;
+
+ switch(include.at(index).search_type)
+ {
+ case SearchType_rawText:
+ optionsToShow.push_back("SearchType_rawText");
+ break;
+ case SearchType_simpleRegex:
+ optionsToShow.push_back("SearchType_simpleRegex");
+ break;
+ case SearchType_perlRegex:
+ optionsToShow.push_back("SearchType_perlRegex");
+ break;
+ default:
+ break;
+ }
+ switch(include.at(index).apply_on)
+ {
+ case ApplyOn_file:
+ optionsToShow.push_back("ApplyOn_file");
+ break;
+ case ApplyOn_fileAndFolder:
+ optionsToShow.push_back("ApplyOn_fileAndFolder");
+ break;
+ case ApplyOn_folder:
+ optionsToShow.push_back("ApplyOn_folder");
+ break;
+ default:
+ break;
+ }
+ if(include.at(index).need_match_all)
+ optionsToShow.push_back(tr("Full match").toStdString());
+ includeOptions.push_back(stringimplode(optionsToShow,";"));
+ index++;
+ }
+ index=0;
+ while(index<(unsigned int)exclude.size())
+ {
+ excludeStrings.push_back(exclude.at(index).search_text);
+ std::vector<std::string> optionsToShow;
+
+ switch(exclude.at(index).search_type)
+ {
+ case SearchType_rawText:
+ optionsToShow.push_back("SearchType_rawText");
+ break;
+ case SearchType_simpleRegex:
+ optionsToShow.push_back("SearchType_simpleRegex");
+ break;
+ case SearchType_perlRegex:
+ optionsToShow.push_back("SearchType_perlRegex");
+ break;
+ default:
+ break;
+ }
+ switch(exclude.at(index).apply_on)
+ {
+ case ApplyOn_file:
+ optionsToShow.push_back("ApplyOn_file");
+ break;
+ case ApplyOn_fileAndFolder:
+ optionsToShow.push_back("ApplyOn_fileAndFolder");
+ break;
+ case ApplyOn_folder:
+ optionsToShow.push_back("ApplyOn_folder");
+ break;
+ default:
+ break;
+ }
+ if(exclude.at(index).need_match_all)
+ optionsToShow.push_back(tr("Full match").toStdString());
+ excludeOptions.push_back(stringimplode(optionsToShow,";"));
+ index++;
+ }
+ emit sendNewFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
+ emit haveNewFilters();
+}
+
+bool Filters::convertToRegex(Filters_rules &item)
+{
+ bool isValid=!item.search_text.empty();
+ if(isValid)
+ {
+ std::regex regex;
+ std::string tempString;
+ if(item.search_type==SearchType_rawText)
+ {
+ tempString=QRegularExpression::escape(QString::fromStdString(item.search_text)).toStdString();
+ if(tempString.find('/') != std::string::npos || tempString.find('\\') != std::string::npos)
+ isValid=false;
+ }
+ else if(item.search_type==SearchType_simpleRegex)
+ {
+ tempString=QRegularExpression::escape(QString::fromStdString(item.search_text)).toStdString();
+ stringreplaceAll(tempString,"\\*","[^\\\\/]*");
+ }
+ else if(item.search_type==SearchType_perlRegex)
+ {
+ tempString=item.search_text;
+ if(stringStartWith(tempString,'^') && stringEndsWith(tempString,'$'))
+ {
+ item.need_match_all=true;
+ if(stringStartWith(tempString,'^'))
+ tempString=tempString.substr(1,tempString.size()-1);
+ if(stringEndsWith(tempString,'$'))
+ tempString=tempString.substr(0,tempString.size()-1);
+ item.search_text=tempString;
+ }
+ }
+ if(isValid)
+ {
+ if(item.need_match_all==true)
+ tempString="^"+tempString+"$";
+ regex=std::regex(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.erase(exclude.cbegin()+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.erase(include.cbegin()+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.push_back(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.push_back(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.erase(exclude.cbegin()+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.erase(exclude.cbegin()+index);
+ editedEntry=true;
+ }
+ }
+ index++;
+ }
+ if(editedEntry)
+ {
+ reShowAll();
+ updateFilters();
+ }
+}
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Filters.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Filters.h
new file mode 100755
index 0000000..6645afc
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/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(std::vector<std::string> includeStrings, std::vector<std::string> includeOptions, std::vector<std::string> excludeStrings, std::vector<std::string> excludeOptions);
+ void reShowAll();
+ std::vector<Filters_rules> getInclude() const;
+ std::vector<Filters_rules> getExclude() const;
+ void newLanguageLoaded();
+private:
+ Ui::Filters *ui;
+ std::vector<Filters_rules> include;
+ std::vector<Filters_rules> exclude;
+ void updateFilters();
+ bool convertToRegex(Filters_rules &item);
+signals:
+ void sendNewFilters(const std::vector<std::string> &includeStrings,const std::vector<std::string> &includeOptions,const std::vector<std::string> &excludeStrings,const std::vector<std::string> &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-unmaintained/CopyEngine/Ultracopier-Qt/Filters.ui b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Filters.ui
new file mode 100755
index 0000000..33822af
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/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-unmaintained/CopyEngine/Ultracopier-Qt/FolderExistsDialog.cpp b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FolderExistsDialog.cpp
new file mode 100755
index 0000000..59466ed
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FolderExistsDialog.cpp
@@ -0,0 +1,202 @@
+#include "FolderExistsDialog.h"
+#include "ui_folderExistsDialog.h"
+#include "TransferThread.h"
+
+#ifdef Q_OS_WIN32
+#define CURRENTSEPARATOR "\\"
+#else
+#define CURRENTSEPARATOR "/"
+#endif
+
+#include <QMessageBox>
+#include <QFileInfo>
+#include <QMessageBox>
+
+FolderExistsDialog::FolderExistsDialog(QWidget *parent, QFileInfo source, bool isSame, QFileInfo destination, std::string firstRenamingRule, std::string 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(QString::fromStdString(oldName));
+ ui->lineEditNewName->setPlaceholderText(QString::fromStdString(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;
+ }
+}
+
+std::string FolderExistsDialog::getNewName()
+{
+ if(oldName==ui->lineEditNewName->text().toStdString() || ui->checkBoxAlways->isChecked())
+ return "";
+ else
+ return ui->lineEditNewName->text().toStdString();
+}
+
+void FolderExistsDialog::on_SuggestNewName_clicked()
+{
+ QFileInfo destinationInfo=this->destinationInfo;
+ QString absolutePath=destinationInfo.absolutePath();
+ QString fileName=QString::fromStdString(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.empty())
+ newFileName=tr("%name% - copy");
+ else
+ {
+ newFileName=QString::fromStdString(firstRenamingRule);
+ }
+ }
+ else
+ {
+ if(otherRenamingRule.empty())
+ newFileName=tr("%name% - copy (%number%)");
+ else
+ newFileName=QString::fromStdString(otherRenamingRule);
+ newFileName.replace(QStringLiteral("%number%"),QString::number(num));
+ }
+ newFileName.replace(QStringLiteral("%name%"),fileName);
+ destination=absolutePath+CURRENTSEPARATOR+newFileName+suffix;
+ destinationInfo.setFile(destination);
+ num++;
+ }
+ while(destinationInfo.exists());
+ ui->lineEditNewName->setText(newFileName);
+}
+
+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 std::string &arg1)
+{
+ Q_UNUSED(arg1);
+ updateRenameButton();
+}
+
+void FolderExistsDialog::updateRenameButton()
+{
+ ui->Rename->setEnabled(ui->checkBoxAlways->isChecked() || (!ui->lineEditNewName->text().contains(QRegularExpression("[/\\\\\\*]")) && oldName!=ui->lineEditNewName->text().toStdString() && !ui->lineEditNewName->text().isEmpty()));
+}
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FolderExistsDialog.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FolderExistsDialog.h
new file mode 100755
index 0000000..a3bcf67
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/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,std::string firstRenamingRule,std::string 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
+ std::string 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 std::string &arg1);
+private:
+ Ui::folderExistsDialog *ui;
+ FolderExistsAction action;
+ std::string oldName;
+ std::string firstRenamingRule;
+ std::string otherRenamingRule;
+ QFileInfo destinationInfo;
+};
+
+#endif // FOLDERISSAMEDIALOG_H
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/ar/translation.qm b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/ar/translation.qm
new file mode 100755
index 0000000..3738845
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/ar/translation.qm
Binary files differ
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/ar/translation.ts b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/ar/translation.ts
new file mode 100755
index 0000000..e0764bb
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/ar/translation.ts
@@ -0,0 +1,1291 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<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="437"/>
+ <location filename="../../CopyEngine.cpp" line="459"/>
+ <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="470"/>
+ <location filename="../../CopyEngine.cpp" line="492"/>
+ <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="516"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="516"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="740"/>
+ <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="1070"/>
+ <location filename="../../CopyEngine.cpp" line="1073"/>
+ <location filename="../../CopyEngine.cpp" line="1078"/>
+ <location filename="../../CopyEngine.cpp" line="1082"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1071"/>
+ <location filename="../../CopyEngine.cpp" line="1075"/>
+ <location filename="../../CopyEngine.cpp" line="1079"/>
+ <location filename="../../CopyEngine.cpp" line="1083"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1074"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1076"/>
+ <location filename="../../CopyEngine.cpp" line="1088"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1080"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1084"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1085"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1086"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1087"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1090"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1091"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1092"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1193"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1193"/>
+ <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="433"/>
+ <location filename="../../CopyEngineFactory.cpp" line="436"/>
+ <location filename="../../CopyEngineFactory.cpp" line="441"/>
+ <location filename="../../CopyEngineFactory.cpp" line="445"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <location filename="../../CopyEngineFactory.cpp" line="438"/>
+ <location filename="../../CopyEngineFactory.cpp" line="442"/>
+ <location filename="../../CopyEngineFactory.cpp" line="446"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="437"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="439"/>
+ <location filename="../../CopyEngineFactory.cpp" line="451"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="443"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="447"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="448"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="449"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="450"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="453"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="454"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="455"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="506"/>
+ <location filename="../../CopyEngineFactory.cpp" line="545"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="506"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="545"/>
+ <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="137"/>
+ <source>%name% - copy%suffix%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="144"/>
+ <source>%name% - copy (%number%)%suffix%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="228"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="228"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="111"/>
+ <source>%name% - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="118"/>
+ <source>%name% - copy (%number%)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="184"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="184"/>
+ <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="93"/>
+ <location filename="../../Filters.cpp" line="131"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="96"/>
+ <location filename="../../Filters.cpp" line="134"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="99"/>
+ <location filename="../../Filters.cpp" line="137"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="107"/>
+ <location filename="../../Filters.cpp" line="145"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="110"/>
+ <location filename="../../Filters.cpp" line="148"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="116"/>
+ <location filename="../../Filters.cpp" line="154"/>
+ <location filename="../../Filters.cpp" line="216"/>
+ <location filename="../../Filters.cpp" line="255"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="57"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="122"/>
+ <source>%name% - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="131"/>
+ <source>%name% - copy (%number%)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="190"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="190"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1490"/>
+ <location filename="../../ListThread.cpp" line="2422"/>
+ <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="1497"/>
+ <location filename="../../ListThread.cpp" line="2429"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1513"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1520"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1529"/>
+ <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="1538"/>
+ <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="1544"/>
+ <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="1607"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1615"/>
+ <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="233"/>
+ <source>Unable to move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="276"/>
+ <source>Unable to remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="59"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="188"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="196"/>
+ <location filename="../../ReadThread.cpp" line="422"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="237"/>
+ <location filename="../../ReadThread.cpp" line="470"/>
+ <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="35"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="41"/>
+ <source>%name% - copy%suffix%</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="57"/>
+ <source>%name% - copy (%number%)%suffix%</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="67"/>
+ <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;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number, &lt;span style=&quot; font-weight:600;&quot;&gt;%suffix%&lt;/span&gt; file suffix&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.ui" line="51"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)%3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="274"/>
+ <source>Blacklisted folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="338"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="345"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="401"/>
+ <source>%name% - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="408"/>
+ <source>%name% - copy (%number%)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="444"/>
+ <source>This is not a folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="446"/>
+ <source>The folder does exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="448"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="459"/>
+ <source>Problem with name encoding</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="244"/>
+ <location filename="../../TransferThread.cpp" line="673"/>
+ <location filename="../../TransferThread.cpp" line="745"/>
+ <location filename="../../TransferThread.cpp" line="1315"/>
+ <source>File not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="346"/>
+ <location filename="../../TransferThread.cpp" line="363"/>
+ <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="421"/>
+ <location filename="../../TransferThread.cpp" line="444"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="586"/>
+ <source>Drive %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="588"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="592"/>
+ <source>root</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="645"/>
+ <source>%name% - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="652"/>
+ <source>%name% - copy (%number%)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="711"/>
+ <location filename="../../TransferThread.cpp" line="826"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="751"/>
+ <location filename="../../TransferThread.cpp" line="838"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="787"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="832"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1134"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1224"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1239"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1250"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1315"/>
+ <location filename="../../TransferThread.cpp" line="1333"/>
+ <location filename="../../TransferThread.cpp" line="1348"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="228"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="83"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="277"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="680"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="705"/>
+ <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="44"/>
+ <source>Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="53"/>
+ <source>Move the whole folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="60"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="70"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="83"/>
+ <source>Autostart the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="90"/>
+ <location filename="../../copyEngineOptions.ui" line="110"/>
+ <source>Less performance if checked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="113"/>
+ <source>Follow the strict order</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="139"/>
+ <source>Error and collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="145"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="155"/>
+ <source>When file error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="181"/>
+ <source>When file collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="241"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="272"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="279"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="299"/>
+ <source>Delete partially transferred files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="312"/>
+ <source>Rename the original destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="343"/>
+ <source>Control</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="358"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="365"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="382"/>
+ <source>Verify checksums</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="414"/>
+ <source>Performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="420"/>
+ <source>Parallel buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="427"/>
+ <location filename="../../copyEngineOptions.ui" line="440"/>
+ <location filename="../../copyEngineOptions.ui" line="453"/>
+ <location filename="../../copyEngineOptions.ui" line="490"/>
+ <location filename="../../copyEngineOptions.ui" line="559"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="469"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="476"/>
+ <source>Sequential buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="483"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="506"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="513"/>
+ <source>Transfer algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="552"/>
+ <source>Parallelize if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="582"/>
+ <source>Inode threads (unsafe &gt; 1)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="589"/>
+ <location filename="../../copyEngineOptions.ui" line="599"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="602"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="618"/>
+ <source>Misc</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="624"/>
+ <source>Check the disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="634"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="646"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="668"/>
+ <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-unmaintained/CopyEngine/Ultracopier-Qt/Languages/de/translation.qm b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/de/translation.qm
new file mode 100755
index 0000000..a9f1ba4
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/de/translation.qm
Binary files differ
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/de/translation.ts b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/de/translation.ts
new file mode 100644
index 0000000..b8450f4
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/de/translation.ts
@@ -0,0 +1,1292 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" 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>Wird auf dieser Plattform nicht unterstützt</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="40"/>
+ <source>Last modified date is wrong</source>
+ <translation>Letztes Änderungsdatum ist falsch</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="71"/>
+ <source>Last access date is wrong</source>
+ <translatorcomment> </translatorcomment>
+ <translation>Letztes Zugriffsdatum 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="437"/>
+ <location filename="../../CopyEngine.cpp" line="459"/>
+ <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="470"/>
+ <location filename="../../CopyEngine.cpp" line="492"/>
+ <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="516"/>
+ <source>Destination</source>
+ <translation>Ziel</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="516"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation>Aktuelles Ziel: &quot;%1&quot; benutzen?</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="740"/>
+ <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="1070"/>
+ <location filename="../../CopyEngine.cpp" line="1073"/>
+ <location filename="../../CopyEngine.cpp" line="1078"/>
+ <location filename="../../CopyEngine.cpp" line="1082"/>
+ <source>Ask</source>
+ <translation>Fragen</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1071"/>
+ <location filename="../../CopyEngine.cpp" line="1075"/>
+ <location filename="../../CopyEngine.cpp" line="1079"/>
+ <location filename="../../CopyEngine.cpp" line="1083"/>
+ <source>Skip</source>
+ <translation>Überspringen</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1074"/>
+ <source>Merge</source>
+ <translation>Zusammenfassen</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1076"/>
+ <location filename="../../CopyEngine.cpp" line="1088"/>
+ <source>Rename</source>
+ <translation>Umbenennen</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1080"/>
+ <source>Put at the end</source>
+ <translation>Ans Ende verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1084"/>
+ <source>Overwrite</source>
+ <translation>Überschreiben</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1085"/>
+ <source>Overwrite if different</source>
+ <translation>Überschreiben, falls verschieden</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1086"/>
+ <source>Overwrite if newer</source>
+ <translation>Überschreiben, falls neuer</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1087"/>
+ <source>Overwrite if older</source>
+ <translation>Überschreiben, falls älter</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1090"/>
+ <source>Automatic</source>
+ <translation>Automatisch</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1091"/>
+ <source>Sequential</source>
+ <translation>Sequentiell</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1092"/>
+ <source>Parallel</source>
+ <translation>Parallel</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1193"/>
+ <source>Options error</source>
+ <translation>Fehlerhafte Optionen</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1193"/>
+ <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="433"/>
+ <location filename="../../CopyEngineFactory.cpp" line="436"/>
+ <location filename="../../CopyEngineFactory.cpp" line="441"/>
+ <location filename="../../CopyEngineFactory.cpp" line="445"/>
+ <source>Ask</source>
+ <translation>Fragen</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <location filename="../../CopyEngineFactory.cpp" line="438"/>
+ <location filename="../../CopyEngineFactory.cpp" line="442"/>
+ <location filename="../../CopyEngineFactory.cpp" line="446"/>
+ <source>Skip</source>
+ <translation>Überspringen</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="437"/>
+ <source>Merge</source>
+ <translation>Zusammenfassen</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="439"/>
+ <location filename="../../CopyEngineFactory.cpp" line="451"/>
+ <source>Rename</source>
+ <translation>Umbenennen</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="443"/>
+ <source>Put at the end</source>
+ <translation>Ans Ende verschieben</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="447"/>
+ <source>Overwrite</source>
+ <translation>Überschreiben</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="448"/>
+ <source>Overwrite if different</source>
+ <translation>Überschreiben, falls verschieden</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="449"/>
+ <source>Overwrite if newer</source>
+ <translation>Überschreiben, falls neuer</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="450"/>
+ <source>Overwrite if older</source>
+ <translation>Überschreiben, falls älter</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="453"/>
+ <source>Automatic</source>
+ <translation>Automatisch</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="454"/>
+ <source>Sequential</source>
+ <translation>Sequentiell</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="455"/>
+ <source>Parallel</source>
+ <translation>Parallel</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="506"/>
+ <location filename="../../CopyEngineFactory.cpp" line="545"/>
+ <source>Options error</source>
+ <translation>Fehlerhafte Optionen</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="506"/>
+ <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="545"/>
+ <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="137"/>
+ <source>%name% - copy%suffix%</source>
+ <translation>%name% - Kopie%suffix%</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="144"/>
+ <source>%name% - copy (%number%)%suffix%</source>
+ <translation>%name% - Kopie (%number%)%suffix%</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="228"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="228"/>
+ <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="111"/>
+ <source>%name% - copy</source>
+ <translation>%name% - Kopie</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="118"/>
+ <source>%name% - copy (%number%)</source>
+ <translation>%name% - Kopie (%number%)</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="184"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="184"/>
+ <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ßen Filter</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filters</source>
+ <translation>Einschließen 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="93"/>
+ <location filename="../../Filters.cpp" line="131"/>
+ <source>Raw text</source>
+ <translation>Roh-Text</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="96"/>
+ <location filename="../../Filters.cpp" line="134"/>
+ <source>Simplified regex</source>
+ <translation>Vereinfachte RegEx</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="99"/>
+ <location filename="../../Filters.cpp" line="137"/>
+ <source>Perl&apos;s regex</source>
+ <translation>Perls RegEx</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="107"/>
+ <location filename="../../Filters.cpp" line="145"/>
+ <source>Only on file</source>
+ <translation>Nur auf Datei</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="110"/>
+ <location filename="../../Filters.cpp" line="148"/>
+ <source>Only on folder</source>
+ <translation>Nur auf Ordner</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="116"/>
+ <location filename="../../Filters.cpp" line="154"/>
+ <location filename="../../Filters.cpp" line="216"/>
+ <location filename="../../Filters.cpp" line="255"/>
+ <source>Full match</source>
+ <translation>Volle Übereinstimmung</translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="57"/>
+ <source>Folder already exists</source>
+ <translation>Ordner existiert bereits</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="122"/>
+ <source>%name% - copy</source>
+ <translation>%name% - Kopie</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="131"/>
+ <source>%name% - copy (%number%)</source>
+ <translation>%name% - Kopie (%number%)</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="190"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="190"/>
+ <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="1490"/>
+ <location filename="../../ListThread.cpp" line="2422"/>
+ <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="1497"/>
+ <location filename="../../ListThread.cpp" line="2429"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation>Konnte die Transferliste: %1 nicht speichern</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1513"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation>Lesefehler, oder Dateigröße=0</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1520"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation>Falscher Header: &quot;%1&quot;</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1529"/>
+ <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="1538"/>
+ <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="1544"/>
+ <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="1607"/>
+ <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="1615"/>
+ <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="233"/>
+ <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="276"/>
+ <source>Unable to remove</source>
+ <translation>Kann nicht löschen</translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="59"/>
+ <source>Internal error, please report it!</source>
+ <translation>Interner Fehler - Bitte bei mir melden!</translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="188"/>
+ <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="196"/>
+ <location filename="../../ReadThread.cpp" line="422"/>
+ <source>Unable to read the source file: </source>
+ <translation>Die Quelldatei kann nicht gelesen werden: </translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="237"/>
+ <location filename="../../ReadThread.cpp" line="470"/>
+ <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="35"/>
+ <source>First renaming</source>
+ <translation>Erste Umbenennung</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="41"/>
+ <source>%name% - copy%suffix%</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation>%name% - Kopie%suffix%</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="57"/>
+ <source>%name% - copy (%number%)%suffix%</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation>%name% - Kopie% (%number%)%suffix%</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="67"/>
+ <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;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number, &lt;span style=&quot; font-weight:600;&quot;&gt;%suffix%&lt;/span&gt; file suffix&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 originalen Dateinamen, &lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; für die extra Nummer, &lt;span style=&quot; font-weight:600;&quot;&gt;%suffix%&lt;/span&gt; für den Datei suffix&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="51"/>
+ <source>Second renaming</source>
+ <translation>Zweite Umbenennung</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation>Umbennungsregeln</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy%2</source>
+ <translation>%1 - Kopie%2</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)%3</source>
+ <translation>%1 - Kopie (%2) {1 ?} {2)%3?}</translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="274"/>
+ <source>Blacklisted folder</source>
+ <translation>Ordner der schwarzen Liste</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="338"/>
+ <source>%1 - copy</source>
+ <translation>%1 - Kopie</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="345"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - Kopie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="401"/>
+ <source>%name% - copy</source>
+ <translation>%name% - Kopie</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="408"/>
+ <source>%name% - copy (%number%)</source>
+ <translation>%name% - Kopie (%number%)</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="444"/>
+ <source>This is not a folder</source>
+ <translation>Dies ist kein Ordner</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="446"/>
+ <source>The folder does exists</source>
+ <translation>Ordner existiert bereits</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="448"/>
+ <source>The folder is not readable</source>
+ <translation>Der Ordner kann nicht gelesen werden</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="459"/>
+ <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="244"/>
+ <location filename="../../TransferThread.cpp" line="673"/>
+ <location filename="../../TransferThread.cpp" line="745"/>
+ <location filename="../../TransferThread.cpp" line="1315"/>
+ <source>File not found</source>
+ <translation>Datei nicht gefunden</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="346"/>
+ <location filename="../../TransferThread.cpp" line="363"/>
+ <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source>
+ <translation>Falsches Änderungsdatum oder Fehler beim Auslesen, Sie können die Zeitstempel Übermittlung deaktivieren</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="421"/>
+ <location filename="../../TransferThread.cpp" line="444"/>
+ <source>Internal error: Already opening</source>
+ <translation>Interner Fehler: Bereits geöffnet</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="586"/>
+ <source>Drive %1</source>
+ <translation>Laufwerk %1</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="588"/>
+ <source>Unknown folder</source>
+ <translation>Unbekannter Ordner</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="592"/>
+ <source>root</source>
+ <translation>Stammverzeichnis</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="787"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation>Quelle existiert nicht</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1315"/>
+ <location filename="../../TransferThread.cpp" line="1333"/>
+ <location filename="../../TransferThread.cpp" line="1348"/>
+ <source>Unable to change the date</source>
+ <translation>Kann Datum nicht ändern</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="711"/>
+ <location filename="../../TransferThread.cpp" line="826"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation>Quelldatei existiert nicht</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1134"/>
+ <source>The checksums do not match</source>
+ <translation>Prüfsummen sind verschieden</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1239"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation>Interner Fehler: Ubertragene Größe ungleich</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="751"/>
+ <location filename="../../TransferThread.cpp" line="838"/>
+ <source>Unable to do the folder</source>
+ <translation>Ordner kann nicht erstellt werden</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="228"/>
+ <source>Try rename with using special characters</source>
+ <translation>Versuche Umbenennung mit Sonderzeichen</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="645"/>
+ <source>%name% - copy</source>
+ <translation>%name% - Kopie</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="652"/>
+ <source>%name% - copy (%number%)</source>
+ <translation>%name% - Kopie (%number%)</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="832"/>
+ <source>Another file exists at same place</source>
+ <translation>Eine andere Datei befindet sich bereits am selben Ort</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1224"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation>Interner Fehler: Ziel ist nicht geschlossen</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1250"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation>Interner Fehler: Puffer ist nicht leer</translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="83"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation>Pfad-Auflösungsfehler (leerer Pfad)</translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="277"/>
+ <source>Internal error, please report it!</source>
+ <translation>Interner Fehler - Bitte bei mir melden!</translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="680"/>
+ <source>Unable to read the source file: </source>
+ <translation>Quelldatei kann nicht gelesen werden: </translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="705"/>
+ <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="44"/>
+ <source>Transfer</source>
+ <translation>Übertragung</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="53"/>
+ <source>Move the whole folder</source>
+ <translation>Verschiebe ganzen Ordner</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="60"/>
+ <source>Transfer the file rights</source>
+ <translation>Übertrage Dateirechte</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="70"/>
+ <source>Keep the file date</source>
+ <translation>Originales Datum der Dateien beibehalten</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="83"/>
+ <source>Autostart the transfer</source>
+ <translation>Übertragung automatisch starten</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="90"/>
+ <location filename="../../copyEngineOptions.ui" line="110"/>
+ <source>Less performance if checked</source>
+ <translation>Vermindert die Leistung, wenn ausgewählt</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="113"/>
+ <source>Follow the strict order</source>
+ <translation>Genau nach Reihenfolge</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="139"/>
+ <source>Error and collision</source>
+ <translation>Fehler und Kollisionen</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="145"/>
+ <source>When folder error</source>
+ <translation>Bei Ordnerfehler</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="155"/>
+ <source>When file error</source>
+ <translation>Bei Dateifehler</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="181"/>
+ <source>When file collision</source>
+ <translation>Bei Dateikollision</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="241"/>
+ <source>When folder collision</source>
+ <translation>Bei Ordnerkollision</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="272"/>
+ <source>Check if destination folder exists</source>
+ <translation>Prüfen ob Zielordner vorhanden ist</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="279"/>
+ <source>Renaming rules</source>
+ <translation>Umbennungsregeln</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="299"/>
+ <source>Delete partially transferred files</source>
+ <translation>Unvollständig übertragene Dateien löschen</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="312"/>
+ <source>Rename the original destination</source>
+ <translation>Original-Ziel umbenennen</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="343"/>
+ <source>Control</source>
+ <translation>Überprüfung</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Checksum</source>
+ <translation>Prüfsumme</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="358"/>
+ <source>Only after error</source>
+ <translation>Nur nach einem Fehler</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="365"/>
+ <source>Ignore if impossible</source>
+ <translation>Ignorieren falls unmöglich</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="382"/>
+ <source>Verify checksums</source>
+ <translation>Prüfsummen vergleichen</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="414"/>
+ <source>Performance</source>
+ <translation>Leistung</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="420"/>
+ <source>Parallel buffer</source>
+ <translation>Paralleler Puffer</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="427"/>
+ <location filename="../../copyEngineOptions.ui" line="440"/>
+ <location filename="../../copyEngineOptions.ui" line="453"/>
+ <location filename="../../copyEngineOptions.ui" line="490"/>
+ <location filename="../../copyEngineOptions.ui" line="559"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="469"/>
+ <source>Block size</source>
+ <translation>Blockgröße</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="476"/>
+ <source>Sequential buffer</source>
+ <translation>Sequentieller Puffer</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="483"/>
+ <source>Enable OS buffer</source>
+ <translation>OS-Puffer aktivieren</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="506"/>
+ <source>OS buffer only if smaller than</source>
+ <translation>OS-Puffer nur verwenden, wenn kleiner als</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="513"/>
+ <source>Transfer algorithm</source>
+ <translation>Übertragungs-Algorithmus</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="552"/>
+ <source>Parallelize if smaller than</source>
+ <translation>Parallelisieren wenn kleiner als</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="582"/>
+ <source>Inode threads (unsafe &gt; 1)</source>
+ <translation>Inode Threads (unsicher &gt;1)</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="589"/>
+ <location filename="../../copyEngineOptions.ui" line="599"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation>Mehr CPU Leitstung, aber bessere Organisation am Laufwerk</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="602"/>
+ <source>Order the list</source>
+ <translation>Liste ordnen</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="618"/>
+ <source>Misc</source>
+ <translation>Verschiedenes</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="624"/>
+ <source>Check the disk space</source>
+ <translation>Auf freien Speicherplatz überprüfen</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="634"/>
+ <source>Use this folder when destination is not set</source>
+ <translation>Folgenden Ordner benutzen, falls kein Ziel definiert wurde</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="646"/>
+ <source>Browse</source>
+ <translation>Wählen</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="668"/>
+ <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>Zusammenfassen</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-unmaintained/CopyEngine/Ultracopier-Qt/Languages/el/translation.qm b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/el/translation.qm
new file mode 100755
index 0000000..3738845
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/el/translation.qm
Binary files differ
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/el/translation.ts b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/el/translation.ts
new file mode 100755
index 0000000..e0764bb
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/el/translation.ts
@@ -0,0 +1,1291 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+<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="437"/>
+ <location filename="../../CopyEngine.cpp" line="459"/>
+ <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="470"/>
+ <location filename="../../CopyEngine.cpp" line="492"/>
+ <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="516"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="516"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="740"/>
+ <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="1070"/>
+ <location filename="../../CopyEngine.cpp" line="1073"/>
+ <location filename="../../CopyEngine.cpp" line="1078"/>
+ <location filename="../../CopyEngine.cpp" line="1082"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1071"/>
+ <location filename="../../CopyEngine.cpp" line="1075"/>
+ <location filename="../../CopyEngine.cpp" line="1079"/>
+ <location filename="../../CopyEngine.cpp" line="1083"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1074"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1076"/>
+ <location filename="../../CopyEngine.cpp" line="1088"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1080"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1084"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1085"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1086"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1087"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1090"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1091"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1092"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1193"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1193"/>
+ <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="433"/>
+ <location filename="../../CopyEngineFactory.cpp" line="436"/>
+ <location filename="../../CopyEngineFactory.cpp" line="441"/>
+ <location filename="../../CopyEngineFactory.cpp" line="445"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <location filename="../../CopyEngineFactory.cpp" line="438"/>
+ <location filename="../../CopyEngineFactory.cpp" line="442"/>
+ <location filename="../../CopyEngineFactory.cpp" line="446"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="437"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="439"/>
+ <location filename="../../CopyEngineFactory.cpp" line="451"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="443"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="447"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="448"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="449"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="450"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="453"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="454"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="455"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="506"/>
+ <location filename="../../CopyEngineFactory.cpp" line="545"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="506"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="545"/>
+ <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="137"/>
+ <source>%name% - copy%suffix%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="144"/>
+ <source>%name% - copy (%number%)%suffix%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="228"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="228"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="111"/>
+ <source>%name% - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="118"/>
+ <source>%name% - copy (%number%)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="184"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="184"/>
+ <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="93"/>
+ <location filename="../../Filters.cpp" line="131"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="96"/>
+ <location filename="../../Filters.cpp" line="134"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="99"/>
+ <location filename="../../Filters.cpp" line="137"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="107"/>
+ <location filename="../../Filters.cpp" line="145"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="110"/>
+ <location filename="../../Filters.cpp" line="148"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="116"/>
+ <location filename="../../Filters.cpp" line="154"/>
+ <location filename="../../Filters.cpp" line="216"/>
+ <location filename="../../Filters.cpp" line="255"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="57"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="122"/>
+ <source>%name% - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="131"/>
+ <source>%name% - copy (%number%)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="190"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="190"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1490"/>
+ <location filename="../../ListThread.cpp" line="2422"/>
+ <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="1497"/>
+ <location filename="../../ListThread.cpp" line="2429"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1513"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1520"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1529"/>
+ <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="1538"/>
+ <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="1544"/>
+ <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="1607"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1615"/>
+ <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="233"/>
+ <source>Unable to move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="276"/>
+ <source>Unable to remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="59"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="188"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="196"/>
+ <location filename="../../ReadThread.cpp" line="422"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="237"/>
+ <location filename="../../ReadThread.cpp" line="470"/>
+ <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="35"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="41"/>
+ <source>%name% - copy%suffix%</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="57"/>
+ <source>%name% - copy (%number%)%suffix%</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="67"/>
+ <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;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number, &lt;span style=&quot; font-weight:600;&quot;&gt;%suffix%&lt;/span&gt; file suffix&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.ui" line="51"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)%3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="274"/>
+ <source>Blacklisted folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="338"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="345"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="401"/>
+ <source>%name% - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="408"/>
+ <source>%name% - copy (%number%)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="444"/>
+ <source>This is not a folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="446"/>
+ <source>The folder does exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="448"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="459"/>
+ <source>Problem with name encoding</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="244"/>
+ <location filename="../../TransferThread.cpp" line="673"/>
+ <location filename="../../TransferThread.cpp" line="745"/>
+ <location filename="../../TransferThread.cpp" line="1315"/>
+ <source>File not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="346"/>
+ <location filename="../../TransferThread.cpp" line="363"/>
+ <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="421"/>
+ <location filename="../../TransferThread.cpp" line="444"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="586"/>
+ <source>Drive %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="588"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="592"/>
+ <source>root</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="645"/>
+ <source>%name% - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="652"/>
+ <source>%name% - copy (%number%)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="711"/>
+ <location filename="../../TransferThread.cpp" line="826"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="751"/>
+ <location filename="../../TransferThread.cpp" line="838"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="787"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="832"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1134"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1224"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1239"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1250"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1315"/>
+ <location filename="../../TransferThread.cpp" line="1333"/>
+ <location filename="../../TransferThread.cpp" line="1348"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="228"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="83"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="277"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="680"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="705"/>
+ <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="44"/>
+ <source>Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="53"/>
+ <source>Move the whole folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="60"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="70"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="83"/>
+ <source>Autostart the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="90"/>
+ <location filename="../../copyEngineOptions.ui" line="110"/>
+ <source>Less performance if checked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="113"/>
+ <source>Follow the strict order</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="139"/>
+ <source>Error and collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="145"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="155"/>
+ <source>When file error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="181"/>
+ <source>When file collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="241"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="272"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="279"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="299"/>
+ <source>Delete partially transferred files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="312"/>
+ <source>Rename the original destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="343"/>
+ <source>Control</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="358"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="365"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="382"/>
+ <source>Verify checksums</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="414"/>
+ <source>Performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="420"/>
+ <source>Parallel buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="427"/>
+ <location filename="../../copyEngineOptions.ui" line="440"/>
+ <location filename="../../copyEngineOptions.ui" line="453"/>
+ <location filename="../../copyEngineOptions.ui" line="490"/>
+ <location filename="../../copyEngineOptions.ui" line="559"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="469"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="476"/>
+ <source>Sequential buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="483"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="506"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="513"/>
+ <source>Transfer algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="552"/>
+ <source>Parallelize if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="582"/>
+ <source>Inode threads (unsafe &gt; 1)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="589"/>
+ <location filename="../../copyEngineOptions.ui" line="599"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="602"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="618"/>
+ <source>Misc</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="624"/>
+ <source>Check the disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="634"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="646"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="668"/>
+ <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-unmaintained/CopyEngine/Ultracopier-Qt/Languages/en/translation.qm b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/en/translation.qm
new file mode 100755
index 0000000..d925dd6
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/en/translation.qm
Binary files differ
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/en/translation.ts b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/en/translation.ts
new file mode 100755
index 0000000..f2cd952
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/en/translation.ts
@@ -0,0 +1,1291 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" 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="437"/>
+ <location filename="../../CopyEngine.cpp" line="459"/>
+ <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="470"/>
+ <location filename="../../CopyEngine.cpp" line="492"/>
+ <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="516"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="516"/>
+ <source>Use the actual destination &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="740"/>
+ <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="1070"/>
+ <location filename="../../CopyEngine.cpp" line="1073"/>
+ <location filename="../../CopyEngine.cpp" line="1078"/>
+ <location filename="../../CopyEngine.cpp" line="1082"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1071"/>
+ <location filename="../../CopyEngine.cpp" line="1075"/>
+ <location filename="../../CopyEngine.cpp" line="1079"/>
+ <location filename="../../CopyEngine.cpp" line="1083"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1074"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1076"/>
+ <location filename="../../CopyEngine.cpp" line="1088"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1080"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1084"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1085"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1086"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1087"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1090"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1091"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1092"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1193"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1193"/>
+ <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="433"/>
+ <location filename="../../CopyEngineFactory.cpp" line="436"/>
+ <location filename="../../CopyEngineFactory.cpp" line="441"/>
+ <location filename="../../CopyEngineFactory.cpp" line="445"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <location filename="../../CopyEngineFactory.cpp" line="438"/>
+ <location filename="../../CopyEngineFactory.cpp" line="442"/>
+ <location filename="../../CopyEngineFactory.cpp" line="446"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="437"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="439"/>
+ <location filename="../../CopyEngineFactory.cpp" line="451"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="443"/>
+ <source>Put at the end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="447"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="448"/>
+ <source>Overwrite if different</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="449"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="450"/>
+ <source>Overwrite if older</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="453"/>
+ <source>Automatic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="454"/>
+ <source>Sequential</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="455"/>
+ <source>Parallel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="506"/>
+ <location filename="../../CopyEngineFactory.cpp" line="545"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="506"/>
+ <source>Options engine is not loaded. Unable to access the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="545"/>
+ <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="137"/>
+ <source>%name% - copy%suffix%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="144"/>
+ <source>%name% - copy (%number%)%suffix%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="228"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="228"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="111"/>
+ <source>%name% - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="118"/>
+ <source>%name% - copy (%number%)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="184"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="184"/>
+ <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="93"/>
+ <location filename="../../Filters.cpp" line="131"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="96"/>
+ <location filename="../../Filters.cpp" line="134"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="99"/>
+ <location filename="../../Filters.cpp" line="137"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="107"/>
+ <location filename="../../Filters.cpp" line="145"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="110"/>
+ <location filename="../../Filters.cpp" line="148"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="116"/>
+ <location filename="../../Filters.cpp" line="154"/>
+ <location filename="../../Filters.cpp" line="216"/>
+ <location filename="../../Filters.cpp" line="255"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="57"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="122"/>
+ <source>%name% - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="131"/>
+ <source>%name% - copy (%number%)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="190"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="190"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1490"/>
+ <location filename="../../ListThread.cpp" line="2422"/>
+ <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="1497"/>
+ <location filename="../../ListThread.cpp" line="2429"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1513"/>
+ <source>Problem reading file, or file-size is 0</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1520"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1529"/>
+ <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="1538"/>
+ <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="1544"/>
+ <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="1607"/>
+ <source>Some errors have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1615"/>
+ <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="233"/>
+ <source>Unable to move the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="276"/>
+ <source>Unable to remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="59"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="188"/>
+ <source>Internal error reading the source file:block size out of range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="196"/>
+ <location filename="../../ReadThread.cpp" line="422"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="237"/>
+ <location filename="../../ReadThread.cpp" line="470"/>
+ <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="35"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="41"/>
+ <source>%name% - copy%suffix%</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="57"/>
+ <source>%name% - copy (%number%)%suffix%</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="67"/>
+ <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;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number, &lt;span style=&quot; font-weight:600;&quot;&gt;%suffix%&lt;/span&gt; file suffix&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.ui" line="51"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)%3</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="274"/>
+ <source>Blacklisted folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="338"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="345"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="401"/>
+ <source>%name% - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="408"/>
+ <source>%name% - copy (%number%)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="444"/>
+ <source>This is not a folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="446"/>
+ <source>The folder does exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="448"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="459"/>
+ <source>Problem with name encoding</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="244"/>
+ <location filename="../../TransferThread.cpp" line="673"/>
+ <location filename="../../TransferThread.cpp" line="745"/>
+ <location filename="../../TransferThread.cpp" line="1315"/>
+ <source>File not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="346"/>
+ <location filename="../../TransferThread.cpp" line="363"/>
+ <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="421"/>
+ <location filename="../../TransferThread.cpp" line="444"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="586"/>
+ <source>Drive %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="588"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="592"/>
+ <source>root</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="645"/>
+ <source>%name% - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="652"/>
+ <source>%name% - copy (%number%)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="711"/>
+ <location filename="../../TransferThread.cpp" line="826"/>
+ <source>The source file doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="751"/>
+ <location filename="../../TransferThread.cpp" line="838"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="787"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="832"/>
+ <source>Another file exists at same place</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1134"/>
+ <source>The checksums do not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1224"/>
+ <source>Internal error: The destination is not closed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1239"/>
+ <source>Internal error: The size transfered doesn&apos;t match</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1250"/>
+ <source>Internal error: The buffer is not empty</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1315"/>
+ <location filename="../../TransferThread.cpp" line="1333"/>
+ <location filename="../../TransferThread.cpp" line="1348"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="228"/>
+ <source>Try rename with using special characters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="83"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="277"/>
+ <source>Internal error, please report it!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="680"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="705"/>
+ <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="44"/>
+ <source>Transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="53"/>
+ <source>Move the whole folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="60"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="70"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="83"/>
+ <source>Autostart the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="90"/>
+ <location filename="../../copyEngineOptions.ui" line="110"/>
+ <source>Less performance if checked</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="113"/>
+ <source>Follow the strict order</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="139"/>
+ <source>Error and collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="145"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="155"/>
+ <source>When file error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="181"/>
+ <source>When file collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="241"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="272"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="279"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="299"/>
+ <source>Delete partially transferred files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="312"/>
+ <source>Rename the original destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="343"/>
+ <source>Control</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="358"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="365"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="382"/>
+ <source>Verify checksums</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="414"/>
+ <source>Performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="420"/>
+ <source>Parallel buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="427"/>
+ <location filename="../../copyEngineOptions.ui" line="440"/>
+ <location filename="../../copyEngineOptions.ui" line="453"/>
+ <location filename="../../copyEngineOptions.ui" line="490"/>
+ <location filename="../../copyEngineOptions.ui" line="559"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="469"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="476"/>
+ <source>Sequential buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="483"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="506"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="513"/>
+ <source>Transfer algorithm</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="552"/>
+ <source>Parallelize if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="582"/>
+ <source>Inode threads (unsafe &gt; 1)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="589"/>
+ <location filename="../../copyEngineOptions.ui" line="599"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="602"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="618"/>
+ <source>Misc</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="624"/>
+ <source>Check the disk space</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="634"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="646"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="668"/>
+ <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-unmaintained/CopyEngine/Ultracopier-Qt/Languages/es/translation.qm b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/es/translation.qm
new file mode 100755
index 0000000..9518d5a
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/es/translation.qm
Binary files differ
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/es/translation.ts b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/es/translation.ts
new file mode 100755
index 0000000..1e2bcb1
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/es/translation.ts
@@ -0,0 +1,1291 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" 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="437"/>
+ <location filename="../../CopyEngine.cpp" line="459"/>
+ <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="470"/>
+ <location filename="../../CopyEngine.cpp" line="492"/>
+ <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="516"/>
+ <source>Destination</source>
+ <translation>Destino</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="516"/>
+ <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="740"/>
+ <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="1070"/>
+ <location filename="../../CopyEngine.cpp" line="1073"/>
+ <location filename="../../CopyEngine.cpp" line="1078"/>
+ <location filename="../../CopyEngine.cpp" line="1082"/>
+ <source>Ask</source>
+ <translation>Pedir</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1071"/>
+ <location filename="../../CopyEngine.cpp" line="1075"/>
+ <location filename="../../CopyEngine.cpp" line="1079"/>
+ <location filename="../../CopyEngine.cpp" line="1083"/>
+ <source>Skip</source>
+ <translation>Omitir</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1074"/>
+ <source>Merge</source>
+ <translation>Unir</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1076"/>
+ <location filename="../../CopyEngine.cpp" line="1088"/>
+ <source>Rename</source>
+ <translation>Cambiar el nombre</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1080"/>
+ <source>Put at the end</source>
+ <translation>Ponga al final</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1084"/>
+ <source>Overwrite</source>
+ <translation>Sobrescribir</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1085"/>
+ <source>Overwrite if different</source>
+ <translation>Sobrescribir si es diferente</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1086"/>
+ <source>Overwrite if newer</source>
+ <translation>Sobrescribir si nuevo</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1087"/>
+ <source>Overwrite if older</source>
+ <translation>Sobrescribir si es mayor</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1090"/>
+ <source>Automatic</source>
+ <translation>Automático</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1091"/>
+ <source>Sequential</source>
+ <translation>Secuencial</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1092"/>
+ <source>Parallel</source>
+ <translation>Paralelo</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1193"/>
+ <source>Options error</source>
+ <translation>error Opciones</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1193"/>
+ <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="433"/>
+ <location filename="../../CopyEngineFactory.cpp" line="436"/>
+ <location filename="../../CopyEngineFactory.cpp" line="441"/>
+ <location filename="../../CopyEngineFactory.cpp" line="445"/>
+ <source>Ask</source>
+ <translation>Pedir</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <location filename="../../CopyEngineFactory.cpp" line="438"/>
+ <location filename="../../CopyEngineFactory.cpp" line="442"/>
+ <location filename="../../CopyEngineFactory.cpp" line="446"/>
+ <source>Skip</source>
+ <translation>Omitir</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="437"/>
+ <source>Merge</source>
+ <translation>Unir</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="439"/>
+ <location filename="../../CopyEngineFactory.cpp" line="451"/>
+ <source>Rename</source>
+ <translation>Cambiar el nombre</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="443"/>
+ <source>Put at the end</source>
+ <translation>Ponga al final</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="447"/>
+ <source>Overwrite</source>
+ <translation>Sobrescribir</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="448"/>
+ <source>Overwrite if different</source>
+ <translation>Sobrescribir si es diferente</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="449"/>
+ <source>Overwrite if newer</source>
+ <translation>Sobrescribir si nuevo</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="450"/>
+ <source>Overwrite if older</source>
+ <translation>Sobrescribir si es mayor</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="453"/>
+ <source>Automatic</source>
+ <translation>Automático</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="454"/>
+ <source>Sequential</source>
+ <translation>Secuencial</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="455"/>
+ <source>Parallel</source>
+ <translation>Paralelo</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="506"/>
+ <location filename="../../CopyEngineFactory.cpp" line="545"/>
+ <source>Options error</source>
+ <translation>error Opciones</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="506"/>
+ <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="545"/>
+ <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="137"/>
+ <source>%name% - copy%suffix%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="144"/>
+ <source>%name% - copy (%number%)%suffix%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="228"/>
+ <source>Error</source>
+ <translation>Error</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="228"/>
+ <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="111"/>
+ <source>%name% - copy</source>
+ <translation type="unfinished">%name% - copia</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="118"/>
+ <source>%name% - copy (%number%)</source>
+ <translation type="unfinished">%name% - copia (%number%)</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="184"/>
+ <source>Error</source>
+ <translation>Error</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="184"/>
+ <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="93"/>
+ <location filename="../../Filters.cpp" line="131"/>
+ <source>Raw text</source>
+ <translation>texto Fuente</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="96"/>
+ <location filename="../../Filters.cpp" line="134"/>
+ <source>Simplified regex</source>
+ <translation>Simplificado regex</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="99"/>
+ <location filename="../../Filters.cpp" line="137"/>
+ <source>Perl&apos;s regex</source>
+ <translation>Perl&apos;s regex</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="107"/>
+ <location filename="../../Filters.cpp" line="145"/>
+ <source>Only on file</source>
+ <translation>Sólo en el archivo</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="110"/>
+ <location filename="../../Filters.cpp" line="148"/>
+ <source>Only on folder</source>
+ <translation>Sólo en la carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="116"/>
+ <location filename="../../Filters.cpp" line="154"/>
+ <location filename="../../Filters.cpp" line="216"/>
+ <location filename="../../Filters.cpp" line="255"/>
+ <source>Full match</source>
+ <translation>Partido completo</translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="57"/>
+ <source>Folder already exists</source>
+ <translation>Carpeta ya existe</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="122"/>
+ <source>%name% - copy</source>
+ <translation type="unfinished">%name% - copia</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="131"/>
+ <source>%name% - copy (%number%)</source>
+ <translation type="unfinished">%name% - copia (%number%)</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="190"/>
+ <source>Error</source>
+ <translation>Error</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="190"/>
+ <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="1490"/>
+ <location filename="../../ListThread.cpp" line="2422"/>
+ <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="1497"/>
+ <location filename="../../ListThread.cpp" line="2429"/>
+ <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="1513"/>
+ <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="1520"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation>Encabezado incorrecto: &quot;%1&quot;</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1529"/>
+ <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="1538"/>
+ <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="1544"/>
+ <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="1607"/>
+ <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="1615"/>
+ <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>
+ <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="233"/>
+ <source>Unable to move the folder</source>
+ <translation>No se puede mover la carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="276"/>
+ <source>Unable to remove</source>
+ <translation>No se puede eliminar</translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="59"/>
+ <source>Internal error, please report it!</source>
+ <translation>Error interno, por favor informe de ello!</translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="188"/>
+ <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="196"/>
+ <location filename="../../ReadThread.cpp" line="422"/>
+ <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="237"/>
+ <location filename="../../ReadThread.cpp" line="470"/>
+ <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="35"/>
+ <source>First renaming</source>
+ <translation>En primer lugar el cambio de nombre</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="41"/>
+ <source>%name% - copy%suffix%</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="57"/>
+ <source>%name% - copy (%number%)%suffix%</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="67"/>
+ <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;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number, &lt;span style=&quot; font-weight:600;&quot;&gt;%suffix%&lt;/span&gt; file suffix&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.ui" line="51"/>
+ <source>Second renaming</source>
+ <translation>En segundo lugar el cambio de nombre</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation>Reglas de Cambio de nombre</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)%3</source>
+ <translation type="unfinished">%1 - copia (%2) {1 ?} {2)%3?}</translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="274"/>
+ <source>Blacklisted folder</source>
+ <translation>Carpeta de la lista negra</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="338"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="345"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="401"/>
+ <source>%name% - copy</source>
+ <translation type="unfinished">%name% - copia</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="408"/>
+ <source>%name% - copy (%number%)</source>
+ <translation type="unfinished">%name% - copia (%number%)</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="444"/>
+ <source>This is not a folder</source>
+ <translation>Esto no es una carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="446"/>
+ <source>The folder does exists</source>
+ <translation>La carpeta no existe</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="448"/>
+ <source>The folder is not readable</source>
+ <translation>La carpeta no se puede leer</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="459"/>
+ <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="244"/>
+ <location filename="../../TransferThread.cpp" line="673"/>
+ <location filename="../../TransferThread.cpp" line="745"/>
+ <location filename="../../TransferThread.cpp" line="1315"/>
+ <source>File not found</source>
+ <translation>Archivo no encontrado</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="346"/>
+ <location filename="../../TransferThread.cpp" line="363"/>
+ <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="421"/>
+ <location filename="../../TransferThread.cpp" line="444"/>
+ <source>Internal error: Already opening</source>
+ <translation type="unfinished">Error interno: Ya la apertura</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="586"/>
+ <source>Drive %1</source>
+ <translation type="unfinished">Drive %1</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="588"/>
+ <source>Unknown folder</source>
+ <translation type="unfinished">Desconocido carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="592"/>
+ <source>root</source>
+ <translation type="unfinished">raíz</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="787"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation type="unfinished">La fuente no existe</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1315"/>
+ <location filename="../../TransferThread.cpp" line="1333"/>
+ <location filename="../../TransferThread.cpp" line="1348"/>
+ <source>Unable to change the date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="711"/>
+ <location filename="../../TransferThread.cpp" line="826"/>
+ <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="1134"/>
+ <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="1239"/>
+ <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="751"/>
+ <location filename="../../TransferThread.cpp" line="838"/>
+ <source>Unable to do the folder</source>
+ <translation type="unfinished">Incapaz de hacer la carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="228"/>
+ <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="645"/>
+ <source>%name% - copy</source>
+ <translation type="unfinished">%name% - copia</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="652"/>
+ <source>%name% - copy (%number%)</source>
+ <translation type="unfinished">%name% - copia (%number%)</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="832"/>
+ <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="1224"/>
+ <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="1250"/>
+ <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="83"/>
+ <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="277"/>
+ <source>Internal error, please report it!</source>
+ <translation>Error interno, por favor informe de ello!</translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="680"/>
+ <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="705"/>
+ <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="44"/>
+ <source>Transfer</source>
+ <translation>Transferencia</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="53"/>
+ <source>Move the whole folder</source>
+ <translation>Mueva la carpeta completa</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="60"/>
+ <source>Transfer the file rights</source>
+ <translation>Transferencia de los derechos de archivo</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="70"/>
+ <source>Keep the file date</source>
+ <translation>Mantener la fecha de archivo</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="83"/>
+ <source>Autostart the transfer</source>
+ <translation>Inicio automático de la transferencia</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="90"/>
+ <location filename="../../copyEngineOptions.ui" line="110"/>
+ <source>Less performance if checked</source>
+ <translation>Si comprueba Menos rendimiento</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="113"/>
+ <source>Follow the strict order</source>
+ <translation>Siga el orden estricto</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="139"/>
+ <source>Error and collision</source>
+ <translation>Error y de la colisión</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="145"/>
+ <source>When folder error</source>
+ <translation>Cuando el error carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="155"/>
+ <source>When file error</source>
+ <translation>Cuando archivo error</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="181"/>
+ <source>When file collision</source>
+ <translation>Cuando archivo colisión</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="241"/>
+ <source>When folder collision</source>
+ <translation>Cuando la colisión carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="272"/>
+ <source>Check if destination folder exists</source>
+ <translation>Compruebe si existe la carpeta de destino</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="279"/>
+ <source>Renaming rules</source>
+ <translation>Reglas de Cambio de nombre</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="299"/>
+ <source>Delete partially transferred files</source>
+ <translation>Eliminar archivos parcialmente transferidos</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="312"/>
+ <source>Rename the original destination</source>
+ <translation>Cambie el nombre del destino original</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="343"/>
+ <source>Control</source>
+ <translation>Controlar</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Checksum</source>
+ <translation>Suma de comprobación</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="358"/>
+ <source>Only after error</source>
+ <translation>Sólo después de un error</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="365"/>
+ <source>Ignore if impossible</source>
+ <translation>No haga caso si no es posible</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="382"/>
+ <source>Verify checksums</source>
+ <translation>Verifique checksums</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="414"/>
+ <source>Performance</source>
+ <translation>Rendimiento</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="420"/>
+ <source>Parallel buffer</source>
+ <translation>Búfer paralelo</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="427"/>
+ <location filename="../../copyEngineOptions.ui" line="440"/>
+ <location filename="../../copyEngineOptions.ui" line="453"/>
+ <location filename="../../copyEngineOptions.ui" line="490"/>
+ <location filename="../../copyEngineOptions.ui" line="559"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="469"/>
+ <source>Block size</source>
+ <translation>Tamaño del bloque</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="476"/>
+ <source>Sequential buffer</source>
+ <translation>Tampón secuencial</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="483"/>
+ <source>Enable OS buffer</source>
+ <translation>Habilitar el OS de amortiguación</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="506"/>
+ <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="513"/>
+ <source>Transfer algorithm</source>
+ <translation>Algoritmo de transferencia</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="552"/>
+ <source>Parallelize if smaller than</source>
+ <translation>Paralelice si más pequeño que</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="582"/>
+ <source>Inode threads (unsafe &gt; 1)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="589"/>
+ <location filename="../../copyEngineOptions.ui" line="599"/>
+ <source>More cpu, but better organisation on the disk</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="602"/>
+ <source>Order the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="618"/>
+ <source>Misc</source>
+ <translation>Misc</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="624"/>
+ <source>Check the disk space</source>
+ <translation>Compruebe el espacio en disco</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="634"/>
+ <source>Use this folder when destination is not set</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="646"/>
+ <source>Browse</source>
+ <translation>Busque</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="668"/>
+ <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-unmaintained/CopyEngine/Ultracopier-Qt/Languages/fr/translation.qm b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/fr/translation.qm
new file mode 100755
index 0000000..f8759ce
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/fr/translation.qm
Binary files differ
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/fr/translation.ts b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/fr/translation.ts
new file mode 100755
index 0000000..aa8d78a
--- /dev/null
+++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/fr/translation.ts
@@ -0,0 +1,1292 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" 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="437"/>
+ <location filename="../../CopyEngine.cpp" line="459"/>
+ <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="470"/>
+ <location filename="../../CopyEngine.cpp" line="492"/>
+ <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="516"/>
+ <source>Destination</source>
+ <translation>Destination</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="516"/>
+ <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="740"/>
+ <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="1070"/>
+ <location filename="../../CopyEngine.cpp" line="1073"/>
+ <location filename="../../CopyEngine.cpp" line="1078"/>
+ <location filename="../../CopyEngine.cpp" line="1082"/>
+ <source>Ask</source>
+ <translation>Demander</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1071"/>
+ <location filename="../../CopyEngine.cpp" line="1075"/>
+ <location filename="../../CopyEngine.cpp" line="1079"/>
+ <location filename="../../CopyEngine.cpp" line="1083"/>
+ <source>Skip</source>
+ <translation>Passer</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1074"/>
+ <source>Merge</source>
+ <translation>Fusionner</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1076"/>
+ <location filename="../../CopyEngine.cpp" line="1088"/>
+ <source>Rename</source>
+ <translation>Renommer</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1080"/>
+ <source>Put at the end</source>
+ <translation>Mettre à la fin</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1084"/>
+ <source>Overwrite</source>
+ <translation>Écraser</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1085"/>
+ <source>Overwrite if different</source>
+ <translation>Écraser si différent</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1086"/>
+ <source>Overwrite if newer</source>
+ <translation>Écraser si plus récent</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1087"/>
+ <source>Overwrite if older</source>
+ <translation>Écraser si plus vieux</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1090"/>
+ <source>Automatic</source>
+ <translation>Automatique</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1091"/>
+ <source>Sequential</source>
+ <translation>Séquentiel</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1092"/>
+ <source>Parallel</source>
+ <translation>Parallèle</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1193"/>
+ <source>Options error</source>
+ <translation>Erreur d&apos;options</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngine.cpp" line="1193"/>
+ <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="433"/>
+ <location filename="../../CopyEngineFactory.cpp" line="436"/>
+ <location filename="../../CopyEngineFactory.cpp" line="441"/>
+ <location filename="../../CopyEngineFactory.cpp" line="445"/>
+ <source>Ask</source>
+ <translation>Demander</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="434"/>
+ <location filename="../../CopyEngineFactory.cpp" line="438"/>
+ <location filename="../../CopyEngineFactory.cpp" line="442"/>
+ <location filename="../../CopyEngineFactory.cpp" line="446"/>
+ <source>Skip</source>
+ <translation>Passer</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="437"/>
+ <source>Merge</source>
+ <translation>Fusionner</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="439"/>
+ <location filename="../../CopyEngineFactory.cpp" line="451"/>
+ <source>Rename</source>
+ <translation>Renommer</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="443"/>
+ <source>Put at the end</source>
+ <translation>Mettre à la fin</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="447"/>
+ <source>Overwrite</source>
+ <translation>Écraser</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="448"/>
+ <source>Overwrite if different</source>
+ <translation>Écraser si différent</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="449"/>
+ <source>Overwrite if newer</source>
+ <translation>Écraser si plus récent</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="450"/>
+ <source>Overwrite if older</source>
+ <translation>Écraser si plus vieux</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="453"/>
+ <source>Automatic</source>
+ <translation>Automatique</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="454"/>
+ <source>Sequential</source>
+ <translation>Séquentiel</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="455"/>
+ <source>Parallel</source>
+ <translation>Parallèle</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="506"/>
+ <location filename="../../CopyEngineFactory.cpp" line="545"/>
+ <source>Options error</source>
+ <translation>Erreur d&apos;options</translation>
+ </message>
+ <message>
+ <location filename="../../CopyEngineFactory.cpp" line="506"/>
+ <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="545"/>
+ <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="137"/>
+ <source>%name% - copy%suffix%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="144"/>
+ <source>%name% - copy (%number%)%suffix%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="228"/>
+ <source>Error</source>
+ <translation>Erreur</translation>
+ </message>
+ <message>
+ <location filename="../../FileExistsDialog.cpp" line="228"/>
+ <source>Try rename with using special characters</source>
+ <translation>Essaie de renommage avec caratéres interdits</translation>
+ </message>
+</context>
+<context>
+ <name>FileIsSameDialog</name>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="111"/>
+ <source>%name% - copy</source>
+ <translation type="unfinished">%name% - copie</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="118"/>
+ <source>%name% - copy (%number%)</source>
+ <translation type="unfinished">%name% - copie (%number%)</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="184"/>
+ <source>Error</source>
+ <translation>Erreur</translation>
+ </message>
+ <message>
+ <location filename="../../FileIsSameDialog.cpp" line="184"/>
+ <source>Try rename with using special characters</source>
+ <translation>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="93"/>
+ <location filename="../../Filters.cpp" line="131"/>
+ <source>Raw text</source>
+ <translation>Texte brute</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="96"/>
+ <location filename="../../Filters.cpp" line="134"/>
+ <source>Simplified regex</source>
+ <translation>Regex simplifié</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="99"/>
+ <location filename="../../Filters.cpp" line="137"/>
+ <source>Perl&apos;s regex</source>
+ <translation>Regex perl</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="107"/>
+ <location filename="../../Filters.cpp" line="145"/>
+ <source>Only on file</source>
+ <translation>Appliquer sur fichier</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="110"/>
+ <location filename="../../Filters.cpp" line="148"/>
+ <source>Only on folder</source>
+ <translation>Appliquer sur dossier</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="116"/>
+ <location filename="../../Filters.cpp" line="154"/>
+ <location filename="../../Filters.cpp" line="216"/>
+ <location filename="../../Filters.cpp" line="255"/>
+ <source>Full match</source>
+ <translation>Correspondance totale</translation>
+ </message>
+</context>
+<context>
+ <name>FolderExistsDialog</name>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="57"/>
+ <source>Folder already exists</source>
+ <translation>Dossier déjà existant</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="122"/>
+ <source>%name% - copy</source>
+ <translation type="unfinished">%name% - copie</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="131"/>
+ <source>%name% - copy (%number%)</source>
+ <translation type="unfinished">%name% - copie (%number%)</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="190"/>
+ <source>Error</source>
+ <translation>Erreur</translation>
+ </message>
+ <message>
+ <location filename="../../FolderExistsDialog.cpp" line="190"/>
+ <source>Try rename with using special characters</source>
+ <translation>Essaie de renommage avec caratéres interdits</translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1490"/>
+ <location filename="../../ListThread.cpp" line="2422"/>
+ <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="1497"/>
+ <location filename="../../ListThread.cpp" line="2429"/>
+ <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="1513"/>
+ <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="1520"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation>Mauvais en-tête: &quot;%1&quot;</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1529"/>
+ <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="1538"/>
+ <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="1544"/>
+ <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="1607"/>
+ <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="1615"/>
+ <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>
+ <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="233"/>
+ <source>Unable to move the folder</source>
+ <translation>Impossible de déplacer le dossier</translation>
+ </message>
+ <message>
+ <location filename="../../MkPath.cpp" line="93"/>
+ <location filename="../../MkPath.cpp" line="276"/>
+ <source>Unable to remove</source>
+ <translation>Impossible de supprimer</translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="59"/>
+ <source>Internal error, please report it!</source>
+ <translation>Erreur interne, merci de la reporter!</translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="188"/>
+ <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="196"/>
+ <location filename="../../ReadThread.cpp" line="422"/>
+ <source>Unable to read the source file: </source>
+ <translation>Impossible de lire le fichier source: </translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="237"/>
+ <location filename="../../ReadThread.cpp" line="470"/>
+ <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="35"/>
+ <source>First renaming</source>
+ <translation>Premier renommage</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="41"/>
+ <source>%name% - copy%suffix%</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="57"/>
+ <source>%name% - copy (%number%)%suffix%</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="67"/>
+ <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;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number, &lt;span style=&quot; font-weight:600;&quot;&gt;%suffix%&lt;/span&gt; file suffix&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.ui" line="51"/>
+ <source>Second renaming</source>
+ <translation>Second renommage</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation>Règles de renommage</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)%3</source>
+ <translation type="unfinished">%1 - copie (%2) {1 ?} {2)%3?}</translation>
+ </message>
+</context>
+<context>
+ <name>ScanFileOrFolder</name>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="274"/>
+ <source>Blacklisted folder</source>
+ <translation>Dossier banis</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="338"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copie</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="345"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="401"/>
+ <source>%name% - copy</source>
+ <translation type="unfinished">%name% - copie</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="408"/>
+ <source>%name% - copy (%number%)</source>
+ <translation type="unfinished">%name% - copie (%number%)</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="444"/>
+ <source>This is not a folder</source>
+ <translation>N&apos;est pas un dossier</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="446"/>
+ <source>The folder does exists</source>
+ <translation>Le répertoire n&apos;existe pas</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="448"/>
+ <source>The folder is not readable</source>
+ <translation>Le répertoire n&apos;est pas lisible</translation>
+ </message>
+ <message>
+ <location filename="../../ScanFileOrFolder.cpp" line="459"/>
+ <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="244"/>
+ <location filename="../../TransferThread.cpp" line="673"/>
+ <location filename="../../TransferThread.cpp" line="745"/>
+ <location filename="../../TransferThread.cpp" line="1315"/>
+ <source>File not found</source>
+ <translation>Fichier non trouvé</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="586"/>
+ <source>Drive %1</source>
+ <translation>Lecteur %1</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="588"/>
+ <source>Unknown folder</source>
+ <translation>Dossier inconnu</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="592"/>
+ <source>root</source>
+ <translation>racine</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="787"/>
+ <source>The source doesn&apos;t exist</source>
+ <translation>La source n&apos;existe pas</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="711"/>
+ <location filename="../../TransferThread.cpp" line="826"/>
+ <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="1134"/>
+ <source>The checksums do not match</source>
+ <translation>Les sommes de controle ne correspondent pas</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="1239"/>
+ <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="751"/>
+ <location filename="../../TransferThread.cpp" line="838"/>
+ <source>Unable to do the folder</source>
+ <translation>Impossible de créer le dossier</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="228"/>
+ <source>Try rename with using special characters</source>
+ <translation>Essaie de renommage avec caratéres interdits</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="346"/>
+ <location filename="../../TransferThread.cpp" line="363"/>
+ <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ésactiver le transfert de celui-ci</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="421"/>
+ <location filename="../../TransferThread.cpp" line="444"/>
+ <source>Internal error: Already opening</source>
+ <translation>Erreur interne: Déjà ouvert</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="645"/>
+ <source>%name% - copy</source>
+ <translation type="unfinished">%name% - copie</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="652"/>
+ <source>%name% - copy (%number%)</source>
+ <translation type="unfinished">%name% - copie (%number%)</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="832"/>
+ <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="1224"/>
+ <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="1250"/>
+ <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="1315"/>
+ <location filename="../../TransferThread.cpp" line="1333"/>
+ <location filename="../../TransferThread.cpp" line="1348"/>
+ <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="83"/>
+ <source>Path resolution error (Empty path)</source>
+ <translation>Erreur de résolution de chemain (chemain vide)</translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="277"/>
+ <source>Internal error, please report it!</source>
+ <translation>Erreur interne, merci de la reporter!</translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="680"/>
+ <source>Unable to read the source file: </source>
+ <translation>Impossible de lire le fichier source: </translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="705"/>
+ <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="44"/>
+ <source>Transfer</source>
+ <translation>Transfert</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="53"/>
+ <source>Move the whole folder</source>
+ <translation>Déplacer le dossier complet</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="60"/>
+ <source>Transfer the file rights</source>
+ <translation>Transférer les droits des fichiers</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="70"/>
+ <source>Keep the file date</source>
+ <translation>Garder la date du fichier</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="83"/>
+ <source>Autostart the transfer</source>
+ <translation>Démarrer automatiquement le transfert</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="90"/>
+ <location filename="../../copyEngineOptions.ui" line="110"/>
+ <source>Less performance if checked</source>
+ <translation>Moins de performance si coché</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="113"/>
+ <source>Follow the strict order</source>
+ <translation>Suivre l&apos;ordre strict</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="139"/>
+ <source>Error and collision</source>
+ <translation>Erreur et collision</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="145"/>
+ <source>When folder error</source>
+ <translation>En cas d&apos;erreur de répertoire</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="155"/>
+ <source>When file error</source>
+ <translation>En cas d&apos;erreur de fichier</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="181"/>
+ <source>When file collision</source>
+ <translation>En cas de collision de fichier</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="241"/>
+ <source>When folder collision</source>
+ <translation>Lors d&apos;une collision de dossier</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="272"/>
+ <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="279"/>
+ <source>Renaming rules</source>
+ <translation>Règles de renommage</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="299"/>
+ <source>Delete partially transferred files</source>
+ <translation>Supprimer les transferts partiels</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="312"/>
+ <source>Rename the original destination</source>
+ <translation>Renommer la destination originale</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="343"/>
+ <source>Control</source>
+ <translation>Controle</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="349"/>
+ <source>Checksum</source>
+ <translation>Somme de contrôle</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="358"/>
+ <source>Only after error</source>
+ <translation>Seulement après erreur</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="365"/>
+ <source>Ignore if impossible</source>
+ <translation>Ignorer si impossible</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="382"/>
+ <source>Verify checksums</source>
+ <translation>Vérifier les sommes de contrôles</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="414"/>
+ <source>Performance</source>
+ <translation>Performance</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="420"/>
+ <source>Parallel buffer</source>
+ <translation>Buffer paralléle</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="427"/>
+ <location filename="../../copyEngineOptions.ui" line="440"/>
+ <location filename="../../copyEngineOptions.ui" line="453"/>
+ <location filename="../../copyEngineOptions.ui" line="490"/>
+ <location filename="../../copyEngineOptions.ui" line="559"/>
+ <source>KB</source>
+ <translation>Ko</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="469"/>
+ <source>Block size</source>
+ <translation>Taille de bloc</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="476"/>
+ <source>Sequential buffer</source>
+ <translation>Buffer séquentiel</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="483"/>
+ <source>Enable OS buffer</source>
+ <translation>Activer le tampon de l&apos;OS</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="506"/>
+ <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="513"/>
+ <source>Transfer algorithm</source>
+ <translation>Algorithme de transfert</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="552"/>
+ <source>Parallelize if smaller than</source>
+ <translation>Parallèlise si plus petit que</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="582"/>
+ <source>Inode threads (unsafe &gt; 1)</source>
+ <translation>Inode threads (non sécurisé&gt; 1)</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="589"/>
+ <location filename="../../copyEngineOptions.ui" line="599"/>
+ <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="602"/>
+ <source>Order the list</source>
+ <translation>Ordonner la liste</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="618"/>
+ <source>Misc</source>
+ <translation>Divers</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="624"/>
+ <source>Check the disk space</source>
+ <translation>Vérifier l&apos;espace disque</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="634"/>
+ <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>
+ <location filename="../../copyEngineOptions.ui" line="646"/>
+ <source>Browse</source>
+ <translation>Parcourir</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngineOptions.ui" line="668"/>
+ <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>
+ <mess