summaryrefslogtreecommitdiff
path: root/plugins-alternative
diff options
context:
space:
mode:
Diffstat (limited to 'plugins-alternative')
-rw-r--r--plugins-alternative/CopyEngine/Rsync/AvancedQFile.cpp94
-rw-r--r--plugins-alternative/CopyEngine/Rsync/AvancedQFile.h32
-rw-r--r--plugins-alternative/CopyEngine/Rsync/CompilerInfo.h1
-rw-r--r--plugins-alternative/CopyEngine/Rsync/DebugEngineMacro.h25
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Environment.h12
-rw-r--r--plugins-alternative/CopyEngine/Rsync/FilterRules.cpp193
-rw-r--r--plugins-alternative/CopyEngine/Rsync/FilterRules.h46
-rw-r--r--plugins-alternative/CopyEngine/Rsync/FilterRules.ui162
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Filters.cpp456
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Filters.h44
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Filters.ui194
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/ar/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/de/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/el/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/es/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/fr/translation.ts810
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/hi/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/id/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/it/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/ja/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/ko/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/nl/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/no/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/pl/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/pt/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/ru/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/th/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/tr/translation.ts806
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Languages/zh/translation.ts806
-rwxr-xr-xplugins-alternative/CopyEngine/Rsync/ListThread.cpp1720
-rwxr-xr-xplugins-alternative/CopyEngine/Rsync/ListThread.h376
-rw-r--r--plugins-alternative/CopyEngine/Rsync/ListThread_InodeAction.cpp66
-rw-r--r--plugins-alternative/CopyEngine/Rsync/MkPath.cpp100
-rw-r--r--plugins-alternative/CopyEngine/Rsync/MkPath.h56
-rw-r--r--plugins-alternative/CopyEngine/Rsync/ReadThread.cpp597
-rw-r--r--plugins-alternative/CopyEngine/Rsync/ReadThread.h144
-rw-r--r--plugins-alternative/CopyEngine/Rsync/RenamingRules.cpp85
-rw-r--r--plugins-alternative/CopyEngine/Rsync/RenamingRules.h34
-rw-r--r--plugins-alternative/CopyEngine/Rsync/RenamingRules.ui129
-rw-r--r--plugins-alternative/CopyEngine/Rsync/RmPath.cpp179
-rw-r--r--plugins-alternative/CopyEngine/Rsync/RmPath.h58
-rw-r--r--plugins-alternative/CopyEngine/Rsync/StructEnumDefinition.h1
-rw-r--r--plugins-alternative/CopyEngine/Rsync/StructEnumDefinition_CopyEngine.h90
-rw-r--r--plugins-alternative/CopyEngine/Rsync/TransferThread.cpp1252
-rw-r--r--plugins-alternative/CopyEngine/Rsync/TransferThread.h221
-rw-r--r--plugins-alternative/CopyEngine/Rsync/Variable.h35
-rw-r--r--plugins-alternative/CopyEngine/Rsync/WriteThread.cpp508
-rw-r--r--plugins-alternative/CopyEngine/Rsync/WriteThread.h138
-rw-r--r--plugins-alternative/CopyEngine/Rsync/copyEngine-collision-and-error.cpp565
-rwxr-xr-xplugins-alternative/CopyEngine/Rsync/copyEngine.cpp819
-rwxr-xr-xplugins-alternative/CopyEngine/Rsync/copyEngine.h362
-rw-r--r--plugins-alternative/CopyEngine/Rsync/copyEngine.pro82
-rw-r--r--plugins-alternative/CopyEngine/Rsync/debugDialog.cpp70
-rw-r--r--plugins-alternative/CopyEngine/Rsync/debugDialog.h40
-rw-r--r--plugins-alternative/CopyEngine/Rsync/debugDialog.ui100
-rwxr-xr-xplugins-alternative/CopyEngine/Rsync/documentation.dox42
-rw-r--r--plugins-alternative/CopyEngine/Rsync/factory.cpp420
-rw-r--r--plugins-alternative/CopyEngine/Rsync/factory.h96
-rw-r--r--plugins-alternative/CopyEngine/Rsync/fileErrorDialog.cpp95
-rw-r--r--plugins-alternative/CopyEngine/Rsync/fileErrorDialog.h45
-rw-r--r--plugins-alternative/CopyEngine/Rsync/fileErrorDialog.ui220
-rw-r--r--plugins-alternative/CopyEngine/Rsync/fileExistsDialog.cpp189
-rw-r--r--plugins-alternative/CopyEngine/Rsync/fileExistsDialog.h58
-rw-r--r--plugins-alternative/CopyEngine/Rsync/fileExistsDialog.ui367
-rw-r--r--plugins-alternative/CopyEngine/Rsync/fileIsSameDialog.cpp156
-rw-r--r--plugins-alternative/CopyEngine/Rsync/fileIsSameDialog.h56
-rw-r--r--plugins-alternative/CopyEngine/Rsync/fileIsSameDialog.ui192
-rw-r--r--plugins-alternative/CopyEngine/Rsync/folderExistsDialog.cpp143
-rw-r--r--plugins-alternative/CopyEngine/Rsync/folderExistsDialog.h54
-rw-r--r--plugins-alternative/CopyEngine/Rsync/folderExistsDialog.ui282
-rw-r--r--plugins-alternative/CopyEngine/Rsync/informations.xml27
-rw-r--r--plugins-alternative/CopyEngine/Rsync/options.ui328
-rw-r--r--plugins-alternative/CopyEngine/Rsync/resources.qrc8
-rw-r--r--plugins-alternative/CopyEngine/Rsync/resources/add.pngbin0 -> 564 bytes
-rw-r--r--plugins-alternative/CopyEngine/Rsync/resources/edit.pngbin0 -> 563 bytes
-rw-r--r--plugins-alternative/CopyEngine/Rsync/resources/filter.pngbin0 -> 429 bytes
-rw-r--r--plugins-alternative/CopyEngine/Rsync/resources/remove.pngbin0 -> 722 bytes
-rw-r--r--plugins-alternative/CopyEngine/Rsync/scanFileOrFolder.cpp511
-rw-r--r--plugins-alternative/CopyEngine/Rsync/scanFileOrFolder.h91
-rw-r--r--plugins-alternative/Themes/Clean/Languages/ar/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Clean/Languages/ar/translation.ts43
-rw-r--r--plugins-alternative/Themes/Clean/Languages/de/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Clean/Languages/de/translation.ts63
-rw-r--r--plugins-alternative/Themes/Clean/Languages/el/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Clean/Languages/el/translation.ts43
-rw-r--r--plugins-alternative/Themes/Clean/Languages/es/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Clean/Languages/es/translation.ts63
-rw-r--r--plugins-alternative/Themes/Clean/Languages/fr/translation.qmbin1268 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Clean/Languages/fr/translation.ts43
-rw-r--r--plugins-alternative/Themes/Clean/Languages/hi/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Clean/Languages/hi/translation.ts43
-rw-r--r--plugins-alternative/Themes/Clean/Languages/id/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Clean/Languages/id/translation.ts43
-rw-r--r--plugins-alternative/Themes/Clean/Languages/it/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Clean/Languages/it/translation.ts63
-rw-r--r--plugins-alternative/Themes/Clean/Languages/ja/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Clean/Languages/ja/translation.ts43
-rw-r--r--plugins-alternative/Themes/Clean/Languages/ko/translation.ts55
-rw-r--r--plugins-alternative/Themes/Clean/Languages/nl/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Clean/Languages/nl/translation.ts43
-rw-r--r--plugins-alternative/Themes/Clean/Languages/no/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Clean/Languages/no/translation.ts43
-rw-r--r--plugins-alternative/Themes/Clean/Languages/pl/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Clean/Languages/pl/translation.ts43
-rw-r--r--plugins-alternative/Themes/Clean/Languages/ru/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Clean/Languages/ru/translation.ts63
-rw-r--r--plugins-alternative/Themes/Clean/Languages/th/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Clean/Languages/th/translation.ts43
-rw-r--r--plugins-alternative/Themes/Clean/Languages/tr/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Clean/Languages/tr/translation.ts43
-rw-r--r--plugins-alternative/Themes/Clean/Languages/zh/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Clean/Languages/zh/translation.ts43
-rw-r--r--plugins-alternative/Themes/Clean/informations.xml6
-rw-r--r--plugins-alternative/Themes/Clean/interface.cpp8
-rw-r--r--plugins-alternative/Themes/Clean/interface.h21
-rw-r--r--plugins-alternative/Themes/Clean/interface.pro9
-rw-r--r--plugins-alternative/Themes/Clean/interface.ui4
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/ar/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/ar/translation.ts52
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/de/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/de/translation.ts88
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/el/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/el/translation.ts52
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/es/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/es/translation.ts88
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/fr/translation.qmbin3356 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/fr/translation.ts54
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/hi/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/hi/translation.ts52
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/id/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/id/translation.ts52
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/it/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/it/translation.ts88
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/ja/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/ja/translation.ts52
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/ko/translation.ts93
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/nl/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/nl/translation.ts52
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/no/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/no/translation.ts52
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/pl/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/pl/translation.ts52
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/ru/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/ru/translation.ts88
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/th/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/th/translation.ts52
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/tr/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/tr/translation.ts52
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/zh/translation.qmbin327 -> 0 bytes
-rw-r--r--plugins-alternative/Themes/Teracopy/Languages/zh/translation.ts52
-rw-r--r--plugins-alternative/Themes/Teracopy/TransferModel.cpp441
-rw-r--r--plugins-alternative/Themes/Teracopy/TransferModel.h92
-rw-r--r--plugins-alternative/Themes/Teracopy/informations.xml6
-rw-r--r--plugins-alternative/Themes/Teracopy/interface.cpp208
-rw-r--r--plugins-alternative/Themes/Teracopy/interface.h11
-rw-r--r--plugins-alternative/Themes/Teracopy/interface.pro15
-rw-r--r--plugins-alternative/Themes/Teracopy/interface.ui23
-rw-r--r--plugins-alternative/Themes/Teracopy/resources/player_pause.pngbin0 -> 484 bytes
158 files changed, 28289 insertions, 1427 deletions
diff --git a/plugins-alternative/CopyEngine/Rsync/AvancedQFile.cpp b/plugins-alternative/CopyEngine/Rsync/AvancedQFile.cpp
new file mode 100644
index 0000000..af5805b
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/AvancedQFile.cpp
@@ -0,0 +1,94 @@
+/** \file AvancedQFile.cpp
+\brief Define the QFile herited class to set file date/time
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#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(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(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(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
+}
+
diff --git a/plugins-alternative/CopyEngine/Rsync/AvancedQFile.h b/plugins-alternative/CopyEngine/Rsync/AvancedQFile.h
new file mode 100644
index 0000000..284cf02
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/AvancedQFile.h
@@ -0,0 +1,32 @@
+/** \file AvancedQFile.h
+\brief Define the QFile herited class to set file date/time
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#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(QDateTime time);
+ /// \brief set last modification date
+ bool setLastModified(QDateTime time);
+ /// \brief set last read date
+ bool setLastRead(QDateTime time);
+
+/* //fileName
+ void close();
+ bool open ( FILE * fh, OpenMode mode )
+ bool open ( int fd, OpenMode mode )*/
+};
+
+#endif // AVANCEDQFILE_H
diff --git a/plugins-alternative/CopyEngine/Rsync/CompilerInfo.h b/plugins-alternative/CopyEngine/Rsync/CompilerInfo.h
new file mode 100644
index 0000000..84625b9
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/CompilerInfo.h
@@ -0,0 +1 @@
+#include "../../../CompilerInfo.h"
diff --git a/plugins-alternative/CopyEngine/Rsync/DebugEngineMacro.h b/plugins-alternative/CopyEngine/Rsync/DebugEngineMacro.h
new file mode 100644
index 0000000..ad08d4f
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/DebugEngineMacro.h
@@ -0,0 +1,25 @@
+/** \file DebugEngineMacro.h
+\brief Define the macro for the debug
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#ifndef DEBUGENGINEMACRO_H
+#define DEBUGENGINEMACRO_H
+
+/// \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-alternative/CopyEngine/Rsync/Environment.h b/plugins-alternative/CopyEngine/Rsync/Environment.h
new file mode 100644
index 0000000..7ac6f16
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/Environment.h
@@ -0,0 +1,12 @@
+/** \file Environment.h
+\brief Define the environment variable and global function
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#include "Variable.h"
+/// \brief The global include
+#include "StructEnumDefinition.h"
+#include "StructEnumDefinition_CopyEngine.h"
+#include "DebugEngineMacro.h"
+#include "CompilerInfo.h"
diff --git a/plugins-alternative/CopyEngine/Rsync/FilterRules.cpp b/plugins-alternative/CopyEngine/Rsync/FilterRules.cpp
new file mode 100644
index 0000000..0e6ba25
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/FilterRules.cpp
@@ -0,0 +1,193 @@
+#include "FilterRules.h"
+#include "ui_FilterRules.h"
+
+#include <QMessageBox>
+
+FilterRules::FilterRules(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::FilterRules)
+{
+ ui->setupUi(this);
+ updateChecking();
+ haveBeenValided=false;
+}
+
+FilterRules::~FilterRules()
+{
+ delete ui;
+}
+
+bool FilterRules::getIsValid()
+{
+ return isValid && haveBeenValided;
+}
+
+QString FilterRules::get_search_text()
+{
+ return ui->search->text();
+}
+
+SearchType FilterRules::get_search_type()
+{
+ switch(ui->search_type->currentIndex())
+ {
+ case 0:
+ return SearchType_rawText;
+ case 1:
+ return SearchType_simpleRegex;
+ case 2:
+ return SearchType_perlRegex;
+ }
+ return SearchType_simpleRegex;
+}
+
+ApplyOn FilterRules::get_apply_on()
+{
+ switch(ui->apply_on->currentIndex())
+ {
+ case 0:
+ return ApplyOn_file;
+ case 1:
+ return ApplyOn_fileAndFolder;
+ case 2:
+ return ApplyOn_folder;
+ }
+ return ApplyOn_fileAndFolder;
+}
+
+bool FilterRules::get_need_match_all()
+{
+ return ui->need_match_all->isChecked();
+}
+
+void FilterRules::set_search_text(QString search_text)
+{
+ ui->search->setText(search_text);
+}
+
+void FilterRules::set_search_type(SearchType search_type)
+{
+ switch(search_type)
+ {
+ case SearchType_rawText:
+ ui->search_type->setCurrentIndex(0);
+ break;
+ case SearchType_simpleRegex:
+ ui->search_type->setCurrentIndex(1);
+ break;
+ case SearchType_perlRegex:
+ ui->search_type->setCurrentIndex(2);
+ break;
+ }
+}
+
+void FilterRules::set_apply_on(ApplyOn apply_on)
+{
+ switch(apply_on)
+ {
+ case ApplyOn_file:
+ ui->apply_on->setCurrentIndex(0);
+ break;
+ case ApplyOn_fileAndFolder:
+ ui->apply_on->setCurrentIndex(1);
+ break;
+ case ApplyOn_folder:
+ ui->apply_on->setCurrentIndex(2);
+ break;
+ }
+}
+
+void FilterRules::set_need_match_all(bool need_match_all)
+{
+ ui->need_match_all->setChecked(need_match_all);
+}
+
+void FilterRules::on_search_textChanged(const QString &arg1)
+{
+ Q_UNUSED(arg1);
+ updateChecking();
+}
+
+void FilterRules::updateChecking()
+{
+ QRegExp regex;
+ isValid=!ui->search->text().isEmpty();
+ if(isValid)
+ {
+ QString tempString;
+ if(ui->search_type->currentIndex()==0)
+ {
+ tempString=QRegExp::escape(ui->search->text());
+ if(tempString.contains('/') || tempString.contains('\\'))
+ isValid=false;
+ }
+ else if(ui->search_type->currentIndex()==1)
+ {
+ tempString=QRegExp::escape(ui->search->text());
+ tempString.replace("\\*","[^\\\\/]*");
+ }
+ else if(ui->search_type->currentIndex()==2)
+ {
+ tempString=ui->search->text();
+ if(tempString.startsWith('^') && tempString.endsWith('$'))
+ {
+ ui->need_match_all->setChecked(true);
+ tempString.remove(QRegExp("^\\^"));
+ tempString.remove(QRegExp("\\$$"));
+ ui->search->setText(tempString);
+ }
+ }
+ if(isValid)
+ {
+ if(ui->need_match_all->isChecked())
+ tempString="^"+tempString+"$";
+ regex=QRegExp(tempString);
+ isValid=regex.isValid() && !regex.isEmpty();
+ }
+ }
+
+ ui->isValid->setChecked(isValid);
+ ui->testString->setEnabled(isValid);
+ ui->label_test_string->setEnabled(isValid);
+ ui->matched->setEnabled(isValid);
+ ui->matched->setChecked(isValid && ui->testString->text().contains(regex));
+ ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(isValid);
+}
+
+void FilterRules::on_isValid_clicked()
+{
+ updateChecking();
+}
+
+void FilterRules::on_testString_textChanged(const QString &arg1)
+{
+ Q_UNUSED(arg1);
+ updateChecking();
+}
+
+void FilterRules::on_matched_clicked()
+{
+ updateChecking();
+}
+
+void FilterRules::on_search_type_currentIndexChanged(int index)
+{
+ Q_UNUSED(index);
+ updateChecking();
+}
+
+void FilterRules::on_need_match_all_clicked()
+{
+ updateChecking();
+}
+
+void FilterRules::on_buttonBox_clicked(QAbstractButton *button)
+{
+ if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::RejectRole)
+ reject();
+ else
+ {
+ haveBeenValided=true;
+ accept();
+ }
+}
diff --git a/plugins-alternative/CopyEngine/Rsync/FilterRules.h b/plugins-alternative/CopyEngine/Rsync/FilterRules.h
new file mode 100644
index 0000000..f06f0cb
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/FilterRules.h
@@ -0,0 +1,46 @@
+#ifndef FILTERRULES_H
+#define FILTERRULES_H
+
+#include <QDialog>
+#include <QAbstractButton>
+#include <QPushButton>
+
+#include "StructEnumDefinition_CopyEngine.h"
+
+namespace Ui {
+class FilterRules;
+}
+
+/** All the filter rules to include/exclude some file during the listing */
+class FilterRules : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit FilterRules(QWidget *parent = 0);
+ ~FilterRules();
+ bool getIsValid();
+ QString get_search_text();
+ SearchType get_search_type();
+ ApplyOn get_apply_on();
+ bool get_need_match_all();
+ void set_search_text(QString search_text);
+ void set_search_type(SearchType search_type);
+ void set_apply_on(ApplyOn apply_on);
+ void set_need_match_all(bool need_match_all);
+private slots:
+ void on_search_textChanged(const QString &arg1);
+ void on_isValid_clicked();
+ void on_testString_textChanged(const QString &arg1);
+ void on_matched_clicked();
+ void on_search_type_currentIndexChanged(int index);
+ void on_need_match_all_clicked();
+ void on_buttonBox_clicked(QAbstractButton *button);
+private:
+ Ui::FilterRules *ui;
+ void updateChecking();
+ bool isValid;
+ bool haveBeenValided;
+};
+
+#endif // FILTERRULES_H
diff --git a/plugins-alternative/CopyEngine/Rsync/FilterRules.ui b/plugins-alternative/CopyEngine/Rsync/FilterRules.ui
new file mode 100644
index 0000000..fad35cd
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/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="resources.qrc">
+ <normaloff>:/resources/filter.png</normaloff>:/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>All string need 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 match 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="resources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/plugins-alternative/CopyEngine/Rsync/Filters.cpp b/plugins-alternative/CopyEngine/Rsync/Filters.cpp
new file mode 100644
index 0000000..ce87b52
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/Filters.cpp
@@ -0,0 +1,456 @@
+#include "Filters.h"
+#include "ui_Filters.h"
+
+#include <QMessageBox>
+
+Filters::Filters(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::Filters)
+{
+ ui->setupUi(this);
+}
+
+Filters::~Filters()
+{
+ delete ui;
+}
+
+void Filters::setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions)
+{
+ if(includeStrings.size()!=includeOptions.size() || excludeStrings.size()!=excludeOptions.size())
+ return;
+ Filters_rules new_item;
+
+ include.clear();
+ int index=0;
+ while(index<includeStrings.size())
+ {
+ new_item.search_text=includeStrings.at(index);
+ QStringList options=includeOptions.at(index).split(";");
+ new_item.need_match_all=false;
+ new_item.search_type=SearchType_rawText;
+ new_item.apply_on=ApplyOn_fileAndFolder;
+
+ if(options.contains("SearchType_simpleRegex"))
+ new_item.search_type=SearchType_simpleRegex;
+ if(options.contains("SearchType_perlRegex"))
+ new_item.search_type=SearchType_perlRegex;
+ if(options.contains("ApplyOn_file"))
+ new_item.apply_on=ApplyOn_file;
+ if(options.contains("ApplyOn_folder"))
+ new_item.apply_on=ApplyOn_folder;
+ if(options.contains("need_match_all"))
+ new_item.need_match_all=true;
+
+ if(convertToRegex(new_item))
+ include << new_item;
+
+ index++;
+ }
+
+ exclude.clear();
+ index=0;
+ while(index<excludeStrings.size())
+ {
+ new_item.search_text=excludeStrings.at(index);
+ QStringList options=excludeOptions.at(index).split(";");
+ new_item.need_match_all=false;
+ new_item.search_type=SearchType_rawText;
+ new_item.apply_on=ApplyOn_fileAndFolder;
+
+ if(options.contains("SearchType_simpleRegex"))
+ new_item.search_type=SearchType_simpleRegex;
+ if(options.contains("SearchType_perlRegex"))
+ new_item.search_type=SearchType_perlRegex;
+ if(options.contains("ApplyOn_file"))
+ new_item.apply_on=ApplyOn_file;
+ if(options.contains("ApplyOn_folder"))
+ new_item.apply_on=ApplyOn_folder;
+ if(options.contains("need_match_all"))
+ new_item.need_match_all=true;
+
+ if(convertToRegex(new_item))
+ exclude << new_item;
+
+ index++;
+ }
+
+ reShowAll();
+}
+
+void Filters::reShowAll()
+{
+ ui->inclusion->clear();
+ int index=0;
+ while(index<include.size())
+ {
+ QString entryShow=include.at(index).search_text+" (";
+ QStringList optionsToShow;
+ switch(include.at(index).search_type)
+ {
+ case SearchType_rawText:
+ optionsToShow << tr("Raw text");
+ break;
+ case SearchType_simpleRegex:
+ optionsToShow << tr("Simplified regex");
+ break;
+ case SearchType_perlRegex:
+ optionsToShow << tr("Perl's regex");
+ break;
+ default:
+ break;
+ }
+ switch(include.at(index).apply_on)
+ {
+ case ApplyOn_file:
+ optionsToShow << tr("Only on file");
+ break;
+ case ApplyOn_folder:
+ optionsToShow << tr("Only on folder");
+ break;
+ default:
+ break;
+ }
+ if(include.at(index).need_match_all)
+ optionsToShow << tr("Full match");
+ entryShow+=optionsToShow.join(",");
+ entryShow+=")";
+ ui->inclusion->addItem(new QListWidgetItem(entryShow));
+ index++;
+ }
+ ui->exclusion->clear();
+ index=0;
+ while(index<exclude.size())
+ {
+ QString entryShow=exclude.at(index).search_text+" (";
+ QStringList optionsToShow;
+ switch(exclude.at(index).search_type)
+ {
+ case SearchType_rawText:
+ optionsToShow << tr("Raw text");
+ break;
+ case SearchType_simpleRegex:
+ optionsToShow << tr("Simplified regex");
+ break;
+ case SearchType_perlRegex:
+ optionsToShow << tr("Perl's regex");
+ break;
+ default:
+ break;
+ }
+ switch(exclude.at(index).apply_on)
+ {
+ case ApplyOn_file:
+ optionsToShow << tr("Only on file");
+ break;
+ case ApplyOn_folder:
+ optionsToShow << tr("Only on folder");
+ break;
+ default:
+ break;
+ }
+ if(exclude.at(index).need_match_all)
+ optionsToShow << tr("Full match");
+ entryShow+=optionsToShow.join(",");
+ entryShow+=")";
+ ui->exclusion->addItem(new QListWidgetItem(entryShow));
+ index++;
+ }
+}
+
+QList<Filters_rules> Filters::getInclude()
+{
+ return include;
+}
+
+QList<Filters_rules> Filters::getExclude()
+{
+ return exclude;
+}
+
+void Filters::newLanguageLoaded()
+{
+ ui->retranslateUi(this);
+ reShowAll();
+}
+
+void Filters::haveNewFilters()
+{
+ QStringList includeStrings,includeOptions,excludeStrings,excludeOptions;
+ int index=0;
+ while(index<include.size())
+ {
+ includeStrings<<include.at(index).search_text;
+ QStringList optionsToShow;
+
+ switch(include.at(index).search_type)
+ {
+ case SearchType_rawText:
+ optionsToShow << "SearchType_rawText";
+ break;
+ case SearchType_simpleRegex:
+ optionsToShow << "SearchType_simpleRegex";
+ break;
+ case SearchType_perlRegex:
+ optionsToShow << "SearchType_perlRegex";
+ break;
+ default:
+ break;
+ }
+ switch(include.at(index).apply_on)
+ {
+ case ApplyOn_file:
+ optionsToShow << "ApplyOn_file";
+ break;
+ case ApplyOn_fileAndFolder:
+ optionsToShow << "ApplyOn_fileAndFolder";
+ break;
+ case ApplyOn_folder:
+ optionsToShow << "ApplyOn_folder";
+ break;
+ default:
+ break;
+ }
+ if(include.at(index).need_match_all)
+ optionsToShow << tr("Full match");
+ includeOptions<<optionsToShow.join(";");
+ index++;
+ }
+ index=0;
+ while(index<exclude.size())
+ {
+ excludeStrings<<exclude.at(index).search_text;
+ QStringList optionsToShow;
+
+ switch(exclude.at(index).search_type)
+ {
+ case SearchType_rawText:
+ optionsToShow << "SearchType_rawText";
+ break;
+ case SearchType_simpleRegex:
+ optionsToShow << "SearchType_simpleRegex";
+ break;
+ case SearchType_perlRegex:
+ optionsToShow << "SearchType_perlRegex";
+ break;
+ default:
+ break;
+ }
+ switch(exclude.at(index).apply_on)
+ {
+ case ApplyOn_file:
+ optionsToShow << "ApplyOn_file";
+ break;
+ case ApplyOn_fileAndFolder:
+ optionsToShow << "ApplyOn_fileAndFolder";
+ break;
+ case ApplyOn_folder:
+ optionsToShow << "ApplyOn_folder";
+ break;
+ default:
+ break;
+ }
+ if(exclude.at(index).need_match_all)
+ optionsToShow << tr("Full match");
+ excludeOptions<<optionsToShow.join(";");
+ index++;
+ }
+ emit sendNewFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
+}
+
+bool Filters::convertToRegex(Filters_rules &item)
+{
+ bool isValid=!item.search_text.isEmpty();
+ if(isValid)
+ {
+ QRegExp regex;
+ QString tempString;
+ if(item.search_type==SearchType_rawText)
+ {
+ tempString=QRegExp::escape(item.search_text);
+ if(tempString.contains('/') || tempString.contains('\\'))
+ isValid=false;
+ }
+ else if(item.search_type==SearchType_simpleRegex)
+ {
+ tempString=QRegExp::escape(item.search_text);
+ tempString.replace("\\*","[^\\\\/]*");
+ }
+ else if(item.search_type==SearchType_perlRegex)
+ {
+ tempString=item.search_text;
+ if(tempString.startsWith('^') && tempString.endsWith('$'))
+ {
+ item.need_match_all=true;
+ tempString.remove(QRegExp("^\\^"));
+ tempString.remove(QRegExp("\\$$"));
+ item.search_text=tempString;
+ }
+ }
+ if(isValid)
+ {
+ if(item.need_match_all==true)
+ tempString="^"+tempString+"$";
+ regex=QRegExp(tempString);
+ isValid=regex.isValid() && !regex.isEmpty();
+ item.regex=regex;
+ return true;
+ }
+ else
+ return false;
+ }
+ return false;
+}
+
+void Filters::on_remove_exclusion_clicked()
+{
+ bool removedEntry=false;
+ int index=0;
+ while(index<ui->exclusion->count())
+ {
+ if(ui->exclusion->item(index)->isSelected())
+ {
+ delete ui->exclusion->item(index);
+ exclude.removeAt(index);
+ removedEntry=true;
+ }
+ else
+ index++;
+ }
+ if(removedEntry)
+ {
+ reShowAll();
+ haveNewFilters();
+ }
+}
+
+void Filters::on_remove_inclusion_clicked()
+{
+ bool removedEntry=false;
+ int index=0;
+ while(index<ui->inclusion->count())
+ {
+ if(ui->inclusion->item(index)->isSelected())
+ {
+ delete ui->inclusion->item(index);
+ include.removeAt(index);
+ removedEntry=true;
+ }
+ else
+ index++;
+ }
+ if(removedEntry)
+ {
+ reShowAll();
+ haveNewFilters();
+ }
+}
+
+void Filters::on_add_exclusion_clicked()
+{
+ FilterRules dialog(this);
+ dialog.exec();
+ if(dialog.getIsValid())
+ {
+ Filters_rules new_item;
+ new_item.apply_on=dialog.get_apply_on();
+ new_item.need_match_all=dialog.get_need_match_all();
+ new_item.search_text=dialog.get_search_text();
+ new_item.search_type=dialog.get_search_type();
+ exclude << new_item;
+ reShowAll();
+ haveNewFilters();
+ }
+}
+
+void Filters::on_buttonBox_clicked(QAbstractButton *button)
+{
+ if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::RejectRole)
+ reject();
+}
+
+void Filters::on_add_inclusion_clicked()
+{
+ FilterRules dialog(this);
+ dialog.exec();
+ if(dialog.getIsValid())
+ {
+ Filters_rules new_item;
+ new_item.apply_on=dialog.get_apply_on();
+ new_item.need_match_all=dialog.get_need_match_all();
+ new_item.search_text=dialog.get_search_text();
+ new_item.search_type=dialog.get_search_type();
+ if(convertToRegex(new_item))
+ include << new_item;
+ reShowAll();
+ haveNewFilters();
+ }
+}
+
+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[index].apply_on);
+ dialog.set_need_match_all(exclude[index].need_match_all);
+ dialog.set_search_text(exclude[index].search_text);
+ dialog.set_search_type(exclude[index].search_type);
+ dialog.exec();
+ if(dialog.getIsValid())
+ {
+ exclude[index].apply_on=dialog.get_apply_on();
+ exclude[index].need_match_all=dialog.get_need_match_all();
+ exclude[index].search_text=dialog.get_search_text();
+ exclude[index].search_type=dialog.get_search_type();
+ if(!convertToRegex(exclude[index]))
+ exclude.removeAt(index);
+ editedEntry=true;
+ }
+ }
+ index++;
+ }
+ if(editedEntry)
+ {
+ reShowAll();
+ haveNewFilters();
+ }
+}
+
+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[index].apply_on);
+ dialog.set_need_match_all(exclude[index].need_match_all);
+ dialog.set_search_text(exclude[index].search_text);
+ dialog.set_search_type(exclude[index].search_type);
+ dialog.exec();
+ if(dialog.getIsValid())
+ {
+ exclude[index].apply_on=dialog.get_apply_on();
+ exclude[index].need_match_all=dialog.get_need_match_all();
+ exclude[index].search_text=dialog.get_search_text();
+ exclude[index].search_type=dialog.get_search_type();
+ if(!convertToRegex(exclude[index]))
+ exclude.removeAt(index);
+ editedEntry=true;
+ }
+ }
+ index++;
+ }
+ if(editedEntry)
+ {
+ reShowAll();
+ haveNewFilters();
+ }
+}
diff --git a/plugins-alternative/CopyEngine/Rsync/Filters.h b/plugins-alternative/CopyEngine/Rsync/Filters.h
new file mode 100644
index 0000000..dcdcb36
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/Filters.h
@@ -0,0 +1,44 @@
+#ifndef FILTERS_H
+#define FILTERS_H
+
+#include <QDialog>
+#include <QStringList>
+
+#include "FilterRules.h"
+#include "StructEnumDefinition_CopyEngine.h"
+
+namespace Ui {
+class Filters;
+}
+
+/** To add/edit one filter rules */
+class Filters : public QDialog
+{
+ Q_OBJECT
+public:
+ explicit Filters(QWidget *parent = 0);
+ ~Filters();
+ void setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions);
+ void reShowAll();
+ QList<Filters_rules> getInclude();
+ QList<Filters_rules> getExclude();
+ void newLanguageLoaded();
+private:
+ Ui::Filters *ui;
+ QList<Filters_rules> include;
+ QList<Filters_rules> exclude;
+ void haveNewFilters();
+ bool convertToRegex(Filters_rules &item);
+signals:
+ void sendNewFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions);
+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-alternative/CopyEngine/Rsync/Filters.ui b/plugins-alternative/CopyEngine/Rsync/Filters.ui
new file mode 100644
index 0000000..db8577c
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/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>:/resources/filter.png</normaloff>:/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 filter</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>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="edit_exclusion">
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/resources/edit.png</normaloff>:/resources/edit.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="remove_exclusion">
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/resources/remove.png</normaloff>:/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 filter</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>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="edit_inclusion">
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/resources/edit.png</normaloff>:/resources/edit.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="remove_inclusion">
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/resources/remove.png</normaloff>:/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-alternative/CopyEngine/Rsync/Languages/ar/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/ar/translation.ts
new file mode 100644
index 0000000..338cb72
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/Languages/ar/translation.ts
@@ -0,0 +1,806 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="28"/>
+ <location filename="../../AvancedQFile.cpp" line="59"/>
+ <location filename="../../AvancedQFile.cpp" line="90"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="42"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="73"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Factory</name>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</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="95"/>
+ <source>All string need match</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="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string match with the regex</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 filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1192"/>
+ <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="1199"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1215"/>
+ <source>Problem at the reading, or file size is null</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1222"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1231"/>
+ <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="1240"/>
+ <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="1246"/>
+ <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="1293"/>
+ <source>Some error have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1299"/>
+ <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="62"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="154"/>
+ <location filename="../../ReadThread.cpp" line="316"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="193"/>
+ <location filename="../../ReadThread.cpp" line="373"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="61"/>
+ <location filename="../../RmPath.cpp" line="75"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RmPath.cpp" line="85"/>
+ <source>Unable to remove the file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="312"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="322"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="627"/>
+ <source>The checksums not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="443"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="481"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="260"/>
+ <location filename="../../copyEngine.cpp" line="278"/>
+ <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="289"/>
+ <location filename="../../copyEngine.cpp" line="307"/>
+ <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="521"/>
+ <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error on 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="56"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="73"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="90"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="136"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="156"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="163"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="170"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="177"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="29"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="32"/>
+ <source>Folder name</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="153"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="243"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="254"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="274"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="281"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="291"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="298"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="307"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="312"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="102"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="112"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="20"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="47"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="64"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="81"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="137"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="148"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="168"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="175"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="182"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="87"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="97"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <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="62"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="89"/>
+ <location filename="../../folderExistsDialog.ui" line="140"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="106"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="200"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="211"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="218"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="225"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="232"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="239"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="29"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="85"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="95"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui" line="23"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="33"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="214"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="43"/>
+ <location filename="../../options.ui" line="198"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="56"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="66"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="74"/>
+ <location filename="../../options.ui" line="95"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="79"/>
+ <location filename="../../options.ui" line="105"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="100"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="110"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="118"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="255"/>
+ <source>Rsync (only in copy mode)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="87"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="128"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="144"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="154"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="171"/>
+ <source>Do checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="181"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="234"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="241"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="191"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="219"/>
+ <location filename="../../scanFileOrFolder.cpp" line="283"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="229"/>
+ <location filename="../../scanFileOrFolder.cpp" line="293"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="327"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="329"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/de/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/de/translation.ts
new file mode 100644
index 0000000..1370c9a
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/Languages/de/translation.ts
@@ -0,0 +1,806 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="de" sourcelanguage="en">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="28"/>
+ <location filename="../../AvancedQFile.cpp" line="59"/>
+ <location filename="../../AvancedQFile.cpp" line="90"/>
+ <source>Not supported on this platform</source>
+ <translation>Auf dieser Plattform nicht unterstützt</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="42"/>
+ <source>Last modified date is wrong</source>
+ <translation>Datum der letzten Änderung ist falsch</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="73"/>
+ <source>Last access date is wrong</source>
+ <translation>Datum des letzten Zugriffs ist falsch</translation>
+ </message>
+</context>
+<context>
+ <name>Factory</name>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options error</source>
+ <translation>Optionen Fehler</translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation>Optionen Motor nicht geladen wird, kann nicht auf die Filter zu übersetzen</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>Perl&apos;s 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 Ordnernamen</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>All string need match</source>
+ <translation>Alle Saite muss passen</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation>Überprüfung</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation>Test-String:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation>Filters dialog</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation>Die Regex ist gültig</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string match with the regex</source>
+ <translation>Der Test-String Match mit dem regex</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 filter</source>
+ <translation>Ausschluss-Filter</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filter</source>
+ <translation>Einbeziehungsfilter</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation>None = Schließt alle</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation>Roh text</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation>Vereinfachte regex</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation>Perl&apos;s regex</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation>Nur auf Datei</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation>Nur auf Ordner</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation>Spielaufzeichnung</translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1192"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation>Kann nicht tun, verschieben oder kopieren Artikel in den falschen gezwungen Modus: %1</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1199"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation>Unfähig, die Transferliste sparen: %1</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1215"/>
+ <source>Problem at the reading, or file size is null</source>
+ <translation>Problem an der Lektüre, der Oder Dateigröße IST Null</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1222"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation>Falsche Header: &quot;%1&quot;</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1231"/>
+ <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 in diesem Modus nicht</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1240"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation>Die Transferliste ist im Copy-Mode, aber dieser Fall ist in diesem Modus nicht</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1246"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation>Die Transferliste ist in Verschiebe-Modus, aber diese Instanz ist in diesem Modus nicht</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1293"/>
+ <source>Some error have been found during the line parsing</source>
+ <translation>Einige Fehler wurden während des Parsing gefunden</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1299"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation>Unfähig, die Transferliste geöffnet: %1</translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="62"/>
+ <source>Unable to create the folder</source>
+ <translation>Der Ordner kann nicht erstellt</translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="154"/>
+ <location filename="../../ReadThread.cpp" line="316"/>
+ <source>Unable to read the source file: </source>
+ <translation>Unfähig, die Quelldatei zu lesen: </translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="193"/>
+ <location filename="../../ReadThread.cpp" line="373"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation>Datei während der Lese, möglich Datenänderung abgeschnitten</translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation>erste Umbenennung</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation>%name% - kopieren</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variablen: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; für den ursprünglichen Dateinamen&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation>zweite Umbenennung</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation>%name% - kopieren (%number%)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variablen: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; für den ursprünglichen Dateinamen&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; für die zusätzliche Zahl&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation>%1 - kopieren</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - kopieren (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation>Umbenennen von Regeln</translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="61"/>
+ <location filename="../../RmPath.cpp" line="75"/>
+ <source>Unable to remove the folder</source>
+ <translation>Der Ordner kann nicht entfernen</translation>
+ </message>
+ <message>
+ <location filename="../../RmPath.cpp" line="85"/>
+ <source>Unable to remove the file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="312"/>
+ <source>%1 - copy</source>
+ <translation>%1 - kopieren</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="322"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - kopieren (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="627"/>
+ <source>The checksums not match</source>
+ <translation>Die Prüfsummen nicht überein</translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="443"/>
+ <source>Unable to read the source file: </source>
+ <translation>Unfähig, die Quelldatei zu lesen: </translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="481"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation>Datei während der Lese, möglich Datenänderung abgeschnitten</translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="260"/>
+ <location filename="../../copyEngine.cpp" line="278"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation>Der Motor wird gezwungen sich zu bewegen, können Sie mit ihr nicht zu kopieren</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="289"/>
+ <location filename="../../copyEngine.cpp" line="307"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation>Der Motor ist gezwungen, zu kopieren, können Sie nicht mit ihm bewegen</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="521"/>
+ <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
+ <translation>Der Modus wurden vorher gezwungen, es interner Fehler ist, melden Sie dies bitte</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options error</source>
+ <translation>Optionen Fehler</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation>Optionen Motor nicht geladen wird, kann nicht auf die Filter zu übersetzen</translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error on file</source>
+ <translation>Fehler bei der Datei</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="56"/>
+ <source>Size</source>
+ <translation>Größe</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="73"/>
+ <source>Modified</source>
+ <translation>Geändert</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="90"/>
+ <source>File name</source>
+ <translation>Dateiname</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="136"/>
+ <source>&amp;Always do this action</source>
+ <translation>Immer diese Aktion</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="156"/>
+ <source>Put to bottom</source>
+ <translation>Legen Sie nach unten</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="163"/>
+ <source>Retry</source>
+ <translation>Wiederholen</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="170"/>
+ <source>&amp;Skip</source>
+ <translation>überspringen</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="177"/>
+ <source>&amp;Cancel</source>
+ <translation>Stornieren</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="29"/>
+ <source>Error on folder</source>
+ <translation>Fehler auf Ordner</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="32"/>
+ <source>Folder name</source>
+ <translation>Ordnername</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="153"/>
+ <source>Size</source>
+ <translation>Größe</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Modified</source>
+ <translation>Geändert</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>File name</source>
+ <translation>Dateiname</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="243"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Schlagen neuen Namen</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="254"/>
+ <source>&amp;Always do this action</source>
+ <translation>Immer diese Aktion</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="274"/>
+ <source>&amp;Rename</source>
+ <translation>Umbenennen</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="281"/>
+ <source>&amp;Overwrite</source>
+ <translation>überschreiben</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="291"/>
+ <source>&amp;Skip</source>
+ <translation>überspringen</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="298"/>
+ <source>&amp;Cancel</source>
+ <translation>Stornieren</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="307"/>
+ <source>Overwrite if newer</source>
+ <translation>Überschreiben, wenn neuere</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="312"/>
+ <source>Overwrite if not same modification date</source>
+ <translation>Überschreiben, wenn nicht gleiche Änderungsdatum</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="102"/>
+ <source>%1 - copy</source>
+ <translation>%1 - kopieren</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="112"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - kopieren (%2)</translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>This files are the same file</source>
+ <translation>Diese Dateien sind die gleiche Datei</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="20"/>
+ <source>The source and destination is same</source>
+ <translation>Die Quelle und das Ziel ist dasselbe</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="47"/>
+ <source>Size</source>
+ <translation>Größe</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="64"/>
+ <source>Modified</source>
+ <translation>Geändert</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="81"/>
+ <source>File name</source>
+ <translation>Dateiname</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="137"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Schlagen neuen Namen</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="148"/>
+ <source>&amp;Always do this action</source>
+ <translation>Immer diese Aktion</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="168"/>
+ <source>&amp;Rename</source>
+ <translation>Umbenennen</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="175"/>
+ <source>&amp;Skip</source>
+ <translation>überspringen</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="182"/>
+ <source>&amp;Cancel</source>
+ <translation>Stornieren</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="87"/>
+ <source>%1 - copy</source>
+ <translation>%1 - kopieren</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="97"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - kopieren (%2)</translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>This folders are the same folder</source>
+ <translation>Diese Ordner sind die gleichen Ordner</translation>
+ </message>
+ <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="62"/>
+ <source>The source and destination is same</source>
+ <translation>Die Quelle und das Ziel ist dasselbe</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="89"/>
+ <location filename="../../folderExistsDialog.ui" line="140"/>
+ <source>Modified</source>
+ <translation>Geändert</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="106"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Folder name</source>
+ <translation>Ordnername</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="200"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Schlagen neuen Namen</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="211"/>
+ <source>&amp;Always do this action</source>
+ <translation>Immer diese Aktion</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="218"/>
+ <source>&amp;Rename</source>
+ <translation>Umbenennen</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="225"/>
+ <source>Merge</source>
+ <translation>Fusionieren</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="232"/>
+ <source>Skip</source>
+ <translation>überspringen</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="239"/>
+ <source>&amp;Cancel</source>
+ <translation>Stornieren</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="29"/>
+ <source>Folder already exists</source>
+ <translation>Ordner bereits vorhanden ist</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="85"/>
+ <source>%1 - copy</source>
+ <translation>%1 - kopieren</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="95"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - kopieren (%2)</translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui" line="23"/>
+ <source>Transfer the file rights</source>
+ <translation>Übertragen Sie die Datei Rechte</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="33"/>
+ <source>Keep the file date</source>
+ <translation>Halten Sie das Datei-Datum</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="214"/>
+ <source>Block size</source>
+ <translation>Blockgröße</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="43"/>
+ <location filename="../../options.ui" line="198"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="56"/>
+ <source>Auto start the transfer</source>
+ <translation>Auto starten Sie die Übertragung</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="66"/>
+ <source>When folder error</source>
+ <translation>Wenn Ordner Fehler</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="74"/>
+ <location filename="../../options.ui" line="95"/>
+ <source>Ask</source>
+ <translation>Fragen</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="79"/>
+ <location filename="../../options.ui" line="105"/>
+ <source>Skip</source>
+ <translation>überspringen</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="100"/>
+ <source>Merge</source>
+ <translation>Fusionieren</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="110"/>
+ <source>Rename</source>
+ <translation>Umbenennen</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="118"/>
+ <source>Check if destination folder exists</source>
+ <translation>Prüfen Sie, ob Zielordner vorhanden ist</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="255"/>
+ <source>Rsync (only in copy mode)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="87"/>
+ <source>When folder collision</source>
+ <translation>Wenn Ordner Kollision</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="128"/>
+ <source>Checksum</source>
+ <translation>Checksum</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="144"/>
+ <source>Only after error</source>
+ <translation>Erst nach dem Fehler</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="154"/>
+ <source>Ignore if impossible</source>
+ <translation>Ignorieren, wenn nicht</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="171"/>
+ <source>Do checksum</source>
+ <translation>Haben checksum</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="181"/>
+ <source>Enable OS buffer</source>
+ <translation>Aktivieren Sie OS-Puffer</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="234"/>
+ <source>Filters</source>
+ <translation>Filter</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="241"/>
+ <source>Renaming rules</source>
+ <translation>Umbenennen von Regeln</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="191"/>
+ <source>OS buffer only if smaller than</source>
+ <translation>OS-Puffer, wenn kleiner als</translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="219"/>
+ <location filename="../../scanFileOrFolder.cpp" line="283"/>
+ <source>%1 - copy</source>
+ <translation>%1 - kopieren</translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="229"/>
+ <location filename="../../scanFileOrFolder.cpp" line="293"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - kopieren (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="327"/>
+ <source>The folder not exists</source>
+ <translation>Der Ordner existiert nicht</translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="329"/>
+ <source>The folder is not readable</source>
+ <translation>Der Ordner ist nicht lesbar</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/el/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/el/translation.ts
new file mode 100644
index 0000000..338cb72
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/Languages/el/translation.ts
@@ -0,0 +1,806 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="28"/>
+ <location filename="../../AvancedQFile.cpp" line="59"/>
+ <location filename="../../AvancedQFile.cpp" line="90"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="42"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="73"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Factory</name>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</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="95"/>
+ <source>All string need match</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="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string match with the regex</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 filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1192"/>
+ <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="1199"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1215"/>
+ <source>Problem at the reading, or file size is null</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1222"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1231"/>
+ <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="1240"/>
+ <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="1246"/>
+ <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="1293"/>
+ <source>Some error have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1299"/>
+ <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="62"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="154"/>
+ <location filename="../../ReadThread.cpp" line="316"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="193"/>
+ <location filename="../../ReadThread.cpp" line="373"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="61"/>
+ <location filename="../../RmPath.cpp" line="75"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RmPath.cpp" line="85"/>
+ <source>Unable to remove the file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="312"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="322"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="627"/>
+ <source>The checksums not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="443"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="481"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="260"/>
+ <location filename="../../copyEngine.cpp" line="278"/>
+ <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="289"/>
+ <location filename="../../copyEngine.cpp" line="307"/>
+ <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="521"/>
+ <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error on 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="56"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="73"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="90"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="136"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="156"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="163"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="170"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="177"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="29"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="32"/>
+ <source>Folder name</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="153"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="243"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="254"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="274"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="281"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="291"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="298"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="307"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="312"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="102"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="112"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="20"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="47"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="64"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="81"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="137"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="148"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="168"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="175"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="182"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="87"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="97"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <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="62"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="89"/>
+ <location filename="../../folderExistsDialog.ui" line="140"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="106"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="200"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="211"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="218"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="225"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="232"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="239"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="29"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="85"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="95"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui" line="23"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="33"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="214"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="43"/>
+ <location filename="../../options.ui" line="198"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="56"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="66"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="74"/>
+ <location filename="../../options.ui" line="95"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="79"/>
+ <location filename="../../options.ui" line="105"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="100"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="110"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="118"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="255"/>
+ <source>Rsync (only in copy mode)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="87"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="128"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="144"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="154"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="171"/>
+ <source>Do checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="181"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="234"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="241"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="191"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="219"/>
+ <location filename="../../scanFileOrFolder.cpp" line="283"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="229"/>
+ <location filename="../../scanFileOrFolder.cpp" line="293"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="327"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="329"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/es/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/es/translation.ts
new file mode 100644
index 0000000..8e00156
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/Languages/es/translation.ts
@@ -0,0 +1,806 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="es" sourcelanguage="en">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="28"/>
+ <location filename="../../AvancedQFile.cpp" line="59"/>
+ <location filename="../../AvancedQFile.cpp" line="90"/>
+ <source>Not supported on this platform</source>
+ <translation>No es compatible con esta plataforma</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="42"/>
+ <source>Last modified date is wrong</source>
+ <translation>Fecha de última modificación es incorrecto</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="73"/>
+ <source>Last access date is wrong</source>
+ <translation>Fecha de último acceso es incorrecto</translation>
+ </message>
+</context>
+<context>
+ <name>Factory</name>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options error</source>
+ <translation>Error de opciones</translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <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>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="95"/>
+ <source>All string need match</source>
+ <translation>Todas las líneas tiene por qué coincidir</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="108"/>
+ <source>The regex is valid</source>
+ <translation>La expresión regular es válido</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string match with the regex</source>
+ <translation>La coincidencia con la cadena de prueba con la expresión regular</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 filter</source>
+ <translation>Exclusión filtro</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filter</source>
+ <translation>La inclusión del filtro</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation>Ninguno = Incluya todos los</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation>texto Fuente</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation>Simplificado regex</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation>Perl&apos;s regex</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation>Sólo en el archivo</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation>Sólo en la carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation>Partido completo</translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1192"/>
+ <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="1199"/>
+ <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="1215"/>
+ <source>Problem at the reading, or file size is null</source>
+ <translation>Problema en la lectura, o el tamaño del archivo es nulo</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1222"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation>Encabezado incorrecto: &quot;%1&quot;</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1231"/>
+ <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="1240"/>
+ <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="1246"/>
+ <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="1293"/>
+ <source>Some error 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="1299"/>
+ <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="62"/>
+ <source>Unable to create the folder</source>
+ <translation>No se puede crear la carpeta</translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="154"/>
+ <location filename="../../ReadThread.cpp" line="316"/>
+ <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="193"/>
+ <location filename="../../ReadThread.cpp" line="373"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation>Archivo truncada durante el cambio de lectura, los datos posibles</translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation>En primer lugar el cambio de nombre</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation>%name% - copia</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; para el nombre del archivo original&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation>En segundo lugar el cambio de nombre</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation>%name% - copia (%number%)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; para el nombre del archivo original&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; para el número adicional&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation>Reglas de Cambio de nombre</translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="61"/>
+ <location filename="../../RmPath.cpp" line="75"/>
+ <source>Unable to remove the folder</source>
+ <translation>No se puede eliminar la carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../RmPath.cpp" line="85"/>
+ <source>Unable to remove the file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="312"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="322"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="627"/>
+ <source>The checksums not match</source>
+ <translation>Las sumas de comprobación no coincide</translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="443"/>
+ <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="481"/>
+ <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>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="260"/>
+ <location filename="../../copyEngine.cpp" line="278"/>
+ <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="289"/>
+ <location filename="../../copyEngine.cpp" line="307"/>
+ <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="521"/>
+ <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
+ <translation>El modo se han visto obligados con anterioridad, es un error interno, por favor repórtelo</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options error</source>
+ <translation>Opciones de error</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <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>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error on file</source>
+ <translation>Error en el archivo</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation>Error</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="56"/>
+ <source>Size</source>
+ <translation>Tamaño</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="73"/>
+ <source>Modified</source>
+ <translation>Modificado</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="90"/>
+ <source>File name</source>
+ <translation>Nombre de archivo</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="136"/>
+ <source>&amp;Always do this action</source>
+ <translation>Siempre hacer esta acción</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="156"/>
+ <source>Put to bottom</source>
+ <translation>Ponga a abajo</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="163"/>
+ <source>Retry</source>
+ <translation>Reintentar</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="170"/>
+ <source>&amp;Skip</source>
+ <translation>Omitir</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="177"/>
+ <source>&amp;Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="29"/>
+ <source>Error on folder</source>
+ <translation>Error en la carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="32"/>
+ <source>Folder name</source>
+ <translation>Nombre de la carpeta</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="153"/>
+ <source>Size</source>
+ <translation>Tamaño</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Modified</source>
+ <translation>Modificado</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>File name</source>
+ <translation>Nombre de archivo</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="243"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Sugerir nuevo nombre</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="254"/>
+ <source>&amp;Always do this action</source>
+ <translation>Siempre hacer esta acción</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="274"/>
+ <source>&amp;Rename</source>
+ <translation>Cambiar el nombre</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="281"/>
+ <source>&amp;Overwrite</source>
+ <translation>Sobrescribir</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="291"/>
+ <source>&amp;Skip</source>
+ <translation>Omitir</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="298"/>
+ <source>&amp;Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="307"/>
+ <source>Overwrite if newer</source>
+ <translation>Sobrescribir si nuevo</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="312"/>
+ <source>Overwrite if not same modification date</source>
+ <translation>Sobrescribir si no es misma fecha de modificación</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="102"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="112"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>This files are the same file</source>
+ <translation>Estos archivos son el mismo archivo</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="20"/>
+ <source>The source and destination is same</source>
+ <translation>La fuente y el destino es el mismo</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="47"/>
+ <source>Size</source>
+ <translation>Tamaño</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="64"/>
+ <source>Modified</source>
+ <translation>Modificado</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="81"/>
+ <source>File name</source>
+ <translation>Nombre de archivo</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="137"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Sugerir nuevo nombre</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="148"/>
+ <source>&amp;Always do this action</source>
+ <translation>Siempre hacer esta acción</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="168"/>
+ <source>&amp;Rename</source>
+ <translation>Cambiar el nombre</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="175"/>
+ <source>&amp;Skip</source>
+ <translation>Omitir</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="182"/>
+ <source>&amp;Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="87"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="97"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>This folders are the same folder</source>
+ <translation>Esta carpeta es la misma carpeta</translation>
+ </message>
+ <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="62"/>
+ <source>The source and destination is same</source>
+ <translation>La fuente y el destino es el mismo</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="89"/>
+ <location filename="../../folderExistsDialog.ui" line="140"/>
+ <source>Modified</source>
+ <translation>Modificado</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="106"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Folder name</source>
+ <translation>Nombre de la carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="200"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Sugerir nuevo nombre</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="211"/>
+ <source>&amp;Always do this action</source>
+ <translation>Siempre hacer esta acción</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="218"/>
+ <source>&amp;Rename</source>
+ <translation>Cambiar el nombre</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="225"/>
+ <source>Merge</source>
+ <translation>Unir</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="232"/>
+ <source>Skip</source>
+ <translation>Omitir</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="239"/>
+ <source>&amp;Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="29"/>
+ <source>Folder already exists</source>
+ <translation>Carpeta ya existe</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="85"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="95"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui" line="23"/>
+ <source>Transfer the file rights</source>
+ <translation>Transferencia de los derechos de archivo</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="33"/>
+ <source>Keep the file date</source>
+ <translation>Mantener la fecha de archivo</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="214"/>
+ <source>Block size</source>
+ <translation>Tamaño del bloque</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="43"/>
+ <location filename="../../options.ui" line="198"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="56"/>
+ <source>Auto start the transfer</source>
+ <translation>Auto iniciar la transferencia</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="66"/>
+ <source>When folder error</source>
+ <translation>Cuando el error carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="74"/>
+ <location filename="../../options.ui" line="95"/>
+ <source>Ask</source>
+ <translation>Pedir</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="79"/>
+ <location filename="../../options.ui" line="105"/>
+ <source>Skip</source>
+ <translation>Omitir</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="100"/>
+ <source>Merge</source>
+ <translation>Unir</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="110"/>
+ <source>Rename</source>
+ <translation>Cambiar el nombre</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="118"/>
+ <source>Check if destination folder exists</source>
+ <translation>Compruebe si existe la carpeta de destino</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="255"/>
+ <source>Rsync (only in copy mode)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="87"/>
+ <source>When folder collision</source>
+ <translation>Cuando la colisión carpeta</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="128"/>
+ <source>Checksum</source>
+ <translation>Suma de comprobación</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="144"/>
+ <source>Only after error</source>
+ <translation>Sólo después de un error</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="154"/>
+ <source>Ignore if impossible</source>
+ <translation>No haga caso si no es posible</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="171"/>
+ <source>Do checksum</source>
+ <translation>Hacer suma de comprobación</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="181"/>
+ <source>Enable OS buffer</source>
+ <translation>Habilitar el OS de amortiguación</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="234"/>
+ <source>Filters</source>
+ <translation>Filtros</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="241"/>
+ <source>Renaming rules</source>
+ <translation>Reglas de Cambio de nombre</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="191"/>
+ <source>OS buffer only if smaller than</source>
+ <translation>OS de amortiguación sólo si menor que</translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="219"/>
+ <location filename="../../scanFileOrFolder.cpp" line="283"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="229"/>
+ <location filename="../../scanFileOrFolder.cpp" line="293"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="327"/>
+ <source>The folder not exists</source>
+ <translation>La carpeta no existe</translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="329"/>
+ <source>The folder is not readable</source>
+ <translation>La carpeta no se puede leer</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/fr/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/fr/translation.ts
new file mode 100644
index 0000000..92d565c
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/Languages/fr/translation.ts
@@ -0,0 +1,810 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="fr" sourcelanguage="en">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="28"/>
+ <location filename="../../AvancedQFile.cpp" line="59"/>
+ <location filename="../../AvancedQFile.cpp" line="90"/>
+ <source>Not supported on this platform</source>
+ <translation>Non supporté sur cette plateforme</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="42"/>
+ <source>Last modified date is wrong</source>
+ <translation>Date de dernière modification du fichier fausse</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="73"/>
+ <source>Last access date is wrong</source>
+ <translation>Date du dernier accès au fichier fausse</translation>
+ </message>
+</context>
+<context>
+ <name>Factory</name>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options error</source>
+ <translation>Erreur d&apos;options</translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <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édrer aux filtres</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 brute</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation>Regex simplifié</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="95"/>
+ <source>All string need match</source>
+ <translation>Toute la chaine doit correspondre</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 teste:</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="108"/>
+ <source>The regex is valid</source>
+ <translation>La regex est valid</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string match with the regex</source>
+ <translation>La chaine de teste corresponds avec la regex</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 filter</source>
+ <translation>Filtre d&apos;exclusion</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filter</source>
+ <translation>Filtre d&apos;inclusion</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation>Aucun = tout inclure</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation>Texte brute</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation>Regex simplifié</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation>Regex perl</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation>Appliquer sur fichier</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation>Appliquer sur dossier</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation>Correspondance totale</translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1192"/>
+ <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="1199"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation>Impossible de sauvegarde la liste de transfer: %1</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1215"/>
+ <source>Problem at the reading, or file size is null</source>
+ <translation>Probléme à la lecture, ou fichier de taille nulle</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1222"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation>Mauvaise en-tête: &quot;%1&quot;</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1231"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation>La list de transfer est en mode mixte, mais l&apos;instance n&apos;est pas dans ce mode</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1240"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation>La list de transfer est en mode copie, mais l&apos;instance n&apos;est pas dans ce mode</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1246"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation>La list de transfer est en mode déplacement, mais l&apos;instance n&apos;est pas dans ce mode</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1293"/>
+ <source>Some error have been found during the line parsing</source>
+ <translation>Quelque erreur ont été trouvé durrant l&apos;analise des lignes</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1299"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation>Impossible d&apos;ouvrir la list de transfer: %1</translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="62"/>
+ <source>Unable to create the folder</source>
+ <translation>Impossible de créer le répertoire</translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="154"/>
+ <location filename="../../ReadThread.cpp" line="316"/>
+ <source>Unable to read the source file: </source>
+ <translation>Impossible de lire le fichier source: </translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="193"/>
+ <location filename="../../ReadThread.cpp" line="373"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation>Fichier diminué durrant la lecture, possible changement de données</translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation>Premier renommage</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translatorcomment>variables need never be translated</translatorcomment>
+ <translation>%name% - copie</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translatorcomment>variables need never be translated</translatorcomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; pour le nom originel&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation>Seconds renommage</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translatorcomment>variables need never be translated</translatorcomment>
+ <translation>%name% - copie (%number%)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translatorcomment>variables need never be translated</translatorcomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; pour le nom originel&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; pour le nombre extra&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copie</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation>Régles de renommage</translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="61"/>
+ <location filename="../../RmPath.cpp" line="75"/>
+ <source>Unable to remove the folder</source>
+ <translation>Impossible de supprimer le répertoire</translation>
+ </message>
+ <message>
+ <location filename="../../RmPath.cpp" line="85"/>
+ <source>Unable to remove the file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="312"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copie</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="322"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="627"/>
+ <source>The checksums not match</source>
+ <translation>Les checksums ne correspondent pas</translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="443"/>
+ <source>Unable to read the source file: </source>
+ <translation>Impossible de lire le fichier source: </translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="481"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation>Fichier diminué durrant la lecture, possible changement de données</translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="260"/>
+ <location filename="../../copyEngine.cpp" line="278"/>
+ <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="289"/>
+ <location filename="../../copyEngine.cpp" line="307"/>
+ <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="521"/>
+ <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
+ <translation>Le mode as été forcé précédement, c&apos;est une erreur interne, merci de le repporter</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options error</source>
+ <translation>Erreur d&apos;options</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <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édrer aux filtres</translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error on file</source>
+ <translation>Erreur sur le fichier</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation>Erreur</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="56"/>
+ <source>Size</source>
+ <translation>Taille</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="73"/>
+ <source>Modified</source>
+ <translation>Modifié</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="90"/>
+ <source>File name</source>
+ <translation>Nom de fichier</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="136"/>
+ <source>&amp;Always do this action</source>
+ <translation>&amp;Toujours effectuer cette action</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="156"/>
+ <source>Put to bottom</source>
+ <translation>Mettre à la fin</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="163"/>
+ <source>Retry</source>
+ <translation>Réessayer</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="170"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Passer</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="177"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Annuler</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="29"/>
+ <source>Error on folder</source>
+ <translation>Erreur sur un dossier</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="32"/>
+ <source>Folder name</source>
+ <translation>Nom de répertoire</translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation>Le fichier existe</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>Source</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>Destination</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="153"/>
+ <source>Size</source>
+ <translation>Taille</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Modified</source>
+ <translation>Modifié</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>File name</source>
+ <translation>Nom de fichier</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="243"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Suggérer un &amp;nouveau nom</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="254"/>
+ <source>&amp;Always do this action</source>
+ <translation>&amp;Toujours effectuer cette action</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="274"/>
+ <source>&amp;Rename</source>
+ <translation>&amp;Renommer</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="281"/>
+ <source>&amp;Overwrite</source>
+ <translation>&amp;Ecraser</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="291"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Passer</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="298"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Annuler</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="307"/>
+ <source>Overwrite if newer</source>
+ <translation>Ecraser si plus récent</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="312"/>
+ <source>Overwrite if not same modification date</source>
+ <translation>Ecraser si la date de modification est différente</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="102"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copie</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="112"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copie (%2)</translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>This files are the same file</source>
+ <translation>Ces fichiers sont identiques</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="20"/>
+ <source>The source and destination is same</source>
+ <translation>La source et la destination sont identiques</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="47"/>
+ <source>Size</source>
+ <translation>Taille</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="64"/>
+ <source>Modified</source>
+ <translation>Modifié</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="81"/>
+ <source>File name</source>
+ <translation>Nom de fichier</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="137"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Suggérer un &amp;nouveau nom</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="148"/>
+ <source>&amp;Always do this action</source>
+ <translation>&amp;Toujours effectuer cette action</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="168"/>
+ <source>&amp;Rename</source>
+ <translation>&amp;Renommer</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="175"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Passer</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="182"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Annuler</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="87"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copie</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="97"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copie (%2)</translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>This folders are the same folder</source>
+ <translation>Les répertoires sont identiques</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>Source</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>Destination</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="62"/>
+ <source>The source and destination is same</source>
+ <translation>La source et la destination sont identiques</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="89"/>
+ <location filename="../../folderExistsDialog.ui" line="140"/>
+ <source>Modified</source>
+ <translation>Modifié</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="106"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Folder name</source>
+ <translation>Nom de répertoire</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="200"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Suggérer un &amp;nouveau nom</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="211"/>
+ <source>&amp;Always do this action</source>
+ <translation>&amp;Toujours effectuer cette action</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="218"/>
+ <source>&amp;Rename</source>
+ <translation>&amp;Renommer</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="225"/>
+ <source>Merge</source>
+ <translation>Fusionner</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="232"/>
+ <source>Skip</source>
+ <translation>Passer</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="239"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Annuler</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="29"/>
+ <source>Folder already exists</source>
+ <translation>Dossier déjà existant</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="85"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copie</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="95"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copie (%2)</translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui" line="23"/>
+ <source>Transfer the file rights</source>
+ <translation>Transférer les droits des fichiers</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="33"/>
+ <source>Keep the file date</source>
+ <translation>Garder la date du fichier</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="66"/>
+ <source>When folder error</source>
+ <translation>En cas d&apos;erreur de répertoire</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="74"/>
+ <location filename="../../options.ui" line="95"/>
+ <source>Ask</source>
+ <translation>Demander</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="79"/>
+ <location filename="../../options.ui" line="105"/>
+ <source>Skip</source>
+ <translation>Passer</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="100"/>
+ <source>Merge</source>
+ <translation>Fusionner</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="110"/>
+ <source>Rename</source>
+ <translation>Renommer</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="118"/>
+ <source>Check if destination folder exists</source>
+ <translation>Vérifier si le répertoire de destination existe</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="214"/>
+ <source>Block size</source>
+ <translation>Taille de block</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="43"/>
+ <location filename="../../options.ui" line="198"/>
+ <source>KB</source>
+ <translation>Ko</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="56"/>
+ <source>Auto start the transfer</source>
+ <translation>Démmarer automatiquement le transfert</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="87"/>
+ <source>When folder collision</source>
+ <translation>Lors d&apos;une collision de dossier</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="128"/>
+ <source>Checksum</source>
+ <translation>Checksum</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="144"/>
+ <source>Only after error</source>
+ <translation>Seulement après erreur</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="154"/>
+ <source>Ignore if impossible</source>
+ <translation>Ignorer si impossible</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="171"/>
+ <source>Do checksum</source>
+ <translation>Faire un checksum</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="181"/>
+ <source>Enable OS buffer</source>
+ <translation>Activer le buffer de l&apos;OS</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="234"/>
+ <source>Filters</source>
+ <translation>Filtres</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="241"/>
+ <source>Renaming rules</source>
+ <translation>Régles de renommage</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="255"/>
+ <source>Rsync (only in copy mode)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="191"/>
+ <source>OS buffer only if smaller than</source>
+ <translation>Buffer de l&apos;OS seulement si plus petit que</translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="219"/>
+ <location filename="../../scanFileOrFolder.cpp" line="283"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copie</translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="229"/>
+ <location filename="../../scanFileOrFolder.cpp" line="293"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copie (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="327"/>
+ <source>The folder not exists</source>
+ <translation>Le répertoire n&apos;existe pas</translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="329"/>
+ <source>The folder is not readable</source>
+ <translation>Le répertoire n&apos;est pas lisible</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/hi/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/hi/translation.ts
new file mode 100644
index 0000000..338cb72
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/Languages/hi/translation.ts
@@ -0,0 +1,806 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="28"/>
+ <location filename="../../AvancedQFile.cpp" line="59"/>
+ <location filename="../../AvancedQFile.cpp" line="90"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="42"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="73"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Factory</name>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</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="95"/>
+ <source>All string need match</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="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string match with the regex</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 filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1192"/>
+ <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="1199"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1215"/>
+ <source>Problem at the reading, or file size is null</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1222"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1231"/>
+ <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="1240"/>
+ <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="1246"/>
+ <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="1293"/>
+ <source>Some error have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1299"/>
+ <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="62"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="154"/>
+ <location filename="../../ReadThread.cpp" line="316"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="193"/>
+ <location filename="../../ReadThread.cpp" line="373"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="61"/>
+ <location filename="../../RmPath.cpp" line="75"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RmPath.cpp" line="85"/>
+ <source>Unable to remove the file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="312"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="322"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="627"/>
+ <source>The checksums not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="443"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="481"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="260"/>
+ <location filename="../../copyEngine.cpp" line="278"/>
+ <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="289"/>
+ <location filename="../../copyEngine.cpp" line="307"/>
+ <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="521"/>
+ <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error on 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="56"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="73"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="90"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="136"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="156"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="163"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="170"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="177"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="29"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="32"/>
+ <source>Folder name</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="153"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="243"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="254"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="274"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="281"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="291"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="298"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="307"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="312"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="102"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="112"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="20"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="47"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="64"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="81"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="137"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="148"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="168"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="175"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="182"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="87"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="97"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <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="62"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="89"/>
+ <location filename="../../folderExistsDialog.ui" line="140"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="106"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="200"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="211"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="218"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="225"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="232"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="239"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="29"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="85"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="95"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui" line="23"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="33"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="214"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="43"/>
+ <location filename="../../options.ui" line="198"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="56"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="66"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="74"/>
+ <location filename="../../options.ui" line="95"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="79"/>
+ <location filename="../../options.ui" line="105"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="100"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="110"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="118"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="255"/>
+ <source>Rsync (only in copy mode)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="87"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="128"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="144"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="154"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="171"/>
+ <source>Do checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="181"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="234"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="241"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="191"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="219"/>
+ <location filename="../../scanFileOrFolder.cpp" line="283"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="229"/>
+ <location filename="../../scanFileOrFolder.cpp" line="293"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="327"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="329"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/id/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/id/translation.ts
new file mode 100644
index 0000000..338cb72
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/Languages/id/translation.ts
@@ -0,0 +1,806 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="28"/>
+ <location filename="../../AvancedQFile.cpp" line="59"/>
+ <location filename="../../AvancedQFile.cpp" line="90"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="42"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="73"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Factory</name>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</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="95"/>
+ <source>All string need match</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="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string match with the regex</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 filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1192"/>
+ <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="1199"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1215"/>
+ <source>Problem at the reading, or file size is null</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1222"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1231"/>
+ <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="1240"/>
+ <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="1246"/>
+ <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="1293"/>
+ <source>Some error have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1299"/>
+ <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="62"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="154"/>
+ <location filename="../../ReadThread.cpp" line="316"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="193"/>
+ <location filename="../../ReadThread.cpp" line="373"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="61"/>
+ <location filename="../../RmPath.cpp" line="75"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RmPath.cpp" line="85"/>
+ <source>Unable to remove the file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="312"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="322"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="627"/>
+ <source>The checksums not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="443"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="481"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="260"/>
+ <location filename="../../copyEngine.cpp" line="278"/>
+ <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="289"/>
+ <location filename="../../copyEngine.cpp" line="307"/>
+ <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="521"/>
+ <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error on 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="56"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="73"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="90"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="136"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="156"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="163"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="170"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="177"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="29"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="32"/>
+ <source>Folder name</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="153"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="243"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="254"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="274"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="281"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="291"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="298"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="307"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="312"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="102"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="112"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="20"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="47"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="64"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="81"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="137"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="148"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="168"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="175"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="182"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="87"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="97"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <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="62"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="89"/>
+ <location filename="../../folderExistsDialog.ui" line="140"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="106"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="200"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="211"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="218"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="225"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="232"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="239"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="29"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="85"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="95"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui" line="23"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="33"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="214"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="43"/>
+ <location filename="../../options.ui" line="198"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="56"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="66"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="74"/>
+ <location filename="../../options.ui" line="95"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="79"/>
+ <location filename="../../options.ui" line="105"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="100"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="110"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="118"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="255"/>
+ <source>Rsync (only in copy mode)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="87"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="128"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="144"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="154"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="171"/>
+ <source>Do checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="181"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="234"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="241"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="191"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="219"/>
+ <location filename="../../scanFileOrFolder.cpp" line="283"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="229"/>
+ <location filename="../../scanFileOrFolder.cpp" line="293"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="327"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="329"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/it/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/it/translation.ts
new file mode 100644
index 0000000..16adaed
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/Languages/it/translation.ts
@@ -0,0 +1,806 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="it" sourcelanguage="en">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="28"/>
+ <location filename="../../AvancedQFile.cpp" line="59"/>
+ <location filename="../../AvancedQFile.cpp" line="90"/>
+ <source>Not supported on this platform</source>
+ <translation>Non supportato su questa piattaforma</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="42"/>
+ <source>Last modified date is wrong</source>
+ <translation>Ultima modifica è sbagliato</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="73"/>
+ <source>Last access date is wrong</source>
+ <translation>Ultima data di accesso è sbagliato</translation>
+ </message>
+</context>
+<context>
+ <name>Factory</name>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options error</source>
+ <translation>opzioni di errore</translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation>Opzioni del motore non viene caricato, non possono accedere ai filtri</translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation>Cerca:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation>Tipo di ricerca:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation>testo Raw</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation>semplificato regex</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>Applicare su:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation>File</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation>Cartella</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation>File e cartelle</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>All string need match</source>
+ <translation>Tutti stringa bisogno di corrispondere</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation>Verifica</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation>Test stringa:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation>Filtri di dialogo</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation>La regex è valido</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string match with the regex</source>
+ <translation>La stringa di test match con la regex</translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation>Filtri</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filter</source>
+ <translation>Esclusione filtro</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filter</source>
+ <translation>inclusione filtro</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation>Nessuno = Includi tutte le</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation>testo Raw</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation>semplificato regex</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation>Perl&apos;s regex</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation>Solo su file</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation>Solo sulla cartella</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation>partita completa</translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1192"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation>Impossibile fare per spostare o copiare elemento in male modo forzato: %1</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1199"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation>Impossibile salvare la lista dei trasferimenti: %1</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1215"/>
+ <source>Problem at the reading, or file size is null</source>
+ <translation>Problema alla lettura, o la dimensione del file è nullo</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1222"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation>Sbagliato intestazione: &quot;%1&quot;</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1231"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation>La lista di trasferimento è in modalità mista, ma questa istanza non è in questa modalità</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1240"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation>La lista di trasferimento è in modalità di copia, ma questa istanza non è in questa modalità</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1246"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation>La lista di trasferimento è in modalità di spostamento, ma questa istanza non è in questa modalità</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1293"/>
+ <source>Some error have been found during the line parsing</source>
+ <translation>Alcuni errori sono stati trovati durante l&apos;analisi linea</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1299"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation>Impossibile aprire la lista di trasferimento: %1</translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="62"/>
+ <source>Unable to create the folder</source>
+ <translation>Impossibile creare la cartella</translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="154"/>
+ <location filename="../../ReadThread.cpp" line="316"/>
+ <source>Unable to read the source file: </source>
+ <translation>Impossibile leggere il file sorgente: </translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="193"/>
+ <location filename="../../ReadThread.cpp" line="373"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation>File troncato durante la lettura, i possibili cambiamenti di dati</translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation>Prima ridenominazione</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation>%name% - copia</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;variabili: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; per il nome del file originale&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation>Secondo ridenominazione</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation>%name% - copia (%number%)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;variabili: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; per il nome del file originale&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; per il numero aggiuntivo&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation>Rinominare le regole</translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="61"/>
+ <location filename="../../RmPath.cpp" line="75"/>
+ <source>Unable to remove the folder</source>
+ <translation>Impossibile rimuovere la cartella</translation>
+ </message>
+ <message>
+ <location filename="../../RmPath.cpp" line="85"/>
+ <source>Unable to remove the file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="312"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="322"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="627"/>
+ <source>The checksums not match</source>
+ <translation>Il checksum non corrisponde</translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="443"/>
+ <source>Unable to read the source file: </source>
+ <translation>Impossibile leggere il file sorgente: </translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="481"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation>File troncato durante la lettura, i possibili cambiamenti di dati</translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="260"/>
+ <location filename="../../copyEngine.cpp" line="278"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation>Il motore è costretto a muoversi, non è possibile copiare con esso</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="289"/>
+ <location filename="../../copyEngine.cpp" line="307"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation>Il motore è costretto a copiare, non è possibile spostare con esso</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="521"/>
+ <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
+ <translation>La modalità sono stati costretti in precedenza, è un errore interno, si prega di segnalarlo</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options error</source>
+ <translation>opzioni di errore</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation>Opzioni del motore non viene caricato, non possono accedere ai filtri</translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error on file</source>
+ <translation>Errore su file</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation>Errore</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="56"/>
+ <source>Size</source>
+ <translation>Dimensione</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="73"/>
+ <source>Modified</source>
+ <translation>Modificato</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="90"/>
+ <source>File name</source>
+ <translation>Nome file</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="136"/>
+ <source>&amp;Always do this action</source>
+ <translation>Eseguire sempre questa azione</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="156"/>
+ <source>Put to bottom</source>
+ <translation>Mettere a fondo</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="163"/>
+ <source>Retry</source>
+ <translation>Riprova</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="170"/>
+ <source>&amp;Skip</source>
+ <translation>Saltare</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="177"/>
+ <source>&amp;Cancel</source>
+ <translation>Annullare</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="29"/>
+ <source>Error on folder</source>
+ <translation>Errore cartella</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="32"/>
+ <source>Folder name</source>
+ <translation>Nome della cartella</translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation>Il file esiste</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>Fonte</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>Destinazione</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="153"/>
+ <source>Size</source>
+ <translation>Dimensione</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Modified</source>
+ <translation>Modificato</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>File name</source>
+ <translation>Nome file</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="243"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Suggerisci nuovo nome</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="254"/>
+ <source>&amp;Always do this action</source>
+ <translation>Eseguire sempre questa azione</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="274"/>
+ <source>&amp;Rename</source>
+ <translation>Rinominare</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="281"/>
+ <source>&amp;Overwrite</source>
+ <translation>Sovrascrivi</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="291"/>
+ <source>&amp;Skip</source>
+ <translation>Saltare</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="298"/>
+ <source>&amp;Cancel</source>
+ <translation>Annullare</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="307"/>
+ <source>Overwrite if newer</source>
+ <translation>Sovrascrivi se più recente</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="312"/>
+ <source>Overwrite if not same modification date</source>
+ <translation>Sovrascrivi se non la data di modifica stessa</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="102"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="112"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>This files are the same file</source>
+ <translation>Questi file sono lo stesso file</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="20"/>
+ <source>The source and destination is same</source>
+ <translation>La sorgente e destinazione è uguale</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="47"/>
+ <source>Size</source>
+ <translation>Dimensione</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="64"/>
+ <source>Modified</source>
+ <translation>Modificato</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="81"/>
+ <source>File name</source>
+ <translation>Nome file</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="137"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Suggerisci nuovo nome</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="148"/>
+ <source>&amp;Always do this action</source>
+ <translation>Eseguire sempre questa azione</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="168"/>
+ <source>&amp;Rename</source>
+ <translation>Rinominare</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="175"/>
+ <source>&amp;Skip</source>
+ <translation>Saltare</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="182"/>
+ <source>&amp;Cancel</source>
+ <translation>Annullare</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="87"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="97"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>This folders are the same folder</source>
+ <translation>Questo cartelle sono nella stessa cartella</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>Fonte</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>Destinazione</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="62"/>
+ <source>The source and destination is same</source>
+ <translation>La sorgente e destinazione è uguale</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="89"/>
+ <location filename="../../folderExistsDialog.ui" line="140"/>
+ <source>Modified</source>
+ <translation>Modificato</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="106"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Folder name</source>
+ <translation>Nome della cartella</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="200"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Suggerisci nuovo nome</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="211"/>
+ <source>&amp;Always do this action</source>
+ <translation>Eseguire sempre questa azione</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="218"/>
+ <source>&amp;Rename</source>
+ <translation>Rinominare</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="225"/>
+ <source>Merge</source>
+ <translation>Unire</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="232"/>
+ <source>Skip</source>
+ <translation>Saltare</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="239"/>
+ <source>&amp;Cancel</source>
+ <translation>Annullare</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="29"/>
+ <source>Folder already exists</source>
+ <translation>Cartella esiste già</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="85"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="95"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui" line="23"/>
+ <source>Transfer the file rights</source>
+ <translation>Trasferire i diritti di file</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="33"/>
+ <source>Keep the file date</source>
+ <translation>Tenere la data del file</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="214"/>
+ <source>Block size</source>
+ <translation>Dimensione del blocco</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="43"/>
+ <location filename="../../options.ui" line="198"/>
+ <source>KB</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="56"/>
+ <source>Auto start the transfer</source>
+ <translation>Auto iniziare il trasferimento</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="66"/>
+ <source>When folder error</source>
+ <translation>Quando errore cartella</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="74"/>
+ <location filename="../../options.ui" line="95"/>
+ <source>Ask</source>
+ <translation>Chiedere</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="79"/>
+ <location filename="../../options.ui" line="105"/>
+ <source>Skip</source>
+ <translation>Saltare</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="100"/>
+ <source>Merge</source>
+ <translation>Unire</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="110"/>
+ <source>Rename</source>
+ <translation>Rinominare</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="118"/>
+ <source>Check if destination folder exists</source>
+ <translation>Controllare se la cartella di destinazione esiste</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="255"/>
+ <source>Rsync (only in copy mode)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="87"/>
+ <source>When folder collision</source>
+ <translation>Quando collisione cartella</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="128"/>
+ <source>Checksum</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="144"/>
+ <source>Only after error</source>
+ <translation>Solo dopo l&apos;errore</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="154"/>
+ <source>Ignore if impossible</source>
+ <translation>Ignora se impossibile</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="171"/>
+ <source>Do checksum</source>
+ <translation>Fare checksum</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="181"/>
+ <source>Enable OS buffer</source>
+ <translation>Abilita OS tampone</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="234"/>
+ <source>Filters</source>
+ <translation>Filtri</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="241"/>
+ <source>Renaming rules</source>
+ <translation>Rinominare le regole</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="191"/>
+ <source>OS buffer only if smaller than</source>
+ <translation>OS tampone solo se inferiori</translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="219"/>
+ <location filename="../../scanFileOrFolder.cpp" line="283"/>
+ <source>%1 - copy</source>
+ <translation>%1 - copia</translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="229"/>
+ <location filename="../../scanFileOrFolder.cpp" line="293"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - copia (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="327"/>
+ <source>The folder not exists</source>
+ <translation>La cartella non esiste</translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="329"/>
+ <source>The folder is not readable</source>
+ <translation>La cartella non è leggibile</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/ja/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/ja/translation.ts
new file mode 100644
index 0000000..9c2e5d6
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/Languages/ja/translation.ts
@@ -0,0 +1,806 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="28"/>
+ <location filename="../../AvancedQFile.cpp" line="59"/>
+ <location filename="../../AvancedQFile.cpp" line="90"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="42"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="73"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Factory</name>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</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>All string need match</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>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string match with the regex</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 filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1192"/>
+ <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="1199"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1215"/>
+ <source>Problem at the reading, or file size is null</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1222"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1231"/>
+ <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="1240"/>
+ <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="1246"/>
+ <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="1293"/>
+ <source>Some error have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1299"/>
+ <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="62"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="154"/>
+ <location filename="../../ReadThread.cpp" line="316"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="193"/>
+ <location filename="../../ReadThread.cpp" line="373"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="61"/>
+ <location filename="../../RmPath.cpp" line="75"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RmPath.cpp" line="85"/>
+ <source>Unable to remove the file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="312"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="322"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="627"/>
+ <source>The checksums not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="443"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="481"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="260"/>
+ <location filename="../../copyEngine.cpp" line="278"/>
+ <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="289"/>
+ <location filename="../../copyEngine.cpp" line="307"/>
+ <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="521"/>
+ <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error on 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="56"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="73"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="90"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="136"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="156"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="163"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="170"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="177"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="29"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="32"/>
+ <source>Folder name</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="153"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="243"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="254"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="274"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="281"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="291"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="298"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="307"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="312"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="102"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="112"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="20"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="47"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="64"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="81"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="137"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="148"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="168"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="175"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="182"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="87"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="97"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <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="62"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="89"/>
+ <location filename="../../folderExistsDialog.ui" line="140"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="106"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="200"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="211"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="218"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="225"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="232"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="239"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="29"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="85"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="95"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui" line="23"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="33"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="128"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="144"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="154"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="171"/>
+ <source>Do checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="181"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="191"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="214"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="234"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="241"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="255"/>
+ <source>Rsync (only in copy mode)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="43"/>
+ <location filename="../../options.ui" line="198"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="56"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="66"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="74"/>
+ <location filename="../../options.ui" line="95"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="79"/>
+ <location filename="../../options.ui" line="105"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="100"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="110"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="118"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="87"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="219"/>
+ <location filename="../../scanFileOrFolder.cpp" line="283"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="229"/>
+ <location filename="../../scanFileOrFolder.cpp" line="293"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="327"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="329"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/ko/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/ko/translation.ts
new file mode 100644
index 0000000..4cbf604
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/Languages/ko/translation.ts
@@ -0,0 +1,806 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ko_KR">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="28"/>
+ <location filename="../../AvancedQFile.cpp" line="59"/>
+ <location filename="../../AvancedQFile.cpp" line="90"/>
+ <source>Not supported on this platform</source>
+ <translation>이 플랫폼에서 지원되지 않습니다</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="42"/>
+ <source>Last modified date is wrong</source>
+ <translation>마지막 수정 날짜가 잘못되었습니다</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="73"/>
+ <source>Last access date is wrong</source>
+ <translation>마지막 엑세스 날짜가 잘못되었습니다</translation>
+ </message>
+</context>
+<context>
+ <name>Factory</name>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</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>All string need match</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>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string match with the regex</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 filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1192"/>
+ <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="1199"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1215"/>
+ <source>Problem at the reading, or file size is null</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1222"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1231"/>
+ <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="1240"/>
+ <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="1246"/>
+ <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="1293"/>
+ <source>Some error have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1299"/>
+ <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="62"/>
+ <source>Unable to create the folder</source>
+ <translation>폴더를 생성할 수 없습니다</translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="154"/>
+ <location filename="../../ReadThread.cpp" line="316"/>
+ <source>Unable to read the source file: </source>
+ <translation>원본 파일 읽기 불가:</translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="193"/>
+ <location filename="../../ReadThread.cpp" line="373"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="61"/>
+ <location filename="../../RmPath.cpp" line="75"/>
+ <source>Unable to remove the folder</source>
+ <translation>폴더를 제거할 수 없습니다</translation>
+ </message>
+ <message>
+ <location filename="../../RmPath.cpp" line="85"/>
+ <source>Unable to remove the file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="312"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="322"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="627"/>
+ <source>The checksums not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="443"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished">원본 파일 읽기 불가:</translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="481"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="260"/>
+ <location filename="../../copyEngine.cpp" line="278"/>
+ <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="289"/>
+ <location filename="../../copyEngine.cpp" line="307"/>
+ <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="521"/>
+ <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error on file</source>
+ <translation>파일 오류가 발생했습니다</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation>오류</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="56"/>
+ <source>Size</source>
+ <translation>크기</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="73"/>
+ <source>Modified</source>
+ <translation>수정 날짜</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="90"/>
+ <source>File name</source>
+ <translation>파일 이름</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="136"/>
+ <source>&amp;Always do this action</source>
+ <translation>&amp;항상 이 작동 실행</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="156"/>
+ <source>Put to bottom</source>
+ <translation>아래에 놓기</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="163"/>
+ <source>Retry</source>
+ <translation>재시도</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="170"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;건너뛰기</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="177"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;취소</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="29"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="32"/>
+ <source>Folder name</source>
+ <translation type="unfinished">폴더 이름</translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation>파일이 존재합니다</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>원본</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>대상</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="153"/>
+ <source>Size</source>
+ <translation>크기</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Modified</source>
+ <translation>수정 날짜</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>File name</source>
+ <translation>파일 이름</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="243"/>
+ <source>Suggest new &amp;name</source>
+ <translation>새 &amp;이름 제안</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="254"/>
+ <source>&amp;Always do this action</source>
+ <translation>&amp;항상 이 작동 실행</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="274"/>
+ <source>&amp;Rename</source>
+ <translation>&amp;이름 바꾸기</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="281"/>
+ <source>&amp;Overwrite</source>
+ <translation>&amp;덮어씌우기</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="291"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;건너뛰기</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="298"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;취소</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="307"/>
+ <source>Overwrite if newer</source>
+ <translation>더 최신이면 덮어씌우기</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="312"/>
+ <source>Overwrite if not same modification date</source>
+ <translation>수정 날짜가 다르면 덮어씌우기</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="102"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="112"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>This files are the same file</source>
+ <translation>이 파일들은 동일한 파일입니다</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="20"/>
+ <source>The source and destination is same</source>
+ <translation>원본과 대상이 동일합니다</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="47"/>
+ <source>Size</source>
+ <translation>크기</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="64"/>
+ <source>Modified</source>
+ <translation>수정 날짜</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="81"/>
+ <source>File name</source>
+ <translation>파일 이름</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="137"/>
+ <source>Suggest new &amp;name</source>
+ <translation>새 &amp;이름 제안</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="148"/>
+ <source>&amp;Always do this action</source>
+ <translation>&amp;항상 이 작동 실행</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="168"/>
+ <source>&amp;Rename</source>
+ <translation>&amp;이름 바꾸기</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="175"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;건너뛰기</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="182"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;취소</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="87"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="97"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>This folders are the same folder</source>
+ <translation>이 폴더들은 동일한 폴더입니다</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>원본</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>대상</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="62"/>
+ <source>The source and destination is same</source>
+ <translation>원본과 대상이 동일합니다</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="89"/>
+ <location filename="../../folderExistsDialog.ui" line="140"/>
+ <source>Modified</source>
+ <translation>수정 날짜</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="106"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Folder name</source>
+ <translation>폴더 이름</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="200"/>
+ <source>Suggest new &amp;name</source>
+ <translation>새 &amp;이름 제안</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="211"/>
+ <source>&amp;Always do this action</source>
+ <translation>&amp;항상 이 작동 실행</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="218"/>
+ <source>&amp;Rename</source>
+ <translation>&amp;이름 바꾸기</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="225"/>
+ <source>Merge</source>
+ <translation>합치기</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="232"/>
+ <source>Skip</source>
+ <translation>건너뛰기</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="239"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;취소</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="29"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="85"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="95"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui" line="23"/>
+ <source>Transfer the file rights</source>
+ <translation>파일 권한 전송</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="33"/>
+ <source>Keep the file date</source>
+ <translation>파일 날짜 보존</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="128"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="144"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="154"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="171"/>
+ <source>Do checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="181"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="191"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="214"/>
+ <source>Block size</source>
+ <translation>블럭 크기</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="234"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="241"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="255"/>
+ <source>Rsync (only in copy mode)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="43"/>
+ <location filename="../../options.ui" line="198"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="56"/>
+ <source>Auto start the transfer</source>
+ <translation>전송 자동 시작</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="66"/>
+ <source>When folder error</source>
+ <translation>폴더 오류시</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="74"/>
+ <location filename="../../options.ui" line="95"/>
+ <source>Ask</source>
+ <translation>확인</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="79"/>
+ <location filename="../../options.ui" line="105"/>
+ <source>Skip</source>
+ <translation>건너뛰기</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="100"/>
+ <source>Merge</source>
+ <translation>합치기</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="110"/>
+ <source>Rename</source>
+ <translation>이름 바꾸기</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="118"/>
+ <source>Check if destination folder exists</source>
+ <translation>대상 폴드 존재시 확인</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="87"/>
+ <source>When folder collision</source>
+ <translation>폴더 충돌시</translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="219"/>
+ <location filename="../../scanFileOrFolder.cpp" line="283"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="229"/>
+ <location filename="../../scanFileOrFolder.cpp" line="293"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="327"/>
+ <source>The folder not exists</source>
+ <translation>폴더가 존재하지 않습니다</translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="329"/>
+ <source>The folder is not readable</source>
+ <translation>폴더를 읽을 수 없습니다</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/nl/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/nl/translation.ts
new file mode 100644
index 0000000..338cb72
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/Languages/nl/translation.ts
@@ -0,0 +1,806 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="28"/>
+ <location filename="../../AvancedQFile.cpp" line="59"/>
+ <location filename="../../AvancedQFile.cpp" line="90"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="42"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="73"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Factory</name>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</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="95"/>
+ <source>All string need match</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="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string match with the regex</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 filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1192"/>
+ <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="1199"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1215"/>
+ <source>Problem at the reading, or file size is null</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1222"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1231"/>
+ <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="1240"/>
+ <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="1246"/>
+ <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="1293"/>
+ <source>Some error have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1299"/>
+ <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="62"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="154"/>
+ <location filename="../../ReadThread.cpp" line="316"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="193"/>
+ <location filename="../../ReadThread.cpp" line="373"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="61"/>
+ <location filename="../../RmPath.cpp" line="75"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RmPath.cpp" line="85"/>
+ <source>Unable to remove the file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="312"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="322"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="627"/>
+ <source>The checksums not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="443"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="481"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="260"/>
+ <location filename="../../copyEngine.cpp" line="278"/>
+ <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="289"/>
+ <location filename="../../copyEngine.cpp" line="307"/>
+ <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="521"/>
+ <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error on 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="56"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="73"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="90"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="136"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="156"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="163"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="170"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="177"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="29"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="32"/>
+ <source>Folder name</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="153"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="243"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="254"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="274"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="281"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="291"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="298"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="307"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="312"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="102"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="112"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="20"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="47"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="64"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="81"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="137"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="148"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="168"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="175"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="182"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="87"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="97"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <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="62"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="89"/>
+ <location filename="../../folderExistsDialog.ui" line="140"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="106"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="200"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="211"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="218"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="225"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="232"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="239"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="29"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="85"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="95"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui" line="23"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="33"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="214"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="43"/>
+ <location filename="../../options.ui" line="198"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="56"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="66"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="74"/>
+ <location filename="../../options.ui" line="95"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="79"/>
+ <location filename="../../options.ui" line="105"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="100"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="110"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="118"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="255"/>
+ <source>Rsync (only in copy mode)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="87"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="128"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="144"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="154"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="171"/>
+ <source>Do checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="181"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="234"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="241"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="191"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="219"/>
+ <location filename="../../scanFileOrFolder.cpp" line="283"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="229"/>
+ <location filename="../../scanFileOrFolder.cpp" line="293"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="327"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="329"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/no/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/no/translation.ts
new file mode 100644
index 0000000..338cb72
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/Languages/no/translation.ts
@@ -0,0 +1,806 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="28"/>
+ <location filename="../../AvancedQFile.cpp" line="59"/>
+ <location filename="../../AvancedQFile.cpp" line="90"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="42"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="73"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Factory</name>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</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="95"/>
+ <source>All string need match</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="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string match with the regex</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 filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1192"/>
+ <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="1199"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1215"/>
+ <source>Problem at the reading, or file size is null</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1222"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1231"/>
+ <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="1240"/>
+ <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="1246"/>
+ <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="1293"/>
+ <source>Some error have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1299"/>
+ <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="62"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="154"/>
+ <location filename="../../ReadThread.cpp" line="316"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="193"/>
+ <location filename="../../ReadThread.cpp" line="373"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="61"/>
+ <location filename="../../RmPath.cpp" line="75"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RmPath.cpp" line="85"/>
+ <source>Unable to remove the file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="312"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="322"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="627"/>
+ <source>The checksums not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="443"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="481"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="260"/>
+ <location filename="../../copyEngine.cpp" line="278"/>
+ <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="289"/>
+ <location filename="../../copyEngine.cpp" line="307"/>
+ <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="521"/>
+ <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error on 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="56"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="73"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="90"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="136"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="156"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="163"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="170"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="177"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="29"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="32"/>
+ <source>Folder name</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="153"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="243"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="254"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="274"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="281"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="291"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="298"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="307"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="312"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="102"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="112"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="20"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="47"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="64"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="81"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="137"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="148"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="168"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="175"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="182"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="87"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="97"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <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="62"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="89"/>
+ <location filename="../../folderExistsDialog.ui" line="140"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="106"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="200"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="211"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="218"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="225"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="232"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="239"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="29"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="85"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="95"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui" line="23"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="33"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="214"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="43"/>
+ <location filename="../../options.ui" line="198"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="56"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="66"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="74"/>
+ <location filename="../../options.ui" line="95"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="79"/>
+ <location filename="../../options.ui" line="105"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="100"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="110"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="118"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="255"/>
+ <source>Rsync (only in copy mode)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="87"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="128"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="144"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="154"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="171"/>
+ <source>Do checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="181"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="234"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="241"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="191"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="219"/>
+ <location filename="../../scanFileOrFolder.cpp" line="283"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="229"/>
+ <location filename="../../scanFileOrFolder.cpp" line="293"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="327"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="329"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/pl/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/pl/translation.ts
new file mode 100644
index 0000000..338cb72
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/Languages/pl/translation.ts
@@ -0,0 +1,806 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="28"/>
+ <location filename="../../AvancedQFile.cpp" line="59"/>
+ <location filename="../../AvancedQFile.cpp" line="90"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="42"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="73"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Factory</name>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</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="95"/>
+ <source>All string need match</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="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string match with the regex</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 filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1192"/>
+ <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="1199"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1215"/>
+ <source>Problem at the reading, or file size is null</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1222"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1231"/>
+ <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="1240"/>
+ <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="1246"/>
+ <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="1293"/>
+ <source>Some error have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1299"/>
+ <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="62"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="154"/>
+ <location filename="../../ReadThread.cpp" line="316"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="193"/>
+ <location filename="../../ReadThread.cpp" line="373"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="61"/>
+ <location filename="../../RmPath.cpp" line="75"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RmPath.cpp" line="85"/>
+ <source>Unable to remove the file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="312"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="322"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="627"/>
+ <source>The checksums not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="443"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="481"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="260"/>
+ <location filename="../../copyEngine.cpp" line="278"/>
+ <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="289"/>
+ <location filename="../../copyEngine.cpp" line="307"/>
+ <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="521"/>
+ <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error on 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="56"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="73"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="90"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="136"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="156"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="163"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="170"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="177"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="29"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="32"/>
+ <source>Folder name</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="153"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="243"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="254"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="274"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="281"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="291"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="298"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="307"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="312"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="102"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="112"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="20"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="47"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="64"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="81"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="137"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="148"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="168"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="175"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="182"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="87"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="97"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <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="62"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="89"/>
+ <location filename="../../folderExistsDialog.ui" line="140"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="106"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="200"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="211"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="218"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="225"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="232"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="239"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="29"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="85"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="95"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui" line="23"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="33"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="214"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="43"/>
+ <location filename="../../options.ui" line="198"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="56"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="66"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="74"/>
+ <location filename="../../options.ui" line="95"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="79"/>
+ <location filename="../../options.ui" line="105"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="100"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="110"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="118"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="255"/>
+ <source>Rsync (only in copy mode)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="87"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="128"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="144"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="154"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="171"/>
+ <source>Do checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="181"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="234"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="241"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="191"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="219"/>
+ <location filename="../../scanFileOrFolder.cpp" line="283"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="229"/>
+ <location filename="../../scanFileOrFolder.cpp" line="293"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="327"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="329"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/pt/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/pt/translation.ts
new file mode 100644
index 0000000..338cb72
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/Languages/pt/translation.ts
@@ -0,0 +1,806 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="28"/>
+ <location filename="../../AvancedQFile.cpp" line="59"/>
+ <location filename="../../AvancedQFile.cpp" line="90"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="42"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="73"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Factory</name>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</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="95"/>
+ <source>All string need match</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="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string match with the regex</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 filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1192"/>
+ <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="1199"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1215"/>
+ <source>Problem at the reading, or file size is null</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1222"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1231"/>
+ <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="1240"/>
+ <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="1246"/>
+ <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="1293"/>
+ <source>Some error have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1299"/>
+ <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="62"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="154"/>
+ <location filename="../../ReadThread.cpp" line="316"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="193"/>
+ <location filename="../../ReadThread.cpp" line="373"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="61"/>
+ <location filename="../../RmPath.cpp" line="75"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RmPath.cpp" line="85"/>
+ <source>Unable to remove the file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="312"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="322"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="627"/>
+ <source>The checksums not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="443"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="481"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="260"/>
+ <location filename="../../copyEngine.cpp" line="278"/>
+ <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="289"/>
+ <location filename="../../copyEngine.cpp" line="307"/>
+ <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="521"/>
+ <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error on 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="56"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="73"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="90"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="136"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="156"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="163"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="170"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="177"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="29"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="32"/>
+ <source>Folder name</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="153"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="243"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="254"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="274"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="281"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="291"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="298"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="307"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="312"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="102"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="112"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="20"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="47"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="64"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="81"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="137"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="148"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="168"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="175"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="182"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="87"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="97"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <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="62"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="89"/>
+ <location filename="../../folderExistsDialog.ui" line="140"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="106"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="200"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="211"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="218"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="225"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="232"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="239"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="29"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="85"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="95"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui" line="23"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="33"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="214"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="43"/>
+ <location filename="../../options.ui" line="198"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="56"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="66"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="74"/>
+ <location filename="../../options.ui" line="95"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="79"/>
+ <location filename="../../options.ui" line="105"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="100"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="110"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="118"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="255"/>
+ <source>Rsync (only in copy mode)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="87"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="128"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="144"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="154"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="171"/>
+ <source>Do checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="181"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="234"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="241"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="191"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="219"/>
+ <location filename="../../scanFileOrFolder.cpp" line="283"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="229"/>
+ <location filename="../../scanFileOrFolder.cpp" line="293"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="327"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="329"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/ru/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/ru/translation.ts
new file mode 100644
index 0000000..cbafed3
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/Languages/ru/translation.ts
@@ -0,0 +1,806 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ru" sourcelanguage="en">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="28"/>
+ <location filename="../../AvancedQFile.cpp" line="59"/>
+ <location filename="../../AvancedQFile.cpp" line="90"/>
+ <source>Not supported on this platform</source>
+ <translation>Не поддерживается на этой платформе</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="42"/>
+ <source>Last modified date is wrong</source>
+ <translation>Дата обновления неправильно</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="73"/>
+ <source>Last access date is wrong</source>
+ <translation>Дата последнего доступа не так</translation>
+ </message>
+</context>
+<context>
+ <name>Factory</name>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options error</source>
+ <translation>Опции ошибке</translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation>Параметры двигателя не загружается, не может получить доступ к фильтрам</translation>
+ </message>
+</context>
+<context>
+ <name>FilterRules</name>
+ <message>
+ <location filename="../../FilterRules.ui" line="33"/>
+ <source>Search:</source>
+ <translation>Поиск по сайту:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="43"/>
+ <source>Search type:</source>
+ <translation>Тип поиска:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="51"/>
+ <source>Raw text</source>
+ <translation>Сырой текст</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="56"/>
+ <source>Simplified regex</source>
+ <translation>упрощенный regex</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>Нанесите на:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="77"/>
+ <source>File</source>
+ <translation>файл</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="82"/>
+ <source>Folder</source>
+ <translation>папка</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="87"/>
+ <source>File and folder</source>
+ <translation>Файлов и папок</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="95"/>
+ <source>All string need match</source>
+ <translation>Все строки нужно соответствовать</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="102"/>
+ <source>Checking</source>
+ <translation>контроль</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="115"/>
+ <source>Test string:</source>
+ <translation>Испытание строки:</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="17"/>
+ <source>Filters dialog</source>
+ <translation>Фильтры диалогового</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="108"/>
+ <source>The regex is valid</source>
+ <translation>Регулярное действует</translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string match with the regex</source>
+ <translation>Матч тестовую строку с регулярным выражением</translation>
+ </message>
+</context>
+<context>
+ <name>Filters</name>
+ <message>
+ <location filename="../../Filters.ui" line="14"/>
+ <source>Filters</source>
+ <translation>Фильтры</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="30"/>
+ <source>Exclusion filter</source>
+ <translation>Исключение фильтра</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filter</source>
+ <translation>Включение фильтра</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation>Ни = Включить все</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation>Сырой текст</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation>Упрощенная регулярных выражений</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation>Perl&apos;s regex</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation>Только на файл</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation>Только на папку</translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation>Полный матч</translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1192"/>
+ <source>Unable do to move or copy item into wrong forced mode: %1</source>
+ <translation>Невозможно сделать, чтобы скопировать или переместить элемент в неправильном форсированном режиме: %1</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1199"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation>Невозможно сохранить трансфер: %1</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1215"/>
+ <source>Problem at the reading, or file size is null</source>
+ <translation>Проблема при чтении или размер файла нулевой</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1222"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation>Неправильный заголовок: &quot;%1&quot;</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1231"/>
+ <source>The transfer list is in mixed mode, but this instance is not in this mode</source>
+ <translation>Трансфер в смешанном режиме, но этот экземпляр не в этом режиме</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1240"/>
+ <source>The transfer list is in copy mode, but this instance is not in this mode</source>
+ <translation>Передача списка в режиме копирования, но этот экземпляр не в этом режиме</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1246"/>
+ <source>The transfer list is in move mode, but this instance is not in this mode</source>
+ <translation>Трансфер в режим перемещения, но этот экземпляр не в этом режиме</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1293"/>
+ <source>Some error have been found during the line parsing</source>
+ <translation>Некоторые ошибки были обнаружены в ходе разбора линия</translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1299"/>
+ <source>Unable to open the transfer list: %1</source>
+ <translation>Не удается открыть трансфер: %1</translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="62"/>
+ <source>Unable to create the folder</source>
+ <translation>Невозможно создать папку</translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="154"/>
+ <location filename="../../ReadThread.cpp" line="316"/>
+ <source>Unable to read the source file: </source>
+ <translation>Невозможно прочитать исходный файл: </translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="193"/>
+ <location filename="../../ReadThread.cpp" line="373"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation>Файл усечены во время чтения, возможность изменения данных</translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation>Первое переименование</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation>%name% - копия</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Переменные: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; по оригинальному названию файла&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation>Второе переименование</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation>%name% - копия (%number%)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Переменные: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; по оригинальному названию файла&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; за дополнительный номер&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation>%1 - копия</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - копия (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation>Переименование правила</translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="61"/>
+ <location filename="../../RmPath.cpp" line="75"/>
+ <source>Unable to remove the folder</source>
+ <translation>Не удается удалить папку</translation>
+ </message>
+ <message>
+ <location filename="../../RmPath.cpp" line="85"/>
+ <source>Unable to remove the file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="312"/>
+ <source>%1 - copy</source>
+ <translation>%1 - копия</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="322"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - копия (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="627"/>
+ <source>The checksums not match</source>
+ <translation>Контрольные суммы не совпадают</translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="443"/>
+ <source>Unable to read the source file: </source>
+ <translation>Невозможно прочитать исходный файл: </translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="481"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation>Файл усечены во время чтения, возможность изменения данных</translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="260"/>
+ <location filename="../../copyEngine.cpp" line="278"/>
+ <source>The engine is forced to move, you can&apos;t copy with it</source>
+ <translation>Двигатель вынуждены покинуть свои дома, вы не можете скопировать с ним</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="289"/>
+ <location filename="../../copyEngine.cpp" line="307"/>
+ <source>The engine is forced to copy, you can&apos;t move with it</source>
+ <translation>Двигатель вынужден копии, вы не можете двигаться вместе с ним</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="521"/>
+ <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
+ <translation>Режим был вынужден ранее, это внутренняя ошибка, пожалуйста, сообщите об этом</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options error</source>
+ <translation>Опции ошибке</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation>Параметры двигателя не загружается, не может получить доступ к фильтрам</translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error on file</source>
+ <translation>Ошибка в файле</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="20"/>
+ <source>Error</source>
+ <translation>ошибка</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="56"/>
+ <source>Size</source>
+ <translation>размер</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="73"/>
+ <source>Modified</source>
+ <translation>модифицированный</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="90"/>
+ <source>File name</source>
+ <translation>имя файла</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="136"/>
+ <source>&amp;Always do this action</source>
+ <translation>Всегда делайте это действие</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="156"/>
+ <source>Put to bottom</source>
+ <translation>Положить в нижней</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="163"/>
+ <source>Retry</source>
+ <translation>Повторить</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="170"/>
+ <source>&amp;Skip</source>
+ <translation>пропускать</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="177"/>
+ <source>&amp;Cancel</source>
+ <translation>отменить</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="29"/>
+ <source>Error on folder</source>
+ <translation>Ошибка в папку</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="32"/>
+ <source>Folder name</source>
+ <translation>имя папки</translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="14"/>
+ <source>The file exists</source>
+ <translation>Файл существует</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>источник</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>назначение</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="82"/>
+ <location filename="../../fileExistsDialog.ui" line="153"/>
+ <source>Size</source>
+ <translation>размер</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Modified</source>
+ <translation>модифицированный</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>File name</source>
+ <translation>имя файла</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="243"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Предложить новое имя</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="254"/>
+ <source>&amp;Always do this action</source>
+ <translation>Всегда делайте это действие</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="274"/>
+ <source>&amp;Rename</source>
+ <translation>переименовать</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="281"/>
+ <source>&amp;Overwrite</source>
+ <translation>переписывать</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="291"/>
+ <source>&amp;Skip</source>
+ <translation>пропускать</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="298"/>
+ <source>&amp;Cancel</source>
+ <translation>отменить</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="307"/>
+ <source>Overwrite if newer</source>
+ <translation>Заменить, если новее</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="312"/>
+ <source>Overwrite if not same modification date</source>
+ <translation>Заменить, если не ту же дату модификации</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="102"/>
+ <source>%1 - copy</source>
+ <translation>%1 - копия</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="112"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - копия (%2)</translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>This files are the same file</source>
+ <translation>Эти файлы имеют тот же файл</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="20"/>
+ <source>The source and destination is same</source>
+ <translation>Источник и назначение такое же,</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="47"/>
+ <source>Size</source>
+ <translation>размер</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="64"/>
+ <source>Modified</source>
+ <translation>модифицированный</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="81"/>
+ <source>File name</source>
+ <translation>имя файла</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="137"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Предложить новое имя</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="148"/>
+ <source>&amp;Always do this action</source>
+ <translation>Всегда делайте это действие</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="168"/>
+ <source>&amp;Rename</source>
+ <translation>переименовать</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="175"/>
+ <source>&amp;Skip</source>
+ <translation>пропускать</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="182"/>
+ <source>&amp;Cancel</source>
+ <translation>отменить</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="87"/>
+ <source>%1 - copy</source>
+ <translation>%1 - копия</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="97"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - копия (%2)</translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>This folders are the same folder</source>
+ <translation>Это папки той же папке,</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="34"/>
+ <source>Source</source>
+ <translation>источник</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="50"/>
+ <source>Destination</source>
+ <translation>назначение</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="62"/>
+ <source>The source and destination is same</source>
+ <translation>Источник и назначение такое же,</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="89"/>
+ <location filename="../../folderExistsDialog.ui" line="140"/>
+ <source>Modified</source>
+ <translation>модифицированный</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="106"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Folder name</source>
+ <translation>имя папки</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="200"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Предложить новое имя</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="211"/>
+ <source>&amp;Always do this action</source>
+ <translation>Всегда делайте это действие</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="218"/>
+ <source>&amp;Rename</source>
+ <translation>переименовать</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="225"/>
+ <source>Merge</source>
+ <translation>слияние</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="232"/>
+ <source>Skip</source>
+ <translation>пропускать</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="239"/>
+ <source>&amp;Cancel</source>
+ <translation>отменить</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="29"/>
+ <source>Folder already exists</source>
+ <translation>Папка уже существует</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="85"/>
+ <source>%1 - copy</source>
+ <translation>%1 - копия</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="95"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - копия (%2)</translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui" line="23"/>
+ <source>Transfer the file rights</source>
+ <translation>Передача файлов прав</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="33"/>
+ <source>Keep the file date</source>
+ <translation>Держите дату файла</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="214"/>
+ <source>Block size</source>
+ <translation>размер блока</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="43"/>
+ <location filename="../../options.ui" line="198"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="56"/>
+ <source>Auto start the transfer</source>
+ <translation>Авто начать передачу</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="66"/>
+ <source>When folder error</source>
+ <translation>Когда папка ошибка</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="74"/>
+ <location filename="../../options.ui" line="95"/>
+ <source>Ask</source>
+ <translation>просить</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="79"/>
+ <location filename="../../options.ui" line="105"/>
+ <source>Skip</source>
+ <translation>пропускать</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="100"/>
+ <source>Merge</source>
+ <translation>слияние</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="110"/>
+ <source>Rename</source>
+ <translation>переименовать</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="118"/>
+ <source>Check if destination folder exists</source>
+ <translation>Убедитесь, что папка существует</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="255"/>
+ <source>Rsync (only in copy mode)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="87"/>
+ <source>When folder collision</source>
+ <translation>Когда папка столкновения</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="128"/>
+ <source>Checksum</source>
+ <translation>Контрольная</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="144"/>
+ <source>Only after error</source>
+ <translation>Только после того, как ошибка</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="154"/>
+ <source>Ignore if impossible</source>
+ <translation>Игнорировать, если невозможно</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="171"/>
+ <source>Do checksum</source>
+ <translation>У контрольной суммы</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="181"/>
+ <source>Enable OS buffer</source>
+ <translation>Включить OS буфер</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="234"/>
+ <source>Filters</source>
+ <translation>Фильтры</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="241"/>
+ <source>Renaming rules</source>
+ <translation>Переименование правила</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="191"/>
+ <source>OS buffer only if smaller than</source>
+ <translation>ОС буфер, только если меньше</translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="219"/>
+ <location filename="../../scanFileOrFolder.cpp" line="283"/>
+ <source>%1 - copy</source>
+ <translation>%1 - копия</translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="229"/>
+ <location filename="../../scanFileOrFolder.cpp" line="293"/>
+ <source>%1 - copy (%2)</source>
+ <translation>%1 - копия (%2)</translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="327"/>
+ <source>The folder not exists</source>
+ <translation>Папка не существует</translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="329"/>
+ <source>The folder is not readable</source>
+ <translation>Папки не читается</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/th/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/th/translation.ts
new file mode 100644
index 0000000..338cb72
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/Languages/th/translation.ts
@@ -0,0 +1,806 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="28"/>
+ <location filename="../../AvancedQFile.cpp" line="59"/>
+ <location filename="../../AvancedQFile.cpp" line="90"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="42"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="73"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Factory</name>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</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="95"/>
+ <source>All string need match</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="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string match with the regex</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 filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1192"/>
+ <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="1199"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1215"/>
+ <source>Problem at the reading, or file size is null</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1222"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1231"/>
+ <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="1240"/>
+ <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="1246"/>
+ <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="1293"/>
+ <source>Some error have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1299"/>
+ <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="62"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="154"/>
+ <location filename="../../ReadThread.cpp" line="316"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="193"/>
+ <location filename="../../ReadThread.cpp" line="373"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="61"/>
+ <location filename="../../RmPath.cpp" line="75"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RmPath.cpp" line="85"/>
+ <source>Unable to remove the file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="312"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="322"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="627"/>
+ <source>The checksums not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="443"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="481"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="260"/>
+ <location filename="../../copyEngine.cpp" line="278"/>
+ <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="289"/>
+ <location filename="../../copyEngine.cpp" line="307"/>
+ <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="521"/>
+ <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error on 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="56"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="73"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="90"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="136"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="156"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="163"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="170"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="177"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="29"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="32"/>
+ <source>Folder name</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="153"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="243"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="254"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="274"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="281"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="291"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="298"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="307"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="312"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="102"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="112"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="20"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="47"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="64"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="81"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="137"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="148"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="168"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="175"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="182"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="87"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="97"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <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="62"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="89"/>
+ <location filename="../../folderExistsDialog.ui" line="140"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="106"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="200"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="211"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="218"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="225"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="232"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="239"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="29"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="85"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="95"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui" line="23"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="33"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="214"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="43"/>
+ <location filename="../../options.ui" line="198"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="56"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="66"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="74"/>
+ <location filename="../../options.ui" line="95"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="79"/>
+ <location filename="../../options.ui" line="105"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="100"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="110"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="118"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="255"/>
+ <source>Rsync (only in copy mode)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="87"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="128"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="144"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="154"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="171"/>
+ <source>Do checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="181"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="234"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="241"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="191"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="219"/>
+ <location filename="../../scanFileOrFolder.cpp" line="283"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="229"/>
+ <location filename="../../scanFileOrFolder.cpp" line="293"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="327"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="329"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/tr/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/tr/translation.ts
new file mode 100644
index 0000000..338cb72
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/Languages/tr/translation.ts
@@ -0,0 +1,806 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="28"/>
+ <location filename="../../AvancedQFile.cpp" line="59"/>
+ <location filename="../../AvancedQFile.cpp" line="90"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="42"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="73"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Factory</name>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</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="95"/>
+ <source>All string need match</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="108"/>
+ <source>The regex is valid</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string match with the regex</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 filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1192"/>
+ <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="1199"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1215"/>
+ <source>Problem at the reading, or file size is null</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1222"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1231"/>
+ <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="1240"/>
+ <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="1246"/>
+ <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="1293"/>
+ <source>Some error have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1299"/>
+ <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="62"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="154"/>
+ <location filename="../../ReadThread.cpp" line="316"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="193"/>
+ <location filename="../../ReadThread.cpp" line="373"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="61"/>
+ <location filename="../../RmPath.cpp" line="75"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RmPath.cpp" line="85"/>
+ <source>Unable to remove the file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="312"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="322"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="627"/>
+ <source>The checksums not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="443"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="481"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="260"/>
+ <location filename="../../copyEngine.cpp" line="278"/>
+ <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="289"/>
+ <location filename="../../copyEngine.cpp" line="307"/>
+ <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="521"/>
+ <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error on 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="56"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="73"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="90"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="136"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="156"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="163"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="170"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="177"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="29"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="32"/>
+ <source>Folder name</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="153"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="243"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="254"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="274"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="281"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="291"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="298"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="307"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="312"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="102"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="112"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="20"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="47"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="64"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="81"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="137"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="148"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="168"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="175"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="182"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="87"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="97"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <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="62"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="89"/>
+ <location filename="../../folderExistsDialog.ui" line="140"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="106"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="200"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="211"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="218"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="225"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="232"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="239"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="29"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="85"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="95"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui" line="23"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="33"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="214"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="43"/>
+ <location filename="../../options.ui" line="198"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="56"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="66"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="74"/>
+ <location filename="../../options.ui" line="95"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="79"/>
+ <location filename="../../options.ui" line="105"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="100"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="110"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="118"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="255"/>
+ <source>Rsync (only in copy mode)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="87"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="128"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="144"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="154"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="171"/>
+ <source>Do checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="181"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="234"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="241"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="191"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="219"/>
+ <location filename="../../scanFileOrFolder.cpp" line="283"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="229"/>
+ <location filename="../../scanFileOrFolder.cpp" line="293"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="327"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="329"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/Languages/zh/translation.ts b/plugins-alternative/CopyEngine/Rsync/Languages/zh/translation.ts
new file mode 100644
index 0000000..9c2e5d6
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/Languages/zh/translation.ts
@@ -0,0 +1,806 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="28"/>
+ <location filename="../../AvancedQFile.cpp" line="59"/>
+ <location filename="../../AvancedQFile.cpp" line="90"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="42"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="73"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Factory</name>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../factory.cpp" line="369"/>
+ <location filename="../../factory.cpp" line="406"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</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>All string need match</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>
+ <message>
+ <location filename="../../FilterRules.ui" line="125"/>
+ <source>The test string match with the regex</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 filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="93"/>
+ <source>Inclusion filter</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.ui" line="105"/>
+ <source>None = Include all</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="92"/>
+ <location filename="../../Filters.cpp" line="130"/>
+ <source>Raw text</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="95"/>
+ <location filename="../../Filters.cpp" line="133"/>
+ <source>Simplified regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="98"/>
+ <location filename="../../Filters.cpp" line="136"/>
+ <source>Perl&apos;s regex</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="106"/>
+ <location filename="../../Filters.cpp" line="144"/>
+ <source>Only on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="109"/>
+ <location filename="../../Filters.cpp" line="147"/>
+ <source>Only on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../Filters.cpp" line="115"/>
+ <location filename="../../Filters.cpp" line="153"/>
+ <location filename="../../Filters.cpp" line="215"/>
+ <location filename="../../Filters.cpp" line="254"/>
+ <source>Full match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListThread</name>
+ <message>
+ <location filename="../../ListThread.cpp" line="1192"/>
+ <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="1199"/>
+ <source>Unable to save the transfer list: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1215"/>
+ <source>Problem at the reading, or file size is null</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1222"/>
+ <source>Wrong header: &quot;%1&quot;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1231"/>
+ <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="1240"/>
+ <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="1246"/>
+ <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="1293"/>
+ <source>Some error have been found during the line parsing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ListThread.cpp" line="1299"/>
+ <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="62"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="154"/>
+ <location filename="../../ReadThread.cpp" line="316"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../ReadThread.cpp" line="193"/>
+ <location filename="../../ReadThread.cpp" line="373"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RenamingRules</name>
+ <message>
+ <location filename="../../RenamingRules.ui" line="14"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="26"/>
+ <source>First renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="32"/>
+ <source>%name% - copy</source>
+ <extracomment>%name% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="39"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment> should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="49"/>
+ <source>Second renaming</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="55"/>
+ <source>%name% - copy (%number%)</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.ui" line="62"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>%name%, %number% should not be translated</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="39"/>
+ <location filename="../../RenamingRules.cpp" line="62"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RenamingRules.cpp" line="43"/>
+ <location filename="../../RenamingRules.cpp" line="73"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="61"/>
+ <location filename="../../RmPath.cpp" line="75"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../RmPath.cpp" line="85"/>
+ <source>Unable to remove the file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="312"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="322"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../TransferThread.cpp" line="627"/>
+ <source>The checksums not match</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WriteThread</name>
+ <message>
+ <location filename="../../WriteThread.cpp" line="443"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../WriteThread.cpp" line="481"/>
+ <source>File truncated during the read, possible data change</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="260"/>
+ <location filename="../../copyEngine.cpp" line="278"/>
+ <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="289"/>
+ <location filename="../../copyEngine.cpp" line="307"/>
+ <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="521"/>
+ <source>The mode have been forced previously, it&apos;s internal error, please report it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="795"/>
+ <source>Options engine is not loaded, can&apos;t access to the filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="14"/>
+ <source>Error on 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="56"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="73"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="90"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="136"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="156"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="163"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="170"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui" line="177"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="29"/>
+ <source>Error on folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.cpp" line="32"/>
+ <source>Folder name</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="153"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="99"/>
+ <location filename="../../fileExistsDialog.ui" line="170"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="116"/>
+ <location filename="../../fileExistsDialog.ui" line="187"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="243"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="254"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="274"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="281"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="291"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="298"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="307"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui" line="312"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="102"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="112"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="14"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="20"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="47"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="64"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="81"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="137"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="148"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="168"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="175"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui" line="182"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="87"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="97"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="14"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <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="62"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="89"/>
+ <location filename="../../folderExistsDialog.ui" line="140"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="106"/>
+ <location filename="../../folderExistsDialog.ui" line="150"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="200"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="211"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="218"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="225"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="232"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui" line="239"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="29"/>
+ <source>Folder already exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="85"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="95"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui" line="23"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="33"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="128"/>
+ <source>Checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="144"/>
+ <source>Only after error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="154"/>
+ <source>Ignore if impossible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="171"/>
+ <source>Do checksum</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="181"/>
+ <source>Enable OS buffer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="191"/>
+ <source>OS buffer only if smaller than</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="214"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="234"/>
+ <source>Filters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="241"/>
+ <source>Renaming rules</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="255"/>
+ <source>Rsync (only in copy mode)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="43"/>
+ <location filename="../../options.ui" line="198"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="56"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="66"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="74"/>
+ <location filename="../../options.ui" line="95"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="79"/>
+ <location filename="../../options.ui" line="105"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="100"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="110"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="118"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui" line="87"/>
+ <source>When folder collision</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="219"/>
+ <location filename="../../scanFileOrFolder.cpp" line="283"/>
+ <source>%1 - copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="229"/>
+ <location filename="../../scanFileOrFolder.cpp" line="293"/>
+ <source>%1 - copy (%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="327"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="329"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/CopyEngine/Rsync/ListThread.cpp b/plugins-alternative/CopyEngine/Rsync/ListThread.cpp
new file mode 100755
index 0000000..e49cea5
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/ListThread.cpp
@@ -0,0 +1,1720 @@
+#include "ListThread.h"
+
+ListThread::ListThread(FacilityInterface * facilityInterface)
+{
+ qRegisterMetaType<DebugLevel>("DebugLevel");
+ qRegisterMetaType<ItemOfCopyList>("ItemOfCopyList");
+ qRegisterMetaType<QFileInfo>("QFileInfo");
+ qRegisterMetaType<CopyMode>("CopyMode");
+ qRegisterMetaType<QList<Filters_rules> >("QList<Filters_rules>");
+ qRegisterMetaType<TransferStat>("TransferStat");
+
+ moveToThread(this);
+ start(HighPriority);
+ this->facilityInterface = facilityInterface;
+ putInPause = false;
+ sourceDrive = "";
+ sourceDriveMultiple = false;
+ destinationDrive = "";
+ destinationDriveMultiple = false;
+ stopIt = false;
+ bytesToTransfer = 0;
+ bytesTransfered = 0;
+ idIncrementNumber = 1;
+ actualRealByteTransfered = 0;
+ preOperationNumber = 0;
+ numberOfTranferRuning = 0;
+ numberOfTransferIntoToDoList = 0;
+ numberOfInodeOperation = 0;
+ maxSpeed = 0;
+ doRightTransfer = false;
+ rsync = false;
+ keepDate = false;
+ blockSize = 1024;
+ osBufferLimit = 512;
+ alwaysDoThisActionForFileExists = FileExists_NotSet;
+ doChecksum = false;
+ checksumIgnoreIfImpossible = true;
+ checksumOnlyOnError = true;
+ osBuffer = false;
+ osBufferLimited = false;
+ forcedMode = false;
+
+ #if ! defined (Q_CC_GNU)
+ ui->keepDate->setEnabled(false);
+ ui->keepDate->setToolTip("Not supported with this compiler");
+ #endif
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ connect(&timerUpdateDebugDialog,SIGNAL(timeout()),this,SLOT(timedUpdateDebugDialog()));
+ timerUpdateDebugDialog.start(ULTRACOPIER_PLUGIN_DEBUG_WINDOW_TIMER);
+ #endif
+ connect(this, SIGNAL(tryCancel()), this,SLOT(cancel()), Qt::QueuedConnection);
+ connect(this, SIGNAL(askNewTransferThread()), this,SLOT(createTransferThread()), Qt::QueuedConnection);
+ connect(&mkPathQueue, SIGNAL(firstFolderFinish()), this,SLOT(mkPathFirstFolderFinish()), Qt::QueuedConnection);
+ connect(&rmPathQueue, SIGNAL(firstFolderFinish()), this,SLOT(rmPathFirstFolderFinish()), Qt::QueuedConnection);
+ connect(&mkPathQueue, SIGNAL(errorOnFolder(QFileInfo,QString)), this,SIGNAL(mkPathErrorOnFolder(QFileInfo,QString)), Qt::QueuedConnection);
+ connect(&rmPathQueue, SIGNAL(errorOnFolder(QFileInfo,QString)), this,SIGNAL(rmPathErrorOnFolder(QFileInfo,QString)), Qt::QueuedConnection);
+ connect(this, SIGNAL(send_syncTransferList()), this,SLOT(syncTransferList_internal()), Qt::QueuedConnection);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ connect(&mkPathQueue, SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), Qt::QueuedConnection);
+ connect(&rmPathQueue, SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), Qt::QueuedConnection);
+ #endif // ULTRACOPIER_PLUGIN_DEBUG
+
+ emit askNewTransferThread();
+ mkpathTransfer.release();
+}
+
+ListThread::~ListThread()
+{
+ emit tryCancel();
+ waitCancel.acquire();
+ quit();
+ wait();
+}
+
+//transfer is finished
+void ListThread::transferInodeIsClosed()
+{
+ numberOfInodeOperation--;
+ temp_transfer_thread=qobject_cast<TransferThread *>(QObject::sender());
+ if(temp_transfer_thread==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("transfer thread not located!"));
+ return;
+ }
+ isFound=false;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ int countLocalParse=0;
+ #endif
+ if(temp_transfer_thread->getStat()!=TransferStat_Idle)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("transfer thread not idle!"));
+ return;
+ }
+ int_for_internal_loop=0;
+ loop_size=actionToDoListTransfer.size();
+ while(int_for_internal_loop<loop_size)
+ {
+ if(actionToDoListTransfer.at(int_for_internal_loop).id==temp_transfer_thread->transferId)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("[%1] have finish, put at idle; for id: %2").arg(int_for_internal_loop).arg(temp_transfer_thread->transferId));
+ returnActionOnCopyList newAction;
+ newAction.type=RemoveItem;
+ newAction.addAction.id=temp_transfer_thread->transferId;
+ newAction.userAction.position=int_for_internal_loop;
+ actionDone << newAction;
+ /// \todo check if item is at the right thread
+ actionToDoListTransfer.removeAt(int_for_internal_loop);
+ if(actionToDoListTransfer.size()==0 && actionToDoListInode.size()==0 && actionToDoListInode_afterTheTransfer.size()==0)
+ updateTheStatus();
+
+ temp_transfer_thread->transferId=0;
+ temp_transfer_thread->transferSize=0;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ countLocalParse++;
+ #endif
+ isFound=true;
+ //emit newActionOnList();
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"numberOfTranferRuning: "+QString::number(numberOfTranferRuning));
+ if(actionToDoListTransfer.size()==0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"numberOfTranferRuning==0");
+ actionToDoListInode << actionToDoListInode_afterTheTransfer;
+ actionToDoListInode_afterTheTransfer.clear();
+ doNewActions_inode_manipulation();
+ }
+ break;
+ }
+ int_for_internal_loop++;
+ }
+ if(!isFound)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("unable to found item into the todo list, id: %1, index: %2").arg(temp_transfer_thread->transferId).arg(int_for_loop));
+ temp_transfer_thread->transferId=0;
+ temp_transfer_thread->transferSize=0;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("countLocalParse: %1, actionToDoList.size(): %2").arg(countLocalParse).arg(actionToDoListTransfer.size()));
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ if(countLocalParse!=1)
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("countLocalParse != 1"));
+ #endif
+ doNewActions_inode_manipulation();
+}
+
+//transfer is finished
+void ListThread::transferIsFinished()
+{
+ temp_transfer_thread=qobject_cast<TransferThread *>(QObject::sender());
+ if(temp_transfer_thread==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("transfer thread not located!"));
+ return;
+ }
+
+ //add the current size of file, to general size because it's finish
+ copiedSize=temp_transfer_thread->copiedSize();
+ if(copiedSize>(qint64)temp_transfer_thread->transferSize)
+ {
+ oversize=copiedSize-temp_transfer_thread->transferSize;
+ bytesToTransfer+=oversize;
+ bytesTransfered+=oversize;
+ }
+ bytesTransfered+=temp_transfer_thread->transferSize;
+
+// emit newTransferStop(temp_transfer_thread->transferId);
+ numberOfTranferRuning--;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start transferIsFinished(), numberOfTranferRuning: "+QString::number(numberOfTranferRuning));
+ doNewActions_start_transfer();
+}
+
+/** \brief put the current file at bottom in case of error
+\note ONLY IN CASE OF ERROR */
+void ListThread::transferPutAtBottom()
+{
+ TransferThread *transfer=qobject_cast<TransferThread *>(QObject::sender());
+ if(transfer==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("transfer thread not located!"));
+ return;
+ }
+ transfer->skip();
+ bool isFound=false;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ int countLocalParse=0;
+ #endif
+ int indexAction=0;
+ while(indexAction<actionToDoListTransfer.size())
+ {
+ if(actionToDoListTransfer.at(indexAction).id==transfer->transferId)
+ {
+ //push for interface at the end
+ returnActionOnCopyList newAction;
+ newAction.type=MoveItem;
+ newAction.addAction.id=transfer->transferId;
+ newAction.userAction.position=actionToDoListTransfer.size()-1;
+ actionDone << newAction;
+ //do the wait stat
+ actionToDoListTransfer[indexAction].isRunning=false;
+ //move at the end
+ actionToDoListTransfer.move(indexAction,actionToDoListTransfer.size()-1);
+ //reset the thread list stat
+ transfer->transferId=0;
+ transfer->transferSize=0;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ countLocalParse++;
+ #endif
+ isFound=true;
+ break;
+ }
+ indexAction++;
+ }
+ if(!isFound)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("unable to found item into the todo list, id: %1, index: %2").arg(transfer->transferId));
+ transfer->transferId=0;
+ transfer->transferSize=0;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("countLocalParse: %1").arg(countLocalParse));
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ if(countLocalParse!=1)
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("countLocalParse != 1"));
+ #endif
+}
+
+//set the copy info and options before runing
+void ListThread::setRightTransfer(const bool doRightTransfer)
+{
+ this->doRightTransfer=doRightTransfer;
+ int index=0;
+ loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->setRightTransfer(doRightTransfer);
+ index++;
+ }
+}
+
+//set keep date
+void ListThread::setKeepDate(const bool keepDate)
+{
+ this->keepDate=keepDate;
+ int index=0;
+ loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->setKeepDate(keepDate);
+ index++;
+ }
+}
+
+//set block size in KB
+void ListThread::setBlockSize(const int blockSize)
+{
+ this->blockSize=blockSize;
+ int index=0;
+ loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->setBlockSize(blockSize);
+ index++;
+ }
+}
+
+//set auto start
+void ListThread::setAutoStart(const bool autoStart)
+{
+ this->autoStart=autoStart;
+}
+
+/// \brief set rsync
+void ListThread::setRsync(const bool rsync)
+{
+ this->rsync=rsync;
+ int index=0;
+ loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->setRsync(rsync);
+ index++;
+ }
+ for(int i=0;i<scanFileOrFolderThreadsPool.size();i++)
+ scanFileOrFolderThreadsPool.at(i)->setRsync(rsync);
+}
+
+//set check destination folder
+void ListThread::setCheckDestinationFolderExists(const bool checkDestinationFolderExists)
+{
+ this->checkDestinationFolderExists=checkDestinationFolderExists;
+ for(int i=0;i<scanFileOrFolderThreadsPool.size();i++)
+ scanFileOrFolderThreadsPool.at(i)->setCheckDestinationFolderExists(checkDestinationFolderExists && alwaysDoThisActionForFolderExists!=FolderExists_Merge);
+}
+
+void ListThread::fileTransfer(const QFileInfo &sourceFileInfo,const QFileInfo &destinationFileInfo,const CopyMode &mode)
+{
+ addToTransfer(sourceFileInfo,destinationFileInfo,mode);
+}
+
+// -> add thread safe, by Qt::BlockingQueuedConnection
+bool ListThread::haveSameSource(QStringList sources)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ if(sourceDriveMultiple)
+ return false;
+ if(sourceDrive.isEmpty())
+ return true;
+ int index=0;
+ while(index<sources.size())
+ {
+// if(threadOfTheTransfer.getDrive(sources.at(index))!=sourceDrive)
+// return false;
+ index++;
+ }
+ return true;
+}
+
+// -> add thread safe, by Qt::BlockingQueuedConnection
+bool ListThread::haveSameDestination(QString destination)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ if(destinationDriveMultiple)
+ return false;
+ if(destinationDrive.isEmpty())
+ return true;
+ int index=0;
+ while(index<destination.size())
+ {
+// if(threadOfTheTransfer.getDrive(destination.at(index))!=destinationDrive)
+// return false;
+ index++;
+ }
+ return true;
+}
+
+scanFileOrFolder * ListThread::newScanThread(CopyMode mode)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start with: "+QString::number(mode));
+
+ //create new thread because is auto-detroyed
+ scanFileOrFolderThreadsPool << new scanFileOrFolder(mode);
+ connect(scanFileOrFolderThreadsPool.last(),SIGNAL(finishedTheListing()), this,SLOT(scanThreadHaveFinish()), Qt::QueuedConnection);
+ connect(scanFileOrFolderThreadsPool.last(),SIGNAL(fileTransfer(QFileInfo,QFileInfo,CopyMode)), this,SLOT(fileTransfer(QFileInfo,QFileInfo,CopyMode)), Qt::QueuedConnection);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ connect(scanFileOrFolderThreadsPool.last(),SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)));
+ #endif
+ connect(scanFileOrFolderThreadsPool.last(),SIGNAL(newFolderListing(QString)), this,SIGNAL(newFolderListing(QString)));
+ connect(scanFileOrFolderThreadsPool.last(),SIGNAL(addToRmPath(QString,int)), this,SLOT(addToRmPath(QString,int)), Qt::QueuedConnection);
+ connect(scanFileOrFolderThreadsPool.last(),SIGNAL(addToRmForRsync(QString)), this,SLOT(addToRmForRsync(QString)), Qt::QueuedConnection);
+ connect(scanFileOrFolderThreadsPool.last(),SIGNAL(addToMkPath(QString)), this,SLOT(addToMkPath(QString)), Qt::QueuedConnection);
+
+ connect(scanFileOrFolderThreadsPool.last(),SIGNAL(errorOnFolder(QFileInfo,QString)), this,SLOT(errorOnFolder(QFileInfo,QString)), Qt::QueuedConnection);
+ connect(scanFileOrFolderThreadsPool.last(),SIGNAL(folderAlreadyExists(QFileInfo,QFileInfo,bool)), this,SLOT(folderAlreadyExists(QFileInfo,QFileInfo,bool)), Qt::QueuedConnection);
+
+ scanFileOrFolderThreadsPool.last()->setRsync(rsync);
+ scanFileOrFolderThreadsPool.last()->setFilters(include,exclude);
+ scanFileOrFolderThreadsPool.last()->setCheckDestinationFolderExists(checkDestinationFolderExists && alwaysDoThisActionForFolderExists!=FolderExists_Merge);
+ if(scanFileOrFolderThreadsPool.size()==1)
+ updateTheStatus();
+ scanFileOrFolderThreadsPool.last()->setRenamingRules(firstRenamingRule,otherRenamingRule);
+ return scanFileOrFolderThreadsPool.last();
+}
+
+void ListThread::scanThreadHaveFinish(bool skipFirstRemove)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"listing thread have finish, skipFirstRemove: "+QString::number(skipFirstRemove));
+ if(!skipFirstRemove)
+ {
+ scanFileOrFolder * senderThread = qobject_cast<scanFileOrFolder *>(QObject::sender());
+ if(senderThread==NULL)
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"sender pointer null (plugin copy engine)");
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start the next thread, scanFileOrFolderThreadsPool.size(): "+QString::number(scanFileOrFolderThreadsPool.size()));
+ delete senderThread;
+ scanFileOrFolderThreadsPool.removeOne(senderThread);
+ if(scanFileOrFolderThreadsPool.size()==0)
+ updateTheStatus();
+ }
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start the next thread, scanFileOrFolderThreadsPool.size(): "+QString::number(scanFileOrFolderThreadsPool.size()));
+ if(scanFileOrFolderThreadsPool.size()>0)
+ {
+ //then start the next listing threads
+ if(scanFileOrFolderThreadsPool.first()->isFinished())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"Start listing thread");
+ scanFileOrFolderThreadsPool.first()->start();
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"The listing thread is already running");
+ }
+ else
+ {
+ if(autoStart)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"Auto start the copy");
+ startGeneralTransfer();
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"Put the copy engine in pause");
+ putInPause=true;
+ emit isInPause(true);
+ }
+ }
+}
+
+void ListThread::startGeneralTransfer()
+{
+ doNewActions_inode_manipulation();
+}
+
+// -> add thread safe, by Qt::BlockingQueuedConnection
+bool ListThread::newCopy(QStringList sources,QString destination)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+sources.join(";")+", destination: "+destination);
+ scanFileOrFolder * scanFileOrFolderThread = newScanThread(Copy);
+ if(scanFileOrFolderThread==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to get new thread");
+ return false;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start the listing");
+ scanFileOrFolderThread->addToList(sources,destination);
+ scanThreadHaveFinish(true);
+ return true;
+}
+
+// -> add thread safe, by Qt::BlockingQueuedConnection
+bool ListThread::newMove(QStringList sources,QString destination)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ scanFileOrFolder * scanFileOrFolderThread = newScanThread(Move);
+ if(scanFileOrFolderThread==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to get new thread");
+ return false;
+ }
+ scanFileOrFolderThread->addToList(sources,destination);
+ scanThreadHaveFinish(true);
+/* int index=0;
+ while(index<sources.size() && !sourceDriveMultiple)
+ {
+ QString tempDrive=threadOfTheTransfer.getDrive(sources.at(index));
+ if(sourceDrive=="")
+ sourceDrive=tempDrive;
+ if(tempDrive!=sourceDrive)
+ sourceDriveMultiple=true;
+ index++;
+ }*/
+/* QString tempDrive=threadOfTheTransfer.getDrive(destination);
+ if(!destinationDriveMultiple)
+ {
+ if(tempDrive=="")
+ destinationDrive=tempDrive;
+ if(tempDrive!=destinationDrive)
+ destinationDriveMultiple=true;
+ }*/
+ return true;
+}
+
+void ListThread::setDrive(QStringList drives)
+{
+ this->drives=drives;
+ int index=0;
+ loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->setDrive(drives);
+ index++;
+ }
+}
+
+void ListThread::setCollisionAction(FileExistsAction alwaysDoThisActionForFileExists)
+{
+ this->alwaysDoThisActionForFileExists=alwaysDoThisActionForFileExists;
+ int index=0;
+ loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists);
+ index++;
+ }
+}
+
+/** \brief to sync the transfer list
+ * Used when the interface is changed, useful to minimize the memory size */
+void ListThread::syncTransferList()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ emit send_syncTransferList();
+}
+
+//set the folder local colision
+void ListThread::setFolderColision(FolderExistsAction alwaysDoThisActionForFolderExists)
+{
+ this->alwaysDoThisActionForFolderExists=alwaysDoThisActionForFolderExists;
+}
+
+bool ListThread::getReturnBoolToCopyEngine()
+{
+ return returnBoolToCopyEngine;
+}
+
+QPair<quint64,quint64> ListThread::getReturnPairQuint64ToCopyEngine()
+{
+ return returnPairQuint64ToCopyEngine;
+}
+
+ItemOfCopyList ListThread::getReturnItemOfCopyListToCopyEngine()
+{
+ return returnItemOfCopyListToCopyEngine;
+}
+
+void ListThread::set_doChecksum(bool doChecksum)
+{
+ this->doChecksum=doChecksum;
+ int index=0;
+ loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->set_doChecksum(doChecksum);
+ index++;
+ }
+}
+
+void ListThread::set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible)
+{
+ this->checksumIgnoreIfImpossible=checksumIgnoreIfImpossible;
+ int index=0;
+ loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible);
+ index++;
+ }
+}
+
+void ListThread::set_checksumOnlyOnError(bool checksumOnlyOnError)
+{
+ this->checksumOnlyOnError=checksumOnlyOnError;
+ int index=0;
+ loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->set_checksumOnlyOnError(checksumOnlyOnError);
+ index++;
+ }
+}
+
+void ListThread::set_osBuffer(bool osBuffer)
+{
+ this->osBuffer=osBuffer;
+ int index=0;
+ loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->set_osBuffer(osBuffer);
+ index++;
+ }
+}
+
+void ListThread::set_osBufferLimited(bool osBufferLimited)
+{
+ this->osBufferLimited=osBufferLimited;
+ int index=0;
+ loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->set_osBufferLimited(osBufferLimited);
+ index++;
+ }
+}
+
+void ListThread::realByteTransfered()
+{
+ quint64 totalRealByteTransfered=0;
+ int index=0;
+ loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ totalRealByteTransfered+=transferThreadList.at(index)->realByteTransfered();
+ index++;
+ }
+ emit send_realBytesTransfered(totalRealByteTransfered);
+}
+
+void ListThread::pause()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ if(putInPause)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Seam already in pause!");
+ return;
+ }
+ putInPause=true;
+ int index=0;
+ loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->pause();
+ index++;
+ }
+ emit isInPause(true);
+}
+
+void ListThread::resume()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ if(!putInPause)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Seam already resumed!");
+ return;
+ }
+ putInPause=false;
+ startGeneralTransfer();
+ doNewActions_start_transfer();
+ int index=0;
+ loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->resume();
+ index++;
+ }
+ emit isInPause(false);
+}
+
+void ListThread::skip(const quint64 &id)
+{
+ skipInternal(id);
+// emit newActionOnList();
+}
+
+bool ListThread::skipInternal(const quint64 &id)
+{
+ int index=0;
+ loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ if(transferThreadList.at(index)->transferId==id)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("skip one transfer: %1").arg(id));
+ transferThreadList.at(index)->skip();
+ return true;
+ }
+ index++;
+ }
+ int_for_internal_loop=0;
+ loop_size=actionToDoListTransfer.size();
+ while(int_for_internal_loop<loop_size)
+ {
+ if(actionToDoListTransfer.at(int_for_internal_loop).id==id)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("[%1] remove at not running, for id: %2").arg(int_for_internal_loop).arg(id));
+ returnActionOnCopyList newAction;
+ newAction.type=RemoveItem;
+ newAction.addAction.id=id;
+ newAction.userAction.position=int_for_internal_loop;
+ actionDone << newAction;
+ actionToDoListTransfer.removeAt(int_for_internal_loop);
+ if(actionToDoListTransfer.size()==0 && actionToDoListInode.size()==0 && actionToDoListInode_afterTheTransfer.size()==0)
+ updateTheStatus();
+ return true;
+ }
+ int_for_internal_loop++;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("skip transfer not found: %1").arg(id));
+ return false;
+}
+
+void ListThread::cancel()
+{
+ if(stopIt)
+ {
+ waitCancel.release();
+ return;
+ }
+ stopIt=true;
+ int index=0;
+ loop_size=transferThreadList.size();
+ while(index<loop_size)
+ {
+ transferThreadList.at(index)->stop();
+ delete transferThreadList.at(index);//->deleteLayer();
+ transferThreadList[index]=NULL;
+ index++;
+ }
+ index=0;
+ loop_size=scanFileOrFolderThreadsPool.size();
+ while(index<loop_size)
+ {
+ scanFileOrFolderThreadsPool.at(index)->stop();
+ delete scanFileOrFolderThreadsPool.at(index);//->deleteLayer();
+ scanFileOrFolderThreadsPool[index]=NULL;
+ index++;
+ }
+ quit();
+ waitCancel.release();
+ emit canBeDeleted();
+}
+
+//speed limitation
+qint64 ListThread::getSpeedLimitation()
+{
+ return maxSpeed;
+}
+
+bool ListThread::setSpeedLimitation(const qint64 &speedLimitation)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"maxSpeed: "+QString::number(speedLimitation));
+ maxSpeed=speedLimitation;
+ int_for_loop=0;
+ loop_size=transferThreadList.size();
+ while(int_for_loop<loop_size)
+ {
+ transferThreadList.at(int_for_loop)->setMaxSpeed(speedLimitation/ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER);
+ int_for_loop++;
+ }
+ return true;
+}
+
+void ListThread::updateTheStatus()
+{
+ /*if(threadOfTheTransfer.haveContent())
+ copy=true;*/
+ updateTheStatus_listing=scanFileOrFolderThreadsPool.size()>0;
+ updateTheStatus_copying=actionToDoListTransfer.size()>0 || actionToDoListInode.size()>0 || actionToDoListInode_afterTheTransfer.size()>0;
+ if(updateTheStatus_copying && updateTheStatus_listing)
+ updateTheStatus_action_in_progress=CopyingAndListing;
+ else if(updateTheStatus_listing)
+ updateTheStatus_action_in_progress=Listing;
+ else if(updateTheStatus_copying)
+ updateTheStatus_action_in_progress=Copying;
+ else
+ updateTheStatus_action_in_progress=Idle;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"emit actionInProgess("+QString::number(updateTheStatus_action_in_progress)+")");
+ emit actionInProgess(updateTheStatus_action_in_progress);
+ if(updateTheStatus_action_in_progress==Idle)
+ sendActionDone();
+}
+
+//set data local to the thread
+void ListThread::setAlwaysFileExistsAction(FileExistsAction alwaysDoThisActionForFileExists)
+{
+ this->alwaysDoThisActionForFileExists=alwaysDoThisActionForFileExists;
+ int_for_loop=0;
+ loop_size=transferThreadList.size();
+ while(int_for_loop<loop_size)
+ {
+ transferThreadList.at(int_for_loop)->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists);
+ int_for_loop++;
+ }
+}
+
+//mk path to do
+quint64 ListThread::addToMkPath(const QString& folder)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"folder: "+folder);
+ actionToDoInode temp;
+ temp.type = ActionType_MkPath;
+ temp.id = generateIdNumber();
+ temp.folder.setFile(folder);
+ temp.isRunning = false;
+ actionToDoListInode << temp;
+ return temp.id;
+}
+
+//add rm path to do
+void ListThread::addToRmPath(const QString& folder,const int& inodeToRemove)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"folder: "+folder+",inodeToRemove: "+QString::number(inodeToRemove));
+ actionToDoInode temp;
+ temp.type = ActionType_RmPath;
+ temp.id = generateIdNumber();
+ temp.size = inodeToRemove;
+ temp.folder.setFile(folder);
+ temp.isRunning = false;
+ if(inodeToRemove==0)
+ actionToDoListInode << temp;
+ else
+ actionToDoListInode_afterTheTransfer << temp;
+}
+
+//rsync rm
+void ListThread::addToRmForRsync(const QString& inode)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"inode: "+inode);
+ actionToDoInode temp;
+ temp.type = ActionType_RmSync;
+ temp.id = generateIdNumber();
+ temp.folder.setFile(inode);
+ temp.isRunning = false;
+ actionToDoListInode << temp;
+}
+
+//send action done
+void ListThread::sendActionDone()
+{
+ if(actionDone.size()>0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ emit newActionOnList(actionDone);
+ actionDone.clear();
+ }
+}
+
+//send progression
+void ListThread::sendProgression()
+{
+ if(actionToDoListTransfer.size()==0)
+ return;
+ oversize=0;
+ currentProgression=0;
+ int_for_loop=0;
+ loop_size=transferThreadList.size();
+ while(int_for_loop<loop_size)
+ {
+ temp_transfer_thread=transferThreadList.at(int_for_loop);
+ if(temp_transfer_thread->getStat()==TransferStat_Transfer || temp_transfer_thread->getStat()==TransferStat_Checksum)
+ {
+ copiedSize=temp_transfer_thread->copiedSize();
+
+ //for the general progression
+ currentProgression+=copiedSize;
+
+ //the oversize (when the file is bigger after/during the copy then what was during the listing)
+ if(copiedSize>(qint64)temp_transfer_thread->transferSize)
+ localOverSize=copiedSize-temp_transfer_thread->transferSize;
+ else
+ localOverSize=0;
+
+ //the current size copied
+ totalSize=temp_transfer_thread->transferSize+localOverSize;
+ if(temp_transfer_thread->getStat()==TransferStat_Checksum)
+ tempItem.current=temp_transfer_thread->realByteTransfered();
+ else
+ tempItem.current=copiedSize;
+ tempItem.id=temp_transfer_thread->transferId;
+ tempItem.total=totalSize;
+ progressionList << tempItem;
+
+ //add the oversize to the general progression
+ oversize+=localOverSize;
+ }
+ int_for_loop++;
+ }
+ emit pushFileProgression(progressionList);
+ progressionList.clear();
+ emit pushGeneralProgression(bytesTransfered+currentProgression,bytesToTransfer+oversize);
+ realByteTransfered();
+}
+
+//send the progression, after full reset of the interface (then all is empty)
+void ListThread::syncTransferList_internal()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ emit syncReady();
+ actionDone.clear();
+ //do list operation
+ TransferThread *transferThread;
+ loop_size=actionToDoListTransfer.size();
+ loop_sub_size=transferThreadList.size();
+ //this loop to have at max ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT*ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT, not ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT*transferThreadList.size()
+ for(int_for_loop=0; int_for_loop<loop_size; ++int_for_loop) {
+ const actionToDoTransfer &item=actionToDoListTransfer.at(int_for_loop);
+ returnActionOnCopyList newAction;
+ newAction.type = PreOperation;
+ newAction.addAction.id = item.id;
+ newAction.addAction.sourceFullPath = item.source.absoluteFilePath();
+ newAction.addAction.sourceFileName = item.source.fileName();
+ newAction.addAction.destinationFullPath = item.destination.absoluteFilePath();
+ newAction.addAction.destinationFileName = item.destination.fileName();
+ newAction.addAction.size = item.size;
+ newAction.addAction.mode = item.mode;
+ actionDone << newAction;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("id: %1, size: %2, name: %3, size2: %4").arg(item.id).arg(item.size).arg(item.source.absoluteFilePath()).arg(newAction.addAction.size));
+ if(item.isRunning)
+ {
+ for(int_for_internal_loop=0; int_for_internal_loop<loop_sub_size; ++int_for_internal_loop) {
+ transferThread=transferThreadList.at(int_for_internal_loop);
+ returnActionOnCopyList newAction;
+ newAction.type = PreOperation;
+ newAction.addAction.id = item.id;
+ newAction.addAction.sourceFullPath = item.source.absoluteFilePath();
+ newAction.addAction.sourceFileName = item.source.fileName();
+ newAction.addAction.destinationFullPath = item.destination.absoluteFilePath();
+ newAction.addAction.destinationFileName = item.destination.fileName();
+ newAction.addAction.size = item.size;
+ newAction.addAction.mode = item.mode;
+ actionDone << newAction;
+ if(transferThread->getStat()!=TransferStat_PreOperation)
+ {
+ returnActionOnCopyList newAction;
+ switch(transferThread->getStat())
+ {
+ case TransferStat_Transfer:
+ newAction.type=Transfer;
+ break;
+ case TransferStat_PostTransfer:
+ newAction.type=PostOperation;
+ break;
+ default:
+ break;
+ }
+ newAction.addAction.id = item.id;
+ actionDone << newAction;
+ }
+ }
+ }
+ }
+}
+
+//add file transfer to do
+quint64 ListThread::addToTransfer(const QFileInfo& source,const QFileInfo& destination,const CopyMode& mode)
+{
+ //add to transfer list
+ numberOfTransferIntoToDoList++;
+ bytesToTransfer+= source.size();
+ actionToDoTransfer temp;
+ temp.id = generateIdNumber();
+ temp.size = source.size();
+ temp.source = source;
+ temp.destination= destination;
+ temp.mode = mode;
+ temp.isRunning = false;
+ actionToDoListTransfer << temp;
+ //push the new transfer to interface
+ returnActionOnCopyList newAction;
+ newAction.type = AddingItem;
+ newAction.addAction.id = temp.id;
+ newAction.addAction.sourceFullPath = source.absoluteFilePath();
+ newAction.addAction.sourceFileName = source.fileName();
+ newAction.addAction.destinationFullPath = destination.absoluteFilePath();
+ newAction.addAction.destinationFileName = destination.fileName();
+ newAction.addAction.size = temp.size;
+ newAction.addAction.mode = mode;
+ actionDone << newAction;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("source: %1, destination: %2, add entry: %3, size: %4, size2: %5").arg(source.absoluteFilePath()).arg(destination.absoluteFilePath()).arg(temp.id).arg(temp.size).arg(newAction.addAction.size));
+ return temp.id;
+}
+
+//generate id number
+quint64 ListThread::generateIdNumber()
+{
+ idIncrementNumber++;
+ if(idIncrementNumber>(((quint64)1024*1024)*1024*1024*2))
+ idIncrementNumber=0;
+ return idIncrementNumber;
+}
+
+//warning the first entry is accessible will copy
+void ListThread::removeItems(const QList<int> &ids)
+{
+ for(int i=0;i<ids.size();i++)
+ skipInternal(ids.at(i));
+// emit newActionOnList();
+}
+
+//put on top
+void ListThread::moveItemsOnTop(QList<int> ids)
+{
+ if(actionToDoListTransfer.size()<=1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"list size is empty");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ //do list operation
+ int indexToMove=0;
+ loop_size=actionToDoListTransfer.size();
+ for (int i=0; i<loop_size; ++i) {
+ if(ids.contains(actionToDoListTransfer.at(i).id))
+ {
+ ids.removeOne(actionToDoListTransfer.at(i).id);
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("move item ")+QString::number(i)+" to "+QString::number(indexToMove));
+ returnActionOnCopyList newAction;
+ newAction.type=MoveItem;
+ newAction.addAction.id=actionToDoListTransfer.at(i).id;
+ newAction.userAction.moveAt=indexToMove;
+ newAction.userAction.position=i;
+ actionDone << newAction;
+ actionToDoListTransfer.move(i,indexToMove);
+ indexToMove++;
+ if(ids.size()==0)
+ {
+ //emit newActionOnList();
+ return;
+ }
+ }
+ }
+// emit newActionOnList();
+}
+
+//move up
+void ListThread::moveItemsUp(QList<int> ids)
+{
+ if(actionToDoListTransfer.size()<=1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"list size is empty");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ //do list operation
+ int lastGoodPositionExtern=0;
+ int lastGoodPositionReal=0;
+ bool haveGoodPosition=false;
+ bool haveChanged=false;
+ loop_size=actionToDoListTransfer.size();
+ for (int i=0; i<loop_size; ++i) {
+ if(ids.contains(actionToDoListTransfer.at(i).id))
+ {
+ if(haveGoodPosition)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("move item ")+QString::number(i)+" to "+QString::number(i-1));
+ returnActionOnCopyList newAction;
+ newAction.type=MoveItem;
+ newAction.addAction.id=actionToDoListTransfer.at(i).id;
+ newAction.userAction.moveAt=lastGoodPositionExtern;
+ newAction.userAction.position=i;
+ actionDone << newAction;
+ actionToDoListTransfer.swap(i,lastGoodPositionReal);
+ haveChanged=true;
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Try move up false, item ")+QString::number(i));
+ ids.removeOne(actionToDoListTransfer.at(i).id);
+ if(ids.size()==0)
+ {
+/* if(haveChanged)
+ emit newActionOnList();*/
+ return;
+ }
+ }
+ else
+ {
+ lastGoodPositionExtern++;
+ lastGoodPositionReal=i;
+ haveGoodPosition=true;
+ }
+ }
+ //emit newActionOnList();
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop");
+}
+
+//move down
+void ListThread::moveItemsDown(QList<int> ids)
+{
+ if(actionToDoListTransfer.size()<=1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"list size is empty");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ //do list operation
+ int lastGoodPositionExtern=numberOfTransferIntoToDoList;
+ int lastGoodPositionReal=0;
+ bool haveGoodPosition=false;
+ bool haveChanged=false;
+ for (int i=actionToDoListTransfer.size()-1; i>=0; --i) {
+ if(ids.contains(actionToDoListTransfer.at(i).id))
+ {
+ if(haveGoodPosition)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("move item ")+QString::number(i)+" to "+QString::number(i+1));
+ returnActionOnCopyList newAction;
+ newAction.type=MoveItem;
+ newAction.addAction.id=actionToDoListTransfer.at(i).id;
+ newAction.userAction.moveAt=lastGoodPositionReal;
+ newAction.userAction.position=i;
+ actionDone << newAction;
+ actionToDoListTransfer.swap(i,lastGoodPositionReal);
+ haveChanged=true;
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Try move up false, item ")+QString::number(i));
+ }
+ ids.removeOne(actionToDoListTransfer.at(i).id);
+ if(ids.size()==0)
+ {
+/* if(haveChanged)
+ emit newActionOnList();*/
+ return;
+ }
+ }
+ else
+ {
+ lastGoodPositionExtern--;
+ lastGoodPositionReal=i;
+ haveGoodPosition=true;
+ }
+ }
+ //emit newActionOnList();
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop");
+}
+
+//put on bottom
+void ListThread::moveItemsOnBottom(QList<int> ids)
+{
+ if(actionToDoListTransfer.size()<=1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"list size is empty");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ //do list operation
+ int lastGoodPositionExtern=numberOfTransferIntoToDoList;
+ int lastGoodPositionReal=actionToDoListTransfer.size()-1;
+ for (int i=lastGoodPositionReal; i>=0; --i) {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Check action on item ")+QString::number(i));
+ if(ids.contains(actionToDoListTransfer.at(i).id))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("move item ")+QString::number(i)+" to "+QString::number(lastGoodPositionReal));
+ ids.removeOne(actionToDoListTransfer.at(i).id);
+ returnActionOnCopyList newAction;
+ newAction.type=MoveItem;
+ newAction.addAction.id=actionToDoListTransfer.at(i).id;
+ newAction.userAction.moveAt=lastGoodPositionExtern;
+ newAction.userAction.position=i;
+ actionDone << newAction;
+ actionToDoListTransfer.move(i,lastGoodPositionReal);
+ lastGoodPositionReal--;
+ lastGoodPositionExtern--;
+ if(ids.size()==0)
+ {
+// emit newActionOnList();
+ return;
+ }
+ }
+ }
+// emit newActionOnList();
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop");
+}
+
+/** \brief give the forced mode, to export/import transfer list */
+void ListThread::forceMode(const CopyMode &mode)
+{
+ if(mode==Copy)
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Force mode to copy"));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Force mode to move"));
+ this->mode=mode;
+ forcedMode=true;
+}
+
+void ListThread::exportTransferList(const QString &fileName)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ QFile transferFile(fileName);
+ if(transferFile.open(QIODevice::WriteOnly|QIODevice::Truncate))
+ {
+ transferFile.write(QString("Ultracopier-0.3;Transfer-list;").toUtf8());
+ if(!forcedMode)
+ transferFile.write(QString("Transfer;").toUtf8());
+ else
+ {
+ if(mode==Copy)
+ transferFile.write(QString("Copy;").toUtf8());
+ else
+ transferFile.write(QString("Move;").toUtf8());
+ }
+ transferFile.write(QString("Ultracopier-0.3\n").toUtf8());
+ bool haveError=false;
+ int size=actionToDoListTransfer.size();
+ for (int index=0;index<size;++index) {
+ if(actionToDoListTransfer.at(index).mode==Copy)
+ {
+ if(!forcedMode || mode==Copy)
+ {
+ if(forcedMode)
+ transferFile.write(QString("%1;%2\n").arg(actionToDoListTransfer.at(index).source.absoluteFilePath()).arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()).toUtf8());
+ else
+ transferFile.write(QString("Copy;%1;%2\n").arg(actionToDoListTransfer.at(index).source.absoluteFilePath()).arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()).toUtf8());
+ }
+ else
+ haveError=true;
+ }
+ else if(actionToDoListTransfer.at(index).mode==Move)
+ {
+ if(!forcedMode || mode==Move)
+ {
+ if(forcedMode)
+ transferFile.write(QString("Move;%1;%2\n").arg(actionToDoListTransfer.at(index).source.absoluteFilePath()).arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()).toUtf8());
+ else
+ transferFile.write(QString("%1;%2\n").arg(actionToDoListTransfer.at(index).source.absoluteFilePath()).arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()).toUtf8());
+ }
+ else
+ haveError=true;
+ }
+ }
+ if(haveError)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Unable do to move or copy item into wrong forced mode: %1").arg(transferFile.errorString()));
+ emit errorTransferList(tr("Unable do to move or copy item into wrong forced mode: %1").arg(transferFile.errorString()));
+ }
+ transferFile.close();
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Unable to save the transfer list: %1").arg(transferFile.errorString()));
+ emit errorTransferList(tr("Unable to save the transfer list: %1").arg(transferFile.errorString()));
+ return;
+ }
+}
+
+void ListThread::importTransferList(const QString &fileName)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ QFile transferFile(fileName);
+ if(transferFile.open(QIODevice::ReadOnly))
+ {
+ QString content;
+ QByteArray data=transferFile.readLine(64);
+ if(data.size()<=0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Problem at the reading, or file size is null"));
+ emit errorTransferList(tr("Problem at the reading, or file size is null"));
+ return;
+ }
+ content=QString::fromUtf8(data);
+ if(content!="Ultracopier-0.3;Transfer-list;Transfer;Ultracopier-0.3\n" && content!="Ultracopier-0.3;Transfer-list;Copy;Ultracopier-0.3\n" && content!="Ultracopier-0.3;Transfer-list;Move;Ultracopier-0.3\n")
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Wrong header: \"%1\"").arg(content));
+ emit errorTransferList(tr("Wrong header: \"%1\"").arg(content));
+ return;
+ }
+ bool transferListMixedMode=false;
+ if(content=="Ultracopier-0.3;Transfer-list;Transfer;Ultracopier-0.3\n")
+ {
+ if(forcedMode)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("The transfer list is in mixed mode, but this instance is not in this mode"));
+ emit errorTransferList(tr("The transfer list is in mixed mode, but this instance is not in this mode"));
+ return;
+ }
+ else
+ transferListMixedMode=true;
+ }
+ if(content=="Ultracopier-0.3;Transfer-list;Copy;Ultracopier-0.3\n" && (forcedMode && mode==Move))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("The transfer list is in copy mode, but this instance is not in this mode: forcedMode: %1, mode: %2").arg(forcedMode).arg(mode));
+ emit errorTransferList(tr("The transfer list is in copy mode, but this instance is not in this mode"));
+ return;
+ }
+ if(content=="Ultracopier-0.3;Transfer-list;Move;Ultracopier-0.3\n" && (forcedMode && mode==Copy))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("The transfer list is in move mode, but this instance is not in this mode: forcedMode: %1, mode: %2").arg(forcedMode).arg(mode));
+ emit errorTransferList(tr("The transfer list is in move mode, but this instance is not in this mode"));
+ return;
+ }
+ bool errorFound=false;
+ QRegExp correctLine;
+ if(transferListMixedMode)
+ correctLine=QRegExp("^(Copy|Move);[^;]+;[^;]+\n$");
+ else
+ correctLine=QRegExp("^[^;]+;[^;]+\n$");
+ QStringList args;
+ CopyMode tempMode;
+ do
+ {
+ data=transferFile.readLine(65535*2);
+ if(data.size()>0)
+ {
+ content=QString::fromUtf8(data);
+ //do the import here
+ if(content.contains(correctLine))
+ {
+ content.remove("\n");
+ args=content.split(";");
+ if(forcedMode)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("New data to import in forced mode: %2,%3").arg(args.at(0)).arg(args.at(1)));
+ addToTransfer(QFileInfo(args.at(0)),QFileInfo(args.at(1)),mode);
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("New data to import: %1,%2,%3").arg(args.at(0)).arg(args.at(1)).arg(args.at(2)));
+ if(args.at(0)=="Copy")
+ tempMode=Copy;
+ else
+ tempMode=Move;
+ addToTransfer(QFileInfo(args.at(1)),QFileInfo(args.at(2)),tempMode);
+ }
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Wrong line syntax: %1").arg(content));
+ errorFound=true;
+ }
+ }
+ }
+ while(data.size()>0);
+ transferFile.close();
+ if(errorFound)
+ emit warningTransferList(tr("Some error have been found during the line parsing"));
+// emit newActionOnList();
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Unable to open the transfer list: %1").arg(transferFile.errorString()));
+ emit errorTransferList(tr("Unable to open the transfer list: %1").arg(transferFile.errorString()));
+ return;
+ }
+}
+
+//do new actions
+void ListThread::doNewActions_start_transfer()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("actionToDoListTransfer.size(): %1, numberOfTranferRuning: %2").arg(actionToDoListTransfer.size()).arg(numberOfTranferRuning));
+ if(stopIt || putInPause)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ //lunch the transfer in WaitForTheTransfer
+ int_for_loop=0;
+ loop_size=transferThreadList.size();
+ while(int_for_loop<loop_size && numberOfTranferRuning<ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER)
+ {
+ if(transferThreadList.at(int_for_loop)->getStat()==TransferStat_WaitForTheTransfer)
+ {
+ transferThreadList.at(int_for_loop)->startTheTransfer();
+ numberOfTranferRuning++;
+ }
+ int_for_loop++;
+ }
+ int_for_loop=0;
+ while(int_for_loop<loop_size && numberOfTranferRuning<ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER)
+ {
+ if(transferThreadList.at(int_for_loop)->getStat()==TransferStat_PreOperation)
+ {
+ transferThreadList.at(int_for_loop)->startTheTransfer();
+ numberOfTranferRuning++;
+ }
+ int_for_loop++;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"numberOfTranferRuning: "+QString::number(numberOfTranferRuning));
+}
+
+/** \brief lunch the pre-op or inode op
+ 1) locate the next next item to do into the both list
+ 1a) optimisation posible on the mkpath/rmpath
+ 2) determine what need be lunched
+ 3) lunch it, rerun the 2)
+ */
+void ListThread::doNewActions_inode_manipulation()
+{
+ //ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("actionToDoList.size(): %1").arg(actionToDoList.size()));
+ if(stopIt || putInPause)
+ return;
+ //ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ //lunch the pre-op or inode op
+ int_for_loop=0;
+ int_for_internal_loop=0;
+ number_rm_path_moved=0;
+ int_for_transfer_thread_search=0;
+ actionToDoListTransfer_count=actionToDoListTransfer.count();
+ actionToDoListInode_count=actionToDoListInode.count();
+ loop_sub_size_transfer_thread_search=transferThreadList.size();
+ //search the next transfer action to do
+ while(int_for_loop<actionToDoListTransfer_count)
+ {
+ if(!actionToDoListTransfer[int_for_loop].isRunning)
+ {
+ //search the next inode action to do
+ while(int_for_internal_loop<actionToDoListInode_count)
+ {
+ if(!actionToDoListInode[int_for_internal_loop].isRunning)
+ {
+ if(actionToDoListTransfer[int_for_loop].id<actionToDoListInode[int_for_internal_loop].id)
+ {
+ //do the tranfer action in the next code
+ break;
+ }
+ else
+ {
+ //do the inode action
+ #include "ListThread_InodeAction.cpp"
+ }
+ }
+ int_for_internal_loop++;
+ }
+ actionToDoTransfer& currentActionToDoTransfer=actionToDoListTransfer[int_for_loop];
+ //do the tranfer action
+ while(int_for_transfer_thread_search<loop_sub_size_transfer_thread_search)
+ {
+ /**
+ transferThreadList.at(int_for_transfer_thread_search)->transferId==0) /!\ important!
+ Because the other thread can have call doNewAction before than this thread have the finish event parsed!
+ I this case it lose all data
+ */
+ currentTransferThread=transferThreadList[int_for_transfer_thread_search];
+ if(currentTransferThread->getStat()==TransferStat_Idle && currentTransferThread->transferId==0) // /!\ important!
+ {
+ currentTransferThread->transferId=currentActionToDoTransfer.id;
+ currentTransferThread->transferSize=currentActionToDoTransfer.size;
+ currentTransferThread->setFiles(
+ currentActionToDoTransfer.source.absoluteFilePath(),
+ currentActionToDoTransfer.size,
+ currentActionToDoTransfer.destination.absoluteFilePath(),
+ currentActionToDoTransfer.mode
+ );
+ currentActionToDoTransfer.isRunning=true;
+
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("[%1] id: %2 is idle, use it for %3").arg(int_for_loop).arg(currentTransferThread->transferId).arg(currentActionToDoTransfer.destination.absoluteFilePath()));
+
+ /// \note wrong position? Else write why it's here
+ returnActionOnCopyList newAction;
+ newAction.type = PreOperation;
+ newAction.addAction.id = currentActionToDoTransfer.id;
+ newAction.addAction.sourceFullPath = currentActionToDoTransfer.source.absoluteFilePath();
+ newAction.addAction.sourceFileName = currentActionToDoTransfer.source.fileName();
+ newAction.addAction.destinationFullPath = currentActionToDoTransfer.destination.absoluteFilePath();
+ newAction.addAction.destinationFileName = currentActionToDoTransfer.destination.fileName();
+ newAction.addAction.size = currentActionToDoTransfer.size;
+ newAction.addAction.mode = currentActionToDoTransfer.mode;
+ actionDone << newAction;
+ int_for_transfer_thread_search++;
+ break;
+ }
+ int_for_transfer_thread_search++;
+ }
+ if(int_for_internal_loop==loop_sub_size_transfer_thread_search)
+ {
+ /// \note Can be normal when all thread is not initialized
+ //ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to found free thread to do the transfer");
+ break;
+ }
+ numberOfInodeOperation++;
+ if(numberOfInodeOperation>=ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT)
+ return;
+ }
+ int_for_loop++;
+ }
+ //search the next inode action to do
+ while(int_for_internal_loop<actionToDoListInode_count)
+ {
+ if(!actionToDoListInode[int_for_internal_loop].isRunning)
+ {
+ //do the inode action
+ #include "ListThread_InodeAction.cpp"
+ }
+ int_for_internal_loop++;
+ }
+ //error checking
+ if((actionToDoListTransfer_count+actionToDoListInode_count)>ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("The index have been detected as out of max range: %1>%2").arg(actionToDoListTransfer_count+actionToDoListInode_count).arg(ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT));
+ return;
+ }
+}
+
+//restart transfer if it can
+void ListThread::restartTransferIfItCan()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ TransferThread *transfer=qobject_cast<TransferThread *>(QObject::sender());
+ if(transfer==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("transfer thread not located!"));
+ return;
+ }
+ if(numberOfTranferRuning<ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER && transfer->getStat()==TransferStat_WaitForTheTransfer)
+ {
+ transfer->startTheTransfer();
+ numberOfTranferRuning++;
+ }
+ doNewActions_start_transfer();
+}
+
+/// \brief update the transfer stat
+void ListThread::newTransferStat(TransferStat stat,quint64 id)
+{
+ returnActionOnCopyList newAction;
+ switch(stat)
+ {
+ case TransferStat_Idle:
+ return;
+ break;
+ case TransferStat_PreOperation:
+ return;
+ break;
+ case TransferStat_WaitForTheTransfer:
+ return;
+ break;
+ case TransferStat_Transfer:
+ newAction.type=Transfer;
+ break;
+ case TransferStat_PostTransfer:
+ case TransferStat_PostOperation:
+ newAction.type=PostOperation;
+ break;
+ case TransferStat_Checksum:
+ newAction.type=CustomOperation;
+ break;
+ default:
+ return;
+ break;
+ }
+ newAction.addAction.id = id;
+ actionDone << newAction;
+}
+
+void ListThread::set_osBufferLimit(unsigned int osBufferLimit)
+{
+ this->osBufferLimit=osBufferLimit;
+ int index=0;
+ loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ transferThreadList.at(index)->set_osBufferLimit(osBufferLimit);
+ index++;
+ }
+}
+
+void ListThread::set_setFilters(QList<Filters_rules> include,QList<Filters_rules> exclude)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("include.size(): %1, exclude.size(): %2").arg(include.size()).arg(exclude.size()));
+ this->include=include;
+ this->exclude=exclude;
+ int index=0;
+ while(index<scanFileOrFolderThreadsPool.size())
+ {
+ scanFileOrFolderThreadsPool.at(index)->setFilters(include,exclude);
+ index++;
+ }
+}
+
+void ListThread::set_sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
+{
+ this->firstRenamingRule=firstRenamingRule;
+ this->otherRenamingRule=otherRenamingRule;
+ emit send_sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
+}
+
+void ListThread::mkPathFirstFolderFinish()
+{
+ int_for_loop=0;
+ loop_size=actionToDoListInode.size();
+ while(int_for_loop<loop_size)
+ {
+ if(actionToDoListInode.at(int_for_loop).type==ActionType_MkPath)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("stop mkpath: %1").arg(actionToDoListInode.at(int_for_loop).folder.absoluteFilePath()));
+ actionToDoListInode.removeAt(int_for_loop);
+ if(actionToDoListTransfer.size()==0 && actionToDoListInode.size()==0 && actionToDoListInode_afterTheTransfer.size()==0)
+ updateTheStatus();
+ numberOfInodeOperation--;
+ doNewActions_inode_manipulation();
+ return;
+ }
+ int_for_loop++;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to found item into the todo list");
+}
+
+void ListThread::rmPathFirstFolderFinish()
+{
+ int_for_loop=0;
+ loop_size=actionToDoListInode.size();
+ while(int_for_loop<loop_size)
+ {
+ if(actionToDoListInode.at(int_for_loop).type==ActionType_RmPath || actionToDoListInode.at(int_for_loop).type==ActionType_RmSync)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("stop rmpath: %1").arg(actionToDoListInode.at(int_for_loop).folder.absoluteFilePath()));
+ actionToDoListInode.removeAt(int_for_loop);
+ if(actionToDoListTransfer.size()==0 && actionToDoListInode.size()==0 && actionToDoListInode_afterTheTransfer.size()==0)
+ updateTheStatus();
+ numberOfInodeOperation--;
+ doNewActions_inode_manipulation();
+ return;
+ }
+ int_for_loop++;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to found item into the todo list");
+}
+
+#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+
+void ListThread::timedUpdateDebugDialog()
+{
+ QStringList newList;
+ int index=0;
+ loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ QString stat;
+ switch(transferThreadList.at(index)->getStat())
+ {
+ case TransferStat_Idle:
+ stat="Idle";
+ break;
+ case TransferStat_PreOperation:
+ stat="PreOperation";
+ break;
+ case TransferStat_WaitForTheTransfer:
+ stat="WaitForTheTransfer";
+ break;
+ case TransferStat_Transfer:
+ stat="Transfer";
+ break;
+ case TransferStat_PostOperation:
+ stat="PostOperation";
+ break;
+ case TransferStat_PostTransfer:
+ stat="PostTransfer";
+ break;
+ case TransferStat_Checksum:
+ stat="Checksum";
+ break;
+ default:
+ stat=QString("??? (%1)").arg(transferThreadList.at(index)->getStat());
+ break;
+ }
+ newList << QString("%1) (%3,%4) %2")
+ .arg(index)
+ .arg(stat)
+ .arg(transferThreadList.at(index)->readingLetter())
+ .arg(transferThreadList.at(index)->writingLetter());
+ index++;
+ }
+ QStringList newList2;
+ index=0;
+ loop_size=actionToDoListTransfer.size();
+ while(index<loop_size)
+ {
+ newList2 << QString("%1 %2 %3")
+ .arg(actionToDoListTransfer.at(index).source.absoluteFilePath())
+ .arg(actionToDoListTransfer.at(index).size)
+ .arg(actionToDoListTransfer.at(index).destination.absoluteFilePath());
+ if(index>(actionToDoListTransfer.size()+2))
+ {
+ newList2 << QString("...");
+ break;
+ }
+ index++;
+ }
+ emit updateTheDebugInfo(newList,newList2,numberOfInodeOperation);
+}
+
+#endif
+
+/// \note Can be call without queue because all call will be serialized
+void ListThread::fileAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame)
+{
+ emit send_fileAlreadyExists(source,destination,isSame,qobject_cast<TransferThread *>(sender()));
+}
+
+/// \note Can be call without queue because all call will be serialized
+void ListThread::errorOnFile(const QFileInfo &fileInfo,const QString &errorString)
+{
+ emit send_errorOnFile(fileInfo,errorString,qobject_cast<TransferThread *>(sender()));
+}
+
+/// \note Can be call without queue because all call will be serialized
+void ListThread::folderAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame)
+{
+ emit send_folderAlreadyExists(source,destination,isSame,qobject_cast<scanFileOrFolder *>(sender()));
+}
+
+/// \note Can be call without queue because all call will be serialized
+/// \todo all this part
+void ListThread::errorOnFolder(const QFileInfo &fileInfo,const QString &errorString)
+{
+ emit send_errorOnFolder(fileInfo,errorString,qobject_cast<scanFileOrFolder *>(sender()));
+}
+
+//to run the thread
+void ListThread::run()
+{
+ exec();
+}
+
+/// \to create transfer thread
+void ListThread::createTransferThread()
+{
+ if(stopIt)
+ return;
+ transferThreadList << new TransferThread();
+ TransferThread * last=transferThreadList.last();
+ last->transferId=0;
+ last->transferSize=0;
+ last->setRightTransfer(doRightTransfer);
+ last->setKeepDate(keepDate);
+ last->setBlockSize(blockSize);
+ last->setDrive(drives);
+ last->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists);
+ last->setMaxSpeed(maxSpeed/ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER);
+ last->set_doChecksum(doChecksum);
+ last->set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible);
+ last->set_checksumOnlyOnError(checksumOnlyOnError);
+ last->set_osBuffer(osBuffer);
+ last->set_osBufferLimited(osBufferLimited);
+ last->set_osBufferLimit(osBufferLimit);
+ last->setRsync(rsync);
+
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ connect(last,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), Qt::QueuedConnection);
+ #endif // ULTRACOPIER_PLUGIN_DEBUG
+ connect(last,SIGNAL(errorOnFile(QFileInfo,QString)), this,SLOT(errorOnFile(QFileInfo,QString)), Qt::QueuedConnection);
+ connect(last,SIGNAL(fileAlreadyExists(QFileInfo,QFileInfo,bool)), this,SLOT(fileAlreadyExists(QFileInfo,QFileInfo,bool)), Qt::QueuedConnection);
+ connect(last,SIGNAL(tryPutAtBottom()), this,SLOT(transferPutAtBottom()), Qt::QueuedConnection);
+ connect(last,SIGNAL(readStopped()), this,SLOT(transferIsFinished()), Qt::QueuedConnection);
+ connect(last,SIGNAL(preOperationStopped()), this,SLOT(doNewActions_start_transfer()), Qt::QueuedConnection);
+ connect(last,SIGNAL(postOperationStopped()), this,SLOT(transferInodeIsClosed()), Qt::QueuedConnection);
+ connect(last,SIGNAL(checkIfItCanBeResumed()), this,SLOT(restartTransferIfItCan()), Qt::QueuedConnection);
+ connect(last,SIGNAL(pushStat(TransferStat,quint64)), this,SLOT(newTransferStat(TransferStat,quint64)), Qt::QueuedConnection);
+
+ connect(this,SIGNAL(send_sendNewRenamingRules(QString,QString)), last,SLOT(setRenamingRules(QString,QString)), Qt::QueuedConnection);
+
+ last->start();
+ last->setObjectName(QString("transfer %1").arg(transferThreadList.size()-1));
+ last->setMkpathTransfer(&mkpathTransfer);
+ last->setRenamingRules(firstRenamingRule,otherRenamingRule);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ last->setId(transferThreadList.size()-1);
+ #endif
+ if(transferThreadList.size()>=ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT)
+ return;
+ if(stopIt)
+ return;
+ doNewActions_inode_manipulation();
+ emit askNewTransferThread();
+}
diff --git a/plugins-alternative/CopyEngine/Rsync/ListThread.h b/plugins-alternative/CopyEngine/Rsync/ListThread.h
new file mode 100755
index 0000000..ab4ad64
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/ListThread.h
@@ -0,0 +1,376 @@
+/** \file ListThread.h
+\brief Define the list thread, and management to the action to do
+\author alpha_one_x86
+\version 0.3
+\date 2011 */
+
+#ifndef LISTTHREAD_H
+#define LISTTHREAD_H
+
+#include <QThread>
+#include <QObject>
+#include <QList>
+#include <QStringList>
+#include <QFileInfo>
+#include <QSemaphore>
+#include <QTextStream>
+#include <QFile>
+
+#include "../../../interface/PluginInterface_CopyEngine.h"
+#include "scanFileOrFolder.h"
+#include "TransferThread.h"
+#include "MkPath.h"
+#include "RmPath.h"
+#include "Environment.h"
+
+/// \brief Define the list thread, and management to the action to do
+class ListThread : public QThread
+{
+ Q_OBJECT
+public:
+ explicit ListThread(FacilityInterface * facilityInterface);
+ ~ListThread();
+ //duplication copy detection
+ /** \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(QStringList sources);
+ /** \brief compare the current destination of the copy, with the passed arguments
+ * \param destination the destination to compares with the current destination
+ * \return true if have same destination, else false (or empty) */
+ bool haveSameDestination(QString destination);
+ //external soft like file browser have send copy/move list to do
+ /** \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(QStringList sources,QString destination);
+ /** \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(QStringList sources,QString destination);
+ /** \brief get the speed limitation
+ * < -1 if not able, 0 if disabled */
+ qint64 getSpeedLimitation();
+ /** \brief to set drives detected
+ * specific to this copy engine */
+ void setDrive(QStringList drives);
+ /// \brief to set the collision action
+ void setCollisionAction(FileExistsAction alwaysDoThisActionForFileExists);
+ /** \brief to sync the transfer list
+ * Used when the interface is changed, useful to minimize the memory size */
+ void syncTransferList();
+ /// \brief to store one action to do
+ struct actionToDoTransfer
+ {
+ quint64 id;
+ qint64 size;///< Used to set: used in case of transfer or remainingInode for drop folder
+ QFileInfo source;///< Used to set: source for transfer, folder to create, folder to drop
+ QFileInfo destination;
+ CopyMode mode;
+ bool isRunning;///< store if the action si running
+ //TransferThread * transfer; // -> see transferThreadList
+ };
+ QList<actionToDoTransfer> actionToDoListTransfer;
+ /// \brief get action type
+ enum ActionType
+ {
+ ActionType_MkPath=1,
+ ActionType_RmPath=2,
+ ActionType_RmSync=3
+ };
+ /// \brief to store one action to do
+ struct actionToDoInode
+ {
+ ActionType type;///< \see ActionType
+ quint64 id;
+ qint64 size;///< Used to set: used in case of transfer or remainingInode for drop folder
+ QFileInfo folder;///< Used to set: source for transfer, folder to create, folder to drop
+ bool isRunning;///< store if the action si running
+ };
+ QList<actionToDoInode> actionToDoListInode;
+ QList<actionToDoInode> actionToDoListInode_afterTheTransfer;
+ int numberOfInodeOperation;
+ //dir operation thread queue
+ MkPath mkPathQueue;
+ RmPath rmPathQueue;
+ //to get the return value from copyEngine
+ bool getReturnBoolToCopyEngine();
+ QPair<quint64,quint64> getReturnPairQuint64ToCopyEngine();
+ ItemOfCopyList getReturnItemOfCopyListToCopyEngine();
+
+ 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);
+public slots:
+ //action on the copy
+ /// \brief put the transfer in pause
+ void pause();
+ /// \brief resume the transfer
+ void resume();
+ /** \brief skip one transfer entry
+ * \param id id of the file to remove */
+ void skip(const quint64 &id);
+ /** \brief skip as interanl one transfer entry
+ * \param id id of the file to remove */
+ bool skipInternal(const quint64 &id);
+ /// \brief cancel all the transfer
+ void cancel();
+ //edit the transfer list
+ /** \brief remove the selected item
+ * \param ids ids is the id list of the selected items */
+ void removeItems(const QList<int> &ids);
+ /** \brief move on top of the list the selected item
+ * \param ids ids is the id list of the selected items */
+ void moveItemsOnTop(QList<int> ids);
+ /** \brief move up the list the selected item
+ * \param ids ids is the id list of the selected items */
+ void moveItemsUp(QList<int> ids);
+ /** \brief move down the list the selected item
+ * \param ids ids is the id list of the selected items */
+ void moveItemsDown(QList<int> ids);
+ /** \brief move on bottom of the list the selected item
+ * \param ids ids is the id list of the selected items */
+ void moveItemsOnBottom(QList<int> ids);
+
+ /** \brief give the forced mode, to export/import transfer list */
+ void forceMode(const CopyMode &mode);
+ /// \brief export the transfer list into a file
+ void exportTransferList(const QString &fileName);
+ /// \brief import the transfer list into a file
+ void importTransferList(const QString &fileName);
+
+ /// \brief set the folder local colision
+ void setFolderColision(FolderExistsAction alwaysDoThisActionForFolderExists);
+ /** \brief to set the speed limitation
+ * -1 if not able, 0 if disabled */
+ bool setSpeedLimitation(const qint64 &speedLimitation);
+ /// \brief set the copy info and options before runing
+ 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);
+ /// \brief set auto start
+ void setAutoStart(const bool autoStart);
+ /// \brief set rsync
+ void setRsync(const bool rsync);
+ /// \brief set check destination folder
+ void setCheckDestinationFolderExists(const bool checkDestinationFolderExists);
+ /// \brief set data local to the thread
+ void setAlwaysFileExistsAction(FileExistsAction alwaysDoThisActionForFileExists);
+ /// \brief do new actions, start transfer
+ void doNewActions_start_transfer();
+ /** \brief lunch the pre-op or inode op
+ 1) locate the next next item to do into the both list
+ 1a) optimisation posible on the mkpath/rmpath
+ 2) determine what need be lunched
+ 3) lunch it, rerun the 2)
+ */
+ void doNewActions_inode_manipulation();
+ /// \brief restart transfer if it can
+ void restartTransferIfItCan();
+
+ /// \brief update the transfer stat
+ void newTransferStat(TransferStat stat,quint64 id);
+
+ void set_osBufferLimit(unsigned int osBufferLimit);
+ void set_setFilters(QList<Filters_rules> include,QList<Filters_rules> exclude);
+ void set_sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
+
+ //send action done
+ void sendActionDone();
+ //send progression
+ void sendProgression();
+private:
+ QSemaphore mkpathTransfer;
+ QString sourceDrive;
+ bool sourceDriveMultiple;
+ bool stopIt;
+ QString destinationDrive;
+ bool destinationDriveMultiple;
+ QList<scanFileOrFolder *> scanFileOrFolderThreadsPool;
+ int numberOfTransferIntoToDoList;
+ QList<TransferThread *> transferThreadList;
+ scanFileOrFolder * newScanThread(CopyMode mode);
+ quint64 bytesToTransfer;
+ quint64 bytesTransfered;
+ bool autoStart;
+ bool rsync;
+ bool putInPause;
+ QList<returnActionOnCopyList> actionDone;///< to action to send to the interface
+ quint64 idIncrementNumber;///< to store the last id returned
+ qint64 actualRealByteTransfered;
+ int preOperationNumber;
+ int numberOfTranferRuning;
+ int maxSpeed;///< in KB/s, assume as 0KB/s as default like every where
+ FolderExistsAction alwaysDoThisActionForFolderExists;
+ bool checkDestinationFolderExists;
+ bool doChecksum;
+ bool checksumIgnoreIfImpossible;
+ bool checksumOnlyOnError;
+ bool osBuffer;
+ bool osBufferLimited;
+ unsigned int osBufferLimit;
+ QList<Filters_rules> include,exclude;
+ CopyMode mode;
+ bool forcedMode;
+ QString firstRenamingRule;
+ QString otherRenamingRule;
+
+ //add file transfer to do
+ quint64 addToTransfer(const QFileInfo& source,const QFileInfo& destination,const CopyMode& mode);
+ //generate id number
+ quint64 generateIdNumber();
+ //warning the first entry is accessible will copy
+ bool removeItems(quint64 id);
+ //put on top
+ bool moveOnTopItem(quint64 id);
+ //move up
+ bool moveUpItem(quint64 id);
+ //move down
+ bool moveDownItem(quint64 id);
+ //put on bottom
+ bool moveOnBottomItem(quint64 id);
+ //general transfer
+ void startGeneralTransfer();
+ //debug windows if needed
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ QTimer timerUpdateDebugDialog;
+ #endif
+ FacilityInterface * facilityInterface;
+ //temp variable for not always alocate the memory
+ int int_for_loop,int_for_internal_loop,int_for_transfer_thread_search,loop_size,loop_sub_size,loop_sub_size_transfer_thread_search,number_rm_path_moved;
+ TransferThread *temp_transfer_thread;
+ bool isFound;
+ bool updateTheStatus_listing,updateTheStatus_copying;
+ EngineActionInProgress updateTheStatus_action_in_progress;
+ QSemaphore waitConstructor,waitCancel;
+ int actionToDoListTransfer_count,actionToDoListInode_count;
+ bool doTransfer,doInode;
+ qint64 oversize;//used as temp variable
+ qint64 currentProgression;
+ qint64 copiedSize,totalSize,localOverSize;
+ QList<ProgressionItem> progressionList;
+ TransferThread* currentTransferThread;
+ //memory variable for transfer thread creation
+ bool doRightTransfer;
+ bool keepDate;
+ int blockSize;
+ QStringList drives;
+ FileExistsAction alwaysDoThisActionForFileExists;
+ //to return value to the copyEngine
+ bool returnBoolToCopyEngine;
+ QPair<quint64,quint64> returnPairQuint64ToCopyEngine;
+ QList<ItemOfCopyList> returnListItemOfCopyListToCopyEngine;
+ ItemOfCopyList returnItemOfCopyListToCopyEngine;
+ ProgressionItem tempItem;
+
+ void realByteTransfered();
+private slots:
+ void scanThreadHaveFinish(bool skipFirstRemove=false);
+ void updateTheStatus();
+ void fileTransfer(const QFileInfo &sourceFileInfo,const QFileInfo &destinationFileInfo,const CopyMode &mode);
+ //mkpath event
+ void mkPathFirstFolderFinish();
+ //rmpath event
+ void rmPathFirstFolderFinish();
+ //transfer is finished
+ void transferIsFinished();
+ /** \brief put the current file at bottom in case of error
+ \note ONLY IN CASE OF ERROR */
+ void transferPutAtBottom();
+ //transfer is finished
+ void transferInodeIsClosed();
+ //debug windows if needed
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ void timedUpdateDebugDialog();
+ #endif
+ //dialog message
+ /// \note Can be call without queue because all call will be serialized
+ void fileAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame);
+ /// \note Can be call without queue because all call will be serialized
+ void errorOnFile(const QFileInfo &fileInfo,const QString &errorString);
+ /// \note Can be call without queue because all call will be serialized
+ void folderAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame);
+ /// \note Can be call without queue because all call will be serialized
+ void errorOnFolder(const QFileInfo &fileInfo,const QString &errorString);
+ //to run the thread
+ void run();
+ /// \to create transfer thread
+ void createTransferThread();
+ //mk path to do
+ quint64 addToMkPath(const QString& folder);
+ //add rm path to do
+ void addToRmPath(const QString& folder,const int& inodeToRemove);
+ //rsync rm
+ void addToRmForRsync(const QString& inode);
+ //send the progression, after full reset of the interface (then all is empty)
+ void syncTransferList_internal();
+signals:
+ //send information about the copy
+ void actionInProgess(EngineActionInProgress); //should update interface information on this event
+
+ void newActionOnList(const QList<returnActionOnCopyList> &);///very important, need be temporized to group the modification to do and not flood the interface
+ void syncReady();
+
+ /** \brief to get the progression for a specific file
+ * \param id the id of the transfer, id send during population the transfer list
+ * first = current transfered byte, second = byte to transfer */
+ void pushFileProgression(const QList<ProgressionItem> &progressionList);
+ //get information about the copy
+ /** \brief to get the general progression
+ * first = current transfered byte, second = byte to transfer */
+ void pushGeneralProgression(const quint64 &,const quint64 &);
+
+ void newFolderListing(const QString &path);
+ void newCollisionAction(QString action);
+ void newErrorAction(QString action);
+ void isInPause(bool);
+
+ //when can be deleted
+ void canBeDeleted();
+
+ //send error occurred
+ void error(QString path,quint64 size,QDateTime mtime,QString error);
+ //for the extra logging
+ void rmPath(QString path);
+ void mkPath(QString path);
+ /// \brief To debug source
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
+ #endif
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ void updateTheDebugInfo(QStringList,QStringList,int);
+ #endif
+
+ //other signal
+ /// \note Can be call without queue because all call will be serialized
+ void send_fileAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread);
+ /// \note Can be call without queue because all call will be serialized
+ void send_errorOnFile(QFileInfo fileInfo,QString errorString,TransferThread * thread);
+ /// \note Can be call without queue because all call will be serialized
+ void send_folderAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,scanFileOrFolder * thread);
+ /// \note Can be call without queue because all call will be serialized
+ void send_errorOnFolder(QFileInfo fileInfo,QString errorString,scanFileOrFolder * thread);
+ //send the progression
+ void send_syncTransferList();
+ //mkpath error event
+ void mkPathErrorOnFolder(QFileInfo fileInfo,QString errorString);
+ //rmpath error event
+ void rmPathErrorOnFolder(QFileInfo fileInfo,QString errorString);
+ //to close
+ void tryCancel();
+ //to ask new transfer thread
+ void askNewTransferThread();
+
+ void warningTransferList(QString warning);
+ void errorTransferList(QString error);
+ void send_sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
+ void send_realBytesTransfered(quint64);
+};
+
+#endif // LISTTHREAD_H
diff --git a/plugins-alternative/CopyEngine/Rsync/ListThread_InodeAction.cpp b/plugins-alternative/CopyEngine/Rsync/ListThread_InodeAction.cpp
new file mode 100644
index 0000000..c495f60
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/ListThread_InodeAction.cpp
@@ -0,0 +1,66 @@
+/** \file ListThread_InodeAction.cpp
+\brief To be included into ListThread.cpp, to optimize and prevent code duplication
+\see ListThread.cpp
+\author alpha_one_x86
+\version 0.3
+\date 2011 */
+
+#ifdef LISTTHREAD_H
+
+//do the inode action
+actionToDoInode& currentActionToDoInode=actionToDoListInode[int_for_internal_loop];
+switch(currentActionToDoInode.type)
+{
+case ActionType_MkPath:
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("launch mkpath: %1").arg(currentActionToDoInode.folder.absoluteFilePath()));
+ mkPathQueue.addPath(currentActionToDoInode.folder.absoluteFilePath());
+ currentActionToDoInode.isRunning=true;
+ numberOfInodeOperation++;
+ if(numberOfInodeOperation>=ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT)
+ return;
+break;
+case ActionType_RmSync:
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("launch rm to sync: %1").arg(currentActionToDoInode.folder.absoluteFilePath()));
+ rmPathQueue.addPath(currentActionToDoInode.folder.absoluteFilePath(),true);
+ currentActionToDoInode.isRunning=true;
+ numberOfInodeOperation++;
+ if(numberOfInodeOperation>=ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT)
+ return;
+break;
+case ActionType_RmPath:
+/* What is this code?
+ if((int_for_loop+number_rm_path_moved)>=(loop_size-1))
+ {
+ if(numberOfTranferRuning)
+ break;
+ else
+ currentActionToDoInode.size=0;
+ }*/
+ //then empty (no file), can try remove it
+ if(true)//currentActionToDoInode.size==0
+ {
+ if(numberOfTranferRuning>0)
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("skipped because already inode = 0 and transfer is running: %1").arg(currentActionToDoInode.folder.absoluteFilePath()));
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("launch rmpath: %1").arg(currentActionToDoInode.folder.absoluteFilePath()));
+ rmPathQueue.addPath(currentActionToDoInode.folder.absoluteFilePath(),false);
+ currentActionToDoInode.isRunning=true;
+ numberOfInodeOperation++;
+ if(numberOfInodeOperation>=ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT)
+ return;
+ }
+ else //have not finish all the transfer into it, do it later
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"should never pass here");
+ /*actionToDoListInode.move(int_for_internal_loop,actionToDoListInode_count-1);
+ currentActionToDoInode.id=generateIdNumber();
+ number_rm_path_moved++;
+ currentActionToDoInode.size=0;
+ continue;*/
+ }
+break;
+default:
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Wrong type at inode action"));
+ return;
+}
+
+#endif
diff --git a/plugins-alternative/CopyEngine/Rsync/MkPath.cpp b/plugins-alternative/CopyEngine/Rsync/MkPath.cpp
new file mode 100644
index 0000000..dd71231
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/MkPath.cpp
@@ -0,0 +1,100 @@
+#include "MkPath.h"
+
+MkPath::MkPath()
+{
+ stopIt=false;
+ waitAction=false;
+ setObjectName("MkPath");
+ moveToThread(this);
+ start();
+}
+
+MkPath::~MkPath()
+{
+ stopIt=true;
+ quit();
+ wait();
+}
+
+void MkPath::addPath(const QString &path)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+path);
+ if(stopIt)
+ return;
+ emit internalStartAddPath(path);
+}
+
+void MkPath::skip()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ emit internalStartSkip();
+}
+
+void MkPath::retry()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ emit internalStartRetry();
+}
+
+void MkPath::run()
+{
+ connect(this,SIGNAL(internalStartAddPath(QString)),this,SLOT(internalAddPath(QString)),Qt::QueuedConnection);
+ connect(this,SIGNAL(internalStartDoThisPath()),this,SLOT(internalDoThisPath()),Qt::QueuedConnection);
+ connect(this,SIGNAL(internalStartSkip()),this,SLOT(internalSkip()),Qt::QueuedConnection);
+ connect(this,SIGNAL(internalStartRetry()),this,SLOT(internalRetry()),Qt::QueuedConnection);
+ exec();
+}
+
+void MkPath::internalDoThisPath()
+{
+ if(waitAction || pathList.isEmpty())
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+pathList.first());
+ if(!dir.exists(pathList.first()))
+ if(!dir.mkpath(pathList.first()))
+ {
+ if(!dir.exists(pathList.first()))
+ {
+ if(stopIt)
+ return;
+ waitAction=true;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to remove the folder: "+pathList.first());
+ emit errorOnFolder(pathList.first(),tr("Unable to create the folder"));
+ return;
+ }
+ }
+ pathList.removeFirst();
+ emit firstFolderFinish();
+ checkIfCanDoTheNext();
+}
+
+void MkPath::internalAddPath(const QString &path)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+path);
+ pathList << path;
+ if(!waitAction)
+ checkIfCanDoTheNext();
+}
+
+void MkPath::checkIfCanDoTheNext()
+{
+ if(!waitAction && !stopIt && pathList.size()>0)
+ emit internalStartDoThisPath();
+}
+
+void MkPath::internalSkip()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ waitAction=false;
+ pathList.removeFirst();
+ emit firstFolderFinish();
+ checkIfCanDoTheNext();
+}
+
+void MkPath::internalRetry()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ waitAction=false;
+ checkIfCanDoTheNext();
+}
+
diff --git a/plugins-alternative/CopyEngine/Rsync/MkPath.h b/plugins-alternative/CopyEngine/Rsync/MkPath.h
new file mode 100644
index 0000000..5d00d60
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/MkPath.h
@@ -0,0 +1,56 @@
+/** \file MkPath.h
+\brief Make the path given as queued mkpath
+\author alpha_one_x86
+\version 0.3
+\date 2011 */
+
+#ifndef MKPATH_H
+#define MKPATH_H
+
+#include <QThread>
+#include <QFileInfo>
+#include <QString>
+#include <QSemaphore>
+#include <QStringList>
+#include <QDir>
+
+#include "Environment.h"
+
+/// \brief Make the path given as queued mkpath
+class MkPath : public QThread
+{
+ Q_OBJECT
+public:
+ explicit MkPath();
+ ~MkPath();
+ /// \brief add path to make
+ void addPath(const QString &path);
+signals:
+ void errorOnFolder(const QFileInfo &,const QString &);
+ void firstFolderFinish();
+ void internalStartAddPath(const QString &path);
+ void internalStartDoThisPath();
+ void internalStartSkip();
+ void internalStartRetry();
+ void debugInformation(const DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne);
+public slots:
+ /// \brief skip after creation error
+ void skip();
+ /// \brief retry after creation error
+ void retry();
+private:
+ void run();
+ bool waitAction;
+ bool stopIt;
+ bool skipIt;
+ QStringList pathList;
+ void checkIfCanDoTheNext();
+ QDir dir;
+private slots:
+ void internalDoThisPath();
+ void internalAddPath(const QString &path);
+ void internalSkip();
+ void internalRetry();
+};
+
+#endif // MKPATH_H
diff --git a/plugins-alternative/CopyEngine/Rsync/ReadThread.cpp b/plugins-alternative/CopyEngine/Rsync/ReadThread.cpp
new file mode 100644
index 0000000..3c7bfc1
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/ReadThread.cpp
@@ -0,0 +1,597 @@
+#include "ReadThread.h"
+
+ReadThread::ReadThread()
+{
+ start();
+ moveToThread(this);
+ stopIt=false;
+ putInPause=false;
+ blockSize=1024*1024;
+ setObjectName("read");
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+ isInReadLoop=false;
+ tryStartRead=false;
+ isOpen.release();
+}
+
+ReadThread::~ReadThread()
+{
+ stopIt=true;
+ disconnect(this);
+ waitNewClockForSpeed.release();
+ isOpen.acquire();
+ exit();
+ wait();
+}
+
+void ReadThread::run()
+{
+ connect(this,SIGNAL(internalStartOpen()), this,SLOT(internalOpen()), Qt::QueuedConnection);
+ connect(this,SIGNAL(internalStartReopen()), this,SLOT(internalReopen()), Qt::QueuedConnection);
+ connect(this,SIGNAL(internalStartRead()), this,SLOT(internalRead()), Qt::QueuedConnection);
+ connect(this,SIGNAL(internalStartClose()), this,SLOT(internalClose()), Qt::QueuedConnection);
+ connect(this,SIGNAL(checkIfIsWait()), this,SLOT(isInWait()), Qt::QueuedConnection);
+ connect(this,SIGNAL(internalStartChecksum()), this,SLOT(checkSum()), Qt::QueuedConnection);
+ exec();
+}
+
+void ReadThread::open(const QString &name,const CopyMode &mode)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] open source: "+name);
+ if(file.isOpen())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] previous file is already open: "+file.fileName()+", try open: "+this->name);
+ return;
+ }
+ if(isInReadLoop)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] previous file is already readding: "+file.fileName()+", try open: "+this->name);
+ return;
+ }
+ if(tryStartRead)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] previous file is already try read: "+file.fileName()+", try open: "+this->name);
+ return;
+ }
+ fakeMode=false;
+ this->name=name;
+ this->mode=mode;
+ emit internalStartOpen();
+}
+
+QString ReadThread::errorString()
+{
+ return errorString_internal;
+}
+
+void ReadThread::stop()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stop()");
+ stopIt=true;
+ if(isOpen.available()>0)
+ return;
+ emit internalStartClose();
+}
+
+bool ReadThread::pause()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] try put read thread in pause");
+ putInPause=true;
+ stopIt=true;
+ return isInReadLoop;
+}
+
+void ReadThread::resume()
+{
+ if(putInPause)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
+ putInPause=false;
+ stopIt=false;
+ }
+ else
+ return;
+ if(tryStartRead)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] already in try start");
+ return;
+ }
+ tryStartRead=true;
+ if(isInReadLoop)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] is in read loop");
+ return;
+ }
+ if(!file.isOpen())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] file is not open");
+ return;
+ }
+ emit internalStartRead();
+}
+
+bool ReadThread::seek(qint64 position)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start with: "+QString::number(position));
+ if(position>file.size())
+ return false;
+ return file.seek(position);
+}
+
+qint64 ReadThread::size()
+{
+ return file.size();
+}
+
+void ReadThread::postOperation()
+{
+ emit internalStartClose();
+}
+
+void ReadThread::checkSum()
+{
+ QByteArray blockArray;
+ QCryptographicHash hash(QCryptographicHash::Sha1);
+ isInReadLoop=true;
+ lastGoodPosition=0;
+ seek(0);
+ int sizeReaden=0;
+ do
+ {
+ //read one block
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Read;
+ #endif
+ blockArray=file.read(blockSize);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+
+ if(file.error()!=QFile::NoError)
+ {
+ errorString_internal=tr("Unable to read the source file: ")+file.errorString()+" ("+QString::number(file.error())+")";
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("file.error()!=QFile::NoError: %1, error: %2").arg(QString::number(file.error())).arg(errorString_internal));
+ emit error();
+ isInReadLoop=false;
+ return;
+ }
+ sizeReaden=blockArray.size();
+ if(sizeReaden>0)
+ {
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Checksum;
+ #endif
+ hash.addData(blockArray);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+
+ if(stopIt)
+ break;
+
+ lastGoodPosition+=blockArray.size();
+
+ //wait for limitation speed if stop not query
+ if(maxSpeed>0)
+ {
+ numberOfBlockCopied++;
+ if(numberOfBlockCopied>=MultiForBigSpeed)
+ {
+ numberOfBlockCopied=0;
+ waitNewClockForSpeed.acquire();
+ if(stopIt)
+ break;
+ }
+ }
+ }
+ }
+ while(sizeReaden>0 && !stopIt);
+ if(lastGoodPosition>file.size())
+ {
+ errorString_internal=tr("File truncated during the read, possible data change");
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Source truncated during the read: %1 (%2)").arg(file.errorString()).arg(QString::number(file.error())));
+ emit error();
+ isInReadLoop=false;
+ return;
+ }
+ isInReadLoop=false;
+ if(stopIt)
+ {
+ if(putInPause)
+ emit isInPause();
+ stopIt=false;
+ return;
+ }
+ emit checksumFinish(hash.result());
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stop the read");
+}
+
+bool ReadThread::internalOpen(bool resetLastGoodPosition)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] internalOpen source: "+name);
+ stopIt=false;
+ putInPause=false;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=InodeOperation;
+ #endif
+ if(file.isOpen())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] already open! source: "+name);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+ return false;
+ }
+ file.setFileName(name);
+ QIODevice::OpenMode openMode=QIODevice::ReadOnly;
+ if(mode==Move)
+ openMode=QIODevice::ReadWrite;
+ seekToZero=false;
+ if(file.open(openMode))
+ {
+ size_at_open=file.size();
+ mtime_at_open=QFileInfo(file).lastModified();
+ putInPause=false;
+ if(resetLastGoodPosition)
+ {
+ lastGoodPosition=0;
+ seek(0);
+ emit opened();
+ }
+ else if(!seek(lastGoodPosition))
+ {
+ errorString_internal=file.errorString();
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Unable to seek after open: %1, error: %2").arg(name).arg(errorString_internal));
+ emit error();
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+ return false;
+ }
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+ isOpen.acquire();
+ return true;
+ }
+ else
+ {
+ errorString_internal=file.errorString();
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Unable to open: %1, error: %2").arg(name).arg(errorString_internal));
+ emit error();
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+ return false;
+ }
+}
+
+void ReadThread::internalRead()
+{
+ isInReadLoop=true;
+ tryStartRead=false;
+ if(stopIt)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] stopIt == true, then quit");
+ internalClose();
+ return;
+ }
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=InodeOperation;
+ #endif
+ int sizeReaden=0;
+ if(!file.isOpen())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] is not open!");
+ return;
+ }
+ QByteArray blockArray;
+ //numberOfBlockCopied = 0;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start the copy");
+ emit readIsStarted();
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+ if(stopIt)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] stopIt == true, then quit");
+ internalClose();
+ return;
+ }
+ do
+ {
+ //read one block
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Read;
+ #endif
+ blockArray=file.read(blockSize);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+
+ if(file.error()!=QFile::NoError)
+ {
+ errorString_internal=tr("Unable to read the source file: ")+file.errorString()+" ("+QString::number(file.error())+")";
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("file.error()!=QFile::NoError: %1, error: %2").arg(QString::number(file.error())).arg(errorString_internal));
+ emit error();
+ isInReadLoop=false;
+ return;
+ }
+ sizeReaden=blockArray.size();
+ if(sizeReaden>0)
+ {
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=WaitWritePipe;
+ #endif
+ if(!writeThread->write(blockArray))
+ {
+ if(!stopIt)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] stopped because the write is stopped: "+QString::number(lastGoodPosition));
+ stopIt=true;
+ }
+ }
+
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+
+ if(stopIt)
+ break;
+
+ lastGoodPosition+=blockArray.size();
+
+ //wait for limitation speed if stop not query
+ if(maxSpeed>0)
+ {
+ numberOfBlockCopied++;
+ if(numberOfBlockCopied>=MultiForBigSpeed)
+ {
+ numberOfBlockCopied=0;
+ waitNewClockForSpeed.acquire();
+ if(stopIt)
+ break;
+ }
+ }
+ }
+ /*
+ if(lastGoodPosition>16*1024)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Test error in reading: %1 (%2)").arg(file.errorString()).arg(file.error()));
+ errorString_internal=QString("Test error in reading: %1 (%2)").arg(file.errorString()).arg(file.error());
+ emit error();
+ isInReadLoop=false;
+ return;
+ }
+ */
+ }
+ while(sizeReaden>0 && !stopIt);
+ if(lastGoodPosition>file.size())
+ {
+ errorString_internal=tr("File truncated during the read, possible data change");
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Source truncated during the read: %1 (%2)").arg(file.errorString()).arg(QString::number(file.error())));
+ emit error();
+ isInReadLoop=false;
+ return;
+ }
+ isInReadLoop=false;
+ if(stopIt)
+ {
+ if(putInPause)
+ emit isInPause();
+ stopIt=false;
+ return;
+ }
+ emit readIsStopped();//will product by signal connection writeThread->endIsDetected();
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stop the read");
+}
+
+void ReadThread::startRead()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
+ if(tryStartRead)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] already in try start");
+ return;
+ }
+ if(isInReadLoop)
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] double event dropped");
+ else
+ {
+ tryStartRead=true;
+ emit internalStartRead();
+ }
+}
+
+void ReadThread::internalClose(bool callByTheDestructor)
+{
+ /// \note never send signal here, because it's called by the destructor
+ //ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
+ if(!fakeMode)
+ file.close();
+ if(!callByTheDestructor)
+ emit closed();
+
+ /// \note always the last of this function
+ if(!fakeMode)
+ isOpen.release();
+}
+
+/** \brief set block size
+\param block the new block size in KB
+\return Return true if succes */
+bool ReadThread::setBlockSize(const int blockSize)
+{
+ if(blockSize<1 || blockSize>16384)
+ {
+ this->blockSize=blockSize*1024;
+ //set the new max speed because the timer have changed
+ setMaxSpeed(maxSpeed);
+ return true;
+ }
+ else
+ return false;
+}
+
+/*! \brief Set the max speed
+\param tempMaxSpeed Set the max speed in KB/s, 0 for no limit */
+int ReadThread::setMaxSpeed(const int maxSpeed)
+{
+ if(this->maxSpeed==0 && maxSpeed==0 && waitNewClockForSpeed.available()>0)
+ waitNewClockForSpeed.tryAcquire(waitNewClockForSpeed.available());
+ this->maxSpeed=maxSpeed;
+ if(this->maxSpeed>0)
+ {
+ int NewInterval,newMultiForBigSpeed=0;
+ do
+ {
+ newMultiForBigSpeed++;
+ NewInterval=(blockSize*newMultiForBigSpeed)/(this->maxSpeed);
+ }
+ while (NewInterval<ULTRACOPIER_PLUGIN_MINTIMERINTERVAL);
+ if(NewInterval>ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL)
+ {
+ NewInterval=ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL;
+ newMultiForBigSpeed=1;
+ blockSize=this->maxSpeed*NewInterval;
+ }
+ MultiForBigSpeed=newMultiForBigSpeed;
+ return NewInterval;
+ }
+ else
+ {
+ waitNewClockForSpeed.release();
+ return 0;
+ }
+}
+
+/// \brief For give timer every X ms
+void ReadThread::timeOfTheBlockCopyFinished()
+{
+ if(waitNewClockForSpeed.available()<ULTRACOPIER_PLUGIN_NUMSEMSPEEDMANAGEMENT)
+ waitNewClockForSpeed.release();
+ //why not just use waitNewClockForSpeed.release() ?
+}
+
+/// \brief do the fake open
+void ReadThread::fakeOpen()
+{
+ fakeMode=true;
+ emit opened();
+}
+
+/// \brief do the fake writeIsStarted
+void ReadThread::fakeReadIsStarted()
+{
+ emit readIsStarted();
+}
+
+/// \brief do the fake writeIsStopped
+void ReadThread::fakeReadIsStopped()
+{
+ emit readIsStopped();
+}
+
+/// do the checksum
+void ReadThread::startCheckSum()
+{
+ emit internalStartChecksum();
+}
+
+qint64 ReadThread::getLastGoodPosition()
+{
+ /*if(lastGoodPosition>file.size())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] Bug, the lastGoodPosition is greater than the file size!");
+ return file.size();
+ }
+ else*/
+ return lastGoodPosition;
+}
+
+//reopen after an error
+void ReadThread::reopen()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
+ if(isInReadLoop)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] try reopen where read is not finish");
+ return;
+ }
+ stopIt=true;
+ emit internalStartReopen();
+}
+
+bool ReadThread::internalReopen()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
+ stopIt=false;
+ file.close();
+ if(size_at_open!=file.size() && mtime_at_open!=QFileInfo(file).lastModified())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] source file have changed since the last open, restart all");
+ //fix this function like the close function
+ if(internalOpen(true))
+ {
+ emit resumeAfterErrorByRestartAll();
+ return true;
+ }
+ else
+ return false;
+ }
+ else
+ {
+ //fix this function like the close function
+ if(internalOpen(false))
+ {
+ emit resumeAfterErrorByRestartAtTheLastPosition();
+ return true;
+ }
+ else
+ return false;
+ }
+}
+
+//set the write thread
+void ReadThread::setWriteThread(WriteThread * writeThread)
+{
+ this->writeThread=writeThread;
+}
+
+#ifdef ULTRACOPIER_PLUGIN_DEBUG
+//to set the id
+void ReadThread::setId(int id)
+{
+ this->id=id;
+}
+#endif
+
+void ReadThread::seekToZeroAndWait()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
+ stopIt=true;
+ seekToZero=true;
+ emit checkIfIsWait();
+}
+
+void ReadThread::isInWait()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
+ if(seekToZero)
+ {
+ seekToZero=false;
+ if(file.isOpen())
+ seek(0);
+ else
+ internalOpen(true);
+ emit isSeekToZeroAndWait();
+ }
+}
+
+bool ReadThread::isReading()
+{
+ return isInReadLoop;
+}
+
diff --git a/plugins-alternative/CopyEngine/Rsync/ReadThread.h b/plugins-alternative/CopyEngine/Rsync/ReadThread.h
new file mode 100644
index 0000000..1d1eabc
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/ReadThread.h
@@ -0,0 +1,144 @@
+/** \file ReadThread.h
+\brief Thread changed to open/close and read the source file
+\author alpha_one_x86
+\version 0.3
+\date 2011 */
+
+#ifndef READTHREAD_H
+#define READTHREAD_H
+
+#include <QThread>
+#include <QByteArray>
+#include <QSemaphore>
+#include <QTimer>
+#include <QDateTime>
+#include <QFileInfo>
+#include <QCryptographicHash>
+
+#include "WriteThread.h"
+#include "Environment.h"
+#include "StructEnumDefinition_CopyEngine.h"
+#include "AvancedQFile.h"
+
+/// \brief Thread changed to open/close and read the source file
+class ReadThread : public QThread
+{
+ Q_OBJECT
+public:
+ explicit ReadThread();
+ ~ReadThread();
+protected:
+ void run();
+public:
+ /// \brief open with the name and copy mode
+ void open(const QString &name,const CopyMode &mode);
+ /// \brief return the error string
+ QString errorString();
+ //QByteArray read(qint64 position,qint64 maxSize);
+ /// \brief stop the copy
+ void stop();
+ /// \brief put the copy in pause
+ bool pause();
+ /// \brief resume the copy
+ void resume();
+ /// \brief get the size of the source file
+ qint64 size();
+ /// \brief get the last good position
+ qint64 getLastGoodPosition();
+ /// \brief start the reading of the source file
+ void startRead();
+ /// \brief set the current max speed in KB/s
+ int setMaxSpeed(int maxSpeed);
+ /// \brief set block size in KB
+ bool setBlockSize(const int blockSize);
+ /// \brief reopen after an error
+ void reopen();
+ /// \brief set the write thread
+ void setWriteThread(WriteThread * writeThread);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ /// \brief to set the id
+ void setId(int id);
+ /// \brief stat
+ enum ReadStat
+ {
+ Idle=0,
+ InodeOperation=1,
+ Read=2,
+ WaitWritePipe=3,
+ Checksum=4
+ };
+ ReadStat stat;
+ #endif
+ /// \brief return if it's reading
+ bool isReading();
+ /// \brief executed at regular interval to do a speed throling
+ void timeOfTheBlockCopyFinished();
+ /// \brief do the fake open
+ void fakeOpen();
+ /// \brief do the fake readIsStarted
+ void fakeReadIsStarted();
+ /// \brief do the fake readIsStopped
+ void fakeReadIsStopped();
+ /// do the checksum
+ void startCheckSum();
+public slots:
+ /// \brief to reset the copy, and put at the same state when it just open
+ void seekToZeroAndWait();
+ void postOperation();
+ /// do the checksum
+ void checkSum();
+signals:
+ void error();
+ void isInPause();
+ void opened();
+ void readIsStarted();
+ void readIsStopped();
+ void closed();
+ void isSeekToZeroAndWait();
+ void checkIfIsWait();
+ void resumeAfterErrorByRestartAll();
+ void resumeAfterErrorByRestartAtTheLastPosition();
+ void checksumFinish(const QByteArray&);
+ // internal signals
+ void internalStartOpen();
+ void internalStartChecksum();
+ void internalStartReopen();
+ void internalStartRead();
+ void internalStartClose();
+ /// \brief To debug source
+ void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
+
+private:
+ QString name;
+ QString errorString_internal;
+ AvancedQFile file;
+ volatile bool stopIt;
+ CopyMode mode;
+ qint64 lastGoodPosition;
+ volatile int blockSize;
+ volatile int maxSpeed; ///< The max speed in KB/s, 0 for no limit
+ QSemaphore waitNewClockForSpeed;
+ volatile int numberOfBlockCopied; ///< Multiple for count the number of block copied
+ volatile int multiplicatorForBigSpeed; ///< Multiple for count the number of block needed
+ volatile int MultiForBigSpeed;
+ WriteThread* writeThread;
+ int id;
+ QSemaphore isOpen;
+ volatile bool putInPause;
+ volatile bool isInReadLoop;
+ volatile bool seekToZero;
+ volatile bool tryStartRead;
+ qint64 size_at_open;
+ QDateTime mtime_at_open;
+ bool fakeMode;
+ //internal function
+ bool seek(qint64 position);/// \todo search if is use full
+private slots:
+ bool internalOpen(bool resetLastGoodPosition=true);
+ bool internalReopen();
+ void internalRead();
+ void internalClose(bool callByTheDestructor=false);
+ void isInWait();
+};
+
+#endif // READTHREAD_H
diff --git a/plugins-alternative/CopyEngine/Rsync/RenamingRules.cpp b/plugins-alternative/CopyEngine/Rsync/RenamingRules.cpp
new file mode 100644
index 0000000..a09f66a
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/RenamingRules.cpp
@@ -0,0 +1,85 @@
+#include "RenamingRules.h"
+#include "ui_RenamingRules.h"
+
+#include <QMessageBox>
+
+RenamingRules::RenamingRules(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::RenamingRules)
+{
+ ui->setupUi(this);
+ connectUI();
+ setRenamingRules("","");
+}
+
+RenamingRules::~RenamingRules()
+{
+ delete ui;
+}
+
+void RenamingRules::on_buttonBox_clicked(QAbstractButton *button)
+{
+ if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::RejectRole)
+ reject();
+ if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::ResetRole)
+ {
+ setRenamingRules("","");
+ emit sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
+ }
+}
+
+void RenamingRules::setRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
+{
+ disconnectUI();
+ this->firstRenamingRule=firstRenamingRule;
+ this->otherRenamingRule=otherRenamingRule;
+ if(!firstRenamingRule.isEmpty())
+ ui->firstRenamingRule->setText(firstRenamingRule);
+ else
+ ui->firstRenamingRule->setText(tr("%1 - copy").arg("%name%"));
+ if(!otherRenamingRule.isEmpty())
+ ui->otherRenamingRule->setText(otherRenamingRule);
+ else
+ ui->otherRenamingRule->setText(tr("%1 - copy (%2)").arg("%name%").arg("%number%"));
+ connectUI();
+}
+
+void RenamingRules::connectUI()
+{
+ connect(ui->firstRenamingRule,SIGNAL(editingFinished()),this,SLOT(firstRenamingRule_haveChanged()));
+ connect(ui->otherRenamingRule,SIGNAL(editingFinished()),this,SLOT(otherRenamingRule_haveChanged()));
+}
+
+void RenamingRules::disconnectUI()
+{
+ disconnect(ui->firstRenamingRule,SIGNAL(editingFinished()),this,SLOT(firstRenamingRule_haveChanged()));
+ disconnect(ui->otherRenamingRule,SIGNAL(editingFinished()),this,SLOT(otherRenamingRule_haveChanged()));
+}
+
+void RenamingRules::firstRenamingRule_haveChanged()
+{
+ QString newValue=ui->firstRenamingRule->text();
+ if(newValue==tr("%1 - copy").arg("%name%"))
+ newValue="";
+ if(newValue==firstRenamingRule)
+ return;
+ firstRenamingRule=newValue;
+ emit sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
+}
+
+void RenamingRules::otherRenamingRule_haveChanged()
+{
+ QString newValue=ui->otherRenamingRule->text();
+ if(newValue==tr("%1 - copy (%2)").arg("%name%").arg("%number%"))
+ newValue="";
+ if(newValue==otherRenamingRule)
+ return;
+ otherRenamingRule=newValue;
+ emit sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
+}
+
+void RenamingRules::newLanguageLoaded()
+{
+ ui->retranslateUi(this);
+ setRenamingRules(firstRenamingRule,otherRenamingRule);
+}
diff --git a/plugins-alternative/CopyEngine/Rsync/RenamingRules.h b/plugins-alternative/CopyEngine/Rsync/RenamingRules.h
new file mode 100644
index 0000000..2fd9580
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/RenamingRules.h
@@ -0,0 +1,34 @@
+#ifndef RENAMINGRULES_H
+#define RENAMINGRULES_H
+
+#include <QDialog>
+#include <QAbstractButton>
+
+namespace Ui {
+class RenamingRules;
+}
+
+/** Define rules for renaming */
+class RenamingRules : public QDialog
+{
+ Q_OBJECT
+public:
+ explicit RenamingRules(QWidget *parent = 0);
+ ~RenamingRules();
+ void setRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
+ void newLanguageLoaded();
+private:
+ Ui::RenamingRules *ui;
+ void connectUI();
+ void disconnectUI();
+ QString firstRenamingRule;
+ QString otherRenamingRule;
+private slots:
+ void on_buttonBox_clicked(QAbstractButton *button);
+ void firstRenamingRule_haveChanged();
+ void otherRenamingRule_haveChanged();
+signals:
+ void sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
+};
+
+#endif // RENAMINGRULES_H
diff --git a/plugins-alternative/CopyEngine/Rsync/RenamingRules.ui b/plugins-alternative/CopyEngine/Rsync/RenamingRules.ui
new file mode 100644
index 0000000..9e84f4b
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/RenamingRules.ui
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>RenamingRules</class>
+ <widget class="QDialog" name="RenamingRules">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>303</width>
+ <height>213</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Renaming rules</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <property name="margin">
+ <number>2</number>
+ </property>
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string>First renaming</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QLineEdit" name="firstRenamingRule">
+ <property name="placeholderText">
+ <string extracomment="%name% should not be translated">%name% - copy</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string extracomment=" should not be translated">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox_2">
+ <property name="title">
+ <string>Second renaming</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <widget class="QLineEdit" name="otherRenamingRule">
+ <property name="placeholderText">
+ <string extracomment="%name%, %number% should not be translated">%name% - copy (%number%)</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_4">
+ <property name="text">
+ <string extracomment="%name%, %number% should not be translated">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Variables: &lt;span style=&quot; font-weight:600;&quot;&gt;%name%&lt;/span&gt; for the original file name&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;%number%&lt;/span&gt; for the extra number&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>1</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Close|QDialogButtonBox::RestoreDefaults</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>accepted()</signal>
+ <receiver>RenamingRules</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>248</x>
+ <y>254</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>157</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>rejected()</signal>
+ <receiver>RenamingRules</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>316</x>
+ <y>260</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>286</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/plugins-alternative/CopyEngine/Rsync/RmPath.cpp b/plugins-alternative/CopyEngine/Rsync/RmPath.cpp
new file mode 100644
index 0000000..636b5ba
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/RmPath.cpp
@@ -0,0 +1,179 @@
+#include "RmPath.h"
+
+RmPath::RmPath()
+{
+ stopIt=false;
+ waitAction=false;
+ setObjectName("RmPath");
+ moveToThread(this);
+ start();
+}
+
+RmPath::~RmPath()
+{
+ stopIt=true;
+ quit();
+ wait();
+}
+
+void RmPath::addPath(const QString &path,const bool &toSync)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+path);
+ if(stopIt)
+ return;
+ emit internalStartAddPath(path,toSync);
+}
+
+void RmPath::skip()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ emit internalStartSkip();
+}
+
+void RmPath::retry()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ emit internalStartRetry();
+}
+
+void RmPath::run()
+{
+ connect(this,SIGNAL(internalStartAddPath(QString,bool)),this,SLOT(internalAddPath(QString,bool)),Qt::QueuedConnection);
+ connect(this,SIGNAL(internalStartDoThisPath()),this,SLOT(internalDoThisPath()),Qt::QueuedConnection);
+ connect(this,SIGNAL(internalStartSkip()),this,SLOT(internalSkip()),Qt::QueuedConnection);
+ connect(this,SIGNAL(internalStartRetry()),this,SLOT(internalRetry()),Qt::QueuedConnection);
+ exec();
+}
+
+void RmPath::internalDoThisPath()
+{
+ if(waitAction || pathList.isEmpty())
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+pathList.first());
+ if(!toSyncList.first())
+ {
+ if(!rmpath(pathList.first(),false))
+ {
+ if(stopIt)
+ return;
+ waitAction=true;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to remove the folder: "+pathList.first());
+ emit errorOnFolder(pathList.first(),tr("Unable to remove the folder"));
+ return;
+ }
+ }
+ else
+ {
+ if(QFileInfo(pathList.first()).isDir())
+ {
+ if(!rmpath(pathList.first(),true))
+ {
+ if(stopIt)
+ return;
+ waitAction=true;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to remove the folder: "+pathList.first());
+ emit errorOnFolder(pathList.first(),tr("Unable to remove the folder"));
+ return;
+ }
+ }
+ else if(!rmfile(pathList.first()))
+ {
+ if(stopIt)
+ return;
+ waitAction=true;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to remove the file: "+pathList.first());
+ emit errorOnFolder(pathList.first(),tr("Unable to remove the file"));
+ return;
+ }
+ }
+ pathList.removeFirst();
+ toSyncList.removeFirst();
+ emit firstFolderFinish();
+ checkIfCanDoTheNext();
+}
+
+bool RmPath::rmfile(QString filePath)
+{
+ QFile file(filePath);
+ if(!file.remove())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to remove the file: "+file.fileName()+", error: "+file.errorString());
+ return false;
+ }
+ else
+ return true;
+}
+
+/** remplace QDir::rmpath() because it return false if the folder not exists
+ and seam bug with parent folder */
+bool RmPath::rmpath(const QDir &dir,const bool &toSync)
+{
+ if(!dir.exists())
+ return true;
+ bool allHaveWork=true;
+ QFileInfoList list = dir.entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System,QDir::DirsFirst);
+ for (int i = 0; i < list.size(); ++i)
+ {
+ QFileInfo fileInfo(list.at(i));
+ if(!fileInfo.isDir())
+ {
+ if(toSync)
+ {
+ if(!rmfile(fileInfo.absoluteFilePath()))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to remove a file: "+fileInfo.fileName());
+ allHaveWork=false;
+ }
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"found a file: "+fileInfo.fileName());
+ allHaveWork=false;
+ }
+ }
+ else
+ {
+ //return the fonction for scan the new folder
+ if(!rmpath(dir.absolutePath()+'/'+fileInfo.fileName()+'/',toSync))
+ allHaveWork=false;
+ }
+ }
+ if(!allHaveWork)
+ return false;
+ allHaveWork=dir.rmdir(dir.absolutePath());
+ if(!allHaveWork)
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to remove the folder: "+dir.absolutePath());
+ return allHaveWork;
+}
+
+void RmPath::internalAddPath(const QString &path,const bool &toSync)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+path);
+ pathList << path;
+ toSyncList << toSync;
+ if(!waitAction)
+ checkIfCanDoTheNext();
+}
+
+void RmPath::checkIfCanDoTheNext()
+{
+ if(!waitAction && !stopIt && pathList.size()>0)
+ emit internalStartDoThisPath();
+}
+
+void RmPath::internalSkip()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ waitAction=false;
+ pathList.removeFirst();
+ emit firstFolderFinish();
+ checkIfCanDoTheNext();
+}
+
+void RmPath::internalRetry()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ waitAction=false;
+ checkIfCanDoTheNext();
+}
+
diff --git a/plugins-alternative/CopyEngine/Rsync/RmPath.h b/plugins-alternative/CopyEngine/Rsync/RmPath.h
new file mode 100644
index 0000000..c3cd77b
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/RmPath.h
@@ -0,0 +1,58 @@
+/** \file RmPath.h
+\brief Remove the path given as queued rmpath
+\author alpha_one_x86
+\version 0.3
+\date 2011 */
+
+#ifndef RMPATH_H
+#define RMPATH_H
+
+#include <QThread>
+#include <QFileInfo>
+#include <QString>
+#include <QSemaphore>
+#include <QStringList>
+#include <QDir>
+
+#include "Environment.h"
+
+/// \brief Remove the path given as queued rmpath
+class RmPath : public QThread
+{
+ Q_OBJECT
+public:
+ explicit RmPath();
+ ~RmPath();
+ /// \brief add new path to remove
+ void addPath(const QString &path,const bool &toSync);
+signals:
+ void errorOnFolder(const QFileInfo &,const QString &);
+ void firstFolderFinish();
+ void internalStartAddPath(const QString &path,const bool &toSync);
+ void internalStartDoThisPath();
+ void internalStartSkip();
+ void internalStartRetry();
+ void debugInformation(const DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne);
+public slots:
+ void skip();
+ void retry();
+private:
+ void run();
+ bool waitAction;
+ bool stopIt;
+ bool skipIt;
+ QStringList pathList;
+ QList<bool> toSyncList;
+ void checkIfCanDoTheNext();
+ QDir dir;
+ bool rmpath(const QDir &dir,const bool &toSync);
+ bool rmfile(QString filePath);
+private slots:
+ void internalDoThisPath();
+ void internalAddPath(const QString &path,const bool &toSync);
+ void internalSkip();
+ void internalRetry();
+};
+
+
+#endif // RMPATH_H
diff --git a/plugins-alternative/CopyEngine/Rsync/StructEnumDefinition.h b/plugins-alternative/CopyEngine/Rsync/StructEnumDefinition.h
new file mode 100644
index 0000000..c1758f4
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/StructEnumDefinition.h
@@ -0,0 +1 @@
+#include "../../../StructEnumDefinition.h"
diff --git a/plugins-alternative/CopyEngine/Rsync/StructEnumDefinition_CopyEngine.h b/plugins-alternative/CopyEngine/Rsync/StructEnumDefinition_CopyEngine.h
new file mode 100644
index 0000000..90af91b
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/StructEnumDefinition_CopyEngine.h
@@ -0,0 +1,90 @@
+/** \file StructEnumDefinition_CopyEngine.h
+\brief Define the structure and enumeration used in the copy engine
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#include <QString>
+#include <QRegExp>
+
+#ifndef STRUCTDEF_COPYENGINE_H
+#define STRUCTDEF_COPYENGINE_H
+
+/// \brief Define action if file exists
+enum FileExistsAction
+{
+ FileExists_NotSet,
+ FileExists_Cancel,
+ FileExists_Skip,
+ FileExists_Overwrite,
+ FileExists_OverwriteIfNewer,
+ FileExists_OverwriteIfNotSameModificationDate,
+ FileExists_Rename
+};
+
+/// \brief Define action if file error
+enum FileErrorAction
+{
+ FileError_NotSet,
+ FileError_Cancel,
+ FileError_Skip,
+ FileError_Retry,
+ FileError_PutToEndOfTheList
+};
+
+/// \brief to have the transfer status
+enum TransferStat
+{
+ TransferStat_Idle=0,
+ TransferStat_PreOperation=1,
+ TransferStat_WaitForTheTransfer=2,
+ TransferStat_Transfer=3,
+ TransferStat_Checksum=4,
+ TransferStat_PostTransfer=5,
+ TransferStat_PostOperation=6
+};
+
+/// \brief Define overwrite mode
+/*enum OverwriteMode
+{
+ OverwriteMode_None,
+ OverwriteMode_Overwrite,
+ OverwriteMode_OverwriteIfNewer,
+ OverwriteMode_OverwriteIfNotSameModificationDate
+};*/
+
+/// \brief Define action if file exists
+enum FolderExistsAction
+{
+ FolderExists_NotSet,
+ FolderExists_Cancel,
+ FolderExists_Merge,
+ FolderExists_Skip,
+ FolderExists_Rename
+};
+
+enum SearchType
+{
+ SearchType_rawText,
+ SearchType_simpleRegex,
+ SearchType_perlRegex,
+};
+
+enum ApplyOn
+{
+ ApplyOn_file,
+ ApplyOn_fileAndFolder,
+ ApplyOn_folder,
+};
+
+/** to store into different way the filter rules to be exported */
+struct Filters_rules
+{
+ QString search_text;
+ SearchType search_type;
+ ApplyOn apply_on;
+ bool need_match_all;
+ QRegExp regex;
+};
+
+#endif // STRUCTDEF_COPYENGINE_H
diff --git a/plugins-alternative/CopyEngine/Rsync/TransferThread.cpp b/plugins-alternative/CopyEngine/Rsync/TransferThread.cpp
new file mode 100644
index 0000000..5557a1e
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/TransferThread.cpp
@@ -0,0 +1,1252 @@
+//presume bug linked as multple paralelle inode to resume after "overwrite"
+//then do overwrite node function to not re-set the file name
+
+#include "TransferThread.h"
+
+#ifdef Q_CC_GNU
+//this next header is needed to change file time/date under gcc
+#include <utime.h>
+#include <time.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#endif
+
+#ifndef Q_OS_UNIX
+#include <windows.h>
+#endif
+
+TransferThread::TransferThread()
+{
+ start();
+ moveToThread(this);
+ needSkip = false;
+ transfer_stat = TransferStat_Idle;
+ stopIt = false;
+ fileExistsAction = FileExists_NotSet;
+ alwaysDoFileExistsAction= FileExists_NotSet;
+ readError = false;
+ writeError = false;
+ rsync = false;
+ this->mkpathTransfer = mkpathTransfer;
+ readThread.setWriteThread(&writeThread);
+
+ connect(&clockForTheCopySpeed, SIGNAL(timeout()), this, SLOT(timeOfTheBlockCopyFinished()));
+ maxTime=QDateTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1));
+}
+
+TransferThread::~TransferThread()
+{
+ exit();
+ disconnect(&readThread);
+ disconnect(&writeThread);
+ disconnect(this);
+ wait();
+}
+
+void TransferThread::run()
+{
+ //ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start: "+QString::number((qint64)QThread::currentThreadId()));
+ transfer_stat = TransferStat_Idle;
+ stopIt = false;
+ fileExistsAction = FileExists_NotSet;
+ alwaysDoFileExistsAction= FileExists_NotSet;
+ //the error push
+ connect(&readThread,SIGNAL(error()), this, SLOT(getReadError()), Qt::QueuedConnection);
+ connect(&writeThread,SIGNAL(error()), this, SLOT(getWriteError()), Qt::QueuedConnection);
+ //the thread change operation
+ connect(this,SIGNAL(internalStartPreOperation()), this, SLOT(preOperation()), Qt::QueuedConnection);
+ connect(this,SIGNAL(internalStartPostOperation()), this, SLOT(postOperation()), Qt::QueuedConnection);
+ //the state change operation
+ //connect(&readThread,SIGNAL(readIsStopped()), &readThread, SLOT(postOperation()), Qt::QueuedConnection);//commented to do the checksum
+ connect(&readThread,SIGNAL(opened()), this, SLOT(readIsReady()), Qt::QueuedConnection);
+ connect(&writeThread,SIGNAL(opened()), this, SLOT(writeIsReady()), Qt::QueuedConnection);
+ connect(&readThread,SIGNAL(readIsStopped()), this, SLOT(readIsStopped()), Qt::QueuedConnection);
+ connect(&writeThread,SIGNAL(writeIsStopped()), this, SLOT(writeIsStopped()), Qt::QueuedConnection);
+ connect(&readThread,SIGNAL(readIsStopped()), &writeThread, SLOT(endIsDetected()), Qt::QueuedConnection);
+ //connect(&writeThread,SIGNAL(writeIsStopped()), &writeThread, SLOT(postOperation()), Qt::QueuedConnection);//commented to do the checksum
+ connect(&readThread,SIGNAL(closed()), this, SLOT(readIsClosed()), Qt::QueuedConnection);
+ connect(&writeThread,SIGNAL(closed()), this, SLOT(writeIsClosed()), Qt::QueuedConnection);
+ connect(&writeThread,SIGNAL(reopened()), this, SLOT(writeThreadIsReopened()), Qt::QueuedConnection);
+ connect(&readThread,SIGNAL(checksumFinish(QByteArray)), this, SLOT(readChecksumFinish(QByteArray)), Qt::QueuedConnection);
+ connect(&writeThread,SIGNAL(checksumFinish(QByteArray)),this, SLOT(writeChecksumFinish(QByteArray)), Qt::QueuedConnection);
+ //error management
+ connect(&readThread,SIGNAL(isSeekToZeroAndWait()), this, SLOT(readThreadIsSeekToZeroAndWait()), Qt::QueuedConnection);
+ connect(&readThread,SIGNAL(resumeAfterErrorByRestartAtTheLastPosition()), this, SLOT(readThreadResumeAfterError()), Qt::QueuedConnection);
+ connect(&readThread,SIGNAL(resumeAfterErrorByRestartAll()), &writeThread, SLOT(flushAndSeekToZero()), Qt::QueuedConnection);
+ connect(&writeThread,SIGNAL(flushedAndSeekedToZero()), this, SLOT(readThreadResumeAfterError()), Qt::QueuedConnection);
+ connect(this,SIGNAL(internalTryStartTheTransfer()), this, SLOT(internalStartTheTransfer()), Qt::QueuedConnection);
+
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ connect(&readThread,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),Qt::QueuedConnection);
+ connect(&writeThread,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),Qt::QueuedConnection);
+ #endif
+
+ exec();
+}
+
+TransferStat TransferThread::getStat()
+{
+ return transfer_stat;
+}
+
+void TransferThread::startTheTransfer()
+{
+ emit internalTryStartTheTransfer();
+}
+
+void TransferThread::internalStartTheTransfer()
+{
+ if(transfer_stat==TransferStat_Idle)
+ {
+ if(mode!=Move)
+ {
+ /// \bug can pass here because in case of direct move on same media, it return to idle stat directly
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] can't start transfert at idle");
+ }
+ return;
+ }
+ if(transfer_stat==TransferStat_PostOperation)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] can't start transfert at PostOperation");
+ return;
+ }
+ if(transfer_stat==TransferStat_Transfer)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] can't start transfert at Transfer");
+ return;
+ }
+ if(canStartTransfer)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] canStartTransfer is already set to true");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] check how start the transfer");
+ canStartTransfer=true;
+ if(readIsReadyVariable && writeIsReadyVariable)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start directly the transfer");
+ ifCanStartTransfer();
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start the transfer as delayed");
+}
+
+void TransferThread::setFiles(const QString &source,const qint64 &size,const QString &destination,const CopyMode &mode)
+{
+ if(transfer_stat!=TransferStat_Idle)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] already used, source: "+source+", destination: "+destination);
+ return;
+ }
+ //to prevent multiple file alocation into ListThread::doNewActions_inode_manipulation()
+ transfer_stat = TransferStat_PreOperation;
+ //emit pushStat(stat,transferId);
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start, source: "+source+", destination: "+destination);
+ this->source = source;
+ this->destination = destination;
+ this->mode = mode;
+ this->size = size;
+ fileExistsAction = FileExists_NotSet;
+ canStartTransfer = false;
+ sended_state_preOperationStopped= false;
+ canBeMovedDirectlyVariable = false;
+ fileContentError = false;
+ resetExtraVariable();
+ emit internalStartPreOperation();
+}
+
+void TransferThread::setFileExistsAction(const FileExistsAction &action)
+{
+ if(transfer_stat!=TransferStat_PreOperation)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] already used, source: "+source+", destination: "+destination);
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] action: "+QString::number(action));
+ if(action!=FileExists_Rename)
+ fileExistsAction = action;
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] rename at the wrong part, source: "+source+", destination: "+destination);
+ if(action==FileExists_Skip)
+ {
+ skip();
+ return;
+ }
+ resetExtraVariable();
+ emit internalStartPreOperation();
+}
+
+void TransferThread::setFileRename(const QString &nameForRename)
+{
+ if(transfer_stat!=TransferStat_PreOperation)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] already used, source: "+source+", destination: "+destination);
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] nameForRename: "+nameForRename);
+ destinationInfo.setFile(destination);
+ destination=destinationInfo.absolutePath();
+ destination+=QDir::separator()+nameForRename;
+ destinationInfo.setFile(destination);
+ fileExistsAction = FileExists_NotSet;
+ resetExtraVariable();
+ emit internalStartPreOperation();
+}
+
+void TransferThread::setAlwaysFileExistsAction(const FileExistsAction &action)
+{
+ //ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] action to do always: "+QString::number(action));
+ alwaysDoFileExistsAction=action;
+}
+
+void TransferThread::resetExtraVariable()
+{
+ sended_state_readStopped = false;
+ sended_state_writeStopped = false;
+ writeError = false;
+ readError = false;
+ readIsReadyVariable = false;
+ writeIsReadyVariable = false;
+ readIsFinishVariable = false;
+ writeIsFinishVariable = false;
+ readIsClosedVariable = false;
+ writeIsClosedVariable = false;
+ needSkip = false;
+ retry = false;
+ readIsOpenVariable = false;
+ writeIsOpenVariable = false;
+}
+
+void TransferThread::preOperation()
+{
+ if(transfer_stat!=TransferStat_PreOperation)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] already used, source: "+source+", destination: "+destination);
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
+ needRemove=false;
+ sourceInfo.setFile(source);
+ destinationInfo.setFile(destination);
+ if(isSame())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] is same"+source);
+ return;
+ }
+ if(destinationExists())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] destination exists: "+source);
+ return;
+ }
+ if(canBeMovedDirectly())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] need moved directly: "+source);
+ canBeMovedDirectlyVariable=true;
+ readThread.fakeOpen();
+ writeThread.fakeOpen();
+ return;
+ }
+ tryOpen();
+}
+
+void TransferThread::tryOpen()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start source and destination: "+source+" and "+destination);
+ if(!readIsOpenVariable)
+ {
+ readError=false;
+ readThread.open(source,mode);
+ }
+ if(!writeIsOpenVariable)
+ {
+ writeError=false;
+ writeThread.open(destination,size,osBuffer && (!osBufferLimited || (osBufferLimited && size<osBufferLimit)));
+ }
+}
+
+bool TransferThread::isSame()
+{
+ //check if source and destination is not the same
+ if(sourceInfo==destinationInfo)
+ {
+ emit fileAlreadyExists(sourceInfo,destinationInfo,true);
+ return true;
+ }
+ return false;
+}
+
+bool TransferThread::destinationExists()
+{
+ //check if destination exists
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] overwrite: "+QString::number(fileExistsAction)+", always action: "+QString::number(alwaysDoFileExistsAction));
+ if(alwaysDoFileExistsAction==FileExists_Overwrite || rsync || readError || writeError)
+ return false;
+ if(destinationInfo.exists())
+ {
+ if(fileExistsAction==FileExists_NotSet && alwaysDoFileExistsAction==FileExists_Skip)
+ {
+ transfer_stat=TransferStat_Idle;
+ emit postOperationStopped();
+ return true;
+ }
+ if(alwaysDoFileExistsAction==FileExists_Rename)
+ {
+ QString absolutePath=destinationInfo.absolutePath();
+ QString fileName=destinationInfo.fileName();
+ QString suffix="";
+ QString newFileName;
+ //resolv the suffix
+ if(fileName.contains(QRegExp("^(.*)(\\.[a-z0-9]+)$")))
+ {
+ suffix=fileName;
+ suffix.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\2");
+ fileName.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\1");
+ }
+ //resolv the new name
+ int num=1;
+ do
+ {
+ if(num==1)
+ {
+ if(firstRenamingRule=="")
+ newFileName=tr("%1 - copy").arg(fileName);
+ else
+ {
+ newFileName=firstRenamingRule;
+ newFileName.replace("%name%",fileName);
+ }
+ }
+ else
+ {
+ if(otherRenamingRule=="")
+ newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num);
+ else
+ {
+ newFileName=otherRenamingRule;
+ newFileName.replace("%name%",fileName);
+ newFileName.replace("%number%",QString::number(num));
+ }
+ }
+ destination=absolutePath+QDir::separator()+newFileName+suffix;
+ destinationInfo.setFile(destination);
+ num++;
+ }
+ while(destinationInfo.exists());
+ return false;
+ }
+ if(fileExistsAction==FileExists_OverwriteIfNewer || (fileExistsAction==FileExists_NotSet && alwaysDoFileExistsAction==FileExists_OverwriteIfNewer))
+ {
+ if(destinationInfo.lastModified()<sourceInfo.lastModified())
+ return false;
+ else
+ {
+ transfer_stat=TransferStat_Idle;
+ emit postOperationStopped();
+ return true;
+ }
+ }
+ if(fileExistsAction==FileExists_OverwriteIfNotSameModificationDate || (fileExistsAction==FileExists_NotSet && alwaysDoFileExistsAction==FileExists_OverwriteIfNotSameModificationDate))
+ {
+ if(destinationInfo.lastModified()!=sourceInfo.lastModified())
+ return false;
+ else
+ {
+ transfer_stat=TransferStat_Idle;
+ emit postOperationStopped();
+ return true;
+ }
+ }
+ if(fileExistsAction==FileExists_NotSet)
+ {
+ emit fileAlreadyExists(sourceInfo,destinationInfo,false);
+ return true;
+ }
+ }
+ return false;
+}
+
+void TransferThread::tryMoveDirectly()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start the system move");
+
+ //move if on same mount point
+ QFile sourceFile(sourceInfo.absoluteFilePath());
+ QFile destinationFile(destinationInfo.absoluteFilePath());
+ if(destinationFile.exists() && !destinationFile.remove())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+destinationFile.fileName()+", error: "+destinationFile.errorString());
+ emit errorOnFile(destinationInfo,destinationFile.errorString());
+ return;
+ }
+ QDir dir(destinationInfo.absolutePath());
+ {
+ mkpathTransfer->acquire();
+ if(!dir.exists())
+ dir.mkpath(destinationInfo.absolutePath());
+ mkpathTransfer->release();
+ }
+ if(!sourceFile.rename(destinationFile.fileName()))
+ {
+ if(sourceFile.exists())
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("file not not exists %1: %2, error: %3").arg(sourceFile.fileName()).arg(destinationFile.fileName()).arg(sourceFile.errorString()));
+ else if(!dir.exists())
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("destination folder not exists %1: %2, error: %3").arg(sourceFile.fileName()).arg(destinationFile.fileName()).arg(sourceFile.errorString()));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("unable to do real move %1: %2, error: %3").arg(sourceFile.fileName()).arg(destinationFile.fileName()).arg(sourceFile.errorString()));
+ emit errorOnFile(sourceFile,sourceFile.errorString());
+ return;
+ }
+ readThread.fakeReadIsStarted();
+ writeThread.fakeWriteIsStarted();
+ readThread.fakeReadIsStopped();
+ writeThread.fakeWriteIsStopped();
+}
+
+bool TransferThread::canBeMovedDirectly()
+{
+ //move if on same mount point
+ #if defined (Q_OS_LINUX) || defined (Q_OS_WIN32)
+ if(mode!=Move)
+ return false;
+ if(mountSysPoint.size()==0)
+ return false;
+ if(getDrive(destinationInfo.fileName())==getDrive(sourceInfo.fileName()))
+ return true;
+ #endif
+ return false;
+}
+
+void TransferThread::readIsReady()
+{
+ if(readIsReadyVariable)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] double event dropped");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
+ readIsReadyVariable=true;
+ readIsOpenVariable=true;
+ readIsClosedVariable=false;
+ ifCanStartTransfer();
+}
+
+void TransferThread::ifCanStartTransfer()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] readIsReadyVariable: "+QString::number(readIsReadyVariable)+", writeIsReadyVariable: "+QString::number(writeIsReadyVariable));
+ if(readIsReadyVariable && writeIsReadyVariable)
+ {
+ transfer_stat=TransferStat_WaitForTheTransfer;
+ sended_state_readStopped = false;
+ sended_state_writeStopped = false;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stat=WaitForTheTransfer");
+ if(!sended_state_preOperationStopped)
+ {
+ sended_state_preOperationStopped=true;
+ emit preOperationStopped();
+ }
+ if(canStartTransfer)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stat=Transfer");
+ transfer_stat=TransferStat_Transfer;
+ if(!canBeMovedDirectlyVariable)
+ {
+ needRemove=true;
+ readThread.startRead();
+ }
+ else
+ tryMoveDirectly();
+ emit pushStat(transfer_stat,transferId);
+ }
+ //else
+ //emit pushStat(stat,transferId);
+ }
+}
+
+void TransferThread::writeIsReady()
+{
+ if(writeIsReadyVariable)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] double event dropped");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
+ writeIsReadyVariable=true;
+ writeIsOpenVariable=true;
+ writeIsClosedVariable=false;
+ ifCanStartTransfer();
+}
+
+
+//set the copy info and options before runing
+void TransferThread::setRightTransfer(const bool doRightTransfer)
+{
+ this->doRightTransfer=doRightTransfer;
+}
+
+//set keep date
+void TransferThread::setKeepDate(const bool keepDate)
+{
+ this->keepDate=keepDate;
+}
+
+//set the current max speed in KB/s
+void TransferThread::setMaxSpeed(int maxSpeed)
+{
+ int interval=readThread.setMaxSpeed(maxSpeed);
+ writeThread.setMaxSpeed(maxSpeed);
+ if(maxSpeed>0)
+ {
+ clockForTheCopySpeed.setInterval(interval);
+ if(!clockForTheCopySpeed.isActive())//seam useless !this->isFinished()
+ clockForTheCopySpeed.start();
+ }
+ else
+ {
+ if(clockForTheCopySpeed.isActive())
+ clockForTheCopySpeed.stop();
+ }
+}
+
+//set block size in KB
+bool TransferThread::setBlockSize(const unsigned int blockSize)
+{
+ this->blockSize=blockSize;
+ return readThread.setBlockSize(blockSize) && writeThread.setBlockSize(blockSize);
+}
+
+//pause the copy
+void TransferThread::pause()
+{
+ if(transfer_stat==TransferStat_Idle)
+ return;
+ readThread.pause();
+}
+
+//resume the copy
+void TransferThread::resume()
+{
+ if(transfer_stat==TransferStat_Idle)
+ return;
+ readThread.resume();
+}
+
+//stop the current copy
+void TransferThread::stop()
+{
+ stopIt=true;
+ if(transfer_stat==TransferStat_Idle)
+ return;
+ readThread.stop();
+ writeThread.stop();
+}
+
+void TransferThread::readIsFinish()
+{
+ if(readIsFinishVariable)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] double event dropped");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
+ readIsFinishVariable=true;
+ canStartTransfer=false;
+ //check here if need start checksuming or not
+ real_doChecksum=doChecksum && (!checksumOnlyOnError || fileContentError);
+ if(real_doChecksum)
+ {
+ readIsFinishVariable=false;
+ transfer_stat=TransferStat_Checksum;
+ sourceChecksum=QByteArray();
+ destinationChecksum=QByteArray();
+ readThread.startCheckSum();
+ }
+ else
+ {
+ transfer_stat=TransferStat_PostTransfer;
+ readThread.postOperation();
+ }
+ emit pushStat(transfer_stat,transferId);
+}
+
+void TransferThread::writeIsFinish()
+{
+ if(writeIsFinishVariable)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] double event dropped");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
+ writeIsFinishVariable=true;
+ //check here if need start checksuming or not
+ if(real_doChecksum)
+ {
+ writeIsFinishVariable=false;
+ transfer_stat=TransferStat_Checksum;
+ writeThread.startCheckSum();
+ }
+ else
+ writeThread.postOperation();
+}
+
+void TransferThread::readChecksumFinish(const QByteArray& checksum)
+{
+ sourceChecksum=checksum;
+ compareChecksum();
+}
+
+void TransferThread::writeChecksumFinish(const QByteArray& checksum)
+{
+ destinationChecksum=checksum;
+ compareChecksum();
+}
+
+void TransferThread::compareChecksum()
+{
+ if(sourceChecksum.size()==0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] the checksum of source is missing");
+ return;
+ }
+ if(destinationChecksum.size()==0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] the checksum of destination is missing");
+ return;
+ }
+ if(sourceChecksum==destinationChecksum)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] the checksum match");
+ readThread.postOperation();
+ writeThread.postOperation();
+ transfer_stat=TransferStat_PostTransfer;
+ emit pushStat(transfer_stat,transferId);
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] the checksum not match");
+ //emit error here, and wait to resume
+ emit errorOnFile(destinationInfo,tr("The checksums not match"));
+ }
+}
+
+void TransferThread::readIsClosed()
+{
+ if(readIsClosedVariable)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] double event dropped");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
+ readIsClosedVariable=true;
+ checkIfAllIsClosed();
+}
+
+void TransferThread::writeIsClosed()
+{
+ if(writeIsClosedVariable)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] double event dropped");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
+ writeIsClosedVariable=true;
+ checkIfAllIsClosed();
+}
+
+bool TransferThread::checkIfAllIsClosed()
+{
+ if((readError || writeError) && !needSkip)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] resolve error before progress");
+ return false;
+ }
+ if((!readIsReadyVariable || readIsClosedVariable) && (!writeIsReadyVariable || writeIsClosedVariable))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] emit internalStartPostOperation() to do the real post operation");
+ transfer_stat=TransferStat_PostOperation;
+ //emit pushStat(stat,transferId);
+ emit internalStartPostOperation();
+ return true;
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] "+QString("wait self close: readIsReadyVariable: %1, readIsClosedVariable: %2, writeIsReadyVariable: %3, writeIsClosedVariable: %4")
+ .arg(readIsReadyVariable)
+ .arg(readIsClosedVariable)
+ .arg(writeIsReadyVariable)
+ .arg(writeIsClosedVariable)
+ );
+ return false;
+ }
+}
+
+/// \todo found way to retry that's
+/// \todo the rights copy
+void TransferThread::postOperation()
+{
+ if(transfer_stat!=TransferStat_PostOperation)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] need be in transfer, source: "+source+", destination: "+destination+", stat:"+QString::number(transfer_stat));
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
+ //all except closing
+ if((readError || writeError) && !needSkip)//normally useless by checkIfAllIsFinish()
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] resume after error");
+ return;
+ }
+
+ if(!needSkip)
+ {
+ if(!doFilePostOperation())
+ return;
+
+ //remove source in moving mode
+ if(mode==Move && !canBeMovedDirectlyVariable)
+ {
+ if(QFile::exists(destination))
+ {
+ QFile sourceFile(source);
+ if(!sourceFile.remove())
+ {
+ emit errorOnFile(sourceInfo,sourceFile.errorString());
+ return;
+ }
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] try remove source but destination not exists!");
+ }
+ }
+ else//do difference skip a file and skip this error case
+ {
+ if(needRemove && QFile::exists(destination))
+ {
+ QFile destinationFile(destination);
+ if(!destinationFile.remove())
+ {
+ //emit errorOnFile(sourceInfo,destinationFile.errorString());
+ //return;
+ }
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] try remove destination but not exists!");
+ }
+ transfer_stat=TransferStat_Idle;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] emit postOperationStopped()");
+ emit postOperationStopped();
+}
+
+bool TransferThread::doFilePostOperation()
+{
+ //do operation needed by copy
+ if(!canBeMovedDirectlyVariable)
+ {
+ //set the time if no write thread used
+ if(keepDate)
+ changeFileDateTime(destination,source);//can't do that's after move because after move the source not exist
+ /*
+ ignore it, because need correct management, mainly with move
+ if(!)
+ {
+ emit errorOnFile(destinationInfo,tr("Unable to change the date"));//destination.errorString()
+ return false;
+ }*/
+ }
+
+ if(stopIt)
+ return false;
+
+ return true;
+}
+
+//////////////////////////////////////////////////////////////////
+/////////////////////// Error management /////////////////////////
+//////////////////////////////////////////////////////////////////
+
+void TransferThread::getWriteError()
+{
+ if(writeError)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] already in write error!");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
+ fileContentError = true;
+ writeError = true;
+ writeIsReadyVariable = false;
+ writeError_source_seeked = false;
+ writeError_destination_reopened = false;
+ emit errorOnFile(destinationInfo,writeThread.errorString());
+}
+
+void TransferThread::getReadError()
+{
+ if(readError)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] already in read error!");
+ return;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
+ fileContentError = true;
+ readError = true;
+ writeIsReadyVariable = false;
+ readIsReadyVariable = false;
+ emit errorOnFile(sourceInfo,readThread.errorString());
+}
+
+//retry after error
+void TransferThread::retryAfterError()
+{
+ //opening error
+ if(transfer_stat==TransferStat_PreOperation)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] is not idle, source: "+source+", destination: "+destination+", stat: "+QString::number(transfer_stat));
+ tryOpen();
+ return;
+ }
+ //data streaming error
+ if(transfer_stat!=TransferStat_PostOperation && transfer_stat!=TransferStat_Transfer && transfer_stat!=TransferStat_Checksum)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] is not idle, source: "+source+", destination: "+destination+", stat: "+QString::number(transfer_stat));
+ return;
+ }
+ if(canBeMovedDirectlyVariable)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] retry the system move");
+ tryMoveDirectly();
+ return;
+ }
+ if(transfer_stat==TransferStat_Checksum)
+ {
+ if(writeError)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start and resume the write error");
+ writeThread.reopen();
+ }
+ else if(readError)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start and resume the read error");
+ readThread.reopen();
+ }
+ else //only checksum difference
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] retry all the transfer");
+ canStartTransfer=true;
+ ifCanStartTransfer();
+ }
+ return;
+ }
+ if(writeError)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start and resume the write error");
+ readThread.seekToZeroAndWait();
+ writeThread.reopen();
+ }
+ else if(readError)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start and resume the read error");
+ readThread.reopen();
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] unknow error resume");
+}
+
+void TransferThread::writeThreadIsReopened()
+{
+ if(writeError_destination_reopened)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] double event dropped");
+ return;
+ }
+ writeError_destination_reopened=true;
+ if(transfer_stat==TransferStat_Checksum)
+ {
+ writeThread.startCheckSum();
+ return;
+ }
+ if(writeError_source_seeked && writeError_destination_reopened)
+ resumeTransferAfterWriteError();
+}
+
+void TransferThread::readThreadIsSeekToZeroAndWait()
+{
+ if(writeError_source_seeked)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] double event dropped");
+ return;
+ }
+ writeError_source_seeked=true;
+ if(writeError_source_seeked && writeError_destination_reopened)
+ resumeTransferAfterWriteError();
+}
+
+void TransferThread::resumeTransferAfterWriteError()
+{
+ writeError=false;
+/********************************
+ if(canStartTransfer)
+ readThread.startRead();
+useless, because the open destination event
+will restart the transfer as normal
+*********************************/
+/*********************************
+if(!canStartTransfer)
+ stat=WaitForTheTransfer;
+useless because already do at open event
+**********************************/
+ //if is in wait
+ if(!canStartTransfer)
+ emit checkIfItCanBeResumed();
+}
+
+void TransferThread::readThreadResumeAfterError()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
+ readError=false;
+ writeIsReady();
+ readIsReady();
+}
+
+//////////////////////////////////////////////////////////////////
+///////////////////////// Normal event ///////////////////////////
+//////////////////////////////////////////////////////////////////
+
+void TransferThread::readIsStopped()
+{
+ if(!sended_state_readStopped)
+ {
+ sended_state_readStopped=true;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] emit readIsStopped()");
+ emit readStopped();
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] drop dual read stopped");
+ readIsFinish();
+}
+
+void TransferThread::writeIsStopped()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
+ if(!sended_state_writeStopped)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] emit writeStopped()");
+ sended_state_writeStopped=true;
+ emit writeStopped();
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] double event dropped");
+ writeIsFinish();
+}
+
+void TransferThread::timeOfTheBlockCopyFinished()
+{
+ readThread.timeOfTheBlockCopyFinished();
+}
+
+//get drive of an file or folder
+QString TransferThread::getDrive(QString fileOrFolder)
+{
+ for (int i = 0; i < mountSysPoint.size(); ++i) {
+ if(fileOrFolder.startsWith(mountSysPoint.at(i)))
+ return mountSysPoint.at(i);
+ }
+ //if unable to locate the right mount point
+ return "";
+}
+
+//set drive list, used in getDrive()
+void TransferThread::setDrive(QStringList drives)
+{
+ mountSysPoint=drives;
+}
+
+//fonction to edit the file date time
+bool TransferThread::changeFileDateTime(const QString &source,const QString &destination)
+{
+ /*
+ if(maxTime>=sourceInfo.lastModified())
+ return;
+ */
+ /** Why not do it with Qt? Because it not support setModificationTime(), and get the time with Qt, that's mean use local time where in C is UTC time */
+ #ifdef Q_OS_UNIX
+ #ifdef Q_OS_LINUX
+ struct stat info;
+ stat(source.toLatin1().data(),&info);
+ time_t ctime=info.st_ctim.tv_sec;
+ time_t actime=info.st_atim.tv_sec;
+ time_t modtime=info.st_mtim.tv_sec;
+ //this function avalaible on unix and mingw
+ utimbuf butime;
+ butime.actime=actime;
+ butime.modtime=modtime;
+ //creation time not exists into unix world
+ Q_UNUSED(ctime)
+ return utime(destination.toLatin1().data(),&butime)==0;
+ #else //mainly for mac
+ QFileInfo fileInfo(destination);
+ time_t ctime=fileInfo.created().toTime_t();
+ time_t actime=fileInfo.lastRead().toTime_t();
+ time_t modtime=fileInfo.lastModified().toTime_t();
+ //this function avalaible on unix and mingw
+ utimbuf butime;
+ butime.actime=actime;
+ butime.modtime=modtime;
+ //creation time not exists into unix world
+ Q_UNUSED(ctime)
+ return utime(destination.toLatin1().data(),&butime)==0;
+ #endif
+ #else
+ #ifdef Q_OS_WIN32
+ #ifdef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY
+ struct __stat64 info;
+ _stat64(source.toLatin1().data(),&info);
+ time_t ctime=info.st_ctime;
+ time_t actime=info.st_atime;
+ time_t modtime=info.st_mtime;
+ //this function avalaible on unix and mingw
+ utimbuf butime;
+ butime.actime=actime;
+ butime.modtime=modtime;
+ //creation time not exists into unix world
+ Q_UNUSED(ctime)
+ return utime(destination.toLatin1().data(),&butime)==0;
+ #else
+ wchar_t filePath[65535];
+ source.toWCharArray(filePath);
+ HANDLE hFileSouce = CreateFile(filePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
+ destination.toWCharArray(filePath);
+ HANDLE hFileDestination = CreateFile(filePath, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
+ if(hFileSouce == INVALID_HANDLE_VALUE)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] open failed to read");
+ return false;
+ }
+ if(hFileDestination == INVALID_HANDLE_VALUE)
+ {
+ CloseHandle(hFileSouce);
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] open failed to write");
+ return false;
+ }
+ FILETIME ftCreate, ftAccess, ftWrite;
+ if(!GetFileTime(hFileSouce, &ftCreate, &ftAccess, &ftWrite))
+ {
+ CloseHandle(hFileSouce);
+ CloseHandle(hFileDestination);
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] unable to get the file time");
+ return false;
+ }
+ if(!SetFileTime(hFileDestination, &ftCreate, &ftAccess, &ftWrite))
+ {
+ CloseHandle(hFileSouce);
+ CloseHandle(hFileDestination);
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] unable to set the file time");
+ return false;
+ }
+ CloseHandle(hFileSouce);
+ CloseHandle(hFileDestination);
+ return true;
+ #endif
+ #else
+ return false;
+ #endif
+ #endif
+ return false;
+}
+
+//skip the copy
+void TransferThread::skip()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start with stat: "+QString::number(transfer_stat));
+ switch(transfer_stat)
+ {
+ case TransferStat_PreOperation:
+ case TransferStat_WaitForTheTransfer:
+ needSkip=true;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] case WaitForTheTransfer or PreOperation, readIsReadyVariable: "+QString::number(readIsReadyVariable)+", readIsClosedVariable: "+QString::number(readIsClosedVariable)+", writeIsReadyVariable: "+QString::number(writeIsReadyVariable)+", writeIsClosedVariable: "+QString::number(writeIsClosedVariable));
+ //check if all is source and destination is closed
+ if(!checkIfAllIsClosed())
+ {
+ if(readIsReadyVariable && !readIsClosedVariable)
+ readThread.stop();
+ if(writeIsReadyVariable && !writeIsClosedVariable)
+ writeThread.stop();
+ }
+ break;
+ case TransferStat_Transfer:
+ needSkip=true;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] case Transfer, readIsReadyVariable: "+QString::number(readIsReadyVariable)+", readIsClosedVariable: "+QString::number(readIsClosedVariable)+", writeIsReadyVariable: "+QString::number(writeIsReadyVariable)+", writeIsClosedVariable: "+QString::number(writeIsClosedVariable));
+ if(!checkIfAllIsClosed())
+ {
+ if(readIsReadyVariable && !readIsClosedVariable)
+ readThread.stop();
+ if(writeIsReadyVariable && !writeIsClosedVariable)
+ writeThread.stop();
+ }
+ break;
+ case TransferStat_Checksum:
+ needSkip=true;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] case Transfer, readIsReadyVariable: "+QString::number(readIsReadyVariable)+", readIsClosedVariable: "+QString::number(readIsClosedVariable)+", writeIsReadyVariable: "+QString::number(writeIsReadyVariable)+", writeIsClosedVariable: "+QString::number(writeIsClosedVariable));
+ if(!checkIfAllIsClosed())
+ {
+ if(readIsReadyVariable && !readIsClosedVariable)
+ readThread.stop();
+ if(writeIsReadyVariable && !writeIsClosedVariable)
+ writeThread.stop();
+ }
+ break;
+ case TransferStat_PostOperation:
+ //do nothing because here is closing...
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] is already in post op");
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] can skip in this state!");
+ return;
+ }
+}
+
+//return info about the copied size
+qint64 TransferThread::copiedSize()
+{
+ switch(transfer_stat)
+ {
+ case TransferStat_Transfer:
+ case TransferStat_PostOperation:
+ return readThread.getLastGoodPosition();
+ case TransferStat_Checksum:
+ return transferSize;
+ default:
+ return 0;
+ }
+}
+
+//retry after error
+void TransferThread::putAtBottom()
+{
+ emit tryPutAtBottom();
+}
+
+/// \brief set rsync
+void TransferThread::setRsync(const bool rsync)
+{
+ this->rsync=rsync;
+}
+
+void TransferThread::set_osBufferLimit(unsigned int osBufferLimit)
+{
+ this->osBufferLimit=osBufferLimit;
+}
+
+#ifdef ULTRACOPIER_PLUGIN_DEBUG
+//to set the id
+void TransferThread::setId(int id)
+{
+ this->id=id;
+ readThread.setId(id);
+ writeThread.setId(id);
+}
+
+QChar TransferThread::readingLetter()
+{
+ switch(readThread.stat)
+ {
+ case ReadThread::Idle:
+ return '_';
+ break;
+ case ReadThread::InodeOperation:
+ return 'I';
+ break;
+ case ReadThread::Read:
+ return 'R';
+ break;
+ case ReadThread::WaitWritePipe:
+ return 'W';
+ break;
+ case ReadThread::Checksum:
+ return 'S';
+ break;
+ default:
+ return '?';
+ }
+}
+
+QChar TransferThread::writingLetter()
+{
+ switch(writeThread.stat)
+ {
+ case WriteThread::Idle:
+ return '_';
+ break;
+ case WriteThread::InodeOperation:
+ return 'I';
+ break;
+ case WriteThread::Write:
+ return 'W';
+ break;
+ case WriteThread::Close:
+ return 'C';
+ break;
+ case WriteThread::Read:
+ return 'R';
+ break;
+ case WriteThread::Checksum:
+ return 'S';
+ break;
+ default:
+ return '?';
+ }
+}
+
+#endif
+
+void TransferThread::setMkpathTransfer(QSemaphore *mkpathTransfer)
+{
+ this->mkpathTransfer=mkpathTransfer;
+ writeThread.setMkpathTransfer(mkpathTransfer);
+}
+
+void TransferThread::set_doChecksum(bool doChecksum)
+{
+ this->doChecksum=doChecksum;
+}
+
+void TransferThread::set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible)
+{
+ this->checksumIgnoreIfImpossible=checksumIgnoreIfImpossible;
+}
+
+void TransferThread::set_checksumOnlyOnError(bool checksumOnlyOnError)
+{
+ this->checksumOnlyOnError=checksumOnlyOnError;
+}
+
+void TransferThread::set_osBuffer(bool osBuffer)
+{
+ this->osBuffer=osBuffer;
+}
+
+void TransferThread::set_osBufferLimited(bool osBufferLimited)
+{
+ this->osBufferLimited=osBufferLimited;
+}
+
+//not copied size, because that's count to the checksum, ...
+quint64 TransferThread::realByteTransfered()
+{
+ switch(transfer_stat)
+ {
+ case TransferStat_Transfer:
+ case TransferStat_PostOperation:
+ case TransferStat_Checksum:
+ return readThread.getLastGoodPosition();
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] transferSize: "+QString::number(transferSize));
+ return transferSize;
+ default:
+ return 0;
+ }
+}
+
+void TransferThread::setRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
+{
+ this->firstRenamingRule=firstRenamingRule;
+ this->otherRenamingRule=otherRenamingRule;
+}
diff --git a/plugins-alternative/CopyEngine/Rsync/TransferThread.h b/plugins-alternative/CopyEngine/Rsync/TransferThread.h
new file mode 100644
index 0000000..3ee6d35
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/TransferThread.h
@@ -0,0 +1,221 @@
+/** \file TransferThread.h
+\brief Thread changed to manage the inode operation, the signals, canceling, pre and post operations
+\author alpha_one_x86
+\version 0.3
+\date 2011 */
+
+#ifndef TRANSFERTHREAD_H
+#define TRANSFERTHREAD_H
+
+#include <QThread>
+#include <QFileInfo>
+#include <QString>
+#include <QList>
+#include <QStringList>
+#include <QDateTime>
+#include <QDir>
+
+#include "ReadThread.h"
+#include "WriteThread.h"
+#include "Environment.h"
+#include "StructEnumDefinition_CopyEngine.h"
+
+/// \brief Thread changed to manage the inode operation, the signals, canceling, pre and post operations
+class TransferThread : public QThread
+{
+ Q_OBJECT
+public:
+ explicit TransferThread();
+ ~TransferThread();
+ /// \brief get transfer stat
+ TransferStat getStat();
+ /// \brief get drive of an file or folder
+ QString getDrive(QString fileOrFolder);
+ /// \brief set drive list, used in getDrive()
+ void setDrive(QStringList drives);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ /// \brief to set the id
+ void setId(int id);
+ /// \brief get the reading letter
+ QChar readingLetter();
+ /// \brief get the writing letter
+ QChar writingLetter();
+ #endif
+ /// \brief to have semaphore, and try create just one by one
+ void setMkpathTransfer(QSemaphore *mkpathTransfer);
+ /// \brief to store the transfer id
+ quint64 transferId;
+ /// \brief to store the transfer size
+ quint64 transferSize;
+
+ 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);
+
+ //not copied size, because that's count to the checksum, ...
+ quint64 realByteTransfered();
+protected:
+ void run();
+signals:
+ //to send state
+ void preOperationStopped();
+ void checkIfItCanBeResumed();
+ //void transferStarted();//not sended (and not used then)
+ void readStopped();
+ void writeStopped();
+ void postOperationStopped();
+ //get dialog
+ void fileAlreadyExists(QFileInfo,QFileInfo,bool isSame);
+ void errorOnFile(QFileInfo,QString);
+ //internal signal
+ void internalStartPostOperation();
+ void internalStartPreOperation();
+ void internalStartResumeAfterErrorAndSeek();
+ /// \brief To debug source
+ void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
+ void tryPutAtBottom();
+ //force into the right thread
+ void internalTryStartTheTransfer();
+ /// \brief update the transfer stat
+ void pushStat(TransferStat,quint64);
+public slots:
+ /// \brief to start the transfer of data
+ void startTheTransfer();
+ /// \brief to set files to transfer
+ void setFiles(const QString &source,const qint64 &size,const QString &destination,const CopyMode &mode);
+ /// \brief to set file exists action to do
+ void setFileExistsAction(const FileExistsAction &action);
+ /// \brief to set the new name of the destination
+ void setFileRename(const QString &nameForRename);
+ /// \brief to start the transfer of data
+ void setAlwaysFileExistsAction(const FileExistsAction &action);
+ /// \brief set the copy info and options before runing
+ void setRightTransfer(const bool doRightTransfer);
+ /// \brief set keep date
+ void setKeepDate(const bool keepDate);
+ /// \brief set the current max speed in KB/s
+ void setMaxSpeed(int maxSpeed);
+ /// \brief set block size in KB
+ bool setBlockSize(const unsigned int blockSize);
+ /// \brief pause the copy
+ void pause();
+ /// \brief resume the copy
+ void resume();
+ /// \brief stop the copy
+ void stop();
+ /// \brief skip the copy
+ void skip();
+ /// \brief retry after error
+ void retryAfterError();
+ /// \brief return info about the copied size
+ qint64 copiedSize();
+ /// \brief put the current file at bottom
+ void putAtBottom();
+ /// \brief set rsync
+ void setRsync(const bool rsync);
+
+ void set_osBufferLimit(unsigned int osBufferLimit);
+ void setRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
+private slots:
+ void preOperation();
+ void readIsReady();
+ void writeIsReady();
+ void readIsFinish();
+ void writeIsFinish();
+ void readIsClosed();
+ void writeIsClosed();
+ void postOperation();
+ void getWriteError();
+ void getReadError();
+ void readChecksumFinish(const QByteArray&);
+ void writeChecksumFinish(const QByteArray&);
+ void compareChecksum();
+ //void syncAfterErrorAndReadFinish();
+ void readThreadIsSeekToZeroAndWait();
+ void writeThreadIsReopened();
+ void readThreadResumeAfterError();
+ //to filter the emition of signal
+ void readIsStopped();
+ void writeIsStopped();
+ //speed limitation
+ void timeOfTheBlockCopyFinished();
+ //force into the right thread
+ void internalStartTheTransfer();
+private:
+ enum MoveReturn
+ {
+ MoveReturn_skip=0,
+ MoveReturn_moved=1,
+ MoveReturn_error=2
+ };
+ TransferStat transfer_stat;
+ ReadThread readThread;
+ WriteThread writeThread;
+ QString source;
+ QString destination;
+ CopyMode mode;
+ QTimer clockForTheCopySpeed; ///< For the speed throttling
+ bool doRightTransfer;
+ bool keepDate;
+ bool readIsReadyVariable;
+ bool writeIsReadyVariable;
+ bool readIsOpenVariable;
+ bool writeIsOpenVariable;
+ bool readIsFinishVariable;
+ bool writeIsFinishVariable;
+ bool readIsClosedVariable;
+ bool writeIsClosedVariable;
+ bool canBeMovedDirectlyVariable;
+ bool rsync;
+ QByteArray sourceChecksum,destinationChecksum;
+ volatile bool stopIt;
+ volatile bool canStartTransfer;
+ int blockSize;
+ bool retry;
+ QFileInfo sourceInfo;
+ QFileInfo destinationInfo;
+ QStringList mountSysPoint;
+ qint64 size;
+ FileExistsAction fileExistsAction;
+ FileExistsAction alwaysDoFileExistsAction;
+ bool needSkip,needRemove;
+ QDateTime maxTime;
+ int id;
+ QSemaphore *mkpathTransfer;
+ bool doChecksum,real_doChecksum;
+ bool checksumIgnoreIfImpossible;
+ bool checksumOnlyOnError;
+ bool osBuffer;
+ bool osBufferLimited;
+ unsigned int osBufferLimit;
+ QString firstRenamingRule;
+ QString otherRenamingRule;
+ //error management
+ bool writeError,writeError_source_seeked,writeError_destination_reopened;
+ bool readError;
+ bool fileContentError;
+ //different pre-operation
+ bool isSame();
+ bool destinationExists();
+ bool canBeMovedDirectly();
+ void tryMoveDirectly();
+ void ifCanStartTransfer();
+ //fonction to edit the file date time
+ bool changeFileDateTime(const QString &source,const QString &destination);
+ void resetExtraVariable();
+ //error management function
+ void resumeTransferAfterWriteError();
+ //to send state
+ bool sended_state_preOperationStopped;
+ bool sended_state_readStopped;
+ bool sended_state_writeStopped;
+ //different post-operation
+ bool checkIfAllIsClosed();
+ bool doFilePostOperation();
+ //different pre-operation
+ void tryOpen();
+};
+
+#endif // TRANSFERTHREAD_H
diff --git a/plugins-alternative/CopyEngine/Rsync/Variable.h b/plugins-alternative/CopyEngine/Rsync/Variable.h
new file mode 100644
index 0000000..f39b8a6
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/Variable.h
@@ -0,0 +1,35 @@
+/** \file Variable.h
+\brief Define the environment variable
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#ifndef VARIABLE_H
+#define VARIABLE_H
+
+//Un-comment this next line to put ultracopier plugin in debug mode
+#define ULTRACOPIER_PLUGIN_DEBUG
+#define ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+#define ULTRACOPIER_PLUGIN_DEBUG_WINDOW_TIMER 150
+
+#define ULTRACOPIER_PLUGIN_MAXBUFFERBLOCK 64
+#define ULTRACOPIER_PLUGIN_MINTIMERINTERVAL 50
+#define ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL 100
+#define ULTRACOPIER_PLUGIN_NUMSEMSPEEDMANAGEMENT 2
+#define ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT 64
+#define ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER 1
+#define ULTRACOPIER_PLUGIN_MINIMALYEAR 1990
+
+//if set, check the inode type at scanFileOrFolder, deprecated into the new algorithm and not used
+#define ULTRACOPIER_PLUGIN_CHECKLISTTYPE
+
+/** \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_SET_TIME_UNIX_WAY
+
+#endif // VARIABLE_H
+
+
+
diff --git a/plugins-alternative/CopyEngine/Rsync/WriteThread.cpp b/plugins-alternative/CopyEngine/Rsync/WriteThread.cpp
new file mode 100644
index 0000000..448e8dc
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/WriteThread.cpp
@@ -0,0 +1,508 @@
+#include "WriteThread.h"
+
+#include <QDir>
+
+WriteThread::WriteThread()
+{
+ stopIt=false;
+ isOpen.release();
+ start();
+ moveToThread(this);
+ setObjectName("write");
+ this->mkpathTransfer = mkpathTransfer;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+ CurentCopiedSize=0;
+ buffer=false;
+ putInPause=false;
+ needRemoveTheFile=false;
+ blockSize=1024*1024;
+}
+
+WriteThread::~WriteThread()
+{
+ stopIt=true;
+ needRemoveTheFile=true;
+ freeBlock.release();
+ // useless because stopIt will close all thread, but if thread not runing run it
+ //endIsDetected();
+ emit internalStartClose();
+ isOpen.acquire();
+ disconnect(this);
+ quit();
+ wait();
+}
+
+void WriteThread::run()
+{
+ connect(this,SIGNAL(internalStartOpen()), this,SLOT(internalOpen()), Qt::QueuedConnection);
+ connect(this,SIGNAL(internalStartReopen()), this,SLOT(internalReopen()), Qt::QueuedConnection);
+ connect(this,SIGNAL(internalStartWrite()), this,SLOT(internalWrite()), Qt::QueuedConnection);
+ connect(this,SIGNAL(internalStartClose()), this,SLOT(internalClose()), Qt::QueuedConnection);
+ connect(this,SIGNAL(internalStartEndOfFile()), this,SLOT(internalEndOfFile()), Qt::QueuedConnection);
+ connect(this,SIGNAL(internalStartFlushAndSeekToZero()), this,SLOT(internalFlushAndSeekToZero()),Qt::QueuedConnection);
+ connect(this,SIGNAL(internalStartChecksum()), this,SLOT(checkSum()), Qt::QueuedConnection);
+ exec();
+}
+
+bool WriteThread::internalOpen()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] internalOpen destination: "+name);
+ if(stopIt)
+ return false;
+ if(file.isOpen())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] already open! destination: "+file.fileName());
+ return false;
+ }
+ //set to LISTBLOCKSIZE
+ while(freeBlock.available()<ULTRACOPIER_PLUGIN_MAXBUFFERBLOCK)
+ freeBlock.release();
+ if(freeBlock.available()>ULTRACOPIER_PLUGIN_MAXBUFFERBLOCK)
+ freeBlock.acquire(freeBlock.available()-ULTRACOPIER_PLUGIN_MAXBUFFERBLOCK);
+ stopIt=false;
+ CurentCopiedSize=0;
+ endDetected=false;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=InodeOperation;
+ #endif
+ file.setFileName(name);
+ //mkpath check if exists and return true if already exists
+ QFileInfo destinationInfo(file);
+ QDir destinationFolder;
+ {
+ mkpathTransfer->acquire();
+ if(!destinationFolder.exists(destinationInfo.absolutePath()))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] "+QString("Try create the path: %1")
+ .arg(destinationInfo.absolutePath()));
+ if(!destinationFolder.mkpath(destinationInfo.absolutePath()))
+ {
+ if(!destinationFolder.exists(destinationInfo.absolutePath()))
+ {
+ /// \todo do real folder error here
+ errorString_internal="mkpath error on destination";
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Unable create the folder: %1, error: %2")
+ .arg(destinationInfo.absolutePath())
+ .arg(errorString_internal));
+ emit error();
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+ return false;
+ }
+ }
+ }
+ mkpathTransfer->release();
+ }
+ if(stopIt)
+ return false;
+ //try open it
+ QIODevice::OpenMode flags=QIODevice::ReadWrite;
+ if(!buffer)
+ flags|=QIODevice::Unbuffered;
+ if(file.open(flags))
+ {
+ if(stopIt)
+ return false;
+ file.seek(0);
+ if(stopIt)
+ return false;
+ file.resize(startSize);
+ if(stopIt)
+ return false;
+ emit opened();
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+ isOpen.acquire();
+ needRemoveTheFile=false;
+ return true;
+ }
+ else
+ {
+ if(stopIt)
+ return false;
+ errorString_internal=file.errorString();
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Unable to open: %1, error: %2").arg(name).arg(errorString_internal));
+ emit error();
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+ return false;
+ }
+}
+
+void WriteThread::open(const QString &name,const quint64 &startSize,const bool &buffer)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] open destination: "+name);
+ if(stopIt)
+ return;
+ fakeMode=false;
+ this->name=name;
+ this->startSize=startSize;
+ this->buffer=buffer;
+ endDetected=false;
+ emit internalStartOpen();
+}
+
+void WriteThread::endIsDetected()
+{
+ if(endDetected)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] double event dropped");
+ return;
+ }
+ endDetected=true;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
+ emit internalStartEndOfFile();
+}
+
+QString WriteThread::errorString()
+{
+ return errorString_internal;
+}
+
+bool WriteThread::write(const QByteArray &data)
+{
+ if(stopIt)
+ return false;
+ freeBlock.acquire();
+ if(stopIt)
+ return false;
+ {
+ QMutexLocker lock_mutex(&accessList);
+ theBlockList.append(data);
+ }
+ emit internalStartWrite();
+ return true;
+}
+
+void WriteThread::stop()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stop()");
+ needRemoveTheFile=true;
+ stopIt=true;
+ if(isOpen.available()>0)
+ return;
+ freeBlock.release();
+ // useless because stopIt will close all thread, but if thread not runing run it
+ endIsDetected();
+ //for the stop for skip: void TransferThread::skip()
+ emit internalStartClose();
+}
+
+void WriteThread::flushBuffer()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
+ freeBlock.release();
+ freeBlock.acquire();
+ {
+ QMutexLocker lock_mutex(&accessList);
+ theBlockList.clear();
+ }
+}
+
+void WriteThread::internalEndOfFile()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] writeIsStopped");
+ emit writeIsStopped();
+}
+
+void WriteThread::internalWrite()
+{
+ if(stopIt)
+ return;
+ //read one block
+ if(theBlockList.size()<=0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] End detected of the file");
+ return;
+ }
+ else
+ {
+ QMutexLocker lock_mutex(&accessList);
+ blockArray=theBlockList.first();
+ theBlockList.removeFirst();
+ }
+ //write one block
+ freeBlock.release();
+
+ if(stopIt)
+ return;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Write;
+ #endif
+ bytesWriten=file.write(blockArray);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+ //mutex for stream this data
+ if(CurentCopiedSize==0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] emit writeIsStarted()");
+ emit writeIsStarted();
+ }
+ CurentCopiedSize+=bytesWriten;
+ if(stopIt)
+ return;
+ if(file.error()!=QFile::NoError)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Error in writing: %1 (%2)").arg(file.errorString()).arg(file.error()));
+ errorString_internal=QString("Error in writing: %1 (%2)").arg(file.errorString()).arg(file.error());
+ stopIt=true;
+ emit error();
+ return;
+ }
+ if(bytesWriten!=blockArray.size())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Error in writing, bytesWriten: %1, blockArray.size(): %2").arg(bytesWriten).arg(blockArray.size()));
+ errorString_internal=QString("Error in writing, bytesWriten: %1, blockArray.size(): %2").arg(bytesWriten).arg(blockArray.size());
+ stopIt=true;
+ emit error();
+ return;
+ }
+ lastGoodPosition+=bytesWriten;
+}
+
+void WriteThread::postOperation()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
+ emit internalStartClose();
+}
+
+void WriteThread::internalClose(bool emitSignal)
+{
+ /// \note never send signal here, because it's called by the destructor
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Close;
+ #endif
+ if(!fakeMode && file.isOpen())
+ {
+ if(!needRemoveTheFile)
+ {
+ if(startSize!=CurentCopiedSize)
+ file.resize(CurentCopiedSize);
+ }
+ file.close();
+ if(needRemoveTheFile)
+ {
+ if(file.remove())
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] unable to remove the destination file");
+ }
+ needRemoveTheFile=false;
+ }
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+ if(emitSignal)
+ emit closed();
+
+ /// \note always the last of this function
+ if(!fakeMode)
+ isOpen.release();
+}
+
+void WriteThread::internalReopen()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
+ internalClose(false);
+ flushBuffer();
+ stopIt=false;
+ CurentCopiedSize=0;
+ if(internalOpen())
+ emit reopened();
+}
+
+void WriteThread::reopen()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start");
+ stopIt=true;
+ endDetected=false;
+ emit internalStartReopen();
+}
+
+#ifdef ULTRACOPIER_PLUGIN_DEBUG
+//to set the id
+void WriteThread::setId(int id)
+{
+ this->id=id;
+}
+#endif
+
+/// \brief do the fake open
+void WriteThread::fakeOpen()
+{
+ fakeMode=true;
+ emit opened();
+}
+
+/// \brief do the fake writeIsStarted
+void WriteThread::fakeWriteIsStarted()
+{
+ emit writeIsStarted();
+}
+
+/// \brief do the fake writeIsStopped
+void WriteThread::fakeWriteIsStopped()
+{
+ emit writeIsStopped();
+}
+
+/// do the checksum
+void WriteThread::startCheckSum()
+{
+ emit internalStartChecksum();
+}
+
+/** \brief set block size
+\param block the new block size in KB
+\return Return true if succes */
+bool WriteThread::setBlockSize(const int blockSize)
+{
+ if(blockSize<1 || blockSize>16384)
+ {
+ this->blockSize=blockSize*1024;
+ //set the new max speed because the timer have changed
+ setMaxSpeed(maxSpeed);
+ return true;
+ }
+ else
+ return false;
+}
+
+/*! \brief Set the max speed
+\param tempMaxSpeed Set the max speed in KB/s, 0 for no limit */
+int WriteThread::setMaxSpeed(const int maxSpeed)
+{
+ if(this->maxSpeed==0 && maxSpeed==0 && waitNewClockForSpeed.available()>0)
+ waitNewClockForSpeed.tryAcquire(waitNewClockForSpeed.available());
+ this->maxSpeed=maxSpeed;
+ if(this->maxSpeed>0)
+ {
+ int NewInterval,newMultiForBigSpeed=0;
+ do
+ {
+ newMultiForBigSpeed++;
+ NewInterval=(blockSize*newMultiForBigSpeed)/(this->maxSpeed);
+ }
+ while (NewInterval<ULTRACOPIER_PLUGIN_MINTIMERINTERVAL);
+ if(NewInterval>ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL)
+ {
+ NewInterval=ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL;
+ newMultiForBigSpeed=1;
+ blockSize=this->maxSpeed*NewInterval;
+ }
+ MultiForBigSpeed=newMultiForBigSpeed;
+ return NewInterval;
+ }
+ else
+ {
+ waitNewClockForSpeed.release();
+ return 0;
+ }
+}
+
+/// \brief For give timer every X ms
+void WriteThread::timeOfTheBlockCopyFinished()
+{
+ if(waitNewClockForSpeed.available()<ULTRACOPIER_PLUGIN_NUMSEMSPEEDMANAGEMENT)
+ waitNewClockForSpeed.release();
+ //why not just use waitNewClockForSpeed.release() ?
+}
+
+void WriteThread::flushAndSeekToZero()
+{
+ stopIt=true;
+ emit internalStartFlushAndSeekToZero();
+}
+
+
+void WriteThread::checkSum()
+{
+ //QByteArray blockArray;
+ QCryptographicHash hash(QCryptographicHash::Sha1);
+ endDetected=false;
+ lastGoodPosition=0;
+ file.seek(0);
+ int sizeReaden=0;
+ do
+ {
+ //read one block
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Read;
+ #endif
+ blockArray=file.read(blockSize);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+
+ if(file.error()!=QFile::NoError)
+ {
+ errorString_internal=tr("Unable to read the source file: ")+file.errorString()+" ("+QString::number(file.error())+")";
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("file.error()!=QFile::NoError: %1, error: %2").arg(QString::number(file.error())).arg(errorString_internal));
+ emit error();
+ return;
+ }
+ sizeReaden=blockArray.size();
+ if(sizeReaden>0)
+ {
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Checksum;
+ #endif
+ hash.addData(blockArray);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+
+ if(stopIt)
+ break;
+
+ lastGoodPosition+=blockArray.size();
+
+ //wait for limitation speed if stop not query
+ if(maxSpeed>0)
+ {
+ numberOfBlockCopied++;
+ if(numberOfBlockCopied>=MultiForBigSpeed)
+ {
+ numberOfBlockCopied=0;
+ waitNewClockForSpeed.acquire();
+ if(stopIt)
+ break;
+ }
+ }
+ }
+ }
+ while(sizeReaden>0 && !stopIt);
+ if(lastGoodPosition>file.size())
+ {
+ errorString_internal=tr("File truncated during the read, possible data change");
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Source truncated during the read: %1 (%2)").arg(file.errorString()).arg(QString::number(file.error())));
+ emit error();
+ return;
+ }
+ if(stopIt)
+ {
+/* if(putInPause)
+ emit isInPause();*/
+ stopIt=false;
+ return;
+ }
+ emit checksumFinish(hash.result());
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stop the read");
+}
+
+void WriteThread::internalFlushAndSeekToZero()
+{
+ flushBuffer();
+ file.seek(0);
+ stopIt=false;
+ emit flushedAndSeekedToZero();
+}
+
+void WriteThread::setMkpathTransfer(QSemaphore *mkpathTransfer)
+{
+ this->mkpathTransfer=mkpathTransfer;
+}
diff --git a/plugins-alternative/CopyEngine/Rsync/WriteThread.h b/plugins-alternative/CopyEngine/Rsync/WriteThread.h
new file mode 100644
index 0000000..3683c27
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/WriteThread.h
@@ -0,0 +1,138 @@
+/** \file WriteThread.h
+\brief Thread changed to open/close and write the destination file
+\author alpha_one_x86
+\version 0.3
+\date 2011 */
+
+#ifndef WRITETHREAD_H
+#define WRITETHREAD_H
+
+#include <QThread>
+#include <QByteArray>
+#include <QString>
+#include <QMutex>
+#include <QSemaphore>
+#include <QCryptographicHash>
+
+#include "Environment.h"
+#include "StructEnumDefinition_CopyEngine.h"
+#include "AvancedQFile.h"
+
+/// \brief Thread changed to open/close and write the destination file
+class WriteThread : public QThread
+{
+ Q_OBJECT
+public:
+ explicit WriteThread();
+ ~WriteThread();
+ /// \brief to have semaphore to do mkpath one by one
+ void setMkpathTransfer(QSemaphore *mkpathTransfer);
+protected:
+ void run();
+public:
+ /// \brief open the destination to open it
+ void open(const QString &name,const quint64 &startSize,const bool &buffer);
+ /// \brief to return the error string
+ QString errorString();
+ /// \brief to stop all
+ void stop();
+ /// \brief to write data
+ bool write(const QByteArray &data);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ /// \brief to set the id
+ void setId(int id);
+ /// \brief get the write stat
+ enum WriteStat
+ {
+ Idle=0,
+ InodeOperation=1,
+ Write=2,
+ Close=3,
+ Read=5,
+ Checksum=6
+ };
+ WriteStat stat;
+ #endif
+ /// \brief do the fake open
+ void fakeOpen();
+ /// \brief do the fake writeIsStarted
+ void fakeWriteIsStarted();
+ /// \brief do the fake writeIsStopped
+ void fakeWriteIsStopped();
+ /// do the checksum
+ void startCheckSum();
+ /// \brief set the current max speed in KB/s
+ int setMaxSpeed(int maxSpeed);
+ /// \brief For give timer every X ms
+ void timeOfTheBlockCopyFinished();
+ /// \brief set block size in KB
+ bool setBlockSize(const int blockSize);
+public slots:
+ /// \brief start the operation
+ void postOperation();
+ /// \brief flush buffer
+ void flushBuffer();
+ /// \brief set the end is detected
+ void endIsDetected();
+ /// \brief reopen the file
+ void reopen();
+ /// \brief flush and seek to zero
+ void flushAndSeekToZero();
+ /// do the checksum
+ void checkSum();
+signals:
+ void error();
+ void opened();
+ void reopened();
+ void writeIsStarted();
+ void writeIsStopped();
+ void flushedAndSeekedToZero();
+ void closed();
+ void checksumFinish(const QByteArray&);
+ //internal signals
+ void internalStartOpen();
+ void internalStartChecksum();
+ void internalStartReopen();
+ void internalStartWrite();
+ void internalStartClose();
+ void internalStartEndOfFile();
+ void internalStartFlushAndSeekToZero();
+ /// \brief To debug source
+ void debugInformation(const DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne);
+private:
+ QString name;
+ QString errorString_internal;
+ AvancedQFile file;
+ volatile bool stopIt;
+ volatile int blockSize;
+ volatile int maxSpeed; ///< The max speed in KB/s, 0 for no limit
+ QMutex accessList; ///< For use the list
+ QSemaphore waitNewClockForSpeed;
+ volatile int numberOfBlockCopied; ///< Multiple for count the number of block copied
+ volatile int multiplicatorForBigSpeed; ///< Multiple for count the number of block needed
+ volatile int MultiForBigSpeed;
+ QSemaphore freeBlock;
+ QSemaphore isOpen;
+ volatile bool putInPause;
+ QList<QByteArray> theBlockList; ///< Store the block list
+ quint64 CurentCopiedSize;
+ QByteArray blockArray; ///< temp data for block writing, the data
+ qint64 bytesWriten; ///< temp data for block writing, the bytes writen
+ qint64 lastGoodPosition;
+ int id;
+ bool endDetected;
+ quint64 startSize;
+ QSemaphore *mkpathTransfer;
+ bool fakeMode;
+ bool buffer;
+ bool needRemoveTheFile;
+private slots:
+ bool internalOpen();
+ void internalWrite();
+ void internalClose(bool emitSignal=true);
+ void internalReopen();
+ void internalEndOfFile();
+ void internalFlushAndSeekToZero();
+};
+
+#endif // WRITETHREAD_H
diff --git a/plugins-alternative/CopyEngine/Rsync/copyEngine-collision-and-error.cpp b/plugins-alternative/CopyEngine/Rsync/copyEngine-collision-and-error.cpp
new file mode 100644
index 0000000..7ec07c2
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/copyEngine-collision-and-error.cpp
@@ -0,0 +1,565 @@
+/** \file copyEngine.cpp
+\brief Define the copy engine
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#include <QtCore>
+#include <QFileDialog>
+#include <QMessageBox>
+
+#include "copyEngine.h"
+#include "folderExistsDialog.h"
+
+/// \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(DebugLevel_Critical,"unable to locate the thread");
+ return;
+ }
+ //load the action
+ if(isSame)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"file is same: "+source.absoluteFilePath());
+ tempFileExistsAction=alwaysDoThisActionForFileExists;
+ if(tempFileExistsAction==FileExists_Overwrite || tempFileExistsAction==FileExists_OverwriteIfNewer || tempFileExistsAction==FileExists_OverwriteIfNotSameModificationDate)
+ tempFileExistsAction=FileExists_NotSet;
+ switch(tempFileExistsAction)
+ {
+ case FileExists_Skip:
+ case FileExists_Rename:
+ thread->setFileExistsAction(tempFileExistsAction);
+ break;
+ default:
+ if(dialogIsOpen)
+ {
+ alreadyExistsQueueItem newItem;
+ newItem.source=source;
+ newItem.destination=destination;
+ newItem.isSame=isSame;
+ newItem.transfer=thread;
+ newItem.scan=NULL;
+ alreadyExistsQueue << newItem;
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(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(DebugLevel_Notice,"close dialog: "+QString::number(newAction));
+ if(newAction==FileExists_Cancel)
+ {
+ emit cancelAll();
+ return;
+ }
+ if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileExists)
+ {
+ alwaysDoThisActionForFileExists=newAction;
+ listThread->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists);
+ switch(newAction)
+ {
+ default:
+ case FileExists_Skip:
+ emit newCollisionAction("skip");
+ break;
+ case FileExists_Rename:
+ emit newCollisionAction("rename");
+ 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(DebugLevel_Notice,"file already exists: "+source.absoluteFilePath()+", destination: "+destination.absoluteFilePath());
+ tempFileExistsAction=alwaysDoThisActionForFileExists;
+ switch(tempFileExistsAction)
+ {
+ case FileExists_Skip:
+ case FileExists_Rename:
+ case FileExists_Overwrite:
+ case FileExists_OverwriteIfNewer:
+ case FileExists_OverwriteIfNotSameModificationDate:
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"always do this action: "+QString::number(tempFileExistsAction));
+ thread->setFileExistsAction(tempFileExistsAction);
+ break;
+ default:
+ if(dialogIsOpen)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("dialog open, put in queue: %1 %2")
+ .arg(source.absoluteFilePath())
+ .arg(destination.absoluteFilePath())
+ );
+ alreadyExistsQueueItem newItem;
+ newItem.source=source;
+ newItem.destination=destination;
+ newItem.isSame=isSame;
+ newItem.transfer=thread;
+ newItem.scan=NULL;
+ alreadyExistsQueue << newItem;
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(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(DebugLevel_Notice,"close dialog: "+QString::number(newAction));
+ if(newAction==FileExists_Cancel)
+ {
+ emit cancelAll();
+ return;
+ }
+ if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileExists)
+ {
+ alwaysDoThisActionForFileExists=newAction;
+ listThread->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists);
+ switch(newAction)
+ {
+ default:
+ case FileExists_Skip:
+ emit newCollisionAction("skip");
+ break;
+ case FileExists_Rename:
+ emit newCollisionAction("rename");
+ break;
+ case FileExists_Overwrite:
+ emit newCollisionAction("overwrite");
+ break;
+ case FileExists_OverwriteIfNewer:
+ emit newCollisionAction("overwriteIfNewer");
+ break;
+ case FileExists_OverwriteIfNotSameModificationDate:
+ emit newCollisionAction("overwriteIfNotSameModificationDate");
+ break;
+ }
+ }
+ if(dialog.getAlways() || newAction!=FileExists_Rename)
+ thread->setFileExistsAction(newAction);
+ else
+ thread->setFileRename(dialog.getNewName());
+ dialogIsOpen=false;
+ if(!isCalledByShowOneNewDialog)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"emit queryOneNewDialog()");
+ emit queryOneNewDialog();
+ }
+ return;
+ break;
+ }
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop");
+}
+
+/// \note Can be call without queue because all call will be serialized
+void copyEngine::errorOnFile(QFileInfo fileInfo,QString errorString,TransferThread * thread,bool isCalledByShowOneNewDialog)
+{
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"file have error: "+fileInfo.absoluteFilePath()+", error: "+errorString);
+ if(thread==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to locate the thread");
+ return;
+ }
+ //load the action
+ tempFileErrorAction=alwaysDoThisActionForFileError;
+ switch(tempFileErrorAction)
+ {
+ case FileError_Skip:
+ thread->skip();
+ return;
+ case FileError_Retry:
+ thread->retryAfterError();
+ return;
+ case FileError_PutToEndOfTheList:
+ /// \todo do the read transfer locator and put at the end
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"todo list item not found");
+ return;
+ default:
+ if(dialogIsOpen)
+ {
+ errorQueueItem newItem;
+ newItem.errorString=errorString;
+ newItem.inode=fileInfo;
+ newItem.mkPath=false;
+ newItem.rmPath=false;
+ newItem.scan=NULL;
+ newItem.transfer=thread;
+ errorQueue << newItem;
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"show dialog");
+ emit error(fileInfo.absoluteFilePath(),fileInfo.size(),fileInfo.lastModified(),errorString);
+ fileErrorDialog dialog(interface,fileInfo,errorString);
+ emit isInPause(true);
+ dialog.exec();/// \bug crash when external close
+ FileErrorAction newAction=dialog.getAction();
+ emit isInPause(false);
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"close dialog: "+QString::number(newAction));
+ if(newAction==FileError_Cancel)
+ {
+ emit cancelAll();
+ return;
+ }
+ if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError)
+ {
+ alwaysDoThisActionForFileError=newAction;
+ switch(newAction)
+ {
+ default:
+ case FileError_Skip:
+ emit newErrorAction("skip");
+ break;
+ case FileError_PutToEndOfTheList:
+ emit newErrorAction("putToEndOfTheList");
+ break;
+ }
+ }
+ switch(newAction)
+ {
+ case FileError_Skip:
+ thread->skip();
+ break;
+ case FileError_Retry:
+ thread->retryAfterError();
+ break;
+ case FileError_PutToEndOfTheList:
+ thread->putAtBottom();
+ /// \todo do the read transfer locator and put at the end
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"todo");
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"file error action wrong");
+ break;
+ }
+ dialogIsOpen=false;
+ if(!isCalledByShowOneNewDialog)
+ emit queryOneNewDialog();
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"isCalledByShowOneNewDialog==true then not show other dial");
+ return;
+ break;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(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(DebugLevel_Notice,"folder already exists: "+source.absoluteFilePath()+", destination: "+destination.absoluteFilePath());
+ if(thread==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to locate the thread");
+ return;
+ }
+ //load the always action
+ tempFolderExistsAction=alwaysDoThisActionForFolderExists;
+ switch(tempFolderExistsAction)
+ {
+ case FolderExists_Skip:
+ case FolderExists_Rename:
+ case FolderExists_Merge:
+ thread->setFolderExistsAction(tempFolderExistsAction);
+ break;
+ default:
+ if(dialogIsOpen)
+ {
+ alreadyExistsQueueItem newItem;
+ newItem.source=source;
+ newItem.destination=destination;
+ newItem.isSame=isSame;
+ newItem.transfer=NULL;
+ newItem.scan=thread;
+ alreadyExistsQueue << newItem;
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(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(DebugLevel_Notice,"close dialog: "+QString::number(newAction));
+ if(newAction==FolderExists_Cancel)
+ {
+ emit cancelAll();
+ return;
+ }
+ if(dialog.getAlways() && newAction!=alwaysDoThisActionForFolderExists)
+ setComboBoxFolderColision(newAction);
+ if(!dialog.getAlways() && newAction==FolderExists_Rename)
+ thread->setFolderExistsAction(newAction,dialog.getNewName());
+ else
+ thread->setFolderExistsAction(newAction);
+ dialogIsOpen=false;
+ if(!isCalledByShowOneNewDialog)
+ emit queryOneNewDialog();
+ return;
+ break;
+ }
+}
+
+/// \note Can be call without queue because all call will be serialized
+/// \todo all this part
+void copyEngine::errorOnFolder(QFileInfo fileInfo,QString errorString,scanFileOrFolder * thread,bool isCalledByShowOneNewDialog)
+{
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"file have error: "+fileInfo.absoluteFilePath()+", error: "+errorString);
+ if(thread==NULL)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to locate the thread");
+ return;
+ }
+ //load the always action
+ 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;
+ errorQueue << newItem;
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"show dialog");
+ emit error(fileInfo.absoluteFilePath(),fileInfo.size(),fileInfo.lastModified(),errorString);
+ fileErrorDialog dialog(interface,fileInfo,errorString);
+ dialog.exec();/// \bug crash when external close
+ FileErrorAction newAction=dialog.getAction();
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"close dialog: "+QString::number(newAction));
+ if(newAction==FileError_Cancel)
+ {
+ emit cancelAll();
+ return;
+ }
+ if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError)
+ setComboBoxFolderError(newAction);
+ dialogIsOpen=false;
+ thread->setFolderErrorAction(newAction);
+ if(!isCalledByShowOneNewDialog)
+ emit queryOneNewDialog();
+ return;
+ break;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop");
+}
+
+// -----------------------------------------------------
+
+//mkpath event
+void copyEngine::mkPathErrorOnFolder(QFileInfo folder,QString errorString,bool isCalledByShowOneNewDialog)
+{
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"file have error: "+folder.absoluteFilePath()+", error: "+errorString);
+ //load the always action
+ tempFileErrorAction=alwaysDoThisActionForFolderError;
+ error_index=0;
+ 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;
+ errorQueue << newItem;
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"show dialog");
+ emit error(folder.absoluteFilePath(),folder.size(),folder.lastModified(),errorString);
+ fileErrorDialog dialog(interface,folder,errorString,false);
+ dialog.exec();/// \bug crash when external close
+ FileErrorAction newAction=dialog.getAction();
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"close dialog: "+QString::number(newAction));
+ if(newAction==FileError_Cancel)
+ {
+ emit cancelAll();
+ return;
+ }
+ if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError)
+ {
+ setComboBoxFolderError(newAction);
+ alwaysDoThisActionForFolderError=newAction;
+ }
+ dialogIsOpen=false;
+ switch(newAction)
+ {
+ case FileError_Skip:
+ listThread->mkPathQueue.skip();
+ break;
+ case FileError_Retry:
+ listThread->mkPathQueue.retry();
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unknow switch case: "+QString::number(newAction));
+ break;
+ }
+ if(!isCalledByShowOneNewDialog)
+ emit queryOneNewDialog();
+ return;
+ break;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop");
+}
+
+//rmpath event
+void copyEngine::rmPathErrorOnFolder(QFileInfo folder,QString errorString,bool isCalledByShowOneNewDialog)
+{
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"file have error: "+folder.absoluteFilePath()+", error: "+errorString);
+ //load the always action
+ tempFileErrorAction=alwaysDoThisActionForFolderError;
+ error_index=0;
+ switch(tempFileErrorAction)
+ {
+ case FileError_Skip:
+ listThread->rmPathQueue.skip();
+ return;
+ case FileError_Retry:
+ listThread->rmPathQueue.retry();
+ return;
+ default:
+ if(dialogIsOpen)
+ {
+ errorQueueItem newItem;
+ newItem.errorString=errorString;
+ newItem.inode=folder;
+ newItem.mkPath=false;
+ newItem.rmPath=true;
+ newItem.scan=NULL;
+ newItem.transfer=NULL;
+ errorQueue << newItem;
+ return;
+ }
+ dialogIsOpen=true;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"show dialog");
+ emit error(folder.absoluteFilePath(),folder.size(),folder.lastModified(),errorString);
+ fileErrorDialog dialog(interface,folder,errorString,false);
+ dialog.exec();/// \bug crash when external close
+ FileErrorAction newAction=dialog.getAction();
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"close dialog: "+QString::number(newAction));
+ if(newAction==FileError_Cancel)
+ {
+ emit cancelAll();
+ return;
+ }
+ if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError)
+ {
+ setComboBoxFolderError(newAction);
+ alwaysDoThisActionForFolderError=newAction;
+ }
+ dialogIsOpen=false;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"do the action");
+ switch(newAction)
+ {
+ case FileError_Skip:
+ listThread->rmPathQueue.skip();
+ break;
+ case FileError_Retry:
+ listThread->rmPathQueue.retry();
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unknow switch case: "+QString::number(newAction));
+ break;
+ }
+ if(!isCalledByShowOneNewDialog)
+ emit queryOneNewDialog();
+ return;
+ break;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop");
+}
+
+//show one new dialog if needed
+void copyEngine::showOneNewDialog()
+{
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"alreadyExistsQueue.size(): "+QString::number(alreadyExistsQueue.size()));
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"errorQueue.size(): "+QString::number(errorQueue.size()));
+ loop_size=alreadyExistsQueue.size();
+ while(loop_size>0)
+ {
+ if(alreadyExistsQueue.first().transfer!=NULL)
+ {
+ fileAlreadyExists(alreadyExistsQueue.first().source,
+ alreadyExistsQueue.first().destination,
+ alreadyExistsQueue.first().isSame,
+ alreadyExistsQueue.first().transfer,
+ true);
+ }
+ else if(alreadyExistsQueue.first().scan!=NULL)
+ folderAlreadyExists(alreadyExistsQueue.first().source,
+ alreadyExistsQueue.first().destination,
+ alreadyExistsQueue.first().isSame,
+ alreadyExistsQueue.first().scan,
+ true);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"bug, no thread actived");
+ alreadyExistsQueue.removeFirst();
+ loop_size--;
+ }
+ loop_size=errorQueue.size();
+ while(errorQueue.size()>0)
+ {
+ if(errorQueue.first().transfer!=NULL)
+ errorOnFile(errorQueue.first().inode,errorQueue.first().errorString,errorQueue.first().transfer,true);
+ else if(errorQueue.first().scan!=NULL)
+ errorOnFolder(errorQueue.first().inode,errorQueue.first().errorString,errorQueue.first().scan,true);
+ else if(errorQueue.first().mkPath)
+ mkPathErrorOnFolder(errorQueue.first().inode,errorQueue.first().errorString,true);
+ else if(errorQueue.first().rmPath)
+ rmPathErrorOnFolder(errorQueue.first().inode,errorQueue.first().errorString,true);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"bug, no thread actived");
+ errorQueue.removeFirst();
+ loop_size--;
+ }
+}
diff --git a/plugins-alternative/CopyEngine/Rsync/copyEngine.cpp b/plugins-alternative/CopyEngine/Rsync/copyEngine.cpp
new file mode 100755
index 0000000..1c17f8a
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/copyEngine.cpp
@@ -0,0 +1,819 @@
+/** \file copyEngine.cpp
+\brief Define the copy engine
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#include <QtCore>
+#include <QFileDialog>
+#include <QMessageBox>
+
+#include "copyEngine.h"
+#include "folderExistsDialog.h"
+#include "../../../interface/PluginInterface_CopyEngine.h"
+
+copyEngine::copyEngine(FacilityInterface * facilityEngine) :
+ ui(new Ui::options())
+{
+ listThread=new ListThread(facilityEngine);
+ this->facilityEngine=facilityEngine;
+ filters=NULL;
+ renamingRules=NULL;
+ qRegisterMetaType<TransferThread *>("TransferThread *");
+ qRegisterMetaType<scanFileOrFolder *>("scanFileOrFolder *");
+ qRegisterMetaType<EngineActionInProgress>("EngineActionInProgress");
+ qRegisterMetaType<DebugLevel>("DebugLevel");
+ qRegisterMetaType<FileExistsAction>("FileExistsAction");
+ qRegisterMetaType<FolderExistsAction>("FolderExistsAction");
+ qRegisterMetaType<QList<Filters_rules> >("QList<Filters_rules>");
+ qRegisterMetaType<QList<int> >("QList<int>");
+ qRegisterMetaType<CopyMode>("CopyMode");
+ qRegisterMetaType<QList<returnActionOnCopyList> >("QList<returnActionOnCopyList>");
+ qRegisterMetaType<QList<ProgressionItem> >("QList<ProgressionItem>");
+
+ interface = NULL;
+ tempWidget = NULL;
+ uiIsInstalled = false;
+ dialogIsOpen = false;
+ maxSpeed = 0;
+ alwaysDoThisActionForFileExists = FileExists_NotSet;
+ alwaysDoThisActionForFileError = FileError_NotSet;
+ checkDestinationFolderExists = false;
+ stopIt = false;
+ size_for_speed = 0;
+ forcedMode = false;
+
+ //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);
+
+}
+
+copyEngine::~copyEngine()
+{
+ /*if(filters!=NULL)
+ delete filters;
+ if(renamingRules!=NULL)
+ delete renamingRules;
+ destroyed by the widget parent, here the interface
+ */
+ stopIt=true;
+ delete listThread;
+ delete ui;
+}
+
+void copyEngine::connectTheSignalsSlots()
+{
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ debugDialogWindow.show();
+ #endif
+ if(!connect(listThread,SIGNAL(actionInProgess(EngineActionInProgress)), this,SIGNAL(actionInProgess(EngineActionInProgress)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect actionInProgess()");
+ if(!connect(listThread,SIGNAL(actionInProgess(EngineActionInProgress)), this,SLOT(newActionInProgess(EngineActionInProgress)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect actionInProgess() to slot");
+ if(!connect(listThread,SIGNAL(newFolderListing(QString)), this,SIGNAL(newFolderListing(QString)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect newFolderListing()");
+ if(!connect(listThread,SIGNAL(newCollisionAction(QString)), this,SIGNAL(newCollisionAction(QString)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect newCollisionAction()");
+ if(!connect(listThread,SIGNAL(newErrorAction(QString)), this,SIGNAL(newErrorAction(QString)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect newErrorAction()");
+ if(!connect(listThread,SIGNAL(isInPause(bool)), this,SIGNAL(isInPause(bool)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect isInPause()");
+ if(!connect(listThread,SIGNAL(error(QString,quint64,QDateTime,QString)), this,SIGNAL(error(QString,quint64,QDateTime,QString)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect error()");
+ if(!connect(listThread,SIGNAL(rmPath(QString)), this,SIGNAL(rmPath(QString)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect rmPath()");
+ if(!connect(listThread,SIGNAL(mkPath(QString)), this,SIGNAL(mkPath(QString)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect mkPath()");
+ if(!connect(listThread,SIGNAL(newActionOnList(QList<returnActionOnCopyList>)), this,SIGNAL(newActionOnList(QList<returnActionOnCopyList>)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect newActionOnList()");
+ if(!connect(listThread,SIGNAL(pushFileProgression(QList<ProgressionItem>)), this,SIGNAL(pushFileProgression(QList<ProgressionItem>)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect pushFileProgression()");
+ if(!connect(listThread,SIGNAL(pushGeneralProgression(quint64,quint64)), this,SIGNAL(pushGeneralProgression(quint64,quint64)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect pushGeneralProgression()");
+ if(!connect(listThread,SIGNAL(syncReady()), this,SIGNAL(syncReady()), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect syncReady()");
+ if(!connect(listThread,SIGNAL(canBeDeleted()), this,SIGNAL(canBeDeleted()), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect canBeDeleted()");
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ if(!connect(listThread,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect debugInformation()");
+ #endif
+
+ if(!connect(listThread,SIGNAL(send_fileAlreadyExists(QFileInfo,QFileInfo,bool,TransferThread *)), this,SLOT(fileAlreadyExists(QFileInfo,QFileInfo,bool,TransferThread *)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_fileAlreadyExists()");
+ if(!connect(listThread,SIGNAL(send_errorOnFile(QFileInfo,QString,TransferThread *)), this,SLOT(errorOnFile(QFileInfo,QString,TransferThread *)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_errorOnFile()");
+ if(!connect(listThread,SIGNAL(send_folderAlreadyExists(QFileInfo,QFileInfo,bool,scanFileOrFolder *)), this,SLOT(folderAlreadyExists(QFileInfo,QFileInfo,bool,scanFileOrFolder *)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_folderAlreadyExists()");
+ if(!connect(listThread,SIGNAL(send_errorOnFolder(QFileInfo,QString,scanFileOrFolder *)), this,SLOT(errorOnFolder(QFileInfo,QString,scanFileOrFolder *)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_errorOnFolder()");
+ if(!connect(listThread,SIGNAL(updateTheDebugInfo(QStringList,QStringList,int)), this,SLOT(updateTheDebugInfo(QStringList,QStringList,int)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect updateTheDebugInfo()");
+ if(!connect(listThread,SIGNAL(errorTransferList(QString)), this,SLOT(errorTransferList(QString)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect errorTransferList()");
+ if(!connect(listThread,SIGNAL(warningTransferList(QString)), this,SLOT(warningTransferList(QString)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect warningTransferList()");
+ if(!connect(listThread,SIGNAL(mkPathErrorOnFolder(QFileInfo,QString)), this,SLOT(mkPathErrorOnFolder(QFileInfo,QString)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect mkPathErrorOnFolder()");
+ if(!connect(listThread,SIGNAL(rmPathErrorOnFolder(QFileInfo,QString)), this,SLOT(rmPathErrorOnFolder(QFileInfo,QString)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect rmPathErrorOnFolder()");
+ if(!connect(listThread,SIGNAL(send_realBytesTransfered(quint64)), this,SLOT(get_realBytesTransfered(quint64)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_realBytesTransfered()");
+
+ if(!connect(this,SIGNAL(tryCancel()), listThread,SIGNAL(tryCancel()), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect tryCancel()");
+ if(!connect(this,SIGNAL(signal_pause()), listThread,SLOT(pause()), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_pause()");
+ if(!connect(this,SIGNAL(signal_resume()), listThread,SLOT(resume()), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_resume()");
+ if(!connect(this,SIGNAL(signal_skip(quint64)), listThread,SLOT(skip(quint64)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_skip()");
+ if(!connect(this,SIGNAL(signal_setCollisionAction(FileExistsAction)), listThread,SLOT(setAlwaysFileExistsAction(FileExistsAction)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_setCollisionAction()");
+ if(!connect(this,SIGNAL(signal_setFolderColision(FolderExistsAction)), listThread,SLOT(setFolderColision(FolderExistsAction)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_setFolderColision()");
+ if(!connect(this,SIGNAL(signal_removeItems(QList<int>)), listThread,SLOT(removeItems(QList<int>)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_removeItems()");
+ if(!connect(this,SIGNAL(signal_moveItemsOnTop(QList<int>)), listThread,SLOT(moveItemsOnTop(QList<int>)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_moveItemsOnTop()");
+ if(!connect(this,SIGNAL(signal_moveItemsUp(QList<int>)), listThread,SLOT(moveItemsUp(QList<int>)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_moveItemsUp()");
+ if(!connect(this,SIGNAL(signal_moveItemsDown(QList<int>)), listThread,SLOT(moveItemsDown(QList<int>)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_moveItemsDown()");
+ if(!connect(this,SIGNAL(signal_moveItemsOnBottom(QList<int>)), listThread,SLOT(moveItemsOnBottom(QList<int>)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_moveItemsOnBottom()");
+ if(!connect(this,SIGNAL(signal_exportTransferList(QString)), listThread,SLOT(exportTransferList(QString)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_exportTransferList()");
+ if(!connect(this,SIGNAL(signal_importTransferList(QString)), listThread,SLOT(importTransferList(QString)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_importTransferList()");
+ if(!connect(this,SIGNAL(signal_forceMode(CopyMode)), listThread,SLOT(forceMode(CopyMode)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_forceMode()");
+ if(!connect(this,SIGNAL(send_osBufferLimit(uint)), listThread,SLOT(set_osBufferLimit(uint)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_osBufferLimit()");
+ if(!connect(this,SIGNAL(send_setFilters(QList<Filters_rules>,QList<Filters_rules>)),listThread,SLOT(set_setFilters(QList<Filters_rules>,QList<Filters_rules>)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_setFilters()");
+ if(!connect(this,SIGNAL(send_sendNewRenamingRules(QString,QString)),listThread,SLOT(set_sendNewRenamingRules(QString,QString)), Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_sendNewRenamingRules()");
+ if(!connect(&timerActionDone,SIGNAL(timeout()), listThread,SLOT(sendActionDone())))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect timerActionDone");
+ if(!connect(&timerProgression,SIGNAL(timeout()), listThread,SLOT(sendProgression())))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect timerProgression");
+
+ if(!connect(this,SIGNAL(queryOneNewDialog()),SLOT(showOneNewDialog()),Qt::QueuedConnection))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect queryOneNewDialog()");
+}
+
+#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+void copyEngine::updateTheDebugInfo(QStringList newList,QStringList newList2,int numberOfInodeOperation)
+{
+ debugDialogWindow.setTransferThreadList(newList);
+ debugDialogWindow.setTransferList(newList2);
+ debugDialogWindow.setInodeUsage(numberOfInodeOperation);
+}
+#endif
+
+//to send the options panel
+bool copyEngine::getOptionsEngine(QWidget * tempWidget)
+{
+ this->tempWidget=tempWidget;
+ connect(tempWidget, SIGNAL(destroyed()), this, SLOT(resetTempWidget()));
+ ui->setupUi(tempWidget);
+ //conect the ui widget
+/* connect(ui->doRightTransfer, SIGNAL(toggled(bool)), &threadOfTheTransfer, SLOT(setRightTransfer(bool)));
+ connect(ui->keepDate, SIGNAL(toggled(bool)), &threadOfTheTransfer, SLOT(setKeepDate(bool)));
+ connect(ui->blockSize, SIGNAL(valueChanged(int)), &threadOfTheTransfer, SLOT(setBlockSize(int)));*/
+ connect(ui->autoStart, SIGNAL(toggled(bool)), this, SLOT(setAutoStart(bool)));
+ connect(ui->rsync, SIGNAL(toggled(bool)), this, SLOT(setRsync(bool)));
+ connect(ui->checkBoxDestinationFolderExists, SIGNAL(toggled(bool)), this, SLOT(setCheckDestinationFolderExists(bool)));
+ uiIsInstalled=true;
+ setRightTransfer(doRightTransfer);
+ setKeepDate(keepDate);
+ setSpeedLimitation(maxSpeed);
+ setBlockSize(blockSize);
+ setAutoStart(autoStart);
+ setRsync(rsync);
+ setCheckDestinationFolderExists(checkDestinationFolderExists);
+ set_doChecksum(doChecksum);
+ set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible);
+ set_checksumOnlyOnError(checksumOnlyOnError);
+ set_osBuffer(osBuffer);
+ set_osBufferLimited(osBufferLimited);
+ set_osBufferLimit(osBufferLimit);
+ 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, SIGNAL(toggled(bool)), this,SLOT(setRightTransfer(bool)));
+ connect(ui->keepDate, SIGNAL(toggled(bool)), this,SLOT(setKeepDate(bool)));
+ connect(ui->blockSize, SIGNAL(valueChanged(int)), this,SLOT(setBlockSize(int)));
+ connect(ui->autoStart, SIGNAL(toggled(bool)), this,SLOT(setAutoStart(bool)));
+ connect(ui->rsync, SIGNAL(toggled(bool)), this,SLOT(setRsync(bool)));
+ connect(ui->doChecksum, SIGNAL(toggled(bool)), this,SLOT(doChecksum_toggled(bool)));
+ connect(ui->checksumIgnoreIfImpossible, SIGNAL(toggled(bool)), this,SLOT(checksumIgnoreIfImpossible_toggled(bool)));
+ connect(ui->checksumOnlyOnError, SIGNAL(toggled(bool)), this,SLOT(checksumOnlyOnError_toggled(bool)));
+ connect(ui->osBuffer, SIGNAL(toggled(bool)), this,SLOT(osBuffer_toggled(bool)));
+ connect(ui->osBufferLimited, SIGNAL(toggled(bool)), this,SLOT(osBufferLimited_toggled(bool)));
+ connect(ui->osBufferLimit, SIGNAL(editingFinished()), this,SLOT(osBufferLimit_editingFinished()));
+
+ connect(filters,SIGNAL(sendNewFilters(QStringList,QStringList,QStringList,QStringList)),this,SLOT(sendNewFilters()));
+ connect(ui->filters,SIGNAL(clicked()),this,SLOT(showFilterDialog()));
+
+ if(!connect(renamingRules,SIGNAL(sendNewRenamingRules(QString,QString)),this,SLOT(sendNewRenamingRules(QString,QString))))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect sendNewRenamingRules()");
+ if(!connect(ui->renamingRules,SIGNAL(clicked()),this,SLOT(showRenamingRules())))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect renamingRules.clicked()");
+ }
+
+ filters->setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
+ set_setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
+
+ renamingRules->setRenamingRules(firstRenamingRule,otherRenamingRule);
+ emit send_sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
+}
+
+bool copyEngine::haveSameSource(const QStringList &sources)
+{
+ return listThread->haveSameSource(sources);
+}
+
+bool copyEngine::haveSameDestination(const QString &destination)
+{
+ return listThread->haveSameDestination(destination);
+}
+
+bool copyEngine::newCopy(const QStringList &sources)
+{
+ if(forcedMode && mode!=Copy)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"The engine is forced to move, you can't copy with it");
+ QMessageBox::critical(NULL,facilityEngine->translateText("Internal error"),tr("The engine is forced to move, you can't copy with it"));
+ return false;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ QString destination = QFileDialog::getExistingDirectory(interface,facilityEngine->translateText("Select destination directory"),"",QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
+ if(destination.isEmpty() || destination.isNull() || destination=="")
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"Canceled by the user");
+ return false;
+ }
+ return listThread->newCopy(sources,destination);
+}
+
+bool copyEngine::newCopy(const QStringList &sources,const QString &destination)
+{
+ if(forcedMode && mode!=Copy)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"The engine is forced to move, you can't copy with it");
+ QMessageBox::critical(NULL,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 QStringList &sources)
+{
+ if(forcedMode && mode!=Move)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"The engine is forced to copy, you can't move with it");
+ QMessageBox::critical(NULL,facilityEngine->translateText("Internal error"),tr("The engine is forced to copy, you can't move with it"));
+ return false;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ QString destination = QFileDialog::getExistingDirectory(interface,facilityEngine->translateText("Select destination directory"),"",QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
+ if(destination.isEmpty() || destination.isNull() || destination=="")
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"Canceled by the user");
+ return false;
+ }
+ return listThread->newMove(sources,destination);
+}
+
+bool copyEngine::newMove(const QStringList &sources,const QString &destination)
+{
+ if(forcedMode && mode!=Move)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"The engine is forced to copy, you can't move with it");
+ QMessageBox::critical(NULL,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::newTransferList(const QString &file)
+{
+ emit signal_importTransferList(file);
+}
+
+//because direct access to list thread into the main thread can't be do
+quint64 copyEngine::realByteTransfered()
+{
+ return size_for_speed;
+}
+
+//speed limitation
+qint64 copyEngine::getSpeedLimitation()
+{
+ return listThread->getSpeedLimitation();
+}
+
+//get collision action
+QList<QPair<QString,QString> > copyEngine::getCollisionAction()
+{
+ QPair<QString,QString> tempItem;
+ QList<QPair<QString,QString> > list;
+ tempItem.first=facilityEngine->translateText("Ask");tempItem.second="ask";list << tempItem;
+ tempItem.first=facilityEngine->translateText("Skip");tempItem.second="skip";list << tempItem;
+ tempItem.first=facilityEngine->translateText("Overwrite");tempItem.second="overwrite";list << tempItem;
+ tempItem.first=facilityEngine->translateText("Overwrite if newer");tempItem.second="overwriteIfNewer";list << tempItem;
+ tempItem.first=facilityEngine->translateText("Overwrite if the last modification dates are different");tempItem.second="overwriteIfNotSameModificationDate";list << tempItem;
+ tempItem.first=facilityEngine->translateText("Rename");tempItem.second="rename";list << tempItem;
+ return list;
+}
+
+QList<QPair<QString,QString> > copyEngine::getErrorAction()
+{
+ QPair<QString,QString> tempItem;
+ QList<QPair<QString,QString> > list;
+ tempItem.first=facilityEngine->translateText("Ask");tempItem.second="ask";list << tempItem;
+ tempItem.first=facilityEngine->translateText("Skip");tempItem.second="skip";list << tempItem;
+ tempItem.first=facilityEngine->translateText("Put to end of the list");tempItem.second="putToEndOfTheList";list << tempItem;
+ return list;
+}
+
+void copyEngine::setDrive(const QStringList &drives)
+{
+ listThread->setDrive(drives);
+}
+
+/** \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);
+ 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);
+ this->osBuffer=osBuffer;
+}
+
+void copyEngine::set_osBufferLimited(bool osBufferLimited)
+{
+ listThread->set_osBufferLimited(osBufferLimited);
+ if(uiIsInstalled)
+ ui->osBufferLimited->setChecked(osBufferLimited);
+ 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::set_setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions)
+{
+ if(filters!=NULL)
+ {
+ filters->setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions);
+ emit send_setFilters(filters->getInclude(),filters->getExclude());
+ }
+ this->includeStrings=includeStrings;
+ this->includeOptions=includeOptions;
+ this->excludeStrings=excludeStrings;
+ this->excludeOptions=excludeOptions;
+}
+
+void copyEngine::setRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
+{
+ sendNewRenamingRules(firstRenamingRule,otherRenamingRule);
+}
+
+bool copyEngine::userAddFolder(const CopyMode &mode)
+{
+ QString source = QFileDialog::getExistingDirectory(interface,facilityEngine->translateText("Select source directory"),"",QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
+ if(source.isEmpty() || source.isNull() || source=="")
+ return false;
+ if(mode==Copy)
+ return newCopy(QStringList() << source);
+ else
+ return newMove(QStringList() << source);
+}
+
+bool copyEngine::userAddFile(const CopyMode &mode)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ QStringList sources = QFileDialog::getOpenFileNames(
+ interface,
+ facilityEngine->translateText("Select one or more files to open"),
+ "",
+ facilityEngine->translateText("All files")+" (*)");
+ if(sources.isEmpty())
+ return false;
+ if(mode==Copy)
+ return newCopy(sources);
+ else
+ return newMove(sources);
+}
+
+void copyEngine::pause()
+{
+ emit signal_pause();
+}
+
+void copyEngine::resume()
+{
+ emit signal_resume();
+}
+
+void copyEngine::skip(const quint64 &id)
+{
+ emit signal_skip(id);
+}
+
+void copyEngine::cancel()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ stopIt=true;
+ timerProgression.stop();
+ timerActionDone.stop();
+ emit tryCancel();
+}
+
+void copyEngine::removeItems(const QList<int> &ids)
+{
+ emit signal_removeItems(ids);
+}
+
+void copyEngine::moveItemsOnTop(const QList<int> &ids)
+{
+ emit signal_moveItemsOnTop(ids);
+}
+
+void copyEngine::moveItemsUp(const QList<int> &ids)
+{
+ emit signal_moveItemsUp(ids);
+}
+
+void copyEngine::moveItemsDown(const QList<int> &ids)
+{
+ emit signal_moveItemsDown(ids);
+}
+
+void copyEngine::moveItemsOnBottom(const QList<int> &ids)
+{
+ emit signal_moveItemsOnBottom(ids);
+}
+
+/** \brief give the forced mode, to export/import transfer list */
+void copyEngine::forceMode(const CopyMode &mode)
+{
+ if(mode==Move)
+ {
+ listThread->setRsync(false);
+ rsync=false;
+ }
+ if(uiIsInstalled)
+ ui->rsync->setEnabled(mode==Copy);
+ if(forcedMode)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Mode forced previously"));
+ QMessageBox::critical(NULL,facilityEngine->translateText("Internal error"),tr("The mode have been forced previously, it's internal error, please report it"));
+ return;
+ }
+ if(mode==Copy)
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Force mode to copy"));
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Force mode to move"));
+ this->mode=mode;
+ forcedMode=true;
+ emit signal_forceMode(mode);
+}
+
+void copyEngine::exportTransferList()
+{
+ QString fileName = QFileDialog::getSaveFileName(NULL,facilityEngine->translateText("Save transfer list"),"transfer-list.lst",facilityEngine->translateText("Transfer list")+" (*.lst)");
+ if(fileName.isEmpty())
+ return;
+ emit signal_exportTransferList(fileName);
+}
+
+void copyEngine::importTransferList()
+{
+ QString fileName = QFileDialog::getOpenFileName(NULL,facilityEngine->translateText("Open transfer list"),"transfer-list.lst",facilityEngine->translateText("Transfer list")+" (*.lst)");
+ if(fileName.isEmpty())
+ return;
+ emit signal_importTransferList(fileName);
+}
+
+void copyEngine::warningTransferList(const QString &warning)
+{
+ QMessageBox::warning(interface,facilityEngine->translateText("Error"),warning);
+}
+
+void copyEngine::errorTransferList(const QString &error)
+{
+ QMessageBox::critical(interface,facilityEngine->translateText("Error"),error);
+}
+
+bool copyEngine::setSpeedLimitation(const qint64 &speedLimitation)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"maxSpeed: "+QString::number(speedLimitation));
+ maxSpeed=speedLimitation;
+ return listThread->setSpeedLimitation(speedLimitation);
+}
+
+void copyEngine::setCollisionAction(const QString &action)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"action: "+action);
+ if(action=="skip")
+ alwaysDoThisActionForFileExists=FileExists_Skip;
+ else if(action=="overwrite")
+ alwaysDoThisActionForFileExists=FileExists_Overwrite;
+ else if(action=="overwriteIfNewer")
+ alwaysDoThisActionForFileExists=FileExists_OverwriteIfNewer;
+ else if(action=="overwriteIfNotSameModificationDate")
+ alwaysDoThisActionForFileExists=FileExists_OverwriteIfNotSameModificationDate;
+ else if(action=="rename")
+ alwaysDoThisActionForFileExists=FileExists_Rename;
+ else
+ alwaysDoThisActionForFileExists=FileExists_NotSet;
+ emit signal_setCollisionAction(alwaysDoThisActionForFileExists);
+}
+
+void copyEngine::setErrorAction(const QString &action)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"action: "+action);
+ if(action=="skip")
+ alwaysDoThisActionForFileError=FileError_Skip;
+ else if(action=="putToEndOfTheList")
+ alwaysDoThisActionForFileError=FileError_PutToEndOfTheList;
+ else
+ alwaysDoThisActionForFileError=FileError_NotSet;
+}
+
+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);
+ listThread->setBlockSize(blockSize);
+}
+
+//set auto start
+void copyEngine::setAutoStart(const bool autoStart)
+{
+ this->autoStart=autoStart;
+ if(uiIsInstalled)
+ ui->autoStart->setChecked(autoStart);
+ listThread->setAutoStart(autoStart);
+}
+
+/// \brief set rsync
+void copyEngine::setRsync(const bool rsync)
+{
+ this->rsync=rsync;
+ if(uiIsInstalled)
+ {
+ ui->rsync->setChecked(rsync);
+ ui->rsync->setEnabled(forcedMode && mode==Copy);
+ ui->label_rsync->setEnabled(forcedMode && mode==Copy);
+ }
+ listThread->setRsync(rsync);
+}
+
+//set check destination folder
+void copyEngine::setCheckDestinationFolderExists(const bool checkDestinationFolderExists)
+{
+ this->checkDestinationFolderExists=checkDestinationFolderExists;
+ if(uiIsInstalled)
+ ui->checkBoxDestinationFolderExists->setChecked(checkDestinationFolderExists);
+ listThread->setCheckDestinationFolderExists(checkDestinationFolderExists);
+}
+
+//reset widget
+void copyEngine::resetTempWidget()
+{
+ tempWidget=NULL;
+}
+
+void copyEngine::on_comboBoxFolderColision_currentIndexChanged(int index)
+{
+ switch(index)
+ {
+ case 0:
+ setComboBoxFolderColision(FolderExists_NotSet,false);
+ break;
+ case 1:
+ setComboBoxFolderColision(FolderExists_Merge,false);
+ break;
+ case 2:
+ setComboBoxFolderColision(FolderExists_Skip,false);
+ break;
+ case 3:
+ setComboBoxFolderColision(FolderExists_Rename,false);
+ break;
+ }
+}
+
+void copyEngine::on_comboBoxFolderError_currentIndexChanged(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(DebugLevel_Notice,"start, retranslate the widget options");
+ if(tempWidget!=NULL)
+ ui->retranslateUi(tempWidget);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"ui not loaded!");
+}
+
+void copyEngine::setComboBoxFolderColision(FolderExistsAction action,bool changeComboBox)
+{
+ alwaysDoThisActionForFolderExists=action;
+ emit signal_setFolderColision(alwaysDoThisActionForFolderExists);
+ if(!changeComboBox || !uiIsInstalled)
+ return;
+ switch(action)
+ {
+ case FolderExists_Merge:
+ ui->comboBoxFolderColision->setCurrentIndex(1);
+ break;
+ case FolderExists_Skip:
+ ui->comboBoxFolderColision->setCurrentIndex(2);
+ break;
+ case FolderExists_Rename:
+ ui->comboBoxFolderColision->setCurrentIndex(3);
+ break;
+ default:
+ ui->comboBoxFolderColision->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);
+ ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
+}
+
+void copyEngine::osBufferLimited_toggled(bool osBufferLimited)
+{
+ listThread->set_osBufferLimited(osBufferLimited);
+ ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
+}
+
+void copyEngine::osBufferLimit_editingFinished()
+{
+ emit send_osBufferLimit(ui->osBufferLimit->value());
+}
+
+void copyEngine::showFilterDialog()
+{
+ if(filters!=NULL)
+ filters->exec();
+}
+
+void copyEngine::sendNewFilters()
+{
+ if(filters!=NULL)
+ emit send_setFilters(filters->getInclude(),filters->getExclude());
+}
+
+void copyEngine::sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
+{
+ ULTRACOPIER_DEBUGCONSOLE(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, can't access to the filters"));
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"options not loaded");
+ return;
+ }
+ renamingRules->exec();
+}
+
+void copyEngine::get_realBytesTransfered(quint64 realBytesTransfered)
+{
+ size_for_speed=realBytesTransfered;
+}
+
+void copyEngine::newActionInProgess(EngineActionInProgress action)
+{
+ if(action==Idle)
+ {
+ timerProgression.stop();
+ timerActionDone.stop();
+ }
+ else
+ {
+ timerProgression.start();
+ timerActionDone.start();
+ }
+}
diff --git a/plugins-alternative/CopyEngine/Rsync/copyEngine.h b/plugins-alternative/CopyEngine/Rsync/copyEngine.h
new file mode 100755
index 0000000..5afa8b2
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/copyEngine.h
@@ -0,0 +1,362 @@
+/** \file copyEngine.h
+\brief Define the copy engine
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#include <QObject>
+#include <QList>
+#include <QStringList>
+#include <QFileInfo>
+#include <QFile>
+#include <QFileDialog>
+#include <QMessageBox>
+
+#include "../../../interface/PluginInterface_CopyEngine.h"
+#include "fileErrorDialog.h"
+#include "fileExistsDialog.h"
+#include "folderExistsDialog.h"
+#include "fileIsSameDialog.h"
+#include "ui_options.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 options;
+}
+
+/// \brief the implementation of copy engine plugin, manage directly few stuff, else pass to ListThread class.
+class copyEngine : public PluginInterface_CopyEngine
+{
+ Q_OBJECT
+public:
+ copyEngine(FacilityInterface * facilityEngine);
+ ~copyEngine();
+ void connectTheSignalsSlots();
+private:
+ ListThread *listThread;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ debugDialog debugDialogWindow;
+ #endif
+ QWidget * tempWidget;
+ Ui::options * ui;
+ bool uiIsInstalled;
+ QWidget * interface;
+ Filters * filters;
+ RenamingRules * renamingRules;
+ FacilityInterface * facilityEngine;
+ int maxSpeed;
+ bool doRightTransfer;
+ bool keepDate;
+ int blockSize;
+ bool autoStart;
+ bool rsync;
+ bool checkDestinationFolderExists;
+ FileExistsAction alwaysDoThisActionForFileExists;
+ FileErrorAction alwaysDoThisActionForFileError;
+ FileErrorAction alwaysDoThisActionForFolderError;
+ FolderExistsAction alwaysDoThisActionForFolderExists;
+ bool dialogIsOpen;
+ volatile bool stopIt;
+ /// \brief error queue
+ struct errorQueueItem
+ {
+ TransferThread * transfer; ///< NULL if send by scan thread
+ scanFileOrFolder * scan; ///< NULL if send by transfer thread
+ bool mkPath;
+ bool rmPath;
+ QFileInfo inode;
+ QString errorString;
+ };
+ QList<errorQueueItem> errorQueue;
+ /// \brief already exists queue
+ struct alreadyExistsQueueItem
+ {
+ TransferThread * transfer; ///< NULL if send by scan thread
+ scanFileOrFolder * scan; ///< NULL if send by transfer thread
+ QFileInfo source;
+ QFileInfo destination;
+ bool isSame;
+ };
+ QList<alreadyExistsQueueItem> alreadyExistsQueue;
+ //temp variable
+ int error_index,loop_size;
+ FileErrorAction tempFileErrorAction;
+ FolderExistsAction tempFolderExistsAction;
+ FileExistsAction tempFileExistsAction;
+ quint64 size_for_speed;//because direct access to list thread into the main thread can't be do
+ CopyMode mode;
+ bool forcedMode;
+
+ bool doChecksum;
+ bool checksumIgnoreIfImpossible;
+ bool checksumOnlyOnError;
+ bool osBuffer;
+ bool osBufferLimited;
+ unsigned int osBufferLimit;
+ QStringList includeStrings,includeOptions,excludeStrings,excludeOptions;
+ QString firstRenamingRule;
+ QString otherRenamingRule;
+
+ //send action done timer
+ QTimer timerActionDone;
+ //send progression timer
+ QTimer timerProgression;
+private slots:
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ void updateTheDebugInfo(QStringList,QStringList,int);
+ #endif
+ //dialog message
+ /// \note Can be call without queue because all call will be serialized
+ void fileAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread,bool isCalledByShowOneNewDialog=false);
+ /// \note Can be call without queue because all call will be serialized
+ void errorOnFile(QFileInfo fileInfo,QString errorString,TransferThread * thread,bool isCalledByShowOneNewDialog=false);
+ /// \note Can be call without queue because all call will be serialized
+ void folderAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,scanFileOrFolder * thread,bool isCalledByShowOneNewDialog=false);
+ /// \note Can be call without queue because all call will be serialized
+ void errorOnFolder(QFileInfo fileInfo,QString errorString,scanFileOrFolder * thread,bool isCalledByShowOneNewDialog=false);
+ //mkpath event
+ void mkPathErrorOnFolder(QFileInfo,QString,bool isCalledByShowOneNewDialog=false);
+ //rmpath event
+ void rmPathErrorOnFolder(QFileInfo,QString,bool isCalledByShowOneNewDialog=false);
+ //show one new dialog if needed
+ void showOneNewDialog();
+ void sendNewFilters();
+
+ void doChecksum_toggled(bool);
+ void checksumOnlyOnError_toggled(bool);
+ void checksumIgnoreIfImpossible_toggled(bool);
+ void osBuffer_toggled(bool);
+ void osBufferLimited_toggled(bool);
+ void osBufferLimit_editingFinished();
+ void showFilterDialog();
+ void sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
+ void showRenamingRules();
+ void get_realBytesTransfered(quint64 realBytesTransfered);
+ void newActionInProgess(EngineActionInProgress);
+public:
+ /** \brief to send the options panel
+ * \return return false if have not the options
+ * \param tempWidget the widget to generate on it the options */
+ bool getOptionsEngine(QWidget * tempWidget);
+ /** \brief to have interface widget to do modal dialog
+ * \param interface to have the widget of the interface, useful for modal dialog */
+ void setInterfacePointer(QWidget * interface);
+ //return empty if multiple
+ /** \brief compare the current sources of the copy, with the passed arguments
+ * \param sources the sources list to compares with the current sources list
+ * \return true if have same sources, else false (or empty) */
+ bool haveSameSource(const QStringList &sources);
+ /** \brief compare the current destination of the copy, with the passed arguments
+ * \param destination the destination to compares with the current destination
+ * \return true if have same destination, else false (or empty) */
+ bool haveSameDestination(const QString &destination);
+ //external soft like file browser have send copy/move list to do
+ /** \brief send copy without destination, ask the destination
+ * \param sources the sources list to copy
+ * \return true if the copy have been accepted */
+ bool newCopy(const QStringList &sources);
+ /** \brief send copy with destination
+ * \param sources the sources list to copy
+ * \param destination the destination to copy
+ * \return true if the copy have been accepted */
+ bool newCopy(const QStringList &sources,const QString &destination);
+ /** \brief send move without destination, ask the destination
+ * \param sources the sources list to move
+ * \return true if the move have been accepted */
+ bool newMove(const QStringList &sources);
+ /** \brief send move without destination, ask the destination
+ * \param sources the sources list to move
+ * \param destination the destination to move
+ * \return true if the move have been accepted */
+ bool newMove(const QStringList &sources,const QString &destination);
+ /** \brief send the new transfer list
+ * \param file the transfer list */
+ void newTransferList(const QString &file);
+
+ /** \brief to get byte read, use by Ultracopier for the speed calculation
+ * real size transfered to right speed calculation */
+ quint64 realByteTransfered();
+ //speed limitation
+ /** \brief get the speed limitation
+ * < -1 if not able, 0 if disabled */
+ qint64 getSpeedLimitation();
+ //get collision action
+ /** \brief get the collision action list */
+ QList<QPair<QString,QString> > getCollisionAction();
+ /** \brief get the collision error list */
+ QList<QPair<QString,QString> > getErrorAction();
+
+ /** \brief to set drives detected
+ * specific to this copy engine */
+ void setDrive(const QStringList &drives);
+
+ /** \brief to sync the transfer list
+ * Used when the interface is changed, useful to minimize the memory size */
+ void syncTransferList();
+
+ void set_doChecksum(bool doChecksum);
+ void set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible);
+ void set_checksumOnlyOnError(bool checksumOnlyOnError);
+ void set_osBuffer(bool osBuffer);
+ void set_osBufferLimited(bool osBufferLimited);
+ void set_osBufferLimit(unsigned int osBufferLimit);
+ void set_setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions);
+ void setRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
+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 CopyMode &mode);
+ /** \brief add file called on the interface
+ * Used by manual adding */
+ bool userAddFile(const CopyMode &mode);
+ //action on the copy
+ /// \brief put the transfer in pause
+ void pause();
+ /// \brief resume the transfer
+ void resume();
+ /** \brief skip one transfer entry
+ * \param id id of the file to remove */
+ void skip(const quint64 &id);
+ /// \brief cancel all the transfer
+ void cancel();
+ //edit the transfer list
+ /** \brief remove the selected item
+ * \param ids ids is the id list of the selected items */
+ void removeItems(const QList<int> &ids);
+ /** \brief move on top of the list the selected item
+ * \param ids ids is the id list of the selected items */
+ void moveItemsOnTop(const QList<int> &ids);
+ /** \brief move up the list the selected item
+ * \param ids ids is the id list of the selected items */
+ void moveItemsUp(const QList<int> &ids);
+ /** \brief move down the list the selected item
+ * \param ids ids is the id list of the selected items */
+ void moveItemsDown(const QList<int> &ids);
+ /** \brief move on bottom of the list the selected item
+ * \param ids ids is the id list of the selected items */
+ void moveItemsOnBottom(const QList<int> &ids);
+
+ /** \brief give the forced mode, to export/import transfer list */
+ void forceMode(const CopyMode &mode);
+ /// \brief export the transfer list into a file
+ void exportTransferList();
+ /// \brief import the transfer list into a file
+ void importTransferList();
+
+ /** \brief to set the speed limitation
+ * -1 if not able, 0 if disabled */
+ bool setSpeedLimitation(const qint64 &speedLimitation);
+ //action
+ /// \brief to set the collision action
+ void setCollisionAction(const QString &action);
+ /// \brief to set the error action
+ void setErrorAction(const QString &action);
+
+ // 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);
+ /// \brief set auto start
+ void setAutoStart(const bool autoStart);
+ /// \brief set rsync
+ void setRsync(const bool rsync);
+ /// \brief set if need check if the destination folder exists
+ void setCheckDestinationFolderExists(const bool checkDestinationFolderExists);
+ /// \brief reset widget
+ void resetTempWidget();
+ //autoconnect
+ void on_comboBoxFolderColision_currentIndexChanged(int index);
+ void on_comboBoxFolderError_currentIndexChanged(int index);
+ /// \brief need retranslate the insterface
+ void newLanguageLoaded();
+private slots:
+ void setComboBoxFolderColision(FolderExistsAction action,bool changeComboBox=true);
+ void setComboBoxFolderError(FileErrorAction action,bool changeComboBox=true);
+ void warningTransferList(const QString &warning);
+ void errorTransferList(const QString &error);
+signals:
+ //send information about the copy
+ void actionInProgess(EngineActionInProgress); //should update interface information on this event
+
+ void newActionOnList(const QList<returnActionOnCopyList> &);///very important, need be temporized to group the modification to do and not flood the interface
+ void syncReady();
+
+ /** \brief to get the progression for a specific file
+ * \param id the id of the transfer, id send during population the transfer list
+ * first = current transfered byte, second = byte to transfer */
+ void pushFileProgression(const QList<ProgressionItem> &progressionList);
+ //get information about the copy
+ /** \brief to get the general progression
+ * first = current transfered byte, second = byte to transfer */
+ void pushGeneralProgression(const quint64 &,const quint64 &);
+
+ void newFolderListing(const QString &path);
+ void newCollisionAction(const QString &action);
+ void newErrorAction(const QString &action);
+ void isInPause(bool);
+
+ //action on the copy
+ void signal_pause();
+ void signal_resume();
+ void signal_skip(const quint64 &id);
+
+ //edit the transfer list
+ void signal_removeItems(const QList<int> &ids);
+ void signal_moveItemsOnTop(const QList<int> &ids);
+ void signal_moveItemsUp(const QList<int> &ids);
+ void signal_moveItemsDown(const QList<int> &ids);
+ void signal_moveItemsOnBottom(const QList<int> &ids);
+
+ void signal_forceMode(const CopyMode &mode);
+ void signal_exportTransferList(const QString &fileName);
+ void signal_importTransferList(const QString &fileName);
+
+ //action
+ void signal_setCollisionAction(FileExistsAction alwaysDoThisActionForFileExists);
+ void signal_setComboBoxFolderColision(FolderExistsAction action);
+ void signal_setFolderColision(FolderExistsAction action);
+
+ //when the cancel is clicked on copy engine dialog
+ void cancelAll();
+
+ //internal cancel
+ void tryCancel();
+
+ //when can be deleted
+ void canBeDeleted();
+
+ //send error occurred
+ void error(const QString &path,const quint64 &size,const QDateTime &mtime,const QString &error);
+ //for the extra logging
+ void rmPath(const QString &path);
+ void mkPath(const QString &path);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ /// \brief To debug source
+ void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
+ #endif
+
+ //other signals
+ void queryOneNewDialog();
+
+ void send_osBufferLimit(const unsigned int &osBufferLimit);
+ void send_setFilters(const QList<Filters_rules> &include,const QList<Filters_rules> &exclude);
+ void send_sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
+};
+
+#endif // COPY_ENGINE_H
diff --git a/plugins-alternative/CopyEngine/Rsync/copyEngine.pro b/plugins-alternative/CopyEngine/Rsync/copyEngine.pro
new file mode 100644
index 0000000..13ab523
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/copyEngine.pro
@@ -0,0 +1,82 @@
+TEMPLATE = lib
+CONFIG += plugin
+HEADERS = copyEngine.h \
+ StructEnumDefinition.h \
+ scanFileOrFolder.h \
+ fileErrorDialog.h \
+ fileExistsDialog.h \
+ fileIsSameDialog.h \
+ factory.h \
+ StructEnumDefinition_CopyEngine.h \
+ DebugEngineMacro.h \
+ Variable.h \
+ debugDialog.h \
+ TransferThread.h \
+ ReadThread.h \
+ WriteThread.h \
+ RmPath.h \
+ MkPath.h \
+ folderExistsDialog.h \
+ AvancedQFile.h \
+ ListThread.h \
+ ../../../interface/PluginInterface_CopyEngine.h \
+ ../../../interface/OptionInterface.h \
+ ../../../interface/FacilityInterface.h \
+ Filters.h \
+ FilterRules.h \
+ RenamingRules.h
+SOURCES = copyEngine.cpp \
+ scanFileOrFolder.cpp \
+ fileErrorDialog.cpp \
+ fileExistsDialog.cpp \
+ fileIsSameDialog.cpp \
+ factory.cpp \
+ debugDialog.cpp \
+ TransferThread.cpp \
+ ReadThread.cpp \
+ WriteThread.cpp \
+ RmPath.cpp \
+ MkPath.cpp \
+ folderExistsDialog.cpp \
+ AvancedQFile.cpp \
+ copyEngine-collision-and-error.cpp \
+ ListThread.cpp \
+ Filters.cpp \
+ FilterRules.cpp \
+ RenamingRules.cpp \
+ ListThread_InodeAction.cpp
+TARGET = $$qtLibraryTarget(copyEngine)
+TRANSLATIONS += Languages/fr/translation.ts \
+ Languages/ar/translation.ts \
+ Languages/zh/translation.ts \
+ Languages/es/translation.ts \
+ Languages/de/translation.ts \
+ Languages/el/translation.ts \
+ Languages/it/translation.ts \
+ Languages/ja/translation.ts \
+ Languages/id/translation.ts \
+ Languages/pl/translation.ts \
+ Languages/ru/translation.ts \
+ Languages/tr/translation.ts \
+ Languages/th/translation.ts \
+ Languages/hi/translation.ts \
+ Languages/nl/translation.ts \
+ Languages/no/translation.ts \
+ Languages/pt/translation.ts \
+ Languages/ko/translation.ts
+
+FORMS += \
+ options.ui \
+ fileErrorDialog.ui \
+ fileExistsDialog.ui \
+ fileIsSameDialog.ui \
+ debugDialog.ui \
+ folderExistsDialog.ui \
+ Filters.ui \
+ FilterRules.ui \
+ RenamingRules.ui
+
+OTHER_FILES += informations.xml
+
+RESOURCES += \
+ resources.qrc
diff --git a/plugins-alternative/CopyEngine/Rsync/debugDialog.cpp b/plugins-alternative/CopyEngine/Rsync/debugDialog.cpp
new file mode 100644
index 0000000..a03aec0
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/debugDialog.cpp
@@ -0,0 +1,70 @@
+/** \file debugDialog.cpp
+\brief Define the dialog to have debug information
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#include "debugDialog.h"
+#include "ui_debugDialog.h"
+
+#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+
+debugDialog::debugDialog(QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::debugDialog)
+{
+ ui->setupUi(this);
+}
+
+debugDialog::~debugDialog()
+{
+ delete ui;
+}
+
+void debugDialog::setTransferList(const QStringList &list)
+{
+ if(list.size()==ui->tranferList->count())
+ {
+ int index=0;
+ while(index<list.size())
+ {
+ ui->tranferList->item(index)->setText(list.at(index));
+ index++;
+ }
+ }
+ else
+ {
+ ui->tranferList->clear();
+ ui->tranferList->addItems(list);
+ }
+}
+
+void debugDialog::setActiveTransfer(int activeTransfer)
+{
+ ui->spinBoxActiveTransfer->setValue(activeTransfer);
+}
+
+void debugDialog::setInodeUsage(int inodeUsage)
+{
+ ui->spinBoxNumberOfInode->setValue(inodeUsage);
+}
+
+void debugDialog::setTransferThreadList(const QStringList &list)
+{
+ if(list.size()==ui->transferThreadList->count())
+ {
+ int index=0;
+ while(index<list.size())
+ {
+ ui->transferThreadList->item(index)->setText(list.at(index));
+ index++;
+ }
+ }
+ else
+ {
+ ui->transferThreadList->clear();
+ ui->transferThreadList->addItems(list);
+ }
+}
+
+#endif
diff --git a/plugins-alternative/CopyEngine/Rsync/debugDialog.h b/plugins-alternative/CopyEngine/Rsync/debugDialog.h
new file mode 100644
index 0000000..3d48857
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/debugDialog.h
@@ -0,0 +1,40 @@
+/** \file debugDialog.h
+\brief Define the dialog to have debug information
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#ifndef DEBUGDAILOG_H
+#define DEBUGDAILOG_H
+
+#include "Environment.h"
+
+#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+#include <QWidget>
+
+namespace Ui {
+ class debugDialog;
+}
+
+/// \brief class to the dialog to have debug information
+class debugDialog : public QWidget
+{
+ Q_OBJECT
+public:
+ explicit debugDialog(QWidget *parent = 0);
+ ~debugDialog();
+ /// \brief to set the transfer list, limited in result to not slow down the application
+ void setTransferList(const QStringList &list);
+ /// \brief show the transfer thread, it show be a thread pool in normal time
+ void setTransferThreadList(const QStringList &list);
+ /// \brief show how many transfer is active
+ void setActiveTransfer(int activeTransfer);
+ /// \brief show many many inode is manipulated
+ void setInodeUsage(int inodeUsage);
+private:
+ Ui::debugDialog *ui;
+};
+
+#endif // ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+
+#endif // DEBUGDAILOG_H
diff --git a/plugins-alternative/CopyEngine/Rsync/debugDialog.ui b/plugins-alternative/CopyEngine/Rsync/debugDialog.ui
new file mode 100644
index 0000000..0df03be
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/debugDialog.ui
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>debugDialog</class>
+ <widget class="QWidget" name="debugDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>665</width>
+ <height>392</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string notr="true">Monitor</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string notr="true">Transfer thread</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <item>
+ <widget class="QListWidget" name="transferThreadList">
+ <property name="uniformItemSizes">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox_2">
+ <property name="title">
+ <string notr="true">Transfer list</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QListWidget" name="tranferList">
+ <property name="uniformItemSizes">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox_3">
+ <property name="title">
+ <string notr="true">Variables</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string notr="true">Active transfer:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QSpinBox" name="spinBoxActiveTransfer">
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ <property name="maximum">
+ <number>9999</number>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string notr="true">Number of inode manipuled:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QSpinBox" name="spinBoxNumberOfInode">
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ <property name="maximum">
+ <number>9999</number>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/plugins-alternative/CopyEngine/Rsync/documentation.dox b/plugins-alternative/CopyEngine/Rsync/documentation.dox
new file mode 100755
index 0000000..2ff6edd
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/documentation.dox
@@ -0,0 +1,42 @@
+/* -*- mode: C++ ; c-file-style: "stroustrup" -*- **/
+
+/*
+ This file contains NO source code, just some documentation for doxygen to
+ parse.
+*/
+
+/*!
+ \mainpage Copy engine 0.3
+
+ \section mainpage_overview Overview
+
+ The rsync copy engine for Ultracopier 0.3. Support file/folder, copy/move, ...\n
+ Thanks to this engine, Ultracopier is transformed into GUI + rsync.
+ More informations on <a href="http://ultracopier-wiki.first-world.info/">the wiki of ultracopier</a>. Is part of Ultracopier 0.3 project.
+
+ \section mainpage_platforms Platforms
+
+ This plugin might be usable in all environments where you find Qt 4, but Gcc is requiered for some part.\n
+ This plugin requires Qt 4.5.x or newer. Tested on Qt 4.7. Due to optimization Qt 4.8 usage will be better.\n
+ To be compatible with the official Ultracopier plugins, you need compil it with Gcc, Qt4.8, and same env as Ultracopier have been compiled, see the documentation.
+
+ \section mainpage_downloads Downloads
+
+ You can found link on <a href="http://ultracopier.first-world.info/">Ultracopier (Supercopier/Teracopy)</a> project page, via git, snapshot sources, ...
+
+ \section mainpage_algorithm Algorithm
+
+ Like say previously you will have more informations on the wiki.\n
+ Then file transfer is done via pipe mecamism system:\n
+ <ul>
+ <li>push at no blocking into table up to the table is full, after is blocked up to one entry is free</li>
+ <li>Other thread read the table up to have no more data, then is blocked</li>
+ </ul>
+ The transfer thread do listing of the folder, removing folder, make folder is one thread for each.\n
+ The transfer list, have thread pool to do the inode operation (open, close, set date, ...). Do all inode operation in parallele, but transfer the data as sequential.
+
+ \section license GPL Version 3
+ The code source is under GPL3. The image is extacted from Oxygen icon pack of KDE4.
+
+*/
+
diff --git a/plugins-alternative/CopyEngine/Rsync/factory.cpp b/plugins-alternative/CopyEngine/Rsync/factory.cpp
new file mode 100644
index 0000000..7ed27d4
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/factory.cpp
@@ -0,0 +1,420 @@
+/** \file factory.cpp
+\brief Define the factory to create new instance
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#include <QtCore>
+#include <QFileDialog>
+
+#include "factory.h"
+
+Factory::Factory() :
+ ui(new Ui::options())
+{
+ tempWidget=new QWidget();
+ ui->setupUi(tempWidget);
+ errorFound=false;
+ optionsEngine=NULL;
+ filters=new Filters(tempWidget);
+ renamingRules=new RenamingRules(tempWidget);
+ #if defined (Q_OS_WIN32)
+ QFileInfoList temp=QDir::drives();
+ for (int i = 0; i < temp.size(); ++i) {
+ mountSysPoint<<temp.at(i).filePath();
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"mountSysPoint: "+mountSysPoint.join(";"));
+ #elif defined (Q_OS_LINUX)
+ connect(&mount,SIGNAL(error(QProcess::ProcessError)), this,SLOT(error(QProcess::ProcessError)));
+ connect(&mount,SIGNAL(finished(int,QProcess::ExitStatus)), this,SLOT(finished(int,QProcess::ExitStatus)));
+ connect(&mount,SIGNAL(readyReadStandardOutput()), this,SLOT(readyReadStandardOutput()));
+ connect(&mount,SIGNAL(readyReadStandardError()), this,SLOT(readyReadStandardError()));
+ mount.start("mount");
+ #endif
+ connect(ui->doRightTransfer, SIGNAL(toggled(bool)), this,SLOT(setDoRightTransfer(bool)));
+ connect(ui->keepDate, SIGNAL(toggled(bool)), this,SLOT(setKeepDate(bool)));
+ connect(ui->blockSize, SIGNAL(valueChanged(int)), this,SLOT(setBlockSize(int)));
+ connect(ui->autoStart, SIGNAL(toggled(bool)), this,SLOT(setAutoStart(bool)));
+ connect(ui->rsync, SIGNAL(toggled(bool)), this,SLOT(setRsync(bool)));
+ connect(ui->doChecksum, SIGNAL(toggled(bool)), this,SLOT(doChecksum_toggled(bool)));
+ connect(ui->checksumIgnoreIfImpossible, SIGNAL(toggled(bool)), this,SLOT(checksumIgnoreIfImpossible_toggled(bool)));
+ connect(ui->checksumOnlyOnError, SIGNAL(toggled(bool)), this,SLOT(checksumOnlyOnError_toggled(bool)));
+ connect(ui->osBuffer, SIGNAL(toggled(bool)), this,SLOT(osBuffer_toggled(bool)));
+ connect(ui->osBufferLimited, SIGNAL(toggled(bool)), this,SLOT(osBufferLimited_toggled(bool)));
+ connect(ui->osBufferLimit, SIGNAL(editingFinished()), this,SLOT(osBufferLimit_editingFinished()));
+
+ connect(filters,SIGNAL(sendNewFilters(QStringList,QStringList,QStringList,QStringList)),this,SLOT(sendNewFilters(QStringList,QStringList,QStringList,QStringList)));
+ connect(ui->filters,SIGNAL(clicked()),this,SLOT(showFilterDialog()));
+ connect(renamingRules,SIGNAL(sendNewRenamingRules(QString,QString)),this,SLOT(sendNewRenamingRules(QString,QString)));
+ connect(ui->renamingRules,SIGNAL(clicked()),this,SLOT(showRenamingRules()));
+
+ ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
+}
+
+Factory::~Factory()
+{
+ delete renamingRules;
+ delete filters;
+ delete ui;
+}
+
+PluginInterface_CopyEngine * Factory::getInstance()
+{
+ copyEngine *realObject=new copyEngine(facilityEngine);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ connect(realObject,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)));
+ #endif
+ realObject->connectTheSignalsSlots();
+ realObject->setDrive(mountSysPoint);
+ PluginInterface_CopyEngine * newTransferEngine=realObject;
+ connect(this,SIGNAL(reloadLanguage()),newTransferEngine,SLOT(newLanguageLoaded()));
+ realObject->setRightTransfer( optionsEngine->getOptionValue("doRightTransfer").toBool());
+ realObject->setKeepDate( optionsEngine->getOptionValue("keepDate").toBool());
+ realObject->setBlockSize( optionsEngine->getOptionValue("blockSize").toInt());
+ realObject->setAutoStart( optionsEngine->getOptionValue("autoStart").toBool());
+ realObject->setRsync( optionsEngine->getOptionValue("rsync").toBool());
+ realObject->on_comboBoxFolderColision_currentIndexChanged(ui->comboBoxFolderColision->currentIndex());
+ realObject->on_comboBoxFolderError_currentIndexChanged(ui->comboBoxFolderError->currentIndex());
+ realObject->setCheckDestinationFolderExists( optionsEngine->getOptionValue("checkDestinationFolder").toBool());
+
+ realObject->set_doChecksum(optionsEngine->getOptionValue("doChecksum").toBool());
+ realObject->set_checksumIgnoreIfImpossible(optionsEngine->getOptionValue("checksumIgnoreIfImpossible").toBool());
+ realObject->set_checksumOnlyOnError(optionsEngine->getOptionValue("checksumOnlyOnError").toBool());
+ realObject->set_osBuffer(optionsEngine->getOptionValue("osBuffer").toBool());
+ realObject->set_osBufferLimited(optionsEngine->getOptionValue("osBufferLimited").toBool());
+ realObject->set_osBufferLimit(optionsEngine->getOptionValue("osBufferLimit").toUInt());
+ realObject->set_setFilters(optionsEngine->getOptionValue("includeStrings").toStringList(),
+ optionsEngine->getOptionValue("includeOptions").toStringList(),
+ optionsEngine->getOptionValue("excludeStrings").toStringList(),
+ optionsEngine->getOptionValue("excludeOptions").toStringList()
+ );
+ realObject->setRenamingRules(optionsEngine->getOptionValue("firstRenamingRule").toString(),optionsEngine->getOptionValue("otherRenamingRule").toString());
+ return newTransferEngine;
+}
+
+void Factory::setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityInterface,const bool &portableVersion)
+{
+ ULTRACOPIER_DEBUGCONSOLE(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(DebugLevel_Information,"Unable to change date time of files, only gcc is supported");
+ #endif
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,COMPILERINFO);
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"MAX BUFFER BLOCK: "+QString::number(ULTRACOPIER_PLUGIN_MAXBUFFERBLOCK));
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"MIN TIMER INTERVAL: "+QString::number(ULTRACOPIER_PLUGIN_MINTIMERINTERVAL));
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"MAX TIMER INTERVAL: "+QString::number(ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL));
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"NUM SEM SPEED MANAGEMENT: "+QString::number(ULTRACOPIER_PLUGIN_NUMSEMSPEEDMANAGEMENT));
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"MAX PARALLEL INODE OPT: "+QString::number(ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT));
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"MAX PARALLEL TRANFER: "+QString::number(ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER));
+ #if defined (ULTRACOPIER_PLUGIN_CHECKLISTTYPE)
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"CHECK LIST TYPE set");
+ #else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"CHECK LIST TYPE not set");
+ #endif
+ if(options!=NULL)
+ {
+ optionsEngine=options;
+ //load the options
+ QList<QPair<QString, QVariant> > KeysList;
+ KeysList.append(qMakePair(QString("doRightTransfer"),QVariant(true)));
+ KeysList.append(qMakePair(QString("keepDate"),QVariant(true)));
+ KeysList.append(qMakePair(QString("blockSize"),QVariant(1024)));//1024KB as default
+ KeysList.append(qMakePair(QString("autoStart"),QVariant(true)));
+ KeysList.append(qMakePair(QString("rsync"),QVariant(true)));
+ KeysList.append(qMakePair(QString("folderError"),QVariant(0)));
+ KeysList.append(qMakePair(QString("folderColision"),QVariant(0)));
+ KeysList.append(qMakePair(QString("checkDestinationFolder"),QVariant(true)));
+ KeysList.append(qMakePair(QString("includeStrings"),QVariant(QStringList())));
+ KeysList.append(qMakePair(QString("includeOptions"),QVariant(QStringList())));
+ KeysList.append(qMakePair(QString("excludeStrings"),QVariant(QStringList())));
+ KeysList.append(qMakePair(QString("excludeOptions"),QVariant(QStringList())));
+ KeysList.append(qMakePair(QString("doChecksum"),QVariant(true)));
+ KeysList.append(qMakePair(QString("checksumIgnoreIfImpossible"),QVariant(true)));
+ KeysList.append(qMakePair(QString("checksumOnlyOnError"),QVariant(true)));
+ KeysList.append(qMakePair(QString("osBuffer"),QVariant(true)));
+ KeysList.append(qMakePair(QString("firstRenamingRule"),QVariant("")));
+ KeysList.append(qMakePair(QString("otherRenamingRule"),QVariant("")));
+ #ifdef Q_OS_WIN32
+ KeysList.append(qMakePair(QString("osBufferLimited"),QVariant(true)));
+ #else
+ KeysList.append(qMakePair(QString("osBufferLimited"),QVariant(false)));
+ #endif
+ KeysList.append(qMakePair(QString("osBufferLimit"),QVariant(512)));
+ optionsEngine->addOptionGroup(KeysList);
+ #if ! defined (Q_CC_GNU)
+ ui->keepDate->setEnabled(false);
+ ui->keepDate->setToolTip("Not supported with this compiler");
+ #endif
+ ui->doRightTransfer->setChecked(optionsEngine->getOptionValue("doRightTransfer").toBool());
+ ui->keepDate->setChecked(optionsEngine->getOptionValue("keepDate").toBool());
+ ui->blockSize->setValue(optionsEngine->getOptionValue("blockSize").toUInt());
+ ui->autoStart->setChecked(optionsEngine->getOptionValue("autoStart").toBool());
+ ui->rsync->setChecked(optionsEngine->getOptionValue("rsync").toBool());
+ ui->comboBoxFolderError->setCurrentIndex(optionsEngine->getOptionValue("folderError").toUInt());
+ ui->comboBoxFolderColision->setCurrentIndex(optionsEngine->getOptionValue("folderColision").toUInt());
+ ui->checkBoxDestinationFolderExists->setChecked(optionsEngine->getOptionValue("checkDestinationFolder").toBool());
+ ui->doChecksum->setChecked(optionsEngine->getOptionValue("doChecksum").toBool());
+ ui->checksumIgnoreIfImpossible->setChecked(optionsEngine->getOptionValue("checksumIgnoreIfImpossible").toBool());
+ ui->checksumOnlyOnError->setChecked(optionsEngine->getOptionValue("checksumOnlyOnError").toBool());
+ ui->osBuffer->setChecked(optionsEngine->getOptionValue("osBuffer").toBool());
+ ui->osBufferLimited->setChecked(optionsEngine->getOptionValue("osBufferLimited").toBool());
+ ui->osBufferLimit->setValue(optionsEngine->getOptionValue("osBufferLimit").toUInt());
+ filters->setFilters(optionsEngine->getOptionValue("includeStrings").toStringList(),
+ optionsEngine->getOptionValue("includeOptions").toStringList(),
+ optionsEngine->getOptionValue("excludeStrings").toStringList(),
+ optionsEngine->getOptionValue("excludeOptions").toStringList()
+ );
+ renamingRules->setRenamingRules(optionsEngine->getOptionValue("firstRenamingRule").toString(),optionsEngine->getOptionValue("otherRenamingRule").toString());
+ }
+}
+
+QStringList Factory::supportedProtocolsForTheSource()
+{
+ return QStringList() << "file";
+}
+
+QStringList Factory::supportedProtocolsForTheDestination()
+{
+ return QStringList() << "file";
+}
+
+CopyType Factory::getCopyType()
+{
+ return FileAndFolder;
+}
+
+TransferListOperation Factory::getTransferListOperation()
+{
+ return TransferListOperation_ImportExport;
+}
+
+bool Factory::canDoOnlyCopy()
+{
+ return false;
+}
+
+void Factory::error(QProcess::ProcessError error)
+{
+ #ifndef ULTRACOPIER_PLUGIN_DEBUG
+ Q_UNUSED(error)
+ #endif
+ errorFound=true;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"have detected error: "+QString::number(error));
+}
+
+void Factory::finished(int exitCode, QProcess::ExitStatus exitStatus)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"exitCode: "+QString::number(exitCode)+", exitStatus: "+QString::number(exitStatus));
+ #ifndef ULTRACOPIER_PLUGIN_DEBUG
+ Q_UNUSED(exitCode)
+ Q_UNUSED(exitStatus)
+ #endif
+ if(!StandardError.isEmpty())
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"have finished with text on error output: "+StandardError);
+ else if(errorFound)
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"have finished with error and no text");
+ {
+ QStringList tempList=StandardOutput.split(QRegExp("[\n\r]+"));
+ int index=0;
+ while(index<tempList.size())
+ {
+ QString newString=tempList.at(index);
+ newString=newString.remove(QRegExp("^.* on "));
+ newString=newString.remove(QRegExp(" type .*$"));
+ if(!newString.endsWith(QDir::separator()))
+ newString+=QDir::separator();
+ mountSysPoint<<newString;
+ index++;
+ }
+ mountSysPoint.removeDuplicates();
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"mountSysPoint: "+mountSysPoint.join(";"));
+ }
+}
+
+void Factory::readyReadStandardError()
+{
+ StandardError+=mount.readAllStandardError();
+}
+
+void Factory::readyReadStandardOutput()
+{
+ StandardOutput+=mount.readAllStandardOutput();
+}
+
+void Factory::resetOptions()
+{
+}
+
+QWidget * Factory::options()
+{
+ ui->autoStart->setChecked(optionsEngine->getOptionValue("autoStart").toBool());
+ return tempWidget;
+}
+
+void Factory::setDoRightTransfer(bool doRightTransfer)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("doRightTransfer",doRightTransfer);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void Factory::setKeepDate(bool keepDate)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("keepDate",keepDate);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void Factory::setBlockSize(int blockSize)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("blockSize",blockSize);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void Factory::setAutoStart(bool autoStart)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("autoStart",autoStart);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void Factory::setRsync(bool rsync)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("rsync",rsync);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void Factory::newLanguageLoaded()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, retranslate the widget options");
+ ui->retranslateUi(tempWidget);
+ if(optionsEngine!=NULL)
+ {
+ filters->newLanguageLoaded();
+ renamingRules->newLanguageLoaded();
+ }
+ emit reloadLanguage();
+}
+
+Q_EXPORT_PLUGIN2(copyEngine, Factory);
+
+void Factory::doChecksum_toggled(bool doChecksum)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("doChecksum",doChecksum);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void Factory::checksumOnlyOnError_toggled(bool checksumOnlyOnError)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("checksumOnlyOnError",checksumOnlyOnError);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void Factory::osBuffer_toggled(bool osBuffer)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("osBuffer",osBuffer);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+ ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
+}
+
+void Factory::osBufferLimited_toggled(bool osBufferLimited)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("osBufferLimited",osBufferLimited);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+ ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
+}
+
+void Factory::osBufferLimit_editingFinished()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the spinbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("osBufferLimit",ui->osBufferLimit->value());
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void Factory::showFilterDialog()
+{
+ if(optionsEngine==NULL)
+ {
+ QMessageBox::critical(NULL,tr("Options error"),tr("Options engine is not loaded, can't access to the filters"));
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"options not loaded");
+ return;
+ }
+ filters->exec();
+}
+
+void Factory::sendNewFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"new filter");
+ if(optionsEngine!=NULL)
+ {
+ optionsEngine->setOptionValue("includeStrings",includeStrings);
+ optionsEngine->setOptionValue("includeOptions",includeOptions);
+ optionsEngine->setOptionValue("excludeStrings",excludeStrings);
+ optionsEngine->setOptionValue("excludeOptions",excludeOptions);
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void Factory::sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"new filter");
+ if(optionsEngine!=NULL)
+ {
+ optionsEngine->setOptionValue("firstRenamingRule",firstRenamingRule);
+ optionsEngine->setOptionValue("otherRenamingRule",otherRenamingRule);
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void Factory::showRenamingRules()
+{
+ if(optionsEngine==NULL)
+ {
+ QMessageBox::critical(NULL,tr("Options error"),tr("Options engine is not loaded, can't access to the filters"));
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"options not loaded");
+ return;
+ }
+ renamingRules->exec();
+}
+
+void Factory::checksumIgnoreIfImpossible_toggled(bool checksumIgnoreIfImpossible)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("checksumIgnoreIfImpossible",checksumIgnoreIfImpossible);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+}
diff --git a/plugins-alternative/CopyEngine/Rsync/factory.h b/plugins-alternative/CopyEngine/Rsync/factory.h
new file mode 100644
index 0000000..40c6d53
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/factory.h
@@ -0,0 +1,96 @@
+/** \file factory.h
+\brief Define the factory to create new instance
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#include <QObject>
+#include <QList>
+#include <QStringList>
+#include <QFileInfo>
+#include <QProcess>
+
+#include "../../../interface/PluginInterface_CopyEngine.h"
+#include "StructEnumDefinition.h"
+#include "ui_options.h"
+#include "copyEngine.h"
+#include "Environment.h"
+#include "Filters.h"
+#include "RenamingRules.h"
+
+#ifndef FACTORY_H
+#define FACTORY_H
+
+namespace Ui {
+ class options;
+}
+
+/** \brief to generate copy engine instance */
+class Factory : public PluginInterface_CopyEngineFactory
+{
+ Q_OBJECT
+ Q_INTERFACES(PluginInterface_CopyEngineFactory)
+public:
+ Factory();
+ ~Factory();
+ /// \brief to return the instance of the copy engine
+ PluginInterface_CopyEngine * getInstance();
+ /// \brief set the resources, to store options, to have facilityInterface
+ void setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityInterface,const bool &portableVersion);
+ //get mode allowed
+ /// \brief define if can copy file, folder or both
+ CopyType getCopyType();
+ /// \brief to return which kind of transfer list operation is supported
+ TransferListOperation getTransferListOperation();
+ /// \brief define if can only copy, or copy and move
+ bool canDoOnlyCopy();
+ /// \brief to get the supported protocols for the source
+ QStringList supportedProtocolsForTheSource();
+ /// \brief to get the supported protocols for the destination
+ QStringList supportedProtocolsForTheDestination();
+ /// \brief to get the options of the copy engine
+ QWidget * options();
+private:
+ Ui::options *ui;
+ QWidget* tempWidget;
+ OptionInterface * optionsEngine;
+ QStringList mountSysPoint;
+ QProcess mount;
+ QString StandardError;
+ QString StandardOutput;
+ bool errorFound;
+ FacilityInterface * facilityEngine;
+ Filters *filters;
+ RenamingRules *renamingRules;
+private slots:
+ void error(QProcess::ProcessError error);
+ void finished(int exitCode, QProcess::ExitStatus exitStatus);
+ void readyReadStandardError();
+ void readyReadStandardOutput();
+ void setDoRightTransfer(bool doRightTransfer);
+ void setKeepDate(bool keepDate);
+ void setBlockSize(int blockSize);
+ void setAutoStart(bool autoStart);
+ void setRsync(bool rsync);
+ void showFilterDialog();
+ void sendNewFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions);
+ void doChecksum_toggled(bool);
+ void checksumOnlyOnError_toggled(bool);
+ void osBuffer_toggled(bool);
+ void osBufferLimited_toggled(bool);
+ void osBufferLimit_editingFinished();
+ void checksumIgnoreIfImpossible_toggled(bool);
+ void sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
+ void showRenamingRules();
+public slots:
+ void resetOptions();
+ void newLanguageLoaded();
+signals:
+ void reloadLanguage();
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ /// \brief To debug source
+ void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
+ #endif
+};
+
+#endif // FACTORY_H
diff --git a/plugins-alternative/CopyEngine/Rsync/fileErrorDialog.cpp b/plugins-alternative/CopyEngine/Rsync/fileErrorDialog.cpp
new file mode 100644
index 0000000..0d9fa9a
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/fileErrorDialog.cpp
@@ -0,0 +1,95 @@
+#include "fileErrorDialog.h"
+#include "ui_fileErrorDialog.h"
+
+fileErrorDialog::fileErrorDialog(QWidget *parent,QFileInfo fileInfo,QString errorString,bool havePutAtTheEndButton) :
+ QDialog(parent),
+ ui(new Ui::fileErrorDialog)
+{
+ ui->setupUi(this);
+ action=FileError_Cancel;
+ ui->label_error->setText(errorString);
+ ui->label_content_file_name->setText(fileInfo.fileName());
+ if(fileInfo.exists())
+ {
+ 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"));
+ }
+ }
+ else
+ {
+ ui->label_size->hide();
+ ui->label_content_size->hide();
+ ui->label_modified->hide();
+ ui->label_content_modified->hide();
+ }
+ if(!havePutAtTheEndButton)
+ ui->PutToBottom->hide();
+}
+
+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;
+}
diff --git a/plugins-alternative/CopyEngine/Rsync/fileErrorDialog.h b/plugins-alternative/CopyEngine/Rsync/fileErrorDialog.h
new file mode 100644
index 0000000..b14fe87
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/fileErrorDialog.h
@@ -0,0 +1,45 @@
+/** \file fileErrorDialog.h
+\brief Define the dialog error on the file
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#include <QDialog>
+#include <QWidget>
+#include <QString>
+#include <QDateTime>
+#include <QFileInfo>
+#include "Environment.h"
+
+#ifndef FILEERRORDIALOG_H
+#define FILEERRORDIALOG_H
+
+namespace Ui {
+ class fileErrorDialog;
+}
+
+/// \brief to show error dialog, and ask what do
+class fileErrorDialog : public QDialog
+{
+ Q_OBJECT
+public:
+ /// \brief create the object and pass all the informations to it
+ explicit fileErrorDialog(QWidget *parent,QFileInfo fileInfo,QString errorString,bool havePutAtTheEndButton=true);
+ ~fileErrorDialog();
+ /// \brief return the the always checkbox is checked
+ bool getAlways();
+ /// \brief return the action clicked
+ FileErrorAction getAction();
+protected:
+ void changeEvent(QEvent *e);
+private slots:
+ void on_PutToBottom_clicked();
+ void on_Retry_clicked();
+ void on_Skip_clicked();
+ void on_Cancel_clicked();
+private:
+ Ui::fileErrorDialog *ui;
+ FileErrorAction action;
+};
+
+#endif // FILEERRORDIALOG_H
diff --git a/plugins-alternative/CopyEngine/Rsync/fileErrorDialog.ui b/plugins-alternative/CopyEngine/Rsync/fileErrorDialog.ui
new file mode 100644
index 0000000..c5027e7
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/fileErrorDialog.ui
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>fileErrorDialog</class>
+ <widget class="QWidget" name="fileErrorDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>478</width>
+ <height>154</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Error on file</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string>Error</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QLabel" name="label_error">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <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>
+ <layout class="QFormLayout" name="formLayout_2">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_size">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Size</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLabel" name="label_content_size">
+ <property name="text">
+ <string notr="true">0 KiB</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_modified">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Modified</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLabel" name="label_content_modified">
+ <property name="text">
+ <string notr="true">Today</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_file_name">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>File name</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLabel" name="label_content_file_name">
+ <property name="text">
+ <string notr="true">source.txt</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </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>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <item>
+ <widget class="QCheckBox" name="checkBoxAlways">
+ <property name="text">
+ <string>&amp;Always do this action</string>
+ </property>
+ </widget>
+ </item>
+ <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="PutToBottom">
+ <property name="text">
+ <string>Put to bottom</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="Retry">
+ <property name="text">
+ <string>Retry</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="Skip">
+ <property name="text">
+ <string>&amp;Skip</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="Cancel">
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>checkBoxAlways</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>Cancel</receiver>
+ <slot>setDisabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>112</x>
+ <y>131</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>438</x>
+ <y>142</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>checkBoxAlways</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>Retry</receiver>
+ <slot>setDisabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>155</x>
+ <y>131</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>309</x>
+ <y>134</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/plugins-alternative/CopyEngine/Rsync/fileExistsDialog.cpp b/plugins-alternative/CopyEngine/Rsync/fileExistsDialog.cpp
new file mode 100644
index 0000000..191dd79
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/fileExistsDialog.cpp
@@ -0,0 +1,189 @@
+#include "fileExistsDialog.h"
+#include "ui_fileExistsDialog.h"
+
+#include <QDebug>
+
+fileExistsDialog::fileExistsDialog(QWidget *parent,QFileInfo source,QFileInfo destination,QString firstRenamingRule,QString otherRenamingRule) :
+ QDialog(parent),
+ ui(new Ui::fileExistsDialog)
+{
+ ui->setupUi(this);
+ action=FileExists_Cancel;
+ destinationInfo=destination;
+ oldName=destination.fileName();
+ ui->lineEditNewName->setText(oldName);
+ ui->lineEditNewName->setPlaceholderText(oldName);
+ ui->Overwrite->addAction(ui->actionOverwrite_if_newer);
+ ui->Overwrite->addAction(ui->actionOverwrite_if_not_same_modification_date);
+ ui->label_content_source_size->setText(QString::number(source.size()));
+ ui->label_content_source_modified->setText(source.lastModified().toString());
+ ui->label_content_source_file_name->setText(source.fileName());
+ 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(destination.fileName());
+ 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);
+ }
+ this->firstRenamingRule=firstRenamingRule;
+ this->otherRenamingRule=otherRenamingRule;
+}
+
+fileExistsDialog::~fileExistsDialog()
+{
+ delete ui;
+}
+
+void fileExistsDialog::changeEvent(QEvent *e)
+{
+ QWidget::changeEvent(e);
+ switch (e->type()) {
+ case QEvent::LanguageChange:
+ ui->retranslateUi(this);
+ break;
+ default:
+ break;
+ }
+}
+
+QString fileExistsDialog::getNewName()
+{
+ if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked())
+ qDebug() << "return the old name: "+oldName;
+ else
+ qDebug() << "return the new name: "+ui->lineEditNewName->text();
+ if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked())
+ return oldName;
+ else
+ return ui->lineEditNewName->text();
+}
+
+void fileExistsDialog::on_SuggestNewName_clicked()
+{
+ QFileInfo destinationInfo=this->destinationInfo;
+ QString absolutePath=destinationInfo.absolutePath();
+ QString fileName=destinationInfo.fileName();
+ QString suffix="";
+ QString destination;
+ QString newFileName;
+ //resolv the suffix
+ if(fileName.contains(QRegExp("^(.*)(\\.[a-z0-9]+)$")))
+ {
+ suffix=fileName;
+ suffix.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\2");
+ fileName.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\1");
+ }
+ //resolv the new name
+ int num=1;
+ do
+ {
+ if(num==1)
+ {
+ if(firstRenamingRule=="")
+ newFileName=tr("%1 - copy").arg(fileName);
+ else
+ {
+ newFileName=firstRenamingRule;
+ newFileName.replace("%name%",fileName);
+ }
+ }
+ else
+ {
+ if(otherRenamingRule=="")
+ newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num);
+ else
+ {
+ newFileName=otherRenamingRule;
+ newFileName.replace("%name%",fileName);
+ newFileName.replace("%number%",QString::number(num));
+ }
+ }
+ destination=absolutePath+QDir::separator()+newFileName+suffix;
+ destinationInfo.setFile(destination);
+ num++;
+ }
+ while(destinationInfo.exists());
+ ui->lineEditNewName->setText(newFileName+suffix);
+}
+
+void fileExistsDialog::on_Rename_clicked()
+{
+ action=FileExists_Rename;
+ this->close();
+}
+
+void fileExistsDialog::on_Overwrite_clicked()
+{
+ action=FileExists_Overwrite;
+ this->close();
+}
+
+void fileExistsDialog::on_Skip_clicked()
+{
+ action=FileExists_Skip;
+ this->close();
+}
+
+void fileExistsDialog::on_Cancel_clicked()
+{
+ action=FileExists_Cancel;
+ this->close();
+}
+
+void fileExistsDialog::on_actionOverwrite_if_newer_triggered()
+{
+ action=FileExists_OverwriteIfNewer;
+ this->close();
+}
+
+void fileExistsDialog::on_actionOverwrite_if_not_same_modification_date_triggered()
+{
+ action=FileExists_OverwriteIfNotSameModificationDate;
+ this->close();
+}
+
+FileExistsAction fileExistsDialog::getAction()
+{
+ return action;
+}
+
+bool fileExistsDialog::getAlways()
+{
+ return ui->checkBoxAlways->isChecked();
+}
+
+void fileExistsDialog::updateRenameButton()
+{
+ ui->Rename->setEnabled(ui->checkBoxAlways->isChecked() || (oldName!=ui->lineEditNewName->text() && !ui->lineEditNewName->text().isEmpty()));
+}
+
+void fileExistsDialog::on_checkBoxAlways_toggled(bool checked)
+{
+ Q_UNUSED(checked);
+ updateRenameButton();
+}
+
+void fileExistsDialog::on_lineEditNewName_textChanged(const QString &arg1)
+{
+ Q_UNUSED(arg1);
+ updateRenameButton();
+}
diff --git a/plugins-alternative/CopyEngine/Rsync/fileExistsDialog.h b/plugins-alternative/CopyEngine/Rsync/fileExistsDialog.h
new file mode 100644
index 0000000..75af190
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/fileExistsDialog.h
@@ -0,0 +1,58 @@
+/** \file fileExistsDialog.h
+\brief Define the dialog when file already exists
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#include <QDialog>
+#include <QWidget>
+#include <QString>
+#include <QDateTime>
+#include <QFileInfo>
+#include <QDir>
+#include "Environment.h"
+
+#ifndef FILEEXISTSDIALOG_H
+#define FILEEXISTSDIALOG_H
+
+namespace Ui {
+ class fileExistsDialog;
+}
+
+/// \brief to show file exists dialog, and ask what do
+class fileExistsDialog : public QDialog
+{
+ Q_OBJECT
+public:
+ /// \brief create the object and pass all the informations to it
+ explicit fileExistsDialog(QWidget *parent,QFileInfo source,QFileInfo destination,QString firstRenamingRule,QString otherRenamingRule);
+ ~fileExistsDialog();
+ /// \brief return the the always checkbox is checked
+ bool getAlways();
+ /// \brief return the action clicked
+ FileExistsAction getAction();
+ /// \brief return the new rename is case in manual renaming
+ QString getNewName();
+protected:
+ void changeEvent(QEvent *e);
+private slots:
+ void on_SuggestNewName_clicked();
+ void on_Rename_clicked();
+ void on_Overwrite_clicked();
+ void on_Skip_clicked();
+ void on_Cancel_clicked();
+ void on_actionOverwrite_if_newer_triggered();
+ void on_actionOverwrite_if_not_same_modification_date_triggered();
+ void updateRenameButton();
+ void on_checkBoxAlways_toggled(bool checked);
+ void on_lineEditNewName_textChanged(const QString &arg1);
+private:
+ Ui::fileExistsDialog *ui;
+ FileExistsAction action;
+ QString oldName;
+ QFileInfo destinationInfo;
+ QString firstRenamingRule;
+ QString otherRenamingRule;
+};
+
+#endif // FILEEXISTSDIALOG_H
diff --git a/plugins-alternative/CopyEngine/Rsync/fileExistsDialog.ui b/plugins-alternative/CopyEngine/Rsync/fileExistsDialog.ui
new file mode 100644
index 0000000..a37945a
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/fileExistsDialog.ui
@@ -0,0 +1,367 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>fileExistsDialog</class>
+ <widget class="QWidget" name="fileExistsDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>469</width>
+ <height>150</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>The file exists</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="font">
+ <font>
+ <weight>75</weight>
+ <bold>true</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Source</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_2">
+ <property name="font">
+ <font>
+ <weight>75</weight>
+ <bold>true</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Destination</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <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>
+ <layout class="QFormLayout" name="formLayout_2">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_source_size">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Size</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLabel" name="label_content_source_size">
+ <property name="text">
+ <string notr="true">0 KiB</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_source_modified">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Modified</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLabel" name="label_content_source_modified">
+ <property name="text">
+ <string notr="true">Today</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_source_file_name">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>File name</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLabel" name="label_content_source_file_name">
+ <property name="text">
+ <string notr="true">source.txt</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_4">
+ <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>
+ <layout class="QFormLayout" name="formLayout">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::ExpandingFieldsGrow</enum>
+ </property>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_destination_size">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Size</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLabel" name="label_content_destination_size">
+ <property name="text">
+ <string notr="true">0 KiB</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_destination_modified">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Modified</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLabel" name="label_content_destination_modified">
+ <property name="text">
+ <string notr="true">Today</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_destination_file_name">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>File name</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLabel" name="label_content_destination_file_name">
+ <property name="text">
+ <string notr="true">destination.txt</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </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>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <item>
+ <widget class="QLineEdit" name="lineEditNewName">
+ <property name="text">
+ <string notr="true"/>
+ </property>
+ <property name="placeholderText">
+ <string notr="true"/>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="SuggestNewName">
+ <property name="text">
+ <string>Suggest new &amp;name</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <item>
+ <widget class="QCheckBox" name="checkBoxAlways">
+ <property name="text">
+ <string>&amp;Always do this action</string>
+ </property>
+ </widget>
+ </item>
+ <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="Rename">
+ <property name="text">
+ <string>&amp;Rename</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="Overwrite">
+ <property name="text">
+ <string>&amp;Overwrite</string>
+ </property>
+ <property name="popupMode">
+ <enum>QToolButton::MenuButtonPopup</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="Skip">
+ <property name="text">
+ <string>&amp;Skip</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="Cancel">
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ <action name="actionOverwrite_if_newer">
+ <property name="text">
+ <string>Overwrite if newer</string>
+ </property>
+ </action>
+ <action name="actionOverwrite_if_not_same_modification_date">
+ <property name="text">
+ <string>Overwrite if not same modification date</string>
+ </property>
+ </action>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>checkBoxAlways</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>Cancel</receiver>
+ <slot>setDisabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>115</x>
+ <y>130</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>440</x>
+ <y>129</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>checkBoxAlways</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>lineEditNewName</receiver>
+ <slot>setDisabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>62</x>
+ <y>129</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>108</x>
+ <y>93</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>checkBoxAlways</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>SuggestNewName</receiver>
+ <slot>setDisabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>144</x>
+ <y>138</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>326</x>
+ <y>98</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/plugins-alternative/CopyEngine/Rsync/fileIsSameDialog.cpp b/plugins-alternative/CopyEngine/Rsync/fileIsSameDialog.cpp
new file mode 100644
index 0000000..f45b2ea
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/fileIsSameDialog.cpp
@@ -0,0 +1,156 @@
+#include "fileIsSameDialog.h"
+#include "ui_fileIsSameDialog.h"
+
+#include <QDebug>
+
+fileIsSameDialog::fileIsSameDialog(QWidget *parent,QFileInfo fileInfo,QString firstRenamingRule,QString otherRenamingRule) :
+ QDialog(parent),
+ ui(new Ui::fileIsSameDialog)
+{
+ ui->setupUi(this);
+ action=FileExists_Cancel;
+ oldName=fileInfo.fileName();
+ destinationInfo=fileInfo;
+ ui->lineEditNewName->setText(oldName);
+ ui->lineEditNewName->setPlaceholderText(oldName);
+ ui->label_content_size->setText(QString::number(fileInfo.size()));
+ ui->label_content_modified->setText(fileInfo.lastModified().toString());
+ ui->label_content_file_name->setText(fileInfo.fileName());
+ 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);
+ }
+ this->firstRenamingRule=firstRenamingRule;
+ this->otherRenamingRule=otherRenamingRule;
+}
+
+fileIsSameDialog::~fileIsSameDialog()
+{
+ delete ui;
+}
+
+void fileIsSameDialog::changeEvent(QEvent *e)
+{
+ QWidget::changeEvent(e);
+ switch (e->type()) {
+ case QEvent::LanguageChange:
+ ui->retranslateUi(this);
+ break;
+ default:
+ break;
+ }
+}
+
+QString fileIsSameDialog::getNewName()
+{
+ if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked())
+ qDebug() << "fileIsSameDialog, return the old name: "+oldName;
+ else
+ qDebug() << "fileIsSameDialog, return the new name: "+ui->lineEditNewName->text();
+ if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked())
+ return oldName;
+ else
+ return ui->lineEditNewName->text();
+}
+
+void fileIsSameDialog::on_SuggestNewName_clicked()
+{
+ QFileInfo destinationInfo=this->destinationInfo;
+ QString absolutePath=destinationInfo.absolutePath();
+ QString fileName=destinationInfo.fileName();
+ QString suffix="";
+ QString destination;
+ QString newFileName;
+ //resolv the suffix
+ if(fileName.contains(QRegExp("^(.*)(\\.[a-z0-9]+)$")))
+ {
+ suffix=fileName;
+ suffix.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\2");
+ fileName.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\1");
+ }
+ //resolv the new name
+ int num=1;
+ do
+ {
+ if(num==1)
+ {
+ if(firstRenamingRule=="")
+ newFileName=tr("%1 - copy").arg(fileName);
+ else
+ {
+ newFileName=firstRenamingRule;
+ newFileName.replace("%name%",fileName);
+ }
+ }
+ else
+ {
+ if(otherRenamingRule=="")
+ newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num);
+ else
+ {
+ newFileName=otherRenamingRule;
+ newFileName.replace("%name%",fileName);
+ newFileName.replace("%number%",QString::number(num));
+ }
+ }
+ destination=absolutePath+QDir::separator()+newFileName+suffix;
+ destinationInfo.setFile(destination);
+ num++;
+ }
+ while(destinationInfo.exists());
+ ui->lineEditNewName->setText(newFileName+suffix);
+}
+
+void fileIsSameDialog::on_Rename_clicked()
+{
+ action=FileExists_Rename;
+ this->close();
+}
+
+void fileIsSameDialog::on_Skip_clicked()
+{
+ action=FileExists_Skip;
+ this->close();
+}
+
+void fileIsSameDialog::on_Cancel_clicked()
+{
+ action=FileExists_Cancel;
+ this->close();
+}
+
+FileExistsAction fileIsSameDialog::getAction()
+{
+ return action;
+}
+
+bool fileIsSameDialog::getAlways()
+{
+ return ui->checkBoxAlways->isChecked();
+}
+
+void fileIsSameDialog::updateRenameButton()
+{
+ ui->Rename->setEnabled(ui->checkBoxAlways->isChecked() || (oldName!=ui->lineEditNewName->text() && !ui->lineEditNewName->text().isEmpty()));
+}
+
+void fileIsSameDialog::on_lineEditNewName_textChanged(const QString &arg1)
+{
+ Q_UNUSED(arg1);
+ updateRenameButton();
+}
+
+void fileIsSameDialog::on_checkBoxAlways_toggled(bool checked)
+{
+ Q_UNUSED(checked);
+ updateRenameButton();
+}
diff --git a/plugins-alternative/CopyEngine/Rsync/fileIsSameDialog.h b/plugins-alternative/CopyEngine/Rsync/fileIsSameDialog.h
new file mode 100644
index 0000000..fa48755
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/fileIsSameDialog.h
@@ -0,0 +1,56 @@
+/** \file fileIsSameDialog.h
+\brief Define the dialog when file is same
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#include <QDialog>
+#include <QWidget>
+#include <QString>
+#include <QDateTime>
+#include <QFileInfo>
+#include <QDir>
+#include "Environment.h"
+
+#ifndef FILEISSAMEDIALOG_H
+#define FILEISSAMEDIALOG_H
+
+namespace Ui {
+ class fileIsSameDialog;
+}
+
+/// \brief to show file is same dialog, and ask what do
+class fileIsSameDialog : public QDialog
+{
+ Q_OBJECT
+public:
+ /// \brief create the object and pass all the informations to it
+ explicit fileIsSameDialog(QWidget *parent,QFileInfo fileInfo,QString firstRenamingRule,QString otherRenamingRule);
+ ~fileIsSameDialog();
+ /// \brief return the the always checkbox is checked
+ bool getAlways();
+ /// \brief return the action clicked
+ FileExistsAction getAction();
+ /// \brief return the new rename is case in manual renaming
+ QString getNewName();
+protected:
+ void changeEvent(QEvent *e);
+private slots:
+ void on_SuggestNewName_clicked();
+ void on_Rename_clicked();
+ void on_Skip_clicked();
+ void on_Cancel_clicked();
+ void updateRenameButton();
+ void on_lineEditNewName_textChanged(const QString &arg1);
+ void on_checkBoxAlways_toggled(bool checked);
+private:
+ Ui::fileIsSameDialog *ui;
+ FileExistsAction action;
+ QString oldName;
+ QFileInfo destinationInfo;
+ QString firstRenamingRule;
+ QString otherRenamingRule;
+
+};
+
+#endif // FILEISSAMEDIALOG_H
diff --git a/plugins-alternative/CopyEngine/Rsync/fileIsSameDialog.ui b/plugins-alternative/CopyEngine/Rsync/fileIsSameDialog.ui
new file mode 100644
index 0000000..673ba26
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/fileIsSameDialog.ui
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>fileIsSameDialog</class>
+ <widget class="QWidget" name="fileIsSameDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>378</width>
+ <height>148</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>This files are the same file</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>The source and destination is same</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <spacer name="horizontalSpacer_3">
+ <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>
+ <layout class="QFormLayout" name="formLayout_2">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_size">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Size</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLabel" name="label_content_size">
+ <property name="text">
+ <string notr="true">0 KiB</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_modified">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Modified</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLabel" name="label_content_modified">
+ <property name="text">
+ <string notr="true">Today</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_file_name">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>File name</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLabel" name="label_content_file_name">
+ <property name="text">
+ <string notr="true">source.txt</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </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>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <item>
+ <widget class="QLineEdit" name="lineEditNewName">
+ <property name="text">
+ <string notr="true"/>
+ </property>
+ <property name="placeholderText">
+ <string notr="true"/>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="SuggestNewName">
+ <property name="text">
+ <string>Suggest new &amp;name</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <item>
+ <widget class="QCheckBox" name="checkBoxAlways">
+ <property name="text">
+ <string>&amp;Always do this action</string>
+ </property>
+ </widget>
+ </item>
+ <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="Rename">
+ <property name="text">
+ <string>&amp;Rename</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="Skip">
+ <property name="text">
+ <string>&amp;Skip</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="Cancel">
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/plugins-alternative/CopyEngine/Rsync/folderExistsDialog.cpp b/plugins-alternative/CopyEngine/Rsync/folderExistsDialog.cpp
new file mode 100644
index 0000000..d951b90
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/folderExistsDialog.cpp
@@ -0,0 +1,143 @@
+#include "folderExistsDialog.h"
+#include "ui_folderExistsDialog.h"
+
+#include <QMessageBox>
+
+folderExistsDialog::folderExistsDialog(QWidget *parent,QFileInfo source,bool isSame,QFileInfo destination,QString firstRenamingRule,QString otherRenamingRule) :
+ QDialog(parent),
+ ui(new Ui::folderExistsDialog)
+{
+ ui->setupUi(this);
+ action=FolderExists_Cancel;
+ oldName=source.fileName();
+ this->destinationInfo=destinationInfo;
+ ui->lineEditNewName->setText(oldName);
+ ui->lineEditNewName->setPlaceholderText(oldName);
+ ui->label_content_source_modified->setText(source.lastModified().toString());
+ ui->label_content_source_folder_name->setText(source.fileName());
+ if(isSame)
+ {
+ ui->label_source->hide();
+ ui->label_destination->hide();
+ ui->label_destination_modified->hide();
+ ui->label_destination_folder_name->hide();
+ ui->label_content_destination_modified->hide();
+ ui->label_content_destination_folder_name->hide();
+ }
+ else
+ {
+ this->setWindowTitle(tr("Folder already exists"));
+ ui->label_message->hide();
+ ui->label_content_destination_modified->setText(destination.lastModified().toString());
+ ui->label_content_destination_folder_name->setText(destination.fileName());
+ }
+ this->firstRenamingRule=firstRenamingRule;
+ this->otherRenamingRule=otherRenamingRule;
+}
+
+folderExistsDialog::~folderExistsDialog()
+{
+ delete ui;
+}
+
+void folderExistsDialog::changeEvent(QEvent *e)
+{
+ QDialog::changeEvent(e);
+ switch (e->type()) {
+ case QEvent::LanguageChange:
+ ui->retranslateUi(this);
+ break;
+ default:
+ break;
+ }
+}
+
+QString folderExistsDialog::getNewName()
+{
+ if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked())
+ return "";
+ else
+ return ui->lineEditNewName->text();
+}
+
+void folderExistsDialog::on_SuggestNewName_clicked()
+{
+ QFileInfo destinationInfo=this->destinationInfo;
+ QString absolutePath=destinationInfo.absolutePath();
+ QString fileName=destinationInfo.fileName();
+ QString suffix="";
+ QString destination;
+ QString newFileName;
+ //resolv the suffix
+ if(fileName.contains(QRegExp("^(.*)(\\.[a-z0-9]+)$")))
+ {
+ suffix=fileName;
+ suffix.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\2");
+ fileName.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\1");
+ }
+ //resolv the new name
+ int num=1;
+ do
+ {
+ if(num==1)
+ {
+ if(firstRenamingRule=="")
+ newFileName=tr("%1 - copy").arg(fileName);
+ else
+ {
+ newFileName=firstRenamingRule;
+ newFileName.replace("%name%",fileName);
+ }
+ }
+ else
+ {
+ if(otherRenamingRule=="")
+ newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num);
+ else
+ {
+ newFileName=otherRenamingRule;
+ newFileName.replace("%name%",fileName);
+ newFileName.replace("%number%",QString::number(num));
+ }
+ }
+ destination=absolutePath+QDir::separator()+newFileName+suffix;
+ destinationInfo.setFile(destination);
+ num++;
+ }
+ while(destinationInfo.exists());
+ ui->lineEditNewName->setText(newFileName+suffix);
+}
+
+void folderExistsDialog::on_Rename_clicked()
+{
+ action=FolderExists_Rename;
+ this->close();
+}
+
+void folderExistsDialog::on_Skip_clicked()
+{
+ action=FolderExists_Skip;
+ this->close();
+}
+
+void folderExistsDialog::on_Cancel_clicked()
+{
+ action=FolderExists_Cancel;
+ this->close();
+}
+
+FolderExistsAction folderExistsDialog::getAction()
+{
+ return action;
+}
+
+bool folderExistsDialog::getAlways()
+{
+ return ui->checkBoxAlways->isChecked();
+}
+
+void folderExistsDialog::on_Merge_clicked()
+{
+ action=FolderExists_Merge;
+ this->close();
+}
diff --git a/plugins-alternative/CopyEngine/Rsync/folderExistsDialog.h b/plugins-alternative/CopyEngine/Rsync/folderExistsDialog.h
new file mode 100644
index 0000000..6d612f1
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/folderExistsDialog.h
@@ -0,0 +1,54 @@
+/** \file folderExistsDialog.h
+\brief Define the dialog when file exists
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#ifndef FOLDERISSAMEDIALOG_H
+#define FOLDERISSAMEDIALOG_H
+
+#include <QDialog>
+#include <QFileInfo>
+#include <QString>
+#include <QDateTime>
+#include <QDir>
+
+#include "Environment.h"
+
+namespace Ui {
+ class folderExistsDialog;
+}
+
+/// \brief to show file exists dialog, and ask what do
+class folderExistsDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ /// \brief create the object and pass all the informations to it
+ explicit folderExistsDialog(QWidget *parent,QFileInfo source,bool isSame,QFileInfo destination,QString firstRenamingRule,QString otherRenamingRule);
+ ~folderExistsDialog();
+ /// \brief return the the always checkbox is checked
+ bool getAlways();
+ /// \brief return the action clicked
+ FolderExistsAction getAction();
+ /// \brief return the new rename is case in manual renaming
+ QString getNewName();
+protected:
+ void changeEvent(QEvent *e);
+private slots:
+ void on_SuggestNewName_clicked();
+ void on_Rename_clicked();
+ void on_Skip_clicked();
+ void on_Cancel_clicked();
+ void on_Merge_clicked();
+private:
+ Ui::folderExistsDialog *ui;
+ FolderExistsAction action;
+ QString oldName;
+ QString firstRenamingRule;
+ QString otherRenamingRule;
+ QFileInfo destinationInfo;
+};
+
+#endif // FOLDERISSAMEDIALOG_H
diff --git a/plugins-alternative/CopyEngine/Rsync/folderExistsDialog.ui b/plugins-alternative/CopyEngine/Rsync/folderExistsDialog.ui
new file mode 100644
index 0000000..c4c4d5e
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/folderExistsDialog.ui
@@ -0,0 +1,282 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>folderExistsDialog</class>
+ <widget class="QDialog" name="folderExistsDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>443</width>
+ <height>146</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>This folders are the same folder</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLabel" name="label_source">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="font">
+ <font>
+ <weight>75</weight>
+ <bold>true</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Source</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_destination">
+ <property name="font">
+ <font>
+ <weight>75</weight>
+ <bold>true</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Destination</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_message">
+ <property name="text">
+ <string>The source and destination is same</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <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>
+ <layout class="QFormLayout" name="formLayout">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_source_modified">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Modified</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLabel" name="label_content_source_modified">
+ <property name="text">
+ <string notr="true">Today</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_source_folder_name">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Folder name</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLabel" name="label_content_source_folder_name">
+ <property name="text">
+ <string notr="true">folder</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <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>
+ <layout class="QFormLayout" name="formLayout_2">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_destination_modified">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Modified</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_destination_folder_name">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Folder name</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLabel" name="label_content_destination_modified">
+ <property name="text">
+ <string notr="true">Today</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLabel" name="label_content_destination_folder_name">
+ <property name="text">
+ <string notr="true">folder</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QLineEdit" name="lineEditNewName">
+ <property name="text">
+ <string notr="true"/>
+ </property>
+ <property name="placeholderText">
+ <string notr="true"/>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="SuggestNewName">
+ <property name="text">
+ <string>Suggest new &amp;name</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <item>
+ <widget class="QCheckBox" name="checkBoxAlways">
+ <property name="text">
+ <string>&amp;Always do this action</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="Rename">
+ <property name="text">
+ <string>&amp;Rename</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="Merge">
+ <property name="text">
+ <string>Merge</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="Skip">
+ <property name="text">
+ <string>Skip</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="Cancel">
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>checkBoxAlways</sender>
+ <signal>clicked(bool)</signal>
+ <receiver>lineEditNewName</receiver>
+ <slot>setDisabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>132</x>
+ <y>126</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>135</x>
+ <y>101</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>checkBoxAlways</sender>
+ <signal>clicked(bool)</signal>
+ <receiver>SuggestNewName</receiver>
+ <slot>setDisabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>113</x>
+ <y>129</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>304</x>
+ <y>100</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/plugins-alternative/CopyEngine/Rsync/informations.xml b/plugins-alternative/CopyEngine/Rsync/informations.xml
new file mode 100644
index 0000000..709df28
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/informations.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Rsync copy engine]]></title><!-- english is required -->
+ <title xml:lang="fr"><![CDATA[Moteur de copie rsync]]></title>
+ <!-- What kind of plugin this is -->
+ <category>CopyEngine</category>
+ <!-- Who wrote this plugin -->
+ <author><![CDATA[BRULE Herman, alpha_one_x86 (alpha_one_x86@first-world.info)]]></author>
+ <!-- URL of page or site for this plugin (may provide additional information, bug reports, feature requests). -->
+ <website xml:lang="en"><![CDATA[http://ultracopier.first-world.info/]]></website><!-- not required -->
+ <website xml:lang="fr"><![CDATA[http://ultracopier-fr.first-world.info/]]></website><!-- not required -->
+ <!-- the date-time format should be in timestamps format -->
+ <pubDate>1287496800</pubDate>
+ <!-- the architecture code of this plugin, found PlatformMacro.h into ultracopier source -->
+ <architecture>windows-x86</architecture>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Rsync copy engine, variant of the official copy engine to provide simple way to do backups]]></description>
+ <description xml:lang="fr"><![CDATA[Moteur de copie rsync, variante du moteur de copie officiel pour fournir une maniére simple de faire des backups]]></description>
+ <!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
+ <version>0.3.1.0</version>
+ <!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
+ <name>Rsync</name>
+ <!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
+ <dependencies><![CDATA[
+ >=ultracopier-0.3.1.0
+ ]]></dependencies>
+</package> \ No newline at end of file
diff --git a/plugins-alternative/CopyEngine/Rsync/options.ui b/plugins-alternative/CopyEngine/Rsync/options.ui
new file mode 100644
index 0000000..78ac0b2
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/options.ui
@@ -0,0 +1,328 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>options</class>
+ <widget class="QWidget" name="options">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>354</width>
+ <height>399</height>
+ </rect>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <property name="margin">
+ <number>2</number>
+ </property>
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Transfer the file rights</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QCheckBox" name="doRightTransfer"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>Keep the file date</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="QCheckBox" name="keepDate"/>
+ </item>
+ <item row="2" column="2">
+ <widget class="QSpinBox" name="blockSize">
+ <property name="suffix">
+ <string>KB</string>
+ </property>
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>64000</number>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0" colspan="2">
+ <widget class="QLabel" name="label_5">
+ <property name="text">
+ <string>Auto start the transfer</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="2">
+ <widget class="QCheckBox" name="autoStart"/>
+ </item>
+ <item row="4" column="0">
+ <widget class="QLabel" name="label_6">
+ <property name="text">
+ <string>When folder error</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="2">
+ <widget class="QComboBox" name="comboBoxFolderError">
+ <item>
+ <property name="text">
+ <string>Ask</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Skip</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="5" column="0">
+ <widget class="QLabel" name="label_7">
+ <property name="text">
+ <string>When folder collision</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="2">
+ <widget class="QComboBox" name="comboBoxFolderColision">
+ <item>
+ <property name="text">
+ <string>Ask</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Merge</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Skip</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Rename</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="6" column="0" colspan="2">
+ <widget class="QLabel" name="label_8">
+ <property name="text">
+ <string>Check if destination folder exists</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="2">
+ <widget class="QCheckBox" name="checkBoxDestinationFolderExists"/>
+ </item>
+ <item row="8" column="0" colspan="3">
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string>Checksum</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="1" column="1">
+ <widget class="QCheckBox" name="checksumOnlyOnError">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_9">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Only after error</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_10">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Ignore if impossible</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QCheckBox" name="checksumIgnoreIfImpossible">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QCheckBox" name="doChecksum"/>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_11">
+ <property name="text">
+ <string>Do checksum</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="9" column="1">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Enable OS buffer</string>
+ </property>
+ </widget>
+ </item>
+ <item row="9" column="2">
+ <widget class="QCheckBox" name="osBuffer"/>
+ </item>
+ <item row="10" column="0" colspan="2">
+ <widget class="QCheckBox" name="osBufferLimited">
+ <property name="text">
+ <string>OS buffer only if smaller than</string>
+ </property>
+ </widget>
+ </item>
+ <item row="10" column="2">
+ <widget class="QSpinBox" name="osBufferLimit">
+ <property name="suffix">
+ <string>KB</string>
+ </property>
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>2048</number>
+ </property>
+ <property name="value">
+ <number>512</number>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_4">
+ <property name="text">
+ <string>Block size</string>
+ </property>
+ </widget>
+ </item>
+ <item row="13" column="1">
+ <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>
+ <item row="12" column="1">
+ <widget class="QPushButton" name="filters">
+ <property name="text">
+ <string>Filters</string>
+ </property>
+ </widget>
+ </item>
+ <item row="11" column="1">
+ <widget class="QPushButton" name="renamingRules">
+ <property name="text">
+ <string>Renaming rules</string>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="2">
+ <widget class="QCheckBox" name="rsync">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="0" colspan="2">
+ <widget class="QLabel" name="label_rsync">
+ <property name="text">
+ <string>Rsync (only in copy mode)</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>doChecksum</sender>
+ <signal>clicked(bool)</signal>
+ <receiver>label_9</receiver>
+ <slot>setEnabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>187</x>
+ <y>212</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>100</x>
+ <y>223</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>doChecksum</sender>
+ <signal>clicked(bool)</signal>
+ <receiver>checksumOnlyOnError</receiver>
+ <slot>setEnabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>198</x>
+ <y>212</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>190</x>
+ <y>226</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>doChecksum</sender>
+ <signal>clicked(bool)</signal>
+ <receiver>label_10</receiver>
+ <slot>setEnabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>245</x>
+ <y>210</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>123</x>
+ <y>251</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>doChecksum</sender>
+ <signal>clicked(bool)</signal>
+ <receiver>checksumIgnoreIfImpossible</receiver>
+ <slot>setEnabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>269</x>
+ <y>209</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>213</x>
+ <y>247</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/plugins-alternative/CopyEngine/Rsync/resources.qrc b/plugins-alternative/CopyEngine/Rsync/resources.qrc
new file mode 100644
index 0000000..c6ca4ef
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/resources.qrc
@@ -0,0 +1,8 @@
+<RCC>
+ <qresource prefix="/">
+ <file>resources/add.png</file>
+ <file>resources/edit.png</file>
+ <file>resources/remove.png</file>
+ <file>resources/filter.png</file>
+ </qresource>
+</RCC>
diff --git a/plugins-alternative/CopyEngine/Rsync/resources/add.png b/plugins-alternative/CopyEngine/Rsync/resources/add.png
new file mode 100644
index 0000000..1e03be9
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/resources/add.png
Binary files differ
diff --git a/plugins-alternative/CopyEngine/Rsync/resources/edit.png b/plugins-alternative/CopyEngine/Rsync/resources/edit.png
new file mode 100644
index 0000000..8072aea
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/resources/edit.png
Binary files differ
diff --git a/plugins-alternative/CopyEngine/Rsync/resources/filter.png b/plugins-alternative/CopyEngine/Rsync/resources/filter.png
new file mode 100644
index 0000000..9cabc5a
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/resources/filter.png
Binary files differ
diff --git a/plugins-alternative/CopyEngine/Rsync/resources/remove.png b/plugins-alternative/CopyEngine/Rsync/resources/remove.png
new file mode 100644
index 0000000..5b4c488
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/resources/remove.png
Binary files differ
diff --git a/plugins-alternative/CopyEngine/Rsync/scanFileOrFolder.cpp b/plugins-alternative/CopyEngine/Rsync/scanFileOrFolder.cpp
new file mode 100644
index 0000000..197b8c7
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/scanFileOrFolder.cpp
@@ -0,0 +1,511 @@
+#include "scanFileOrFolder.h"
+
+#include <QDateTime>
+
+scanFileOrFolder::scanFileOrFolder(CopyMode mode)
+{
+ rsync=false;
+ stopped = true;
+ stopIt = false;
+ this->mode=mode;
+ setObjectName("ScanFileOrFolder");
+ folder_isolation=QRegExp("^(.*/)?([^/]+)/$");
+}
+
+scanFileOrFolder::~scanFileOrFolder()
+{
+ stop();
+ quit();
+ wait();
+}
+
+bool scanFileOrFolder::isFinished()
+{
+ return stopped;
+}
+
+void scanFileOrFolder::addToList(const QStringList& sources,const QString& destination)
+{
+ stopIt=false;
+ this->sources=parseWildcardSources(sources);
+ this->destination=destination;
+ if(sources.size()>1 || QFileInfo(destination).isDir())
+ /* Disabled because the separator transformation product bug
+ * if(!destination.endsWith(QDir::separator()))
+ this->destination+=QDir::separator();*/
+ if(!destination.endsWith("/") && !destination.endsWith("\\"))
+ this->destination+="/";//put unix separator because it's transformed into that's under windows too
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"addToList("+sources.join(";")+","+destination+")");
+}
+
+
+QStringList scanFileOrFolder::parseWildcardSources(const QStringList &sources)
+{
+ QRegExp splitFolder("[/\\\\]");
+ QStringList returnList;
+ int index=0;
+ while(index<sources.size())
+ {
+ if(sources.at(index).contains("*"))
+ {
+ QStringList toParse=sources.at(index).split(splitFolder);
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("before wildcard parse: %1, toParse: %2, is valid: %3").arg(sources.at(index)).arg(toParse.join(", ")).arg(splitFolder.isValid()));
+ QList<QStringList> recomposedSource;
+ recomposedSource << (QStringList() << "");
+ while(toParse.size()>0)
+ {
+ if(toParse.first().contains('*'))
+ {
+ QString toParseFirst=toParse.first();
+ if(toParseFirst=="")
+ toParseFirst+="/";
+ QList<QStringList> newRecomposedSource;
+ QRegExp toResolv=QRegExp(toParseFirst.replace('*',"[^/\\\\]*"));
+ int index_recomposedSource=0;
+ while(index_recomposedSource<recomposedSource.size())//parse each url part
+ {
+ QFileInfo info(recomposedSource.at(index_recomposedSource).join("/"));
+ if(info.isDir())
+ {
+ QDir folder(info.absoluteFilePath());
+ QFileInfoList fileFile=folder.entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System);//QStringList() << toResolv
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("list the folder: %1, with the wildcard: %2").arg(info.absoluteFilePath()).arg(toResolv.pattern()));
+ int index_fileList=0;
+ while(index_fileList<fileFile.size())
+ {
+ if(fileFile.at(index_fileList).fileName().contains(toResolv))
+ {
+ QStringList tempList=recomposedSource.at(index_recomposedSource);
+ tempList << fileFile.at(index_fileList).fileName();
+ newRecomposedSource << tempList;
+ }
+ index_fileList++;
+ }
+ }
+ index_recomposedSource++;
+ }
+ recomposedSource=newRecomposedSource;
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("add toParse: %1").arg(toParse.join("/")));
+ int index_recomposedSource=0;
+ while(index_recomposedSource<recomposedSource.size())
+ {
+ recomposedSource[index_recomposedSource] << toParse.first();
+ if(!QFileInfo(recomposedSource.at(index_recomposedSource).join("/")).exists())
+ recomposedSource.removeAt(index_recomposedSource);
+ else
+ index_recomposedSource++;
+ }
+ }
+ toParse.removeFirst();
+ }
+ int index_recomposedSource=0;
+ while(index_recomposedSource<recomposedSource.size())
+ {
+ returnList<<recomposedSource.at(index_recomposedSource).join("/");
+ index_recomposedSource++;
+ }
+ }
+ else
+ returnList << sources.at(index);
+ index++;
+ }
+ return returnList;
+}
+
+void scanFileOrFolder::setFilters(QList<Filters_rules> include,QList<Filters_rules> exclude)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ QMutexLocker lock(&filtersMutex);
+ this->include_send=include;
+ this->exclude_send=exclude;
+ reloadTheNewFilters=true;
+ haveFilters=include_send.size()>0 || exclude_send.size()>0;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("haveFilters: %1, include_send.size(): %2, exclude_send.size(): %3").arg(haveFilters).arg(include_send.size()).arg(exclude_send.size()));
+}
+
+//set action if Folder are same or exists
+void scanFileOrFolder::setFolderExistsAction(FolderExistsAction action,QString newName)
+{
+ this->newName=newName;
+ folderExistsAction=action;
+ waitOneAction.release();
+}
+
+//set action if error
+void scanFileOrFolder::setFolderErrorAction(FileErrorAction action)
+{
+ fileErrorAction=action;
+ waitOneAction.release();
+}
+
+void scanFileOrFolder::stop()
+{
+ stopIt=true;
+ waitOneAction.release();
+}
+
+void scanFileOrFolder::run()
+{
+ stopped=false;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start the listing with destination: "+destination+", mode: "+QString::number(mode));
+ QDir destinationFolder(destination);
+ int sourceIndex=0;
+ while(sourceIndex<sources.size())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"size source to list: "+QString::number(sourceIndex)+"/"+QString::number(sources.size()));
+ if(stopIt)
+ {
+ stopped=true;
+ return;
+ }
+ QFileInfo source=sources.at(sourceIndex);
+ if(source.isDir())
+ {
+ /* Bad way; when you copy c:\source\folder into d:\destination, you wait it create the folder d:\destination\folder
+ //listFolder(source.absoluteFilePath()+QDir::separator(),destination);
+ listFolder(source.absoluteFilePath()+"/",destination);//put unix separator because it's transformed into that's under windows too
+ */
+ //put unix separator because it's transformed into that's under windows too
+ listFolder(source.absolutePath()+"/",destinationFolder.absolutePath()+"/",source.fileName()+"/",source.fileName()+"/");
+ }
+ else
+ emit fileTransfer(source,destination+source.fileName(),mode);
+ sourceIndex++;
+ }
+ stopped=true;
+ if(stopIt)
+ return;
+ emit finishedTheListing();
+}
+
+void scanFileOrFolder::listFolder(const QString& source,const QString& destination,const QString& sourceSuffixPath,QString destinationSuffixPath)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"source: "+source+", destination: "+destination+", sourceSuffixPath: "+sourceSuffixPath+", destinationSuffixPath: "+destinationSuffixPath);
+ if(stopIt)
+ return;
+ QString newSource = source+sourceSuffixPath;
+ QString finalDest = destination+destinationSuffixPath;
+ //if is same
+ if(newSource==finalDest)
+ {
+ QDir dirSource(newSource);
+ emit folderAlreadyExists(dirSource.absolutePath(),finalDest,true);
+ waitOneAction.acquire();
+ switch(folderExistsAction)
+ {
+ case FolderExists_Merge:
+ break;
+ case FolderExists_Skip:
+ return;
+ break;
+ case FolderExists_Rename:
+ if(newName=="")
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"pattern: "+folder_isolation.pattern());
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"full: "+destinationSuffixPath);
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"prefix: "+prefix);
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"suffix: "+suffix);
+ //resolv the new name
+ QFileInfo destinationInfo;
+ int num=1;
+ do
+ {
+ if(num==1)
+ {
+ if(firstRenamingRule=="")
+ destinationSuffixPath=tr("%1 - copy").arg(suffix);
+ else
+ {
+ destinationSuffixPath=firstRenamingRule;
+ destinationSuffixPath.replace("%name%",suffix);
+ }
+ }
+ else
+ {
+ if(otherRenamingRule=="")
+ destinationSuffixPath=tr("%1 - copy (%2)").arg(suffix).arg(num);
+ else
+ {
+ destinationSuffixPath=otherRenamingRule;
+ destinationSuffixPath.replace("%name%",suffix);
+ destinationSuffixPath.replace("%number%",QString::number(num));
+ }
+ }
+ num++;
+ destinationInfo.setFile(prefix+destinationSuffixPath);
+ }
+ while(destinationInfo.exists());
+ }
+ else
+ destinationSuffixPath = newName;
+ destinationSuffixPath+="/";
+ finalDest = destination+destinationSuffixPath;
+ break;
+ default:
+ return;
+ break;
+ }
+ }
+ //check if destination exists
+ if(checkDestinationExists)
+ {
+ QDir finalSource(newSource);
+ QDir destinationDir(finalDest);
+ if(destinationDir.exists())
+ {
+ emit folderAlreadyExists(finalSource.absolutePath(),destinationDir.absolutePath(),false);
+ waitOneAction.acquire();
+ switch(folderExistsAction)
+ {
+ case FolderExists_Merge:
+ break;
+ case FolderExists_Skip:
+ return;
+ break;
+ case FolderExists_Rename:
+ if(newName=="")
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"pattern: "+folder_isolation.pattern());
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"full: "+destinationSuffixPath);
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"prefix: "+prefix);
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"suffix: "+suffix);
+ //resolv the new name
+ QFileInfo destinationInfo;
+ int num=1;
+ do
+ {
+ if(num==1)
+ {
+ if(firstRenamingRule=="")
+ destinationSuffixPath=tr("%1 - copy").arg(suffix);
+ else
+ {
+ destinationSuffixPath=firstRenamingRule;
+ destinationSuffixPath.replace("%name%",suffix);
+ }
+ }
+ else
+ {
+ if(otherRenamingRule=="")
+ destinationSuffixPath=tr("%1 - copy (%2)").arg(suffix).arg(num);
+ else
+ {
+ destinationSuffixPath=otherRenamingRule;
+ destinationSuffixPath.replace("%name%",suffix);
+ destinationSuffixPath.replace("%number%",QString::number(num));
+ }
+ }
+ destinationInfo.setFile(prefix+destinationSuffixPath);
+ num++;
+ }
+ while(destinationInfo.exists());
+ }
+ else
+ destinationSuffixPath = newName;
+ destinationSuffixPath+="/";
+ finalDest = destination+destinationSuffixPath;
+ break;
+ default:
+ return;
+ break;
+ }
+ }
+ }
+ //do source check
+ QDir finalSource(newSource);
+ QFileInfo dirInfo(newSource);
+ //check of source is readable
+ do
+ {
+ fileErrorAction=FileError_NotSet;
+ if(!dirInfo.isReadable() || !dirInfo.isExecutable() || !dirInfo.exists())
+ {
+ if(!dirInfo.exists())
+ emit errorOnFolder(dirInfo,tr("The folder not exists"));
+ else
+ emit errorOnFolder(dirInfo,tr("The folder is not readable"));
+ waitOneAction.acquire();
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"actionNum: "+QString::number(fileErrorAction));
+ }
+ } while(fileErrorAction==FileError_Retry);
+ /// \todo check here if the folder is not readable or not exists
+ QFileInfoList entryList=finalSource.entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System,QDir::DirsFirst|QDir::Name|QDir::IgnoreCase);//possible wait time here
+ int sizeEntryList=entryList.size();
+ emit newFolderListing(newSource);
+ if(sizeEntryList==0)
+ emit addToMkPath(finalDest);
+ for (int index=0;index<sizeEntryList;++index)
+ {
+ QFileInfo fileInfo=entryList.at(index);
+ if(stopIt)
+ return;
+ if(haveFilters)
+ {
+ if(reloadTheNewFilters)
+ {
+ QMutexLocker lock(&filtersMutex);
+ QCoreApplication::processEvents(QEventLoop::AllEvents);
+ reloadTheNewFilters=false;
+ this->include=this->include_send;
+ this->exclude=this->exclude_send;
+ }
+ QString fileName=fileInfo.fileName();
+ if(fileInfo.isDir())
+ {
+ bool excluded=false,included=(include.size()==0);
+ int filters_index=0;
+ while(filters_index<exclude.size())
+ {
+ if(exclude.at(filters_index).apply_on==ApplyOn_folder || exclude.at(filters_index).apply_on==ApplyOn_fileAndFolder)
+ {
+ if(fileName.contains(exclude.at(filters_index).regex))
+ {
+ excluded=true;
+ break;
+ }
+ }
+ filters_index++;
+ }
+ if(excluded)
+ {}
+ else
+ {
+ filters_index=0;
+ while(filters_index<include.size())
+ {
+ if(include.at(filters_index).apply_on==ApplyOn_folder || include.at(filters_index).apply_on==ApplyOn_fileAndFolder)
+ {
+ if(fileName.contains(include.at(filters_index).regex))
+ {
+ included=true;
+ break;
+ }
+ }
+ filters_index++;
+ }
+ if(!included)
+ {}
+ else
+ listFolder(source,destination,sourceSuffixPath+fileInfo.fileName()+"/",destinationSuffixPath+fileName+"/");
+ }
+ }
+ else
+ {
+ bool excluded=false,included=(include.size()==0);
+ int filters_index=0;
+ while(filters_index<exclude.size())
+ {
+ if(exclude.at(filters_index).apply_on==ApplyOn_file || exclude.at(filters_index).apply_on==ApplyOn_fileAndFolder)
+ {
+ if(fileName.contains(exclude.at(filters_index).regex))
+ {
+ excluded=true;
+ break;
+ }
+ }
+ filters_index++;
+ }
+ if(excluded)
+ {}
+ else
+ {
+ filters_index=0;
+ while(filters_index<include.size())
+ {
+ if(include.at(filters_index).apply_on==ApplyOn_file || include.at(filters_index).apply_on==ApplyOn_fileAndFolder)
+ {
+ if(fileName.contains(include.at(filters_index).regex))
+ {
+ included=true;
+ break;
+ }
+ }
+ filters_index++;
+ }
+ if(!included)
+ {}
+ else
+ {
+ bool sendToTransfer=false;
+ if(!rsync)
+ sendToTransfer=true;
+ else if(!QFile::exists(finalDest+fileName))
+ sendToTransfer=true;
+ else if(fileInfo.lastModified()!=QFileInfo(finalDest+fileName).lastModified())
+ sendToTransfer=true;
+ if(sendToTransfer)
+ emit fileTransfer(fileInfo.absoluteFilePath(),finalDest+fileName,mode);
+ }
+ }
+ }
+ }
+ else
+ {
+ if(fileInfo.isDir())//possible wait time here
+ //listFolder(source,destination,suffixPath+fileInfo.fileName()+QDir::separator());
+ listFolder(source,destination,sourceSuffixPath+fileInfo.fileName()+"/",destinationSuffixPath+fileInfo.fileName()+"/");//put unix separator because it's transformed into that's under windows too
+ else
+ {
+ bool sendToTransfer=false;
+ if(!rsync)
+ sendToTransfer=true;
+ else if(!QFile::exists(finalDest+fileInfo.fileName()))
+ sendToTransfer=true;
+ else if(fileInfo.lastModified()!=QFileInfo(finalDest+fileInfo.fileName()).lastModified())
+ sendToTransfer=true;
+ if(sendToTransfer)
+ emit fileTransfer(fileInfo.absoluteFilePath(),finalDest+fileInfo.fileName(),mode);
+ }
+ }
+ }
+ if(rsync)
+ {
+ //check the reverse path here
+ QFileInfoList entryListDestination=QDir(finalDest).entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System,QDir::DirsFirst|QDir::Name|QDir::IgnoreCase);//possible wait time here
+ int sizeEntryListDestination=entryListDestination.size();
+ int index=0;
+ for (int indexDestination=0;indexDestination<sizeEntryListDestination;++indexDestination)
+ {
+ index=0;
+ while(index<sizeEntryList)
+ {
+ if(entryListDestination.at(indexDestination).fileName()==entryList.at(index).fileName())
+ break;
+ index++;
+ }
+ if(index==sizeEntryList)
+ {
+ //then not found, need be remove
+ emit addToRmForRsync(finalDest+entryListDestination.at(indexDestination).fileName());
+ }
+ }
+ return;
+ }
+
+ if(mode==Move)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"newSource: "+newSource+", sizeEntryList: "+QString::number(sizeEntryList));
+ emit addToRmPath(newSource,sizeEntryList);
+ }
+}
+
+//set if need check if the destination exists
+void scanFileOrFolder::setCheckDestinationFolderExists(const bool checkDestinationFolderExists)
+{
+ this->checkDestinationExists=checkDestinationFolderExists;
+}
+
+void scanFileOrFolder::setRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
+{
+ this->firstRenamingRule=firstRenamingRule;
+ this->otherRenamingRule=otherRenamingRule;
+}
+
+/// \brief set rsync
+void scanFileOrFolder::setRsync(const bool rsync)
+{
+ this->rsync=rsync;
+}
diff --git a/plugins-alternative/CopyEngine/Rsync/scanFileOrFolder.h b/plugins-alternative/CopyEngine/Rsync/scanFileOrFolder.h
new file mode 100644
index 0000000..2109df2
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/scanFileOrFolder.h
@@ -0,0 +1,91 @@
+/** \file scanFileOrFolder.h
+\brief Thread changed to list recursively the folder
+\author alpha_one_x86
+\version 0.3
+\date 2011 */
+
+#include <QThread>
+#include <QStringList>
+#include <QString>
+#include <QList>
+#include <QFileInfo>
+#include <QDir>
+#include <QSemaphore>
+#include <QEventLoop>
+#include <QCoreApplication>
+#include <QMutexLocker>
+
+#include "Environment.h"
+
+#ifndef SCANFILEORFOLDER_H
+#define SCANFILEORFOLDER_H
+
+/// \brief Thread changed to list recursively the folder
+class scanFileOrFolder : public QThread
+{
+ Q_OBJECT
+public:
+ explicit scanFileOrFolder(CopyMode mode);
+ ~scanFileOrFolder();
+ /// \brief to the a folder listing
+ void stop();
+ /// \brief to get if is finished
+ bool isFinished();
+ /// \brief set action if Folder are same or exists
+ void setFolderExistsAction(FolderExistsAction action,QString newName="");
+ /// \brief set action if error
+ void setFolderErrorAction(FileErrorAction action);
+ /// \brief set if need check if the destination exists
+ void setCheckDestinationFolderExists(const bool checkDestinationFolderExists);
+ void setRenamingRules(QString firstRenamingRule,QString otherRenamingRule);
+ /// \brief set rsync
+ void setRsync(const bool rsync);
+signals:
+ void fileTransfer(const QFileInfo &source,const QFileInfo &destination,const CopyMode &mode);
+ /// \brief To debug source
+ void debugInformation(const DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne);
+ void folderAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame);
+ void errorOnFolder(const QFileInfo &fileInfo,const QString &errorString);
+ void finishedTheListing();
+
+ void newFolderListing(const QString &path);
+ void addToMkPath(const QString& folder);
+ void addToRmPath(const QString& folder,const int& inodeToRemove);
+ void addToRmForRsync(const QString& inode);
+public slots:
+ void addToList(const QStringList& sources,const QString& destination);
+ void setFilters(QList<Filters_rules> include,QList<Filters_rules> exclude);
+protected:
+ void run();
+private:
+ QStringList sources;
+ QString destination;
+ volatile bool stopIt;
+ void listFolder(const QString& source,const QString& destination,const QString& sourceSuffixPath,QString destinationSuffixPath);
+ volatile bool stopped;
+ QSemaphore waitOneAction;
+ FolderExistsAction folderExistsAction;
+ FileErrorAction fileErrorAction;
+ volatile bool checkDestinationExists;
+ QString newName;
+ QRegExp folder_isolation;
+ QString prefix;
+ QString suffix;
+ CopyMode mode;
+ bool rsync;
+ QList<Filters_rules> include,exclude;
+ QList<Filters_rules> include_send,exclude_send;
+ bool reloadTheNewFilters;
+ bool haveFilters;
+ QMutex filtersMutex;
+ QString firstRenamingRule;
+ QString otherRenamingRule;
+ /** Parse the multiple wildcard source, it allow resolv multiple wildcard with Qt into their path
+ * The string: /toto/f*a/yy*a/toto.mp3
+ * Will give: /toto/f1a/yy*a/toto.mp3, /toto/f2a/yy*a/toto.mp3
+ * Will give: /toto/f2a/yy1a/toto.mp3, /toto/f2a/yy2a/toto.mp3
+ */
+ QStringList parseWildcardSources(const QStringList &sources);
+};
+
+#endif // SCANFILEORFOLDER_H
diff --git a/plugins-alternative/Themes/Clean/Languages/ar/translation.qm b/plugins-alternative/Themes/Clean/Languages/ar/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Clean/Languages/ar/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Clean/Languages/ar/translation.ts b/plugins-alternative/Themes/Clean/Languages/ar/translation.ts
index 9f71a6e..81df74e 100644
--- a/plugins-alternative/Themes/Clean/Languages/ar/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/ar/translation.ts
@@ -4,27 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="140"/>
- <source>Listing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="143"/>
- <source>Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="146"/>
- <source>Listing &amp; Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="149"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="152"/>
+ <location filename="../../interface.cpp" line="145"/>
<source>%1/%2 files, %3/%4</source>
<translation type="unfinished"></translation>
</message>
@@ -32,47 +12,42 @@
<context>
<name>interface</name>
<message>
- <location filename="../../interface.ui"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="32"/>
<source>Action:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="44"/>
<source>In wait</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="78"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="87"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="96"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="105"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="114"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="123"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Clean/Languages/de/translation.qm b/plugins-alternative/Themes/Clean/Languages/de/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Clean/Languages/de/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Clean/Languages/de/translation.ts b/plugins-alternative/Themes/Clean/Languages/de/translation.ts
index 9f71a6e..7ea1972 100644
--- a/plugins-alternative/Themes/Clean/Languages/de/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/de/translation.ts
@@ -1,80 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
-<TS version="2.0">
+<TS version="2.0" language="de" sourcelanguage="en">
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="140"/>
- <source>Listing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="143"/>
- <source>Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="146"/>
- <source>Listing &amp; Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="149"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="152"/>
+ <location filename="../../interface.cpp" line="145"/>
<source>%1/%2 files, %3/%4</source>
- <translation type="unfinished"></translation>
+ <translation>%1/%2 dateien, %3/%4</translation>
</message>
</context>
<context>
<name>interface</name>
<message>
- <location filename="../../interface.ui"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="32"/>
<source>Action:</source>
- <translation type="unfinished"></translation>
+ <translation>Aktion:</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="44"/>
<source>In wait</source>
- <translation type="unfinished"></translation>
+ <translation>auf der Lauer</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="78"/>
<source>Add file</source>
- <translation type="unfinished"></translation>
+ <translation>Datei hinzufügen</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="87"/>
<source>Add folder</source>
- <translation type="unfinished"></translation>
+ <translation>Ordner hinzufügen</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="96"/>
<source>Move file(s)</source>
- <translation type="unfinished"></translation>
+ <translation>Bewegen Sie Datei (en)</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="105"/>
<source>Move folder</source>
- <translation type="unfinished"></translation>
+ <translation>bewegen Sie Ordner</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="114"/>
<source>Copy file(s)</source>
- <translation type="unfinished"></translation>
+ <translation>Kopieren Sie die Datei (en)</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="123"/>
<source>Copy folder</source>
- <translation type="unfinished"></translation>
+ <translation>kopieren Sie das Verzeichnis</translation>
</message>
</context>
</TS>
diff --git a/plugins-alternative/Themes/Clean/Languages/el/translation.qm b/plugins-alternative/Themes/Clean/Languages/el/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Clean/Languages/el/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Clean/Languages/el/translation.ts b/plugins-alternative/Themes/Clean/Languages/el/translation.ts
index 9f71a6e..81df74e 100644
--- a/plugins-alternative/Themes/Clean/Languages/el/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/el/translation.ts
@@ -4,27 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="140"/>
- <source>Listing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="143"/>
- <source>Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="146"/>
- <source>Listing &amp; Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="149"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="152"/>
+ <location filename="../../interface.cpp" line="145"/>
<source>%1/%2 files, %3/%4</source>
<translation type="unfinished"></translation>
</message>
@@ -32,47 +12,42 @@
<context>
<name>interface</name>
<message>
- <location filename="../../interface.ui"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="32"/>
<source>Action:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="44"/>
<source>In wait</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="78"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="87"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="96"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="105"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="114"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="123"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Clean/Languages/es/translation.qm b/plugins-alternative/Themes/Clean/Languages/es/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Clean/Languages/es/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Clean/Languages/es/translation.ts b/plugins-alternative/Themes/Clean/Languages/es/translation.ts
index 9f71a6e..70b8246 100644
--- a/plugins-alternative/Themes/Clean/Languages/es/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/es/translation.ts
@@ -1,80 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
-<TS version="2.0">
+<TS version="2.0" language="es" sourcelanguage="en">
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="140"/>
- <source>Listing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="143"/>
- <source>Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="146"/>
- <source>Listing &amp; Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="149"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="152"/>
+ <location filename="../../interface.cpp" line="145"/>
<source>%1/%2 files, %3/%4</source>
- <translation type="unfinished"></translation>
+ <translation>%1/%2 archivos, %3/%4</translation>
</message>
</context>
<context>
<name>interface</name>
<message>
- <location filename="../../interface.ui"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="32"/>
<source>Action:</source>
- <translation type="unfinished"></translation>
+ <translation>Acción:</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="44"/>
<source>In wait</source>
- <translation type="unfinished"></translation>
+ <translation>En espera</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="78"/>
<source>Add file</source>
- <translation type="unfinished"></translation>
+ <translation>Añadir archivo</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="87"/>
<source>Add folder</source>
- <translation type="unfinished"></translation>
+ <translation>Añadir carpeta</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="96"/>
<source>Move file(s)</source>
- <translation type="unfinished"></translation>
+ <translation>Mover archivo(s)</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="105"/>
<source>Move folder</source>
- <translation type="unfinished"></translation>
+ <translation>Mueva la carpeta</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="114"/>
<source>Copy file(s)</source>
- <translation type="unfinished"></translation>
+ <translation>Copia el archivo(s)</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="123"/>
<source>Copy folder</source>
- <translation type="unfinished"></translation>
+ <translation>Copia la carpeta</translation>
</message>
</context>
</TS>
diff --git a/plugins-alternative/Themes/Clean/Languages/fr/translation.qm b/plugins-alternative/Themes/Clean/Languages/fr/translation.qm
deleted file mode 100644
index f431088..0000000
--- a/plugins-alternative/Themes/Clean/Languages/fr/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Clean/Languages/fr/translation.ts b/plugins-alternative/Themes/Clean/Languages/fr/translation.ts
index 8b82f97..51fd57f 100644
--- a/plugins-alternative/Themes/Clean/Languages/fr/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/fr/translation.ts
@@ -4,27 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="140"/>
- <source>Listing</source>
- <translation>Lister</translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="143"/>
- <source>Copying</source>
- <translation>Copier</translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="146"/>
- <source>Listing &amp; Copying</source>
- <translation>Lister &amp; Copier</translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="149"/>
- <source>Ultracopier</source>
- <translation>Ultracopier</translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="152"/>
+ <location filename="../../interface.cpp" line="145"/>
<source>%1/%2 files, %3/%4</source>
<translation>%1/%2 fichiers, %3/%4</translation>
</message>
@@ -32,47 +12,42 @@
<context>
<name>interface</name>
<message>
- <location filename="../../interface.ui"/>
- <source>Ultracopier</source>
- <translation>Ultracopier</translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="32"/>
<source>Action:</source>
<translation>Action:</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="44"/>
<source>In wait</source>
<translation>En attente</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="96"/>
<source>Move file(s)</source>
<translation>Déplacer des fichiers</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="105"/>
<source>Move folder</source>
<translation>Déplacer un dossier</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="114"/>
<source>Copy file(s)</source>
<translation>Copier des fichiers</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="123"/>
<source>Copy folder</source>
<translation>Copier un dossier</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="87"/>
<source>Add folder</source>
<translation>Ajouter un dossier</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="78"/>
<source>Add file</source>
<translation>Ajout de fichier</translation>
</message>
diff --git a/plugins-alternative/Themes/Clean/Languages/hi/translation.qm b/plugins-alternative/Themes/Clean/Languages/hi/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Clean/Languages/hi/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Clean/Languages/hi/translation.ts b/plugins-alternative/Themes/Clean/Languages/hi/translation.ts
index 9f71a6e..81df74e 100644
--- a/plugins-alternative/Themes/Clean/Languages/hi/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/hi/translation.ts
@@ -4,27 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="140"/>
- <source>Listing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="143"/>
- <source>Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="146"/>
- <source>Listing &amp; Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="149"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="152"/>
+ <location filename="../../interface.cpp" line="145"/>
<source>%1/%2 files, %3/%4</source>
<translation type="unfinished"></translation>
</message>
@@ -32,47 +12,42 @@
<context>
<name>interface</name>
<message>
- <location filename="../../interface.ui"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="32"/>
<source>Action:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="44"/>
<source>In wait</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="78"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="87"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="96"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="105"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="114"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="123"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Clean/Languages/id/translation.qm b/plugins-alternative/Themes/Clean/Languages/id/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Clean/Languages/id/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Clean/Languages/id/translation.ts b/plugins-alternative/Themes/Clean/Languages/id/translation.ts
index 9f71a6e..81df74e 100644
--- a/plugins-alternative/Themes/Clean/Languages/id/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/id/translation.ts
@@ -4,27 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="140"/>
- <source>Listing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="143"/>
- <source>Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="146"/>
- <source>Listing &amp; Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="149"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="152"/>
+ <location filename="../../interface.cpp" line="145"/>
<source>%1/%2 files, %3/%4</source>
<translation type="unfinished"></translation>
</message>
@@ -32,47 +12,42 @@
<context>
<name>interface</name>
<message>
- <location filename="../../interface.ui"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="32"/>
<source>Action:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="44"/>
<source>In wait</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="78"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="87"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="96"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="105"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="114"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="123"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Clean/Languages/it/translation.qm b/plugins-alternative/Themes/Clean/Languages/it/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Clean/Languages/it/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Clean/Languages/it/translation.ts b/plugins-alternative/Themes/Clean/Languages/it/translation.ts
index 9f71a6e..b44bd5f 100644
--- a/plugins-alternative/Themes/Clean/Languages/it/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/it/translation.ts
@@ -1,80 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
-<TS version="2.0">
+<TS version="2.0" language="it" sourcelanguage="en">
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="140"/>
- <source>Listing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="143"/>
- <source>Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="146"/>
- <source>Listing &amp; Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="149"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="152"/>
+ <location filename="../../interface.cpp" line="145"/>
<source>%1/%2 files, %3/%4</source>
- <translation type="unfinished"></translation>
+ <translation></translation>
</message>
</context>
<context>
<name>interface</name>
<message>
- <location filename="../../interface.ui"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="32"/>
<source>Action:</source>
- <translation type="unfinished"></translation>
+ <translation>Azione:</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="44"/>
<source>In wait</source>
- <translation type="unfinished"></translation>
+ <translation>In attesa</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="78"/>
<source>Add file</source>
- <translation type="unfinished"></translation>
+ <translation>Aggiungi file</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="87"/>
<source>Add folder</source>
- <translation type="unfinished"></translation>
+ <translation>Aggiungi cartella</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="96"/>
<source>Move file(s)</source>
- <translation type="unfinished"></translation>
+ <translation>Spostare file(s)</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="105"/>
<source>Move folder</source>
- <translation type="unfinished"></translation>
+ <translation>Spostare la cartella</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="114"/>
<source>Copy file(s)</source>
- <translation type="unfinished"></translation>
+ <translation>Copiare il file (s)</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="123"/>
<source>Copy folder</source>
- <translation type="unfinished"></translation>
+ <translation>Copia la cartella</translation>
</message>
</context>
</TS>
diff --git a/plugins-alternative/Themes/Clean/Languages/ja/translation.qm b/plugins-alternative/Themes/Clean/Languages/ja/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Clean/Languages/ja/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Clean/Languages/ja/translation.ts b/plugins-alternative/Themes/Clean/Languages/ja/translation.ts
index 9f71a6e..81df74e 100644
--- a/plugins-alternative/Themes/Clean/Languages/ja/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/ja/translation.ts
@@ -4,27 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="140"/>
- <source>Listing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="143"/>
- <source>Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="146"/>
- <source>Listing &amp; Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="149"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="152"/>
+ <location filename="../../interface.cpp" line="145"/>
<source>%1/%2 files, %3/%4</source>
<translation type="unfinished"></translation>
</message>
@@ -32,47 +12,42 @@
<context>
<name>interface</name>
<message>
- <location filename="../../interface.ui"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="32"/>
<source>Action:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="44"/>
<source>In wait</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="78"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="87"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="96"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="105"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="114"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="123"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Clean/Languages/ko/translation.ts b/plugins-alternative/Themes/Clean/Languages/ko/translation.ts
new file mode 100644
index 0000000..41627de
--- /dev/null
+++ b/plugins-alternative/Themes/Clean/Languages/ko/translation.ts
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ko_KR">
+<context>
+ <name>InterfacePlugin</name>
+ <message>
+ <location filename="../../interface.cpp" line="+145"/>
+ <source>%1/%2 files, %3/%4</source>
+ <translation type="unfinished">%1/%2 파일, %3/%4</translation>
+ </message>
+</context>
+<context>
+ <name>interface</name>
+ <message>
+ <location filename="../../interface.ui" line="+32"/>
+ <source>Action:</source>
+ <translation type="unfinished">실행:</translation>
+ </message>
+ <message>
+ <location line="+12"/>
+ <source>In wait</source>
+ <translation type="unfinished">대기중</translation>
+ </message>
+ <message>
+ <location line="+34"/>
+ <source>Add file</source>
+ <translation type="unfinished">파일 추가</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Add folder</source>
+ <translation type="unfinished">폴더 추가</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished">파일 이동</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Move folder</source>
+ <translation type="unfinished">폴더 이동</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished">파일 복사</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Copy folder</source>
+ <translation type="unfinished">폴더 복사</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Clean/Languages/nl/translation.qm b/plugins-alternative/Themes/Clean/Languages/nl/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Clean/Languages/nl/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Clean/Languages/nl/translation.ts b/plugins-alternative/Themes/Clean/Languages/nl/translation.ts
index 9f71a6e..81df74e 100644
--- a/plugins-alternative/Themes/Clean/Languages/nl/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/nl/translation.ts
@@ -4,27 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="140"/>
- <source>Listing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="143"/>
- <source>Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="146"/>
- <source>Listing &amp; Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="149"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="152"/>
+ <location filename="../../interface.cpp" line="145"/>
<source>%1/%2 files, %3/%4</source>
<translation type="unfinished"></translation>
</message>
@@ -32,47 +12,42 @@
<context>
<name>interface</name>
<message>
- <location filename="../../interface.ui"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="32"/>
<source>Action:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="44"/>
<source>In wait</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="78"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="87"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="96"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="105"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="114"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="123"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Clean/Languages/no/translation.qm b/plugins-alternative/Themes/Clean/Languages/no/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Clean/Languages/no/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Clean/Languages/no/translation.ts b/plugins-alternative/Themes/Clean/Languages/no/translation.ts
index 9f71a6e..81df74e 100644
--- a/plugins-alternative/Themes/Clean/Languages/no/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/no/translation.ts
@@ -4,27 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="140"/>
- <source>Listing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="143"/>
- <source>Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="146"/>
- <source>Listing &amp; Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="149"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="152"/>
+ <location filename="../../interface.cpp" line="145"/>
<source>%1/%2 files, %3/%4</source>
<translation type="unfinished"></translation>
</message>
@@ -32,47 +12,42 @@
<context>
<name>interface</name>
<message>
- <location filename="../../interface.ui"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="32"/>
<source>Action:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="44"/>
<source>In wait</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="78"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="87"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="96"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="105"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="114"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="123"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Clean/Languages/pl/translation.qm b/plugins-alternative/Themes/Clean/Languages/pl/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Clean/Languages/pl/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Clean/Languages/pl/translation.ts b/plugins-alternative/Themes/Clean/Languages/pl/translation.ts
index 9f71a6e..81df74e 100644
--- a/plugins-alternative/Themes/Clean/Languages/pl/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/pl/translation.ts
@@ -4,27 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="140"/>
- <source>Listing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="143"/>
- <source>Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="146"/>
- <source>Listing &amp; Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="149"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="152"/>
+ <location filename="../../interface.cpp" line="145"/>
<source>%1/%2 files, %3/%4</source>
<translation type="unfinished"></translation>
</message>
@@ -32,47 +12,42 @@
<context>
<name>interface</name>
<message>
- <location filename="../../interface.ui"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="32"/>
<source>Action:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="44"/>
<source>In wait</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="78"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="87"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="96"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="105"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="114"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="123"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Clean/Languages/ru/translation.qm b/plugins-alternative/Themes/Clean/Languages/ru/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Clean/Languages/ru/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Clean/Languages/ru/translation.ts b/plugins-alternative/Themes/Clean/Languages/ru/translation.ts
index 9f71a6e..5f83874 100644
--- a/plugins-alternative/Themes/Clean/Languages/ru/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/ru/translation.ts
@@ -1,80 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
-<TS version="2.0">
+<TS version="2.0" language="ru" sourcelanguage="en">
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="140"/>
- <source>Listing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="143"/>
- <source>Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="146"/>
- <source>Listing &amp; Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="149"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="152"/>
+ <location filename="../../interface.cpp" line="145"/>
<source>%1/%2 files, %3/%4</source>
- <translation type="unfinished"></translation>
+ <translation>%1/%2 файлы, %3/%4</translation>
</message>
</context>
<context>
<name>interface</name>
<message>
- <location filename="../../interface.ui"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="32"/>
<source>Action:</source>
- <translation type="unfinished"></translation>
+ <translation>Действие:</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="44"/>
<source>In wait</source>
- <translation type="unfinished"></translation>
+ <translation>В ожидании</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="78"/>
<source>Add file</source>
- <translation type="unfinished"></translation>
+ <translation>Добавить файл</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="87"/>
<source>Add folder</source>
- <translation type="unfinished"></translation>
+ <translation>Добавить папку</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="96"/>
<source>Move file(s)</source>
- <translation type="unfinished"></translation>
+ <translation>Перемещение файла (ов)</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="105"/>
<source>Move folder</source>
- <translation type="unfinished"></translation>
+ <translation>Перемещение папки</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="114"/>
<source>Copy file(s)</source>
- <translation type="unfinished"></translation>
+ <translation>Копировать файл (ы)</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="123"/>
<source>Copy folder</source>
- <translation type="unfinished"></translation>
+ <translation>Копировать папку</translation>
</message>
</context>
</TS>
diff --git a/plugins-alternative/Themes/Clean/Languages/th/translation.qm b/plugins-alternative/Themes/Clean/Languages/th/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Clean/Languages/th/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Clean/Languages/th/translation.ts b/plugins-alternative/Themes/Clean/Languages/th/translation.ts
index 9f71a6e..81df74e 100644
--- a/plugins-alternative/Themes/Clean/Languages/th/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/th/translation.ts
@@ -4,27 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="140"/>
- <source>Listing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="143"/>
- <source>Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="146"/>
- <source>Listing &amp; Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="149"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="152"/>
+ <location filename="../../interface.cpp" line="145"/>
<source>%1/%2 files, %3/%4</source>
<translation type="unfinished"></translation>
</message>
@@ -32,47 +12,42 @@
<context>
<name>interface</name>
<message>
- <location filename="../../interface.ui"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="32"/>
<source>Action:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="44"/>
<source>In wait</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="78"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="87"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="96"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="105"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="114"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="123"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Clean/Languages/tr/translation.qm b/plugins-alternative/Themes/Clean/Languages/tr/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Clean/Languages/tr/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Clean/Languages/tr/translation.ts b/plugins-alternative/Themes/Clean/Languages/tr/translation.ts
index 9f71a6e..81df74e 100644
--- a/plugins-alternative/Themes/Clean/Languages/tr/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/tr/translation.ts
@@ -4,27 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="140"/>
- <source>Listing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="143"/>
- <source>Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="146"/>
- <source>Listing &amp; Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="149"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="152"/>
+ <location filename="../../interface.cpp" line="145"/>
<source>%1/%2 files, %3/%4</source>
<translation type="unfinished"></translation>
</message>
@@ -32,47 +12,42 @@
<context>
<name>interface</name>
<message>
- <location filename="../../interface.ui"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="32"/>
<source>Action:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="44"/>
<source>In wait</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="78"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="87"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="96"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="105"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="114"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="123"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Clean/Languages/zh/translation.qm b/plugins-alternative/Themes/Clean/Languages/zh/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Clean/Languages/zh/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Clean/Languages/zh/translation.ts b/plugins-alternative/Themes/Clean/Languages/zh/translation.ts
index 9f71a6e..81df74e 100644
--- a/plugins-alternative/Themes/Clean/Languages/zh/translation.ts
+++ b/plugins-alternative/Themes/Clean/Languages/zh/translation.ts
@@ -4,27 +4,7 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="140"/>
- <source>Listing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="143"/>
- <source>Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="146"/>
- <source>Listing &amp; Copying</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="149"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="152"/>
+ <location filename="../../interface.cpp" line="145"/>
<source>%1/%2 files, %3/%4</source>
<translation type="unfinished"></translation>
</message>
@@ -32,47 +12,42 @@
<context>
<name>interface</name>
<message>
- <location filename="../../interface.ui"/>
- <source>Ultracopier</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="32"/>
<source>Action:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="44"/>
<source>In wait</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="78"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="87"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="96"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="105"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="114"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="123"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Clean/informations.xml b/plugins-alternative/Themes/Clean/informations.xml
index 9d11e1c..8e076a4 100644
--- a/plugins-alternative/Themes/Clean/informations.xml
+++ b/plugins-alternative/Themes/Clean/informations.xml
@@ -12,16 +12,16 @@
<!-- the date-time format should be in RFC822 format -->
<pubDate>1287496800</pubDate>
<!-- the architecture code of this plugin, found PlatformMacro.h into ultracopier source -->
- <architecture>linux-x86_64-pc</architecture>
+ <architecture>windows-x86</architecture>
<!-- Detailed description -->
<description xml:lang="en"><![CDATA[Clean style for Ultracopier]]></description>
<description xml:lang="fr"><![CDATA[Style Clean pour Ultracopier]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.0.5</version>
+ <version>0.3.1.0</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>Clean</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- >=ultracopier-0.3.0.5
+ >=ultracopier-0.3.1.0
]]></dependencies>
</package> \ No newline at end of file
diff --git a/plugins-alternative/Themes/Clean/interface.cpp b/plugins-alternative/Themes/Clean/interface.cpp
index b2d5e18..6d6c4b1 100644
--- a/plugins-alternative/Themes/Clean/interface.cpp
+++ b/plugins-alternative/Themes/Clean/interface.cpp
@@ -130,16 +130,16 @@ void InterfacePlugin::updateTitle()
switch(action)
{
case Listing:
- actionString=tr("Listing");
+ actionString=facilityEngine->translateText("Listing");
break;
case Copying:
- actionString=tr("Copying");
+ actionString=facilityEngine->translateText("Copying");
break;
case CopyingAndListing:
- actionString=tr("Listing & Copying");
+ actionString=facilityEngine->translateText("Listing and copying");
break;
case Idle:
- actionString=tr("Ultracopier");
+ actionString="Ultracopier";
break;
}
this->setWindowTitle(actionString+" - "+tr("%1/%2 files, %3/%4").arg(currentFile).arg(totalFile).arg(currentSize).arg(totalSize));
diff --git a/plugins-alternative/Themes/Clean/interface.h b/plugins-alternative/Themes/Clean/interface.h
index 9f4332a..b7ab57f 100644
--- a/plugins-alternative/Themes/Clean/interface.h
+++ b/plugins-alternative/Themes/Clean/interface.h
@@ -53,6 +53,7 @@ public slots:
void newLanguageLoaded();
void synchronizeItems(const QList<returnActionOnCopyList>& returnActions);
public:
+ /// \brief the transfer item with progression
struct ItemOfCopyListWithMoreInformations
{
quint64 currentProgression;
@@ -60,6 +61,7 @@ public:
ActionTypeCopyList actionType;
bool custom_with_progression;
};
+ /// \brief returned first transfer item
struct currentTransfertItem
{
quint64 id;
@@ -96,20 +98,31 @@ public:
/// \brief set if is in pause
void isInPause(bool);
signals:
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ /// \brief To debug source
+ void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
+ #endif
//set the transfer list
- void setActionOnList(ActionOnCopyList action);
+ void removeItems(QList<int> ids);
+ void moveItemsOnTop(QList<int> ids);
+ void moveItemsUp(QList<int> ids);
+ void moveItemsDown(QList<int> ids);
+ void moveItemsOnBottom(QList<int> ids);
+ void exportTransferList();
+ void importTransferList();
//user ask ask to add folder (add it with interface ask source/destination)
void userAddFolder(CopyMode);
void userAddFile(CopyMode);
+ void urlDropped(QList<QUrl> urls);
//action on the copy
void pause();
void resume();
void skip(quint64 id);
void cancel();
//edit the action
- void setCollisionAction(QString action);
- void setErrorAction(QString action);
- void newSpeedLimitation(qint64);///< -1 if not able, 0 if disabled
+ void sendCollisionAction(QString action);
+ void sendErrorAction(QString action);
+ void newSpeedLimitation(qint64);
public:
//constructor and destructor
InterfacePlugin(FacilityInterface * facilityEngine);
diff --git a/plugins-alternative/Themes/Clean/interface.pro b/plugins-alternative/Themes/Clean/interface.pro
index b902e63..20fd1dd 100644
--- a/plugins-alternative/Themes/Clean/interface.pro
+++ b/plugins-alternative/Themes/Clean/interface.pro
@@ -8,14 +8,14 @@ HEADERS = interface.h \
SOURCES = interface.cpp \
factory.cpp
TARGET = $$qtLibraryTarget(interface)
-TRANSLATIONS += Languages/fr/translation.ts \
+TRANSLATIONS += Languages/fr/translation.ts \
Languages/ar/translation.ts \
- Languages/ch/translation.ts \
+ Languages/zh/translation.ts \
Languages/es/translation.ts \
Languages/de/translation.ts \
Languages/el/translation.ts \
Languages/it/translation.ts \
- Languages/jp/translation.ts \
+ Languages/ja/translation.ts \
Languages/id/translation.ts \
Languages/pl/translation.ts \
Languages/ru/translation.ts \
@@ -24,7 +24,8 @@ TRANSLATIONS += Languages/fr/translation.ts \
Languages/hi/translation.ts \
Languages/nl/translation.ts \
Languages/no/translation.ts \
- Languages/pt/translation.ts
+ Languages/pt/translation.ts \
+ Languages/ko/translation.ts
FORMS += \
interface.ui
diff --git a/plugins-alternative/Themes/Clean/interface.ui b/plugins-alternative/Themes/Clean/interface.ui
index 8e74b41..1ac0e4a 100644
--- a/plugins-alternative/Themes/Clean/interface.ui
+++ b/plugins-alternative/Themes/Clean/interface.ui
@@ -11,10 +11,10 @@
</rect>
</property>
<property name="windowTitle">
- <string>Ultracopier</string>
+ <string notr="true">Ultracopier</string>
</property>
<property name="windowIcon">
- <iconset resource="resources.qrc">
+ <iconset>
<normaloff>:/systray_Caught_Unix.png</normaloff>:/systray_Caught_Unix.png</iconset>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
diff --git a/plugins-alternative/Themes/Teracopy/Languages/ar/translation.qm b/plugins-alternative/Themes/Teracopy/Languages/ar/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Teracopy/Languages/ar/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/Languages/ar/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/ar/translation.ts
index e8d8cf2..33cd084 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/ar/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/ar/translation.ts
@@ -4,32 +4,17 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="62"/>
- <source>Total: %3 of %4</source>
+ <location filename="../../interface.cpp" line="76"/>
+ <source>Total: %1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="63"/>
+ <location filename="../../interface.cpp" line="77"/>
<source>%1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="97"/>
- <source>Quit</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="333"/>
- <source>Copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="335"/>
- <source>Move</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="343"/>
+ <location filename="../../interface.cpp" line="212"/>
<source>%1% done</source>
<translation type="unfinished"></translation>
</message>
@@ -37,32 +22,32 @@
<context>
<name>interfaceCopy</name>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="159"/>
<source>&amp;More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="172"/>
<source>...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="210"/>
<source>&amp;Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="232"/>
<source>&amp;Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="251"/>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="281"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -71,37 +56,32 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="308"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="317"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="326"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="335"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="344"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="353"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/de/translation.qm b/plugins-alternative/Themes/Teracopy/Languages/de/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Teracopy/Languages/de/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/Languages/de/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/de/translation.ts
index e8d8cf2..237dc4f 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/de/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/de/translation.ts
@@ -1,109 +1,93 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
-<TS version="2.0">
+<TS version="2.0" language="de" sourcelanguage="en">
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="62"/>
- <source>Total: %3 of %4</source>
- <translation type="unfinished"></translation>
+ <location filename="../../interface.cpp" line="76"/>
+ <source>Total: %1 of %2</source>
+ <translation>Total: %1 von %2</translation>
</message>
<message>
- <location filename="../../interface.cpp" line="63"/>
+ <location filename="../../interface.cpp" line="77"/>
<source>%1 of %2</source>
- <translation type="unfinished"></translation>
+ <translation>%1 von %2</translation>
</message>
<message>
- <location filename="../../interface.cpp" line="97"/>
- <source>Quit</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="333"/>
- <source>Copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="335"/>
- <source>Move</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="343"/>
+ <location filename="../../interface.cpp" line="212"/>
<source>%1% done</source>
- <translation type="unfinished"></translation>
+ <translation>%1% erledigt</translation>
</message>
</context>
<context>
<name>interfaceCopy</name>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="159"/>
<source>&amp;More</source>
- <translation type="unfinished"></translation>
+ <translation>Mehr</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="172"/>
<source>...</source>
- <translation type="unfinished"></translation>
+ <translation></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="210"/>
<source>&amp;Pause</source>
- <translation type="unfinished"></translation>
+ <translation></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="232"/>
<source>&amp;Skip</source>
- <translation type="unfinished"></translation>
+ <translation>überspringen</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="251"/>
<source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
+ <translation>Stornieren</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="281"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;&lt;span style=&quot; font-size:8pt; text-decoration: underline; color:#0057ae;&quot;&gt;Support Ultracopier&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;&lt;span style=&quot; font-size:8pt; text-decoration: underline; color:#0057ae;&quot;&gt;unterstützen Ultracopier&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="308"/>
<source>Add file</source>
- <translation type="unfinished"></translation>
+ <translation>Datei hinzufügen</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="317"/>
<source>Add folder</source>
- <translation type="unfinished"></translation>
+ <translation>Ordner hinzufügen</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="326"/>
<source>Move file(s)</source>
- <translation type="unfinished"></translation>
+ <translation>Bewegen Sie Datei (en)</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="335"/>
<source>Move folder</source>
- <translation type="unfinished"></translation>
+ <translation>bewegen Sie Ordner</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="344"/>
<source>Copy file(s)</source>
- <translation type="unfinished"></translation>
+ <translation>Kopieren Sie die Datei (en)</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="353"/>
<source>Copy folder</source>
- <translation type="unfinished"></translation>
+ <translation>kopieren Sie das Verzeichnis</translation>
</message>
</context>
</TS>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/el/translation.qm b/plugins-alternative/Themes/Teracopy/Languages/el/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Teracopy/Languages/el/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/Languages/el/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/el/translation.ts
index e8d8cf2..33cd084 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/el/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/el/translation.ts
@@ -4,32 +4,17 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="62"/>
- <source>Total: %3 of %4</source>
+ <location filename="../../interface.cpp" line="76"/>
+ <source>Total: %1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="63"/>
+ <location filename="../../interface.cpp" line="77"/>
<source>%1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="97"/>
- <source>Quit</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="333"/>
- <source>Copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="335"/>
- <source>Move</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="343"/>
+ <location filename="../../interface.cpp" line="212"/>
<source>%1% done</source>
<translation type="unfinished"></translation>
</message>
@@ -37,32 +22,32 @@
<context>
<name>interfaceCopy</name>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="159"/>
<source>&amp;More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="172"/>
<source>...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="210"/>
<source>&amp;Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="232"/>
<source>&amp;Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="251"/>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="281"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -71,37 +56,32 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="308"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="317"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="326"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="335"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="344"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="353"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/es/translation.qm b/plugins-alternative/Themes/Teracopy/Languages/es/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Teracopy/Languages/es/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/Languages/es/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/es/translation.ts
index e8d8cf2..fe526da 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/es/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/es/translation.ts
@@ -1,109 +1,93 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
-<TS version="2.0">
+<TS version="2.0" language="es" sourcelanguage="en">
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="62"/>
- <source>Total: %3 of %4</source>
- <translation type="unfinished"></translation>
+ <location filename="../../interface.cpp" line="76"/>
+ <source>Total: %1 of %2</source>
+ <translation>Total: %1 de %2</translation>
</message>
<message>
- <location filename="../../interface.cpp" line="63"/>
+ <location filename="../../interface.cpp" line="77"/>
<source>%1 of %2</source>
- <translation type="unfinished"></translation>
+ <translation>%1 de %2</translation>
</message>
<message>
- <location filename="../../interface.cpp" line="97"/>
- <source>Quit</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="333"/>
- <source>Copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="335"/>
- <source>Move</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="343"/>
+ <location filename="../../interface.cpp" line="212"/>
<source>%1% done</source>
- <translation type="unfinished"></translation>
+ <translation>%1% hecho</translation>
</message>
</context>
<context>
<name>interfaceCopy</name>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="159"/>
<source>&amp;More</source>
- <translation type="unfinished"></translation>
+ <translation>Más</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="172"/>
<source>...</source>
- <translation type="unfinished"></translation>
+ <translation></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="210"/>
<source>&amp;Pause</source>
- <translation type="unfinished"></translation>
+ <translation>Pausa</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="232"/>
<source>&amp;Skip</source>
- <translation type="unfinished"></translation>
+ <translation>Omitir</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="251"/>
<source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
+ <translation>Cancelar</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="281"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;&lt;span style=&quot; font-size:8pt; text-decoration: underline; color:#0057ae;&quot;&gt;Support Ultracopier&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;&lt;span style=&quot; font-size:8pt; text-decoration: underline; color:#0057ae;&quot;&gt;Apoyar Ultracopier&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="308"/>
<source>Add file</source>
- <translation type="unfinished"></translation>
+ <translation>Añadir archivo</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="317"/>
<source>Add folder</source>
- <translation type="unfinished"></translation>
+ <translation>Añadir carpeta</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="326"/>
<source>Move file(s)</source>
- <translation type="unfinished"></translation>
+ <translation>Mover archivo(s)</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="335"/>
<source>Move folder</source>
- <translation type="unfinished"></translation>
+ <translation>Mueva la carpeta</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="344"/>
<source>Copy file(s)</source>
- <translation type="unfinished"></translation>
+ <translation>Copia el archivo(s)</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="353"/>
<source>Copy folder</source>
- <translation type="unfinished"></translation>
+ <translation>Copia la carpeta</translation>
</message>
</context>
</TS>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/fr/translation.qm b/plugins-alternative/Themes/Teracopy/Languages/fr/translation.qm
deleted file mode 100644
index 27844c4..0000000
--- a/plugins-alternative/Themes/Teracopy/Languages/fr/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/Languages/fr/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/fr/translation.ts
index 49088e8..42ac61d 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/fr/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/fr/translation.ts
@@ -4,32 +4,17 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="62"/>
- <source>Total: %3 of %4</source>
- <translation>Total: %3 sur %4</translation>
+ <location filename="../../interface.cpp" line="76"/>
+ <source>Total: %1 of %2</source>
+ <translation>Total: %1 sur %2</translation>
</message>
<message>
- <location filename="../../interface.cpp" line="63"/>
+ <location filename="../../interface.cpp" line="77"/>
<source>%1 of %2</source>
<translation>%1 sur %2</translation>
</message>
<message>
- <location filename="../../interface.cpp" line="97"/>
- <source>Quit</source>
- <translation>Quitter</translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="333"/>
- <source>Copy</source>
- <translation>Copie</translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="335"/>
- <source>Move</source>
- <translation>Déplacement</translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="343"/>
+ <location filename="../../interface.cpp" line="212"/>
<source>%1% done</source>
<translation>%1% fait</translation>
</message>
@@ -37,32 +22,32 @@
<context>
<name>interfaceCopy</name>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="159"/>
<source>&amp;More</source>
<translation>&amp;Plus</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="172"/>
<source>...</source>
<translation>...</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="210"/>
<source>&amp;Pause</source>
<translation>&amp;Pause</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="232"/>
<source>&amp;Skip</source>
<translation>&amp;Passer</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="251"/>
<source>&amp;Cancel</source>
<translation>&amp;Anuler</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="281"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -75,37 +60,32 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;&lt;span style=&quot; font-size:8pt; text-decoration: underline; color:#0057ae;&quot;&gt;Supporter Ultracopier&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
- <source>Source</source>
- <translation>Source</translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="308"/>
<source>Add file</source>
<translation>Ajouter un fichier</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="317"/>
<source>Add folder</source>
<translation>Ajouter un dossier</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="326"/>
<source>Move file(s)</source>
<translation>Déplacer des fichier(s)</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="335"/>
<source>Move folder</source>
<translation>Déplacer un dossier</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="344"/>
<source>Copy file(s)</source>
<translation>Copier des fichier(s)</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="353"/>
<source>Copy folder</source>
<translation>Copier un dossier</translation>
</message>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/hi/translation.qm b/plugins-alternative/Themes/Teracopy/Languages/hi/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Teracopy/Languages/hi/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/Languages/hi/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/hi/translation.ts
index e8d8cf2..33cd084 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/hi/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/hi/translation.ts
@@ -4,32 +4,17 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="62"/>
- <source>Total: %3 of %4</source>
+ <location filename="../../interface.cpp" line="76"/>
+ <source>Total: %1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="63"/>
+ <location filename="../../interface.cpp" line="77"/>
<source>%1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="97"/>
- <source>Quit</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="333"/>
- <source>Copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="335"/>
- <source>Move</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="343"/>
+ <location filename="../../interface.cpp" line="212"/>
<source>%1% done</source>
<translation type="unfinished"></translation>
</message>
@@ -37,32 +22,32 @@
<context>
<name>interfaceCopy</name>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="159"/>
<source>&amp;More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="172"/>
<source>...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="210"/>
<source>&amp;Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="232"/>
<source>&amp;Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="251"/>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="281"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -71,37 +56,32 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="308"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="317"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="326"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="335"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="344"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="353"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/id/translation.qm b/plugins-alternative/Themes/Teracopy/Languages/id/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Teracopy/Languages/id/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/Languages/id/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/id/translation.ts
index e8d8cf2..33cd084 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/id/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/id/translation.ts
@@ -4,32 +4,17 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="62"/>
- <source>Total: %3 of %4</source>
+ <location filename="../../interface.cpp" line="76"/>
+ <source>Total: %1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="63"/>
+ <location filename="../../interface.cpp" line="77"/>
<source>%1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="97"/>
- <source>Quit</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="333"/>
- <source>Copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="335"/>
- <source>Move</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="343"/>
+ <location filename="../../interface.cpp" line="212"/>
<source>%1% done</source>
<translation type="unfinished"></translation>
</message>
@@ -37,32 +22,32 @@
<context>
<name>interfaceCopy</name>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="159"/>
<source>&amp;More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="172"/>
<source>...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="210"/>
<source>&amp;Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="232"/>
<source>&amp;Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="251"/>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="281"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -71,37 +56,32 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="308"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="317"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="326"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="335"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="344"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="353"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/it/translation.qm b/plugins-alternative/Themes/Teracopy/Languages/it/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Teracopy/Languages/it/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/Languages/it/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/it/translation.ts
index e8d8cf2..746b8a6 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/it/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/it/translation.ts
@@ -1,109 +1,93 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
-<TS version="2.0">
+<TS version="2.0" language="it" sourcelanguage="en">
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="62"/>
- <source>Total: %3 of %4</source>
- <translation type="unfinished"></translation>
+ <location filename="../../interface.cpp" line="76"/>
+ <source>Total: %1 of %2</source>
+ <translation>Totale: %1 di %2</translation>
</message>
<message>
- <location filename="../../interface.cpp" line="63"/>
+ <location filename="../../interface.cpp" line="77"/>
<source>%1 of %2</source>
- <translation type="unfinished"></translation>
+ <translation>%1 di %2</translation>
</message>
<message>
- <location filename="../../interface.cpp" line="97"/>
- <source>Quit</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="333"/>
- <source>Copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="335"/>
- <source>Move</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="343"/>
+ <location filename="../../interface.cpp" line="212"/>
<source>%1% done</source>
- <translation type="unfinished"></translation>
+ <translation>%1% fatto</translation>
</message>
</context>
<context>
<name>interfaceCopy</name>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="159"/>
<source>&amp;More</source>
- <translation type="unfinished"></translation>
+ <translation>Di più</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="172"/>
<source>...</source>
- <translation type="unfinished"></translation>
+ <translation></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="210"/>
<source>&amp;Pause</source>
- <translation type="unfinished"></translation>
+ <translation>Pausa</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="232"/>
<source>&amp;Skip</source>
- <translation type="unfinished"></translation>
+ <translation>Saltare</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="251"/>
<source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
+ <translation>Annullare</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="281"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;&lt;span style=&quot; font-size:8pt; text-decoration: underline; color:#0057ae;&quot;&gt;Support Ultracopier&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;&lt;span style=&quot; font-size:8pt; text-decoration: underline; color:#0057ae;&quot;&gt;Sostenere Ultracopier&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="308"/>
<source>Add file</source>
- <translation type="unfinished"></translation>
+ <translation>Aggiungi file</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="317"/>
<source>Add folder</source>
- <translation type="unfinished"></translation>
+ <translation>Aggiungi cartella</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="326"/>
<source>Move file(s)</source>
- <translation type="unfinished"></translation>
+ <translation>Spostare file(s)</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="335"/>
<source>Move folder</source>
- <translation type="unfinished"></translation>
+ <translation>Spostare la cartella</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="344"/>
<source>Copy file(s)</source>
- <translation type="unfinished"></translation>
+ <translation>Copiare il file(s)</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="353"/>
<source>Copy folder</source>
- <translation type="unfinished"></translation>
+ <translation>Copia la cartella</translation>
</message>
</context>
</TS>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/ja/translation.qm b/plugins-alternative/Themes/Teracopy/Languages/ja/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Teracopy/Languages/ja/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/Languages/ja/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/ja/translation.ts
index cadbddc..33cd084 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/ja/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/ja/translation.ts
@@ -4,32 +4,17 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="56"/>
- <source>Total: %3 of %4</source>
+ <location filename="../../interface.cpp" line="76"/>
+ <source>Total: %1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="57"/>
+ <location filename="../../interface.cpp" line="77"/>
<source>%1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="91"/>
- <source>Quit</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="332"/>
- <source>Copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="334"/>
- <source>Move</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="342"/>
+ <location filename="../../interface.cpp" line="212"/>
<source>%1% done</source>
<translation type="unfinished"></translation>
</message>
@@ -37,32 +22,32 @@
<context>
<name>interfaceCopy</name>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="159"/>
<source>&amp;More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="172"/>
<source>...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="210"/>
<source>&amp;Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="232"/>
<source>&amp;Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="251"/>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="281"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -71,37 +56,32 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="308"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="317"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="326"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="335"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="344"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="353"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/ko/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/ko/translation.ts
new file mode 100644
index 0000000..6c66c5a
--- /dev/null
+++ b/plugins-alternative/Themes/Teracopy/Languages/ko/translation.ts
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ko_KR">
+<context>
+ <name>InterfacePlugin</name>
+ <message>
+ <location filename="../../interface.cpp" line="+76"/>
+ <source>Total: %1 of %2</source>
+ <translation type="unfinished">전체: %3 / %2 {1 ?}</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>%1 of %2</source>
+ <translation type="unfinished">%1 / %2</translation>
+ </message>
+ <message>
+ <location line="+135"/>
+ <source>%1% done</source>
+ <translation type="unfinished">%1% 완료</translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui" line="+159"/>
+ <source>&amp;More</source>
+ <translation type="unfinished">&amp;자세히</translation>
+ </message>
+ <message>
+ <location line="+13"/>
+ <source>...</source>
+ <translation type="unfinished">...</translation>
+ </message>
+ <message>
+ <location line="+38"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished">&amp;일시 중지</translation>
+ </message>
+ <message>
+ <location line="+22"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished">&amp;건너뛰기</translation>
+ </message>
+ <message>
+ <location line="+19"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished">&amp;취소</translation>
+ </message>
+ <message>
+ <location line="+30"/>
+ <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;&lt;span style=&quot; font-size:8pt; text-decoration: underline; color:#0057ae;&quot;&gt;Support Ultracopier&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;&lt;span style=&quot; font-size:8pt; text-decoration: underline; color:#0057ae;&quot;&gt;Ultracopier 지원&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location line="+27"/>
+ <source>Add file</source>
+ <translation type="unfinished">파일 추가</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Add folder</source>
+ <translation type="unfinished">폴더 추가</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished">파일 이동</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Move folder</source>
+ <translation type="unfinished">폴더 이동</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished">파일 복사</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Copy folder</source>
+ <translation type="unfinished">폴더 복사</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/nl/translation.qm b/plugins-alternative/Themes/Teracopy/Languages/nl/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Teracopy/Languages/nl/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/Languages/nl/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/nl/translation.ts
index e8d8cf2..33cd084 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/nl/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/nl/translation.ts
@@ -4,32 +4,17 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="62"/>
- <source>Total: %3 of %4</source>
+ <location filename="../../interface.cpp" line="76"/>
+ <source>Total: %1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="63"/>
+ <location filename="../../interface.cpp" line="77"/>
<source>%1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="97"/>
- <source>Quit</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="333"/>
- <source>Copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="335"/>
- <source>Move</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="343"/>
+ <location filename="../../interface.cpp" line="212"/>
<source>%1% done</source>
<translation type="unfinished"></translation>
</message>
@@ -37,32 +22,32 @@
<context>
<name>interfaceCopy</name>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="159"/>
<source>&amp;More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="172"/>
<source>...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="210"/>
<source>&amp;Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="232"/>
<source>&amp;Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="251"/>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="281"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -71,37 +56,32 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="308"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="317"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="326"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="335"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="344"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="353"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/no/translation.qm b/plugins-alternative/Themes/Teracopy/Languages/no/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Teracopy/Languages/no/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/Languages/no/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/no/translation.ts
index e8d8cf2..33cd084 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/no/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/no/translation.ts
@@ -4,32 +4,17 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="62"/>
- <source>Total: %3 of %4</source>
+ <location filename="../../interface.cpp" line="76"/>
+ <source>Total: %1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="63"/>
+ <location filename="../../interface.cpp" line="77"/>
<source>%1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="97"/>
- <source>Quit</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="333"/>
- <source>Copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="335"/>
- <source>Move</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="343"/>
+ <location filename="../../interface.cpp" line="212"/>
<source>%1% done</source>
<translation type="unfinished"></translation>
</message>
@@ -37,32 +22,32 @@
<context>
<name>interfaceCopy</name>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="159"/>
<source>&amp;More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="172"/>
<source>...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="210"/>
<source>&amp;Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="232"/>
<source>&amp;Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="251"/>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="281"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -71,37 +56,32 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="308"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="317"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="326"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="335"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="344"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="353"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/pl/translation.qm b/plugins-alternative/Themes/Teracopy/Languages/pl/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Teracopy/Languages/pl/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/Languages/pl/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/pl/translation.ts
index e8d8cf2..33cd084 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/pl/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/pl/translation.ts
@@ -4,32 +4,17 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="62"/>
- <source>Total: %3 of %4</source>
+ <location filename="../../interface.cpp" line="76"/>
+ <source>Total: %1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="63"/>
+ <location filename="../../interface.cpp" line="77"/>
<source>%1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="97"/>
- <source>Quit</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="333"/>
- <source>Copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="335"/>
- <source>Move</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="343"/>
+ <location filename="../../interface.cpp" line="212"/>
<source>%1% done</source>
<translation type="unfinished"></translation>
</message>
@@ -37,32 +22,32 @@
<context>
<name>interfaceCopy</name>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="159"/>
<source>&amp;More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="172"/>
<source>...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="210"/>
<source>&amp;Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="232"/>
<source>&amp;Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="251"/>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="281"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -71,37 +56,32 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="308"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="317"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="326"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="335"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="344"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="353"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/ru/translation.qm b/plugins-alternative/Themes/Teracopy/Languages/ru/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Teracopy/Languages/ru/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/Languages/ru/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/ru/translation.ts
index e8d8cf2..1219c56 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/ru/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/ru/translation.ts
@@ -1,109 +1,93 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
-<TS version="2.0">
+<TS version="2.0" language="ru" sourcelanguage="et">
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="62"/>
- <source>Total: %3 of %4</source>
- <translation type="unfinished"></translation>
+ <location filename="../../interface.cpp" line="76"/>
+ <source>Total: %1 of %2</source>
+ <translation>Всего: %1 из %2</translation>
</message>
<message>
- <location filename="../../interface.cpp" line="63"/>
+ <location filename="../../interface.cpp" line="77"/>
<source>%1 of %2</source>
- <translation type="unfinished"></translation>
+ <translation>%1 из %2</translation>
</message>
<message>
- <location filename="../../interface.cpp" line="97"/>
- <source>Quit</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="333"/>
- <source>Copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="335"/>
- <source>Move</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="343"/>
+ <location filename="../../interface.cpp" line="212"/>
<source>%1% done</source>
- <translation type="unfinished"></translation>
+ <translation>%1% сделанный</translation>
</message>
</context>
<context>
<name>interfaceCopy</name>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="159"/>
<source>&amp;More</source>
- <translation type="unfinished"></translation>
+ <translation>больше</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="172"/>
<source>...</source>
- <translation type="unfinished"></translation>
+ <translation></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="210"/>
<source>&amp;Pause</source>
- <translation type="unfinished"></translation>
+ <translation>пауза</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="232"/>
<source>&amp;Skip</source>
- <translation type="unfinished"></translation>
+ <translation>пропускать</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="251"/>
<source>&amp;Cancel</source>
- <translation type="unfinished"></translation>
+ <translation>отменить</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="281"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;&lt;span style=&quot; font-size:8pt; text-decoration: underline; color:#0057ae;&quot;&gt;Support Ultracopier&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://ultracopier.first-world.info/&quot;&gt;&lt;span style=&quot; font-size:8pt; text-decoration: underline; color:#0057ae;&quot;&gt;поддержка Ultracopier&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="308"/>
<source>Add file</source>
- <translation type="unfinished"></translation>
+ <translation>Добавить файл</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="317"/>
<source>Add folder</source>
- <translation type="unfinished"></translation>
+ <translation>Добавить папку</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="326"/>
<source>Move file(s)</source>
- <translation type="unfinished"></translation>
+ <translation>Перемещение файла(ов)</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="335"/>
<source>Move folder</source>
- <translation type="unfinished"></translation>
+ <translation>Перемещение папки</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="344"/>
<source>Copy file(s)</source>
- <translation type="unfinished"></translation>
+ <translation>Копировать файл(ы)</translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="353"/>
<source>Copy folder</source>
- <translation type="unfinished"></translation>
+ <translation>Копировать папку</translation>
</message>
</context>
</TS>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/th/translation.qm b/plugins-alternative/Themes/Teracopy/Languages/th/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Teracopy/Languages/th/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/Languages/th/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/th/translation.ts
index e8d8cf2..33cd084 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/th/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/th/translation.ts
@@ -4,32 +4,17 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="62"/>
- <source>Total: %3 of %4</source>
+ <location filename="../../interface.cpp" line="76"/>
+ <source>Total: %1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="63"/>
+ <location filename="../../interface.cpp" line="77"/>
<source>%1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="97"/>
- <source>Quit</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="333"/>
- <source>Copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="335"/>
- <source>Move</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="343"/>
+ <location filename="../../interface.cpp" line="212"/>
<source>%1% done</source>
<translation type="unfinished"></translation>
</message>
@@ -37,32 +22,32 @@
<context>
<name>interfaceCopy</name>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="159"/>
<source>&amp;More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="172"/>
<source>...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="210"/>
<source>&amp;Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="232"/>
<source>&amp;Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="251"/>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="281"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -71,37 +56,32 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="308"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="317"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="326"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="335"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="344"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="353"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/tr/translation.qm b/plugins-alternative/Themes/Teracopy/Languages/tr/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Teracopy/Languages/tr/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/Languages/tr/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/tr/translation.ts
index e8d8cf2..33cd084 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/tr/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/tr/translation.ts
@@ -4,32 +4,17 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="62"/>
- <source>Total: %3 of %4</source>
+ <location filename="../../interface.cpp" line="76"/>
+ <source>Total: %1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="63"/>
+ <location filename="../../interface.cpp" line="77"/>
<source>%1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="97"/>
- <source>Quit</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="333"/>
- <source>Copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="335"/>
- <source>Move</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="343"/>
+ <location filename="../../interface.cpp" line="212"/>
<source>%1% done</source>
<translation type="unfinished"></translation>
</message>
@@ -37,32 +22,32 @@
<context>
<name>interfaceCopy</name>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="159"/>
<source>&amp;More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="172"/>
<source>...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="210"/>
<source>&amp;Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="232"/>
<source>&amp;Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="251"/>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="281"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -71,37 +56,32 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="308"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="317"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="326"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="335"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="344"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="353"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Teracopy/Languages/zh/translation.qm b/plugins-alternative/Themes/Teracopy/Languages/zh/translation.qm
deleted file mode 100644
index 3738845..0000000
--- a/plugins-alternative/Themes/Teracopy/Languages/zh/translation.qm
+++ /dev/null
Binary files differ
diff --git a/plugins-alternative/Themes/Teracopy/Languages/zh/translation.ts b/plugins-alternative/Themes/Teracopy/Languages/zh/translation.ts
index cadbddc..33cd084 100644
--- a/plugins-alternative/Themes/Teracopy/Languages/zh/translation.ts
+++ b/plugins-alternative/Themes/Teracopy/Languages/zh/translation.ts
@@ -4,32 +4,17 @@
<context>
<name>InterfacePlugin</name>
<message>
- <location filename="../../interface.cpp" line="56"/>
- <source>Total: %3 of %4</source>
+ <location filename="../../interface.cpp" line="76"/>
+ <source>Total: %1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="57"/>
+ <location filename="../../interface.cpp" line="77"/>
<source>%1 of %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.cpp" line="91"/>
- <source>Quit</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="332"/>
- <source>Copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="334"/>
- <source>Move</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.cpp" line="342"/>
+ <location filename="../../interface.cpp" line="212"/>
<source>%1% done</source>
<translation type="unfinished"></translation>
</message>
@@ -37,32 +22,32 @@
<context>
<name>interfaceCopy</name>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="159"/>
<source>&amp;More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="172"/>
<source>...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="210"/>
<source>&amp;Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="232"/>
<source>&amp;Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="251"/>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="281"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -71,37 +56,32 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
- <source>Source</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="308"/>
<source>Add file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="317"/>
<source>Add folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="326"/>
<source>Move file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="335"/>
<source>Move folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="344"/>
<source>Copy file(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../../interface.ui"/>
+ <location filename="../../interface.ui" line="353"/>
<source>Copy folder</source>
<translation type="unfinished"></translation>
</message>
diff --git a/plugins-alternative/Themes/Teracopy/TransferModel.cpp b/plugins-alternative/Themes/Teracopy/TransferModel.cpp
new file mode 100644
index 0000000..569d31c
--- /dev/null
+++ b/plugins-alternative/Themes/Teracopy/TransferModel.cpp
@@ -0,0 +1,441 @@
+#include "TransferModel.h"
+
+#define COLUMN_COUNT 3
+
+// Model
+
+TransferModel::TransferModel()
+{
+ iconStart=QIcon(":/resources/player_play.png");
+ iconPause=QIcon(":/resources/player_pause.png");
+ iconStop=QIcon(":/resources/checkbox.png");
+ currentIndexSearch=0;
+ haveSearchItem=false;
+}
+
+int TransferModel::columnCount( const QModelIndex& parent ) const
+{
+ return parent == QModelIndex() ? COLUMN_COUNT : 0;
+}
+
+QVariant TransferModel::data( const QModelIndex& index, int role ) const
+{
+ int row,column;
+ row=index.row();
+ column=index.column();
+ if(index.parent()!=QModelIndex() || row < 0 || row >= transfertItemList.count() || column < 0 || column >= COLUMN_COUNT)
+ return QVariant();
+
+ const transfertItem& item = transfertItemList[row];
+ if(role==Qt::UserRole)
+ return item.id;
+ else if(role==Qt::DisplayRole)
+ {
+ switch(column)
+ {
+ case 0:
+ return item.source;
+ break;
+ case 1:
+ return item.size;
+ break;
+ case 2:
+ return item.destination;
+ break;
+ default:
+ return QVariant();
+ }
+ }
+ else if(role==Qt::DecorationRole)
+ {
+ switch(column)
+ {
+ case 0:
+ /*if(item.done)
+ return iconStop;
+ else */if(stopId.contains(item.id))
+ return iconPause;
+ else if(startId.contains(item.id))
+ return iconStart;
+ else
+ return QVariant();
+ break;
+ default:
+ return QVariant();
+ }
+ }
+ else if(role==Qt::BackgroundRole)
+ {
+ if(!search_text.isEmpty() && (item.source.indexOf(search_text,0,Qt::CaseInsensitive)!=-1 || item.destination.indexOf(search_text,0,Qt::CaseInsensitive)!=-1))
+ {
+ if(haveSearchItem && searchId==item.id)
+ return QColor(255,150,150,100);
+ else
+ return QColor(255,255,0,100);
+ }
+ else
+ return QVariant();
+ }
+ return QVariant();
+}
+
+int TransferModel::rowCount( const QModelIndex& parent ) const
+{
+ return parent == QModelIndex() ? transfertItemList.count() : 0;
+}
+
+quint64 TransferModel::firstId()
+{
+ if(transfertItemList.count()>0)
+ return transfertItemList[0].id;
+ else
+ return 0;
+}
+
+QVariant TransferModel::headerData( int section, Qt::Orientation orientation, int role ) const
+{
+ if ( role == Qt::DisplayRole && orientation == Qt::Horizontal && section >= 0 && section < COLUMN_COUNT ) {
+ switch ( section ) {
+ case 0:
+ return facilityEngine->translateText("Source");
+ case 1:
+ return facilityEngine->translateText("Size");
+ case 2:
+ return facilityEngine->translateText("Destination");
+ }
+ }
+
+ return QAbstractTableModel::headerData( section, orientation, role );
+}
+
+bool TransferModel::setData( const QModelIndex& index, const QVariant& value, int role )
+{
+ row=index.row();
+ column=index.column();
+ if(index.parent()!=QModelIndex() || row < 0 || row >= transfertItemList.count() || column < 0 || column >= COLUMN_COUNT)
+ return false;
+
+ transfertItem& item = transfertItemList[row];
+ if(role==Qt::UserRole)
+ {
+ item.id=value.toULongLong();
+ return true;
+ }
+ else if(role==Qt::DisplayRole)
+ {
+ switch(column)
+ {
+ case 0:
+ item.source=value.toString();
+ emit dataChanged(index,index);
+ return true;
+ break;
+ case 1:
+ item.size=value.toString();
+ emit dataChanged(index,index);
+ return true;
+ break;
+ case 2:
+ item.destination=value.toString();
+ emit dataChanged(index,index);
+ return true;
+ break;
+ default:
+ return false;
+ }
+ }
+ return false;
+}
+
+/*
+ Return[0]: totalFile
+ Return[1]: totalSize
+ Return[2]: currentFile
+ */
+QList<quint64> TransferModel::synchronizeItems(const QList<returnActionOnCopyList>& returnActions)
+{
+ loop_size=returnActions.size();
+ index_for_loop=0;
+ totalFile=0;
+ totalSize=0;
+ currentFile=0;
+ emit layoutAboutToBeChanged();
+ while(index_for_loop<loop_size)
+ {
+ const returnActionOnCopyList& action=returnActions.at(index_for_loop);
+ switch(action.type)
+ {
+ case AddingItem:
+ {
+ transfertItem newItem;
+ newItem.id=action.addAction.id;
+ newItem.source=action.addAction.sourceFullPath;
+ newItem.size=facilityEngine->sizeToString(action.addAction.size);
+ newItem.destination=action.addAction.destinationFullPath;
+// newItem.done=false;
+ transfertItemList<<newItem;
+ totalFile++;
+ totalSize+=action.addAction.size;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("id: %1, size: %2, name: %3").arg(action.addAction.id).arg(action.addAction.size).arg(action.addAction.sourceFullPath));
+ }
+ break;
+ case MoveItem:
+ {
+ //bool current_entry=
+ if(action.userAction.position<0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
+ break;
+ }
+ if(action.userAction.position>(transfertItemList.size()-1))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
+ break;
+ }
+ if(action.userAction.moveAt<0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
+ break;
+ }
+ if(action.userAction.moveAt>(transfertItemList.size()-1))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
+ break;
+ }
+ transfertItemList.move(action.userAction.position,action.userAction.moveAt);
+ }
+ break;
+ case RemoveItem:
+ {
+ if(currentIndexSearch>0 && action.userAction.position<=currentIndexSearch)
+ currentIndexSearch--;
+ if(action.userAction.position<0)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
+ break;
+ }
+ if(action.userAction.position>(transfertItemList.size()-1))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("id: %1, position is wrong: %3").arg(action.addAction.id).arg(action.userAction.position));
+ break;
+ }
+ transfertItemList.removeAt(action.userAction.position);
+ currentFile++;
+ startId.remove(action.addAction.id);
+ stopId.remove(action.addAction.id);
+ }
+ break;
+ case PreOperation:
+ {
+ ItemOfCopyListWithMoreInformations tempItem;
+ tempItem.currentProgression=0;
+ tempItem.generalData=action.addAction;
+ tempItem.actionType=action.type;
+ internalRunningOperation[action.addAction.id]=tempItem;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("set for file %1: actionType: PreOperation").arg(action.addAction.id));
+ }
+ break;
+ case Transfer:
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("found entry for file %1: actionType: Transfer").arg(action.addAction.id));
+ if(!startId.contains(action.addAction.id))
+ startId << action.addAction.id;
+ stopId.remove(action.addAction.id);
+ if(internalRunningOperation.contains(action.addAction.id))
+ internalRunningOperation[action.addAction.id].actionType=action.type;
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("unable to found entry for file %1: actionType: Transfer").arg(action.addAction.id));
+ }
+ break;
+ case PostOperation:
+ {
+ if(!stopId.contains(action.addAction.id))
+ stopId << action.addAction.id;
+ startId.remove(action.addAction.id);
+ internalRunningOperation.remove(action.addAction.id);
+ }
+ break;
+ case CustomOperation:
+ {
+ bool custom_with_progression=(action.addAction.size==1);
+ //without progression
+ if(custom_with_progression)
+ {
+ if(startId.remove(action.addAction.id))
+ if(!stopId.contains(action.addAction.id))
+ stopId << action.addAction.id;
+ }
+ //with progression
+ else
+ {
+ stopId.remove(action.addAction.id);
+ if(!startId.contains(action.addAction.id))
+ startId << action.addAction.id;
+ }
+ if(internalRunningOperation.contains(action.addAction.id))
+ {
+ ItemOfCopyListWithMoreInformations &item=internalRunningOperation[action.addAction.id];
+ item.actionType=action.type;
+ item.custom_with_progression=custom_with_progression;
+ item.currentProgression=0;
+ }
+ }
+ break;
+ default:
+ //unknow code, ignore it
+ break;
+ }
+ index_for_loop++;
+ }
+ emit layoutChanged();
+ return QList<quint64>() << totalFile << totalSize << currentFile;
+}
+
+void TransferModel::setFacilityEngine(FacilityInterface * facilityEngine)
+{
+ this->facilityEngine=facilityEngine;
+}
+
+int TransferModel::search(const QString &text,bool searchNext)
+{
+ emit layoutAboutToBeChanged();
+ search_text=text;
+ emit layoutChanged();
+ if(transfertItemList.size()==0)
+ return -1;
+ if(text.isEmpty())
+ return -1;
+ if(searchNext)
+ {
+ currentIndexSearch++;
+ if(currentIndexSearch>=loop_size)
+ currentIndexSearch=0;
+ }
+ index_for_loop=0;
+ loop_size=transfertItemList.size();
+ while(index_for_loop<loop_size)
+ {
+ if(transfertItemList.at(currentIndexSearch).source.indexOf(search_text,0,Qt::CaseInsensitive)!=-1 || transfertItemList.at(currentIndexSearch).destination.indexOf(search_text,0,Qt::CaseInsensitive)!=-1)
+ {
+ haveSearchItem=true;
+ searchId=transfertItemList.at(currentIndexSearch).id;
+ return currentIndexSearch;
+ }
+ currentIndexSearch++;
+ if(currentIndexSearch>=loop_size)
+ currentIndexSearch=0;
+ index_for_loop++;
+ }
+ haveSearchItem=false;
+ return -1;
+}
+
+int TransferModel::searchPrev(const QString &text)
+{
+ emit layoutAboutToBeChanged();
+ search_text=text;
+ emit layoutChanged();
+ if(transfertItemList.size()==0)
+ return -1;
+ if(text.isEmpty())
+ return -1;
+ if(currentIndexSearch==0)
+ currentIndexSearch=loop_size-1;
+ else
+ currentIndexSearch--;
+ index_for_loop=0;
+ loop_size=transfertItemList.size();
+ while(index_for_loop<loop_size)
+ {
+ if(transfertItemList.at(currentIndexSearch).source.indexOf(search_text,0,Qt::CaseInsensitive)!=-1 || transfertItemList.at(currentIndexSearch).destination.indexOf(search_text,0,Qt::CaseInsensitive)!=-1)
+ {
+ haveSearchItem=true;
+ searchId=transfertItemList.at(currentIndexSearch).id;
+ return currentIndexSearch;
+ }
+ if(currentIndexSearch==0)
+ currentIndexSearch=loop_size-1;
+ else
+ currentIndexSearch--;
+ index_for_loop++;
+ }
+ haveSearchItem=false;
+ return -1;
+}
+
+void TransferModel::setFileProgression(QList<ProgressionItem> &progressionList)
+{
+ loop_size=progressionList.size();
+ index_for_loop=0;
+ while(index_for_loop<loop_size)
+ {
+ if(internalRunningOperation.contains(progressionList.at(index_for_loop).id))
+ {
+ internalRunningOperation[progressionList.at(index_for_loop).id].generalData.size=progressionList.at(index_for_loop).total;
+ internalRunningOperation[progressionList.at(index_for_loop).id].currentProgression=progressionList.at(index_for_loop).current;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ progressionList.removeAt(index_for_loop);
+ #endif
+ }
+ index_for_loop++;
+ }
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ if(progressionList.size()>0)
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"progression remaning items");
+ #endif
+}
+
+TransferModel::currentTransfertItem TransferModel::getCurrentTransfertItem()
+{
+ currentTransfertItem returnItem;
+ returnItem.haveItem=startId.size()>0;
+ if(returnItem.haveItem)
+ {
+ if(!internalRunningOperation.contains(*startId.constBegin()))
+ {
+ returnItem.haveItem=false;
+ return returnItem;
+ }
+ const ItemOfCopyListWithMoreInformations &itemTransfer=internalRunningOperation[*startId.constBegin()];
+ returnItem.from=itemTransfer.generalData.sourceFullPath;
+ returnItem.to=itemTransfer.generalData.destinationFullPath;
+ returnItem.current_file=itemTransfer.generalData.destinationFileName+", "+facilityEngine->sizeToString(itemTransfer.generalData.size);
+ switch(itemTransfer.actionType)
+ {
+ case CustomOperation:
+ if(!itemTransfer.custom_with_progression)
+ returnItem.progressBar_file=-1;
+ else
+ {
+ if(itemTransfer.generalData.size>0)
+ returnItem.progressBar_file=((double)itemTransfer.currentProgression/itemTransfer.generalData.size)*65535;
+ else
+ returnItem.progressBar_file=-1;
+ }
+ break;
+ case Transfer:
+ if(itemTransfer.generalData.size>0)
+ returnItem.progressBar_file=((double)itemTransfer.currentProgression/itemTransfer.generalData.size)*65535;
+ else
+ returnItem.progressBar_file=0;
+ break;
+ //should never pass here
+ case PostOperation:
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("wrong action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ returnItem.progressBar_file=65535;
+ break;
+ //should never pass here
+ case PreOperation:
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("wrong action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ returnItem.progressBar_file=0;
+ break;
+ default:
+ returnItem.progressBar_file=0;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("unknow action type for file %1: actionType: %2").arg(itemTransfer.generalData.id).arg(itemTransfer.actionType));
+ break;
+ }
+ }
+/* else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("No have running item"));*/
+ return returnItem;
+}
diff --git a/plugins-alternative/Themes/Teracopy/TransferModel.h b/plugins-alternative/Themes/Teracopy/TransferModel.h
new file mode 100644
index 0000000..486532e
--- /dev/null
+++ b/plugins-alternative/Themes/Teracopy/TransferModel.h
@@ -0,0 +1,92 @@
+#ifndef TRANSFERMODEL_H
+#define TRANSFERMODEL_H
+
+#include <QAbstractTableModel>
+#include <QModelIndex>
+#include <QVariant>
+#include <QList>
+#include <QSet>
+#include <QIcon>
+#include <QString>
+
+#include "StructEnumDefinition.h"
+#include "Environment.h"
+
+#include "../../../interface/FacilityInterface.h"
+
+/// \brief model to store the transfer list
+class TransferModel : public QAbstractTableModel
+{
+ Q_OBJECT
+public:
+ /// \brief the transfer item displayed
+ struct transfertItem
+ {
+ quint64 id;
+ QString source;
+ QString size;
+ QString destination;
+ };
+ /// \brief the transfer item with progression
+ struct ItemOfCopyListWithMoreInformations
+ {
+ quint64 currentProgression;
+ ItemOfCopyList generalData;
+ ActionTypeCopyList actionType;
+ bool custom_with_progression;
+ };
+ /// \brief returned first transfer item
+ struct currentTransfertItem
+ {
+ quint64 id;
+ bool haveItem;
+ QString from;
+ QString to;
+ QString current_file;
+ int progressBar_file;
+ };
+
+ TransferModel();
+
+ virtual int columnCount(const QModelIndex& parent = QModelIndex()) const;
+ virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
+ virtual int rowCount(const QModelIndex& parent = QModelIndex()) const;
+ virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
+ virtual bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole);
+
+ QList<quint64> synchronizeItems(const QList<returnActionOnCopyList>& returnActions);
+ void setFacilityEngine(FacilityInterface * facilityEngine);
+
+ int search(const QString &text,bool searchNext);
+ int searchPrev(const QString &text);
+
+ void setFileProgression(QList<ProgressionItem> &progressionList);
+
+ currentTransfertItem getCurrentTransfertItem();
+
+ quint64 firstId();
+protected:
+ QList<transfertItem> transfertItemList;///< To have a transfer list for the user
+ QList<transfertItem> transfertItemListDone;///< To have a transfer list for the user
+ QSet<quint64> startId,stopId;///< To show what is started, what is stopped
+ QHash<quint64,ItemOfCopyListWithMoreInformations> internalRunningOperation;///< to have progression and stat
+ QIcon iconStart,iconPause,iconStop;
+private:
+ int loop_size,index_for_loop;
+ int sub_loop_size,sub_index_for_loop;
+ int row,column;
+ quint64 totalFile,totalSize,currentFile;
+ FacilityInterface * facilityEngine;
+ QString search_text;
+ /// \brief index from start the search, decresed by remove before it
+ int currentIndexSearch;
+ bool haveSearchItem;
+ quint64 searchId;
+signals:
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ /// \brief To debug source
+ void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
+ #endif
+};
+
+#endif // TRANSFERMODEL_H
diff --git a/plugins-alternative/Themes/Teracopy/informations.xml b/plugins-alternative/Themes/Teracopy/informations.xml
index 66e8ee1..5fd194d 100644
--- a/plugins-alternative/Themes/Teracopy/informations.xml
+++ b/plugins-alternative/Themes/Teracopy/informations.xml
@@ -12,16 +12,16 @@
<!-- the date-time format should be in timestamps format -->
<pubDate>1287496800</pubDate>
<!-- the architecture code of this plugin, found PlatformMacro.h into ultracopier source -->
- <architecture>linux-x86_64-pc</architecture>
+ <architecture>windows-x86</architecture>
<!-- Detailed description -->
<description xml:lang="en"><![CDATA[Teracopy style for Ultracopier, reproduct with screenshot on internet]]></description>
<description xml:lang="fr"><![CDATA[Style Teracopy pour Ultracopier, reproduit avec les screenshots vu sur internet]]></description>
<!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number -->
- <version>0.3.0.5</version>
+ <version>0.3.1.0</version>
<!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
<name>Teracopy</name>
<!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. -->
<dependencies><![CDATA[
- =ultracopier-0.3.0.5
+ >=ultracopier-0.3.1.0
]]></dependencies>
</package> \ No newline at end of file
diff --git a/plugins-alternative/Themes/Teracopy/interface.cpp b/plugins-alternative/Themes/Teracopy/interface.cpp
index be54075..a7014dd 100644
--- a/plugins-alternative/Themes/Teracopy/interface.cpp
+++ b/plugins-alternative/Themes/Teracopy/interface.cpp
@@ -15,6 +15,9 @@ InterfacePlugin::InterfacePlugin(FacilityInterface * facilityEngine) :
{
this->facilityEngine=facilityEngine;
ui->setupUi(this);
+ ui->TransferList->setModel(&transferModel);
+ transferModel.setFacilityEngine(facilityEngine);
+
currentFile = 0;
totalFile = 0;
currentSize = 0;
@@ -34,9 +37,9 @@ InterfacePlugin::InterfacePlugin(FacilityInterface * facilityEngine) :
connect(ui->actionAddFolderToMove,SIGNAL(triggered()),this,SLOT(forcedModeAddFolderToMove()));
connect(ui->actionAddFolder,SIGNAL(triggered()),this,SLOT(forcedModeAddFolder()));
- iconStart=QIcon(":/resources/player_play.png");
- iconPause=QIcon(":/resources/player_pause.png");
- iconStop=QIcon(":/resources/checkbox.png");
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ connect(&transferModel,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)));
+ #endif
}
InterfacePlugin::~InterfacePlugin()
@@ -70,7 +73,7 @@ void InterfacePlugin::closeEvent(QCloseEvent *event)
void InterfacePlugin::updateOverallInformation()
{
- ui->overall->setText(tr("Total: %3 of %4").arg(facilityEngine->sizeToString(currentSize)).arg(facilityEngine->sizeToString(totalSize)));
+ ui->overall->setText(tr("Total: %1 of %2").arg(facilityEngine->sizeToString(currentSize)).arg(facilityEngine->sizeToString(totalSize)));
ui->labelNumberFile->setText(tr("%1 of %2").arg(currentFile).arg(totalFile));
}
@@ -105,7 +108,7 @@ void InterfacePlugin::actionInProgess(EngineActionInProgress action)
haveStarted=true;
break;
case Idle:
- ui->cancelButton->setText(tr("Quit"));
+ ui->cancelButton->setText(facilityEngine->translateText("Quit"));
break;
default:
break;
@@ -196,9 +199,9 @@ void InterfacePlugin::forceCopyMode(CopyMode mode)
modeIsForced=true;
this->mode=mode;
if(mode==Copy)
- this->setWindowTitle("Ultracopier - "+tr("Copy"));
+ this->setWindowTitle("Ultracopier - "+facilityEngine->translateText("Copy"));
else
- this->setWindowTitle("Ultracopier - "+tr("Move"));
+ this->setWindowTitle("Ultracopier - "+facilityEngine->translateText("Move"));
updateModeAndType();
}
@@ -235,18 +238,31 @@ void InterfacePlugin::isInPause(bool isInPause)
void InterfacePlugin::updateCurrentFileInformation()
{
- if(currentProgressList.size()>0)
+ TransferModel::currentTransfertItem transfertItem=transferModel.getCurrentTransfertItem();
+ if(transfertItem.haveItem)
{
- ui->from->setText(currentProgressList.first().generalData.sourceFullPath);
- if(currentProgressList.first().generalData.size>0)
- ui->progressBar_file->setValue(((double)currentProgressList.first().currentProgression/currentProgressList.first().generalData.size)*65535);
+ ui->from->setText(transfertItem.from);
+ //commented because not displayed on this interface
+ //ui->to->setText(transfertItem.to);
+ //ui->current_file->setText(transfertItem.current_file);
+ if(transfertItem.progressBar_file!=-1)
+ {
+ ui->progressBar_file->setRange(0,65535);
+ ui->progressBar_file->setValue(transfertItem.progressBar_file);
+ }
else
- ui->progressBar_file->setValue(0);
+ ui->progressBar_file->setRange(0,0);
}
else
{
- ui->from->setText("-");
- ui->progressBar_file->setValue(65535);
+ ui->from->setText("");
+ //commented because not displayed on this interface
+ //ui->to->setText("");
+ //ui->current_file->setText("-");
+ if(haveStarted && transferModel.rowCount()==0)
+ ui->progressBar_file->setValue(65535);
+ else if(!haveStarted)
+ ui->progressBar_file->setValue(0);
}
}
@@ -270,11 +286,22 @@ void InterfacePlugin::on_pauseButton_clicked()
void InterfacePlugin::on_skipButton_clicked()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(currentProgressList.size()>0)
- emit skip(currentProgressList.first().generalData.id);
+ TransferModel::currentTransfertItem transfertItem=transferModel.getCurrentTransfertItem();
+ if(transfertItem.haveItem)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("skip at running: %1").arg(transfertItem.id));
+ emit skip(transfertItem.id);
+ }
else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to skip the transfer, because no transfer running");
+ {
+ if(transferModel.rowCount()>1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("skip at idle: %1").arg(transferModel.firstId()));
+ emit skip(transferModel.firstId());
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to skip the transfer, because no transfer running");
+ }
}
void InterfacePlugin::updateModeAndType()
@@ -353,140 +380,29 @@ void InterfacePlugin::newLanguageLoaded()
*/
void InterfacePlugin::getActionOnList(const QList<returnActionOnCopyList>& returnActions)
{
- loop_size=returnActions.size();
- index_for_loop=0;
- while(index_for_loop<loop_size)
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, returnActions.size(): "+QString::number(returnActions.size()));
+ QList<quint64> returnValue=transferModel.synchronizeItems(returnActions);
+ totalFile+=returnValue[0];
+ totalSize+=returnValue[1];
+ currentFile+=returnValue[2];
+ if(transferModel.rowCount()==0)
{
- const returnActionOnCopyList& action=returnActions.at(index_for_loop);
- switch(action.type)
- {
- case AddingItem:
- {
- InternalRunningOperationGraphic.insert(action.addAction.id,new QTreeWidgetItem(QStringList() << action.addAction.sourceFullPath << facilityEngine->sizeToString(action.addAction.size) << action.addAction.destinationFullPath));
- ui->CopyList->addTopLevelItem(InternalRunningOperationGraphic[action.addAction.id]);
- totalFile++;
- totalSize+=action.addAction.size;
- }
- break;
- case MoveItem:
- ui->CopyList->move(action.userAction.position,action.userAction.moveAt);
- break;
- case RemoveItem:
- {
- InternalRunningOperationGraphic[action.addAction.id]->setIcon(0,iconStop);
- InternalRunningOperationGraphic.remove(action.addAction.id);
- //delete ui->CopyList->topLevelItem(action.userAction.position);
- currentFile++;
- startId.removeOne(action.addAction.id);
- stopId.removeOne(action.addAction.id);
- }
- break;
- case PreOperation:
- {
- ItemOfCopyListWithMoreInformations tempItem;
- tempItem.currentProgression=0;
- tempItem.generalData=action.addAction;
- InternalRunningOperation << tempItem;
- }
- break;
- case Transfer:
- {
- if(!startId.contains(action.addAction.id))
- startId << action.addAction.id;
- stopId.removeOne(action.addAction.id);
- sub_index_for_loop=0;
- sub_loop_size=InternalRunningOperation.size();
- while(sub_index_for_loop<sub_loop_size)
- {
- if(InternalRunningOperation.at(sub_index_for_loop).generalData.id==action.addAction.id)
- {
- InternalRunningOperation[sub_index_for_loop].actionType=action.type;
- break;
- }
- sub_index_for_loop++;
- }
- InternalRunningOperationGraphic[action.addAction.id]->setIcon(0,iconStart);
- }
- break;
- case PostOperation:
- {
- if(!stopId.contains(action.addAction.id))
- stopId << action.addAction.id;
- startId.removeOne(action.addAction.id);
- sub_index_for_loop=0;
- sub_loop_size=InternalRunningOperation.size();
- while(sub_index_for_loop<sub_loop_size)
- {
- if(InternalRunningOperation.at(sub_index_for_loop).generalData.id==action.addAction.id)
- {
- InternalRunningOperation.removeAt(sub_index_for_loop);
- break;
- }
- sub_index_for_loop++;
- }
- InternalRunningOperationGraphic[action.addAction.id]->setIcon(0,iconPause);
- }
- break;
- case CustomOperation:
- {
- bool custom_with_progression=(action.addAction.size==1);
- //without progression
- if(custom_with_progression)
- {
- if(startId.removeOne(action.addAction.id))
- if(!stopId.contains(action.addAction.id))
- stopId << action.addAction.id;
- }
- //with progression
- else
- {
- stopId.removeOne(action.addAction.id);
- if(!startId.contains(action.addAction.id))
- startId << action.addAction.id;
- }
- sub_index_for_loop=0;
- sub_loop_size=InternalRunningOperation.size();
- while(sub_index_for_loop<sub_loop_size)
- {
- if(InternalRunningOperation.at(sub_index_for_loop).generalData.id==action.addAction.id)
- {
- InternalRunningOperation[sub_index_for_loop].actionType=action.type;
- InternalRunningOperation[sub_index_for_loop].custom_with_progression=custom_with_progression;
- InternalRunningOperation[sub_index_for_loop].currentProgression=0;
- break;
- }
- sub_index_for_loop++;
- }
- }
- break;
- default:
- //unknow code, ignore it
- break;
- }
- index_for_loop++;
+ ui->skipButton->setEnabled(false);
+ ui->progressBar_all->setValue(65535);
+ ui->progressBar_file->setValue(65535);
+ currentSize=totalSize;
}
+ else
+ ui->skipButton->setEnabled(true);
+ updateOverallInformation();
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"transferModel.rowCount(): "+QString::number(transferModel.rowCount()));
}
void InterfacePlugin::setFileProgression(const QList<ProgressionItem> &progressionList)
{
- loop_size=InternalRunningOperation.size();
- sub_loop_size=progressionList.size();
- index_for_loop=0;
- while(index_for_loop<loop_size)
- {
- sub_index_for_loop=0;
- while(sub_index_for_loop<sub_loop_size)
- {
- if(progressionList.at(sub_index_for_loop).id==InternalRunningOperation.at(index_for_loop).generalData.id)
- {
- InternalRunningOperation[index_for_loop].generalData.size=progressionList.at(sub_index_for_loop).total;
- InternalRunningOperation[index_for_loop].currentProgression=progressionList.at(sub_index_for_loop).current;
- break;
- }
- sub_index_for_loop++;
- }
- index_for_loop++;
- }
+ QList<ProgressionItem> progressionListBis=progressionList;
+ transferModel.setFileProgression(progressionListBis);
+ updateCurrentFileInformation();
}
InterfacePlugin::currentTransfertItem InterfacePlugin::getCurrentTransfertItem()
diff --git a/plugins-alternative/Themes/Teracopy/interface.h b/plugins-alternative/Themes/Teracopy/interface.h
index 865456e..899a03b 100644
--- a/plugins-alternative/Themes/Teracopy/interface.h
+++ b/plugins-alternative/Themes/Teracopy/interface.h
@@ -16,6 +16,7 @@
#include "ui_interface.h"
#include "Environment.h"
+#include "TransferModel.h"
namespace Ui {
class interfaceCopy;
@@ -42,11 +43,6 @@ private:
QString current_file;
int progressBar_file;
};
- struct graphicItem
- {
- quint64 id;
- QTreeWidgetItem * item;
- };
Ui::interfaceCopy *ui;
quint64 currentFile;
quint64 totalFile;
@@ -57,7 +53,6 @@ private:
EngineActionInProgress action;
void closeEvent(QCloseEvent *event);
QList<ItemOfCopyListWithMoreInformations> currentProgressList;
- QList<graphicItem> graphicItemList;
QString speedString;
bool storeIsInPause;
bool modeIsForced;
@@ -74,8 +69,8 @@ private:
currentTransfertItem getCurrentTransfertItem();
QList<quint64> startId,stopId;///< To show what is started, what is stopped
QList<ItemOfCopyListWithMoreInformations> InternalRunningOperation;///< to have progression and stat
- QHash<quint64,QTreeWidgetItem *> InternalRunningOperationGraphic;
- QIcon iconStart,iconPause,iconStop;
+ /// \brief the custom transfer model
+ TransferModel transferModel;
public:
//send information about the copy
/// \brief to set the action in progress
diff --git a/plugins-alternative/Themes/Teracopy/interface.pro b/plugins-alternative/Themes/Teracopy/interface.pro
index 012c8c1..4cecacb 100644
--- a/plugins-alternative/Themes/Teracopy/interface.pro
+++ b/plugins-alternative/Themes/Teracopy/interface.pro
@@ -7,18 +7,20 @@ HEADERS = interface.h \
DebugEngineMacro.h \
Environment.h \
Variable.h \
- ../../../interface/PluginInterface_Themes.h
+ ../../../interface/PluginInterface_Themes.h \
+ TransferModel.h
SOURCES = interface.cpp \
- factory.cpp
+ factory.cpp \
+ TransferModel.cpp
TARGET = $$qtLibraryTarget(interface)
-TRANSLATIONS += Languages/fr/translation.ts \
+TRANSLATIONS += Languages/fr/translation.ts \
Languages/ar/translation.ts \
- Languages/ch/translation.ts \
+ Languages/zh/translation.ts \
Languages/es/translation.ts \
Languages/de/translation.ts \
Languages/el/translation.ts \
Languages/it/translation.ts \
- Languages/jp/translation.ts \
+ Languages/ja/translation.ts \
Languages/id/translation.ts \
Languages/pl/translation.ts \
Languages/ru/translation.ts \
@@ -27,7 +29,8 @@ TRANSLATIONS += Languages/fr/translation.ts \
Languages/hi/translation.ts \
Languages/nl/translation.ts \
Languages/no/translation.ts \
- Languages/pt/translation.ts
+ Languages/pt/translation.ts \
+ Languages/ko/translation.ts
RESOURCES += resources.qrc
diff --git a/plugins-alternative/Themes/Teracopy/interface.ui b/plugins-alternative/Themes/Teracopy/interface.ui
index d547c49..1bccf44 100644
--- a/plugins-alternative/Themes/Teracopy/interface.ui
+++ b/plugins-alternative/Themes/Teracopy/interface.ui
@@ -289,18 +289,13 @@ p, li { white-space: pre-wrap; }
</layout>
</item>
<item>
- <widget class="QTreeWidget" name="CopyList">
+ <widget class="QTreeView" name="TransferList">
<property name="selectionMode">
<enum>QAbstractItemView::NoSelection</enum>
</property>
<property name="rootIsDecorated">
<bool>false</bool>
</property>
- <column>
- <property name="text">
- <string>Source</string>
- </property>
- </column>
</widget>
</item>
</layout>
@@ -366,22 +361,6 @@ p, li { white-space: pre-wrap; }
<connection>
<sender>moreButton</sender>
<signal>toggled(bool)</signal>
- <receiver>CopyList</receiver>
- <slot>setVisible(bool)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>32</x>
- <y>107</y>
- </hint>
- <hint type="destinationlabel">
- <x>54</x>
- <y>163</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>moreButton</sender>
- <signal>toggled(bool)</signal>
<receiver>label_2</receiver>
<slot>setVisible(bool)</slot>
<hints>
diff --git a/plugins-alternative/Themes/Teracopy/resources/player_pause.png b/plugins-alternative/Themes/Teracopy/resources/player_pause.png
new file mode 100644
index 0000000..a9b3113
--- /dev/null
+++ b/plugins-alternative/Themes/Teracopy/resources/player_pause.png
Binary files differ