summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/AvancedQFile.cpp94
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/AvancedQFile.h32
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/CompilerInfo.h1
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/DebugEngineMacro.h25
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Environment.h12
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/ar/translation.ts459
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/de/translation.ts459
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/el/translation.ts459
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/es/translation.ts459
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/fr/translation.ts459
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/hi/translation.ts459
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/id/translation.ts459
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/it/translation.ts459
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/ja/translation.ts459
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/nl/translation.ts459
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/no/translation.ts459
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/pl/translation.ts459
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/pt/translation.ts459
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/ru/translation.ts459
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/th/translation.ts459
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/tr/translation.ts459
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Languages/zh/translation.ts459
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/ListThread.cpp1479
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/ListThread.h340
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/ListThread_InodeAction.cpp54
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/MkPath.cpp100
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/MkPath.h56
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/ReadThread.cpp513
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/ReadThread.h137
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/RmPath.cpp127
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/RmPath.h56
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/StructEnumDefinition.h1
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/StructEnumDefinition_CopyEngine.h51
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/TransferThread.cpp977
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/TransferThread.h202
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/Variable.h33
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/WriteThread.cpp344
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/WriteThread.h114
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/copyEngine-collision-and-error.cpp565
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/copyEngine.cpp492
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/copyEngine.h293
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/copyEngine.pro68
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/debugDialog.cpp70
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/debugDialog.h40
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/debugDialog.ui100
-rwxr-xr-xplugins/CopyEngine/Ultracopier-0.3/documentation.dox41
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/factory.cpp239
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/factory.h81
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.cpp78
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.h45
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.ui220
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.cpp176
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.h56
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.ui367
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.cpp143
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.h53
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.ui192
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.cpp96
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.h50
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.ui282
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/informations.xml27
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/options.ui149
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/scanFileOrFolder.cpp235
-rw-r--r--plugins/CopyEngine/Ultracopier-0.3/scanFileOrFolder.h69
-rw-r--r--plugins/Languages/ar/flag.pngbin0 -> 992 bytes
-rw-r--r--plugins/Languages/ar/informations.xml33
-rw-r--r--plugins/Languages/ar/translation.ts865
-rw-r--r--plugins/Languages/de/flag.pngbin0 -> 753 bytes
-rw-r--r--plugins/Languages/de/informations.xml33
-rw-r--r--plugins/Languages/de/translation.ts865
-rw-r--r--plugins/Languages/el/flag.pngbin0 -> 779 bytes
-rw-r--r--plugins/Languages/el/informations.xml33
-rw-r--r--plugins/Languages/el/translation.ts865
-rw-r--r--plugins/Languages/es/flag.pngbin0 -> 782 bytes
-rw-r--r--plugins/Languages/es/informations.xml33
-rw-r--r--plugins/Languages/es/translation.ts871
-rw-r--r--plugins/Languages/fr/flag.pngbin0 -> 738 bytes
-rw-r--r--plugins/Languages/fr/informations.xml36
-rw-r--r--plugins/Languages/fr/translation.ts871
-rw-r--r--plugins/Languages/hi/flag.pngbin0 -> 696 bytes
-rw-r--r--plugins/Languages/hi/informations.xml33
-rw-r--r--plugins/Languages/hi/translation.ts865
-rw-r--r--plugins/Languages/id/flag.pngbin0 -> 659 bytes
-rw-r--r--plugins/Languages/id/informations.xml33
-rw-r--r--plugins/Languages/id/translation.ts865
-rw-r--r--plugins/Languages/it/flag.pngbin0 -> 710 bytes
-rw-r--r--plugins/Languages/it/informations.xml33
-rw-r--r--plugins/Languages/it/translation.ts800
-rw-r--r--plugins/Languages/ja/flag.pngbin0 -> 630 bytes
-rw-r--r--plugins/Languages/ja/informations.xml34
-rw-r--r--plugins/Languages/ja/translation.ts800
-rw-r--r--plugins/Languages/nl/flag.pngbin0 -> 679 bytes
-rw-r--r--plugins/Languages/nl/informations.xml33
-rw-r--r--plugins/Languages/nl/translation.ts865
-rw-r--r--plugins/Languages/no/flag.pngbin0 -> 739 bytes
-rw-r--r--plugins/Languages/no/informations.xml33
-rw-r--r--plugins/Languages/no/translation.ts865
-rw-r--r--plugins/Languages/pl/flag.pngbin0 -> 703 bytes
-rw-r--r--plugins/Languages/pl/informations.xml33
-rw-r--r--plugins/Languages/pl/translation.ts865
-rw-r--r--plugins/Languages/pt/flag.pngbin0 -> 703 bytes
-rw-r--r--plugins/Languages/pt/informations.xml33
-rw-r--r--plugins/Languages/pt/translation.ts865
-rw-r--r--plugins/Languages/ru/flag.pngbin0 -> 676 bytes
-rw-r--r--plugins/Languages/ru/informations.xml33
-rw-r--r--plugins/Languages/ru/translation.ts865
-rw-r--r--plugins/Languages/th/flag.pngbin0 -> 694 bytes
-rw-r--r--plugins/Languages/th/informations.xml33
-rw-r--r--plugins/Languages/th/translation.ts865
-rw-r--r--plugins/Languages/tr/flag.pngbin0 -> 672 bytes
-rw-r--r--plugins/Languages/tr/informations.xml33
-rw-r--r--plugins/Languages/tr/translation.ts865
-rw-r--r--plugins/Languages/zh/flag.pngbin0 -> 576 bytes
-rw-r--r--plugins/Languages/zh/informations.xml36
-rw-r--r--plugins/Languages/zh/translation.ts800
-rw-r--r--plugins/Listener/catchcopy-v0002/DebugEngineMacro.h25
-rw-r--r--plugins/Listener/catchcopy-v0002/Environment.h11
-rw-r--r--plugins/Listener/catchcopy-v0002/StructEnumDefinition.h1
-rw-r--r--plugins/Listener/catchcopy-v0002/Variable.h16
-rwxr-xr-xplugins/Listener/catchcopy-v0002/catchcopy-api-0002/ClientCatchcopy.cpp379
-rwxr-xr-xplugins/Listener/catchcopy-v0002/catchcopy-api-0002/ClientCatchcopy.h114
-rwxr-xr-xplugins/Listener/catchcopy-v0002/catchcopy-api-0002/ExtraSocketCatchcopy.cpp31
-rwxr-xr-xplugins/Listener/catchcopy-v0002/catchcopy-api-0002/ExtraSocketCatchcopy.h27
-rwxr-xr-xplugins/Listener/catchcopy-v0002/catchcopy-api-0002/ServerCatchcopy.cpp735
-rwxr-xr-xplugins/Listener/catchcopy-v0002/catchcopy-api-0002/ServerCatchcopy.h162
-rwxr-xr-xplugins/Listener/catchcopy-v0002/catchcopy-api-0002/VariablesCatchcopy.h14
-rwxr-xr-xplugins/Listener/catchcopy-v0002/documentation.dox33
-rw-r--r--plugins/Listener/catchcopy-v0002/informations.xml27
-rwxr-xr-xplugins/Listener/catchcopy-v0002/listener.cpp72
-rwxr-xr-xplugins/Listener/catchcopy-v0002/listener.h58
-rw-r--r--plugins/Listener/catchcopy-v0002/listener.pro17
-rwxr-xr-xplugins/PluginLoader/catchcopy-v0002/DebugEngineMacro.h25
-rwxr-xr-xplugins/PluginLoader/catchcopy-v0002/Environment.h11
-rw-r--r--plugins/PluginLoader/catchcopy-v0002/PlatformMacro.h1
-rw-r--r--plugins/PluginLoader/catchcopy-v0002/StructEnumDefinition.h1
-rwxr-xr-xplugins/PluginLoader/catchcopy-v0002/Variable.h16
-rwxr-xr-xplugins/PluginLoader/catchcopy-v0002/documentation.dox34
-rwxr-xr-xplugins/PluginLoader/catchcopy-v0002/informations.xml27
-rwxr-xr-xplugins/PluginLoader/catchcopy-v0002/pluginLoader.cpp464
-rwxr-xr-xplugins/PluginLoader/catchcopy-v0002/pluginLoader.h50
-rwxr-xr-xplugins/PluginLoader/catchcopy-v0002/pluginLoader.pro17
-rw-r--r--plugins/SessionLoader/KDE4/DebugEngineMacro.h25
-rw-r--r--plugins/SessionLoader/KDE4/Environment.h11
-rw-r--r--plugins/SessionLoader/KDE4/StructEnumDefinition.h1
-rw-r--r--plugins/SessionLoader/KDE4/Variable.h16
-rwxr-xr-xplugins/SessionLoader/KDE4/documentation.dox33
-rw-r--r--plugins/SessionLoader/KDE4/informations.xml27
-rw-r--r--plugins/SessionLoader/KDE4/sessionLoader.cpp51
-rw-r--r--plugins/SessionLoader/KDE4/sessionLoader.h33
-rw-r--r--plugins/SessionLoader/KDE4/sessionLoader.pro11
-rw-r--r--plugins/SessionLoader/Windows/DebugEngineMacro.h25
-rw-r--r--plugins/SessionLoader/Windows/Environment.h11
-rw-r--r--plugins/SessionLoader/Windows/StructEnumDefinition.h1
-rw-r--r--plugins/SessionLoader/Windows/Variable.h16
-rwxr-xr-xplugins/SessionLoader/Windows/documentation.dox33
-rw-r--r--plugins/SessionLoader/Windows/informations.xml27
-rwxr-xr-xplugins/SessionLoader/Windows/sessionLoader.cpp58
-rwxr-xr-xplugins/SessionLoader/Windows/sessionLoader.h31
-rw-r--r--plugins/SessionLoader/Windows/sessionLoader.pro11
-rw-r--r--plugins/Themes/Oxygen/DebugEngineMacro.h25
-rw-r--r--plugins/Themes/Oxygen/Environment.h11
-rw-r--r--plugins/Themes/Oxygen/Languages/ar/translation.ts218
-rw-r--r--plugins/Themes/Oxygen/Languages/de/translation.ts218
-rw-r--r--plugins/Themes/Oxygen/Languages/el/translation.ts218
-rw-r--r--plugins/Themes/Oxygen/Languages/es/translation.ts218
-rw-r--r--plugins/Themes/Oxygen/Languages/fr/translation.ts218
-rw-r--r--plugins/Themes/Oxygen/Languages/hi/translation.ts218
-rw-r--r--plugins/Themes/Oxygen/Languages/id/translation.ts218
-rw-r--r--plugins/Themes/Oxygen/Languages/it/translation.ts218
-rw-r--r--plugins/Themes/Oxygen/Languages/ja/translation.ts218
-rw-r--r--plugins/Themes/Oxygen/Languages/nl/translation.ts218
-rw-r--r--plugins/Themes/Oxygen/Languages/no/translation.ts218
-rw-r--r--plugins/Themes/Oxygen/Languages/pl/translation.ts218
-rw-r--r--plugins/Themes/Oxygen/Languages/pt/translation.ts218
-rw-r--r--plugins/Themes/Oxygen/Languages/ru/translation.ts218
-rw-r--r--plugins/Themes/Oxygen/Languages/th/translation.ts218
-rw-r--r--plugins/Themes/Oxygen/Languages/tr/translation.ts218
-rw-r--r--plugins/Themes/Oxygen/Languages/zh/translation.ts218
-rw-r--r--plugins/Themes/Oxygen/StructEnumDefinition.h1
-rw-r--r--plugins/Themes/Oxygen/TransferModel.cpp402
-rw-r--r--plugins/Themes/Oxygen/TransferModel.h79
-rw-r--r--plugins/Themes/Oxygen/Variable.h16
-rwxr-xr-xplugins/Themes/Oxygen/documentation.dox32
-rw-r--r--plugins/Themes/Oxygen/factory.cpp130
-rw-r--r--plugins/Themes/Oxygen/factory.h59
-rw-r--r--plugins/Themes/Oxygen/informations.xml27
-rwxr-xr-xplugins/Themes/Oxygen/interface.cpp901
-rwxr-xr-xplugins/Themes/Oxygen/interface.h213
-rw-r--r--plugins/Themes/Oxygen/interface.pro46
-rw-r--r--plugins/Themes/Oxygen/interface.ui1019
-rw-r--r--plugins/Themes/Oxygen/options.ui38
-rw-r--r--plugins/Themes/Oxygen/resources.qrc22
-rw-r--r--plugins/Themes/Oxygen/resources/SystemTrayIcon/add.pngbin0 -> 564 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/SystemTrayIcon/exit.pngbin0 -> 775 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/SystemTrayIcon/informations.pngbin0 -> 734 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/SystemTrayIcon/options.pngbin0 -> 660 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Caught_Unix.pngbin0 -> 798 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Caught_Windows.pngbin0 -> 563 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Semiuncaught_Unix.pngbin0 -> 1007 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Semiuncaught_Windows.pngbin0 -> 664 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Uncaught_Unix.pngbin0 -> 789 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Uncaught_Windows.pngbin0 -> 551 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/add.pngbin0 -> 564 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/cancel.pngbin0 -> 775 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/export-transfer-list.pngbin0 -> 504 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/import-transfer-list.pngbin0 -> 481 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/main.pngbin0 -> 563 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/moveDown.pngbin0 -> 525 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/moveUp.pngbin0 -> 484 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/player_end.pngbin0 -> 506 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/player_pause.pngbin0 -> 484 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/player_play.pngbin0 -> 501 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/putOnBottom.pngbin0 -> 691 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/putOnTop.pngbin0 -> 650 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/remove.pngbin0 -> 722 bytes
-rw-r--r--plugins/Themes/Oxygen/resources/search.pngbin0 -> 808 bytes
-rw-r--r--plugins/Themes/Oxygen/resources_unix.qrc7
-rw-r--r--plugins/Themes/Oxygen/resources_windows.qrc7
218 files changed, 41398 insertions, 0 deletions
diff --git a/plugins/CopyEngine/Ultracopier-0.3/AvancedQFile.cpp b/plugins/CopyEngine/Ultracopier-0.3/AvancedQFile.cpp
new file mode 100644
index 0000000..af5805b
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/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/CopyEngine/Ultracopier-0.3/AvancedQFile.h b/plugins/CopyEngine/Ultracopier-0.3/AvancedQFile.h
new file mode 100644
index 0000000..284cf02
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/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/CopyEngine/Ultracopier-0.3/CompilerInfo.h b/plugins/CopyEngine/Ultracopier-0.3/CompilerInfo.h
new file mode 100644
index 0000000..84625b9
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/CompilerInfo.h
@@ -0,0 +1 @@
+#include "../../../CompilerInfo.h"
diff --git a/plugins/CopyEngine/Ultracopier-0.3/DebugEngineMacro.h b/plugins/CopyEngine/Ultracopier-0.3/DebugEngineMacro.h
new file mode 100644
index 0000000..ad08d4f
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/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/CopyEngine/Ultracopier-0.3/Environment.h b/plugins/CopyEngine/Ultracopier-0.3/Environment.h
new file mode 100644
index 0000000..7ac6f16
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/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/CopyEngine/Ultracopier-0.3/Languages/ar/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/ar/translation.ts
new file mode 100644
index 0000000..1c3692c
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/Languages/ar/translation.ts
@@ -0,0 +1,459 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="17"/>
+ <location filename="../../AvancedQFile.cpp" line="48"/>
+ <location filename="../../AvancedQFile.cpp" line="79"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="31"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="62"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="51"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="231"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="51"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="281"/>
+ <location filename="../../TransferThread.cpp" line="282"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="124"/>
+ <location filename="../../copyEngine.cpp" line="141"/>
+ <source>Select destination directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="188"/>
+ <location filename="../../copyEngine.cpp" line="201"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="189"/>
+ <location filename="../../copyEngine.cpp" line="202"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="190"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="191"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="192"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="193"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="203"/>
+ <source>Put to end of the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="225"/>
+ <source>Select source directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="239"/>
+ <source>Select one or more files to open</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="241"/>
+ <source>All files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="70"/>
+ <location filename="../../fileExistsDialog.cpp" line="71"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="66"/>
+ <location filename="../../fileIsSameDialog.cpp" line="67"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="61"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder colision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="112"/>
+ <location filename="../../scanFileOrFolder.cpp" line="138"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="157"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="159"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/de/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/de/translation.ts
new file mode 100644
index 0000000..1c3692c
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/Languages/de/translation.ts
@@ -0,0 +1,459 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="17"/>
+ <location filename="../../AvancedQFile.cpp" line="48"/>
+ <location filename="../../AvancedQFile.cpp" line="79"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="31"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="62"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="51"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="231"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="51"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="281"/>
+ <location filename="../../TransferThread.cpp" line="282"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="124"/>
+ <location filename="../../copyEngine.cpp" line="141"/>
+ <source>Select destination directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="188"/>
+ <location filename="../../copyEngine.cpp" line="201"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="189"/>
+ <location filename="../../copyEngine.cpp" line="202"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="190"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="191"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="192"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="193"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="203"/>
+ <source>Put to end of the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="225"/>
+ <source>Select source directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="239"/>
+ <source>Select one or more files to open</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="241"/>
+ <source>All files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="70"/>
+ <location filename="../../fileExistsDialog.cpp" line="71"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="66"/>
+ <location filename="../../fileIsSameDialog.cpp" line="67"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="61"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder colision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="112"/>
+ <location filename="../../scanFileOrFolder.cpp" line="138"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="157"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="159"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/el/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/el/translation.ts
new file mode 100644
index 0000000..1c3692c
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/Languages/el/translation.ts
@@ -0,0 +1,459 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="17"/>
+ <location filename="../../AvancedQFile.cpp" line="48"/>
+ <location filename="../../AvancedQFile.cpp" line="79"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="31"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="62"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="51"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="231"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="51"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="281"/>
+ <location filename="../../TransferThread.cpp" line="282"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="124"/>
+ <location filename="../../copyEngine.cpp" line="141"/>
+ <source>Select destination directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="188"/>
+ <location filename="../../copyEngine.cpp" line="201"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="189"/>
+ <location filename="../../copyEngine.cpp" line="202"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="190"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="191"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="192"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="193"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="203"/>
+ <source>Put to end of the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="225"/>
+ <source>Select source directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="239"/>
+ <source>Select one or more files to open</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="241"/>
+ <source>All files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="70"/>
+ <location filename="../../fileExistsDialog.cpp" line="71"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="66"/>
+ <location filename="../../fileIsSameDialog.cpp" line="67"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="61"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder colision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="112"/>
+ <location filename="../../scanFileOrFolder.cpp" line="138"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="157"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="159"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/es/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/es/translation.ts
new file mode 100644
index 0000000..1c3692c
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/Languages/es/translation.ts
@@ -0,0 +1,459 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="17"/>
+ <location filename="../../AvancedQFile.cpp" line="48"/>
+ <location filename="../../AvancedQFile.cpp" line="79"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="31"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="62"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="51"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="231"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="51"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="281"/>
+ <location filename="../../TransferThread.cpp" line="282"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="124"/>
+ <location filename="../../copyEngine.cpp" line="141"/>
+ <source>Select destination directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="188"/>
+ <location filename="../../copyEngine.cpp" line="201"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="189"/>
+ <location filename="../../copyEngine.cpp" line="202"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="190"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="191"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="192"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="193"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="203"/>
+ <source>Put to end of the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="225"/>
+ <source>Select source directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="239"/>
+ <source>Select one or more files to open</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="241"/>
+ <source>All files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="70"/>
+ <location filename="../../fileExistsDialog.cpp" line="71"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="66"/>
+ <location filename="../../fileIsSameDialog.cpp" line="67"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="61"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder colision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="112"/>
+ <location filename="../../scanFileOrFolder.cpp" line="138"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="157"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="159"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/fr/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/fr/translation.ts
new file mode 100644
index 0000000..dcf87c6
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/Languages/fr/translation.ts
@@ -0,0 +1,459 @@
+<?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="17"/>
+ <location filename="../../AvancedQFile.cpp" line="48"/>
+ <location filename="../../AvancedQFile.cpp" line="79"/>
+ <source>Not supported on this platform</source>
+ <translation>Non supporté sur cette plateforme</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="31"/>
+ <source>Last modified date is wrong</source>
+ <translation>Date de dernière modification du fichier fausse</translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="62"/>
+ <source>Last access date is wrong</source>
+ <translation>Date du dernier accès au fichier fausse</translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="52"/>
+ <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="234"/>
+ <source>Unable to read the source file: </source>
+ <translation>Impossible de lire le fichier source: </translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="52"/>
+ <source>Unable to remove the folder</source>
+ <translation>Impossible de supprimer le répertoire</translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="281"/>
+ <location filename="../../TransferThread.cpp" line="282"/>
+ <source>Copy of </source>
+ <translation>Copie de </translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="225"/>
+ <source>Select source directory</source>
+ <translation>Choisir le répertoire source</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="239"/>
+ <source>Select one or more files to open</source>
+ <translation>Sélectionnez un ou plusieurs fichiers à ouvrir</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="241"/>
+ <source>All files</source>
+ <translation>Tous les fichiers</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="124"/>
+ <location filename="../../copyEngine.cpp" line="141"/>
+ <source>Select destination directory</source>
+ <translation>Selectionnez le répertoire de destination</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="188"/>
+ <location filename="../../copyEngine.cpp" line="201"/>
+ <source>Ask</source>
+ <translation>Demander</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="189"/>
+ <location filename="../../copyEngine.cpp" line="202"/>
+ <source>Skip</source>
+ <translation>Passer</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="190"/>
+ <source>Overwrite</source>
+ <translation>Ecraser</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="191"/>
+ <source>Overwrite if newer</source>
+ <translation>Ecraser si plus récent</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="192"/>
+ <source>Overwrite if the last modification dates are different</source>
+ <translation>Ecraser si les dates de modifications sont différentes</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="193"/>
+ <source>Rename</source>
+ <translation>Renommer</translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="203"/>
+ <source>Put to end of the list</source>
+ <translation>Mettre à la fin de la liste</translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error on file</source>
+ <translation>Erreur sur le fichier</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error</source>
+ <translation>Erreur</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Size</source>
+ <translation>Taille</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Modified</source>
+ <translation>Modifié</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>File name</source>
+ <translation>Nom de fichier</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation>&amp;Toujours effectuer cette action</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Put to bottom</source>
+ <translation>Mettre à la fin</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Retry</source>
+ <translation>Réessayer</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Passer</translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Annuler</translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>The file exists</source>
+ <translation>Le fichier existe</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Source</source>
+ <translation>Source</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation>Destination</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Size</source>
+ <translation>Taille</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation>Modifié</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>File name</source>
+ <translation>Nom de fichier</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Suggérer un &amp;nouveau nom</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation>&amp;Toujours effectuer cette action</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation>&amp;Renommer</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Overwrite</source>
+ <translation>&amp;Ecraser</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Passer</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Annuler</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if newer</source>
+ <translation>Ecraser si plus récent</translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <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="70"/>
+ <location filename="../../fileExistsDialog.cpp" line="71"/>
+ <source>Copy of </source>
+ <translation>Copie de </translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>This files are the same file</source>
+ <translation>Ces fichiers sont identiques</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation>La source et la destination sont identiques</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Size</source>
+ <translation>Taille</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Modified</source>
+ <translation>Modifié</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>File name</source>
+ <translation>Nom de fichier</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Suggérer un &amp;nouveau nom</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation>&amp;Toujours effectuer cette action</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation>&amp;Renommer</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Passer</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Annuler</translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="66"/>
+ <location filename="../../fileIsSameDialog.cpp" line="67"/>
+ <source>Copy of </source>
+ <translation>Copie de </translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>This folders are the same folder</source>
+ <translation>Les répertoires sont identiques</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Source</source>
+ <translation>Source</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation>Destination</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation>La source et la destination sont identiques</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation>Modifié</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Folder name</source>
+ <translation>Nom de répertoire</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation>Suggérer un &amp;nouveau nom</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation>&amp;Toujours effectuer cette action</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation>&amp;Renommer</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Merge</source>
+ <translation>Fusionner</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Skip</source>
+ <translation>Passer</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Annuler</translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="61"/>
+ <source>Copy of </source>
+ <translation>Copie de </translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Transfer the file rights</source>
+ <translation>Transférer les droits des fichiers</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Keep the file date</source>
+ <translation>Garder la date du fichier</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder error</source>
+ <translation>En cas d&apos;erreur de répertoire</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Ask</source>
+ <translation>Demander</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Skip</source>
+ <translation>Passer</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Merge</source>
+ <translation>Fusionner</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Rename</source>
+ <translation>Renommer</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Check if destination folder exists</source>
+ <translation>Vérifier si le répertoire de destination existe</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Block size</source>
+ <translation>Taille de block</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>KB</source>
+ <translation>Ko</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Auto start the transfer</source>
+ <translation>Démmarer automatiquement le transfert</translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder collision</source>
+ <translation>Lors d&apos;une collision de dossier</translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="112"/>
+ <location filename="../../scanFileOrFolder.cpp" line="138"/>
+ <source>Copy of </source>
+ <translation>Copie de </translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="157"/>
+ <source>The folder not exists</source>
+ <translation>Le répertoire n&apos;existe pas</translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="159"/>
+ <source>The folder is not readable</source>
+ <translation>Le répertoire n&apos;est pas lisible</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/hi/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/hi/translation.ts
new file mode 100644
index 0000000..1c3692c
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/Languages/hi/translation.ts
@@ -0,0 +1,459 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="17"/>
+ <location filename="../../AvancedQFile.cpp" line="48"/>
+ <location filename="../../AvancedQFile.cpp" line="79"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="31"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="62"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="51"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="231"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="51"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="281"/>
+ <location filename="../../TransferThread.cpp" line="282"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="124"/>
+ <location filename="../../copyEngine.cpp" line="141"/>
+ <source>Select destination directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="188"/>
+ <location filename="../../copyEngine.cpp" line="201"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="189"/>
+ <location filename="../../copyEngine.cpp" line="202"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="190"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="191"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="192"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="193"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="203"/>
+ <source>Put to end of the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="225"/>
+ <source>Select source directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="239"/>
+ <source>Select one or more files to open</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="241"/>
+ <source>All files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="70"/>
+ <location filename="../../fileExistsDialog.cpp" line="71"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="66"/>
+ <location filename="../../fileIsSameDialog.cpp" line="67"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="61"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder colision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="112"/>
+ <location filename="../../scanFileOrFolder.cpp" line="138"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="157"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="159"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/id/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/id/translation.ts
new file mode 100644
index 0000000..1c3692c
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/Languages/id/translation.ts
@@ -0,0 +1,459 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="17"/>
+ <location filename="../../AvancedQFile.cpp" line="48"/>
+ <location filename="../../AvancedQFile.cpp" line="79"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="31"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="62"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="51"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="231"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="51"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="281"/>
+ <location filename="../../TransferThread.cpp" line="282"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="124"/>
+ <location filename="../../copyEngine.cpp" line="141"/>
+ <source>Select destination directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="188"/>
+ <location filename="../../copyEngine.cpp" line="201"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="189"/>
+ <location filename="../../copyEngine.cpp" line="202"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="190"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="191"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="192"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="193"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="203"/>
+ <source>Put to end of the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="225"/>
+ <source>Select source directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="239"/>
+ <source>Select one or more files to open</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="241"/>
+ <source>All files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="70"/>
+ <location filename="../../fileExistsDialog.cpp" line="71"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="66"/>
+ <location filename="../../fileIsSameDialog.cpp" line="67"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="61"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder colision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="112"/>
+ <location filename="../../scanFileOrFolder.cpp" line="138"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="157"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="159"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/it/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/it/translation.ts
new file mode 100644
index 0000000..1c3692c
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/Languages/it/translation.ts
@@ -0,0 +1,459 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="17"/>
+ <location filename="../../AvancedQFile.cpp" line="48"/>
+ <location filename="../../AvancedQFile.cpp" line="79"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="31"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="62"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="51"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="231"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="51"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="281"/>
+ <location filename="../../TransferThread.cpp" line="282"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="124"/>
+ <location filename="../../copyEngine.cpp" line="141"/>
+ <source>Select destination directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="188"/>
+ <location filename="../../copyEngine.cpp" line="201"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="189"/>
+ <location filename="../../copyEngine.cpp" line="202"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="190"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="191"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="192"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="193"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="203"/>
+ <source>Put to end of the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="225"/>
+ <source>Select source directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="239"/>
+ <source>Select one or more files to open</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="241"/>
+ <source>All files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="70"/>
+ <location filename="../../fileExistsDialog.cpp" line="71"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="66"/>
+ <location filename="../../fileIsSameDialog.cpp" line="67"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="61"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder colision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="112"/>
+ <location filename="../../scanFileOrFolder.cpp" line="138"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="157"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="159"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/ja/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/ja/translation.ts
new file mode 100644
index 0000000..1c3692c
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/Languages/ja/translation.ts
@@ -0,0 +1,459 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="17"/>
+ <location filename="../../AvancedQFile.cpp" line="48"/>
+ <location filename="../../AvancedQFile.cpp" line="79"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="31"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="62"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="51"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="231"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="51"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="281"/>
+ <location filename="../../TransferThread.cpp" line="282"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="124"/>
+ <location filename="../../copyEngine.cpp" line="141"/>
+ <source>Select destination directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="188"/>
+ <location filename="../../copyEngine.cpp" line="201"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="189"/>
+ <location filename="../../copyEngine.cpp" line="202"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="190"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="191"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="192"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="193"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="203"/>
+ <source>Put to end of the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="225"/>
+ <source>Select source directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="239"/>
+ <source>Select one or more files to open</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="241"/>
+ <source>All files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="70"/>
+ <location filename="../../fileExistsDialog.cpp" line="71"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="66"/>
+ <location filename="../../fileIsSameDialog.cpp" line="67"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="61"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder colision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="112"/>
+ <location filename="../../scanFileOrFolder.cpp" line="138"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="157"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="159"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/nl/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/nl/translation.ts
new file mode 100644
index 0000000..1c3692c
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/Languages/nl/translation.ts
@@ -0,0 +1,459 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="17"/>
+ <location filename="../../AvancedQFile.cpp" line="48"/>
+ <location filename="../../AvancedQFile.cpp" line="79"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="31"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="62"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="51"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="231"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="51"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="281"/>
+ <location filename="../../TransferThread.cpp" line="282"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="124"/>
+ <location filename="../../copyEngine.cpp" line="141"/>
+ <source>Select destination directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="188"/>
+ <location filename="../../copyEngine.cpp" line="201"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="189"/>
+ <location filename="../../copyEngine.cpp" line="202"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="190"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="191"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="192"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="193"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="203"/>
+ <source>Put to end of the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="225"/>
+ <source>Select source directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="239"/>
+ <source>Select one or more files to open</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="241"/>
+ <source>All files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="70"/>
+ <location filename="../../fileExistsDialog.cpp" line="71"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="66"/>
+ <location filename="../../fileIsSameDialog.cpp" line="67"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="61"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder colision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="112"/>
+ <location filename="../../scanFileOrFolder.cpp" line="138"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="157"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="159"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/no/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/no/translation.ts
new file mode 100644
index 0000000..1c3692c
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/Languages/no/translation.ts
@@ -0,0 +1,459 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="17"/>
+ <location filename="../../AvancedQFile.cpp" line="48"/>
+ <location filename="../../AvancedQFile.cpp" line="79"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="31"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="62"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="51"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="231"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="51"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="281"/>
+ <location filename="../../TransferThread.cpp" line="282"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="124"/>
+ <location filename="../../copyEngine.cpp" line="141"/>
+ <source>Select destination directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="188"/>
+ <location filename="../../copyEngine.cpp" line="201"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="189"/>
+ <location filename="../../copyEngine.cpp" line="202"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="190"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="191"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="192"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="193"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="203"/>
+ <source>Put to end of the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="225"/>
+ <source>Select source directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="239"/>
+ <source>Select one or more files to open</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="241"/>
+ <source>All files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="70"/>
+ <location filename="../../fileExistsDialog.cpp" line="71"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="66"/>
+ <location filename="../../fileIsSameDialog.cpp" line="67"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="61"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder colision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="112"/>
+ <location filename="../../scanFileOrFolder.cpp" line="138"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="157"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="159"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/pl/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/pl/translation.ts
new file mode 100644
index 0000000..1c3692c
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/Languages/pl/translation.ts
@@ -0,0 +1,459 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="17"/>
+ <location filename="../../AvancedQFile.cpp" line="48"/>
+ <location filename="../../AvancedQFile.cpp" line="79"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="31"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="62"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="51"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="231"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="51"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="281"/>
+ <location filename="../../TransferThread.cpp" line="282"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="124"/>
+ <location filename="../../copyEngine.cpp" line="141"/>
+ <source>Select destination directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="188"/>
+ <location filename="../../copyEngine.cpp" line="201"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="189"/>
+ <location filename="../../copyEngine.cpp" line="202"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="190"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="191"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="192"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="193"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="203"/>
+ <source>Put to end of the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="225"/>
+ <source>Select source directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="239"/>
+ <source>Select one or more files to open</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="241"/>
+ <source>All files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="70"/>
+ <location filename="../../fileExistsDialog.cpp" line="71"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="66"/>
+ <location filename="../../fileIsSameDialog.cpp" line="67"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="61"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder colision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="112"/>
+ <location filename="../../scanFileOrFolder.cpp" line="138"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="157"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="159"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/pt/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/pt/translation.ts
new file mode 100644
index 0000000..1c3692c
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/Languages/pt/translation.ts
@@ -0,0 +1,459 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="17"/>
+ <location filename="../../AvancedQFile.cpp" line="48"/>
+ <location filename="../../AvancedQFile.cpp" line="79"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="31"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="62"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="51"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="231"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="51"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="281"/>
+ <location filename="../../TransferThread.cpp" line="282"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="124"/>
+ <location filename="../../copyEngine.cpp" line="141"/>
+ <source>Select destination directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="188"/>
+ <location filename="../../copyEngine.cpp" line="201"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="189"/>
+ <location filename="../../copyEngine.cpp" line="202"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="190"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="191"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="192"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="193"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="203"/>
+ <source>Put to end of the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="225"/>
+ <source>Select source directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="239"/>
+ <source>Select one or more files to open</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="241"/>
+ <source>All files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="70"/>
+ <location filename="../../fileExistsDialog.cpp" line="71"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="66"/>
+ <location filename="../../fileIsSameDialog.cpp" line="67"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="61"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder colision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="112"/>
+ <location filename="../../scanFileOrFolder.cpp" line="138"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="157"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="159"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/ru/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/ru/translation.ts
new file mode 100644
index 0000000..1c3692c
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/Languages/ru/translation.ts
@@ -0,0 +1,459 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="17"/>
+ <location filename="../../AvancedQFile.cpp" line="48"/>
+ <location filename="../../AvancedQFile.cpp" line="79"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="31"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="62"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="51"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="231"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="51"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="281"/>
+ <location filename="../../TransferThread.cpp" line="282"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="124"/>
+ <location filename="../../copyEngine.cpp" line="141"/>
+ <source>Select destination directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="188"/>
+ <location filename="../../copyEngine.cpp" line="201"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="189"/>
+ <location filename="../../copyEngine.cpp" line="202"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="190"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="191"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="192"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="193"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="203"/>
+ <source>Put to end of the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="225"/>
+ <source>Select source directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="239"/>
+ <source>Select one or more files to open</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="241"/>
+ <source>All files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="70"/>
+ <location filename="../../fileExistsDialog.cpp" line="71"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="66"/>
+ <location filename="../../fileIsSameDialog.cpp" line="67"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="61"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder colision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="112"/>
+ <location filename="../../scanFileOrFolder.cpp" line="138"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="157"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="159"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/th/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/th/translation.ts
new file mode 100644
index 0000000..1c3692c
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/Languages/th/translation.ts
@@ -0,0 +1,459 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="17"/>
+ <location filename="../../AvancedQFile.cpp" line="48"/>
+ <location filename="../../AvancedQFile.cpp" line="79"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="31"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="62"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="51"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="231"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="51"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="281"/>
+ <location filename="../../TransferThread.cpp" line="282"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="124"/>
+ <location filename="../../copyEngine.cpp" line="141"/>
+ <source>Select destination directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="188"/>
+ <location filename="../../copyEngine.cpp" line="201"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="189"/>
+ <location filename="../../copyEngine.cpp" line="202"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="190"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="191"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="192"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="193"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="203"/>
+ <source>Put to end of the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="225"/>
+ <source>Select source directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="239"/>
+ <source>Select one or more files to open</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="241"/>
+ <source>All files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="70"/>
+ <location filename="../../fileExistsDialog.cpp" line="71"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="66"/>
+ <location filename="../../fileIsSameDialog.cpp" line="67"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="61"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder colision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="112"/>
+ <location filename="../../scanFileOrFolder.cpp" line="138"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="157"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="159"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/tr/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/tr/translation.ts
new file mode 100644
index 0000000..1c3692c
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/Languages/tr/translation.ts
@@ -0,0 +1,459 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="17"/>
+ <location filename="../../AvancedQFile.cpp" line="48"/>
+ <location filename="../../AvancedQFile.cpp" line="79"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="31"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="62"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="51"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="231"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="51"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="281"/>
+ <location filename="../../TransferThread.cpp" line="282"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="124"/>
+ <location filename="../../copyEngine.cpp" line="141"/>
+ <source>Select destination directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="188"/>
+ <location filename="../../copyEngine.cpp" line="201"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="189"/>
+ <location filename="../../copyEngine.cpp" line="202"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="190"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="191"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="192"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="193"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="203"/>
+ <source>Put to end of the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="225"/>
+ <source>Select source directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="239"/>
+ <source>Select one or more files to open</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="241"/>
+ <source>All files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="70"/>
+ <location filename="../../fileExistsDialog.cpp" line="71"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="66"/>
+ <location filename="../../fileIsSameDialog.cpp" line="67"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="61"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder colision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="112"/>
+ <location filename="../../scanFileOrFolder.cpp" line="138"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="157"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="159"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/zh/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/zh/translation.ts
new file mode 100644
index 0000000..1c3692c
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/Languages/zh/translation.ts
@@ -0,0 +1,459 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AvancedQFile</name>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="17"/>
+ <location filename="../../AvancedQFile.cpp" line="48"/>
+ <location filename="../../AvancedQFile.cpp" line="79"/>
+ <source>Not supported on this platform</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="31"/>
+ <source>Last modified date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../AvancedQFile.cpp" line="62"/>
+ <source>Last access date is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MkPath</name>
+ <message>
+ <location filename="../../MkPath.cpp" line="51"/>
+ <source>Unable to create the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ReadThread</name>
+ <message>
+ <location filename="../../ReadThread.cpp" line="231"/>
+ <source>Unable to read the source file: </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RmPath</name>
+ <message>
+ <location filename="../../RmPath.cpp" line="51"/>
+ <source>Unable to remove the folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>TransferThread</name>
+ <message>
+ <location filename="../../TransferThread.cpp" line="281"/>
+ <location filename="../../TransferThread.cpp" line="282"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>copyEngine</name>
+ <message>
+ <location filename="../../copyEngine.cpp" line="124"/>
+ <location filename="../../copyEngine.cpp" line="141"/>
+ <source>Select destination directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="188"/>
+ <location filename="../../copyEngine.cpp" line="201"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="189"/>
+ <location filename="../../copyEngine.cpp" line="202"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="190"/>
+ <source>Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="191"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="192"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="193"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="203"/>
+ <source>Put to end of the list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="225"/>
+ <source>Select source directory</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="239"/>
+ <source>Select one or more files to open</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../copyEngine.cpp" line="241"/>
+ <source>All files</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileErrorDialog</name>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error on file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Put to bottom</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>Retry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileErrorDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileExistsDialog</name>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>The file exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Overwrite</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if newer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.ui"/>
+ <source>Overwrite if not same modification date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileExistsDialog.cpp" line="70"/>
+ <location filename="../../fileExistsDialog.cpp" line="71"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>fileIsSameDialog</name>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>This files are the same file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>File name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../fileIsSameDialog.cpp" line="66"/>
+ <location filename="../../fileIsSameDialog.cpp" line="67"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>folderExistsDialog</name>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>This folders are the same folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>The source and destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Modified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Folder name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Suggest new &amp;name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Always do this action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../folderExistsDialog.cpp" line="61"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Transfer the file rights</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Keep the file date</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Block size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Auto start the transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>When folder colision</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Merge</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Rename</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Check if destination folder exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>scanFileOrFolder</name>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="112"/>
+ <location filename="../../scanFileOrFolder.cpp" line="138"/>
+ <source>Copy of </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="157"/>
+ <source>The folder not exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../scanFileOrFolder.cpp" line="159"/>
+ <source>The folder is not readable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/ListThread.cpp b/plugins/CopyEngine/Ultracopier-0.3/ListThread.cpp
new file mode 100644
index 0000000..7f022d8
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/ListThread.cpp
@@ -0,0 +1,1479 @@
+#include "ListThread.h"
+
+/// \todo do pushed or instant mount point (setDrive, ...)
+/// \todo semaphore to prevent dual mkpath
+/// \todo repair the mkpath, to use mkpath class before file transfer to have the folder
+/// \todo do QThread( parent )
+/** \todo when overwrite with large inode operation, it not start specificly the first in the list
+ When that's is finish, send start file at real transfer start, not inode operation start **/
+/** \todo group setCollisionAction(FileExistsAction alwaysDoThisActionForFileExists) and setAlwaysFileExistsAction(FileExistsAction alwaysDoThisActionForFileExists)
+ and check if I can choose case by case if I wish overwrite, skip, ... */
+/// \todo move directly the folder when it's needed
+/// \todo connect folder error of mkpath and rmpath class
+
+ListThread::ListThread(FacilityInterface * facilityInterface)
+{
+ qRegisterMetaType<DebugLevel>("DebugLevel");
+ qRegisterMetaType<ItemOfCopyList>("ItemOfCopyList");
+ qRegisterMetaType<QFileInfo>("QFileInfo");
+ qRegisterMetaType<CopyMode>("CopyMode");
+
+ 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;
+ keepDate = false;
+ blockSize = 1024;
+ alwaysDoThisActionForFileExists = FileExists_NotSet;
+
+ #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(&timerActionDone,SIGNAL(timeout()), this,SLOT(sendActionDone()));
+ connect(&timerProgression,SIGNAL(timeout()), this,SLOT(sendProgression()));
+ 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();
+ timerActionDone.setSingleShot(true);
+ timerActionDone.setInterval(ULTRACOPIER_PLUGIN_TIME_UPDATE_TRASNFER_LIST);
+ timerProgression.setSingleShot(true);
+ timerProgression.setInterval(ULTRACOPIER_PLUGIN_TIME_UPDATE_PROGRESSION);
+}
+
+ListThread::~ListThread()
+{
+ emit tryCancel();
+ waitCancel.acquire();
+ 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()!=TransferThread::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();
+ /// \todo add the oversize to all size here
+ bytesTransfered+=temp_transfer_thread->transferSize;
+ 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;
+ }
+// 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 index=0;
+ loop_sub_size_transfer_thread_search=transferThreadList.size();
+ while(index<loop_sub_size_transfer_thread_search)
+ {
+ if(transferThreadList.at(index)==transfer)
+ {
+ int indexAction=0;
+ while(indexAction<actionToDoListTransfer.size())
+ {
+ if(actionToDoListTransfer.at(indexAction).id==transferThreadList.at(index)->transferId)
+ {
+ //push for interface at the end
+ returnActionOnCopyList newAction;
+ newAction.type=MoveItem;
+ newAction.addAction.id=transferThreadList.at(index)->transferId;
+ newAction.userAction.position=actionToDoListTransfer.size()-1;
+ actionDone << newAction;
+ //do the wait stat
+ actionToDoListTransfer[index].isRunning=false;
+ //move at the end
+ actionToDoListTransfer.move(indexAction,actionToDoListTransfer.size()-1);
+ //reset the thread list stat
+ transferThreadList[index]->transferId=0;
+ transferThreadList[index]->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(transferThreadList.at(index)->transferId).arg(index));
+ transferThreadList[index]->transferId=0;
+ transferThreadList[index]->transferSize=0;
+ }
+ break;
+ }
+ index++;
+ }
+ 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;
+}
+
+//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(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()->setCheckDestinationFolderExists(checkDestinationFolderExists && alwaysDoThisActionForFolderExists!=FolderExists_Merge);
+ if(scanFileOrFolderThreadsPool.size()==1)
+ updateTheStatus();
+ return scanFileOrFolderThreadsPool.last();
+}
+
+void ListThread::scanThreadHaveFinish(bool skipFirstRemove)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"listing thread have finish, skipFirstRemove: "+QString::number(skipFirstRemove));
+ if(!skipFirstRemove)
+ {
+ QObject * senderThread = 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()));
+ bool isFound=false;
+ int index=0;
+ while(index<scanFileOrFolderThreadsPool.size())
+ {
+ if(senderThread==scanFileOrFolderThreadsPool.at(index))
+ {
+ if(index!=0)
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"scanFileOrFolderThread is not the first (plugin copy engine)");
+ delete scanFileOrFolderThreadsPool.at(index);
+ scanFileOrFolderThreadsPool.removeAt(index);
+ if(scanFileOrFolderThreadsPool.size()==0)
+ updateTheStatus();
+ isFound=true;
+ break;
+ }
+ index++;
+ }
+ if(!isFound)
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"sender pointer not found (plugin copy engine)");
+ }
+ }
+ 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();
+ timerProgression.start();
+}
+
+// -> 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::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;
+ disconnect(this);
+ 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();
+}
+
+//speed limitation
+qint64 ListThread::getSpeedLimitation()
+{
+ return maxSpeed;
+}
+
+bool ListThread::setSpeedLimitation(const qint64 &speedLimitation)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"maxSpeed: "+QString::number(maxSpeed));
+ 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;
+}
+
+//send action done
+void ListThread::sendActionDone()
+{
+ if(actionDone.size()>0)
+ {
+ emit newActionOnList(actionDone);
+ actionDone.clear();
+ }
+ if(actionToDoListTransfer.size()>0)
+ timerActionDone.start();
+}
+
+//send progression
+void ListThread::sendProgression()
+{
+ if(actionToDoListTransfer.size()==0)
+ return;
+ qint64 copiedSize,totalSize,localOverSize;
+ QList<ProgressionItem> progressionList;
+ TransferThread *thread;
+ oversize=0;
+ currentProgression=0;
+ int_for_loop=0;
+ loop_size=transferThreadList.size();
+ while(int_for_loop<loop_size)
+ {
+ thread=transferThreadList.at(int_for_loop);
+ if(thread->getStat()==TransferThread::Transfer)
+ {
+ copiedSize=thread->copiedSize();
+ currentProgression+=copiedSize;
+ if(copiedSize>(qint64)thread->transferSize)
+ localOverSize=copiedSize-thread->transferSize;
+ totalSize=thread->transferSize+localOverSize;
+ ProgressionItem tempItem;
+ tempItem.current=copiedSize;
+ tempItem.id=thread->transferId;
+ tempItem.total=totalSize;
+ progressionList << tempItem;
+ oversize+=localOverSize;
+ }
+ int_for_loop++;
+ }
+ emit pushFileProgression(progressionList);
+ emit pushGeneralProgression(bytesTransfered+currentProgression,bytesToTransfer+oversize);
+ timerProgression.start();
+}
+
+//send the progression
+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 = AddingItem;
+ 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(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()!=TransferThread::PreOperation)
+ {
+ returnActionOnCopyList newAction;
+ switch(transferThread->getStat())
+ {
+ case TransferThread::Transfer:
+ newAction.type=Transfer;
+ break;
+ case TransferThread::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)
+{
+ //ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"source: "+source.absoluteFilePath()+", destination: "+destination.absoluteFilePath());
+ if(actionToDoListTransfer.size()==0)
+ timerActionDone.start();
+ //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,"source: "+source.absoluteFilePath()+",destination: "+destination.absoluteFilePath()+", add entry: "+QString::number(temp.id));
+ 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)
+{
+ 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)
+{
+ 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)
+{
+ 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)
+{
+ 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");
+}
+
+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;CopyEngine-0.3\n").toUtf8());
+ int size=actionToDoListTransfer.size();
+ for (int index=0;index<size;++index) {
+ if(actionToDoListTransfer.at(index).mode==Copy)
+ transferFile.write(QString("Copy;%1;%2\n").arg(actionToDoListTransfer.at(index).source.absoluteFilePath()).arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()).toUtf8());
+ else
+ transferFile.write(QString("Move;%1;%2\n").arg(actionToDoListTransfer.at(index).source.absoluteFilePath()).arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()).toUtf8());
+ }
+ 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();
+ 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;CopyEngine-0.3\n")
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Wrong header: \"%1\"").arg(content));
+ emit errorTransferList(tr("Wrong header: \"%1\"").arg(content));
+ return;
+ }
+ bool errorFound=false,ignored_by_wrong_type=false;
+ QRegExp correctLine("^(Copy|Move);[^;]+;[^;]+\n$");
+ QStringList args;
+ CopyMode mode;
+ do
+ {
+ data=transferFile.readLine();
+ if(data.size()>0)
+ {
+ content=QString::fromUtf8(data);
+ //do the import here
+ if(content.contains(correctLine))
+ {
+ content.remove("\n");
+ args=content.split(";");
+ 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")
+ mode=Copy;
+ else
+ mode=Move;
+ addToTransfer(QFileInfo(args.at(1)),QFileInfo(args.at(2)),mode);
+ }
+ 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"));
+ else if(ignored_by_wrong_type)
+ emit warningTransferList(tr("Some list is ignored because it not corresponds to the window transfer type"));
+// 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: ").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()==TransferThread::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()==TransferThread::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()==TransferThread::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()==TransferThread::WaitForTheTransfer)
+ {
+ transfer->startTheTransfer();
+ numberOfTranferRuning++;
+ }
+ doNewActions_start_transfer();
+}
+
+/// \brief update the transfer stat
+void ListThread::newTransferStat(TransferThread::TransferStat stat,quint64 id)
+{
+ returnActionOnCopyList newAction;
+ switch(stat)
+ {
+ case TransferThread::Idle:
+ return;
+ break;
+ case TransferThread::PreOperation:
+ return;
+ break;
+ case TransferThread::WaitForTheTransfer:
+ return;
+ break;
+ case TransferThread::Transfer:
+ newAction.type=Transfer;
+ break;
+ case TransferThread::PostTransfer:
+ newAction.type=PostOperation;
+ break;
+ case TransferThread::PostOperation:
+ return;
+ break;
+ default:
+ break;
+ }
+ newAction.addAction.id = id;
+ actionDone << newAction;
+}
+
+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)
+ {
+ 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 TransferThread::Idle:
+ stat="Idle";
+ break;
+ case TransferThread::PreOperation:
+ stat="PreOperation";
+ break;
+ case TransferThread::WaitForTheTransfer:
+ stat="WaitForTheTransfer";
+ break;
+ case TransferThread::Transfer:
+ stat="Transfer";
+ break;
+ case TransferThread::PostOperation:
+ stat="PostOperation";
+ break;
+ case TransferThread::PostTransfer:
+ stat="PostTransfer";
+ 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);
+ #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);
+ last->start();
+ last->setObjectName(QString("transfer %1").arg(transferThreadList.size()-1));
+ last->setMkpathTransfer(&mkpathTransfer);
+ #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/CopyEngine/Ultracopier-0.3/ListThread.h b/plugins/CopyEngine/Ultracopier-0.3/ListThread.h
new file mode 100644
index 0000000..f053e86
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/ListThread.h
@@ -0,0 +1,340 @@
+/** \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
+ };
+ /// \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();
+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 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 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(TransferThread::TransferStat stat,quint64 id);
+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 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;
+ QList<quint64> orderStarted;///< list the order id
+ int maxSpeed;
+ FolderExistsAction alwaysDoThisActionForFolderExists;
+ bool checkDestinationFolderExists;
+
+ //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,currentProgression;
+ 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;
+ //send action done timer
+ QTimer timerActionDone;
+ //send progression timer
+ QTimer timerProgression;
+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);
+ //send action done
+ void sendActionDone();
+ //send progression
+ void sendProgression();
+ //send the progression
+ 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);
+
+ void cancelAll();
+
+ //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);
+};
+
+#endif // LISTTHREAD_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/ListThread_InodeAction.cpp b/plugins/CopyEngine/Ultracopier-0.3/ListThread_InodeAction.cpp
new file mode 100644
index 0000000..0fd2cf2
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/ListThread_InodeAction.cpp
@@ -0,0 +1,54 @@
+/** \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 */
+
+//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_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());
+ 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;
+}
diff --git a/plugins/CopyEngine/Ultracopier-0.3/MkPath.cpp b/plugins/CopyEngine/Ultracopier-0.3/MkPath.cpp
new file mode 100644
index 0000000..dd71231
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/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/CopyEngine/Ultracopier-0.3/MkPath.h b/plugins/CopyEngine/Ultracopier-0.3/MkPath.h
new file mode 100644
index 0000000..5d00d60
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/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/CopyEngine/Ultracopier-0.3/ReadThread.cpp b/plugins/CopyEngine/Ultracopier-0.3/ReadThread.cpp
new file mode 100644
index 0000000..fb97ec5
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/ReadThread.cpp
@@ -0,0 +1,513 @@
+#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);
+ 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;
+ 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;
+ lastGoodPosition=position;
+ return file.seek(position);
+}
+
+qint64 ReadThread::size()
+{
+ return file.size();
+}
+
+void ReadThread::postOperation()
+{
+ emit internalStartClose();
+}
+
+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)
+ {
+ 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>size)
+ oversize=lastGoodPosition-size;*/
+ }
+ /*
+ 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();
+}
+
+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
+ lastGoodPosition=0;
+ if(internalOpen(false))
+ {
+ 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/CopyEngine/Ultracopier-0.3/ReadThread.h b/plugins/CopyEngine/Ultracopier-0.3/ReadThread.h
new file mode 100644
index 0000000..537134a
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/ReadThread.h
@@ -0,0 +1,137 @@
+/** \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 "WriteThread.h"
+#include "Environment.h"
+#include "StructEnumDefinition_CopyEngine.h"
+#include "AvancedQFile.h"
+
+/// \todo do fake open/close
+
+/// \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
+ };
+ 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();
+public slots:
+ /// \brief to reset the copy, and put at the same state when it just open
+ void seekToZeroAndWait();
+signals:
+ void error();
+ void isInPause();
+ void opened();
+ void readIsStarted();
+ void readIsStopped();
+ void closed();
+ void isSeekToZeroAndWait();
+ void checkIfIsWait();
+ void resumeAfterErrorByRestartAll();
+ void resumeAfterErrorByRestartAtTheLastPosition();
+ // internal signals
+ void internalStartOpen();
+ 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 postOperation();
+ void isInWait();
+};
+
+#endif // READTHREAD_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/RmPath.cpp b/plugins/CopyEngine/Ultracopier-0.3/RmPath.cpp
new file mode 100644
index 0000000..e7617fc
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/RmPath.cpp
@@ -0,0 +1,127 @@
+#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)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+path);
+ if(stopIt)
+ return;
+ emit internalStartAddPath(path);
+}
+
+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)),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 RmPath::internalDoThisPath()
+{
+ if(waitAction || pathList.isEmpty())
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+pathList.first());
+ if(!rmpath(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 remove the folder"));
+ return;
+ }
+ pathList.removeFirst();
+ emit firstFolderFinish();
+ checkIfCanDoTheNext();
+}
+
+/** remplace QDir::rmpath() because it return false if the folder not exists
+ and seam bug with parent folder */
+bool RmPath::rmpath(const QDir &dir)
+{
+ if(!dir.exists())
+ return true;
+ bool allHaveWork=true;
+ QFileInfoList list = dir.entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System,QDir::DirsFirst);
+ for (int i = 0; i < list.size(); ++i)
+ {
+ QFileInfo fileInfo(list.at(i));
+ if(!fileInfo.isDir())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"found a file: "+fileInfo.fileName());
+ allHaveWork=false;
+ }
+ else
+ {
+ //return the fonction for scan the new folder
+ if(!rmpath(dir.absolutePath()+fileInfo.fileName()+'/'))
+ allHaveWork=false;
+ }
+ }
+ if(!allHaveWork)
+ return allHaveWork;
+ allHaveWork=dir.rmdir(dir.absolutePath());
+ if(!allHaveWork)
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to remove the folder: "+dir.absolutePath());
+ return allHaveWork;
+}
+
+void RmPath::internalAddPath(const QString &path)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+path);
+ pathList << path;
+ 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/CopyEngine/Ultracopier-0.3/RmPath.h b/plugins/CopyEngine/Ultracopier-0.3/RmPath.h
new file mode 100644
index 0000000..5eca5e1
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/RmPath.h
@@ -0,0 +1,56 @@
+/** \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);
+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:
+ void skip();
+ void retry();
+private:
+ void run();
+ bool waitAction;
+ bool stopIt;
+ bool skipIt;
+ QStringList pathList;
+ void checkIfCanDoTheNext();
+ QDir dir;
+ bool rmpath(const QDir &dir);
+private slots:
+ void internalDoThisPath();
+ void internalAddPath(const QString &path);
+ void internalSkip();
+ void internalRetry();
+};
+
+
+#endif // RMPATH_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/StructEnumDefinition.h b/plugins/CopyEngine/Ultracopier-0.3/StructEnumDefinition.h
new file mode 100644
index 0000000..c1758f4
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/StructEnumDefinition.h
@@ -0,0 +1 @@
+#include "../../../StructEnumDefinition.h"
diff --git a/plugins/CopyEngine/Ultracopier-0.3/StructEnumDefinition_CopyEngine.h b/plugins/CopyEngine/Ultracopier-0.3/StructEnumDefinition_CopyEngine.h
new file mode 100644
index 0000000..88971aa
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/StructEnumDefinition_CopyEngine.h
@@ -0,0 +1,51 @@
+/** \file StructEnumDefinition_CopyEngine.h
+\brief Define the structure and enumeration used in the copy engine
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#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 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
+};
+
+#endif // STRUCTDEF_COPYENGINE_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/TransferThread.cpp b/plugins/CopyEngine/Ultracopier-0.3/TransferThread.cpp
new file mode 100644
index 0000000..359a705
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/TransferThread.cpp
@@ -0,0 +1,977 @@
+//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>
+#endif
+
+/// \todo manage case resume after error, because previously inode opt free before
+/// \todo manage error in pre and post operation
+/// \todo remove destination when canceled
+/// \todo test if source if closed by end but write error
+/// \todo pointer for readThread and writeThread to destroy the read before the write (prevent dead lock)
+
+/// \bug continue progress when write error
+
+TransferThread::TransferThread()
+{
+ start();
+ moveToThread(this);
+ needSkip = false;
+ stat = Idle;
+ stopIt = false;
+ fileExistsAction = FileExists_NotSet;
+ alwaysDoFileExistsAction= FileExists_NotSet;
+ readError = false;
+ writeError = 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()));
+ stat = 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);
+ 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);
+ connect(&readThread,SIGNAL(readIsStopped()), this, SLOT(readIsFinish()), Qt::QueuedConnection);
+ 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);
+ //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
+
+ /// \todo do the current post opt only after the read write opt
+ exec();
+}
+
+TransferThread::TransferStat TransferThread::getStat()
+{
+ return stat;
+}
+
+void TransferThread::startTheTransfer()
+{
+ emit internalTryStartTheTransfer();
+}
+
+void TransferThread::internalStartTheTransfer()
+{
+ if(stat==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(stat==PostOperation)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] can't start transfert at PostOperation");
+ return;
+ }
+ if(stat==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(stat!=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()
+ stat = 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;
+ resetExtraVariable();
+ emit internalStartPreOperation();
+}
+
+void TransferThread::setFileExistsAction(const FileExistsAction &action)
+{
+ if(stat!=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(stat!=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;
+ readIsClosedVariable = false;
+ writeIsClosedVariable = false;
+ needSkip = false;
+ retry = false;
+ readIsOpenVariable = false;
+ writeIsOpenVariable = false;
+}
+
+void TransferThread::preOperation()
+{
+ if(stat!=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,sourceInfo.size());
+ }
+}
+
+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()
+{
+ /// \todo do the overwrite: FileExists_OverwriteIfNotSameModificationDate
+ //check if destination exists
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] overwrite: "+QString::number(fileExistsAction)+", always action: "+QString::number(alwaysDoFileExistsAction));
+ if(alwaysDoFileExistsAction==FileExists_Overwrite || readError || writeError)
+ return false;
+ if(destinationInfo.exists())
+ {
+ if(fileExistsAction==FileExists_NotSet && alwaysDoFileExistsAction==FileExists_Skip)
+ {
+ stat=Idle;
+ emit postOperationStopped();
+ return true;
+ }
+ if(alwaysDoFileExistsAction==FileExists_Rename)
+ {
+ QString absolutePath=destinationInfo.absolutePath();
+ QString fileName=destinationInfo.fileName();
+ QString suffix="";
+ if(fileName.contains(QRegExp("^(.*)(\\.[a-z0-9]+)$")))
+ {
+ suffix=fileName;
+ suffix.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\2");
+ fileName.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\1");
+ }
+ do
+ {
+ if(!fileName.startsWith(tr("Copy of ")))
+ fileName=tr("Copy of ")+fileName;
+ else
+ {
+ if(fileName.contains(QRegExp("_[0-9]+$")))
+ {
+ QString number=fileName;
+ number.replace(QRegExp("^.*_([0-9]+)$"),"\\1");
+ int num=number.toInt()+1;
+ fileName.remove(QRegExp("[0-9]+$"));
+ fileName+=QString::number(num);
+ }
+ else
+ fileName+="_2";
+ }
+ destination=absolutePath+QDir::separator()+fileName+suffix;
+ destinationInfo.setFile(destination);
+ }
+ while(destinationInfo.exists());
+ return false;
+ }
+ if(fileExistsAction==FileExists_OverwriteIfNewer || (fileExistsAction==FileExists_NotSet && alwaysDoFileExistsAction==FileExists_OverwriteIfNewer))
+ {
+ if(destinationInfo.lastModified()<sourceInfo.lastModified())
+ return false;
+ else
+ {
+ stat=Idle;
+ emit postOperationStopped();
+ return true;
+ }
+ }
+ if(fileExistsAction==FileExists_OverwriteIfNotSameModificationDate || (fileExistsAction==FileExists_NotSet && alwaysDoFileExistsAction==FileExists_OverwriteIfNotSameModificationDate))
+ {
+ if(destinationInfo.lastModified()!=sourceInfo.lastModified())
+ return false;
+ else
+ {
+ stat=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)
+ {
+ stat=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");
+ stat=Transfer;
+ if(!canBeMovedDirectlyVariable)
+ {
+ needRemove=true;
+ readThread.startRead();
+ }
+ else
+ tryMoveDirectly();
+ emit pushStat(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);
+ 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);
+}
+
+//pause the copy
+void TransferThread::pause()
+{
+ readThread.pause();
+}
+
+//resume the copy
+void TransferThread::resume()
+{
+ readThread.resume();
+}
+
+//stop the current copy
+void TransferThread::stop()
+{
+ stopIt=true;
+ 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;
+ stat=PostTransfer;
+ emit pushStat(stat,transferId);
+}
+
+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");
+ stat=PostOperation;
+ //emit pushStat(stat,transferId);
+ emit internalStartPostOperation();
+ return true;
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] wait self close");
+ return false;
+ }
+}
+
+/// \todo found way to retry that's
+/// \todo the rights copy
+void TransferThread::postOperation()
+{
+ if(stat!=PostOperation)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] need be in transfer, source: "+source+", destination: "+destination+", stat:"+QString::number(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!");
+ }
+ stat=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");
+ 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");
+ readError = true;
+ writeIsReadyVariable = false;
+ readIsReadyVariable = false;
+ emit errorOnFile(sourceInfo,readThread.errorString());
+}
+
+//retry after error
+void TransferThread::retryAfterError()
+{
+ //opening error
+ if(stat==PreOperation)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] is not idle, source: "+source+", destination: "+destination+", stat: "+QString::number(stat));
+ tryOpen();
+ return;
+ }
+ //data streaming error
+ if(stat!=PostOperation && stat!=Transfer)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] is not idle, source: "+source+", destination: "+destination+", stat: "+QString::number(stat));
+ return;
+ }
+ if(canBeMovedDirectlyVariable)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] retry the system move");
+ tryMoveDirectly();
+ 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(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");
+}
+
+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");
+}
+
+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;
+ */
+ QFileInfo fileInfo(destination);
+ time_t ctime=fileInfo.created().toTime_t();
+ time_t actime=fileInfo.lastRead().toTime_t();
+ time_t modtime=fileInfo.lastModified().toTime_t();
+ #ifdef Q_CC_GNU
+ //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(source.toLatin1().data(),&butime)==0;
+ #else
+ return false;
+ #endif
+ return true;
+}
+
+//skip the copy
+void TransferThread::skip()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start with stat: "+QString::number(stat));
+ switch(stat)
+ {
+ case PreOperation:
+ case 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 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 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(stat)
+ {
+ case Transfer:
+ case PostOperation:
+ return readThread.getLastGoodPosition();
+ default:
+ return 0;
+ }
+}
+
+//retry after error
+void TransferThread::putAtBottom()
+{
+ emit tryPutAtBottom();
+}
+
+#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;
+ 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;
+ default:
+ return '?';
+ }
+}
+
+#endif
+
+void TransferThread::setMkpathTransfer(QSemaphore *mkpathTransfer)
+{
+ this->mkpathTransfer=mkpathTransfer;
+ writeThread.setMkpathTransfer(mkpathTransfer);
+}
diff --git a/plugins/CopyEngine/Ultracopier-0.3/TransferThread.h b/plugins/CopyEngine/Ultracopier-0.3/TransferThread.h
new file mode 100644
index 0000000..37aa608
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/TransferThread.h
@@ -0,0 +1,202 @@
+/** \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 to have the transfer status
+ enum TransferStat
+ {
+ Idle=0,
+ PreOperation=1,
+ WaitForTheTransfer=2,
+ Transfer=3,
+ PostTransfer=4,
+ PostOperation=5
+ };
+ /// \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;
+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();
+private slots:
+ void preOperation();
+ void readIsReady();
+ void writeIsReady();
+ void readIsFinish();
+ void readIsClosed();
+ void writeIsClosed();
+ void postOperation();
+ void getWriteError();
+ void getReadError();
+ //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 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;
+ 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;
+ //error management
+ bool writeError,writeError_source_seeked,writeError_destination_reopened;
+ bool readError;
+ //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/CopyEngine/Ultracopier-0.3/Variable.h b/plugins/CopyEngine/Ultracopier-0.3/Variable.h
new file mode 100644
index 0000000..a04d7eb
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/Variable.h
@@ -0,0 +1,33 @@
+/** \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
+
+#endif // VARIABLE_H
+
+
+
diff --git a/plugins/CopyEngine/Ultracopier-0.3/WriteThread.cpp b/plugins/CopyEngine/Ultracopier-0.3/WriteThread.cpp
new file mode 100644
index 0000000..fc46d1f
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/WriteThread.cpp
@@ -0,0 +1,344 @@
+#include "WriteThread.h"
+
+#include <QDir>
+
+WriteThread::WriteThread()
+{
+ stopIt=false;
+ /// \test lot of level of priority
+ isOpen.release();
+ start();
+ moveToThread(this);
+ setObjectName("write");
+ this->mkpathTransfer = mkpathTransfer;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ stat=Idle;
+ #endif
+ CurentCopiedSize=0;
+}
+
+WriteThread::~WriteThread()
+{
+ stop();
+ freeBlock.release();
+ emit internalStartClose();
+ disconnect(this);
+ isOpen.acquire();
+ 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);
+ 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
+ if(file.open(QIODevice::ReadWrite))
+ {
+ 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();
+ 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)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] open destination: "+name);
+ if(stopIt)
+ return;
+ fakeMode=false;
+ this->name=name;
+ this->startSize=startSize;
+ 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()");
+ stopIt=true;
+ freeBlock.release();
+ // useless because stopIt will close all thread, but if thread not runing run it
+ endIsDetected();
+ //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)
+ {
+ if(startSize!=CurentCopiedSize)
+ file.resize(CurentCopiedSize);
+ file.close();
+ }
+ #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;
+ 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();
+}
+
+void WriteThread::flushAndSeekToZero()
+{
+ stopIt=true;
+ emit internalStartFlushAndSeekToZero();
+}
+
+void WriteThread::internalFlushAndSeekToZero()
+{
+ flushBuffer();
+ file.seek(0);
+ stopIt=false;
+ emit flushedAndSeekedToZero();
+}
+
+void WriteThread::setMkpathTransfer(QSemaphore *mkpathTransfer)
+{
+ this->mkpathTransfer=mkpathTransfer;
+}
diff --git a/plugins/CopyEngine/Ultracopier-0.3/WriteThread.h b/plugins/CopyEngine/Ultracopier-0.3/WriteThread.h
new file mode 100644
index 0000000..7a9b4b7
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/WriteThread.h
@@ -0,0 +1,114 @@
+/** \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 "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);
+ /// \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
+ };
+ WriteStat stat;
+ #endif
+ /// \brief do the fake open
+ void fakeOpen();
+ /// \brief do the fake writeIsStarted
+ void fakeWriteIsStarted();
+ /// \brief do the fake writeIsStopped
+ void fakeWriteIsStopped();
+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();
+signals:
+ void error();
+ void opened();
+ void reopened();
+ void writeIsStarted();
+ void writeIsStopped();
+ void flushedAndSeekedToZero();
+ void closed();
+ //internal signals
+ void internalStartOpen();
+ 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;
+ QMutex accessList; ///< For use the list
+ QSemaphore freeBlock;
+ QSemaphore isOpen;
+ 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;
+private slots:
+ bool internalOpen();
+ void internalWrite();
+ void internalClose(bool emitSignal=true);
+ void internalReopen();
+ void internalEndOfFile();
+ void internalFlushAndSeekToZero();
+};
+
+#endif // WRITETHREAD_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/copyEngine-collision-and-error.cpp b/plugins/CopyEngine/Ultracopier-0.3/copyEngine-collision-and-error.cpp
new file mode 100644
index 0000000..81a75bd
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/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);
+ 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);
+ 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);
+ 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/CopyEngine/Ultracopier-0.3/copyEngine.cpp b/plugins/CopyEngine/Ultracopier-0.3/copyEngine.cpp
new file mode 100644
index 0000000..362d332
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/copyEngine.cpp
@@ -0,0 +1,492 @@
+/** \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"
+
+/// \todo do pushed or instant mount point (setDrive, ...)
+/// \todo semaphore to prevent dual mkpath
+/// \todo repair the mkpath, to use mkpath class before file transfer to have the folder
+/** \todo when overwrite with large inode operation, it not start specificly the first in the list
+ When that's is finish, send start file at real transfer start, not inode operation start **/
+
+namespace Ui {
+ class options;
+}
+
+copyEngine::copyEngine(FacilityInterface * facilityInterface) :
+ ui(new Ui::options())
+{
+ listThread=new ListThread(facilityInterface);
+ qRegisterMetaType<TransferThread *>("TransferThread *");
+ qRegisterMetaType<scanFileOrFolder *>("scanFileOrFolder *");
+ qRegisterMetaType<EngineActionInProgress>("EngineActionInProgress");
+ qRegisterMetaType<DebugLevel>("DebugLevel");
+ qRegisterMetaType<FileExistsAction>("FileExistsAction");
+ qRegisterMetaType<FolderExistsAction>("FolderExistsAction");
+
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ debugDialogWindow.show();
+ #endif
+ connect(listThread,SIGNAL(actionInProgess(EngineActionInProgress)), this,SIGNAL(actionInProgess(EngineActionInProgress)), Qt::QueuedConnection);
+ connect(listThread,SIGNAL(newFolderListing(QString)), this,SIGNAL(newFolderListing(QString)), Qt::QueuedConnection);
+ connect(listThread,SIGNAL(newCollisionAction(QString)), this,SIGNAL(newCollisionAction(QString)), Qt::QueuedConnection);
+ connect(listThread,SIGNAL(newErrorAction(QString)), this,SIGNAL(newErrorAction(QString)), Qt::QueuedConnection);
+ connect(listThread,SIGNAL(isInPause(bool)), this,SIGNAL(isInPause(bool)), Qt::QueuedConnection);
+ connect(listThread,SIGNAL(cancelAll()), this,SIGNAL(cancelAll()), Qt::QueuedConnection);
+ connect(listThread,SIGNAL(error(QString,quint64,QDateTime,QString)), this,SIGNAL(error(QString,quint64,QDateTime,QString)), Qt::QueuedConnection);
+ connect(listThread,SIGNAL(rmPath(QString)), this,SIGNAL(rmPath(QString)), Qt::QueuedConnection);
+ connect(listThread,SIGNAL(mkPath(QString)), this,SIGNAL(mkPath(QString)), Qt::QueuedConnection);
+ connect(listThread,SIGNAL(newActionOnList(QList<returnActionOnCopyList>)), this,SIGNAL(newActionOnList(QList<returnActionOnCopyList>)), Qt::QueuedConnection);
+ connect(listThread,SIGNAL(pushFileProgression(QList<ProgressionItem>)), this,SIGNAL(pushFileProgression(QList<ProgressionItem>)), Qt::QueuedConnection);
+ connect(listThread,SIGNAL(pushGeneralProgression(quint64,quint64)), this,SIGNAL(pushGeneralProgression(quint64,quint64)), Qt::QueuedConnection);
+ connect(listThread,SIGNAL(syncReady()), this,SIGNAL(syncReady()), Qt::QueuedConnection);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ connect(listThread,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), Qt::QueuedConnection);
+ #endif
+
+ connect(listThread,SIGNAL(send_fileAlreadyExists(QFileInfo,QFileInfo,bool,TransferThread *)), this,SLOT(fileAlreadyExists(QFileInfo,QFileInfo,bool,TransferThread *)), Qt::QueuedConnection);
+ connect(listThread,SIGNAL(send_errorOnFile(QFileInfo,QString,TransferThread *)), this,SLOT(errorOnFile(QFileInfo,QString,TransferThread *)), Qt::QueuedConnection);
+ connect(listThread,SIGNAL(send_folderAlreadyExists(QFileInfo,QFileInfo,bool,scanFileOrFolder *)), this,SLOT(folderAlreadyExists(QFileInfo,QFileInfo,bool,scanFileOrFolder *)), Qt::QueuedConnection);
+ connect(listThread,SIGNAL(send_errorOnFolder(QFileInfo,QString,scanFileOrFolder *)), this,SLOT(errorOnFolder(QFileInfo,QString,scanFileOrFolder *)), Qt::QueuedConnection);
+ connect(listThread,SIGNAL(updateTheDebugInfo(QStringList,QStringList,int)), this,SLOT(updateTheDebugInfo(QStringList,QStringList,int)), Qt::QueuedConnection);
+ connect(listThread,SIGNAL(errorTransferList(QString)), this,SLOT(errorTransferList(QString)), Qt::QueuedConnection);
+ connect(listThread,SIGNAL(warningTransferList(QString)), this,SLOT(warningTransferList(QString)), Qt::QueuedConnection);
+ connect(listThread,SIGNAL(mkPathErrorOnFolder(QFileInfo,QString)), this,SLOT(mkPathErrorOnFolder(QFileInfo,QString)), Qt::QueuedConnection);
+ connect(listThread,SIGNAL(rmPathErrorOnFolder(QFileInfo,QString)), this,SLOT(rmPathErrorOnFolder(QFileInfo,QString)), Qt::QueuedConnection);
+
+ connect(this,SIGNAL(signal_pause()), listThread,SLOT(pause()), Qt::QueuedConnection);
+ connect(this,SIGNAL(signal_resume()), listThread,SLOT(resume()), Qt::QueuedConnection);
+ connect(this,SIGNAL(signal_skip(quint64)), listThread,SLOT(skip(quint64)), Qt::QueuedConnection);
+ connect(this,SIGNAL(signal_setCollisionAction(FileExistsAction)), listThread,SLOT(setAlwaysFileExistsAction(FileExistsAction)), Qt::QueuedConnection);
+ connect(this,SIGNAL(signal_setFolderColision(FolderExistsAction)), listThread,SLOT(setFolderColision(FolderExistsAction)), Qt::QueuedConnection);
+ connect(this,SIGNAL(signal_removeItems(QList<int>)), listThread,SLOT(removeItems(QList<int>)), Qt::QueuedConnection);
+ connect(this,SIGNAL(signal_moveItemsOnTop(QList<int>)), listThread,SLOT(moveItemsOnTop(QList<int>)), Qt::QueuedConnection);
+ connect(this,SIGNAL(signal_moveItemsUp(QList<int>)), listThread,SLOT(moveItemsUp(QList<int>)), Qt::QueuedConnection);
+ connect(this,SIGNAL(signal_moveItemsDown(QList<int>)), listThread,SLOT(moveItemsDown(QList<int>)), Qt::QueuedConnection);
+ connect(this,SIGNAL(signal_moveItemsOnBottom(QList<int>)), listThread,SLOT(moveItemsOnBottom(QList<int>)), Qt::QueuedConnection);
+ connect(this,SIGNAL(signal_exportTransferList(QString)), listThread,SLOT(exportTransferList(QString)), Qt::QueuedConnection);
+ connect(this,SIGNAL(signal_importTransferList(QString)), listThread,SLOT(importTransferList(QString)), Qt::QueuedConnection);
+
+ connect(this,SIGNAL(queryOneNewDialog()),SLOT(showOneNewDialog()),Qt::QueuedConnection);
+ interface = NULL;
+ tempWidget = NULL;
+ uiIsInstalled = false;
+ dialogIsOpen = false;
+ maxSpeed = 0;
+ alwaysDoThisActionForFileExists = FileExists_NotSet;
+ alwaysDoThisActionForFileError = FileError_NotSet;
+ checkDestinationFolderExists = false;
+ stopIt = false;
+ size_for_speed = 0;
+}
+
+copyEngine::~copyEngine()
+{
+ stopIt=true;
+ delete listThread;
+ delete ui;
+}
+
+#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->checkBoxDestinationFolderExists, SIGNAL(toggled(bool)), this, SLOT(setCheckDestinationFolderExists(bool)));
+ uiIsInstalled=true;
+ setRightTransfer(doRightTransfer);
+ setKeepDate(keepDate);
+ setSpeedLimitation(maxSpeed);
+ setBlockSize(blockSize);
+ setAutoStart(autoStart);
+ setCheckDestinationFolderExists(checkDestinationFolderExists);
+ return true;
+}
+
+//to have interface widget to do modal dialog
+void copyEngine::setInterfacePointer(QWidget * interface)
+{
+ this->interface=interface;
+}
+
+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)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ QString destination = QFileDialog::getExistingDirectory(interface,tr("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)
+{
+ return listThread->newCopy(sources,destination);
+}
+
+bool copyEngine::newMove(const QStringList &sources)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ QString destination = QFileDialog::getExistingDirectory(interface,tr("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)
+{
+ return listThread->newMove(sources,destination);
+}
+
+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=tr("Ask");tempItem.second="ask";list << tempItem;
+ tempItem.first=tr("Skip");tempItem.second="skip";list << tempItem;
+ tempItem.first=tr("Overwrite");tempItem.second="overwrite";list << tempItem;
+ tempItem.first=tr("Overwrite if newer");tempItem.second="overwriteIfNewer";list << tempItem;
+ tempItem.first=tr("Overwrite if the last modification dates are different");tempItem.second="overwriteIfNotSameModificationDate";list << tempItem;
+ tempItem.first=tr("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=tr("Ask");tempItem.second="ask";list << tempItem;
+ tempItem.first=tr("Skip");tempItem.second="skip";list << tempItem;
+ tempItem.first=tr("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();
+}
+
+bool copyEngine::userAddFolder(const CopyMode &mode)
+{
+ QString source = QFileDialog::getExistingDirectory(interface,tr("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,
+ tr("Select one or more files to open"),
+ "",
+ tr("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;
+ listThread->cancel();
+}
+
+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);
+}
+
+void copyEngine::exportTransferList()
+{
+ QString fileName = QFileDialog::getSaveFileName(NULL,tr("Save transfer list"),"transfer-list.lst",tr("Transfer list")+" (*.lst)");
+ if(fileName.isEmpty())
+ return;
+ emit signal_exportTransferList(fileName);
+}
+
+void copyEngine::importTransferList()
+{
+ QString fileName = QFileDialog::getOpenFileName(NULL,tr("Open transfer list"),"transfer-list.lst",tr("Transfer list")+" (*.lst)");
+ if(fileName.isEmpty())
+ return;
+ emit signal_importTransferList(fileName);
+}
+
+void copyEngine::warningTransferList(const QString &warning)
+{
+ QMessageBox::warning(interface,tr("Error"),warning);
+}
+
+void copyEngine::errorTransferList(const QString &error)
+{
+ QMessageBox::critical(interface,tr("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);
+}
+
+//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;
+ }
+}
diff --git a/plugins/CopyEngine/Ultracopier-0.3/copyEngine.h b/plugins/CopyEngine/Ultracopier-0.3/copyEngine.h
new file mode 100644
index 0000000..c903b12
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/copyEngine.h
@@ -0,0 +1,293 @@
+/** \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"
+
+#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 * facilityInterface);
+ ~copyEngine();
+private:
+ ListThread *listThread;
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+ debugDialog debugDialogWindow;
+ #endif
+ QWidget * tempWidget;
+ Ui::options * ui;
+ bool uiIsInstalled;
+ QWidget * interface;
+ int maxSpeed;
+ bool doRightTransfer;
+ bool keepDate;
+ int blockSize;
+ bool autoStart;
+ 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;
+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();
+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 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();
+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 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 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(QString path);
+ void newCollisionAction(QString action);
+ void newErrorAction(QString action);
+ void isInPause(bool);
+
+ //action on the copy
+ void signal_pause();
+ void signal_resume();
+ void signal_skip(quint64 id);
+
+ //edit the transfer list
+ void signal_removeItems(QList<int> ids);
+ void signal_moveItemsOnTop(QList<int> ids);
+ void signal_moveItemsUp(QList<int> ids);
+ void signal_moveItemsDown(QList<int> ids);
+ void signal_moveItemsOnBottom(QList<int> ids);
+ void signal_exportTransferList(QString fileName);
+ void signal_importTransferList(QString fileName);
+
+ //action
+ void signal_setCollisionAction(FileExistsAction alwaysDoThisActionForFileExists);
+ void signal_setComboBoxFolderColision(FolderExistsAction action);
+ void signal_setFolderColision(FolderExistsAction action);
+
+ void cancelAll();
+
+ //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);
+ #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();
+};
+
+#endif // COPY_ENGINE_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/copyEngine.pro b/plugins/CopyEngine/Ultracopier-0.3/copyEngine.pro
new file mode 100644
index 0000000..0f1cb68
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/copyEngine.pro
@@ -0,0 +1,68 @@
+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
+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
+TARGET = $$qtLibraryTarget(copyEngine)
+TRANSLATIONS += Languages/fr/translation.ts \
+ Languages/ar/translation.ts \
+ Languages/ch/translation.ts \
+ Languages/es/translation.ts \
+ Languages/de/translation.ts \
+ Languages/el/translation.ts \
+ Languages/it/translation.ts \
+ Languages/jp/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
+
+FORMS += \
+ options.ui \
+ fileErrorDialog.ui \
+ fileExistsDialog.ui \
+ fileIsSameDialog.ui \
+ debugDialog.ui \
+ folderExistsDialog.ui
+
+OTHER_FILES += informations.xml
diff --git a/plugins/CopyEngine/Ultracopier-0.3/debugDialog.cpp b/plugins/CopyEngine/Ultracopier-0.3/debugDialog.cpp
new file mode 100644
index 0000000..a03aec0
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/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/CopyEngine/Ultracopier-0.3/debugDialog.h b/plugins/CopyEngine/Ultracopier-0.3/debugDialog.h
new file mode 100644
index 0000000..3d48857
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/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/CopyEngine/Ultracopier-0.3/debugDialog.ui b/plugins/CopyEngine/Ultracopier-0.3/debugDialog.ui
new file mode 100644
index 0000000..0df03be
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/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/CopyEngine/Ultracopier-0.3/documentation.dox b/plugins/CopyEngine/Ultracopier-0.3/documentation.dox
new file mode 100755
index 0000000..c91674b
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/documentation.dox
@@ -0,0 +1,41 @@
+/* -*- 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 default copy engine for Ultracopier 0.3. Support file/folder, copy/move, ...\n
+ 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/CopyEngine/Ultracopier-0.3/factory.cpp b/plugins/CopyEngine/Ultracopier-0.3/factory.cpp
new file mode 100644
index 0000000..be53272
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/factory.cpp
@@ -0,0 +1,239 @@
+/** \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"
+
+/// \todo connect in global options the change
+
+Factory::Factory() :
+ ui(new Ui::options())
+{
+ tempWidget=new QWidget();
+ ui->setupUi(tempWidget);
+ errorFound=false;
+ optionsEngine=NULL;
+ #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)));
+}
+
+Factory::~Factory()
+{
+ delete ui;
+}
+
+PluginInterface_CopyEngine * Factory::getInstance()
+{
+ copyEngine *realObject=new copyEngine(facilityEngine);
+ realObject->setDrive(mountSysPoint);
+ PluginInterface_CopyEngine * newTransferEngine=realObject;
+ connect(newTransferEngine,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)));
+ 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->on_comboBoxFolderColision_currentIndexChanged(ui->comboBoxFolderColision->currentIndex());
+ realObject->on_comboBoxFolderError_currentIndexChanged(ui->comboBoxFolderError->currentIndex());
+ realObject->setCheckDestinationFolderExists( optionsEngine->getOptionValue("checkDestinationFolder").toBool());
+ 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("folderError"),QVariant(0)));
+ KeysList.append(qMakePair(QString("folderColision"),QVariant(0)));
+ KeysList.append(qMakePair(QString("checkDestinationFolder"),QVariant(true)));
+ 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").toInt());
+ ui->autoStart->setChecked(optionsEngine->getOptionValue("autoStart").toBool());
+ ui->comboBoxFolderError->setCurrentIndex(optionsEngine->getOptionValue("folderError").toInt());
+ ui->comboBoxFolderColision->setCurrentIndex(optionsEngine->getOptionValue("folderColision").toInt());
+ ui->checkBoxDestinationFolderExists->setChecked(optionsEngine->getOptionValue("checkDestinationFolder").toBool());
+ }
+}
+
+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::newLanguageLoaded()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, retranslate the widget options");
+ ui->retranslateUi(tempWidget);
+ emit reloadLanguage();
+}
+
+Q_EXPORT_PLUGIN2(copyEngine, Factory);
diff --git a/plugins/CopyEngine/Ultracopier-0.3/factory.h b/plugins/CopyEngine/Ultracopier-0.3/factory.h
new file mode 100644
index 0000000..bf41a27
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/factory.h
@@ -0,0 +1,81 @@
+/** \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"
+
+#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;
+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);
+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/CopyEngine/Ultracopier-0.3/fileErrorDialog.cpp b/plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.cpp
new file mode 100644
index 0000000..8f8b9a5
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.cpp
@@ -0,0 +1,78 @@
+#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());
+ 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(!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/CopyEngine/Ultracopier-0.3/fileErrorDialog.h b/plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.h
new file mode 100644
index 0000000..b14fe87
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/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/CopyEngine/Ultracopier-0.3/fileErrorDialog.ui b/plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.ui
new file mode 100644
index 0000000..c5027e7
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/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/CopyEngine/Ultracopier-0.3/fileExistsDialog.cpp b/plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.cpp
new file mode 100644
index 0000000..78c3bd0
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.cpp
@@ -0,0 +1,176 @@
+#include "fileExistsDialog.h"
+#include "ui_fileExistsDialog.h"
+
+#include <QDebug>
+
+fileExistsDialog::fileExistsDialog(QWidget *parent,QFileInfo source,QFileInfo destination) :
+ 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);
+ }
+}
+
+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;
+ if(fileName.contains(QRegExp("^(.*)(\\.[a-z0-9]+)$")))
+ {
+ suffix=fileName;
+ suffix.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\2");
+ fileName.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\1");
+ }
+ do
+ {
+ if(!fileName.startsWith(tr("Copy of ")))
+ fileName=tr("Copy of ")+fileName;
+ else
+ {
+ if(fileName.contains(QRegExp("_[0-9]+$")))
+ {
+ QString number=fileName;
+ number.replace(QRegExp("^.*_([0-9]+)$"),"\\1");
+ int num=number.toInt()+1;
+ fileName.remove(QRegExp("[0-9]+$"));
+ fileName+=QString::number(num);
+ }
+ else
+ fileName+="_2";
+ }
+ destination=absolutePath+QDir::separator()+fileName+suffix;
+ destinationInfo.setFile(destination);
+ }
+ while(destinationInfo.exists());
+ ui->lineEditNewName->setText(fileName+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/CopyEngine/Ultracopier-0.3/fileExistsDialog.h b/plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.h
new file mode 100644
index 0000000..1a5817d
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.h
@@ -0,0 +1,56 @@
+/** \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);
+ ~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;
+};
+
+#endif // FILEEXISTSDIALOG_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.ui b/plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.ui
new file mode 100644
index 0000000..a37945a
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/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/CopyEngine/Ultracopier-0.3/fileIsSameDialog.cpp b/plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.cpp
new file mode 100644
index 0000000..a618f4c
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.cpp
@@ -0,0 +1,143 @@
+#include "fileIsSameDialog.h"
+#include "ui_fileIsSameDialog.h"
+
+#include <QDebug>
+
+fileIsSameDialog::fileIsSameDialog(QWidget *parent,QFileInfo fileInfo) :
+ 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);
+ }
+}
+
+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;
+ if(fileName.contains(QRegExp("^(.*)(\\.[a-z0-9]+)$")))
+ {
+ suffix=fileName;
+ suffix.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\2");
+ fileName.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\1");
+ }
+ do
+ {
+ if(!fileName.startsWith(tr("Copy of ")))
+ fileName=tr("Copy of ")+fileName;
+ else
+ {
+ if(fileName.contains(QRegExp("_[0-9]+$")))
+ {
+ QString number=fileName;
+ number.replace(QRegExp("^.*_([0-9]+)$"),"\\1");
+ int num=number.toInt()+1;
+ fileName.remove(QRegExp("[0-9]+$"));
+ fileName+=QString::number(num);
+ }
+ else
+ fileName+="_2";
+ }
+ destination=absolutePath+QDir::separator()+fileName+suffix;
+ destinationInfo.setFile(destination);
+ }
+ while(destinationInfo.exists());
+ ui->lineEditNewName->setText(fileName+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/CopyEngine/Ultracopier-0.3/fileIsSameDialog.h b/plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.h
new file mode 100644
index 0000000..afd0e04
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.h
@@ -0,0 +1,53 @@
+/** \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);
+ ~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;
+};
+
+#endif // FILEISSAMEDIALOG_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.ui b/plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.ui
new file mode 100644
index 0000000..673ba26
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/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/CopyEngine/Ultracopier-0.3/folderExistsDialog.cpp b/plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.cpp
new file mode 100644
index 0000000..054c293
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.cpp
@@ -0,0 +1,96 @@
+#include "folderExistsDialog.h"
+#include "ui_folderExistsDialog.h"
+
+#include <QMessageBox>
+
+folderExistsDialog::folderExistsDialog(QWidget *parent,QFileInfo source,bool isSame,QFileInfo destination) :
+ QDialog(parent),
+ ui(new Ui::folderExistsDialog)
+{
+ ui->setupUi(this);
+ action=FolderExists_Cancel;
+ oldName=source.fileName();
+ 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
+ {
+ ui->label_message->hide();
+ ui->label_content_destination_modified->setText(destination.lastModified().toString());
+ ui->label_content_destination_folder_name->setText(destination.fileName());
+ }
+}
+
+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()
+{
+ ui->lineEditNewName->setText(tr("Copy of ")+oldName);
+}
+
+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/CopyEngine/Ultracopier-0.3/folderExistsDialog.h b/plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.h
new file mode 100644
index 0000000..8d1bdfd
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.h
@@ -0,0 +1,50 @@
+/** \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 "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);
+ ~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;
+};
+
+#endif // FOLDERISSAMEDIALOG_H
diff --git a/plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.ui b/plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.ui
new file mode 100644
index 0000000..c4c4d5e
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/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/CopyEngine/Ultracopier-0.3/informations.xml b/plugins/CopyEngine/Ultracopier-0.3/informations.xml
new file mode 100644
index 0000000..077a1c9
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/informations.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Copy engine of Ultracopier 0.3]]></title><!-- english is required -->
+ <title xml:lang="fr"><![CDATA[Moteur de copie d'ultracopier 0.3]]></title>
+ <!-- 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>linux-x86_64-pc</architecture>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Copy engine of Ultracopier 0.3, do in Qt for all platform, and copy by stream]]></description>
+ <description xml:lang="fr"><![CDATA[Moteur de copie d'ultracopier 0.3, fait en Qt pour toutes les plateformes, et copie par stream]]></description>
+ <!-- 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>
+ <!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. -->
+ <name>Ultracopier-0.3</name>
+ <!-- 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
+ ]]></dependencies>
+</package> \ No newline at end of file
diff --git a/plugins/CopyEngine/Ultracopier-0.3/options.ui b/plugins/CopyEngine/Ultracopier-0.3/options.ui
new file mode 100644
index 0000000..77bf15a
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/options.ui
@@ -0,0 +1,149 @@
+<?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>306</width>
+ <height>184</height>
+ </rect>
+ </property>
+ <layout class="QFormLayout" name="formLayout">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::ExpandingFieldsGrow</enum>
+ </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="1">
+ <widget class="QCheckBox" name="doRightTransfer">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </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="1">
+ <widget class="QCheckBox" name="keepDate">
+ <property name="text">
+ <string/>
+ </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="2" column="1">
+ <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">
+ <widget class="QLabel" name="label_5">
+ <property name="text">
+ <string>Auto start the transfer</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QCheckBox" name="autoStart">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </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="1">
+ <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="1">
+ <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">
+ <widget class="QLabel" name="label_8">
+ <property name="text">
+ <string>Check if destination folder exists</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="1">
+ <widget class="QCheckBox" name="checkBoxDestinationFolderExists">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/plugins/CopyEngine/Ultracopier-0.3/scanFileOrFolder.cpp b/plugins/CopyEngine/Ultracopier-0.3/scanFileOrFolder.cpp
new file mode 100644
index 0000000..4d13fab
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/scanFileOrFolder.cpp
@@ -0,0 +1,235 @@
+#include "scanFileOrFolder.h"
+
+#include <QMessageBox>
+
+scanFileOrFolder::scanFileOrFolder(CopyMode mode)
+{
+ 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=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+")");
+}
+
+//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=="")
+ {
+ /// \todo use facility here
+ if(destinationSuffixPath.contains(folder_isolation))
+ {
+ prefix=destinationSuffixPath;
+ suffix=destinationSuffixPath;
+ prefix.replace(folder_isolation,"\\1");
+ suffix.replace(folder_isolation,"\\2");
+ 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);
+ destinationSuffixPath = prefix+tr("Copy of ")+suffix;
+ }
+ else
+ destinationSuffixPath = tr("Copy of ")+"Unknow";
+ }
+ 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=="")
+ {
+ /// \todo use facility here
+ if(destinationSuffixPath.contains(folder_isolation))
+ {
+ prefix=destinationSuffixPath;
+ suffix=destinationSuffixPath;
+ prefix.replace(folder_isolation,"\\1");
+ suffix.replace(folder_isolation,"\\2");
+ 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);
+ destinationSuffixPath = prefix+tr("Copy of ")+suffix;
+ }
+ else
+ destinationSuffixPath = tr("Copy of ")+"Unknow";
+ }
+ 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);//possible wait time here
+ int sizeEntryList=entryList.size();
+ emit newFolderListing(newSource);
+ if(sizeEntryList==0)
+ emit addToMkPath(finalDest);
+ for (int index=0;index<sizeEntryList;++index)
+ {
+ if(stopIt)
+ return;
+ QFileInfo fileInfo=entryList.at(index);
+ 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
+ emit fileTransfer(fileInfo.absoluteFilePath(),finalDest+fileInfo.fileName(),mode);
+ }
+ 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;
+}
diff --git a/plugins/CopyEngine/Ultracopier-0.3/scanFileOrFolder.h b/plugins/CopyEngine/Ultracopier-0.3/scanFileOrFolder.h
new file mode 100644
index 0000000..c7ae7fe
--- /dev/null
+++ b/plugins/CopyEngine/Ultracopier-0.3/scanFileOrFolder.h
@@ -0,0 +1,69 @@
+/** \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 "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);
+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);
+public slots:
+ void addToList(const QStringList& sources,const QString& destination);
+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;
+};
+
+#endif // SCANFILEORFOLDER_H
diff --git a/plugins/Languages/ar/flag.png b/plugins/Languages/ar/flag.png
new file mode 100644
index 0000000..64fe557
--- /dev/null
+++ b/plugins/Languages/ar/flag.png
Binary files differ
diff --git a/plugins/Languages/ar/informations.xml b/plugins/Languages/ar/informations.xml
new file mode 100644
index 0000000..199836b
--- /dev/null
+++ b/plugins/Languages/ar/informations.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Translation of Ultracopier to arabic]]></title><!-- english is required -->
+ <!-- What kind of plugin this is -->
+ <category>Languages</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-ar.first-world.info/]]></website><!-- not required -->
+ <!-- the date-time format should be in timestamps format -->
+ <pubDate>1287496800</pubDate>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to arabic. Done for version 0.3.0.0. For more details see the web site.]]></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.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>ar</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
+ ]]></dependencies>
+ <!-- Additional information that is specific to the category (in this case Language). -->
+ <categorySpecific>
+ <!-- The full name in the language we're translating to. -->
+ <fullName><![CDATA[العربية]]></fullName>
+ <!-- Short name, language name in English -->
+ <shortName><![CDATA[Arabic]]></shortName>
+ <!-- Short name, language ISO code -->
+ <shortName mainCode="true"><![CDATA[ar]]></shortName>
+ <!-- Short name, language ISO country code -->
+ <shortName><![CDATA[ar_AR]]></shortName>
+ </categorySpecific>
+</package> \ No newline at end of file
diff --git a/plugins/Languages/ar/translation.ts b/plugins/Languages/ar/translation.ts
new file mode 100644
index 0000000..f9dff29
--- /dev/null
+++ b/plugins/Languages/ar/translation.ts
@@ -0,0 +1,865 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>CliParser</name>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineManager</name>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <source>Cannot find any copy engine with motions support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <source>Cannot find any compatible engine!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <source>This copy engine does not support motions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Cannot find any engine with this name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Core</name>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <source>Unable to load the interface, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Unable to load the copy engine, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Transfer mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FacilityEngine</name>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="12"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="13"/>
+ <source>Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="14"/>
+ <source>Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="15"/>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="16"/>
+ <source>Resume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="17"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="18"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="20"/>
+ <source>s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="21"/>
+ <source>Too big</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="22"/>
+ <source>B</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="23"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <source>GB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <source>TB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <source>PB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <source>EB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <source>ZB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <source>YB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HelpDialog</name>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+This version is compiled as version: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>For more informations see the website &lt;a href=&quot;%1&quot; rel=&quot;%1&quot; title=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Platform: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About Qt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Do a crash</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="69"/>
+ <source>For http://portableapps.com/</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="71"/>
+ <source>Portable version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="74"/>
+ <source>Normal version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="79"/>
+ <source>http://ultracopier.first-world.info/</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LocalListener</name>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Timeout while recomposing data from connected clients</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LogThread</name>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Unable to open file to keep the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OptionDialog</name>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugins</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Autodetect the system language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Catch the copy/move as default:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Load at the session loading:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Add</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine by order of preference:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Unable to load the themes plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No option for this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No plugin loaded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %source%, %size%, %destination%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the log file into:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the transfers:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the errors:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the folder operations:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="158"/>
+ <location filename="../../../OptionDialog.cpp" line="159"/>
+ <location filename="../../../OptionDialog.cpp" line="254"/>
+ <location filename="../../../OptionDialog.cpp" line="255"/>
+ <source>Disabled because you have any SessionLoader plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="160"/>
+ <source>Do nothing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="161"/>
+ <source>Ask source as folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="162"/>
+ <source>Ask sources as files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="163"/>
+ <source>Never</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="164"/>
+ <source>When source is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="165"/>
+ <source>When destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="166"/>
+ <source>When source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="167"/>
+ <source>When source or destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="168"/>
+ <source>Always</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="680"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Synchronized log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>When manual open:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Group window when:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginInformation</name>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>About this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Category:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Author:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Date:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Description:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="39"/>
+ <source>CopyEngine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="42"/>
+ <source>Languages</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="45"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="48"/>
+ <source>PluginLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="51"/>
+ <source>SessionLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="54"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="68"/>
+ <source>Information about %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Website:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Title:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginsManager</name>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="206"/>
+ <source>informations.xml is not accessible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="212"/>
+ <source>informations.xml not found into the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="470"/>
+ <source>Dependencies part is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="489"/>
+ <source>Dependencies %1 are not satisfied, for plugin: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Remove %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error while the removing plugin, please check right of remove on the folder:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="238"/>
+ <source>%1, parse error at line %2, column %3: %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="246"/>
+ <source>&quot;package&quot; root tag not found for the xml file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="322"/>
+ <source>Duplicated plugin found, already loaded!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="380"/>
+ <source>English text missing into the informations.xml for the tag: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="388"/>
+ <source>Tag not found: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Are you sure about removing &quot;%1&quot; in version %2?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Previous import is in progress...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Open Ultracopier plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Ultracopier plugin (*.urc)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <source>Unable to open the plugin: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Unable to load the plugin content, please check it: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <source>Unable to create a folder to install the plugin:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <source>Unable to create a file to install the plugin:
+%1
+since:%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <source>Folder with same name is present, skip the plugin installation:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <source>Unable to load the plugin content, please check it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QXzDecode</name>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="33"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="88"/>
+ <source>Memory allocation failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="59"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="77"/>
+ <source>Write error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="92"/>
+ <source>Memory usage limit reached</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="96"/>
+ <source>Not a .xz file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="100"/>
+ <source>Unsupported options in the .xz headers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
+ <source>The file is corrupted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="109"/>
+ <source>Bug!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="119"/>
+ <source>The input data is too short</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SystrayIcon</name>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="88"/>
+ <source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="94"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="105"/>
+ <source>Searching informations...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="120"/>
+ <source>Not catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="125"/>
+ <source>Semi catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="130"/>
+ <source>Catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Action on the systray icon is unknown!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="285"/>
+ <source>&amp;About/Debug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="287"/>
+ <source>&amp;About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="289"/>
+ <source>&amp;Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="290"/>
+ <source>&amp;Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="291"/>
+ <source>A&amp;dd copy/moving</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="336"/>
+ <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <source>Add &amp;copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="342"/>
+ <location filename="../../../SystrayIcon.cpp" line="364"/>
+ <source>Add &amp;transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="346"/>
+ <location filename="../../../SystrayIcon.cpp" line="368"/>
+ <source>Add &amp;move</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Languages/de/flag.png b/plugins/Languages/de/flag.png
new file mode 100644
index 0000000..7707c43
--- /dev/null
+++ b/plugins/Languages/de/flag.png
Binary files differ
diff --git a/plugins/Languages/de/informations.xml b/plugins/Languages/de/informations.xml
new file mode 100644
index 0000000..3c30905
--- /dev/null
+++ b/plugins/Languages/de/informations.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Translation of Ultracopier to german]]></title><!-- english is required -->
+ <!-- What kind of plugin this is -->
+ <category>Languages</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 -->
+ <!-- the date-time format should be in timestamps format -->
+ <pubDate>1287496800</pubDate>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to german. Done for version 0.3.0.0. For more details see the web site.]]></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.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>de</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
+ ]]></dependencies>
+ <!-- Additional information that is specific to the category (in this case Language). -->
+ <categorySpecific>
+ <!-- The full name in the language we're translating to. -->
+ <fullName><![CDATA[Deutsch]]></fullName>
+ <!-- Short name, language name in English -->
+ <shortName><![CDATA[German]]></shortName>
+ <!-- Short name, language ISO code -->
+ <shortName mainCode="true"><![CDATA[de]]></shortName>
+ <!-- Short name, language ISO country code -->
+ <shortName><![CDATA[de_DE]]></shortName>
+ </categorySpecific>
+</package> \ No newline at end of file
diff --git a/plugins/Languages/de/translation.ts b/plugins/Languages/de/translation.ts
new file mode 100644
index 0000000..f9dff29
--- /dev/null
+++ b/plugins/Languages/de/translation.ts
@@ -0,0 +1,865 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>CliParser</name>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineManager</name>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <source>Cannot find any copy engine with motions support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <source>Cannot find any compatible engine!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <source>This copy engine does not support motions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Cannot find any engine with this name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Core</name>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <source>Unable to load the interface, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Unable to load the copy engine, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Transfer mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FacilityEngine</name>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="12"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="13"/>
+ <source>Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="14"/>
+ <source>Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="15"/>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="16"/>
+ <source>Resume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="17"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="18"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="20"/>
+ <source>s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="21"/>
+ <source>Too big</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="22"/>
+ <source>B</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="23"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <source>GB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <source>TB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <source>PB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <source>EB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <source>ZB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <source>YB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HelpDialog</name>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+This version is compiled as version: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>For more informations see the website &lt;a href=&quot;%1&quot; rel=&quot;%1&quot; title=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Platform: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About Qt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Do a crash</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="69"/>
+ <source>For http://portableapps.com/</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="71"/>
+ <source>Portable version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="74"/>
+ <source>Normal version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="79"/>
+ <source>http://ultracopier.first-world.info/</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LocalListener</name>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Timeout while recomposing data from connected clients</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LogThread</name>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Unable to open file to keep the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OptionDialog</name>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugins</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Autodetect the system language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Catch the copy/move as default:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Load at the session loading:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Add</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine by order of preference:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Unable to load the themes plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No option for this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No plugin loaded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %source%, %size%, %destination%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the log file into:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the transfers:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the errors:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the folder operations:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="158"/>
+ <location filename="../../../OptionDialog.cpp" line="159"/>
+ <location filename="../../../OptionDialog.cpp" line="254"/>
+ <location filename="../../../OptionDialog.cpp" line="255"/>
+ <source>Disabled because you have any SessionLoader plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="160"/>
+ <source>Do nothing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="161"/>
+ <source>Ask source as folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="162"/>
+ <source>Ask sources as files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="163"/>
+ <source>Never</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="164"/>
+ <source>When source is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="165"/>
+ <source>When destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="166"/>
+ <source>When source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="167"/>
+ <source>When source or destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="168"/>
+ <source>Always</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="680"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Synchronized log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>When manual open:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Group window when:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginInformation</name>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>About this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Category:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Author:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Date:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Description:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="39"/>
+ <source>CopyEngine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="42"/>
+ <source>Languages</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="45"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="48"/>
+ <source>PluginLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="51"/>
+ <source>SessionLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="54"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="68"/>
+ <source>Information about %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Website:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Title:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginsManager</name>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="206"/>
+ <source>informations.xml is not accessible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="212"/>
+ <source>informations.xml not found into the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="470"/>
+ <source>Dependencies part is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="489"/>
+ <source>Dependencies %1 are not satisfied, for plugin: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Remove %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error while the removing plugin, please check right of remove on the folder:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="238"/>
+ <source>%1, parse error at line %2, column %3: %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="246"/>
+ <source>&quot;package&quot; root tag not found for the xml file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="322"/>
+ <source>Duplicated plugin found, already loaded!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="380"/>
+ <source>English text missing into the informations.xml for the tag: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="388"/>
+ <source>Tag not found: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Are you sure about removing &quot;%1&quot; in version %2?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Previous import is in progress...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Open Ultracopier plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Ultracopier plugin (*.urc)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <source>Unable to open the plugin: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Unable to load the plugin content, please check it: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <source>Unable to create a folder to install the plugin:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <source>Unable to create a file to install the plugin:
+%1
+since:%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <source>Folder with same name is present, skip the plugin installation:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <source>Unable to load the plugin content, please check it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QXzDecode</name>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="33"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="88"/>
+ <source>Memory allocation failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="59"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="77"/>
+ <source>Write error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="92"/>
+ <source>Memory usage limit reached</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="96"/>
+ <source>Not a .xz file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="100"/>
+ <source>Unsupported options in the .xz headers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
+ <source>The file is corrupted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="109"/>
+ <source>Bug!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="119"/>
+ <source>The input data is too short</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SystrayIcon</name>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="88"/>
+ <source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="94"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="105"/>
+ <source>Searching informations...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="120"/>
+ <source>Not catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="125"/>
+ <source>Semi catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="130"/>
+ <source>Catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Action on the systray icon is unknown!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="285"/>
+ <source>&amp;About/Debug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="287"/>
+ <source>&amp;About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="289"/>
+ <source>&amp;Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="290"/>
+ <source>&amp;Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="291"/>
+ <source>A&amp;dd copy/moving</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="336"/>
+ <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <source>Add &amp;copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="342"/>
+ <location filename="../../../SystrayIcon.cpp" line="364"/>
+ <source>Add &amp;transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="346"/>
+ <location filename="../../../SystrayIcon.cpp" line="368"/>
+ <source>Add &amp;move</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Languages/el/flag.png b/plugins/Languages/el/flag.png
new file mode 100644
index 0000000..75e4705
--- /dev/null
+++ b/plugins/Languages/el/flag.png
Binary files differ
diff --git a/plugins/Languages/el/informations.xml b/plugins/Languages/el/informations.xml
new file mode 100644
index 0000000..dd8548c
--- /dev/null
+++ b/plugins/Languages/el/informations.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Translation of Ultracopier to greek]]></title><!-- english is required -->
+ <!-- What kind of plugin this is -->
+ <category>Languages</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 -->
+ <!-- the date-time format should be in timestamps format -->
+ <pubDate>1287496800</pubDate>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to greek. Done for version 0.3.0.0. For more details see the web site.]]></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.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>el</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
+ ]]></dependencies>
+ <!-- Additional information that is specific to the category (in this case Language). -->
+ <categorySpecific>
+ <!-- The full name in the language we're translating to. -->
+ <fullName><![CDATA[ελληνικά]]></fullName>
+ <!-- Short name, language name in English -->
+ <shortName><![CDATA[Greek]]></shortName>
+ <!-- Short name, language ISO code -->
+ <shortName mainCode="true"><![CDATA[el]]></shortName>
+ <!-- Short name, language ISO country code -->
+ <shortName><![CDATA[el_EL]]></shortName>
+ </categorySpecific>
+</package> \ No newline at end of file
diff --git a/plugins/Languages/el/translation.ts b/plugins/Languages/el/translation.ts
new file mode 100644
index 0000000..f9dff29
--- /dev/null
+++ b/plugins/Languages/el/translation.ts
@@ -0,0 +1,865 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>CliParser</name>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineManager</name>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <source>Cannot find any copy engine with motions support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <source>Cannot find any compatible engine!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <source>This copy engine does not support motions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Cannot find any engine with this name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Core</name>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <source>Unable to load the interface, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Unable to load the copy engine, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Transfer mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FacilityEngine</name>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="12"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="13"/>
+ <source>Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="14"/>
+ <source>Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="15"/>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="16"/>
+ <source>Resume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="17"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="18"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="20"/>
+ <source>s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="21"/>
+ <source>Too big</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="22"/>
+ <source>B</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="23"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <source>GB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <source>TB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <source>PB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <source>EB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <source>ZB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <source>YB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HelpDialog</name>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+This version is compiled as version: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>For more informations see the website &lt;a href=&quot;%1&quot; rel=&quot;%1&quot; title=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Platform: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About Qt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Do a crash</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="69"/>
+ <source>For http://portableapps.com/</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="71"/>
+ <source>Portable version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="74"/>
+ <source>Normal version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="79"/>
+ <source>http://ultracopier.first-world.info/</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LocalListener</name>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Timeout while recomposing data from connected clients</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LogThread</name>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Unable to open file to keep the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OptionDialog</name>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugins</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Autodetect the system language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Catch the copy/move as default:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Load at the session loading:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Add</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine by order of preference:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Unable to load the themes plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No option for this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No plugin loaded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %source%, %size%, %destination%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the log file into:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the transfers:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the errors:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the folder operations:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="158"/>
+ <location filename="../../../OptionDialog.cpp" line="159"/>
+ <location filename="../../../OptionDialog.cpp" line="254"/>
+ <location filename="../../../OptionDialog.cpp" line="255"/>
+ <source>Disabled because you have any SessionLoader plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="160"/>
+ <source>Do nothing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="161"/>
+ <source>Ask source as folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="162"/>
+ <source>Ask sources as files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="163"/>
+ <source>Never</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="164"/>
+ <source>When source is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="165"/>
+ <source>When destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="166"/>
+ <source>When source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="167"/>
+ <source>When source or destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="168"/>
+ <source>Always</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="680"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Synchronized log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>When manual open:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Group window when:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginInformation</name>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>About this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Category:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Author:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Date:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Description:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="39"/>
+ <source>CopyEngine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="42"/>
+ <source>Languages</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="45"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="48"/>
+ <source>PluginLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="51"/>
+ <source>SessionLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="54"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="68"/>
+ <source>Information about %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Website:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Title:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginsManager</name>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="206"/>
+ <source>informations.xml is not accessible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="212"/>
+ <source>informations.xml not found into the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="470"/>
+ <source>Dependencies part is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="489"/>
+ <source>Dependencies %1 are not satisfied, for plugin: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Remove %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error while the removing plugin, please check right of remove on the folder:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="238"/>
+ <source>%1, parse error at line %2, column %3: %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="246"/>
+ <source>&quot;package&quot; root tag not found for the xml file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="322"/>
+ <source>Duplicated plugin found, already loaded!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="380"/>
+ <source>English text missing into the informations.xml for the tag: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="388"/>
+ <source>Tag not found: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Are you sure about removing &quot;%1&quot; in version %2?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Previous import is in progress...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Open Ultracopier plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Ultracopier plugin (*.urc)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <source>Unable to open the plugin: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Unable to load the plugin content, please check it: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <source>Unable to create a folder to install the plugin:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <source>Unable to create a file to install the plugin:
+%1
+since:%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <source>Folder with same name is present, skip the plugin installation:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <source>Unable to load the plugin content, please check it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QXzDecode</name>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="33"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="88"/>
+ <source>Memory allocation failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="59"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="77"/>
+ <source>Write error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="92"/>
+ <source>Memory usage limit reached</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="96"/>
+ <source>Not a .xz file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="100"/>
+ <source>Unsupported options in the .xz headers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
+ <source>The file is corrupted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="109"/>
+ <source>Bug!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="119"/>
+ <source>The input data is too short</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SystrayIcon</name>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="88"/>
+ <source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="94"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="105"/>
+ <source>Searching informations...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="120"/>
+ <source>Not catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="125"/>
+ <source>Semi catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="130"/>
+ <source>Catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Action on the systray icon is unknown!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="285"/>
+ <source>&amp;About/Debug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="287"/>
+ <source>&amp;About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="289"/>
+ <source>&amp;Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="290"/>
+ <source>&amp;Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="291"/>
+ <source>A&amp;dd copy/moving</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="336"/>
+ <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <source>Add &amp;copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="342"/>
+ <location filename="../../../SystrayIcon.cpp" line="364"/>
+ <source>Add &amp;transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="346"/>
+ <location filename="../../../SystrayIcon.cpp" line="368"/>
+ <source>Add &amp;move</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Languages/es/flag.png b/plugins/Languages/es/flag.png
new file mode 100644
index 0000000..071c892
--- /dev/null
+++ b/plugins/Languages/es/flag.png
Binary files differ
diff --git a/plugins/Languages/es/informations.xml b/plugins/Languages/es/informations.xml
new file mode 100644
index 0000000..4bcce90
--- /dev/null
+++ b/plugins/Languages/es/informations.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Translation of Ultracopier to spanish]]></title><!-- english is required -->
+ <!-- What kind of plugin this is -->
+ <category>Languages</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-es.first-world.info/]]></website><!-- not required -->
+ <!-- the date-time format should be in timestamps format -->
+ <pubDate>1287496800</pubDate>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to spanish. Done for version 0.3.0.0. For more details see the web site.]]></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.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>es</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
+ ]]></dependencies>
+ <!-- Additional information that is specific to the category (in this case Language). -->
+ <categorySpecific>
+ <!-- The full name in the language we're translating to. -->
+ <fullName><![CDATA[Español]]></fullName>
+ <!-- Short name, language name in English -->
+ <shortName><![CDATA[Spanish]]></shortName>
+ <!-- Short name, language ISO code -->
+ <shortName mainCode="true"><![CDATA[es]]></shortName>
+ <!-- Short name, language ISO country code -->
+ <shortName><![CDATA[es_ES]]></shortName>
+ </categorySpecific>
+</package> \ No newline at end of file
diff --git a/plugins/Languages/es/translation.ts b/plugins/Languages/es/translation.ts
new file mode 100644
index 0000000..c4ab737
--- /dev/null
+++ b/plugins/Languages/es/translation.ts
@@ -0,0 +1,871 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="es">
+<context>
+ <name>CliParser</name>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Warning</source>
+ <translation>Advertencia</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineManager</name>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Warning</source>
+ <translation>Advertencia</translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <source>Cannot find any copy engine with motions support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <source>Cannot find any compatible engine!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <source>This copy engine does not support motions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Cannot find any engine with this name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Core</name>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Error</source>
+ <translation>Error</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <source>Unable to load the interface, copy aborted</source>
+ <translation>No se puede cargar la interfaz, copia abortados</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Unable to load the copy engine, copy aborted</source>
+ <translation>No se puede cargar el motor de copia, copia abortados</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Transfer mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FacilityEngine</name>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="12"/>
+ <source>Copy engine</source>
+ <translation>Motor de copia</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="13"/>
+ <source>Copy</source>
+ <translation>Copia</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="14"/>
+ <source>Move</source>
+ <translation>Movimiento</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="15"/>
+ <source>Pause</source>
+ <translation>Pausa</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="16"/>
+ <source>Resume</source>
+ <translation>Resumen</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="17"/>
+ <source>Skip</source>
+ <translation>Salto</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="18"/>
+ <source>Unlimited</source>
+ <translation>Ilimitado</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="20"/>
+ <source>s</source>
+ <translation>s</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="21"/>
+ <source>Too big</source>
+ <translation>Demasiado grande</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="22"/>
+ <source>B</source>
+ <translation>B</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="23"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <source>MB</source>
+ <translation>MB</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <source>GB</source>
+ <translation>GB</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <source>TB</source>
+ <translation>TB</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <source>PB</source>
+ <translation>PB</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <source>EB</source>
+ <translation>EB</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <source>ZB</source>
+ <translation>ZB</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <source>YB</source>
+ <translation>YB</translation>
+ </message>
+</context>
+<context>
+ <name>HelpDialog</name>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About ultracopier</source>
+ <translation>A propósito de ultracopier</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+This version is compiled as version: %1.</source>
+ <translation>Basado en Qt. Se proporcionan copiadora avanzada con más funciones avanzadas. Es bajo GPL3.
+Esta versión se compila como la versión: %1.</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>For more informations see the website &lt;a href=&quot;%1&quot; rel=&quot;%1&quot; title=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;</source>
+ <translation>Para más información consulte la página web &lt;a href=&quot;%1&quot; rel=&quot;%1&quot; title=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Platform: %1</source>
+ <translation>Plataforma: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About Qt</source>
+ <translation>Acerca de Qt</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Do a crash</source>
+ <translation>Hacer a crash</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Save bug report</source>
+ <translation>Guardar informe de error</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Close</source>
+ <translation>Cerrar</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="69"/>
+ <source>For http://portableapps.com/</source>
+ <translation>Para http://portableapps.com/</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="71"/>
+ <source>Portable version</source>
+ <translation>Version portable</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="74"/>
+ <source>Normal version</source>
+ <translation>Version normal</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="79"/>
+ <source>http://ultracopier.first-world.info/</source>
+ <translation>http://ultracopier-es.first-world.info/</translation>
+ </message>
+</context>
+<context>
+ <name>LocalListener</name>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Warning</source>
+ <translation>Advertencia</translation>
+ </message>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Timeout while recomposing data from connected clients</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LogThread</name>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Error</source>
+ <translation>Error</translation>
+ </message>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Unable to open file to keep the log file, error: %1</source>
+ <translation>No se puede abrir el archivo para mantener el archivo de registro, error: %1</translation>
+ </message>
+</context>
+<context>
+ <name>OptionDialog</name>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Options</source>
+ <translation>Opciones</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>General</source>
+ <translation>General</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugins</source>
+ <translation>Plugins</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine</source>
+ <translation>Motor de copia</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes</source>
+ <translation>Themas</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Log</source>
+ <translation>Log</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language:</source>
+ <translation>Idioma:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Autodetect the system language:</source>
+ <translation>Detectar automáticamente el idioma del sistema:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Catch the copy/move as default:</source>
+ <translation>Coger el copiar/mover de forma predeterminada:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Load at the session loading:</source>
+ <translation>Carga en la carga de la sesión:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Name</source>
+ <translation>Nombre</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Version</source>
+ <translation>Version</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language</source>
+ <translation>Lenguaje</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Listener</source>
+ <translation>Oyente</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin loader</source>
+ <translation>Plugin cargador</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Session loader</source>
+ <translation>Sesión cargador</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin</source>
+ <translation>Plugin</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Add</source>
+ <translation>Añadir</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Remove</source>
+ <translation>Eliminar</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Information</source>
+ <translation>Información</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine by order of preference:</source>
+ <translation>Copia del motor por orden de preferencia:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes:</source>
+ <translation>Temas:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Unable to load the themes plugin</source>
+ <translation>No se puede cargar el plugin temas</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No option for this plugin</source>
+ <translation>No hay ninguna opción para este plugin</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No plugin loaded</source>
+ <translation>No plugin de carga</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Browse</source>
+ <translation>Navegar</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %source%, %size%, %destination%</source>
+ <translation>Las variables son %time%, %source%, %size%, %destination%</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Format</source>
+ <translation>Formato</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
+ <translation>Las variables son %time%, %path%, %size%, %mtime%, %error%</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the log file into:</source>
+ <translation>Escribir el archivo de registro en:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the transfers:</source>
+ <translation>Escriba las transferencias:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the errors:</source>
+ <translation>Escribir los errores:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the folder operations:</source>
+ <translation>Escriba la carpeta de las operaciones:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="158"/>
+ <location filename="../../../OptionDialog.cpp" line="159"/>
+ <location filename="../../../OptionDialog.cpp" line="254"/>
+ <location filename="../../../OptionDialog.cpp" line="255"/>
+ <source>Disabled because you have any SessionLoader plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="160"/>
+ <source>Do nothing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="161"/>
+ <source>Ask source as folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="162"/>
+ <source>Ask sources as files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="163"/>
+ <source>Never</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="164"/>
+ <source>When source is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="165"/>
+ <source>When destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="166"/>
+ <source>When source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="167"/>
+ <source>When source or destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="168"/>
+ <source>Always</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="680"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Synchronized log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>When manual open:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Group window when:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginInformation</name>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>About this plugin</source>
+ <translation>Acerca de este plugin</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Name:</source>
+ <translation>Nombre:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Category:</source>
+ <translation>Categoría:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Author:</source>
+ <translation>Autor:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Date:</source>
+ <translation>Fecha:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Description:</source>
+ <translation>Descripción:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Version:</source>
+ <translation>Versión:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="39"/>
+ <source>CopyEngine</source>
+ <translation>Motor de copia</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="42"/>
+ <source>Languages</source>
+ <translation>Idiomas</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="45"/>
+ <source>Listener</source>
+ <translation>Oyente</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="48"/>
+ <source>PluginLoader</source>
+ <translation>Plugin cargador</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="51"/>
+ <source>SessionLoader</source>
+ <translation>Sesión cargador</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="54"/>
+ <source>Themes</source>
+ <translation>Themas</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="68"/>
+ <source>Information about %1</source>
+ <translation>Información sobre %1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Website:</source>
+ <translation>Sitio Web:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Title:</source>
+ <translation>Título:</translation>
+ </message>
+</context>
+<context>
+ <name>PluginsManager</name>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="206"/>
+ <source>informations.xml is not accessible</source>
+ <translation>informations.xml no es accesible</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="212"/>
+ <source>informations.xml not found into the plugin</source>
+ <translation>informations.xml que no se encuentran en el plug-in</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="470"/>
+ <source>Dependencies part is wrong</source>
+ <translation>Parte las dependencias se equivoca</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="489"/>
+ <source>Dependencies %1 are not satisfied, for plugin: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Remove %1</source>
+ <translation>Eliminar %1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error</source>
+ <translation>Error</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error while the removing plugin, please check right of remove on the folder:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Information</source>
+ <translation>Información</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="238"/>
+ <source>%1, parse error at line %2, column %3: %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="246"/>
+ <source>&quot;package&quot; root tag not found for the xml file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="322"/>
+ <source>Duplicated plugin found, already loaded!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="380"/>
+ <source>English text missing into the informations.xml for the tag: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="388"/>
+ <source>Tag not found: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Are you sure about removing &quot;%1&quot; in version %2?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Previous import is in progress...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Open Ultracopier plugin</source>
+ <translation>Abrir Plugin Ultracopier</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Ultracopier plugin (*.urc)</source>
+ <translation>Ultracopier plugin (*.urc)</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Plugin loader</source>
+ <translation>Plugin cargador</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <source>Unable to open the plugin: %1</source>
+ <translation>No se puede abrir el plugin: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Unable to load the plugin content, please check it: %1</source>
+ <translation>No se puede cargar el contenido del plugin, por favor verifique que: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <source>Unable to create a folder to install the plugin:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <source>Unable to create a file to install the plugin:
+%1
+since:%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <source>Folder with same name is present, skip the plugin installation:
+%1</source>
+ <translation>Carpeta con el mismo nombre está presente, no tome la instalación del plugin:
+%1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <source>Unable to load the plugin content, please check it</source>
+ <translation>
+
+SpanishFrenchEnglish
+
+No se puede cargar el contenido del plugin, por favor verifique que</translation>
+ </message>
+</context>
+<context>
+ <name>QXzDecode</name>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="33"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="88"/>
+ <source>Memory allocation failed</source>
+ <translation>La asignación de memoria no</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="59"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="77"/>
+ <source>Write error</source>
+ <translation>Error de escritura</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="92"/>
+ <source>Memory usage limit reached</source>
+ <translation>Limitar el uso de la memoria alcanza</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="96"/>
+ <source>Not a .xz file</source>
+ <translation>No es un. Xz archivo</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="100"/>
+ <source>Unsupported options in the .xz headers</source>
+ <translation>Opciones no admitidas en los encabezados. Xz</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
+ <source>The file is corrupted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="109"/>
+ <source>Bug!</source>
+ <translation>Bug!</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="119"/>
+ <source>The input data is too short</source>
+ <translation>Los datos de entrada es demasiado corto</translation>
+ </message>
+</context>
+<context>
+ <name>SystrayIcon</name>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="88"/>
+ <source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="94"/>
+ <source>Information</source>
+ <translation>Información</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="105"/>
+ <source>Searching informations...</source>
+ <translation>Buscar información...</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="120"/>
+ <source>Not catching the explorer copy/move</source>
+ <translation>No captura la explorer copia/movimiento</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="125"/>
+ <source>Semi catching the explorer copy/move</source>
+ <translation>Semi captura de la explorer copia/movimiento</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="130"/>
+ <source>Catching the explorer copy/move</source>
+ <translation>La captura de la explorer copia/movimiento</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Warning</source>
+ <translation>Advertencia</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Action on the systray icon is unknown!</source>
+ <translation>Acción en el icono de la bandeja del sistema es desconocido!</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="285"/>
+ <source>&amp;About/Debug report</source>
+ <translation>&amp;Acerca de/Debug informe</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="287"/>
+ <source>&amp;About</source>
+ <translation>&amp;Sobre</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="289"/>
+ <source>&amp;Quit</source>
+ <translation>&amp;Dejar de</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="290"/>
+ <source>&amp;Options</source>
+ <translation>&amp;Opciones</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="291"/>
+ <source>A&amp;dd copy/moving</source>
+ <translation>Aña&amp;dir copiar/mover</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="336"/>
+ <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <source>Add &amp;copy</source>
+ <translation>Agregar &amp;copia</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="342"/>
+ <location filename="../../../SystrayIcon.cpp" line="364"/>
+ <source>Add &amp;transfer</source>
+ <translation>Añadir &amp;transferencia</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="346"/>
+ <location filename="../../../SystrayIcon.cpp" line="368"/>
+ <source>Add &amp;move</source>
+ <translation>Añadir &amp;movimiento</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Languages/fr/flag.png b/plugins/Languages/fr/flag.png
new file mode 100644
index 0000000..b74ec94
--- /dev/null
+++ b/plugins/Languages/fr/flag.png
Binary files differ
diff --git a/plugins/Languages/fr/informations.xml b/plugins/Languages/fr/informations.xml
new file mode 100644
index 0000000..be04813
--- /dev/null
+++ b/plugins/Languages/fr/informations.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Translation of Ultracopier to French]]></title><!-- english is required -->
+ <title xml:lang="fr"><![CDATA[Traduction d'ultracopier en Français]]></title>
+ <!-- What kind of plugin this is -->
+ <category>Languages</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-fr.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>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to French. Done for version 0.3.0.0. For more details see the web site.]]></description>
+ <description xml:lang="fr"><![CDATA[Traduction d'ultracopier en Français. Fait pour la version 0.3.0.0. Pour plus de détails regardez le site web]]></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.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>fr</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
+ ]]></dependencies>
+ <!-- Additional information that is specific to the category (in this case Language). -->
+ <categorySpecific>
+ <!-- The full name in the language we're translating to. -->
+ <fullName><![CDATA[Français]]></fullName>
+ <!-- Short name, language name in English -->
+ <shortName><![CDATA[French]]></shortName>
+ <!-- Short name, language ISO code -->
+ <shortName mainCode="true"><![CDATA[fr]]></shortName>
+ <!-- Short name, language ISO country code -->
+ <shortName><![CDATA[fr_FR]]></shortName>
+ </categorySpecific>
+</package> \ No newline at end of file
diff --git a/plugins/Languages/fr/translation.ts b/plugins/Languages/fr/translation.ts
new file mode 100644
index 0000000..25bf66e
--- /dev/null
+++ b/plugins/Languages/fr/translation.ts
@@ -0,0 +1,871 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="fr" sourcelanguage="en">
+<context>
+ <name>CliParser</name>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Warning</source>
+ <translation>Attention</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
+ <translation>Ultracopier est déjà lancé, clique droit sur l&apos;icon du system tray (pret de l&apos;heure) pour l&apos;utilisé</translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineManager</name>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Warning</source>
+ <translation>Attention</translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <source>Cannot find any copy engine with motions support</source>
+ <translation>Impossible de trouver un moteur de copie avec le support des déplacements</translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <source>Cannot find any compatible engine!</source>
+ <translation>Impossible de trouver un moteur de copie compatible!</translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <source>This copy engine does not support motions</source>
+ <translation>Ce moteur de copie ne support pas les déplacements</translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Cannot find any engine with this name</source>
+ <translation>Impossible de trouver un moteur de copie avec ce nom</translation>
+ </message>
+</context>
+<context>
+ <name>Core</name>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Error</source>
+ <translation>Erreur</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <source>Unable to load the interface, copy aborted</source>
+ <translation>Impossible de charger l&apos;interface, copie annulée</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Unable to load the copy engine, copy aborted</source>
+ <translation>Impossible de charger le moteur de copie, copie annulée</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Transfer mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FacilityEngine</name>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="12"/>
+ <source>Copy engine</source>
+ <translation>Moteur de copie</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="13"/>
+ <source>Copy</source>
+ <translation>Copie</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="14"/>
+ <source>Move</source>
+ <translation>Déplacer</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="15"/>
+ <source>Pause</source>
+ <translation>Pause</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="16"/>
+ <source>Resume</source>
+ <translation>Reprendre</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="17"/>
+ <source>Skip</source>
+ <translation>Passer</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="18"/>
+ <source>Unlimited</source>
+ <translation>Illimité</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="20"/>
+ <source>s</source>
+ <translation>s</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="21"/>
+ <source>Too big</source>
+ <translation>Trop grand</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="22"/>
+ <source>B</source>
+ <translation>o</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="23"/>
+ <source>KB</source>
+ <translation>Ko</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <source>MB</source>
+ <translation>Mo</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <source>GB</source>
+ <translation>Go</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <source>TB</source>
+ <translation>To</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <source>PB</source>
+ <translation>Po</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <source>EB</source>
+ <translation>Eo</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <source>ZB</source>
+ <translation>Zo</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <source>YB</source>
+ <translation>Yo</translation>
+ </message>
+</context>
+<context>
+ <name>HelpDialog</name>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About ultracopier</source>
+ <translation>A propos d&apos;ultracopier</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+This version is compiled as version: %1.</source>
+ <translation>Basé sur Qt. Il fournit un copieur avec plus d&apos;options avancées. Qui est en GPL3.
+Cette version est compilée comme version: %1.</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>For more informations see the website &lt;a href=&quot;%1&quot; rel=&quot;%1&quot; title=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;</source>
+ <translation>Pour plus d&apos;informations voir le site web &lt;a href=&quot;%1&quot; rel=&quot;%1&quot; title=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Platform: %1</source>
+ <translation>Plateforme: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About Qt</source>
+ <translation>A propos de Qt</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Do a crash</source>
+ <translation>Faire un crash</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Save bug report</source>
+ <translation>Sauver le rapport</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Close</source>
+ <translation>Fermer</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="69"/>
+ <source>For http://portableapps.com/</source>
+ <translation>Pour http://portableapps.com/</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="71"/>
+ <source>Portable version</source>
+ <translation>Version portable</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="74"/>
+ <source>Normal version</source>
+ <translation>Version normale</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="79"/>
+ <source>http://ultracopier.first-world.info/</source>
+ <translation>http://ultracopier-fr.first-world.info/</translation>
+ </message>
+</context>
+<context>
+ <name>LocalListener</name>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Warning</source>
+ <translation>Attention</translation>
+ </message>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Timeout while recomposing data from connected clients</source>
+ <translation>Timeout pendant la recompossition des données des clients connectés</translation>
+ </message>
+</context>
+<context>
+ <name>LogThread</name>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Error</source>
+ <translation>Erreur</translation>
+ </message>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Unable to open file to keep the log file, error: %1</source>
+ <translation>Impossible d&apos;ouvrir le fichier à conserver le fichier de log, erreur: %1</translation>
+ </message>
+</context>
+<context>
+ <name>OptionDialog</name>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Options</source>
+ <translation>Options</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>General</source>
+ <translation>Général</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugins</source>
+ <translation>Plugins</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine</source>
+ <translation>Moteurs de copie</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes</source>
+ <translation>Thèmes</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Log</source>
+ <translation>Logs</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language:</source>
+ <translation>Langue:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Autodetect the system language:</source>
+ <translation>Détecter automatiquement la langue:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Catch the copy/move as default:</source>
+ <translation>Capturer la copie/déplacement par défaut:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Load at the session loading:</source>
+ <translation>Lancer à l&apos;ouverture de la session:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Name</source>
+ <translation>Nom</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Version</source>
+ <translation>Version</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language</source>
+ <translation>Langue</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Listener</source>
+ <translation>Écouteur</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin loader</source>
+ <translation>Chargeur de plugin</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Session loader</source>
+ <translation>Chargeur de session</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin</source>
+ <translation>Plugin</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Add</source>
+ <translation>Ajouter</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Remove</source>
+ <translation>Supprimer</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Information</source>
+ <translation>Informations</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine by order of preference:</source>
+ <translation>Moteurs de copie par ordre de préférence:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes:</source>
+ <translation>Thèmes:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Unable to load the themes plugin</source>
+ <translation>Impossible de charger le plugin des thèmes</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No option for this plugin</source>
+ <translation>Pas d&apos;options pour ce plugin</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No plugin loaded</source>
+ <translation>Aucun plugin chargé</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Browse</source>
+ <translation>Parcourir</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %source%, %size%, %destination%</source>
+ <translation>Les variables sont %time%, %source%, %size%, %destination%</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
+ <translation>Les variables sont %time%, %path%, %size%, %mtime%, %error%</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Format</source>
+ <translation>Format</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the log file into:</source>
+ <translation>Ecrire le fichier journal dans:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the transfers:</source>
+ <translation>Ecrire les transfers:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the errors:</source>
+ <translation>Ecrire les erreurs:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the folder operations:</source>
+ <translation>Rédiger les opérations dossier:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="158"/>
+ <location filename="../../../OptionDialog.cpp" line="159"/>
+ <location filename="../../../OptionDialog.cpp" line="254"/>
+ <location filename="../../../OptionDialog.cpp" line="255"/>
+ <source>Disabled because you have any SessionLoader plugin</source>
+ <translation>Désactivé car vous n&apos;avez aucun plugin SessionLoader</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="160"/>
+ <source>Do nothing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="161"/>
+ <source>Ask source as folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="162"/>
+ <source>Ask sources as files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="163"/>
+ <source>Never</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="164"/>
+ <source>When source is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="165"/>
+ <source>When destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="166"/>
+ <source>When source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="167"/>
+ <source>When source or destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="168"/>
+ <source>Always</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="680"/>
+ <source>Save logs as: </source>
+ <translation>Sauvegarder les logs sous: </translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <translation>Le fichier est écrit directement quand il reçois une nouvelle entrée, mais il peu produire 50% de perte de performance</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Synchronized log</source>
+ <translation>Log syncronisé</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>When manual open:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Group window when:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginInformation</name>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>About this plugin</source>
+ <translation>A propos de ce plugin</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Name:</source>
+ <translation>Nom:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Category:</source>
+ <translation>Catégorie:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Author:</source>
+ <translation>Auteur:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Date:</source>
+ <translation>Date:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Description:</source>
+ <translation>Description:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Version:</source>
+ <translation>Version:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="39"/>
+ <source>CopyEngine</source>
+ <translation>Moteur de copie</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="42"/>
+ <source>Languages</source>
+ <translation>Langues</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="45"/>
+ <source>Listener</source>
+ <translation>Écouteur</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="48"/>
+ <source>PluginLoader</source>
+ <translation>Chargeur de plugins</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="51"/>
+ <source>SessionLoader</source>
+ <translation>Chargeur de sessions</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="54"/>
+ <source>Themes</source>
+ <translation>Thèmes</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="68"/>
+ <source>Information about %1</source>
+ <translation>Informations à propos de %1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Website:</source>
+ <translation>Site web:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Title:</source>
+ <translation>Titre:</translation>
+ </message>
+</context>
+<context>
+ <name>PluginsManager</name>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="212"/>
+ <source>informations.xml not found into the plugin</source>
+ <translation>Le fichier informations.xml n&apos;a pas été trouvé dans le répertoire du plugin</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="206"/>
+ <source>informations.xml is not accessible</source>
+ <translation>informations.xml n&apos;est pas accessible</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="470"/>
+ <source>Dependencies part is wrong</source>
+ <translation>Les dépendances sont fausses</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="489"/>
+ <source>Dependencies %1 are not satisfied, for plugin: %2</source>
+ <translation>Dépendances %1 n&apos;ont pas été satisfaite, pour le plugin: %2</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error while the removing plugin, please check right of remove on the folder:
+%1</source>
+ <translation>Erreur pendant la suppression du plugin, merci de vérifié les droits sur le dossier:
+%1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Plugin loader</source>
+ <translation>Chargeur de plugin</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Remove %1</source>
+ <translation>Supprimer %1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error</source>
+ <translation>Erreur</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Information</source>
+ <translation>Informations</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="238"/>
+ <source>%1, parse error at line %2, column %3: %4</source>
+ <translation>%1, erreur à la ligne %2, à l&apos;emplacement %3: %4</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="246"/>
+ <source>&quot;package&quot; root tag not found for the xml file</source>
+ <translation>&quot;package&quot; balise root non trouvé pour le fichier xml</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="322"/>
+ <source>Duplicated plugin found, already loaded!</source>
+ <translation>Plugin dupliqué trouvé, déjà chargé!</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="380"/>
+ <source>English text missing into the informations.xml for the tag: %1</source>
+ <translation>Texte anglais manquant dans le informations.xml pour la balise: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="388"/>
+ <source>Tag not found: %1</source>
+ <translation>Balise non trouvé: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Are you sure about removing &quot;%1&quot; in version %2?</source>
+ <translation>Etes vous sur de vouloir supprimé &quot;%1&quot; en version %2?</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Previous import is in progress...</source>
+ <translation>Importation précédente en cour...</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Open Ultracopier plugin</source>
+ <translation>Ouvrir un plugin d&apos;Ultracopier</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Ultracopier plugin (*.urc)</source>
+ <translation>Plugin d&apos;Ultracopier (*.urc)</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <source>Unable to open the plugin: %1</source>
+ <translation>Impossible d&apos;ouvrir le plugin: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Unable to load the plugin content, please check it: %1</source>
+ <translation>Impossible de charger le contenu du plugin, veuillez le vérifier: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <source>Unable to create a folder to install the plugin:
+%1</source>
+ <translation>Impossible de créer un dossier pour installer le plugin:
+%1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <source>Unable to create a file to install the plugin:
+%1
+since:%2</source>
+ <translation>Impossible de créer un fichier pour installer le plugin:
+%1
+depuis:%2</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <source>Folder with same name is present, skip the plugin installation:
+%1</source>
+ <translation>Le répertoire est déjà présent, on saute l&apos;installation du plugin:
+%1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <source>Unable to load the plugin content, please check it</source>
+ <translation>Impossible de charger le contenu du plugin, veuillez le vérifier</translation>
+ </message>
+</context>
+<context>
+ <name>QXzDecode</name>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="33"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="88"/>
+ <source>Memory allocation failed</source>
+ <translation>Allocation mémoire échouée</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="59"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="77"/>
+ <source>Write error</source>
+ <translation>Erreur d&apos;écriture</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="92"/>
+ <source>Memory usage limit reached</source>
+ <translation>Limite de mémoire atteinte</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="96"/>
+ <source>Not a .xz file</source>
+ <translation>N&apos;est pas un fichier .xz</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="100"/>
+ <source>Unsupported options in the .xz headers</source>
+ <translation>Options non supportées dans les entêtes des fichiers .xz</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
+ <source>The file is corrupted</source>
+ <translation>Le fichier est corrompu</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="109"/>
+ <source>Bug!</source>
+ <translation>Bug!</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="119"/>
+ <source>The input data is too short</source>
+ <translation>Données d&apos;entrée trop courtes</translation>
+ </message>
+</context>
+<context>
+ <name>SystrayIcon</name>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="88"/>
+ <source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
+ <translation>Pas d&apos;écouteur trouvé. Effectuez la copie manuelle par le clic droit sur l&apos;icône dans la zone de notification (près de l&apos;horloge).</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="105"/>
+ <source>Searching informations...</source>
+ <translation>Recherche d&apos;informations...</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="120"/>
+ <source>Not catching the explorer copy/move</source>
+ <translation>Ne pas capturer la copie/déplacement de l&apos;explorateur</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="125"/>
+ <source>Semi catching the explorer copy/move</source>
+ <translation>Interception partielle des copies/déplacements de l&apos;explorateur</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="130"/>
+ <source>Catching the explorer copy/move</source>
+ <translation>Interception des copies/déplacements de l&apos;explorateur</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Action on the systray icon is unknown!</source>
+ <translation>Action sur l&apos;icône du systray est inconnu!</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="285"/>
+ <source>&amp;About/Debug report</source>
+ <translation>&amp;A propos d&apos;ultracopier/Debug</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="287"/>
+ <source>&amp;About</source>
+ <translation>&amp;A propos d&apos;ultracopier</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="289"/>
+ <source>&amp;Quit</source>
+ <translation>&amp;Quitter</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="290"/>
+ <source>&amp;Options</source>
+ <translation>&amp;Options</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="336"/>
+ <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <source>Add &amp;copy</source>
+ <translation>Ajouter une &amp;copie</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="342"/>
+ <location filename="../../../SystrayIcon.cpp" line="364"/>
+ <source>Add &amp;transfer</source>
+ <translation>Ajouter un &amp;transfert</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="346"/>
+ <location filename="../../../SystrayIcon.cpp" line="368"/>
+ <source>Add &amp;move</source>
+ <translation>Ajouter un &amp;déplacement</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="291"/>
+ <source>A&amp;dd copy/moving</source>
+ <translation>&amp;Ajouter une copie/déplacement</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Warning</source>
+ <translation>Attention</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="94"/>
+ <source>Information</source>
+ <translation>Informations</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Languages/hi/flag.png b/plugins/Languages/hi/flag.png
new file mode 100644
index 0000000..acb0ee3
--- /dev/null
+++ b/plugins/Languages/hi/flag.png
Binary files differ
diff --git a/plugins/Languages/hi/informations.xml b/plugins/Languages/hi/informations.xml
new file mode 100644
index 0000000..29330e4
--- /dev/null
+++ b/plugins/Languages/hi/informations.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Translation of Ultracopier to hindi]]></title><!-- english is required -->
+ <!-- What kind of plugin this is -->
+ <category>Languages</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-es.first-world.info/]]></website><!-- not required -->
+ <!-- the date-time format should be in timestamps format -->
+ <pubDate>1287496800</pubDate>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to hindi. Done for version 0.3.0.0. For more details see the web site.]]></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.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>hi</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
+ ]]></dependencies>
+ <!-- Additional information that is specific to the category (in this case Language). -->
+ <categorySpecific>
+ <!-- The full name in the language we're translating to. -->
+ <fullName><![CDATA[हिंदी]]></fullName>
+ <!-- Short name, language name in English -->
+ <shortName><![CDATA[Hindi]]></shortName>
+ <!-- Short name, language ISO code -->
+ <shortName mainCode="true"><![CDATA[hi]]></shortName>
+ <!-- Short name, language ISO country code -->
+ <shortName><![CDATA[hi_HI]]></shortName>
+ </categorySpecific>
+</package> \ No newline at end of file
diff --git a/plugins/Languages/hi/translation.ts b/plugins/Languages/hi/translation.ts
new file mode 100644
index 0000000..6c81c6f
--- /dev/null
+++ b/plugins/Languages/hi/translation.ts
@@ -0,0 +1,865 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="hi">
+<context>
+ <name>CliParser</name>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineManager</name>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <source>Cannot find any copy engine with motions support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <source>Cannot find any compatible engine!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <source>This copy engine does not support motions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Cannot find any engine with this name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Core</name>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <source>Unable to load the interface, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Unable to load the copy engine, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Transfer mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FacilityEngine</name>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="12"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="13"/>
+ <source>Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="14"/>
+ <source>Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="15"/>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="16"/>
+ <source>Resume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="17"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="18"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="20"/>
+ <source>s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="21"/>
+ <source>Too big</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="22"/>
+ <source>B</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="23"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <source>GB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <source>TB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <source>PB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <source>EB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <source>ZB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <source>YB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HelpDialog</name>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+This version is compiled as version: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>For more informations see the website &lt;a href=&quot;%1&quot; rel=&quot;%1&quot; title=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Platform: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About Qt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Do a crash</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="69"/>
+ <source>For http://portableapps.com/</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="71"/>
+ <source>Portable version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="74"/>
+ <source>Normal version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="79"/>
+ <source>http://ultracopier.first-world.info/</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LocalListener</name>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Timeout while recomposing data from connected clients</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LogThread</name>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Unable to open file to keep the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OptionDialog</name>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugins</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Autodetect the system language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Catch the copy/move as default:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Load at the session loading:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Add</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine by order of preference:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Unable to load the themes plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No option for this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No plugin loaded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %source%, %size%, %destination%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the log file into:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the transfers:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the errors:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the folder operations:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="158"/>
+ <location filename="../../../OptionDialog.cpp" line="159"/>
+ <location filename="../../../OptionDialog.cpp" line="254"/>
+ <location filename="../../../OptionDialog.cpp" line="255"/>
+ <source>Disabled because you have any SessionLoader plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="160"/>
+ <source>Do nothing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="161"/>
+ <source>Ask source as folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="162"/>
+ <source>Ask sources as files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="163"/>
+ <source>Never</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="164"/>
+ <source>When source is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="165"/>
+ <source>When destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="166"/>
+ <source>When source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="167"/>
+ <source>When source or destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="168"/>
+ <source>Always</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="680"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Synchronized log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>When manual open:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Group window when:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginInformation</name>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>About this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Category:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Author:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Date:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Description:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="39"/>
+ <source>CopyEngine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="42"/>
+ <source>Languages</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="45"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="48"/>
+ <source>PluginLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="51"/>
+ <source>SessionLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="54"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="68"/>
+ <source>Information about %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Website:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Title:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginsManager</name>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="206"/>
+ <source>informations.xml is not accessible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="212"/>
+ <source>informations.xml not found into the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="470"/>
+ <source>Dependencies part is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="489"/>
+ <source>Dependencies %1 are not satisfied, for plugin: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Remove %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error while the removing plugin, please check right of remove on the folder:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="238"/>
+ <source>%1, parse error at line %2, column %3: %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="246"/>
+ <source>&quot;package&quot; root tag not found for the xml file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="322"/>
+ <source>Duplicated plugin found, already loaded!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="380"/>
+ <source>English text missing into the informations.xml for the tag: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="388"/>
+ <source>Tag not found: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Are you sure about removing &quot;%1&quot; in version %2?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Previous import is in progress...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Open Ultracopier plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Ultracopier plugin (*.urc)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <source>Unable to open the plugin: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Unable to load the plugin content, please check it: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <source>Unable to create a folder to install the plugin:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <source>Unable to create a file to install the plugin:
+%1
+since:%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <source>Folder with same name is present, skip the plugin installation:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <source>Unable to load the plugin content, please check it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QXzDecode</name>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="33"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="88"/>
+ <source>Memory allocation failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="59"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="77"/>
+ <source>Write error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="92"/>
+ <source>Memory usage limit reached</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="96"/>
+ <source>Not a .xz file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="100"/>
+ <source>Unsupported options in the .xz headers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
+ <source>The file is corrupted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="109"/>
+ <source>Bug!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="119"/>
+ <source>The input data is too short</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SystrayIcon</name>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="88"/>
+ <source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="94"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="105"/>
+ <source>Searching informations...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="120"/>
+ <source>Not catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="125"/>
+ <source>Semi catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="130"/>
+ <source>Catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Action on the systray icon is unknown!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="285"/>
+ <source>&amp;About/Debug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="287"/>
+ <source>&amp;About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="289"/>
+ <source>&amp;Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="290"/>
+ <source>&amp;Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="291"/>
+ <source>A&amp;dd copy/moving</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="336"/>
+ <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <source>Add &amp;copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="342"/>
+ <location filename="../../../SystrayIcon.cpp" line="364"/>
+ <source>Add &amp;transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="346"/>
+ <location filename="../../../SystrayIcon.cpp" line="368"/>
+ <source>Add &amp;move</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Languages/id/flag.png b/plugins/Languages/id/flag.png
new file mode 100644
index 0000000..188ea2c
--- /dev/null
+++ b/plugins/Languages/id/flag.png
Binary files differ
diff --git a/plugins/Languages/id/informations.xml b/plugins/Languages/id/informations.xml
new file mode 100644
index 0000000..a84704b
--- /dev/null
+++ b/plugins/Languages/id/informations.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Translation of Ultracopier to indonesian]]></title><!-- english is required -->
+ <!-- What kind of plugin this is -->
+ <category>Languages</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-id.first-world.info/]]></website><!-- not required -->
+ <!-- the date-time format should be in timestamps format -->
+ <pubDate>1287496800</pubDate>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to indonesian. Done for version 0.3.0.0. For more details see the web site.]]></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.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>id</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
+ ]]></dependencies>
+ <!-- Additional information that is specific to the category (in this case Language). -->
+ <categorySpecific>
+ <!-- The full name in the language we're translating to. -->
+ <fullName><![CDATA[Bahasa Indonesia]]></fullName>
+ <!-- Short name, language name in English -->
+ <shortName><![CDATA[Indonesian]]></shortName>
+ <!-- Short name, language ISO code -->
+ <shortName mainCode="true"><![CDATA[id]]></shortName>
+ <!-- Short name, language ISO country code -->
+ <shortName><![CDATA[id_ID]]></shortName>
+ </categorySpecific>
+</package> \ No newline at end of file
diff --git a/plugins/Languages/id/translation.ts b/plugins/Languages/id/translation.ts
new file mode 100644
index 0000000..f9dff29
--- /dev/null
+++ b/plugins/Languages/id/translation.ts
@@ -0,0 +1,865 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>CliParser</name>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineManager</name>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <source>Cannot find any copy engine with motions support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <source>Cannot find any compatible engine!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <source>This copy engine does not support motions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Cannot find any engine with this name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Core</name>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <source>Unable to load the interface, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Unable to load the copy engine, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Transfer mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FacilityEngine</name>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="12"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="13"/>
+ <source>Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="14"/>
+ <source>Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="15"/>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="16"/>
+ <source>Resume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="17"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="18"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="20"/>
+ <source>s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="21"/>
+ <source>Too big</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="22"/>
+ <source>B</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="23"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <source>GB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <source>TB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <source>PB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <source>EB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <source>ZB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <source>YB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HelpDialog</name>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+This version is compiled as version: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>For more informations see the website &lt;a href=&quot;%1&quot; rel=&quot;%1&quot; title=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Platform: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About Qt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Do a crash</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="69"/>
+ <source>For http://portableapps.com/</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="71"/>
+ <source>Portable version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="74"/>
+ <source>Normal version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="79"/>
+ <source>http://ultracopier.first-world.info/</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LocalListener</name>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Timeout while recomposing data from connected clients</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LogThread</name>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Unable to open file to keep the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OptionDialog</name>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugins</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Autodetect the system language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Catch the copy/move as default:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Load at the session loading:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Add</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine by order of preference:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Unable to load the themes plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No option for this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No plugin loaded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %source%, %size%, %destination%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the log file into:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the transfers:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the errors:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the folder operations:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="158"/>
+ <location filename="../../../OptionDialog.cpp" line="159"/>
+ <location filename="../../../OptionDialog.cpp" line="254"/>
+ <location filename="../../../OptionDialog.cpp" line="255"/>
+ <source>Disabled because you have any SessionLoader plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="160"/>
+ <source>Do nothing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="161"/>
+ <source>Ask source as folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="162"/>
+ <source>Ask sources as files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="163"/>
+ <source>Never</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="164"/>
+ <source>When source is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="165"/>
+ <source>When destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="166"/>
+ <source>When source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="167"/>
+ <source>When source or destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="168"/>
+ <source>Always</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="680"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Synchronized log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>When manual open:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Group window when:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginInformation</name>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>About this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Category:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Author:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Date:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Description:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="39"/>
+ <source>CopyEngine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="42"/>
+ <source>Languages</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="45"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="48"/>
+ <source>PluginLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="51"/>
+ <source>SessionLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="54"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="68"/>
+ <source>Information about %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Website:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Title:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginsManager</name>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="206"/>
+ <source>informations.xml is not accessible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="212"/>
+ <source>informations.xml not found into the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="470"/>
+ <source>Dependencies part is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="489"/>
+ <source>Dependencies %1 are not satisfied, for plugin: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Remove %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error while the removing plugin, please check right of remove on the folder:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="238"/>
+ <source>%1, parse error at line %2, column %3: %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="246"/>
+ <source>&quot;package&quot; root tag not found for the xml file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="322"/>
+ <source>Duplicated plugin found, already loaded!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="380"/>
+ <source>English text missing into the informations.xml for the tag: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="388"/>
+ <source>Tag not found: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Are you sure about removing &quot;%1&quot; in version %2?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Previous import is in progress...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Open Ultracopier plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Ultracopier plugin (*.urc)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <source>Unable to open the plugin: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Unable to load the plugin content, please check it: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <source>Unable to create a folder to install the plugin:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <source>Unable to create a file to install the plugin:
+%1
+since:%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <source>Folder with same name is present, skip the plugin installation:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <source>Unable to load the plugin content, please check it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QXzDecode</name>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="33"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="88"/>
+ <source>Memory allocation failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="59"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="77"/>
+ <source>Write error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="92"/>
+ <source>Memory usage limit reached</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="96"/>
+ <source>Not a .xz file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="100"/>
+ <source>Unsupported options in the .xz headers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
+ <source>The file is corrupted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="109"/>
+ <source>Bug!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="119"/>
+ <source>The input data is too short</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SystrayIcon</name>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="88"/>
+ <source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="94"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="105"/>
+ <source>Searching informations...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="120"/>
+ <source>Not catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="125"/>
+ <source>Semi catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="130"/>
+ <source>Catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Action on the systray icon is unknown!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="285"/>
+ <source>&amp;About/Debug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="287"/>
+ <source>&amp;About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="289"/>
+ <source>&amp;Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="290"/>
+ <source>&amp;Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="291"/>
+ <source>A&amp;dd copy/moving</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="336"/>
+ <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <source>Add &amp;copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="342"/>
+ <location filename="../../../SystrayIcon.cpp" line="364"/>
+ <source>Add &amp;transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="346"/>
+ <location filename="../../../SystrayIcon.cpp" line="368"/>
+ <source>Add &amp;move</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Languages/it/flag.png b/plugins/Languages/it/flag.png
new file mode 100644
index 0000000..a3e3a7b
--- /dev/null
+++ b/plugins/Languages/it/flag.png
Binary files differ
diff --git a/plugins/Languages/it/informations.xml b/plugins/Languages/it/informations.xml
new file mode 100644
index 0000000..5cb0af3
--- /dev/null
+++ b/plugins/Languages/it/informations.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Translation of Ultracopier to italian]]></title><!-- english is required -->
+ <!-- What kind of plugin this is -->
+ <category>Languages</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 -->
+ <!-- the date-time format should be in timestamps format -->
+ <pubDate>1287496800</pubDate>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to italian. Done for version 0.3.0.0. For more details see the web site.]]></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.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>it</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
+ ]]></dependencies>
+ <!-- Additional information that is specific to the category (in this case Language). -->
+ <categorySpecific>
+ <!-- The full name in the language we're translating to. -->
+ <fullName><![CDATA[Italian]]></fullName>
+ <!-- Short name, language name in English -->
+ <shortName><![CDATA[Italiano]]></shortName>
+ <!-- Short name, language ISO code -->
+ <shortName mainCode="true"><![CDATA[it]]></shortName>
+ <!-- Short name, language ISO country code -->
+ <shortName><![CDATA[it_IT]]></shortName>
+ </categorySpecific>
+</package> \ No newline at end of file
diff --git a/plugins/Languages/it/translation.ts b/plugins/Languages/it/translation.ts
new file mode 100644
index 0000000..f4702ba
--- /dev/null
+++ b/plugins/Languages/it/translation.ts
@@ -0,0 +1,800 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="it" sourcelanguage="en">
+<context>
+ <name>CliParser</name>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Warning</source>
+ <translation>Avvertimento</translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
+ <translation>Il Programma è gia in esecuzione</translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineManager</name>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Warning</source>
+ <translation>Avvertimento</translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <source>Cannot find any copy engine with motions support</source>
+ <translation>Non è stato nessuna copia del programma con nozioni di sopporto</translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <source>Cannot find any compatible engine!</source>
+ <translation>Non è stato trovato nessun programma compatibile!</translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <source>This copy engine does not support motions</source>
+ <translation>Questa copia del programma non sopporta le nozioni</translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Cannot find any engine with this name</source>
+ <translation>Non è stato trovato nessun programma con questo nome</translation>
+ </message>
+</context>
+<context>
+ <name>Core</name>
+ <message>
+ <location filename="../../../Core.cpp" line="127"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <location filename="../../../Core.cpp" line="221"/>
+ <source>Error</source>
+ <translation>Errore</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="127"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <source>Unable to load the interface, copy aborted</source>
+ <translation>Impossibile caricare l&apos;interfaccia, copia abortita</translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="221"/>
+ <source>Unable to load the copy engine, copy aborted</source>
+ <translation>Impossibile caricare il programma di copia, copia abortita</translation>
+ </message>
+</context>
+<context>
+ <name>FacilityEngine</name>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="12"/>
+ <source>Copy engine</source>
+ <translation>Copia il programma</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="13"/>
+ <source>Copy</source>
+ <translation>Copia</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="14"/>
+ <source>Move</source>
+ <translation>Muovi</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="15"/>
+ <source>Pause</source>
+ <translation>Pausa</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="16"/>
+ <source>Resume</source>
+ <translation>Riprendere</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="17"/>
+ <source>Skip</source>
+ <translation>Saltare</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="18"/>
+ <source>Unlimited</source>
+ <translation>Illimitato</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="20"/>
+ <source>s</source>
+ <translation>s</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="21"/>
+ <source>Too big</source>
+ <translation>Troppo grande</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="22"/>
+ <source>B</source>
+ <translation>B</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="23"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <source>MB</source>
+ <translation>MB</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <source>GB</source>
+ <translation>GB</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <source>TB</source>
+ <translation>TB</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <source>PB</source>
+ <translation>PB</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <source>EB</source>
+ <translation>EB</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <source>ZB</source>
+ <translation>ZB</translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <source>YB</source>
+ <translation>YB</translation>
+ </message>
+</context>
+<context>
+ <name>HelpDialog</name>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About ultracopier</source>
+ <translation>Informazioni su UltraCopier</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+This version is compiled as version: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>For more informations see the website &lt;a href=&quot;%1&quot; rel=&quot;%1&quot; title=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;</source>
+ <translation>Per maggiori dettagli vistare il sito &lt;a href=&quot;%1&quot; rel=&quot;%1&quot; title=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Platform: %1</source>
+ <translation>Piattaforma: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About Qt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Do a crash</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Save bug report</source>
+ <translation>Salva il bug</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Close</source>
+ <translation>Chiudi</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="69"/>
+ <source>For http://portableapps.com/</source>
+ <translation>Per http://portableapps.com/</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="71"/>
+ <source>Portable version</source>
+ <translation>Versione portatile</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="74"/>
+ <source>Normal version</source>
+ <translation>Versione normale</translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="79"/>
+ <source>http://ultracopier.first-world.info/</source>
+ <translation>http://ultracopier.first-world.info/</translation>
+ </message>
+</context>
+<context>
+ <name>LocalListener</name>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Warning</source>
+ <translation>Avvertimento</translation>
+ </message>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Timeout while recomposing data from connected clients</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LogThread</name>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Error</source>
+ <translation>Errore</translation>
+ </message>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Unable to open file to keep the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OptionDialog</name>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Options</source>
+ <translation>Opzioni</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>General</source>
+ <translation>Generale</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugins</source>
+ <translation>Plugins</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine</source>
+ <translation>Copia del programma</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes</source>
+ <translation>Temi</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Log</source>
+ <translation>Log</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language:</source>
+ <translation>Linguaggio:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Autodetect the system language:</source>
+ <translation>Detezione automatica della lingua:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Catch the copy/move as default:</source>
+ <translation>Metter il copia/muovi standard:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Load at the session loading:</source>
+ <translation>Caricato al caricamento della sessione:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Name</source>
+ <translation>Nome</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Version</source>
+ <translation>Versione</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language</source>
+ <translation>Linguaggio</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin loader</source>
+ <translation>Plugin caricati</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Session loader</source>
+ <translation>Sessione caricata</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin</source>
+ <translation>Plugin</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Add</source>
+ <translation>Aggiungere</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Remove</source>
+ <translation>Rimuovere</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Information</source>
+ <translation>Informazioni</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine by order of preference:</source>
+ <translation>Copiare il programma nel ordine preferita:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes:</source>
+ <translation>Temi:</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Unable to load the themes plugin</source>
+ <translation>Attivare per caricare i temi dei plugin</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No option for this plugin</source>
+ <translation>Non ci sono opzioni per questo plugin</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No plugin loaded</source>
+ <translation>Nessun plugin carcato</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Browse</source>
+ <translation>Esplora</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %source%, %size%, %destination%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Format</source>
+ <translation>Formato</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the log file into:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the transfers:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the errors:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the folder operations:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="157"/>
+ <location filename="../../../OptionDialog.cpp" line="158"/>
+ <location filename="../../../OptionDialog.cpp" line="243"/>
+ <location filename="../../../OptionDialog.cpp" line="244"/>
+ <source>Disabled because you have any SessionLoader plugin</source>
+ <translation>Disabilitato perchè non c&apos;è nessun SessionLoader plugin</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="662"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <translation>Questo scrive direttamente il file quando riceve un&apos; altra entrata, ma questo produce un calo del 50% della velocità</translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Synchronized log</source>
+ <translation>Log sincronizzato</translation>
+ </message>
+</context>
+<context>
+ <name>PluginInformation</name>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>About this plugin</source>
+ <translation>Informazioni su questo plugin</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Name:</source>
+ <translation>Nome:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Category:</source>
+ <translation>Categoria:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Author:</source>
+ <translation>Autore:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Date:</source>
+ <translation>Data:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Description:</source>
+ <translation>Descrizione:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Version:</source>
+ <translation>Versione:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="39"/>
+ <source>CopyEngine</source>
+ <translation>Copiare il programma</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="42"/>
+ <source>Languages</source>
+ <translation>Linguaggio</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="45"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="48"/>
+ <source>PluginLoader</source>
+ <translation>Caricatore di plugin</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="51"/>
+ <source>SessionLoader</source>
+ <translation>Caricatore di sessioni</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="54"/>
+ <source>Themes</source>
+ <translation>Temi</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="68"/>
+ <source>Information about %1</source>
+ <translation>Informazioni su %1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Website:</source>
+ <translation>Sito web:</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Title:</source>
+ <translation>Titolo:</translation>
+ </message>
+</context>
+<context>
+ <name>PluginsManager</name>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="206"/>
+ <source>informations.xml is not accessible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="212"/>
+ <source>informations.xml not found into the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="470"/>
+ <source>Dependencies part is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="489"/>
+ <source>Dependencies %1 are not satisfied, for plugin: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Remove %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error</source>
+ <translation>Errore</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error while the removing plugin, please check right of remove on the folder:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="238"/>
+ <source>%1, parse error at line %2, column %3: %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="246"/>
+ <source>&quot;package&quot; root tag not found for the xml file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="322"/>
+ <source>Duplicated plugin found, already loaded!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="380"/>
+ <source>English text missing into the informations.xml for the tag: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="388"/>
+ <source>Tag not found: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Are you sure about removing &quot;%1&quot; in version %2?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Previous import is in progress...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Open Ultracopier plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Ultracopier plugin (*.urc)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Plugin loader</source>
+ <translation>Plugin caricato</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <source>Unable to open the plugin: %1</source>
+ <translation>Attivare per aprire il puglin: %1</translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Unable to load the plugin content, please check it: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <source>Unable to create a folder to install the plugin:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <source>Unable to create a file to install the plugin:
+%1
+since:%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <source>Folder with same name is present, skip the plugin installation:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <source>Unable to load the plugin content, please check it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QXzDecode</name>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="33"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="88"/>
+ <source>Memory allocation failed</source>
+ <translation>Allocazione di memoria fallita</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="59"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="77"/>
+ <source>Write error</source>
+ <translation>Errore di scrittura</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="92"/>
+ <source>Memory usage limit reached</source>
+ <translation>Limite di memoria raggiunto</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="96"/>
+ <source>Not a .xz file</source>
+ <translation>Non è un file .xz</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="100"/>
+ <source>Unsupported options in the .xz headers</source>
+ <translation>Opzioni non sopportate nel .xz headers</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
+ <source>The file is corrupted</source>
+ <translation>Il file è corrotto</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="109"/>
+ <source>Bug!</source>
+ <translation>Bug!</translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="119"/>
+ <source>The input data is too short</source>
+ <translation>I dati inseriti sono troppo pochi</translation>
+ </message>
+</context>
+<context>
+ <name>SystrayIcon</name>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="88"/>
+ <source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="94"/>
+ <source>Information</source>
+ <translation>Informazioni</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="105"/>
+ <source>Searching informations...</source>
+ <translation>Cercare informazioni...</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="120"/>
+ <source>Not catching the explorer copy/move</source>
+ <translation>Non mostrare il copia/muovi</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="125"/>
+ <source>Semi catching the explorer copy/move</source>
+ <translation>Mostra in parte il copia/muovi</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="130"/>
+ <source>Catching the explorer copy/move</source>
+ <translation>Mostra il copia/muovi</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Warning</source>
+ <translation>Avvertimento</translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Action on the systray icon is unknown!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="285"/>
+ <source>&amp;About/Debug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="287"/>
+ <source>&amp;About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="289"/>
+ <source>&amp;Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="290"/>
+ <source>&amp;Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="291"/>
+ <source>A&amp;dd copy/moving</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="336"/>
+ <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <source>Add &amp;copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="342"/>
+ <location filename="../../../SystrayIcon.cpp" line="364"/>
+ <source>Add &amp;transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="346"/>
+ <location filename="../../../SystrayIcon.cpp" line="368"/>
+ <source>Add &amp;move</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Languages/ja/flag.png b/plugins/Languages/ja/flag.png
new file mode 100644
index 0000000..0cd1398
--- /dev/null
+++ b/plugins/Languages/ja/flag.png
Binary files differ
diff --git a/plugins/Languages/ja/informations.xml b/plugins/Languages/ja/informations.xml
new file mode 100644
index 0000000..8c38a0e
--- /dev/null
+++ b/plugins/Languages/ja/informations.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Translation of Ultracopier to japanese]]></title><!-- english is required -->
+ <!-- What kind of plugin this is -->
+ <category>Languages</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 -->
+ <!-- the date-time format should be in timestamps format -->
+ <pubDate>1287496800</pubDate>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to japanese. Done for version 0.3.0.0. For more details see the web site.]]></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.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>jp</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
+ ]]></dependencies>
+ <!-- Additional information that is specific to the category (in this case Language). -->
+ <categorySpecific>
+ <!-- The full name in the language we're translating to. -->
+ <fullName><![CDATA[日本]]></fullName>
+ <!-- Short name, language name in English -->
+ <shortName><![CDATA[Japanese]]></shortName>
+ <!-- Short name, language ISO code -->
+ <shortName mainCode="true"><![CDATA[ja]]></shortName>
+ <!-- Short name, language ISO country code -->
+ <shortName><![CDATA[jp]]></shortName>
+ <shortName><![CDATA[jp_JP]]></shortName>
+ </categorySpecific>
+</package> \ No newline at end of file
diff --git a/plugins/Languages/ja/translation.ts b/plugins/Languages/ja/translation.ts
new file mode 100644
index 0000000..53fa961
--- /dev/null
+++ b/plugins/Languages/ja/translation.ts
@@ -0,0 +1,800 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>CliParser</name>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineManager</name>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <source>Cannot find any copy engine with motions support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <source>Cannot find any compatible engine!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <source>This copy engine does not support motions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Cannot find any engine with this name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Core</name>
+ <message>
+ <location filename="../../../Core.cpp" line="127"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <location filename="../../../Core.cpp" line="221"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="127"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <source>Unable to load the interface, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="221"/>
+ <source>Unable to load the copy engine, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FacilityEngine</name>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="12"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="13"/>
+ <source>Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="14"/>
+ <source>Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="15"/>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="16"/>
+ <source>Resume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="17"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="18"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="20"/>
+ <source>s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="21"/>
+ <source>Too big</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="22"/>
+ <source>B</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="23"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <source>GB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <source>TB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <source>PB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <source>EB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <source>ZB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <source>YB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HelpDialog</name>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+This version is compiled as version: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>For more informations see the website &lt;a href=&quot;%1&quot; rel=&quot;%1&quot; title=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Platform: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About Qt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Do a crash</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="69"/>
+ <source>For http://portableapps.com/</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="71"/>
+ <source>Portable version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="74"/>
+ <source>Normal version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="79"/>
+ <source>http://ultracopier.first-world.info/</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LocalListener</name>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Timeout while recomposing data from connected clients</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LogThread</name>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Unable to open file to keep the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OptionDialog</name>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugins</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Autodetect the system language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Catch the copy/move as default:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Load at the session loading:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Add</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine by order of preference:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Unable to load the themes plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No option for this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No plugin loaded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %source%, %size%, %destination%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the log file into:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the transfers:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the errors:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the folder operations:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="157"/>
+ <location filename="../../../OptionDialog.cpp" line="158"/>
+ <location filename="../../../OptionDialog.cpp" line="243"/>
+ <location filename="../../../OptionDialog.cpp" line="244"/>
+ <source>Disabled because you have any SessionLoader plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="662"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Synchronized log</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginInformation</name>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>About this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Category:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Author:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Date:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Description:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="39"/>
+ <source>CopyEngine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="42"/>
+ <source>Languages</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="45"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="48"/>
+ <source>PluginLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="51"/>
+ <source>SessionLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="54"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="68"/>
+ <source>Information about %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Website:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Title:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginsManager</name>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="206"/>
+ <source>informations.xml is not accessible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="212"/>
+ <source>informations.xml not found into the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="470"/>
+ <source>Dependencies part is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="489"/>
+ <source>Dependencies %1 are not satisfied, for plugin: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Remove %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error while the removing plugin, please check right of remove on the folder:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="238"/>
+ <source>%1, parse error at line %2, column %3: %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="246"/>
+ <source>&quot;package&quot; root tag not found for the xml file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="322"/>
+ <source>Duplicated plugin found, already loaded!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="380"/>
+ <source>English text missing into the informations.xml for the tag: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="388"/>
+ <source>Tag not found: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Are you sure about removing &quot;%1&quot; in version %2?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Previous import is in progress...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Open Ultracopier plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Ultracopier plugin (*.urc)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <source>Unable to open the plugin: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Unable to load the plugin content, please check it: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <source>Unable to create a folder to install the plugin:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <source>Unable to create a file to install the plugin:
+%1
+since:%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <source>Folder with same name is present, skip the plugin installation:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <source>Unable to load the plugin content, please check it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QXzDecode</name>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="33"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="88"/>
+ <source>Memory allocation failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="59"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="77"/>
+ <source>Write error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="92"/>
+ <source>Memory usage limit reached</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="96"/>
+ <source>Not a .xz file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="100"/>
+ <source>Unsupported options in the .xz headers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
+ <source>The file is corrupted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="109"/>
+ <source>Bug!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="119"/>
+ <source>The input data is too short</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SystrayIcon</name>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="88"/>
+ <source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="94"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="105"/>
+ <source>Searching informations...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="120"/>
+ <source>Not catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="125"/>
+ <source>Semi catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="130"/>
+ <source>Catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Action on the systray icon is unknown!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="285"/>
+ <source>&amp;About/Debug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="287"/>
+ <source>&amp;About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="289"/>
+ <source>&amp;Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="290"/>
+ <source>&amp;Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="291"/>
+ <source>A&amp;dd copy/moving</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="336"/>
+ <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <source>Add &amp;copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="342"/>
+ <location filename="../../../SystrayIcon.cpp" line="364"/>
+ <source>Add &amp;transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="346"/>
+ <location filename="../../../SystrayIcon.cpp" line="368"/>
+ <source>Add &amp;move</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Languages/nl/flag.png b/plugins/Languages/nl/flag.png
new file mode 100644
index 0000000..679b368
--- /dev/null
+++ b/plugins/Languages/nl/flag.png
Binary files differ
diff --git a/plugins/Languages/nl/informations.xml b/plugins/Languages/nl/informations.xml
new file mode 100644
index 0000000..c08f3af
--- /dev/null
+++ b/plugins/Languages/nl/informations.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Translation of Ultracopier to dutch]]></title><!-- english is required -->
+ <!-- What kind of plugin this is -->
+ <category>Languages</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 -->
+ <!-- the date-time format should be in timestamps format -->
+ <pubDate>1287496800</pubDate>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to dutch. Done for version 0.3.0.0. For more details see the web site.]]></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.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>nl</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
+ ]]></dependencies>
+ <!-- Additional information that is specific to the category (in this case Language). -->
+ <categorySpecific>
+ <!-- The full name in the language we're translating to. -->
+ <fullName><![CDATA[Dutch]]></fullName>
+ <!-- Short name, language name in English -->
+ <shortName><![CDATA[Nederlands]]></shortName>
+ <!-- Short name, language ISO code -->
+ <shortName mainCode="true"><![CDATA[nl]]></shortName>
+ <!-- Short name, language ISO country code -->
+ <shortName><![CDATA[nl_NL]]></shortName>
+ </categorySpecific>
+</package> \ No newline at end of file
diff --git a/plugins/Languages/nl/translation.ts b/plugins/Languages/nl/translation.ts
new file mode 100644
index 0000000..f9dff29
--- /dev/null
+++ b/plugins/Languages/nl/translation.ts
@@ -0,0 +1,865 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>CliParser</name>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineManager</name>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <source>Cannot find any copy engine with motions support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <source>Cannot find any compatible engine!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <source>This copy engine does not support motions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Cannot find any engine with this name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Core</name>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <source>Unable to load the interface, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Unable to load the copy engine, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Transfer mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FacilityEngine</name>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="12"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="13"/>
+ <source>Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="14"/>
+ <source>Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="15"/>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="16"/>
+ <source>Resume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="17"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="18"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="20"/>
+ <source>s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="21"/>
+ <source>Too big</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="22"/>
+ <source>B</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="23"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <source>GB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <source>TB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <source>PB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <source>EB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <source>ZB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <source>YB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HelpDialog</name>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+This version is compiled as version: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>For more informations see the website &lt;a href=&quot;%1&quot; rel=&quot;%1&quot; title=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Platform: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About Qt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Do a crash</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="69"/>
+ <source>For http://portableapps.com/</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="71"/>
+ <source>Portable version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="74"/>
+ <source>Normal version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="79"/>
+ <source>http://ultracopier.first-world.info/</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LocalListener</name>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Timeout while recomposing data from connected clients</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LogThread</name>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Unable to open file to keep the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OptionDialog</name>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugins</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Autodetect the system language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Catch the copy/move as default:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Load at the session loading:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Add</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine by order of preference:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Unable to load the themes plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No option for this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No plugin loaded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %source%, %size%, %destination%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the log file into:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the transfers:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the errors:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the folder operations:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="158"/>
+ <location filename="../../../OptionDialog.cpp" line="159"/>
+ <location filename="../../../OptionDialog.cpp" line="254"/>
+ <location filename="../../../OptionDialog.cpp" line="255"/>
+ <source>Disabled because you have any SessionLoader plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="160"/>
+ <source>Do nothing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="161"/>
+ <source>Ask source as folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="162"/>
+ <source>Ask sources as files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="163"/>
+ <source>Never</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="164"/>
+ <source>When source is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="165"/>
+ <source>When destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="166"/>
+ <source>When source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="167"/>
+ <source>When source or destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="168"/>
+ <source>Always</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="680"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Synchronized log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>When manual open:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Group window when:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginInformation</name>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>About this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Category:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Author:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Date:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Description:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="39"/>
+ <source>CopyEngine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="42"/>
+ <source>Languages</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="45"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="48"/>
+ <source>PluginLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="51"/>
+ <source>SessionLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="54"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="68"/>
+ <source>Information about %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Website:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Title:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginsManager</name>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="206"/>
+ <source>informations.xml is not accessible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="212"/>
+ <source>informations.xml not found into the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="470"/>
+ <source>Dependencies part is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="489"/>
+ <source>Dependencies %1 are not satisfied, for plugin: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Remove %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error while the removing plugin, please check right of remove on the folder:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="238"/>
+ <source>%1, parse error at line %2, column %3: %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="246"/>
+ <source>&quot;package&quot; root tag not found for the xml file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="322"/>
+ <source>Duplicated plugin found, already loaded!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="380"/>
+ <source>English text missing into the informations.xml for the tag: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="388"/>
+ <source>Tag not found: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Are you sure about removing &quot;%1&quot; in version %2?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Previous import is in progress...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Open Ultracopier plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Ultracopier plugin (*.urc)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <source>Unable to open the plugin: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Unable to load the plugin content, please check it: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <source>Unable to create a folder to install the plugin:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <source>Unable to create a file to install the plugin:
+%1
+since:%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <source>Folder with same name is present, skip the plugin installation:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <source>Unable to load the plugin content, please check it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QXzDecode</name>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="33"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="88"/>
+ <source>Memory allocation failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="59"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="77"/>
+ <source>Write error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="92"/>
+ <source>Memory usage limit reached</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="96"/>
+ <source>Not a .xz file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="100"/>
+ <source>Unsupported options in the .xz headers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
+ <source>The file is corrupted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="109"/>
+ <source>Bug!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="119"/>
+ <source>The input data is too short</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SystrayIcon</name>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="88"/>
+ <source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="94"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="105"/>
+ <source>Searching informations...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="120"/>
+ <source>Not catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="125"/>
+ <source>Semi catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="130"/>
+ <source>Catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Action on the systray icon is unknown!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="285"/>
+ <source>&amp;About/Debug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="287"/>
+ <source>&amp;About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="289"/>
+ <source>&amp;Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="290"/>
+ <source>&amp;Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="291"/>
+ <source>A&amp;dd copy/moving</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="336"/>
+ <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <source>Add &amp;copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="342"/>
+ <location filename="../../../SystrayIcon.cpp" line="364"/>
+ <source>Add &amp;transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="346"/>
+ <location filename="../../../SystrayIcon.cpp" line="368"/>
+ <source>Add &amp;move</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Languages/no/flag.png b/plugins/Languages/no/flag.png
new file mode 100644
index 0000000..36e2636
--- /dev/null
+++ b/plugins/Languages/no/flag.png
Binary files differ
diff --git a/plugins/Languages/no/informations.xml b/plugins/Languages/no/informations.xml
new file mode 100644
index 0000000..6affdc9
--- /dev/null
+++ b/plugins/Languages/no/informations.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Translation of Ultracopier to norwegian]]></title><!-- english is required -->
+ <!-- What kind of plugin this is -->
+ <category>Languages</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 -->
+ <!-- the date-time format should be in timestamps format -->
+ <pubDate>1287496800</pubDate>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to norwegian. Done for version 0.3.0.0. For more details see the web site.]]></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.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>no</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
+ ]]></dependencies>
+ <!-- Additional information that is specific to the category (in this case Language). -->
+ <categorySpecific>
+ <!-- The full name in the language we're translating to. -->
+ <fullName><![CDATA[Norske]]></fullName>
+ <!-- Short name, language name in English -->
+ <shortName><![CDATA[Norwegian]]></shortName>
+ <!-- Short name, language ISO code -->
+ <shortName mainCode="true"><![CDATA[no]]></shortName>
+ <!-- Short name, language ISO country code -->
+ <shortName><![CDATA[no_NO]]></shortName>
+ </categorySpecific>
+</package> \ No newline at end of file
diff --git a/plugins/Languages/no/translation.ts b/plugins/Languages/no/translation.ts
new file mode 100644
index 0000000..f9dff29
--- /dev/null
+++ b/plugins/Languages/no/translation.ts
@@ -0,0 +1,865 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>CliParser</name>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineManager</name>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <source>Cannot find any copy engine with motions support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <source>Cannot find any compatible engine!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <source>This copy engine does not support motions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Cannot find any engine with this name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Core</name>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <source>Unable to load the interface, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Unable to load the copy engine, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Transfer mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FacilityEngine</name>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="12"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="13"/>
+ <source>Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="14"/>
+ <source>Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="15"/>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="16"/>
+ <source>Resume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="17"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="18"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="20"/>
+ <source>s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="21"/>
+ <source>Too big</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="22"/>
+ <source>B</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="23"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <source>GB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <source>TB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <source>PB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <source>EB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <source>ZB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <source>YB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HelpDialog</name>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+This version is compiled as version: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>For more informations see the website &lt;a href=&quot;%1&quot; rel=&quot;%1&quot; title=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Platform: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About Qt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Do a crash</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="69"/>
+ <source>For http://portableapps.com/</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="71"/>
+ <source>Portable version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="74"/>
+ <source>Normal version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="79"/>
+ <source>http://ultracopier.first-world.info/</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LocalListener</name>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Timeout while recomposing data from connected clients</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LogThread</name>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Unable to open file to keep the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OptionDialog</name>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugins</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Autodetect the system language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Catch the copy/move as default:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Load at the session loading:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Add</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine by order of preference:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Unable to load the themes plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No option for this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No plugin loaded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %source%, %size%, %destination%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the log file into:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the transfers:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the errors:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the folder operations:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="158"/>
+ <location filename="../../../OptionDialog.cpp" line="159"/>
+ <location filename="../../../OptionDialog.cpp" line="254"/>
+ <location filename="../../../OptionDialog.cpp" line="255"/>
+ <source>Disabled because you have any SessionLoader plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="160"/>
+ <source>Do nothing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="161"/>
+ <source>Ask source as folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="162"/>
+ <source>Ask sources as files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="163"/>
+ <source>Never</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="164"/>
+ <source>When source is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="165"/>
+ <source>When destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="166"/>
+ <source>When source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="167"/>
+ <source>When source or destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="168"/>
+ <source>Always</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="680"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Synchronized log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>When manual open:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Group window when:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginInformation</name>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>About this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Category:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Author:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Date:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Description:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="39"/>
+ <source>CopyEngine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="42"/>
+ <source>Languages</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="45"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="48"/>
+ <source>PluginLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="51"/>
+ <source>SessionLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="54"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="68"/>
+ <source>Information about %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Website:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Title:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginsManager</name>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="206"/>
+ <source>informations.xml is not accessible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="212"/>
+ <source>informations.xml not found into the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="470"/>
+ <source>Dependencies part is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="489"/>
+ <source>Dependencies %1 are not satisfied, for plugin: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Remove %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error while the removing plugin, please check right of remove on the folder:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="238"/>
+ <source>%1, parse error at line %2, column %3: %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="246"/>
+ <source>&quot;package&quot; root tag not found for the xml file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="322"/>
+ <source>Duplicated plugin found, already loaded!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="380"/>
+ <source>English text missing into the informations.xml for the tag: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="388"/>
+ <source>Tag not found: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Are you sure about removing &quot;%1&quot; in version %2?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Previous import is in progress...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Open Ultracopier plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Ultracopier plugin (*.urc)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <source>Unable to open the plugin: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Unable to load the plugin content, please check it: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <source>Unable to create a folder to install the plugin:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <source>Unable to create a file to install the plugin:
+%1
+since:%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <source>Folder with same name is present, skip the plugin installation:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <source>Unable to load the plugin content, please check it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QXzDecode</name>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="33"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="88"/>
+ <source>Memory allocation failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="59"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="77"/>
+ <source>Write error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="92"/>
+ <source>Memory usage limit reached</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="96"/>
+ <source>Not a .xz file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="100"/>
+ <source>Unsupported options in the .xz headers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
+ <source>The file is corrupted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="109"/>
+ <source>Bug!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="119"/>
+ <source>The input data is too short</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SystrayIcon</name>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="88"/>
+ <source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="94"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="105"/>
+ <source>Searching informations...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="120"/>
+ <source>Not catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="125"/>
+ <source>Semi catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="130"/>
+ <source>Catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Action on the systray icon is unknown!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="285"/>
+ <source>&amp;About/Debug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="287"/>
+ <source>&amp;About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="289"/>
+ <source>&amp;Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="290"/>
+ <source>&amp;Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="291"/>
+ <source>A&amp;dd copy/moving</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="336"/>
+ <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <source>Add &amp;copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="342"/>
+ <location filename="../../../SystrayIcon.cpp" line="364"/>
+ <source>Add &amp;transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="346"/>
+ <location filename="../../../SystrayIcon.cpp" line="368"/>
+ <source>Add &amp;move</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Languages/pl/flag.png b/plugins/Languages/pl/flag.png
new file mode 100644
index 0000000..55595d6
--- /dev/null
+++ b/plugins/Languages/pl/flag.png
Binary files differ
diff --git a/plugins/Languages/pl/informations.xml b/plugins/Languages/pl/informations.xml
new file mode 100644
index 0000000..13324cb
--- /dev/null
+++ b/plugins/Languages/pl/informations.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Translation of Ultracopier to polish]]></title><!-- english is required -->
+ <!-- What kind of plugin this is -->
+ <category>Languages</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 -->
+ <!-- the date-time format should be in timestamps format -->
+ <pubDate>1287496800</pubDate>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to polish. Done for version 0.3.0.0. For more details see the web site.]]></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.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>pl</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
+ ]]></dependencies>
+ <!-- Additional information that is specific to the category (in this case Language). -->
+ <categorySpecific>
+ <!-- The full name in the language we're translating to. -->
+ <fullName><![CDATA[Polski]]></fullName>
+ <!-- Short name, language name in English -->
+ <shortName><![CDATA[Polish]]></shortName>
+ <!-- Short name, language ISO code -->
+ <shortName mainCode="true"><![CDATA[pl]]></shortName>
+ <!-- Short name, language ISO country code -->
+ <shortName><![CDATA[pl_PL]]></shortName>
+ </categorySpecific>
+</package> \ No newline at end of file
diff --git a/plugins/Languages/pl/translation.ts b/plugins/Languages/pl/translation.ts
new file mode 100644
index 0000000..f9dff29
--- /dev/null
+++ b/plugins/Languages/pl/translation.ts
@@ -0,0 +1,865 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>CliParser</name>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineManager</name>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <source>Cannot find any copy engine with motions support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <source>Cannot find any compatible engine!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <source>This copy engine does not support motions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Cannot find any engine with this name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Core</name>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <source>Unable to load the interface, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Unable to load the copy engine, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Transfer mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FacilityEngine</name>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="12"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="13"/>
+ <source>Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="14"/>
+ <source>Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="15"/>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="16"/>
+ <source>Resume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="17"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="18"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="20"/>
+ <source>s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="21"/>
+ <source>Too big</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="22"/>
+ <source>B</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="23"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <source>GB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <source>TB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <source>PB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <source>EB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <source>ZB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <source>YB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HelpDialog</name>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+This version is compiled as version: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>For more informations see the website &lt;a href=&quot;%1&quot; rel=&quot;%1&quot; title=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Platform: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About Qt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Do a crash</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="69"/>
+ <source>For http://portableapps.com/</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="71"/>
+ <source>Portable version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="74"/>
+ <source>Normal version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="79"/>
+ <source>http://ultracopier.first-world.info/</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LocalListener</name>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Timeout while recomposing data from connected clients</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LogThread</name>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Unable to open file to keep the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OptionDialog</name>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugins</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Autodetect the system language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Catch the copy/move as default:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Load at the session loading:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Add</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine by order of preference:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Unable to load the themes plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No option for this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No plugin loaded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %source%, %size%, %destination%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the log file into:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the transfers:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the errors:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the folder operations:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="158"/>
+ <location filename="../../../OptionDialog.cpp" line="159"/>
+ <location filename="../../../OptionDialog.cpp" line="254"/>
+ <location filename="../../../OptionDialog.cpp" line="255"/>
+ <source>Disabled because you have any SessionLoader plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="160"/>
+ <source>Do nothing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="161"/>
+ <source>Ask source as folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="162"/>
+ <source>Ask sources as files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="163"/>
+ <source>Never</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="164"/>
+ <source>When source is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="165"/>
+ <source>When destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="166"/>
+ <source>When source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="167"/>
+ <source>When source or destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="168"/>
+ <source>Always</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="680"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Synchronized log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>When manual open:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Group window when:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginInformation</name>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>About this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Category:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Author:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Date:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Description:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="39"/>
+ <source>CopyEngine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="42"/>
+ <source>Languages</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="45"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="48"/>
+ <source>PluginLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="51"/>
+ <source>SessionLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="54"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="68"/>
+ <source>Information about %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Website:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Title:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginsManager</name>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="206"/>
+ <source>informations.xml is not accessible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="212"/>
+ <source>informations.xml not found into the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="470"/>
+ <source>Dependencies part is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="489"/>
+ <source>Dependencies %1 are not satisfied, for plugin: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Remove %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error while the removing plugin, please check right of remove on the folder:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="238"/>
+ <source>%1, parse error at line %2, column %3: %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="246"/>
+ <source>&quot;package&quot; root tag not found for the xml file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="322"/>
+ <source>Duplicated plugin found, already loaded!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="380"/>
+ <source>English text missing into the informations.xml for the tag: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="388"/>
+ <source>Tag not found: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Are you sure about removing &quot;%1&quot; in version %2?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Previous import is in progress...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Open Ultracopier plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Ultracopier plugin (*.urc)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <source>Unable to open the plugin: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Unable to load the plugin content, please check it: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <source>Unable to create a folder to install the plugin:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <source>Unable to create a file to install the plugin:
+%1
+since:%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <source>Folder with same name is present, skip the plugin installation:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <source>Unable to load the plugin content, please check it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QXzDecode</name>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="33"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="88"/>
+ <source>Memory allocation failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="59"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="77"/>
+ <source>Write error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="92"/>
+ <source>Memory usage limit reached</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="96"/>
+ <source>Not a .xz file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="100"/>
+ <source>Unsupported options in the .xz headers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
+ <source>The file is corrupted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="109"/>
+ <source>Bug!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="119"/>
+ <source>The input data is too short</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SystrayIcon</name>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="88"/>
+ <source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="94"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="105"/>
+ <source>Searching informations...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="120"/>
+ <source>Not catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="125"/>
+ <source>Semi catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="130"/>
+ <source>Catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Action on the systray icon is unknown!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="285"/>
+ <source>&amp;About/Debug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="287"/>
+ <source>&amp;About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="289"/>
+ <source>&amp;Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="290"/>
+ <source>&amp;Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="291"/>
+ <source>A&amp;dd copy/moving</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="336"/>
+ <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <source>Add &amp;copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="342"/>
+ <location filename="../../../SystrayIcon.cpp" line="364"/>
+ <source>Add &amp;transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="346"/>
+ <location filename="../../../SystrayIcon.cpp" line="368"/>
+ <source>Add &amp;move</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Languages/pt/flag.png b/plugins/Languages/pt/flag.png
new file mode 100644
index 0000000..4d5cedb
--- /dev/null
+++ b/plugins/Languages/pt/flag.png
Binary files differ
diff --git a/plugins/Languages/pt/informations.xml b/plugins/Languages/pt/informations.xml
new file mode 100644
index 0000000..6361f92
--- /dev/null
+++ b/plugins/Languages/pt/informations.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Translation of Ultracopier to portuguese]]></title><!-- english is required -->
+ <!-- What kind of plugin this is -->
+ <category>Languages</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 -->
+ <!-- the date-time format should be in timestamps format -->
+ <pubDate>1287496800</pubDate>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to portuguese. Done for version 0.3.0.0. For more details see the web site.]]></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.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>pt</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
+ ]]></dependencies>
+ <!-- Additional information that is specific to the category (in this case Language). -->
+ <categorySpecific>
+ <!-- The full name in the language we're translating to. -->
+ <fullName><![CDATA[Português]]></fullName>
+ <!-- Short name, language name in English -->
+ <shortName><![CDATA[Portuguese]]></shortName>
+ <!-- Short name, language ISO code -->
+ <shortName mainCode="true"><![CDATA[pt]]></shortName>
+ <!-- Short name, language ISO country code -->
+ <shortName><![CDATA[pt_PT]]></shortName>
+ </categorySpecific>
+</package> \ No newline at end of file
diff --git a/plugins/Languages/pt/translation.ts b/plugins/Languages/pt/translation.ts
new file mode 100644
index 0000000..f9dff29
--- /dev/null
+++ b/plugins/Languages/pt/translation.ts
@@ -0,0 +1,865 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>CliParser</name>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineManager</name>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <source>Cannot find any copy engine with motions support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <source>Cannot find any compatible engine!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <source>This copy engine does not support motions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Cannot find any engine with this name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Core</name>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <source>Unable to load the interface, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Unable to load the copy engine, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Transfer mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FacilityEngine</name>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="12"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="13"/>
+ <source>Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="14"/>
+ <source>Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="15"/>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="16"/>
+ <source>Resume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="17"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="18"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="20"/>
+ <source>s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="21"/>
+ <source>Too big</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="22"/>
+ <source>B</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="23"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <source>GB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <source>TB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <source>PB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <source>EB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <source>ZB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <source>YB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HelpDialog</name>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+This version is compiled as version: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>For more informations see the website &lt;a href=&quot;%1&quot; rel=&quot;%1&quot; title=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Platform: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About Qt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Do a crash</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="69"/>
+ <source>For http://portableapps.com/</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="71"/>
+ <source>Portable version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="74"/>
+ <source>Normal version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="79"/>
+ <source>http://ultracopier.first-world.info/</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LocalListener</name>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Timeout while recomposing data from connected clients</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LogThread</name>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Unable to open file to keep the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OptionDialog</name>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugins</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Autodetect the system language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Catch the copy/move as default:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Load at the session loading:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Add</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine by order of preference:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Unable to load the themes plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No option for this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No plugin loaded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %source%, %size%, %destination%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the log file into:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the transfers:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the errors:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the folder operations:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="158"/>
+ <location filename="../../../OptionDialog.cpp" line="159"/>
+ <location filename="../../../OptionDialog.cpp" line="254"/>
+ <location filename="../../../OptionDialog.cpp" line="255"/>
+ <source>Disabled because you have any SessionLoader plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="160"/>
+ <source>Do nothing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="161"/>
+ <source>Ask source as folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="162"/>
+ <source>Ask sources as files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="163"/>
+ <source>Never</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="164"/>
+ <source>When source is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="165"/>
+ <source>When destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="166"/>
+ <source>When source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="167"/>
+ <source>When source or destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="168"/>
+ <source>Always</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="680"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Synchronized log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>When manual open:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Group window when:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginInformation</name>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>About this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Category:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Author:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Date:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Description:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="39"/>
+ <source>CopyEngine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="42"/>
+ <source>Languages</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="45"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="48"/>
+ <source>PluginLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="51"/>
+ <source>SessionLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="54"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="68"/>
+ <source>Information about %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Website:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Title:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginsManager</name>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="206"/>
+ <source>informations.xml is not accessible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="212"/>
+ <source>informations.xml not found into the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="470"/>
+ <source>Dependencies part is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="489"/>
+ <source>Dependencies %1 are not satisfied, for plugin: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Remove %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error while the removing plugin, please check right of remove on the folder:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="238"/>
+ <source>%1, parse error at line %2, column %3: %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="246"/>
+ <source>&quot;package&quot; root tag not found for the xml file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="322"/>
+ <source>Duplicated plugin found, already loaded!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="380"/>
+ <source>English text missing into the informations.xml for the tag: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="388"/>
+ <source>Tag not found: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Are you sure about removing &quot;%1&quot; in version %2?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Previous import is in progress...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Open Ultracopier plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Ultracopier plugin (*.urc)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <source>Unable to open the plugin: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Unable to load the plugin content, please check it: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <source>Unable to create a folder to install the plugin:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <source>Unable to create a file to install the plugin:
+%1
+since:%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <source>Folder with same name is present, skip the plugin installation:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <source>Unable to load the plugin content, please check it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QXzDecode</name>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="33"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="88"/>
+ <source>Memory allocation failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="59"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="77"/>
+ <source>Write error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="92"/>
+ <source>Memory usage limit reached</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="96"/>
+ <source>Not a .xz file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="100"/>
+ <source>Unsupported options in the .xz headers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
+ <source>The file is corrupted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="109"/>
+ <source>Bug!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="119"/>
+ <source>The input data is too short</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SystrayIcon</name>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="88"/>
+ <source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="94"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="105"/>
+ <source>Searching informations...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="120"/>
+ <source>Not catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="125"/>
+ <source>Semi catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="130"/>
+ <source>Catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Action on the systray icon is unknown!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="285"/>
+ <source>&amp;About/Debug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="287"/>
+ <source>&amp;About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="289"/>
+ <source>&amp;Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="290"/>
+ <source>&amp;Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="291"/>
+ <source>A&amp;dd copy/moving</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="336"/>
+ <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <source>Add &amp;copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="342"/>
+ <location filename="../../../SystrayIcon.cpp" line="364"/>
+ <source>Add &amp;transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="346"/>
+ <location filename="../../../SystrayIcon.cpp" line="368"/>
+ <source>Add &amp;move</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Languages/ru/flag.png b/plugins/Languages/ru/flag.png
new file mode 100644
index 0000000..c2c9d27
--- /dev/null
+++ b/plugins/Languages/ru/flag.png
Binary files differ
diff --git a/plugins/Languages/ru/informations.xml b/plugins/Languages/ru/informations.xml
new file mode 100644
index 0000000..77317e6
--- /dev/null
+++ b/plugins/Languages/ru/informations.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Translation of Ultracopier to russian]]></title><!-- english is required -->
+ <!-- What kind of plugin this is -->
+ <category>Languages</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 -->
+ <!-- the date-time format should be in timestamps format -->
+ <pubDate>1287496800</pubDate>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to russian. Done for version 0.3.0.0. For more details see the web site.]]></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.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>ru</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
+ ]]></dependencies>
+ <!-- Additional information that is specific to the category (in this case Language). -->
+ <categorySpecific>
+ <!-- The full name in the language we're translating to. -->
+ <fullName><![CDATA[русский]]></fullName>
+ <!-- Short name, language name in English -->
+ <shortName><![CDATA[Russian]]></shortName>
+ <!-- Short name, language ISO code -->
+ <shortName mainCode="true"><![CDATA[ru]]></shortName>
+ <!-- Short name, language ISO country code -->
+ <shortName><![CDATA[ru_RU]]></shortName>
+ </categorySpecific>
+</package> \ No newline at end of file
diff --git a/plugins/Languages/ru/translation.ts b/plugins/Languages/ru/translation.ts
new file mode 100644
index 0000000..f9dff29
--- /dev/null
+++ b/plugins/Languages/ru/translation.ts
@@ -0,0 +1,865 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>CliParser</name>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineManager</name>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <source>Cannot find any copy engine with motions support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <source>Cannot find any compatible engine!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <source>This copy engine does not support motions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Cannot find any engine with this name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Core</name>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <source>Unable to load the interface, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Unable to load the copy engine, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Transfer mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FacilityEngine</name>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="12"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="13"/>
+ <source>Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="14"/>
+ <source>Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="15"/>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="16"/>
+ <source>Resume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="17"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="18"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="20"/>
+ <source>s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="21"/>
+ <source>Too big</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="22"/>
+ <source>B</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="23"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <source>GB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <source>TB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <source>PB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <source>EB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <source>ZB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <source>YB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HelpDialog</name>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+This version is compiled as version: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>For more informations see the website &lt;a href=&quot;%1&quot; rel=&quot;%1&quot; title=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Platform: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About Qt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Do a crash</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="69"/>
+ <source>For http://portableapps.com/</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="71"/>
+ <source>Portable version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="74"/>
+ <source>Normal version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="79"/>
+ <source>http://ultracopier.first-world.info/</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LocalListener</name>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Timeout while recomposing data from connected clients</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LogThread</name>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Unable to open file to keep the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OptionDialog</name>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugins</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Autodetect the system language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Catch the copy/move as default:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Load at the session loading:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Add</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine by order of preference:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Unable to load the themes plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No option for this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No plugin loaded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %source%, %size%, %destination%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the log file into:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the transfers:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the errors:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the folder operations:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="158"/>
+ <location filename="../../../OptionDialog.cpp" line="159"/>
+ <location filename="../../../OptionDialog.cpp" line="254"/>
+ <location filename="../../../OptionDialog.cpp" line="255"/>
+ <source>Disabled because you have any SessionLoader plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="160"/>
+ <source>Do nothing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="161"/>
+ <source>Ask source as folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="162"/>
+ <source>Ask sources as files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="163"/>
+ <source>Never</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="164"/>
+ <source>When source is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="165"/>
+ <source>When destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="166"/>
+ <source>When source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="167"/>
+ <source>When source or destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="168"/>
+ <source>Always</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="680"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Synchronized log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>When manual open:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Group window when:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginInformation</name>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>About this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Category:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Author:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Date:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Description:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="39"/>
+ <source>CopyEngine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="42"/>
+ <source>Languages</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="45"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="48"/>
+ <source>PluginLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="51"/>
+ <source>SessionLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="54"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="68"/>
+ <source>Information about %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Website:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Title:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginsManager</name>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="206"/>
+ <source>informations.xml is not accessible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="212"/>
+ <source>informations.xml not found into the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="470"/>
+ <source>Dependencies part is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="489"/>
+ <source>Dependencies %1 are not satisfied, for plugin: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Remove %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error while the removing plugin, please check right of remove on the folder:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="238"/>
+ <source>%1, parse error at line %2, column %3: %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="246"/>
+ <source>&quot;package&quot; root tag not found for the xml file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="322"/>
+ <source>Duplicated plugin found, already loaded!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="380"/>
+ <source>English text missing into the informations.xml for the tag: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="388"/>
+ <source>Tag not found: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Are you sure about removing &quot;%1&quot; in version %2?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Previous import is in progress...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Open Ultracopier plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Ultracopier plugin (*.urc)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <source>Unable to open the plugin: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Unable to load the plugin content, please check it: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <source>Unable to create a folder to install the plugin:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <source>Unable to create a file to install the plugin:
+%1
+since:%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <source>Folder with same name is present, skip the plugin installation:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <source>Unable to load the plugin content, please check it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QXzDecode</name>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="33"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="88"/>
+ <source>Memory allocation failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="59"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="77"/>
+ <source>Write error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="92"/>
+ <source>Memory usage limit reached</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="96"/>
+ <source>Not a .xz file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="100"/>
+ <source>Unsupported options in the .xz headers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
+ <source>The file is corrupted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="109"/>
+ <source>Bug!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="119"/>
+ <source>The input data is too short</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SystrayIcon</name>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="88"/>
+ <source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="94"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="105"/>
+ <source>Searching informations...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="120"/>
+ <source>Not catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="125"/>
+ <source>Semi catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="130"/>
+ <source>Catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Action on the systray icon is unknown!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="285"/>
+ <source>&amp;About/Debug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="287"/>
+ <source>&amp;About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="289"/>
+ <source>&amp;Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="290"/>
+ <source>&amp;Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="291"/>
+ <source>A&amp;dd copy/moving</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="336"/>
+ <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <source>Add &amp;copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="342"/>
+ <location filename="../../../SystrayIcon.cpp" line="364"/>
+ <source>Add &amp;transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="346"/>
+ <location filename="../../../SystrayIcon.cpp" line="368"/>
+ <source>Add &amp;move</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Languages/th/flag.png b/plugins/Languages/th/flag.png
new file mode 100644
index 0000000..ce5a42c
--- /dev/null
+++ b/plugins/Languages/th/flag.png
Binary files differ
diff --git a/plugins/Languages/th/informations.xml b/plugins/Languages/th/informations.xml
new file mode 100644
index 0000000..c34055e
--- /dev/null
+++ b/plugins/Languages/th/informations.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Translation of Ultracopier to thai]]></title><!-- english is required -->
+ <!-- What kind of plugin this is -->
+ <category>Languages</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 -->
+ <!-- the date-time format should be in timestamps format -->
+ <pubDate>1287496800</pubDate>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to thai. Done for version 0.3.0.0. For more details see the web site.]]></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.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>th</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
+ ]]></dependencies>
+ <!-- Additional information that is specific to the category (in this case Language). -->
+ <categorySpecific>
+ <!-- The full name in the language we're translating to. -->
+ <fullName><![CDATA[ไทย]]></fullName>
+ <!-- Short name, language name in English -->
+ <shortName><![CDATA[Thai]]></shortName>
+ <!-- Short name, language ISO code -->
+ <shortName mainCode="true"><![CDATA[th]]></shortName>
+ <!-- Short name, language ISO country code -->
+ <shortName><![CDATA[th_TH]]></shortName>
+ </categorySpecific>
+</package> \ No newline at end of file
diff --git a/plugins/Languages/th/translation.ts b/plugins/Languages/th/translation.ts
new file mode 100644
index 0000000..f9dff29
--- /dev/null
+++ b/plugins/Languages/th/translation.ts
@@ -0,0 +1,865 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>CliParser</name>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineManager</name>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <source>Cannot find any copy engine with motions support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <source>Cannot find any compatible engine!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <source>This copy engine does not support motions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Cannot find any engine with this name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Core</name>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <source>Unable to load the interface, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Unable to load the copy engine, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Transfer mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FacilityEngine</name>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="12"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="13"/>
+ <source>Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="14"/>
+ <source>Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="15"/>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="16"/>
+ <source>Resume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="17"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="18"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="20"/>
+ <source>s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="21"/>
+ <source>Too big</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="22"/>
+ <source>B</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="23"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <source>GB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <source>TB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <source>PB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <source>EB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <source>ZB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <source>YB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HelpDialog</name>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+This version is compiled as version: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>For more informations see the website &lt;a href=&quot;%1&quot; rel=&quot;%1&quot; title=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Platform: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About Qt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Do a crash</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="69"/>
+ <source>For http://portableapps.com/</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="71"/>
+ <source>Portable version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="74"/>
+ <source>Normal version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="79"/>
+ <source>http://ultracopier.first-world.info/</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LocalListener</name>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Timeout while recomposing data from connected clients</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LogThread</name>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Unable to open file to keep the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OptionDialog</name>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugins</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Autodetect the system language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Catch the copy/move as default:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Load at the session loading:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Add</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine by order of preference:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Unable to load the themes plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No option for this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No plugin loaded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %source%, %size%, %destination%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the log file into:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the transfers:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the errors:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the folder operations:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="158"/>
+ <location filename="../../../OptionDialog.cpp" line="159"/>
+ <location filename="../../../OptionDialog.cpp" line="254"/>
+ <location filename="../../../OptionDialog.cpp" line="255"/>
+ <source>Disabled because you have any SessionLoader plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="160"/>
+ <source>Do nothing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="161"/>
+ <source>Ask source as folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="162"/>
+ <source>Ask sources as files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="163"/>
+ <source>Never</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="164"/>
+ <source>When source is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="165"/>
+ <source>When destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="166"/>
+ <source>When source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="167"/>
+ <source>When source or destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="168"/>
+ <source>Always</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="680"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Synchronized log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>When manual open:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Group window when:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginInformation</name>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>About this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Category:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Author:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Date:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Description:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="39"/>
+ <source>CopyEngine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="42"/>
+ <source>Languages</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="45"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="48"/>
+ <source>PluginLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="51"/>
+ <source>SessionLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="54"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="68"/>
+ <source>Information about %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Website:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Title:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginsManager</name>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="206"/>
+ <source>informations.xml is not accessible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="212"/>
+ <source>informations.xml not found into the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="470"/>
+ <source>Dependencies part is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="489"/>
+ <source>Dependencies %1 are not satisfied, for plugin: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Remove %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error while the removing plugin, please check right of remove on the folder:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="238"/>
+ <source>%1, parse error at line %2, column %3: %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="246"/>
+ <source>&quot;package&quot; root tag not found for the xml file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="322"/>
+ <source>Duplicated plugin found, already loaded!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="380"/>
+ <source>English text missing into the informations.xml for the tag: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="388"/>
+ <source>Tag not found: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Are you sure about removing &quot;%1&quot; in version %2?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Previous import is in progress...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Open Ultracopier plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Ultracopier plugin (*.urc)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <source>Unable to open the plugin: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Unable to load the plugin content, please check it: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <source>Unable to create a folder to install the plugin:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <source>Unable to create a file to install the plugin:
+%1
+since:%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <source>Folder with same name is present, skip the plugin installation:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <source>Unable to load the plugin content, please check it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QXzDecode</name>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="33"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="88"/>
+ <source>Memory allocation failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="59"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="77"/>
+ <source>Write error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="92"/>
+ <source>Memory usage limit reached</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="96"/>
+ <source>Not a .xz file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="100"/>
+ <source>Unsupported options in the .xz headers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
+ <source>The file is corrupted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="109"/>
+ <source>Bug!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="119"/>
+ <source>The input data is too short</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SystrayIcon</name>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="88"/>
+ <source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="94"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="105"/>
+ <source>Searching informations...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="120"/>
+ <source>Not catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="125"/>
+ <source>Semi catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="130"/>
+ <source>Catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Action on the systray icon is unknown!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="285"/>
+ <source>&amp;About/Debug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="287"/>
+ <source>&amp;About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="289"/>
+ <source>&amp;Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="290"/>
+ <source>&amp;Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="291"/>
+ <source>A&amp;dd copy/moving</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="336"/>
+ <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <source>Add &amp;copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="342"/>
+ <location filename="../../../SystrayIcon.cpp" line="364"/>
+ <source>Add &amp;transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="346"/>
+ <location filename="../../../SystrayIcon.cpp" line="368"/>
+ <source>Add &amp;move</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Languages/tr/flag.png b/plugins/Languages/tr/flag.png
new file mode 100644
index 0000000..b72f1d7
--- /dev/null
+++ b/plugins/Languages/tr/flag.png
Binary files differ
diff --git a/plugins/Languages/tr/informations.xml b/plugins/Languages/tr/informations.xml
new file mode 100644
index 0000000..152e248
--- /dev/null
+++ b/plugins/Languages/tr/informations.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Translation of Ultracopier to turkish]]></title><!-- english is required -->
+ <!-- What kind of plugin this is -->
+ <category>Languages</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 -->
+ <!-- the date-time format should be in timestamps format -->
+ <pubDate>1287496800</pubDate>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to turkish. Done for version 0.3.0.0. For more details see the web site.]]></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.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>tr</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
+ ]]></dependencies>
+ <!-- Additional information that is specific to the category (in this case Language). -->
+ <categorySpecific>
+ <!-- The full name in the language we're translating to. -->
+ <fullName><![CDATA[Türk]]></fullName>
+ <!-- Short name, language name in English -->
+ <shortName><![CDATA[Turkish]]></shortName>
+ <!-- Short name, language ISO code -->
+ <shortName mainCode="true"><![CDATA[tr]]></shortName>
+ <!-- Short name, language ISO country code -->
+ <shortName><![CDATA[tr_TR]]></shortName>
+ </categorySpecific>
+</package> \ No newline at end of file
diff --git a/plugins/Languages/tr/translation.ts b/plugins/Languages/tr/translation.ts
new file mode 100644
index 0000000..f9dff29
--- /dev/null
+++ b/plugins/Languages/tr/translation.ts
@@ -0,0 +1,865 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>CliParser</name>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineManager</name>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <source>Cannot find any copy engine with motions support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <source>Cannot find any compatible engine!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <source>This copy engine does not support motions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Cannot find any engine with this name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Core</name>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="147"/>
+ <location filename="../../../Core.cpp" line="236"/>
+ <source>Unable to load the interface, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="241"/>
+ <source>Unable to load the copy engine, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Transfer mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="815"/>
+ <source>Do you want do as a copy? Else if you reply no, it will be moved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FacilityEngine</name>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="12"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="13"/>
+ <source>Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="14"/>
+ <source>Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="15"/>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="16"/>
+ <source>Resume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="17"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="18"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="20"/>
+ <source>s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="21"/>
+ <source>Too big</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="22"/>
+ <source>B</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="23"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <source>GB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <source>TB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <source>PB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <source>EB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <source>ZB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <source>YB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HelpDialog</name>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+This version is compiled as version: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>For more informations see the website &lt;a href=&quot;%1&quot; rel=&quot;%1&quot; title=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Platform: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About Qt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Do a crash</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="69"/>
+ <source>For http://portableapps.com/</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="71"/>
+ <source>Portable version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="74"/>
+ <source>Normal version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="79"/>
+ <source>http://ultracopier.first-world.info/</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LocalListener</name>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Timeout while recomposing data from connected clients</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LogThread</name>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Unable to open file to keep the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OptionDialog</name>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugins</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Autodetect the system language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Catch the copy/move as default:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Load at the session loading:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Add</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine by order of preference:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Unable to load the themes plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No option for this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No plugin loaded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %source%, %size%, %destination%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the log file into:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the transfers:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the errors:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the folder operations:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="158"/>
+ <location filename="../../../OptionDialog.cpp" line="159"/>
+ <location filename="../../../OptionDialog.cpp" line="254"/>
+ <location filename="../../../OptionDialog.cpp" line="255"/>
+ <source>Disabled because you have any SessionLoader plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="160"/>
+ <source>Do nothing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="161"/>
+ <source>Ask source as folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="162"/>
+ <source>Ask sources as files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="163"/>
+ <source>Never</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="164"/>
+ <source>When source is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="165"/>
+ <source>When destination is same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="166"/>
+ <source>When source and destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="167"/>
+ <source>When source or destination are same</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="168"/>
+ <source>Always</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="680"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Synchronized log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>When manual open:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Group window when:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginInformation</name>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>About this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Category:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Author:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Date:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Description:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="39"/>
+ <source>CopyEngine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="42"/>
+ <source>Languages</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="45"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="48"/>
+ <source>PluginLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="51"/>
+ <source>SessionLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="54"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="68"/>
+ <source>Information about %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Website:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Title:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginsManager</name>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="206"/>
+ <source>informations.xml is not accessible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="212"/>
+ <source>informations.xml not found into the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="470"/>
+ <source>Dependencies part is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="489"/>
+ <source>Dependencies %1 are not satisfied, for plugin: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Remove %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error while the removing plugin, please check right of remove on the folder:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="238"/>
+ <source>%1, parse error at line %2, column %3: %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="246"/>
+ <source>&quot;package&quot; root tag not found for the xml file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="322"/>
+ <source>Duplicated plugin found, already loaded!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="380"/>
+ <source>English text missing into the informations.xml for the tag: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="388"/>
+ <source>Tag not found: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Are you sure about removing &quot;%1&quot; in version %2?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Previous import is in progress...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Open Ultracopier plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Ultracopier plugin (*.urc)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <source>Unable to open the plugin: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Unable to load the plugin content, please check it: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <source>Unable to create a folder to install the plugin:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <source>Unable to create a file to install the plugin:
+%1
+since:%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <source>Folder with same name is present, skip the plugin installation:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <source>Unable to load the plugin content, please check it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QXzDecode</name>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="33"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="88"/>
+ <source>Memory allocation failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="59"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="77"/>
+ <source>Write error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="92"/>
+ <source>Memory usage limit reached</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="96"/>
+ <source>Not a .xz file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="100"/>
+ <source>Unsupported options in the .xz headers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
+ <source>The file is corrupted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="109"/>
+ <source>Bug!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="119"/>
+ <source>The input data is too short</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SystrayIcon</name>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="88"/>
+ <source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="94"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="105"/>
+ <source>Searching informations...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="120"/>
+ <source>Not catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="125"/>
+ <source>Semi catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="130"/>
+ <source>Catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Action on the systray icon is unknown!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="285"/>
+ <source>&amp;About/Debug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="287"/>
+ <source>&amp;About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="289"/>
+ <source>&amp;Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="290"/>
+ <source>&amp;Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="291"/>
+ <source>A&amp;dd copy/moving</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="336"/>
+ <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <source>Add &amp;copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="342"/>
+ <location filename="../../../SystrayIcon.cpp" line="364"/>
+ <source>Add &amp;transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="346"/>
+ <location filename="../../../SystrayIcon.cpp" line="368"/>
+ <source>Add &amp;move</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Languages/zh/flag.png b/plugins/Languages/zh/flag.png
new file mode 100644
index 0000000..3c539df
--- /dev/null
+++ b/plugins/Languages/zh/flag.png
Binary files differ
diff --git a/plugins/Languages/zh/informations.xml b/plugins/Languages/zh/informations.xml
new file mode 100644
index 0000000..ea819d7
--- /dev/null
+++ b/plugins/Languages/zh/informations.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Translation of Ultracopier to chinese]]></title><!-- english is required -->
+ <!-- What kind of plugin this is -->
+ <category>Languages</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 -->
+ <!-- the date-time format should be in timestamps format -->
+ <pubDate>1287496800</pubDate>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Translation of Ultracopier to chinese. Done for version 0.3.0.0. For more details see the web site.]]></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.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>ch</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
+ ]]></dependencies>
+ <!-- Additional information that is specific to the category (in this case Language). -->
+ <categorySpecific>
+ <!-- The full name in the language we're translating to. -->
+ <fullName><![CDATA[中国]]></fullName>
+ <!-- Short name, language name in English -->
+ <shortName><![CDATA[Chinese]]></shortName>
+ <!-- Short name, language ISO code -->
+ <shortName mainCode="true"><![CDATA[zh]]></shortName>
+ <!-- Short name, language ISO country code -->
+ <shortName><![CDATA[zh_CN]]></shortName>
+ <shortName><![CDATA[zh_HK]]></shortName>
+ <shortName><![CDATA[zh_TW]]></shortName>
+ <shortName><![CDATA[cn]]></shortName>
+ </categorySpecific>
+</package> \ No newline at end of file
diff --git a/plugins/Languages/zh/translation.ts b/plugins/Languages/zh/translation.ts
new file mode 100644
index 0000000..53fa961
--- /dev/null
+++ b/plugins/Languages/zh/translation.ts
@@ -0,0 +1,800 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>CliParser</name>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CliParser.cpp" line="13"/>
+ <source>Ultracopier is already running, right click on its system tray icon (near the clock) to use it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CopyEngineManager</name>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="192"/>
+ <source>Cannot find any copy engine with motions support</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="197"/>
+ <source>Cannot find any compatible engine!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="217"/>
+ <source>This copy engine does not support motions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../CopyEngineManager.cpp" line="230"/>
+ <source>Cannot find any engine with this name</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Core</name>
+ <message>
+ <location filename="../../../Core.cpp" line="127"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <location filename="../../../Core.cpp" line="221"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="127"/>
+ <location filename="../../../Core.cpp" line="216"/>
+ <source>Unable to load the interface, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../Core.cpp" line="221"/>
+ <source>Unable to load the copy engine, copy aborted</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FacilityEngine</name>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="12"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="13"/>
+ <source>Copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="14"/>
+ <source>Move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="15"/>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="16"/>
+ <source>Resume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="17"/>
+ <source>Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="18"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="20"/>
+ <source>s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="21"/>
+ <source>Too big</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="22"/>
+ <source>B</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="23"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="24"/>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="25"/>
+ <source>GB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="26"/>
+ <source>TB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="27"/>
+ <source>PB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="28"/>
+ <source>EB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="29"/>
+ <source>ZB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../FacilityEngine.cpp" line="30"/>
+ <source>YB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HelpDialog</name>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About ultracopier</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Based on Qt. It provide advanced copier with more advanced feature. It&apos;s under GPL3.
+This version is compiled as version: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>For more informations see the website &lt;a href=&quot;%1&quot; rel=&quot;%1&quot; title=&quot;%1&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0057ae;&quot;&gt;%1&lt;/span&gt;&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Platform: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>About Qt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Do a crash</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Save bug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.ui"/>
+ <source>Close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="69"/>
+ <source>For http://portableapps.com/</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="71"/>
+ <source>Portable version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="74"/>
+ <source>Normal version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../HelpDialog.cpp" line="79"/>
+ <source>http://ultracopier.first-world.info/</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LocalListener</name>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LocalListener.cpp" line="108"/>
+ <source>Timeout while recomposing data from connected clients</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LogThread</name>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../LogThread.cpp" line="51"/>
+ <location filename="../../../LogThread.cpp" line="56"/>
+ <source>Unable to open file to keep the log file, error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>OptionDialog</name>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>General</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugins</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Log</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Autodetect the system language:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Catch the copy/move as default:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Load at the session loading:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Session loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Add</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Copy engine by order of preference:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Themes:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Unable to load the themes plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No option for this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>No plugin loaded</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Browse</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %source%, %size%, %destination%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>The variables are %time%, %path%, %size%, %mtime%, %error%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the log file into:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the transfers:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the errors:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Write the folder operations:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="157"/>
+ <location filename="../../../OptionDialog.cpp" line="158"/>
+ <location filename="../../../OptionDialog.cpp" line="243"/>
+ <location filename="../../../OptionDialog.cpp" line="244"/>
+ <source>Disabled because you have any SessionLoader plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.cpp" line="662"/>
+ <source>Save logs as: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>This write directly the file when it receive the new entry, but it can produce 50% of lost of performance</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../OptionDialog.ui"/>
+ <source>Synchronized log</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginInformation</name>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>About this plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Category:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Author:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Date:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Description:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="39"/>
+ <source>CopyEngine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="42"/>
+ <source>Languages</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="45"/>
+ <source>Listener</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="48"/>
+ <source>PluginLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="51"/>
+ <source>SessionLoader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="54"/>
+ <source>Themes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.cpp" line="68"/>
+ <source>Information about %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Website:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginInformation.ui"/>
+ <source>Title:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginsManager</name>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="206"/>
+ <source>informations.xml is not accessible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="212"/>
+ <source>informations.xml not found into the plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="470"/>
+ <source>Dependencies part is wrong</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="489"/>
+ <source>Dependencies %1 are not satisfied, for plugin: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Remove %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="651"/>
+ <source>Error while the removing plugin, please check right of remove on the folder:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="238"/>
+ <source>%1, parse error at line %2, column %3: %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="246"/>
+ <source>&quot;package&quot; root tag not found for the xml file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="322"/>
+ <source>Duplicated plugin found, already loaded!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="380"/>
+ <source>English text missing into the informations.xml for the tag: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="388"/>
+ <source>Tag not found: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="640"/>
+ <source>Are you sure about removing &quot;%1&quot; in version %2?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="674"/>
+ <source>Previous import is in progress...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Open Ultracopier plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="677"/>
+ <source>Ultracopier plugin (*.urc)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Plugin loader</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="690"/>
+ <source>Unable to open the plugin: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="713"/>
+ <location filename="../../../PluginsManager.cpp" line="829"/>
+ <location filename="../../../PluginsManager.cpp" line="842"/>
+ <source>Unable to load the plugin content, please check it: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="780"/>
+ <source>Unable to create a folder to install the plugin:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="793"/>
+ <source>Unable to create a file to install the plugin:
+%1
+since:%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="811"/>
+ <source>Folder with same name is present, skip the plugin installation:
+%1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../PluginsManager.cpp" line="817"/>
+ <location filename="../../../PluginsManager.cpp" line="823"/>
+ <location filename="../../../PluginsManager.cpp" line="835"/>
+ <source>Unable to load the plugin content, please check it</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QXzDecode</name>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="33"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="88"/>
+ <source>Memory allocation failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="59"/>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="77"/>
+ <source>Write error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="92"/>
+ <source>Memory usage limit reached</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="96"/>
+ <source>Not a .xz file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="100"/>
+ <source>Unsupported options in the .xz headers</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="105"/>
+ <source>The file is corrupted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="109"/>
+ <source>Bug!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../lib/qt-tar-xz/QXzDecode.cpp" line="119"/>
+ <source>The input data is too short</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SystrayIcon</name>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="88"/>
+ <source>No copy listener found. Do the copy manually by right click one the system tray icon.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="94"/>
+ <source>Information</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="105"/>
+ <source>Searching informations...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="120"/>
+ <source>Not catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="125"/>
+ <source>Semi catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="130"/>
+ <source>Catching the explorer copy/move</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Warning</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="237"/>
+ <source>Action on the systray icon is unknown!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="285"/>
+ <source>&amp;About/Debug report</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="287"/>
+ <source>&amp;About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="289"/>
+ <source>&amp;Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="290"/>
+ <source>&amp;Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="291"/>
+ <source>A&amp;dd copy/moving</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="336"/>
+ <location filename="../../../SystrayIcon.cpp" line="358"/>
+ <source>Add &amp;copy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="342"/>
+ <location filename="../../../SystrayIcon.cpp" line="364"/>
+ <source>Add &amp;transfer</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../../SystrayIcon.cpp" line="346"/>
+ <location filename="../../../SystrayIcon.cpp" line="368"/>
+ <source>Add &amp;move</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Listener/catchcopy-v0002/DebugEngineMacro.h b/plugins/Listener/catchcopy-v0002/DebugEngineMacro.h
new file mode 100644
index 0000000..a3dd648
--- /dev/null
+++ b/plugins/Listener/catchcopy-v0002/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_DEBUG
+ #define ULTRACOPIER_DEBUGCONSOLE(a,b) void()
+#endif // ULTRACOPIER_DEBUG
+
+#endif // DEBUGENGINEMACRO_H
+
+
+
+
diff --git a/plugins/Listener/catchcopy-v0002/Environment.h b/plugins/Listener/catchcopy-v0002/Environment.h
new file mode 100644
index 0000000..94fd104
--- /dev/null
+++ b/plugins/Listener/catchcopy-v0002/Environment.h
@@ -0,0 +1,11 @@
+/** \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 "DebugEngineMacro.h"
+
diff --git a/plugins/Listener/catchcopy-v0002/StructEnumDefinition.h b/plugins/Listener/catchcopy-v0002/StructEnumDefinition.h
new file mode 100644
index 0000000..c1758f4
--- /dev/null
+++ b/plugins/Listener/catchcopy-v0002/StructEnumDefinition.h
@@ -0,0 +1 @@
+#include "../../../StructEnumDefinition.h"
diff --git a/plugins/Listener/catchcopy-v0002/Variable.h b/plugins/Listener/catchcopy-v0002/Variable.h
new file mode 100644
index 0000000..8179c93
--- /dev/null
+++ b/plugins/Listener/catchcopy-v0002/Variable.h
@@ -0,0 +1,16 @@
+/** \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
+
+#endif // VARIABLE_H
+
+
+
diff --git a/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ClientCatchcopy.cpp b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ClientCatchcopy.cpp
new file mode 100755
index 0000000..214caca
--- /dev/null
+++ b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ClientCatchcopy.cpp
@@ -0,0 +1,379 @@
+/** \file ClientCatchcopy.cpp
+\brief Define the catchcopy client
+\author alpha_one_x86
+\version 0002
+\date 2010 */
+
+#include "ClientCatchcopy.h"
+#include "VariablesCatchcopy.h"
+#include "ExtraSocketCatchcopy.h"
+
+ClientCatchcopy::ClientCatchcopy()
+{
+ disconnectedFromSocket();
+ error_string="Unknown error";
+ detectTimeOut.setSingleShot(true);
+ detectTimeOut.setInterval(CATCHCOPY_COMMUNICATION_TIMEOUT); // the max time to without send packet
+ connect(&socket, SIGNAL(connected()), this, SIGNAL(connected()));
+ connect(&socket, SIGNAL(disconnected()), this, SIGNAL(disconnected()));
+ connect(&socket, SIGNAL(disconnected()), this, SLOT(disconnectedFromSocket()));
+ connect(&socket, SIGNAL(stateChanged(QLocalSocket::LocalSocketState)), this, SIGNAL(stateChanged(QLocalSocket::LocalSocketState)));
+ connect(&socket, SIGNAL(error(QLocalSocket::LocalSocketError)), this, SIGNAL(errorSocket(QLocalSocket::LocalSocketError)));
+ connect(&socket, SIGNAL(readyRead()), this, SLOT(readyRead()));
+ connect(&detectTimeOut, SIGNAL(timeout()), this, SLOT(checkTimeOut()));
+ connect(&socket, SIGNAL(connected()), this, SLOT(socketIsConnected()));
+}
+
+void ClientCatchcopy::checkTimeOut()
+{
+ if(haveData)
+ {
+ error_string="The server is too long to send the next part of the reply";
+ emit error(error_string);
+ disconnectFromServer();
+ }
+}
+
+const QString ClientCatchcopy::errorString()
+{
+ return error_string;
+}
+
+void ClientCatchcopy::socketIsConnected()
+{
+ orderIdFirstSendProtocol=sendProtocol();
+}
+
+void ClientCatchcopy::connectToServer()
+{
+ socket.connectToServer(ExtraSocketCatchcopy::pathSocket());
+}
+
+void ClientCatchcopy::disconnectFromServer()
+{
+ socket.abort();
+ socket.disconnectFromServer();
+}
+
+const QString ClientCatchcopy::errorStringSocket()
+{
+ return socket.errorString();
+}
+
+/// \brief to send stream of string list
+quint32 ClientCatchcopy::sendRawOrderList(const QStringList & order)
+{
+ if(!socket.isValid())
+ {
+ error_string="Socket is not valid, try send: "+order.join(";");
+ emit error(error_string);
+ return -1;
+ }
+ if(socket.state()!=QLocalSocket::ConnectedState)
+ {
+ error_string="Socket is not connected "+QString::number(socket.state());
+ emit error(error_string);
+ return -1;
+ }
+ do
+ {
+ idNextOrder++;
+ if(idNextOrder>2000000000)
+ idNextOrder=0;
+ } while(notRepliedQuery.contains(idNextOrder));
+ notRepliedQuery << idNextOrder;
+ QByteArray block;
+ QDataStream out(&block, QIODevice::WriteOnly);
+ out.setVersion(QDataStream::Qt_4_4);
+ out << int(0);
+ out << idNextOrder;
+ out << order;
+ out.device()->seek(0);
+ out << block.size();
+ if(idNextOrder!=1) // drop if internal protocol send
+ {
+ emit dataSend(idNextOrder,block);
+ emit dataSend(idNextOrder,order);
+ }
+ do //cut string list and send it as block of 32KB
+ {
+ QByteArray blockToSend;
+ int byteWriten;
+ blockToSend=block.left(32*1024);//32KB
+ block.remove(0,blockToSend.size());
+ byteWriten = socket.write(blockToSend);
+ if(!socket.isValid())
+ {
+ error_string="Socket is not valid";
+ emit error(error_string);
+ return -1;
+ }
+ if(socket.errorString()!="Unknown error" && socket.errorString()!="")
+ {
+ error_string=socket.errorString();
+ emit error(error_string);
+ return -1;
+ }
+ if(blockToSend.size()!=byteWriten)
+ {
+ error_string="All the bytes have not be written";
+ emit error(error_string);
+ return -1;
+ }
+ }
+ while(block.size());
+ return idNextOrder;
+}
+
+void ClientCatchcopy::readyRead()
+{
+ while(socket.bytesAvailable()>0)
+ {
+ if(!haveData)
+ {
+ if(socket.bytesAvailable()<(int)sizeof(int))//int of size cuted
+ {
+ /* error_string="Bytes available is not sufficient to do a int";
+ emit error(error_string);
+ disconnectFromServer();*/
+ return;
+ }
+ QDataStream in(&socket);
+ in.setVersion(QDataStream::Qt_4_4);
+ in >> dataSize;
+ dataSize-=sizeof(int);
+ if(dataSize>64*1024*1024) // 64MB
+ {
+ error_string="Reply size is >64MB, seam corrupted";
+ emit error(error_string);
+ disconnectFromServer();
+ return;
+ }
+ if(dataSize<(int)(sizeof(int) //orderId
+ + sizeof(quint32) //returnCode
+ + sizeof(quint32) //string list size
+ ))
+ {
+ error_string="Reply size is too small to have correct code";
+ emit error(error_string);
+ disconnectFromServer();
+ return;
+ }
+ }
+ if(dataSize<(data.size()+socket.bytesAvailable()))
+ data.append(socket.read(dataSize-data.size()));
+ else
+ data.append(socket.readAll());
+ if(dataSize==data.size())
+ {
+ if(!checkDataIntegrity(data))
+ {
+ data.clear();
+ qWarning() << "Data of the reply is wrong";
+ return;
+ }
+ QStringList returnList;
+ quint32 orderId;
+ quint32 returnCode;
+ QDataStream in(data);
+ in.setVersion(QDataStream::Qt_4_4);
+ in >> orderId;
+ in >> returnCode;
+ in >> returnList;
+ data.clear();
+ if(orderId!=orderIdFirstSendProtocol)
+ {
+ if(!notRepliedQuery.contains(orderId))
+ qWarning() << "Unknown query not replied:" << orderId;
+ else
+ {
+ if(!parseReply(orderId,returnCode,returnList))
+ emit unknowReply(orderId);
+ emit newReply(orderId,returnCode,returnList);
+ }
+ }
+ else
+ {
+ if(!sendProtocolReplied)
+ {
+ sendProtocolReplied=true;
+ if(returnCode!=1000)
+ {
+ error_string="Protocol not supported";
+ emit error(error_string);
+ disconnectFromServer();
+ return;
+ }
+ }
+ else
+ {
+ error_string=QString("First send protocol send with the query id %1 have been already previously replied").arg(orderIdFirstSendProtocol);
+ emit error(error_string);
+ disconnectFromServer();
+ return;
+ }
+ }
+ }
+ }
+ if(haveData)
+ detectTimeOut.start();
+ else
+ detectTimeOut.stop();
+}
+
+bool ClientCatchcopy::checkDataIntegrity(QByteArray data)
+{
+ quint32 orderId;
+ qint32 replyCode;
+ qint32 listSize;
+ QDataStream in(data);
+ in.setVersion(QDataStream::Qt_4_4);
+ in >> orderId;
+ in >> replyCode;
+ in >> listSize;
+ if(listSize>65535)
+ {
+ emit error("List size is wrong");
+ qWarning() << "List size is wrong";
+ return false;
+ }
+ int index=0;
+ while(index<listSize)
+ {
+ qint32 stringSize;
+ in >> stringSize;
+ if(stringSize>65535)
+ {
+ emit error("String size is wrong");
+ qWarning() << "String size is wrong";
+ return false;
+ }
+ if(stringSize>(in.device()->size()-in.device()->pos()))
+ {
+ emit error(QString("String size is greater than the data: %1>(%2-%3)").arg(stringSize).arg(in.device()->size()).arg(in.device()->pos()));
+ qWarning() << QString("String size is greater than the data: %1>(%2-%3)").arg(stringSize).arg(in.device()->size()).arg(in.device()->pos());
+ return false;
+ }
+ in.device()->seek(in.device()->pos()+stringSize);
+ index++;
+ }
+ if(in.device()->size()!=in.device()->pos())
+ {
+ emit error("Remaining data after string list parsing");
+ qWarning() << "Remaining data after string list parsing";
+ return false;
+ }
+ return true;
+}
+
+QLocalSocket::LocalSocketState ClientCatchcopy::state()
+{
+ return socket.state();
+}
+
+void ClientCatchcopy::disconnectedFromSocket()
+{
+ haveData = false;
+ orderIdFirstSendProtocol= 0;
+ idNextOrder = 0;
+ sendProtocolReplied = false;
+ notRepliedQuery.clear();
+}
+
+/// \brief to send the protocol version used
+quint32 ClientCatchcopy::sendProtocol()
+{
+ return sendRawOrderList(QStringList() << "protocol" << CATCHCOPY_PROTOCOL_VERSION);
+}
+
+quint32 ClientCatchcopy::askServerName()
+{
+ return sendRawOrderList(QStringList() << "server" << "name?");
+}
+
+quint32 ClientCatchcopy::setClientName(const QString & name)
+{
+ return sendRawOrderList(QStringList() << "client" << name);
+}
+
+quint32 ClientCatchcopy::checkProtocolExtension(const QString & name)
+{
+ return sendRawOrderList(QStringList() << "protocol extension" << name);
+}
+
+quint32 ClientCatchcopy::checkProtocolExtension(const QString & name,const QString & version)
+{
+ return sendRawOrderList(QStringList() << "protocol extension" << name << version);
+}
+
+quint32 ClientCatchcopy::addCopyWithDestination(const QStringList & sources,const QString & destination)
+{
+ return sendRawOrderList(QStringList() << "cp" << sources << destination);
+}
+
+quint32 ClientCatchcopy::addCopyWithoutDestination(const QStringList & sources)
+{
+ return sendRawOrderList(QStringList() << "cp-?" << sources);
+}
+
+quint32 ClientCatchcopy::addMoveWithDestination(const QStringList & sources,const QString & destination)
+{
+ return sendRawOrderList(QStringList() << "mv" << sources << destination);
+}
+
+quint32 ClientCatchcopy::addMoveWithoutDestination(const QStringList & sources)
+{
+ return sendRawOrderList(QStringList() << "mv-?" << sources);
+}
+
+bool ClientCatchcopy::parseReply(quint32 orderId,quint32 returnCode,QStringList returnList)
+{
+ switch(returnCode)
+ {
+ case 1000:
+ emit protocolSupported(orderId);
+ break;
+ case 1001:
+ case 1002:
+ if(returnCode==1001)
+ emit protocolExtensionSupported(orderId,true);
+ else
+ emit protocolExtensionSupported(orderId,false);
+ break;
+ case 1003:
+ emit clientRegistered(orderId);
+ break;
+ case 1004:
+ if(returnList.size()!=1)
+ emit unknowOrder(orderId);
+ else
+ emit serverName(orderId,returnList.last());
+ break;
+ case 1005:
+ case 1006:
+ if(returnCode==1005)
+ emit copyFinished(orderId,false);
+ else
+ emit copyFinished(orderId,true);
+ break;
+ case 1007:
+ emit copyCanceled(orderId);
+ break;
+ case 5000:
+ emit incorrectArgumentListSize(orderId);
+ break;
+ case 5001:
+ emit incorrectArgument(orderId);
+ break;
+ case 5002:
+ emit unknowOrder(orderId); //the server have not understand the order
+ break;
+ case 5003:
+ emit protocolNotSupported(orderId);
+ break;
+ default:
+ return false;
+ }
+ return true;
+}
+
diff --git a/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ClientCatchcopy.h b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ClientCatchcopy.h
new file mode 100755
index 0000000..278b0cd
--- /dev/null
+++ b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ClientCatchcopy.h
@@ -0,0 +1,114 @@
+/** \file ClientCatchcopy.h
+\brief Define the catchcopy client
+\author alpha_one_x86
+\version 0002
+\date 2010 */
+
+#ifndef CLIENTCATCHCOPY_H
+#define CLIENTCATCHCOPY_H
+
+#include <QObject>
+#include <QLocalSocket>
+#include <QStringList>
+#include <QString>
+#include <QByteArray>
+#include <QTimer>
+
+/// \brief Define the catchcopy client
+class ClientCatchcopy : public QObject
+{
+ Q_OBJECT
+ public:
+ ClientCatchcopy();
+ /// \brief get the socket stat
+ QLocalSocket::LocalSocketState state();
+ /// \brief error string about the socket
+ const QString errorStringSocket();
+ /// \brief general error string
+ const QString errorString();
+ public slots:
+ void connectToServer();
+ void disconnectFromServer();
+ //to test and internal use
+ /// \brief to send order
+ quint32 sendProtocol();
+ /// \brief ask the server name
+ quint32 askServerName();
+ /// \brief set the client name
+ quint32 setClientName(const QString & name);
+ /// \brief check protocol extension
+ quint32 checkProtocolExtension(const QString & name);
+ /// \brief check protocol extension and version
+ quint32 checkProtocolExtension(const QString & name,const QString & version);
+ /// \brief add copy with destination
+ quint32 addCopyWithDestination(const QStringList & sources,const QString & destination);
+ /// \brief add copy without destination
+ quint32 addCopyWithoutDestination(const QStringList & sources);
+ /// \brief add move with destination
+ quint32 addMoveWithDestination(const QStringList & sources,const QString & destination);
+ /// \brief add move without destination
+ quint32 addMoveWithoutDestination(const QStringList & sources);
+ /// \brief to send stream of string list
+ quint32 sendRawOrderList(const QStringList & order);
+ signals:
+ /// \brief is connected
+ void connected();
+ /// \brief is disconnected
+ void disconnected();
+ /// \brief the socket state have changed
+ void stateChanged(QLocalSocket::LocalSocketState socketState);
+ /// \brief send the error string
+ void error(QString error);
+ /// \brief send socket error
+ void errorSocket(QLocalSocket::LocalSocketError socketError);
+ /// \brief have new reply
+ void newReply(quint32 orderId,quint32 returnCode,QStringList returnList);
+ /// \brief have data send
+ void dataSend(quint32 orderId,QByteArray data);
+ /// \brief have data send by string list
+ void dataSend(quint32 orderId,QStringList data);
+ /// \brief have unknow reply
+ void unknowReply(quint32 orderId);
+ //reply
+ /// \brief protocol is supported
+ void protocolSupported(quint32 orderId);
+ /// \brief incorrect argument list size
+ void incorrectArgumentListSize(quint32 orderId);
+ /// \brief incorrect argument
+ void incorrectArgument(quint32 orderId);
+ /// \brief protocol not supported
+ void protocolNotSupported(quint32 orderId);
+ /// \brief protocol extension supported
+ void protocolExtensionSupported(quint32 orderId,bool isSupported);
+ /// \brief client is registred
+ void clientRegistered(quint32 orderId);
+ /// \brief have the server name
+ void serverName(quint32 orderId,QString name);
+ /// \brief copy finished
+ void copyFinished(quint32 orderId,bool withError);
+ /// \brief copy canceled
+ void copyCanceled(quint32 orderId);
+ /// \brief have unknow order
+ void unknowOrder(quint32 orderId); //the server have not understand the order
+ private:
+ QLocalSocket socket;
+ QString error_string;
+ quint32 idNextOrder;
+ QByteArray data;
+ bool haveData;
+ int dataSize;
+ quint32 orderIdFirstSendProtocol;
+ QTimer detectTimeOut;
+ bool sendProtocolReplied;
+ QList<quint32> notRepliedQuery;
+ bool checkDataIntegrity(QByteArray data);
+ private slots:
+ void readyRead();
+ void disconnectedFromSocket();
+ void socketIsConnected();
+ void checkTimeOut();
+ protected:
+ bool parseReply(quint32 orderId,quint32 returnCode,QStringList returnList);
+};
+
+#endif // CLIENTCATCHCOPY_H
diff --git a/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ExtraSocketCatchcopy.cpp b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ExtraSocketCatchcopy.cpp
new file mode 100755
index 0000000..7ee05ed
--- /dev/null
+++ b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ExtraSocketCatchcopy.cpp
@@ -0,0 +1,31 @@
+/** \file ExtraSocketCatchcopy.cpp
+\brief Define the socket of catchcopy
+\author alpha_one_x86
+\version 0002
+\date 2010 */
+
+#include "ExtraSocketCatchcopy.h"
+
+const QString ExtraSocketCatchcopy::pathSocket()
+{
+#ifdef Q_OS_UNIX
+ return "advanced-copier-"+QString::number(getuid());
+#else
+ QString userName;
+ DWORD size=0;
+ if(GetUserNameW(NULL,&size) || (GetLastError()!=ERROR_INSUFFICIENT_BUFFER))
+ {
+ }
+ else
+ {
+ WCHAR * userNameW=new WCHAR[size];
+ if(GetUserNameW(userNameW,&size))
+ {
+ userName.fromWCharArray(userNameW,size*2);
+ userName=QString(QByteArray((char*)userNameW,size*2-2).toHex());
+ }
+ delete userNameW;
+ }
+ return "advanced-copier-"+userName;
+#endif
+}
diff --git a/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ExtraSocketCatchcopy.h b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ExtraSocketCatchcopy.h
new file mode 100755
index 0000000..623c668
--- /dev/null
+++ b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ExtraSocketCatchcopy.h
@@ -0,0 +1,27 @@
+/** \file ExtraSocketCatchcopy.h
+\brief Define the socket of catchcopy
+\author alpha_one_x86
+\version 0002
+\date 2010 */
+
+#ifndef EXTRASOCKETCATCHCOPY_H
+#define EXTRASOCKETCATCHCOPY_H
+
+#include <QString>
+
+#ifdef Q_OS_UNIX
+ #include <unistd.h>
+ #include <sys/types.h>
+#else
+ #include <windows.h>
+#endif
+
+/// \brief to have extra socket function
+class ExtraSocketCatchcopy
+{
+public:
+ /// \brief to get the socket path
+ static const QString pathSocket();
+};
+
+#endif // EXTRASOCKETCATCHCOPY_H
diff --git a/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ServerCatchcopy.cpp b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ServerCatchcopy.cpp
new file mode 100755
index 0000000..7120fa1
--- /dev/null
+++ b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ServerCatchcopy.cpp
@@ -0,0 +1,735 @@
+/** \file ServerCatchcopy.cpp
+\brief Define the server of catchcopy
+\author alpha_one_x86
+\version 0002
+\date 2010 */
+
+#include "ServerCatchcopy.h"
+#include "VariablesCatchcopy.h"
+#include "ExtraSocketCatchcopy.h"
+
+#include <QFile>
+
+ServerCatchcopy::ServerCatchcopy()
+{
+ name="Default avanced copier";
+ autoReply=true;
+ idNextClient=0;
+ error_string="Unknown error";
+ connect(&server, SIGNAL(newConnection()), this, SLOT(newConnection()));
+}
+
+ServerCatchcopy::~ServerCatchcopy()
+{
+ close();
+}
+
+bool ServerCatchcopy::isListening()
+{
+ return server.isListening();
+}
+
+void ServerCatchcopy::setName(const QString & name)
+{
+ this->name=name;
+}
+
+QString ServerCatchcopy::getName()
+{
+ return name;
+}
+
+bool ServerCatchcopy::listen()
+{
+ QLocalSocket socketTestConnection;
+ pathSocket=ExtraSocketCatchcopy::pathSocket();
+ socketTestConnection.connectToServer(pathSocket);
+ if(socketTestConnection.waitForConnected(CATCHCOPY_COMMUNICATION_TIMEOUT))
+ {
+ error_string="Other server is listening";
+ emit error(error_string);
+ return false;
+ }
+ else
+ {
+ if(!server.removeServer(pathSocket))
+ {
+ error_string="Unable to remove the old server";
+ emit error(error_string);
+ }
+ if(server.listen(pathSocket))
+ return true;
+ else
+ {
+ error_string=QString("Unable to listen %1: %2").arg(pathSocket).arg(server.errorString());
+ emit error(error_string);
+ return false;
+ }
+ }
+}
+
+void ServerCatchcopy::close()
+{
+ if(server.isListening())
+ {
+ int index=0;
+ while(index<ClientList.size())
+ {
+ ClientList.at(index).socket->disconnectFromServer();
+ index++;
+ }
+ server.close();
+ if(!server.removeServer(pathSocket))
+ {
+ error_string="Unable to remove the old server";
+ emit error(error_string);
+ }
+ }
+}
+
+const QString ServerCatchcopy::errorStringServer()
+{
+ return server.errorString();
+}
+
+const QString ServerCatchcopy::errorString()
+{
+ return error_string;
+}
+
+/// \brief New connexion
+void ServerCatchcopy::newConnection()
+{
+ while(server.hasPendingConnections())
+ {
+ QLocalSocket *clientSocket = server.nextPendingConnection();
+ if(clientSocket!=NULL)
+ {
+ do
+ {
+ idNextClient++;
+ if(idNextClient>2000000000)
+ idNextClient=0;
+ } while(clientIdFound(idNextClient));
+ Client newClient;
+ newClient.id = idNextClient;
+ newClient.socket = clientSocket;
+ newClient.haveData = false;
+ newClient.firstProtocolReplied = false;
+ newClient.detectTimeOut = new QTimer(this);
+ newClient.detectTimeOut->setSingleShot(true);
+ newClient.detectTimeOut->setInterval(CATCHCOPY_COMMUNICATION_TIMEOUT);
+ connect(newClient.socket, SIGNAL(error(QLocalSocket::LocalSocketError)), this, SLOT(connectionError(QLocalSocket::LocalSocketError)));
+ connect(newClient.socket, SIGNAL(readyRead()), this, SLOT(readyRead()));
+ connect(newClient.socket, SIGNAL(disconnected()), this, SLOT(disconnected()));
+ connect(newClient.detectTimeOut,SIGNAL(timeout()), this, SLOT(checkTimeOut()));
+ ClientList << newClient;
+ emit connectedClient(newClient.id);
+ }
+ }
+}
+
+bool ServerCatchcopy::clientIdFound(quint32 id)
+{
+ int index=0;
+ while(index<ClientList.size())
+ {
+ if(ClientList.at(index).id==id)
+ return true;
+ index++;
+ }
+ return false;
+}
+
+/// \brief new error at connexion
+void ServerCatchcopy::connectionError(QLocalSocket::LocalSocketError error)
+{
+ QLocalSocket *socket=qobject_cast<QLocalSocket *>(QObject::sender());
+ if(socket==NULL)
+ {
+ qWarning() << "Unlocated client socket!";
+ return;
+ }
+ int index=0;
+ while(index<ClientList.size())
+ {
+ if(ClientList.at(index).socket==socket)
+ {
+ if(error!=QLocalSocket::PeerClosedError)
+ qWarning() << "error detected for the client: " << index << ", type: " << error;
+ ClientList.at(index).socket->disconnectFromServer();
+ return;
+ }
+ index++;
+ }
+}
+
+void ServerCatchcopy::disconnected()
+{
+ QLocalSocket *socket=qobject_cast<QLocalSocket *>(QObject::sender());
+ if(socket==NULL)
+ {
+ qWarning() << "Unlocated client socket!";
+ return;
+ }
+ int index=0;
+ while(index<ClientList.size())
+ {
+ if(ClientList.at(index).socket==socket)
+ {
+ emit disconnectedClient(ClientList.at(index).id);
+ disconnect(ClientList.at(index).socket);
+ disconnect(ClientList.at(index).detectTimeOut);
+ delete ClientList.at(index).detectTimeOut;
+ ClientList.at(index).socket->abort();
+ ClientList.at(index).socket->disconnectFromServer();
+ ClientList.at(index).socket->deleteLater();
+ ClientList.removeAt(index);
+ return;
+ }
+ index++;
+ }
+ qWarning() << "Unlocated client!";
+}
+
+void ServerCatchcopy::disconnectClient(quint32 id)
+{
+ int index=0;
+ while(index<ClientList.size())
+ {
+ if(ClientList.at(index).id==id)
+ {
+ ClientList.at(index).socket->disconnectFromServer();
+ return;
+ }
+ index++;
+ }
+ qWarning() << "Unlocated client!";
+}
+
+void ServerCatchcopy::readyRead()
+{
+ QLocalSocket *socket=qobject_cast<QLocalSocket *>(QObject::sender());
+ if(socket==NULL)
+ {
+ qWarning() << "Unlocated client socket!";
+ return;
+ }
+ int index=0;
+ while(index<ClientList.size())
+ {
+ if(ClientList.at(index).socket==socket)
+ {
+ while(socket->bytesAvailable()>0)
+ {
+ if(!ClientList.at(index).haveData)
+ {
+ if(socket->bytesAvailable()<(int)sizeof(int))//ignore because first int is cuted!
+ {
+ /*error_string="Bytes available is not sufficient to do a int";
+ emit error(error_string);
+ disconnectClient(ClientList.at(index).id);*/
+ return;
+ }
+ QDataStream in(socket);
+ in.setVersion(QDataStream::Qt_4_4);
+ in >> ClientList[index].dataSize;
+ ClientList[index].dataSize-=sizeof(int);
+ if(ClientList.at(index).dataSize>64*1024*1024) // 64MB
+ {
+ error_string="Reply size is >64MB, seam corrupted";
+ emit error(error_string);
+ disconnectClient(ClientList.at(index).id);
+ return;
+ }
+ if(ClientList.at(index).dataSize<(int)(sizeof(int) //orderId
+ + sizeof(quint32) //returnCode
+ + sizeof(quint32) //string list size
+ ))
+ {
+ error_string="Reply size is too small to have correct code";
+ emit error(error_string);
+ disconnectClient(ClientList.at(index).id);
+ return;
+ }
+ ClientList[index].haveData=true;
+ }
+ if(ClientList.at(index).dataSize<(ClientList.at(index).data.size()+socket->bytesAvailable()))
+ ClientList[index].data.append(socket->read(ClientList.at(index).dataSize-ClientList.at(index).data.size()));
+ else
+ ClientList[index].data.append(socket->readAll());
+ if(ClientList.at(index).dataSize==(quint32)ClientList.at(index).data.size())
+ {
+ if(!checkDataIntegrity(ClientList.at(index).data))
+ {
+ emit error("Data integrity wrong: "+QString(ClientList.at(index).data.toHex()));
+ ClientList[index].data.clear();
+ ClientList[index].haveData=false;
+ qWarning() << "Data integrity wrong";
+ return;
+ }
+ QStringList returnList;
+ quint32 orderId;
+ QDataStream in(ClientList.at(index).data);
+ in.setVersion(QDataStream::Qt_4_4);
+ in >> orderId;
+ in >> returnList;
+ ClientList[index].data.clear();
+ ClientList[index].haveData=false;
+ if(ClientList.at(index).queryNoReplied.contains(orderId))
+ {
+ emit error("Duplicate query id");
+ qWarning() << "Duplicate query id";
+ return;
+ }
+ ClientList[index].queryNoReplied << orderId;
+ if(!ClientList.at(index).firstProtocolReplied && returnList.size()==2 && returnList.first()=="protocol" && autoReply)
+ {
+ ClientList[index].firstProtocolReplied=true;
+ protocolSupported(ClientList.at(index).id,orderId,(returnList.last()==CATCHCOPY_PROTOCOL_VERSION));
+ }
+ else
+ parseInput(ClientList.at(index).id,orderId,returnList);
+ }
+ }
+ if(ClientList.at(index).haveData)
+ ClientList.at(index).detectTimeOut->start();
+ else
+ ClientList.at(index).detectTimeOut->stop();
+ return;
+ }
+ index++;
+ }
+ emit error("Unallocated client!");
+ qWarning() << "Unallocated client!";
+}
+
+bool ServerCatchcopy::checkDataIntegrity(QByteArray data)
+{
+ quint32 orderId;
+ qint32 listSize;
+ QDataStream in(data);
+ in.setVersion(QDataStream::Qt_4_4);
+ in >> orderId;
+ in >> listSize;
+ if(listSize>65535)
+ {
+ emit error("List size is wrong");
+ qWarning() << "List size is wrong";
+ return false;
+ }
+ int index=0;
+ while(index<listSize)
+ {
+ qint32 stringSize;
+ in >> stringSize;
+ if(stringSize>65535)
+ {
+ emit error("String size is wrong");
+ return false;
+ }
+ if(stringSize>(in.device()->size()-in.device()->pos()))
+ {
+ emit error(QString("String size is greater than the data: %1>(%2-%3)").arg(stringSize).arg(in.device()->size()).arg(in.device()->pos()));
+ return false;
+ }
+ in.device()->seek(in.device()->pos()+stringSize);
+ index++;
+ }
+ if(in.device()->size()!=in.device()->pos())
+ {
+ emit error("Remaining data after string list parsing");
+ return false;
+ }
+ return true;
+}
+
+void ServerCatchcopy::parseInput(quint32 client,quint32 orderId,QStringList returnList)
+{
+ switch(parseInputCurrentProtocol(client,orderId,returnList))
+ {
+ case Ok:
+ emit newQuery(client,orderId,returnList);
+ break;
+ case Replied:
+ break;
+ case ExtensionWrong:
+ if(autoReply)
+ protocolExtensionSupported(client,orderId,false);
+ else
+ emit newQuery(client,orderId,returnList);
+ break;
+ case WrongArgument:
+ if(autoReply)
+ incorrectArgument(client,orderId);
+ else
+ emit newQuery(client,orderId,returnList);
+ break;
+ case WrongArgumentListSize:
+ if(autoReply)
+ incorrectArgumentListSize(client,orderId);
+ else
+ emit newQuery(client,orderId,returnList);
+ break;
+ case UnknowOrder:
+ emit error("Unknown query");
+ qWarning() << "Unknown query";
+ if(autoReply)
+ unknowOrder(client,orderId);
+ else
+ emit newQuery(client,orderId,returnList);
+ break;
+ }
+}
+
+ServerCatchcopy::inputReturnType ServerCatchcopy::parseInputCurrentProtocol(quint32 client,quint32 orderId,QStringList returnList)
+{
+ if(returnList.size()==0)
+ return WrongArgumentListSize;
+ //if is supported
+ QString firstArgument=returnList.first();
+ if(firstArgument=="protocol")
+ {
+ if(returnList.size()!=2)
+ return WrongArgumentListSize;
+ emit askProtocolCompatibility(client,orderId,returnList.last());
+ return Ok;
+ }
+ else if(firstArgument=="protocol extension")
+ {
+ if(returnList.size()>3 || returnList.size()<2)
+ return WrongArgumentListSize;
+ if(!autoReply)
+ {
+ if(returnList.size()==2)
+ emit askProtocolExtension(client,orderId,returnList.last());
+ else
+ emit askProtocolExtension(client,orderId,returnList.at(1),returnList.last());
+ }
+ return ExtensionWrong;
+ }
+ else if(firstArgument=="client")
+ {
+ if(returnList.size()!=2)
+ return WrongArgumentListSize;
+ emit clientName(client,returnList.last());
+ if(autoReply)
+ {
+ clientRegistered(client,orderId);
+ return Replied;
+ }
+ else
+ {
+ emit clientName(client,orderId,returnList.last());
+ return Ok;
+ }
+ }
+ else if(firstArgument=="server")
+ {
+ if(returnList.size()!=2)
+ return WrongArgumentListSize;
+ if(returnList.last()!="name?")
+ return WrongArgument;
+ if(autoReply)
+ {
+ serverName(client,orderId,name);
+ return Replied;
+ }
+ else
+ {
+ askServerName(client,orderId);
+ return Ok;
+ }
+ }
+ else if(firstArgument=="cp")
+ {
+ if(returnList.size()<3)
+ return WrongArgumentListSize;
+ QStringList sourceList=returnList;
+ sourceList.removeFirst();
+ sourceList.removeLast();
+ emitNewCopy(client,orderId,sourceList,returnList.last());
+ return Ok;
+ }
+ else if(firstArgument=="cp-?")
+ {
+ if(returnList.size()<2)
+ return WrongArgumentListSize;
+ QStringList sourceList=returnList;
+ sourceList.removeFirst();
+ emitNewCopy(client,orderId,sourceList);
+ return Ok;
+ }
+ else if(firstArgument=="mv")
+ {
+ if(returnList.size()<3)
+ return WrongArgumentListSize;
+ QStringList sourceList=returnList;
+ sourceList.removeFirst();
+ sourceList.removeLast();
+ emitNewMove(client,orderId,sourceList,returnList.last());
+ return Ok;
+ }
+ else if(firstArgument=="mv-?")
+ {
+ if(returnList.size()<2)
+ return WrongArgumentListSize;
+ QStringList sourceList=returnList;
+ sourceList.removeFirst();
+ emitNewMove(client,orderId,sourceList);
+ return Ok;
+ }
+ else //if is not supported
+ return UnknowOrder;
+}
+
+void ServerCatchcopy::emitNewCopy(quint32 client,quint32 orderId,QStringList sources)
+{
+ emit newCopy(client,orderId,sources);
+ LinkGlobalToLocalClient newAssociation;
+ newAssociation.idClient=client;
+ newAssociation.orderId=orderId;
+ newAssociation.globalOrderId=incrementOrderId();
+ LinkGlobalToLocalClientList << newAssociation;
+ emit newCopy(newAssociation.globalOrderId,sources);
+}
+
+void ServerCatchcopy::emitNewCopy(quint32 client,quint32 orderId,QStringList sources,QString destination)
+{
+ emit newCopy(client,orderId,sources,destination);
+ LinkGlobalToLocalClient newAssociation;
+ newAssociation.idClient=client;
+ newAssociation.orderId=orderId;
+ newAssociation.globalOrderId=incrementOrderId();
+ LinkGlobalToLocalClientList << newAssociation;
+ emit newCopy(newAssociation.globalOrderId,sources,destination);
+}
+
+void ServerCatchcopy::emitNewMove(quint32 client,quint32 orderId,QStringList sources)
+{
+ emit newMove(client,orderId,sources);
+ LinkGlobalToLocalClient newAssociation;
+ newAssociation.idClient=client;
+ newAssociation.orderId=orderId;
+ newAssociation.globalOrderId=incrementOrderId();
+ LinkGlobalToLocalClientList << newAssociation;
+ emit newMove(newAssociation.globalOrderId,sources);
+}
+
+void ServerCatchcopy::emitNewMove(quint32 client,quint32 orderId,QStringList sources,QString destination)
+{
+ emit newMove(client,orderId,sources,destination);
+ LinkGlobalToLocalClient newAssociation;
+ newAssociation.idClient=client;
+ newAssociation.orderId=orderId;
+ newAssociation.globalOrderId=incrementOrderId();
+ LinkGlobalToLocalClientList << newAssociation;
+ emit newMove(newAssociation.globalOrderId,sources,destination);
+}
+
+void ServerCatchcopy::copyFinished(quint32 globalOrderId,bool withError)
+{
+ int index=0;
+ while(index<LinkGlobalToLocalClientList.size())
+ {
+ if(LinkGlobalToLocalClientList.at(index).globalOrderId==globalOrderId)
+ {
+ copyFinished(LinkGlobalToLocalClientList.at(index).idClient,LinkGlobalToLocalClientList.at(index).orderId,withError);
+ LinkGlobalToLocalClientList.removeAt(index);
+ orderList.removeOne(globalOrderId);
+ return;
+ }
+ index++;
+ }
+}
+
+void ServerCatchcopy::copyCanceled(quint32 globalOrderId)
+{
+ int index=0;
+ while(index<LinkGlobalToLocalClientList.size())
+ {
+ if(LinkGlobalToLocalClientList.at(index).globalOrderId==globalOrderId)
+ {
+ copyCanceled(LinkGlobalToLocalClientList.at(index).idClient,LinkGlobalToLocalClientList.at(index).orderId);
+ LinkGlobalToLocalClientList.removeAt(index);
+ orderList.removeOne(globalOrderId);
+ return;
+ }
+ index++;
+ }
+}
+
+void ServerCatchcopy::setAutoReply(bool value)
+{
+ autoReply=value;
+}
+
+bool ServerCatchcopy::getAutoReply()
+{
+ return autoReply;
+}
+
+void ServerCatchcopy::reply(quint32 client,quint32 orderId,quint32 returnCode,QString returnString)
+{
+ reply(client,orderId,returnCode,QStringList() << returnString);
+}
+
+void ServerCatchcopy::reply(quint32 client,quint32 orderId,quint32 returnCode,QStringList returnList)
+{
+ int index=0;
+ while(index<ClientList.size())
+ {
+ if(ClientList.at(index).id==client)
+ {
+ if(ClientList.at(index).socket->isValid() && ClientList.at(index).socket->state()==QLocalSocket::ConnectedState)
+ {
+ if(!ClientList.at(index).queryNoReplied.contains(orderId))
+ {
+ qWarning() << "Reply to missing query or previously replied";
+ return;
+ }
+ ClientList[index].queryNoReplied.removeOne(orderId);
+ //cut string list and send it as block of 32KB
+ QByteArray block;
+ QDataStream out(&block, QIODevice::WriteOnly);
+ out.setVersion(QDataStream::Qt_4_4);
+ out << int(0);
+ out << orderId;
+ out << returnCode;
+ out << returnList;
+ out.device()->seek(0);
+ out << block.size();
+ emit dataSend(client,orderId,returnCode,block);
+ emit dataSend(client,orderId,returnCode,returnList);
+ do
+ {
+ QByteArray blockToSend;
+ int byteWriten;
+ blockToSend=block.left(32*1024);//32KB
+ block.remove(0,blockToSend.size());
+ byteWriten = ClientList[index].socket->write(blockToSend);
+ if(!ClientList[index].socket->isValid())
+ {
+ error_string="Socket is not valid";
+ emit error(error_string);
+ return;
+ }
+ if(ClientList[index].socket->errorString()!="Unknown error" && ClientList[index].socket->errorString()!="")
+ {
+ error_string="Error with socket: "+ClientList[index].socket->errorString();
+ emit error(error_string);
+ return;
+ }
+ if(blockToSend.size()!=byteWriten)
+ {
+ error_string="All the bytes have not be written";
+ emit error(error_string);
+ return;
+ }
+ }
+ while(block.size());
+ }
+ else
+ {
+ error_string="Socket is not valid or not connected";
+ emit error(error_string);
+ }
+ return;
+ }
+ index++;
+ }
+ qWarning() << "Client id not found:" << client;
+}
+
+void ServerCatchcopy::protocolSupported(quint32 client,quint32 orderId,bool value)
+{
+ if(value)
+ reply(client,orderId,1000,"protocol supported");
+ else
+ reply(client,orderId,5003,"protocol not supported");
+}
+
+void ServerCatchcopy::incorrectArgumentListSize(quint32 client,quint32 orderId)
+{
+ reply(client,orderId,5000,"incorrect argument list size");
+}
+
+void ServerCatchcopy::incorrectArgument(quint32 client,quint32 orderId)
+{
+ reply(client,orderId,5001,"incorrect argument");
+}
+
+void ServerCatchcopy::protocolExtensionSupported(quint32 client,quint32 orderId,bool value)
+{
+ if(value)
+ reply(client,orderId,1001,"protocol extension supported");
+ else
+ reply(client,orderId,1002,"protocol extension not supported");
+}
+
+void ServerCatchcopy::clientRegistered(quint32 client,quint32 orderId)
+{
+ reply(client,orderId,1003,"client registered");
+}
+
+void ServerCatchcopy::serverName(quint32 client,quint32 orderId,QString name)
+{
+ reply(client,orderId,1004,name);
+}
+
+void ServerCatchcopy::copyFinished(quint32 client,quint32 orderId,bool withError)
+{
+ if(!withError)
+ reply(client,orderId,1005,"finished");
+ else
+ reply(client,orderId,1006,"finished with error(s)");
+}
+
+void ServerCatchcopy::copyCanceled(quint32 client,quint32 orderId)
+{
+ reply(client,orderId,1007,"canceled");
+}
+
+void ServerCatchcopy::unknowOrder(quint32 client,quint32 orderId)
+{
+ reply(client,orderId,5002,"unknown order");
+}
+
+void ServerCatchcopy::checkTimeOut()
+{
+ QTimer *timer=qobject_cast<QTimer *>(QObject::sender());
+ if(timer==NULL)
+ {
+ qWarning() << "Unallocated client timer!";
+ return;
+ }
+ int index=0;
+ while(index<ClientList.size())
+ {
+ if(ClientList.at(index).detectTimeOut==timer)
+ {
+ ClientList.at(index).detectTimeOut->stop();
+ if(ClientList.at(index).haveData)
+ {
+ error_string="The client is too long to send the next part of the reply: "+ClientList.at(index).data;
+ ClientList[index].haveData=false;
+ ClientList[index].data.clear();
+ ClientList.at(index).socket->disconnectFromServer();
+ emit error(error_string);
+ }
+ return;
+ }
+ index++;
+ }
+}
+
+quint32 ServerCatchcopy::incrementOrderId()
+{
+ do
+ {
+ nextOrderId++;
+ if(nextOrderId>2000000)
+ nextOrderId=0;
+ } while(orderList.contains(nextOrderId));
+ return nextOrderId;
+}
diff --git a/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ServerCatchcopy.h b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ServerCatchcopy.h
new file mode 100755
index 0000000..5f7af35
--- /dev/null
+++ b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ServerCatchcopy.h
@@ -0,0 +1,162 @@
+/** \file ServerCatchcopy.h
+\brief Define the server of catchcopy
+\author alpha_one_x86
+\version 0002
+\date 2010 */
+
+#ifndef SERVERCATCHCOPY_H
+#define SERVERCATCHCOPY_H
+
+#include <QObject>
+#include <QLocalSocket>
+#include <QLocalServer>
+#include <QStringList>
+#include <QString>
+#include <QByteArray>
+#include <QTimer>
+
+/// \brief Define the server of catchcopy
+class ServerCatchcopy : public QObject
+{
+ Q_OBJECT
+ public:
+ ServerCatchcopy();
+ ~ServerCatchcopy();
+ /// \brief return if is listening
+ bool isListening();
+ /// \brief try listen
+ bool listen();
+ /// \brief try close the server
+ void close();
+ /// \brief get the error string on the QLocalServer
+ const QString errorStringServer();
+ /// \brief get the general error string
+ const QString errorString();
+ /// \brief set if automatic reply is used
+ void setAutoReply(bool value);
+ /// \brief get if autoReply is set
+ bool getAutoReply();
+ /// \brief set the name of the server
+ void setName(const QString & name);
+ /// \brief get the name
+ QString getName();
+ private:
+ QString pathSocket;
+ QString name;
+ QString error_string;
+ QLocalServer server;
+ quint32 idNextClient;
+ struct Client
+ {
+ quint32 id;
+ QLocalSocket *socket;
+ QByteArray data;
+ bool haveData;
+ quint32 dataSize;
+ bool firstProtocolReplied;
+ QList<quint32> queryNoReplied;
+ QTimer *detectTimeOut;
+ };
+ QList<Client> ClientList;
+ struct LinkGlobalToLocalClient
+ {
+ quint32 idClient;
+ quint32 orderId;
+ quint32 globalOrderId;
+ };
+ QList<LinkGlobalToLocalClient> LinkGlobalToLocalClientList;
+ enum inputReturnType{Ok,Replied,ExtensionWrong,WrongArgument,WrongArgumentListSize,UnknowOrder};
+ inputReturnType parseInputCurrentProtocol(quint32 client,quint32 orderId,QStringList returnList);
+ bool autoReply;
+ bool clientIdFound(quint32 id);
+ quint32 nextOrderId;
+ QList<quint32> orderList;
+ quint32 incrementOrderId();
+ void emitNewCopy(quint32 client,quint32 orderId,QStringList sources);
+ void emitNewCopy(quint32 client,quint32 orderId,QStringList sources,QString destination);
+ void emitNewMove(quint32 client,quint32 orderId,QStringList sources);
+ void emitNewMove(quint32 client,quint32 orderId,QStringList sources,QString destination);
+ bool checkDataIntegrity(QByteArray data);
+ protected:
+ void parseInput(quint32 client,quint32 orderId,QStringList returnList);
+ private slots:
+ void newConnection();
+ void connectionError(QLocalSocket::LocalSocketError error);
+ void disconnected();
+ void readyRead();
+ void checkTimeOut();
+ public slots:
+ /// \brief disconnect one client
+ void disconnectClient(quint32 id);
+ /// \brief reply to a client with QStringList
+ void reply(quint32 client,quint32 orderId,quint32 returnCode,QStringList returnList);
+ /// \brief reply to a client
+ void reply(quint32 client,quint32 orderId,quint32 returnCode,QString returnString);
+ //reply
+ /// \brief send if the protocol is supported
+ void protocolSupported(quint32 client,quint32 orderId,bool value);
+ /// \brief send incorrect arguement list size
+ void incorrectArgumentListSize(quint32 client,quint32 orderId);
+ /// \brief send incorrect arguement
+ void incorrectArgument(quint32 client,quint32 orderId);
+ /// \brief send if protocol extension is supported
+ void protocolExtensionSupported(quint32 client,quint32 orderId,bool value);
+ /// \brief the client is registred
+ void clientRegistered(quint32 client,quint32 orderId);
+ /// \brief send the server name
+ void serverName(quint32 client,quint32 orderId,QString name);
+ /// \brief send the copy is finished
+ void copyFinished(quint32 client,quint32 orderId,bool withError);
+ /// \brief send the copy is canceled
+ void copyCanceled(quint32 client,quint32 orderId);
+ /// \brief send the copy is finished by global is order
+ void copyFinished(quint32 globalOrderId,bool withError);
+ /// \brief send copy cancel by global is order
+ void copyCanceled(quint32 globalOrderId);
+ /// \brief send the unknow order
+ void unknowOrder(quint32 client,quint32 orderId);
+ signals:
+ /// \brief send connected client
+ void connectedClient(quint32 id);
+ /// \brief send disconnect client
+ void disconnectedClient(quint32 id);
+ /// \brief have new query
+ void newQuery(quint32 client,quint32 orderId,QStringList returnList);
+ /// \brief send new data as string list
+ void dataSend(quint32 client,quint32 orderId,quint32 returnCode,QStringList returnList);
+ /// \brief send new data as raw data
+ void dataSend(quint32 client,quint32 orderId,quint32 returnCode,QByteArray block);
+ /// \brief have new error
+ void error(QString error);
+ //query
+ /// \brief ask the protocol compatility
+ void askProtocolCompatibility(quint32 client,quint32 orderId,QString version);
+ /// \brief ask protocol extension
+ void askProtocolExtension(quint32 client,quint32 orderId,QString extension);
+ /// \brief ask protocol extension with version
+ void askProtocolExtension(quint32 client,quint32 orderId,QString extension,QString version);
+ /// \brief send the client name, with query id
+ void clientName(quint32 client,quint32 orderId,QString name);
+ /// \brief send the client name, without query id
+ void clientName(quint32 client,QString name);
+ /// \brief send the client have ask the server name
+ void askServerName(quint32 client,quint32 orderId);
+ /// \brief copy is send, without destination
+ void newCopy(quint32 client,quint32 orderId,QStringList sources);
+ /// \brief copy is send, with destination
+ void newCopy(quint32 client,quint32 orderId,QStringList sources,QString destination);
+ /// \brief move is send, without destination
+ void newMove(quint32 client,quint32 orderId,QStringList sources);
+ /// \brief move is send, with destination
+ void newMove(quint32 client,quint32 orderId,QStringList sources,QString destination);
+ /// \brief copy is send, by globalOrderId, without destination
+ void newCopy(quint32 globalOrderId,QStringList sources);
+ /// \brief copy is send, by globalOrderId, with destination
+ void newCopy(quint32 globalOrderId,QStringList sources,QString destination);
+ /// \brief move is send, by globalOrderId, without destination
+ void newMove(quint32 globalOrderId,QStringList sources);
+ /// \brief move is send, by globalOrderId, with destination
+ void newMove(quint32 globalOrderId,QStringList sources,QString destination);
+};
+
+#endif // SERVERCATCHCOPY_H
diff --git a/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/VariablesCatchcopy.h b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/VariablesCatchcopy.h
new file mode 100755
index 0000000..ce73aee
--- /dev/null
+++ b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/VariablesCatchcopy.h
@@ -0,0 +1,14 @@
+/** \file VariablesCatchcopy.h
+\brief Define the variable for catchcopy
+\author alpha_one_x86
+\version 0002
+\date 2010 */
+
+#ifndef VARIABLECATCHCOPY_H
+#define VARIABLECATCHCOPY_H
+
+#define CATCHCOPY_PROTOCOL_VERSION "0002"
+#define CATCHCOPY_COMMUNICATION_TIMEOUT 200
+
+#endif // VARIABLECATCHCOPY_H
+
diff --git a/plugins/Listener/catchcopy-v0002/documentation.dox b/plugins/Listener/catchcopy-v0002/documentation.dox
new file mode 100755
index 0000000..a15792a
--- /dev/null
+++ b/plugins/Listener/catchcopy-v0002/documentation.dox
@@ -0,0 +1,33 @@
+/* -*- mode: C++ ; c-file-style: "stroustrup" -*- **/
+
+/*
+ This file contains NO source code, just some documentation for doxygen to
+ parse.
+*/
+
+/*!
+ \mainpage catchcopy-v0002
+
+ \section mainpage_overview Overview
+
+ Is the default listener to wait a copy/move. It use the catchcopy protocol.\n
+ 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.\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 Protocol
+
+ The protocol in version 0.0.0.2 is used, you can see the documentation on <a href="http://catchcopy.first-world.info/">Catchcopy web site</a>
+
+ \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/Listener/catchcopy-v0002/informations.xml b/plugins/Listener/catchcopy-v0002/informations.xml
new file mode 100644
index 0000000..65b4ca1
--- /dev/null
+++ b/plugins/Listener/catchcopy-v0002/informations.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Listener for catchcopy v0002]]></title><!-- english is required -->
+ <title xml:lang="fr"><![CDATA[Écouteur pour catchcopy v0002]]></title>
+ <!-- What kind of plugin this is -->
+ <category>Listener</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>linux-x86_64-pc</architecture>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Listener for catchcopy v0002. Allow to receive copy list from plugin/explorer compatible with catchcopy.]]></description>
+ <description xml:lang="fr"><![CDATA[Écouteur pour catchcopy v0002. Permet de recevoir un liste de copie venant d'un plugin/explorateur avec catchcopy.]]></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>
+ <!-- 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>catchcopy-v0002</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
+ ]]></dependencies>
+</package> \ No newline at end of file
diff --git a/plugins/Listener/catchcopy-v0002/listener.cpp b/plugins/Listener/catchcopy-v0002/listener.cpp
new file mode 100755
index 0000000..13dc66a
--- /dev/null
+++ b/plugins/Listener/catchcopy-v0002/listener.cpp
@@ -0,0 +1,72 @@
+#include <QtCore>
+#include <QMessageBox>
+
+#include "listener.h"
+
+CatchCopyPlugin::CatchCopyPlugin()
+{
+ server.setName(tr("Ultracopier"));
+ connect(&server,SIGNAL(newCopy(quint32,QStringList)), this,SIGNAL(newCopy(quint32,QStringList)));
+ connect(&server,SIGNAL(newCopy(quint32,QStringList,QString)), this,SIGNAL(newCopy(quint32,QStringList,QString)));
+ connect(&server,SIGNAL(newMove(quint32,QStringList)), this,SIGNAL(newMove(quint32,QStringList)));
+ connect(&server,SIGNAL(newMove(quint32,QStringList,QString)), this,SIGNAL(newMove(quint32,QStringList,QString)));
+ connect(&server,SIGNAL(error(QString)), this,SLOT(error(QString)));
+ connect(&server,SIGNAL(clientName(quint32,QString)), this,SLOT(clientName(quint32,QString)));
+}
+
+void CatchCopyPlugin::listen()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ if(server.listen())
+ emit newState(FullListening);
+ else
+ emit newState(NotListening);
+}
+
+void CatchCopyPlugin::close()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ server.close();
+ emit newState(NotListening);
+}
+
+const QString CatchCopyPlugin::errorString()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ return server.errorString();
+}
+
+void CatchCopyPlugin::setResources(OptionInterface * options,QString writePath,QString pluginPath,bool portableVersion)
+{
+ Q_UNUSED(options);
+ Q_UNUSED(writePath);
+ Q_UNUSED(pluginPath);
+ Q_UNUSED(portableVersion);
+}
+
+Q_EXPORT_PLUGIN2(listener, CatchCopyPlugin);
+
+void CatchCopyPlugin::transferFinished(quint32 orderId,bool withError)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, orderId: "+QString::number(orderId)+", withError: "+QString::number(withError));
+ server.copyFinished(orderId,withError);
+}
+
+void CatchCopyPlugin::transferCanceled(quint32 orderId)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, orderId: "+QString::number(orderId));
+ server.copyCanceled(orderId);
+}
+
+void CatchCopyPlugin::error(QString error)
+{
+ Q_UNUSED(error);
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"warning emited from Catchcopy lib: "+error);
+}
+
+void CatchCopyPlugin::clientName(quint32 client,QString name)
+{
+ Q_UNUSED(client);
+ Q_UNUSED(name);
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,QString("clientName: %1, for the id: %2").arg(name).arg(client));
+}
diff --git a/plugins/Listener/catchcopy-v0002/listener.h b/plugins/Listener/catchcopy-v0002/listener.h
new file mode 100755
index 0000000..9eca405
--- /dev/null
+++ b/plugins/Listener/catchcopy-v0002/listener.h
@@ -0,0 +1,58 @@
+/** \file listener.h
+\brief Define the server compatible with Ultracopier interface
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#ifndef SERVER_H
+#define SERVER_H
+
+#include <QObject>
+
+#include "Environment.h"
+#include "../../../interface/PluginInterface_Listener.h"
+#include "catchcopy-api-0002/ServerCatchcopy.h"
+
+/// \brief Define the server compatible with Ultracopier interface
+class CatchCopyPlugin : public PluginInterface_Listener
+{
+ Q_OBJECT
+ Q_INTERFACES(PluginInterface_Listener)
+public:
+ CatchCopyPlugin();
+ /// \brief try listen the copy/move
+ void listen();
+ /// \brief stop listen to copy/move
+ void close();
+ /// \brief return the error strong
+ const QString errorString();
+ /// \brief set resources for this plugins
+ void setResources(OptionInterface * options,QString writePath,QString pluginPath,bool portableVersion);
+public slots:
+ /// \brief say to the client that's the copy/move is finished
+ void transferFinished(quint32 orderId,bool withError);
+ /// \brief say to the client that's the copy/move is finished
+ void transferCanceled(quint32 orderId);
+private:
+ ServerCatchcopy server;
+private slots:
+ void error(QString error);
+ void clientName(quint32 client,QString name);
+signals:
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ /// \brief To debug source
+ void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
+ #endif
+ /// \brief new state
+ void newState(ListeningState state);
+ /// \brief new copy is incoming
+ void newCopy(quint32 orderId,QStringList sources);
+ /// \brief new copy is incoming, with destination
+ void newCopy(quint32 orderId,QStringList sources,QString destination);
+ /// \brief new move is incoming
+ void newMove(quint32 orderId,QStringList sources);
+ /// \brief new move is incoming, with destination
+ void newMove(quint32 orderId,QStringList sources,QString destination);
+};
+
+#endif // SERVER_H
diff --git a/plugins/Listener/catchcopy-v0002/listener.pro b/plugins/Listener/catchcopy-v0002/listener.pro
new file mode 100644
index 0000000..0cd7fa4
--- /dev/null
+++ b/plugins/Listener/catchcopy-v0002/listener.pro
@@ -0,0 +1,17 @@
+TEMPLATE = lib
+CONFIG += plugin
+QT += network
+HEADERS = listener.h \
+ catchcopy-api-0002/VariablesCatchcopy.h \
+ catchcopy-api-0002/ServerCatchcopy.h \
+ catchcopy-api-0002/ExtraSocketCatchcopy.h \
+ Environment.h \
+ Variable.h \
+ DebugEngineMacro.h \
+ StructEnumDefinition.h \
+ ../../../interface/PluginInterface_Listener.h
+SOURCES = listener.cpp \
+ catchcopy-api-0002/ServerCatchcopy.cpp \
+ catchcopy-api-0002/ExtraSocketCatchcopy.cpp
+TARGET = $$qtLibraryTarget(listener)
+TRANSLATIONS += Languages/fr/translation.ts
diff --git a/plugins/PluginLoader/catchcopy-v0002/DebugEngineMacro.h b/plugins/PluginLoader/catchcopy-v0002/DebugEngineMacro.h
new file mode 100755
index 0000000..ad08d4f
--- /dev/null
+++ b/plugins/PluginLoader/catchcopy-v0002/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/PluginLoader/catchcopy-v0002/Environment.h b/plugins/PluginLoader/catchcopy-v0002/Environment.h
new file mode 100755
index 0000000..94fd104
--- /dev/null
+++ b/plugins/PluginLoader/catchcopy-v0002/Environment.h
@@ -0,0 +1,11 @@
+/** \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 "DebugEngineMacro.h"
+
diff --git a/plugins/PluginLoader/catchcopy-v0002/PlatformMacro.h b/plugins/PluginLoader/catchcopy-v0002/PlatformMacro.h
new file mode 100644
index 0000000..f7586b0
--- /dev/null
+++ b/plugins/PluginLoader/catchcopy-v0002/PlatformMacro.h
@@ -0,0 +1 @@
+#include "../../../PlatformMacro.h"
diff --git a/plugins/PluginLoader/catchcopy-v0002/StructEnumDefinition.h b/plugins/PluginLoader/catchcopy-v0002/StructEnumDefinition.h
new file mode 100644
index 0000000..c1758f4
--- /dev/null
+++ b/plugins/PluginLoader/catchcopy-v0002/StructEnumDefinition.h
@@ -0,0 +1 @@
+#include "../../../StructEnumDefinition.h"
diff --git a/plugins/PluginLoader/catchcopy-v0002/Variable.h b/plugins/PluginLoader/catchcopy-v0002/Variable.h
new file mode 100755
index 0000000..8179c93
--- /dev/null
+++ b/plugins/PluginLoader/catchcopy-v0002/Variable.h
@@ -0,0 +1,16 @@
+/** \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
+
+#endif // VARIABLE_H
+
+
+
diff --git a/plugins/PluginLoader/catchcopy-v0002/documentation.dox b/plugins/PluginLoader/catchcopy-v0002/documentation.dox
new file mode 100755
index 0000000..e8aaaa7
--- /dev/null
+++ b/plugins/PluginLoader/catchcopy-v0002/documentation.dox
@@ -0,0 +1,34 @@
+/* -*- mode: C++ ; c-file-style: "stroustrup" -*- **/
+
+/*
+ This file contains NO source code, just some documentation for doxygen to
+ parse.
+*/
+
+/*!
+ \mainpage catchcopy-v0002
+
+ \section mainpage_overview Overview
+
+ Is the plugin to load the catchcopy plugin into the windows file manager.\n
+ 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.\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 Requirements
+
+ You can see the documentation on <a href="http://catchcopy.first-world.info/">Catchcopy web site</a>. It use catchcopy32.dll/catchcopy64.dll as explorer plugin for the windows's file manager. Need it into the plugins.\n
+ In function if Ultracopier is compiled by portable version, try load the dll by other way.
+
+ \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/PluginLoader/catchcopy-v0002/informations.xml b/plugins/PluginLoader/catchcopy-v0002/informations.xml
new file mode 100755
index 0000000..fb92607
--- /dev/null
+++ b/plugins/PluginLoader/catchcopy-v0002/informations.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Plugin loader for catchcopy v0002]]></title><!-- english is required -->
+ <title xml:lang="fr"><![CDATA[Chargeur de plugin pour catchcopy v0002]]></title>
+ <!-- What kind of plugin this is -->
+ <category>PluginLoader</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>linux-x86_64-pc</architecture>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Plugin loader for catchcopy v0002. Allow to receive copy list from plugin/explorer compatible with catchcopy.]]></description>
+ <description xml:lang="fr"><![CDATA[Chargeur de plugin pour catchcopy v0002. Permet de recevoir un liste de copie venant d'un plugin/explorateur avec catchcopy.]]></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>
+ <!-- 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>catchcopy-v0002</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
+ ]]></dependencies>
+</package> \ No newline at end of file
diff --git a/plugins/PluginLoader/catchcopy-v0002/pluginLoader.cpp b/plugins/PluginLoader/catchcopy-v0002/pluginLoader.cpp
new file mode 100755
index 0000000..f4d5b01
--- /dev/null
+++ b/plugins/PluginLoader/catchcopy-v0002/pluginLoader.cpp
@@ -0,0 +1,464 @@
+/** \file session-loader.cpp
+\brief Define the session plugin loader test
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#include "pluginLoader.h"
+#include "PlatformMacro.h"
+
+#ifdef ULTRACOPIER_PLUGIN_DEBUG
+ #define CATCHCOPY_DLL_32 "catchcopy32d.dll"
+ #define CATCHCOPY_DLL_64 "catchcopy64d.dll"
+#else
+ #define CATCHCOPY_DLL_32 "catchcopy32.dll"
+ #define CATCHCOPY_DLL_64 "catchcopy64.dll"
+#endif
+
+PluginLoader::PluginLoader()
+{
+ //set the startup value into the variable
+ dllChecked=false;
+
+ needBeRegistred=false;
+}
+
+PluginLoader::~PluginLoader()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"destructor");
+ setEnabled(false);
+}
+
+void PluginLoader::setEnabled(bool needBeRegistred)
+{
+ if(!checkExistsDll())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("No dll exists"));
+ emit newState(Uncaught);
+ return;
+ }
+ if(this->needBeRegistred==needBeRegistred)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Double event dropped"));
+ return;
+ }
+ this->needBeRegistred=needBeRegistred;
+ int index=0;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, needBeRegistred: "+QString::number(needBeRegistred));
+
+ bool oneHaveFound=false;
+ index=0;
+ while(index<importantDll.size())
+ {
+ if(QFile::exists(pluginPath+importantDll.at(index)))
+ {
+ oneHaveFound=true;
+ break;
+ }
+ index++;
+ }
+ if(!oneHaveFound)
+ {
+ index=0;
+ while(index<secondDll.size())
+ {
+ if(QFile::exists(pluginPath+secondDll.at(index)))
+ {
+ oneHaveFound=true;
+ break;
+ }
+ index++;
+ }
+ }
+ if(!oneHaveFound)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("No dll have found"));
+ emit newState(Uncaught);
+ return;
+ }
+
+ index=0;
+ bool importantDll_is_loaded=false,secondDll_is_loaded=false;
+ bool importantDll_have_bug=false,secondDll_have_bug=false;
+ int importantDll_count=0,secondDll_count=0;
+ while(index<importantDll.size())
+ {
+ if(!RegisterShellExtDll(pluginPath+importantDll.at(index),needBeRegistred,false))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"the important dll have failed: "+importantDll.at(index));
+ importantDll_have_bug=true;
+ }
+ else
+ {
+ importantDll_is_loaded=true;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the important dll have been loaded: "+importantDll.at(index));
+ }
+ importantDll_count++;
+ index++;
+ }
+ index=0;
+ while(index<secondDll.size())
+ {
+ if(!RegisterShellExtDll(pluginPath+secondDll.at(index),needBeRegistred,true))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"the second dll have failed: "+secondDll.at(index));
+ secondDll_have_bug=true;
+ }
+ else
+ {
+ secondDll_is_loaded=true;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the second dll have been loaded: "+secondDll.at(index));
+ }
+ secondDll_count++;
+ index++;
+ }
+
+ CatchState importantDll_state,secondDll_state;
+ if(importantDll_count==0)
+ {
+ if(needBeRegistred)
+ importantDll_state=Caught;
+ else
+ importantDll_state=Uncaught;
+ }
+ else
+ {
+ if(importantDll_is_loaded)
+ {
+ if(!importantDll_have_bug)
+ importantDll_state=Caught;
+ else
+ importantDll_state=Semiuncaught;
+ }
+ else
+ importantDll_state=Uncaught;
+ }
+ if(secondDll_count==0)
+ if(needBeRegistred)
+ secondDll_state=Caught;
+ else
+ secondDll_state=Uncaught;
+ else
+ {
+ if(secondDll_is_loaded)
+ {
+ if(!secondDll_have_bug)
+ secondDll_state=Caught;
+ else
+ secondDll_state=Semiuncaught;
+ }
+ else
+ secondDll_state=Uncaught;
+ }
+
+ if((importantDll_state==Uncaught && secondDll_state==Uncaught) || !needBeRegistred || (importantDll_count==0 && secondDll_count==0))
+ emit newState(Uncaught);
+ else if(importantDll_state==Caught)
+ emit newState(Caught);
+ else
+ emit newState(Semiuncaught);
+}
+
+bool PluginLoader::checkExistsDll()
+{
+ if(dllChecked)
+ {
+ if(importantDll.size()>0 || secondDll.size()>0)
+ return true;
+ else
+ return false;
+ }
+ dllChecked=true;
+
+ #if defined(ULTRACOPIER_VERSION_PORTABLE) || ! defined(_M_X64)
+ bool is64Bits=false;
+ char *arch=getenv("windir");
+ if(arch!=NULL)
+ {
+ QDir dir;
+ if(dir.exists(QString(arch)+"\\SysWOW64\\"))
+ {
+ is64Bits=true;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"OS seam 64Bits, "+QString(arch)+"\\SysWOW64\\");
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"OS seam not 64Bits, "+QString(arch)+"\\SysWOW64\\");
+ /// \note commented because it do a crash at the startup
+ //delete arch;
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to get env var");
+
+ if(!is64Bits)
+ {
+ if((importantDll.size()+secondDll.size())>1)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"Not load 64Bits dll");
+ importantDll.removeOne(CATCHCOPY_DLL_64);
+ secondDll.removeOne(CATCHCOPY_DLL_64);
+ }
+ }
+ else
+ {
+ QStringList tempList=importantDll;
+ importantDll=secondDll;
+ secondDll=tempList;
+ }
+ #endif
+
+ int index=0;
+ while(index<importantDll.size())
+ {
+ if(!QFile::exists(pluginPath+importantDll.at(index)))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"file not found, drop to the list: "+importantDll.at(index));
+ importantDll.removeAt(index);
+ index--;
+ }
+ index++;
+ }
+ index=0;
+ while(index<secondDll.size())
+ {
+ if(!QFile::exists(pluginPath+secondDll.at(index)))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"file not found, drop to the list: "+secondDll.at(index));
+ secondDll.removeAt(index);
+ index--;
+ }
+ index++;
+ }
+ if(importantDll.size()>0 || secondDll.size()>0)
+ return true;
+ else
+ return false;
+}
+
+void PluginLoader::setResources(OptionInterface * options,QString writePath,QString pluginPath,bool portableVersion)
+{
+ Q_UNUSED(options);
+ this->pluginPath=pluginPath;
+ if(portableVersion)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("version portable detected"));
+ secondDll << CATCHCOPY_DLL_32 << CATCHCOPY_DLL_64;
+ }
+ else
+ {
+ #if defined(_M_X64)//64Bits
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("64Bits version detected"));
+ importantDll << CATCHCOPY_DLL_64;
+ secondDll << CATCHCOPY_DLL_32;
+ #else//32Bits
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("32Bits version detected"));
+ importantDll << CATCHCOPY_DLL_32;
+ secondDll << CATCHCOPY_DLL_64;
+ #endif
+ }
+}
+
+bool PluginLoader::RegisterShellExtDll(QString dllPath, bool bRegister,bool quiet)
+{
+ ////////////////////////////// First way to load //////////////////////////////
+
+ wchar_t arrayArg[65535];
+ int size_lenght;
+ // first try - load dll and register it manually.
+ HRESULT hResult = S_OK;
+ // if failed - try by loading extension manually (would fail on vista when running as user)
+ hResult = CoInitializeEx(NULL, COINIT_MULTITHREADED);
+ if(SUCCEEDED(hResult))
+ {
+ HRESULT (STDAPICALLTYPE *pfn)(void);
+ size_lenght=dllPath.toWCharArray(arrayArg);
+ HINSTANCE hMod = LoadLibrary(arrayArg); // load the dll
+ if(hMod == NULL)
+ hResult = HRESULT_FROM_WIN32(GetLastError());
+ if(SUCCEEDED(hResult) && !hMod)
+ hResult = E_FAIL;
+ if(SUCCEEDED(hResult))
+ {
+ (FARPROC&)pfn = GetProcAddress(hMod, (bRegister ? "DllRegisterServer" : "DllUnregisterServer"));
+ if(pfn == NULL)
+ hResult = E_FAIL;
+ if(SUCCEEDED(hResult))
+ hResult = (*pfn)();
+
+ CoFreeLibrary(hMod);
+ }
+ CoUninitialize();
+ if(SUCCEEDED(hResult) && SCODE_CODE(hResult) != ERROR_ACCESS_DENIED)
+ return true;
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("fail by LoadLibrary: %1, error code: %2").arg(dllPath).arg((quint32)hResult));
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("fail by CoInitializeEx: %1, error code: %2").arg(dllPath).arg((quint32)hResult));
+
+ ////////////////////////////// Second way to load //////////////////////////////
+ QStringList arguments;
+ arguments.append("/s");
+ if(!bRegister)
+ arguments.append("/u");
+ arguments.append(dllPath);
+ QString argumentsString;
+ for (int i = 0; i < arguments.size(); ++i) {
+ if(argumentsString.isEmpty())
+ argumentsString+=arguments.at(i);
+ else
+ if(i == arguments.size())
+ argumentsString+=" \""+arguments.at(i)+"\"";
+ else
+ argumentsString+=' '+arguments.at(i);
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: regsvr32 "+argumentsString);
+ int result=QProcess::execute("regsvr32",arguments);
+ bool ok=false;
+ if(result==0)
+ ok=true;
+ if(result==5)
+ {
+ if(!quiet)
+ {
+ ////////////////////////////// Last way to load //////////////////////////////
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"try it in win32");
+ // try with regsvr32, win32 because for admin dialog
+
+ size_lenght=argumentsString.toWCharArray(arrayArg);
+ //size_lenght*sizeof(wchar_t)
+ wcscpy(arrayArg+size_lenght*sizeof(wchar_t),TEXT("\0"));
+ SHELLEXECUTEINFO sei;
+ memset(&sei, 0, sizeof(sei));
+ sei.cbSize = sizeof(sei);
+ sei.fMask = SEE_MASK_UNICODE;
+ sei.lpVerb = TEXT("runas");
+ sei.lpFile = TEXT("regsvr32.exe");
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"in win32 mode: arrayArg: "+QString::fromWCharArray(arrayArg,size_lenght));
+ sei.lpParameters = arrayArg;
+ sei.nShow = SW_SHOW;
+ ok=ShellExecuteEx(&sei);
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"not try because need be quiet: "+dllPath);
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("regsvr32 terminated with: %1").arg(result));
+ if(!bRegister)
+ HardUnloadDLL(dllPath);
+ return ok;
+}
+
+Q_EXPORT_PLUGIN2(pluginLoader, PluginLoader);
+
+bool WINAPI PluginLoader::DLLEjecteurW(DWORD dwPid,PWSTR szDLLPath)
+{
+ /* Search address of module */
+ MODULEENTRY32W meModule;
+ meModule.dwSize = sizeof(meModule);
+ HANDLE hSnapshot = NULL;
+
+ hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPid);
+ if(hSnapshot == NULL)
+ return false;
+
+ /* Search the right modules of the process */
+ Module32FirstW(hSnapshot, &meModule);
+ do{
+ if((lstrcmpiW(meModule.szModule,szDLLPath) == 0) || (lstrcmpiW(meModule.szExePath,szDLLPath) == 0))break;
+ }while(Module32NextW(hSnapshot, &meModule));
+
+ /* Get handle of the process */
+ HANDLE hProcess;
+
+ hProcess = OpenProcess(PROCESS_ALL_ACCESS, false,dwPid);
+ if(hProcess == NULL)
+ {
+ CloseHandle(hSnapshot);
+ return false;
+ }
+
+ LPTHREAD_START_ROUTINE lpthThreadFunction;
+ /* Get addresse of FreeLibrary in kernel32.dll */
+ lpthThreadFunction = (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(L"kernel32.dll"), "FreeLibrary");
+ if(lpthThreadFunction == NULL)
+ {
+ CloseHandle(hProcess);
+ CloseHandle(hSnapshot);
+ return false;
+ }
+
+ /* Creation the remote thread */
+ DWORD dwThreadID = 0;
+ HANDLE hThread = NULL;
+ hThread = CreateRemoteThread(hProcess, NULL, 0, lpthThreadFunction,meModule.modBaseAddr, 0, &dwThreadID);
+ if(hThread == NULL)
+ {
+ CloseHandle(hSnapshot);
+ CloseHandle(hProcess);
+ return false;
+ }
+
+ WaitForSingleObject(hThread,INFINITE);
+
+ CloseHandle(hProcess);
+ CloseHandle(hThread);
+
+ return true;
+}
+
+void PluginLoader::HardUnloadDLL(QString myDllName)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+myDllName);
+ HANDLE hSnapShot1;
+ PROCESSENTRY32 uProcess;
+ HANDLE hSnapShot2;
+ MODULEENTRY32 me32;
+ QString DllLoaded = "";
+ QString DllLoadedName = "";
+ QString DllLoadedPath = "";
+ bool bResult;
+ bool r;
+ short NbProcess;
+ NbProcess=0;
+
+ hSnapShot1 = CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
+
+ uProcess.dwSize = (DWORD) sizeof(PROCESSENTRY32);
+
+ r = Process32First(hSnapShot1, &uProcess);
+
+ while ( r )
+ {
+ r = Process32Next(hSnapShot1, &uProcess);
+ QString myProcessName;
+ myProcessName=QString::fromWCharArray(uProcess.szExeFile);
+ if (uProcess.th32ProcessID < 99999)
+ {
+ hSnapShot2 = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, uProcess.th32ProcessID );
+ if (hSnapShot2 != INVALID_HANDLE_VALUE)
+ {
+ me32.dwSize = sizeof(me32);
+ bResult = Module32First( hSnapShot2, &me32 );
+ while( bResult )
+ {
+ DllLoaded=QString::fromWCharArray(me32.szExePath);
+ DllLoadedName=QString::fromWCharArray(me32.szModule);
+ if (DllLoaded == myDllName)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"The path: "+DllLoaded);
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,myProcessName+" ("+QString::number(uProcess.th32ProcessID)+")");
+ DLLEjecteurW(uProcess.th32ProcessID,me32.szExePath);
+ }
+ bResult = Module32Next( hSnapShot2, &me32 );
+ }
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"(int)hSnapShot2 != -1 for "+myProcessName+" ("+QString::number(uProcess.th32ProcessID)+")");
+ if(hSnapShot2)
+ CloseHandle(hSnapShot2);
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"uProcess.th32ProcessID > 99999 for "+myProcessName+" ("+QString::number(uProcess.th32ProcessID)+")");
+ }
+ CloseHandle(hSnapShot1);
+}
diff --git a/plugins/PluginLoader/catchcopy-v0002/pluginLoader.h b/plugins/PluginLoader/catchcopy-v0002/pluginLoader.h
new file mode 100755
index 0000000..9a913e3
--- /dev/null
+++ b/plugins/PluginLoader/catchcopy-v0002/pluginLoader.h
@@ -0,0 +1,50 @@
+/** \file pluginLoader.h
+\brief Define the plugin loader
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#ifndef PLUGIN_LOADER_TEST_H
+#define PLUGIN_LOADER_TEST_H
+
+#include <QObject>
+#include <QtCore>
+#include <QMessageBox>
+
+#include <QString>
+#include <QStringList>
+#include <QProcess>
+#include <windows.h>
+#include <tlhelp32.h>
+
+#include "../../../interface/PluginInterface_PluginLoader.h"
+#include "Environment.h"
+
+/// \brief \brief Define the plugin loader
+class PluginLoader : public PluginInterface_PluginLoader
+{
+ Q_OBJECT
+ Q_INTERFACES(PluginInterface_PluginLoader)
+public:
+ PluginLoader();
+ ~PluginLoader();
+ void setEnabled(bool);
+ void setResources(OptionInterface * options,QString writePath,QString pluginPath,bool portableVersion);
+private:
+ QString pluginPath;
+ QStringList importantDll,secondDll;
+ bool RegisterShellExtDll(QString dllPath, bool bRegister,bool quiet);
+ bool checkExistsDll();
+ bool dllChecked;
+ bool needBeRegistred;
+ bool WINAPI DLLEjecteurW(DWORD dwPid,PWSTR szDLLPath);
+ void HardUnloadDLL(QString myDllName);
+signals:
+ void newState(CatchState);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ /// \brief To debug source
+ void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
+ #endif
+};
+
+#endif // PLUGIN_LOADER_TEST_H
diff --git a/plugins/PluginLoader/catchcopy-v0002/pluginLoader.pro b/plugins/PluginLoader/catchcopy-v0002/pluginLoader.pro
new file mode 100755
index 0000000..f593fff
--- /dev/null
+++ b/plugins/PluginLoader/catchcopy-v0002/pluginLoader.pro
@@ -0,0 +1,17 @@
+TEMPLATE = lib
+CONFIG += plugin
+HEADERS = \
+ StructEnumDefinition.h \
+ pluginLoader.h \
+ DebugEngineMacro.h \
+ Environment.h \
+ Variable.h \
+ PlatformMacro.h \
+ ../../../interface/PluginInterface_PluginLoader.h
+SOURCES = \
+ pluginLoader.cpp
+TARGET = $$qtLibraryTarget(pluginLoader)
+TRANSLATIONS += Languages/fr/translation.ts
+
+LIBS += -lole32
+
diff --git a/plugins/SessionLoader/KDE4/DebugEngineMacro.h b/plugins/SessionLoader/KDE4/DebugEngineMacro.h
new file mode 100644
index 0000000..a3dd648
--- /dev/null
+++ b/plugins/SessionLoader/KDE4/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_DEBUG
+ #define ULTRACOPIER_DEBUGCONSOLE(a,b) void()
+#endif // ULTRACOPIER_DEBUG
+
+#endif // DEBUGENGINEMACRO_H
+
+
+
+
diff --git a/plugins/SessionLoader/KDE4/Environment.h b/plugins/SessionLoader/KDE4/Environment.h
new file mode 100644
index 0000000..94fd104
--- /dev/null
+++ b/plugins/SessionLoader/KDE4/Environment.h
@@ -0,0 +1,11 @@
+/** \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 "DebugEngineMacro.h"
+
diff --git a/plugins/SessionLoader/KDE4/StructEnumDefinition.h b/plugins/SessionLoader/KDE4/StructEnumDefinition.h
new file mode 100644
index 0000000..c1758f4
--- /dev/null
+++ b/plugins/SessionLoader/KDE4/StructEnumDefinition.h
@@ -0,0 +1 @@
+#include "../../../StructEnumDefinition.h"
diff --git a/plugins/SessionLoader/KDE4/Variable.h b/plugins/SessionLoader/KDE4/Variable.h
new file mode 100644
index 0000000..8179c93
--- /dev/null
+++ b/plugins/SessionLoader/KDE4/Variable.h
@@ -0,0 +1,16 @@
+/** \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
+
+#endif // VARIABLE_H
+
+
+
diff --git a/plugins/SessionLoader/KDE4/documentation.dox b/plugins/SessionLoader/KDE4/documentation.dox
new file mode 100755
index 0000000..fbf0eb4
--- /dev/null
+++ b/plugins/SessionLoader/KDE4/documentation.dox
@@ -0,0 +1,33 @@
+/* -*- mode: C++ ; c-file-style: "stroustrup" -*- **/
+
+/*
+ This file contains NO source code, just some documentation for doxygen to
+ parse.
+*/
+
+/*!
+ \mainpage KDE4
+
+ \section mainpage_overview Overview
+
+ It control if it loaded with the session.\n
+ 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.\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 Method
+
+ It pass by ~/.kde4/Autostart/ultracopier.sh to set/get it.
+
+ \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/SessionLoader/KDE4/informations.xml b/plugins/SessionLoader/KDE4/informations.xml
new file mode 100644
index 0000000..761ba98
--- /dev/null
+++ b/plugins/SessionLoader/KDE4/informations.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Session loader for test]]></title><!-- english is required -->
+ <title xml:lang="fr"><![CDATA[Chargeur de session pour des testes]]></title>
+ <!-- What kind of plugin this is -->
+ <category>SessionLoader</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>linux-x86_64-pc</architecture>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Test plugin to show how create SessionLoader plugin]]></description>
+ <description xml:lang="fr"><![CDATA[Plugin de test pour monter comment créer un plugin SessionLoader]]></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.4</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>KDE4</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.4
+ ]]></dependencies>
+</package> \ No newline at end of file
diff --git a/plugins/SessionLoader/KDE4/sessionLoader.cpp b/plugins/SessionLoader/KDE4/sessionLoader.cpp
new file mode 100644
index 0000000..99a9f7c
--- /dev/null
+++ b/plugins/SessionLoader/KDE4/sessionLoader.cpp
@@ -0,0 +1,51 @@
+/** \file session-loader.cpp
+\brief Define the session plugin loader test
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#include <QtCore>
+#include <QFile>
+#include <QDir>
+
+#include "sessionLoader.h"
+void SessionLoaderPlugin::setEnabled(bool newValue)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, newValue: "+QString::number(newValue));
+ QFile link(QDir::homePath()+"/.kde4/Autostart/ultracopier.sh");
+ if(!newValue)
+ {
+ if(link.exists() && !link.remove())
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to remove from the startup: "+link.errorString());
+ }
+ else
+ {
+ if(link.open(QIODevice::WriteOnly))
+ {
+ link.write(QString("#!/bin/bash\n").toLocal8Bit());
+ link.write(QString(QCoreApplication::applicationFilePath()).toLocal8Bit());
+ link.close();
+ if(!link.setPermissions(QFile::ExeOwner|QFile::WriteOwner|QFile::ReadOwner))
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to set permissions: "+link.errorString());
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to open in writing the file: "+link.errorString());
+ }
+}
+
+bool SessionLoaderPlugin::getEnabled()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, return this value: "+QString::number(QFile::exists(QDir::homePath()+"/.kde4/Autostart/ultracopier.sh")));
+ //return the value into the variable
+ return QFile::exists(QDir::homePath()+"/.kde4/Autostart/ultracopier.sh");
+}
+
+void SessionLoaderPlugin::setResources(OptionInterface * options,QString writePath,QString pluginPath,bool portableVersion)
+{
+ Q_UNUSED(options);
+ Q_UNUSED(writePath);
+ Q_UNUSED(pluginPath);
+ Q_UNUSED(portableVersion);
+}
+
+Q_EXPORT_PLUGIN2(sessionLoader, SessionLoaderPlugin);
diff --git a/plugins/SessionLoader/KDE4/sessionLoader.h b/plugins/SessionLoader/KDE4/sessionLoader.h
new file mode 100644
index 0000000..ca04fa6
--- /dev/null
+++ b/plugins/SessionLoader/KDE4/sessionLoader.h
@@ -0,0 +1,33 @@
+/** \file sessionLoader.h
+\brief Define the session loader
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#ifndef SESSION_LOADER_PLUGIN_H
+#define SESSION_LOADER_PLUGIN_H
+
+#include <QObject>
+#include "Environment.h"
+#include "../../../interface/PluginInterface_SessionLoader.h"
+
+/// \brief Define the session loader
+class SessionLoaderPlugin : public PluginInterface_SessionLoader
+{
+ Q_OBJECT
+ Q_INTERFACES(PluginInterface_SessionLoader)
+public:
+ /// \brief to set if it's enabled or not
+ void setEnabled(bool);
+ /// \brief to get if is enabled
+ bool getEnabled();
+ /// \brief set the resources for the plugins
+ void setResources(OptionInterface * options,QString writePath,QString pluginPath,bool portableVersion);
+signals:
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ /// \brief To debug source
+ void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
+ #endif
+};
+
+#endif // SESSION_LOADER_PLUGIN_H
diff --git a/plugins/SessionLoader/KDE4/sessionLoader.pro b/plugins/SessionLoader/KDE4/sessionLoader.pro
new file mode 100644
index 0000000..5351ab1
--- /dev/null
+++ b/plugins/SessionLoader/KDE4/sessionLoader.pro
@@ -0,0 +1,11 @@
+TEMPLATE = lib
+CONFIG += plugin
+HEADERS = sessionLoader.h \
+ StructEnumDefinition.h \
+ Variable.h \
+ Environment.h \
+ DebugEngineMacro.h \
+ ../../../interface/PluginInterface_SessionLoader.h
+SOURCES = sessionLoader.cpp
+TARGET = $$qtLibraryTarget(sessionLoader)
+TRANSLATIONS += Languages/fr/translation.ts
diff --git a/plugins/SessionLoader/Windows/DebugEngineMacro.h b/plugins/SessionLoader/Windows/DebugEngineMacro.h
new file mode 100644
index 0000000..a3dd648
--- /dev/null
+++ b/plugins/SessionLoader/Windows/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_DEBUG
+ #define ULTRACOPIER_DEBUGCONSOLE(a,b) void()
+#endif // ULTRACOPIER_DEBUG
+
+#endif // DEBUGENGINEMACRO_H
+
+
+
+
diff --git a/plugins/SessionLoader/Windows/Environment.h b/plugins/SessionLoader/Windows/Environment.h
new file mode 100644
index 0000000..94fd104
--- /dev/null
+++ b/plugins/SessionLoader/Windows/Environment.h
@@ -0,0 +1,11 @@
+/** \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 "DebugEngineMacro.h"
+
diff --git a/plugins/SessionLoader/Windows/StructEnumDefinition.h b/plugins/SessionLoader/Windows/StructEnumDefinition.h
new file mode 100644
index 0000000..c1758f4
--- /dev/null
+++ b/plugins/SessionLoader/Windows/StructEnumDefinition.h
@@ -0,0 +1 @@
+#include "../../../StructEnumDefinition.h"
diff --git a/plugins/SessionLoader/Windows/Variable.h b/plugins/SessionLoader/Windows/Variable.h
new file mode 100644
index 0000000..8179c93
--- /dev/null
+++ b/plugins/SessionLoader/Windows/Variable.h
@@ -0,0 +1,16 @@
+/** \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
+
+#endif // VARIABLE_H
+
+
+
diff --git a/plugins/SessionLoader/Windows/documentation.dox b/plugins/SessionLoader/Windows/documentation.dox
new file mode 100755
index 0000000..5cd8685
--- /dev/null
+++ b/plugins/SessionLoader/Windows/documentation.dox
@@ -0,0 +1,33 @@
+/* -*- mode: C++ ; c-file-style: "stroustrup" -*- **/
+
+/*
+ This file contains NO source code, just some documentation for doxygen to
+ parse.
+*/
+
+/*!
+ \mainpage Windows
+
+ \section mainpage_overview Overview
+
+ It control if it loaded with the session.\n
+ 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.\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 Method
+
+ It pass by the registry key to set/get it.
+
+ \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/SessionLoader/Windows/informations.xml b/plugins/SessionLoader/Windows/informations.xml
new file mode 100644
index 0000000..77d268b
--- /dev/null
+++ b/plugins/SessionLoader/Windows/informations.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Session loader for windows]]></title><!-- english is required -->
+ <title xml:lang="fr"><![CDATA[Chargeur de session pour windows]]></title>
+ <!-- What kind of plugin this is -->
+ <category>SessionLoader</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[This plugin allow Ultracopier to be loaded at the session opening under windows]]></description>
+ <description xml:lang="fr"><![CDATA[Ce plugin permet de charger Ultracopier à l'ouverture de la sessions sous windows]]></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.4</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>Windows</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.4
+ ]]></dependencies>
+</package> \ No newline at end of file
diff --git a/plugins/SessionLoader/Windows/sessionLoader.cpp b/plugins/SessionLoader/Windows/sessionLoader.cpp
new file mode 100755
index 0000000..232e41f
--- /dev/null
+++ b/plugins/SessionLoader/Windows/sessionLoader.cpp
@@ -0,0 +1,58 @@
+/** \file session-loader.cpp
+\brief Define the session plugin loader test
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#include <QtCore>
+
+#if defined (Q_OS_WIN32)
+#include <windows.h>
+#else
+#error "Not under windows, plugin will not work"
+#endif
+
+#include "sessionLoader.h"
+
+void SessionLoader::setEnabled(bool newValue)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, newValue: "+QString::number(newValue));
+ //set value into the variable
+ HKEY ultracopier_regkey;
+ //for autostart
+ QString runStringApp = "\"" + QApplication::applicationFilePath() + "\"";
+ runStringApp.replace( "/", "\\" );
+ wchar_t windowsString[255];
+ runStringApp.toWCharArray(windowsString);
+ RegCreateKeyEx(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, 0, REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS, 0, &ultracopier_regkey, 0);
+ if(newValue)
+ RegSetValueEx(ultracopier_regkey, TEXT("ultracopier"), 0, REG_SZ, (BYTE*)windowsString, runStringApp.length()*2);
+ else
+ RegDeleteValue(ultracopier_regkey, TEXT("ultracopier"));
+ RegCloseKey(ultracopier_regkey);
+}
+
+bool SessionLoader::getEnabled()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ //return the value into the variable
+ HKEY ultracopier_regkey;
+ bool temp=false;
+ RegCreateKeyEx(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, 0, REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS, 0, &ultracopier_regkey, 0);
+ DWORD kSize=254;
+ if(RegQueryValueEx(ultracopier_regkey,TEXT("ultracopier"),NULL,NULL,(LPBYTE)0,&kSize) == ERROR_SUCCESS)
+ temp=true;
+ RegCloseKey(ultracopier_regkey);
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"return this value: "+QString::number(temp));
+ return temp;
+}
+
+void SessionLoader::setResources(OptionInterface * options,QString writePath,QString pluginPath,bool portableVersion)
+{
+ Q_UNUSED(options);
+ Q_UNUSED(writePath);
+ Q_UNUSED(pluginPath);
+ Q_UNUSED(portableVersion);
+}
+
+Q_EXPORT_PLUGIN2(sessionLoader, SessionLoader);
diff --git a/plugins/SessionLoader/Windows/sessionLoader.h b/plugins/SessionLoader/Windows/sessionLoader.h
new file mode 100755
index 0000000..ca2e9fd
--- /dev/null
+++ b/plugins/SessionLoader/Windows/sessionLoader.h
@@ -0,0 +1,31 @@
+/** \file sessionLoader.h
+\brief Define the session loader
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#ifndef SESSION_LOADER_H
+#define SESSION_LOADER_H
+
+#include <QObject>
+#include <QApplication>
+#include "Environment.h"
+#include "../../../interface/PluginInterface_SessionLoader.h"
+
+/// \brief Define the session loader
+class SessionLoader : public PluginInterface_SessionLoader
+{
+ Q_OBJECT
+ Q_INTERFACES(PluginInterface_SessionLoader)
+public:
+ void setEnabled(bool);
+ bool getEnabled();
+ void setResources(OptionInterface * options,QString writePath,QString pluginPath,bool portableVersion);
+signals:
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ /// \brief To debug source
+ void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne);
+ #endif
+};
+
+#endif // SESSION_LOADER_H
diff --git a/plugins/SessionLoader/Windows/sessionLoader.pro b/plugins/SessionLoader/Windows/sessionLoader.pro
new file mode 100644
index 0000000..5351ab1
--- /dev/null
+++ b/plugins/SessionLoader/Windows/sessionLoader.pro
@@ -0,0 +1,11 @@
+TEMPLATE = lib
+CONFIG += plugin
+HEADERS = sessionLoader.h \
+ StructEnumDefinition.h \
+ Variable.h \
+ Environment.h \
+ DebugEngineMacro.h \
+ ../../../interface/PluginInterface_SessionLoader.h
+SOURCES = sessionLoader.cpp
+TARGET = $$qtLibraryTarget(sessionLoader)
+TRANSLATIONS += Languages/fr/translation.ts
diff --git a/plugins/Themes/Oxygen/DebugEngineMacro.h b/plugins/Themes/Oxygen/DebugEngineMacro.h
new file mode 100644
index 0000000..a3dd648
--- /dev/null
+++ b/plugins/Themes/Oxygen/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_DEBUG
+ #define ULTRACOPIER_DEBUGCONSOLE(a,b) void()
+#endif // ULTRACOPIER_DEBUG
+
+#endif // DEBUGENGINEMACRO_H
+
+
+
+
diff --git a/plugins/Themes/Oxygen/Environment.h b/plugins/Themes/Oxygen/Environment.h
new file mode 100644
index 0000000..94fd104
--- /dev/null
+++ b/plugins/Themes/Oxygen/Environment.h
@@ -0,0 +1,11 @@
+/** \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 "DebugEngineMacro.h"
+
diff --git a/plugins/Themes/Oxygen/Languages/ar/translation.ts b/plugins/Themes/Oxygen/Languages/ar/translation.ts
new file mode 100644
index 0000000..43608a5
--- /dev/null
+++ b/plugins/Themes/Oxygen/Languages/ar/translation.ts
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>InterfacePlugin</name>
+ <message>
+ <location filename="../../interface.cpp" line="87"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="100"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="145"/>
+ <source>Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="670"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="849"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>0KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Limit copy speed at:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>At the end of the copy: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Speed limit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>File collisions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>What to do: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Form</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen/Languages/de/translation.ts b/plugins/Themes/Oxygen/Languages/de/translation.ts
new file mode 100644
index 0000000..43608a5
--- /dev/null
+++ b/plugins/Themes/Oxygen/Languages/de/translation.ts
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>InterfacePlugin</name>
+ <message>
+ <location filename="../../interface.cpp" line="87"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="100"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="145"/>
+ <source>Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="670"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="849"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>0KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Limit copy speed at:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>At the end of the copy: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Speed limit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>File collisions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>What to do: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Form</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen/Languages/el/translation.ts b/plugins/Themes/Oxygen/Languages/el/translation.ts
new file mode 100644
index 0000000..43608a5
--- /dev/null
+++ b/plugins/Themes/Oxygen/Languages/el/translation.ts
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>InterfacePlugin</name>
+ <message>
+ <location filename="../../interface.cpp" line="87"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="100"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="145"/>
+ <source>Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="670"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="849"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>0KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Limit copy speed at:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>At the end of the copy: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Speed limit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>File collisions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>What to do: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Form</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen/Languages/es/translation.ts b/plugins/Themes/Oxygen/Languages/es/translation.ts
new file mode 100644
index 0000000..43608a5
--- /dev/null
+++ b/plugins/Themes/Oxygen/Languages/es/translation.ts
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>InterfacePlugin</name>
+ <message>
+ <location filename="../../interface.cpp" line="87"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="100"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="145"/>
+ <source>Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="670"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="849"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>0KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Limit copy speed at:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>At the end of the copy: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Speed limit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>File collisions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>What to do: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Form</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen/Languages/fr/translation.ts b/plugins/Themes/Oxygen/Languages/fr/translation.ts
new file mode 100644
index 0000000..89f64bc
--- /dev/null
+++ b/plugins/Themes/Oxygen/Languages/fr/translation.ts
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="fr" sourcelanguage="en">
+<context>
+ <name>InterfacePlugin</name>
+ <message>
+ <location filename="../../interface.cpp" line="+87"/>
+ <source>Copy engine</source>
+ <translation>Moteur de copie</translation>
+ </message>
+ <message>
+ <location line="+13"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation>Fichier %1/%2, taille: %3/%4</translation>
+ </message>
+ <message>
+ <location line="+45"/>
+ <source>Quit</source>
+ <translation>Quitter</translation>
+ </message>
+ <message>
+ <location line="+525"/>
+ <source>Unlimited</source>
+ <translation>Illimité</translation>
+ </message>
+ <message>
+ <location line="+179"/>
+ <source>File Name, 0KB</source>
+ <translation>Nom de fichier, 0Ko</translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>From:</source>
+ <translation>Depuis:</translation>
+ </message>
+ <message>
+ <location/>
+ <source>To:</source>
+ <translation>Vers:</translation>
+ </message>
+ <message>
+ <location/>
+ <source>0KB/sec</source>
+ <translation>0Ko/s</translation>
+ </message>
+ <message>
+ <location/>
+ <source>&amp;More</source>
+ <translation>Pl&amp;us</translation>
+ </message>
+ <message>
+ <location/>
+ <source>&amp;Pause</source>
+ <translation>&amp;Pause</translation>
+ </message>
+ <message>
+ <location/>
+ <source>&amp;Skip</source>
+ <translation>&amp;Passer</translation>
+ </message>
+ <message>
+ <location/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Annuler</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Limit copy speed at:</source>
+ <translation>Limiter la vitesse de copie à:</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Unlimited</source>
+ <translation>Illimité</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Copy list</source>
+ <translation>Liste de copie</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Source</source>
+ <translation>Source</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Size</source>
+ <translation>Taille</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Destination</source>
+ <translation>Destination</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Previous</source>
+ <translation>Précedent</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Next</source>
+ <translation>Suivant</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Options</source>
+ <translation>Options</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Copy end</source>
+ <translation>Fin de copie</translation>
+ </message>
+ <message>
+ <location/>
+ <source>At the end of the copy: </source>
+ <translation>A la fin de la copie:</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation>Garder ouvert s&apos;il y a des erreurs</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Never close</source>
+ <translation>Ne jamais fermer</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Always close</source>
+ <translation>Toujours fermer</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Speed limit</source>
+ <translation>Limitation de la vitesse</translation>
+ </message>
+ <message>
+ <location/>
+ <source> KB/s</source>
+ <translation> Ko/s</translation>
+ </message>
+ <message>
+ <location/>
+ <source>File collisions</source>
+ <translation>Collision de fichier</translation>
+ </message>
+ <message>
+ <location/>
+ <source>What to do: </source>
+ <translation>Opération à effectuer:</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Copy errors</source>
+ <translation>Erreurs de copie</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Interface</source>
+ <translation>Interface</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Show speed as main informations</source>
+ <translation>Montrer la vitesse comme une information principale</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Add file</source>
+ <translation>Ajouter un fichier</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Add folder</source>
+ <translation>Ajouter un répertoire</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Move file(s)</source>
+ <translation>Déplacer les fichier(s)</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Move folder</source>
+ <translation>Déplacer un répertoire</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Copy file(s)</source>
+ <translation>Copier les fichier(s)</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Copy folder</source>
+ <translation>Copier un répertoire</translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Form</source>
+ <translation>Depuis</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Show speed as main informations</source>
+ <translation>Montrer la vitesse comme une information principale</translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen/Languages/hi/translation.ts b/plugins/Themes/Oxygen/Languages/hi/translation.ts
new file mode 100644
index 0000000..43608a5
--- /dev/null
+++ b/plugins/Themes/Oxygen/Languages/hi/translation.ts
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>InterfacePlugin</name>
+ <message>
+ <location filename="../../interface.cpp" line="87"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="100"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="145"/>
+ <source>Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="670"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="849"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>0KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Limit copy speed at:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>At the end of the copy: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Speed limit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>File collisions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>What to do: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Form</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen/Languages/id/translation.ts b/plugins/Themes/Oxygen/Languages/id/translation.ts
new file mode 100644
index 0000000..43608a5
--- /dev/null
+++ b/plugins/Themes/Oxygen/Languages/id/translation.ts
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>InterfacePlugin</name>
+ <message>
+ <location filename="../../interface.cpp" line="87"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="100"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="145"/>
+ <source>Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="670"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="849"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>0KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Limit copy speed at:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>At the end of the copy: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Speed limit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>File collisions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>What to do: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Form</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen/Languages/it/translation.ts b/plugins/Themes/Oxygen/Languages/it/translation.ts
new file mode 100644
index 0000000..43608a5
--- /dev/null
+++ b/plugins/Themes/Oxygen/Languages/it/translation.ts
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>InterfacePlugin</name>
+ <message>
+ <location filename="../../interface.cpp" line="87"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="100"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="145"/>
+ <source>Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="670"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="849"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>0KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Limit copy speed at:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>At the end of the copy: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Speed limit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>File collisions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>What to do: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Form</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen/Languages/ja/translation.ts b/plugins/Themes/Oxygen/Languages/ja/translation.ts
new file mode 100644
index 0000000..4ea1e31
--- /dev/null
+++ b/plugins/Themes/Oxygen/Languages/ja/translation.ts
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>InterfacePlugin</name>
+ <message>
+ <location filename="../../interface.cpp" line="84"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="97"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="142"/>
+ <source>Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="667"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="846"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>0KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Limit copy speed at:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>At the end of the copy: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Speed limit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>File collisions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>What to do: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Form</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen/Languages/nl/translation.ts b/plugins/Themes/Oxygen/Languages/nl/translation.ts
new file mode 100644
index 0000000..43608a5
--- /dev/null
+++ b/plugins/Themes/Oxygen/Languages/nl/translation.ts
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>InterfacePlugin</name>
+ <message>
+ <location filename="../../interface.cpp" line="87"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="100"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="145"/>
+ <source>Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="670"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="849"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>0KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Limit copy speed at:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>At the end of the copy: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Speed limit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>File collisions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>What to do: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Form</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen/Languages/no/translation.ts b/plugins/Themes/Oxygen/Languages/no/translation.ts
new file mode 100644
index 0000000..43608a5
--- /dev/null
+++ b/plugins/Themes/Oxygen/Languages/no/translation.ts
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>InterfacePlugin</name>
+ <message>
+ <location filename="../../interface.cpp" line="87"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="100"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="145"/>
+ <source>Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="670"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="849"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>0KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Limit copy speed at:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>At the end of the copy: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Speed limit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>File collisions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>What to do: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Form</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen/Languages/pl/translation.ts b/plugins/Themes/Oxygen/Languages/pl/translation.ts
new file mode 100644
index 0000000..43608a5
--- /dev/null
+++ b/plugins/Themes/Oxygen/Languages/pl/translation.ts
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>InterfacePlugin</name>
+ <message>
+ <location filename="../../interface.cpp" line="87"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="100"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="145"/>
+ <source>Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="670"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="849"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>0KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Limit copy speed at:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>At the end of the copy: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Speed limit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>File collisions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>What to do: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Form</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen/Languages/pt/translation.ts b/plugins/Themes/Oxygen/Languages/pt/translation.ts
new file mode 100644
index 0000000..43608a5
--- /dev/null
+++ b/plugins/Themes/Oxygen/Languages/pt/translation.ts
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>InterfacePlugin</name>
+ <message>
+ <location filename="../../interface.cpp" line="87"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="100"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="145"/>
+ <source>Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="670"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="849"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>0KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Limit copy speed at:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>At the end of the copy: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Speed limit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>File collisions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>What to do: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Form</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen/Languages/ru/translation.ts b/plugins/Themes/Oxygen/Languages/ru/translation.ts
new file mode 100644
index 0000000..43608a5
--- /dev/null
+++ b/plugins/Themes/Oxygen/Languages/ru/translation.ts
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>InterfacePlugin</name>
+ <message>
+ <location filename="../../interface.cpp" line="87"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="100"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="145"/>
+ <source>Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="670"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="849"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>0KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Limit copy speed at:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>At the end of the copy: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Speed limit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>File collisions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>What to do: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Form</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen/Languages/th/translation.ts b/plugins/Themes/Oxygen/Languages/th/translation.ts
new file mode 100644
index 0000000..43608a5
--- /dev/null
+++ b/plugins/Themes/Oxygen/Languages/th/translation.ts
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>InterfacePlugin</name>
+ <message>
+ <location filename="../../interface.cpp" line="87"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="100"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="145"/>
+ <source>Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="670"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="849"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>0KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Limit copy speed at:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>At the end of the copy: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Speed limit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>File collisions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>What to do: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Form</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen/Languages/tr/translation.ts b/plugins/Themes/Oxygen/Languages/tr/translation.ts
new file mode 100644
index 0000000..43608a5
--- /dev/null
+++ b/plugins/Themes/Oxygen/Languages/tr/translation.ts
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>InterfacePlugin</name>
+ <message>
+ <location filename="../../interface.cpp" line="87"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="100"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="145"/>
+ <source>Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="670"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="849"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>0KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Limit copy speed at:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>At the end of the copy: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Speed limit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>File collisions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>What to do: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Form</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen/Languages/zh/translation.ts b/plugins/Themes/Oxygen/Languages/zh/translation.ts
new file mode 100644
index 0000000..4ea1e31
--- /dev/null
+++ b/plugins/Themes/Oxygen/Languages/zh/translation.ts
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>InterfacePlugin</name>
+ <message>
+ <location filename="../../interface.cpp" line="84"/>
+ <source>Copy engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="97"/>
+ <source>File %1/%2, size: %3/%4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="142"/>
+ <source>Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="667"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.cpp" line="846"/>
+ <source>File Name, 0KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>interfaceCopy</name>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>0KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Skip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>&amp;Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Limit copy speed at:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Unlimited</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy list</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Source</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Destination</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Previous</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Next</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Options</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy end</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>At the end of the copy: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Don&apos;t close if errors are found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Never close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Always close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Speed limit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source> KB/s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>File collisions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>What to do: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy errors</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Interface</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Add folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Move folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy file(s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../interface.ui"/>
+ <source>Copy folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>options</name>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Form</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../../options.ui"/>
+ <source>Show speed as main informations</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/plugins/Themes/Oxygen/StructEnumDefinition.h b/plugins/Themes/Oxygen/StructEnumDefinition.h
new file mode 100644
index 0000000..c1758f4
--- /dev/null
+++ b/plugins/Themes/Oxygen/StructEnumDefinition.h
@@ -0,0 +1 @@
+#include "../../../StructEnumDefinition.h"
diff --git a/plugins/Themes/Oxygen/TransferModel.cpp b/plugins/Themes/Oxygen/TransferModel.cpp
new file mode 100644
index 0000000..d63c4f2
--- /dev/null
+++ b/plugins/Themes/Oxygen/TransferModel.cpp
@@ -0,0 +1,402 @@
+#include "TransferModel.h"
+
+#define COLUMN_COUNT 3
+
+// Model
+
+TransferModel::TransferModel()
+{
+ start=QIcon(":/resources/player_play.png");
+ stop=QIcon(":/resources/player_pause.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(stopId.contains(item.id))
+ return stop;
+ else if(startId.contains(item.id))
+ return start;
+ 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;
+}
+
+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 tr( "Source" );
+ case 1:
+ return tr( "Size" );
+ case 2:
+ return tr( "Target" );
+ }
+ }
+
+ 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;
+ transfertItemList<<newItem;
+ totalFile++;
+ totalSize+=action.addAction.size;
+ }
+ break;
+ case MoveItem:
+ {
+ //bool current_entry=
+ transfertItemList.move(action.userAction.position,action.userAction.moveAt);
+ }
+ break;
+ case RemoveItem:
+ {
+ if(currentIndexSearch>0 && action.userAction.position<=currentIndexSearch)
+ currentIndexSearch--;
+ transfertItemList.removeAt(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++;
+ }
+ }
+ 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++;
+ }
+ }
+ 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++;
+ }
+ 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(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++;
+ }
+}
+
+TransferModel::currentTransfertItem TransferModel::getCurrentTransfertItem()
+{
+ currentTransfertItem returnItem;
+ returnItem.haveItem=InternalRunningOperation.size()>0;
+ if(returnItem.haveItem)
+ {
+ const ItemOfCopyListWithMoreInformations &itemTransfer=InternalRunningOperation.first();
+ 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=0;
+ else
+ {
+ if(itemTransfer.generalData.size>0)
+ returnItem.progressBar_file=((double)itemTransfer.currentProgression/itemTransfer.generalData.size)*65535;
+ else
+ returnItem.progressBar_file=0;
+ }
+ break;
+ case Transfer:
+ if(itemTransfer.generalData.size>0)
+ returnItem.progressBar_file=((double)itemTransfer.currentProgression/itemTransfer.generalData.size)*65535;
+ else
+ returnItem.progressBar_file=0;
+ break;
+ case PostOperation:
+ returnItem.progressBar_file=65535;
+ break;
+ default:
+ returnItem.progressBar_file=0;
+ }
+ }
+ return returnItem;
+}
diff --git a/plugins/Themes/Oxygen/TransferModel.h b/plugins/Themes/Oxygen/TransferModel.h
new file mode 100644
index 0000000..86fd1b4
--- /dev/null
+++ b/plugins/Themes/Oxygen/TransferModel.h
@@ -0,0 +1,79 @@
+#ifndef TRANSFERMODEL_H
+#define TRANSFERMODEL_H
+
+#include <QAbstractTableModel>
+#include <QModelIndex>
+#include <QVariant>
+#include <QList>
+#include <QSet>
+#include <QIcon>
+#include <QString>
+
+#include "StructEnumDefinition.h"
+
+#include "../../../interface/FacilityInterface.h"
+
+class TransferModel : public QAbstractTableModel
+{
+ Q_OBJECT
+public:
+ struct transfertItem
+ {
+ quint64 id;
+ QString source;
+ QString size;
+ QString destination;
+ };
+ struct ItemOfCopyListWithMoreInformations
+ {
+ quint64 currentProgression;
+ ItemOfCopyList generalData;
+ ActionTypeCopyList actionType;
+ bool custom_with_progression;
+ };
+ 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(const QList<ProgressionItem> &progressionList);
+
+ currentTransfertItem getCurrentTransfertItem();
+protected:
+ QList<transfertItem> transfertItemList;///< To have a transfer list for the user
+ QList<quint64> startId,stopId;///< To show what is started, what is stopped
+ QList<ItemOfCopyListWithMoreInformations> InternalRunningOperation;///< to have progression and stat
+ QIcon start,stop;
+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;
+};
+
+#endif // TRANSFERMODEL_H
diff --git a/plugins/Themes/Oxygen/Variable.h b/plugins/Themes/Oxygen/Variable.h
new file mode 100644
index 0000000..8179c93
--- /dev/null
+++ b/plugins/Themes/Oxygen/Variable.h
@@ -0,0 +1,16 @@
+/** \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
+
+#endif // VARIABLE_H
+
+
+
diff --git a/plugins/Themes/Oxygen/documentation.dox b/plugins/Themes/Oxygen/documentation.dox
new file mode 100755
index 0000000..2c0cf64
--- /dev/null
+++ b/plugins/Themes/Oxygen/documentation.dox
@@ -0,0 +1,32 @@
+/* -*- mode: C++ ; c-file-style: "stroustrup" -*- **/
+
+/*
+ This file contains NO source code, just some documentation for doxygen to
+ parse.
+*/
+
+/*!
+ \mainpage Oxygen
+
+ \section mainpage_overview Overview
+
+ It's the default interface for Ultracopier. The first version, it's greatly inspirated by Supercopier. But have well evolued.\n
+ 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.\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 license GPL Version 3
+ The code source is under GPL3. The image is extacted from Oxygen icon pack of KDE4.\n
+ resources/export-transfer-list.png and resources/import-transfer-list.png done by png manipulation of KDE's oxygen icon pack (16x16/actions/format-indent-more.png + 16x16/actions/format-list-unordered.png), document-save.png -> all SystemTrayIcon/systray_* (color alteration).\n
+ From 16x16/actions/: list-add.png -> add.png and SystemTrayIcon/add.png, process-stop.png -> remove.png, document-save.png -> main.png and, arrow-down.png -> moveDown.png, arrow-up.png -> moveUp.png, system-shutdown.png -> cancel.png and SystemTrayIcon/exit.png, arrow-down-double.png -> putOnBottom.png, arrow-up-double.png -> putOnTop.png, media-skip-forward.png -> player_end.png, media-playback-pause.png -> player_pause.png, media-playback-start.png -> player_play.png, document-preview.png -> search.png, help-about.png -> SystemTrayIcon/informations.png \n
+ And 16x16/categories/applications-development.png -> SystemTrayIcon/options.png
+
+*/
+
diff --git a/plugins/Themes/Oxygen/factory.cpp b/plugins/Themes/Oxygen/factory.cpp
new file mode 100644
index 0000000..c509e10
--- /dev/null
+++ b/plugins/Themes/Oxygen/factory.cpp
@@ -0,0 +1,130 @@
+/** \file factory.cpp
+\brief Define the factory core
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#include <QtCore>
+
+#include "factory.h"
+
+Factory::Factory()
+{
+ optionsEngine=NULL;
+ tempWidget=new QWidget();
+ ui=new Ui::options();
+ ui->setupUi(tempWidget);
+}
+
+Factory::~Factory()
+{
+}
+
+PluginInterface_Themes * Factory::getInstance()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ PluginInterface_Themes * newInterface=new Themes(
+ optionsEngine->getOptionValue("checkBoxShowSpeed").toBool(),facilityEngine
+ );
+ connect(newInterface,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)));
+ connect(this,SIGNAL(reloadLanguage()),newInterface,SLOT(newLanguageLoaded()));
+ return newInterface;
+}
+
+void Factory::setResources(OptionInterface * optionsEngine,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityEngine,bool portableVersion)
+{
+ Q_UNUSED(portableVersion);
+ Q_UNUSED(writePath);
+ Q_UNUSED(pluginPath);
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, writePath: "+writePath+", pluginPath: "+pluginPath);
+ this->facilityEngine=facilityEngine;
+ if(optionsEngine!=NULL)
+ {
+ this->optionsEngine=optionsEngine;
+ //load the options
+ QList<QPair<QString, QVariant> > KeysList;
+ KeysList.append(qMakePair(QString("checkBoxShowSpeed"),QVariant(true)));
+ optionsEngine->addOptionGroup(KeysList);
+ connect(optionsEngine,SIGNAL(resetOptions()),this,SLOT(resetOptions()));
+ }
+ #ifndef __GNUC__
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"__GNUC__ is set");
+ #endif
+ #ifndef __GNUC__
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"__GNUC__ is set");
+ #endif
+}
+
+QWidget * Factory::options()
+{
+ if(optionsEngine!=NULL)
+ ui->checkBoxShowSpeed->setChecked(optionsEngine->getOptionValue("checkBoxShowSpeed").toBool());
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+ connect(ui->checkBoxShowSpeed,SIGNAL(toggled(bool)),this,SLOT(checkBoxHaveChanged(bool)));
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"return the options");
+ return tempWidget;
+}
+
+QIcon Factory::getIcon(const QString &fileName)
+{
+ if(fileName=="SystemTrayIcon/exit.png")
+ {
+ QIcon tempIcon=QIcon::fromTheme("application-exit");
+ if(!tempIcon.isNull())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("use substitution ionc for: %1").arg(fileName));
+ return tempIcon;
+ }
+ }
+ if(fileName=="SystemTrayIcon/add.png")
+ {
+ QIcon tempIcon=QIcon::fromTheme("list-add");
+ if(!tempIcon.isNull())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("use substitution ionc for: %1").arg(fileName));
+ return tempIcon;
+ }
+ }
+ if(fileName=="SystemTrayIcon/informations.png")
+ {
+ QIcon tempIcon=QIcon::fromTheme("help-about");
+ if(!tempIcon.isNull())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("use substitution ionc for: %1").arg(fileName));
+ return tempIcon;
+ }
+ }
+ if(fileName=="SystemTrayIcon/options.png")
+ {
+ QIcon tempIcon=QIcon::fromTheme("applications-system");
+ if(!tempIcon.isNull())
+ {
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("use substitution ionc for: %1").arg(fileName));
+ return tempIcon;
+ }
+ }
+ return QIcon(":/resources/"+fileName);
+}
+
+void Factory::resetOptions()
+{
+}
+
+void Factory::checkBoxHaveChanged(bool toggled)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("checkBoxShowSpeed",toggled);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void Factory::newLanguageLoaded()
+{
+ ui->retranslateUi(tempWidget);
+ emit reloadLanguage();
+}
+
+Q_EXPORT_PLUGIN2(interface, Factory);
+
diff --git a/plugins/Themes/Oxygen/factory.h b/plugins/Themes/Oxygen/factory.h
new file mode 100644
index 0000000..4792553
--- /dev/null
+++ b/plugins/Themes/Oxygen/factory.h
@@ -0,0 +1,59 @@
+/** \file factory.h
+\brief Define the factory, to create instance of the interface
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#ifndef FACTORY_H
+#define FACTORY_H
+
+#include <QObject>
+#include <QWidget>
+#include <QMenu>
+#include <QCloseEvent>
+#include <QFile>
+#include <QIcon>
+
+#include "../../../interface/PluginInterface_Themes.h"
+#include "ui_options.h"
+#include "interface.h"
+#include "Environment.h"
+
+namespace Ui {
+ class options;
+}
+
+/// \brief Define the factory, to create instance of the interface
+class Factory : public PluginInterface_ThemesFactory
+{
+ Q_OBJECT
+ Q_INTERFACES(PluginInterface_ThemesFactory)
+public:
+ Factory();
+ ~Factory();
+ /// \brief to return the instance of the copy engine
+ PluginInterface_Themes * getInstance();
+ /// \brief set the resources, to store options, to have facilityInterface
+ void setResources(OptionInterface * optionsEngine,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityEngine,bool portableVersion);
+ /// \brief to get the default options widget
+ QWidget * options();
+ /// \brief to get a resource icon
+ QIcon getIcon(const QString &fileName);
+private slots:
+ void checkBoxHaveChanged(bool toggled);
+ void resetOptions();
+ void newLanguageLoaded();
+private:
+ OptionInterface * optionsEngine;
+ Ui::options *ui;
+ QWidget *tempWidget;
+ FacilityInterface * facilityEngine;
+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/Themes/Oxygen/informations.xml b/plugins/Themes/Oxygen/informations.xml
new file mode 100644
index 0000000..4242146
--- /dev/null
+++ b/plugins/Themes/Oxygen/informations.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package>
+ <title xml:lang="en"><![CDATA[Oxygen style for Ultracopier]]></title><!-- english is required -->
+ <title xml:lang="fr"><![CDATA[Style oxygen pour Ultracopier]]></title>
+ <!-- What kind of plugin this is -->
+ <category>Themes</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>linux-x86_64-pc</architecture>
+ <!-- Detailed description -->
+ <description xml:lang="en"><![CDATA[Oxygen style for Ultracopier]]></description>
+ <description xml:lang="fr"><![CDATA[Style oxygen 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>
+ <!-- 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>Oxygen</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
+ ]]></dependencies>
+</package> \ No newline at end of file
diff --git a/plugins/Themes/Oxygen/interface.cpp b/plugins/Themes/Oxygen/interface.cpp
new file mode 100755
index 0000000..e080737
--- /dev/null
+++ b/plugins/Themes/Oxygen/interface.cpp
@@ -0,0 +1,901 @@
+/** \file interface.cpp
+\brief Define the interface core
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#include <QtCore>
+#include <QMessageBox>
+
+#include "interface.h"
+#include "ui_interface.h"
+
+Themes::Themes(bool checkBoxShowSpeed,FacilityInterface * facilityEngine) :
+ ui(new Ui::interfaceCopy())
+{
+ this->facilityEngine=facilityEngine;
+ ui->setupUi(this);
+ ui->TransferList->setModel(&transferModel);
+ transferModel.setFacilityEngine(facilityEngine);
+ ui->tabWidget->setCurrentIndex(0);
+ ui->checkBoxShowSpeed->setChecked(checkBoxShowSpeed);
+ currentFile = 0;
+ totalFile = 0;
+ currentSize = 0;
+ totalSize = 0;
+ haveError = false;
+ this->show();
+ menu=new QMenu(this);
+ ui->add->setMenu(menu);
+ on_checkBoxShowSpeed_toggled(ui->checkBoxShowSpeed->isChecked());
+ currentSpeed = -1;
+ updateSpeed();
+ storeIsInPause = false;
+ isInPause(false);
+ modeIsForced = false;
+ haveStarted = false;
+ connect(ui->limitSpeed, SIGNAL(valueChanged(int)), this, SLOT(uiUpdateSpeed()));
+ connect(ui->checkBox_limitSpeed,SIGNAL(toggled(bool)), this, SLOT(uiUpdateSpeed()));
+
+ connect(ui->actionAddFile,SIGNAL(triggered()),this,SLOT(forcedModeAddFile()));
+ connect(ui->actionAddFileToCopy,SIGNAL(triggered()),this,SLOT(forcedModeAddFileToCopy()));
+ connect(ui->actionAddFileToMove,SIGNAL(triggered()),this,SLOT(forcedModeAddFileToMove()));
+ connect(ui->actionAddFolderToCopy,SIGNAL(triggered()),this,SLOT(forcedModeAddFolderToCopy()));
+ connect(ui->actionAddFolderToMove,SIGNAL(triggered()),this,SLOT(forcedModeAddFolderToMove()));
+ connect(ui->actionAddFolder,SIGNAL(triggered()),this,SLOT(forcedModeAddFolder()));
+
+ //setup the search part
+ closeTheSearchBox();
+ TimerForSearch = new QTimer(this);
+ TimerForSearch->setInterval(500);
+ TimerForSearch->setSingleShot(true);
+ searchShortcut = new QShortcut(QKeySequence("Ctrl+F"),this);
+ searchShortcut2 = new QShortcut(QKeySequence("F3"),this);
+ searchShortcut3 = new QShortcut(QKeySequence("Escape"),this);//Qt::Key_Escape
+
+ //connect the search part
+ connect(TimerForSearch, SIGNAL(timeout()), this, SLOT(hilightTheSearch()));
+ connect(searchShortcut, SIGNAL(activated()), this, SLOT(searchBoxShortcut()));
+ connect(searchShortcut2, SIGNAL(activated()), this, SLOT(on_pushButtonSearchNext_clicked()));
+ connect(ui->pushButtonCloseSearch, SIGNAL(clicked()), this, SLOT(closeTheSearchBox()));
+ connect(searchShortcut3, SIGNAL(activated()), this, SLOT(closeTheSearchBox()));
+
+ //reload directly untranslatable text
+ newLanguageLoaded();
+
+ //unpush the more button
+ ui->moreButton->setChecked(false);
+ on_moreButton_toggled(false);
+
+ /// \note important for drag and drop, \see dropEvent()
+ setAcceptDrops(true);
+
+ // try set the OS icon
+ QIcon tempIcon;
+
+ tempIcon=QIcon::fromTheme("application-exit");
+ if(!tempIcon.isNull())
+ {
+ ui->cancelButton->setIcon(tempIcon);
+ ui->pushButtonCloseSearch->setIcon(tempIcon);
+ ui->shutdown->setIcon(tempIcon);
+ }
+
+ tempIcon=QIcon::fromTheme("edit-delete");
+ if(!tempIcon.isNull())
+ ui->del->setIcon(tempIcon);
+
+ tempIcon=QIcon::fromTheme("media-playback-pause");
+ if(!tempIcon.isNull())
+ {
+ player_pause=tempIcon;
+ ui->pauseButton->setIcon(tempIcon);
+ }
+ else
+ player_pause=QIcon(":/resources/player_pause.png");
+
+ tempIcon=QIcon::fromTheme("media-playback-play");
+ if(!tempIcon.isNull())
+ player_play=tempIcon;
+ else
+ player_play=QIcon(":/resources/player_play.png");
+
+ tempIcon=QIcon::fromTheme("media-skip-forward");
+ if(!tempIcon.isNull())
+ ui->skipButton->setIcon(tempIcon);
+
+ tempIcon=QIcon::fromTheme("edit-find");
+ if(!tempIcon.isNull())
+ ui->searchButton->setIcon(tempIcon);
+
+ tempIcon=QIcon::fromTheme("document-open");
+ if(!tempIcon.isNull())
+ ui->importTransferList->setIcon(tempIcon);
+
+ tempIcon=QIcon::fromTheme("document-save");
+ if(!tempIcon.isNull())
+ ui->exportTransferList->setIcon(tempIcon);
+
+ tempIcon=QIcon::fromTheme("list-add");
+ if(!tempIcon.isNull())
+ {
+ ui->add->setIcon(tempIcon);
+ ui->actionAddFile->setIcon(tempIcon);
+ ui->actionAddFileToCopy->setIcon(tempIcon);
+ ui->actionAddFileToMove->setIcon(tempIcon);
+ ui->actionAddFolder->setIcon(tempIcon);
+ ui->actionAddFolderToCopy->setIcon(tempIcon);
+ ui->actionAddFolderToMove->setIcon(tempIcon);
+ }
+
+ shutdown=facilityEngine->haveFunctionality("shutdown");
+ ui->shutdown->setVisible(shutdown);
+
+ selectionModel=ui->TransferList->selectionModel();
+}
+
+Themes::~Themes()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ disconnect(ui->actionAddFile);
+ disconnect(ui->actionAddFolder);
+ delete selectionModel;
+ delete menu;
+}
+
+void Themes::uiUpdateSpeed()
+{
+ if(!ui->checkBoxShowSpeed->isChecked())
+ emit newSpeedLimitation(0);
+ else
+ emit newSpeedLimitation(ui->limitSpeed->value());
+}
+
+QWidget * Themes::getOptionsEngineWidget()
+{
+ return &optionEngineWidget;
+}
+
+void Themes::getOptionsEngineEnabled(bool isEnabled)
+{
+ if(isEnabled)
+ ui->tabWidget->addTab(&optionEngineWidget,tr("Copy engine"));
+}
+
+void Themes::closeEvent(QCloseEvent *event)
+{
+ event->ignore();
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ this->hide();
+ emit cancel();
+}
+
+void Themes::updateOverallInformation()
+{
+ ui->overall->setText(tr("File %1/%2, size: %3/%4").arg(currentFile).arg(totalFile).arg(facilityEngine->sizeToString(currentSize)).arg(facilityEngine->sizeToString(totalSize)));
+}
+
+void Themes::actionInProgess(EngineActionInProgress action)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"start: "+QString::number(action));
+ this->action=action;
+ switch(action)
+ {
+ case Copying:
+ case CopyingAndListing:
+ ui->progressBar_all->setMaximum(65535);
+ ui->progressBar_all->setMinimum(0);
+ break;
+ case Listing:
+ ui->progressBar_all->setMaximum(0);
+ ui->progressBar_all->setMinimum(0);
+ break;
+ case Idle:
+ if(haveStarted)
+ {
+ if(shutdown && ui->shutdown->isChecked())
+ {
+ facilityEngine->callFunctionality("shutdown");
+ return;
+ }
+ switch(ui->comboBox_copyEnd->currentIndex())
+ {
+ case 2:
+ emit cancel();
+ break;
+ case 0:
+ if(!haveError)
+ emit cancel();
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"Very wrong switch case!");
+ break;
+ }
+ switch(action)
+ {
+ case Copying:
+ case CopyingAndListing:
+ ui->pauseButton->setEnabled(true);
+ haveStarted=true;
+ ui->cancelButton->setText(tr("Quit"));
+ break;
+ case Idle:
+ ui->pauseButton->setEnabled(false);
+ break;
+ default:
+ break;
+ }
+}
+
+void Themes::newFolderListing(const QString &path)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ if(action==Listing)
+ ui->from->setText(path);
+}
+
+void Themes::detectedSpeed(const quint64 &speed)//in byte per seconds
+{
+ ui->currentSpeed->setText(facilityEngine->speedToString(speed));
+}
+
+void Themes::remainingTime(const int &remainingSeconds)
+{
+ if(remainingSeconds==-1)
+ ui->labelTimeRemaining->setText("<html><body>&#8734;</body></html>");
+ else
+ {
+ TimeDecomposition time=facilityEngine->secondsToTimeDecomposition(remainingSeconds);
+ ui->labelTimeRemaining->setText(QString::number(time.hour)+":"+QString::number(time.minute)+":"+QString::number(time.second));
+ }
+}
+
+void Themes::newCollisionAction(const QString &action)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ if(ui->comboBox_fileCollisions->findData(action)!=-1)
+ ui->comboBox_fileCollisions->setCurrentIndex(ui->comboBox_fileCollisions->findData(action));
+}
+
+void Themes::newErrorAction(const QString &action)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ if(ui->comboBox_copyErrors->findData(action)!=-1)
+ ui->comboBox_copyErrors->setCurrentIndex(ui->comboBox_copyErrors->findData(action));
+}
+
+void Themes::errorDetected()
+{
+ haveError=true;
+}
+
+//speed limitation
+bool Themes::setSpeedLimitation(const qint64 &speedLimitation)
+{
+ currentSpeed=speedLimitation;
+ updateSpeed();
+ return true;
+}
+
+//get information about the copy
+void Themes::setGeneralProgression(const quint64 &current,const quint64 &total)
+{
+ currentSize=current;
+ totalSize=total;
+ if(total>0)
+ {
+ int newIndicator=((double)current/total)*65535;
+ ui->progressBar_all->setValue(newIndicator);
+ }
+ else
+ ui->progressBar_all->setValue(0);
+}
+
+void Themes::setFileProgression(const QList<ProgressionItem> &progressionList)
+{
+ transferModel.setFileProgression(progressionList);
+ updateCurrentFileInformation();
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to found the file");
+}
+
+void Themes::setCollisionAction(const QList<QPair<QString,QString> > &list)
+{
+ ui->comboBox_fileCollisions->clear();
+ index=0;
+ loop_size=list.size();
+ while(index<loop_size)
+ {
+ ui->comboBox_fileCollisions->addItem(list.at(index).first,list.at(index).second);
+ index++;
+ }
+}
+
+void Themes::setErrorAction(const QList<QPair<QString,QString> > &list)
+{
+ ui->comboBox_fileCollisions->clear();
+ index=0;
+ loop_size=list.size();
+ while(index<loop_size)
+ {
+ ui->comboBox_copyErrors->addItem(list.at(index).first,list.at(index).second);
+ index++;
+ }
+}
+
+//edit the transfer list
+/// \todo check and re-enable to selection
+void Themes::getActionOnList(const QList<returnActionOnCopyList> &returnActions)
+{
+ 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)
+ {
+ ui->progressBar_all->setValue(65535);
+ ui->progressBar_file->setValue(65535);
+ currentSize=totalSize;
+ }
+ updateOverallInformation();
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"transferModel.rowCount(): "+QString::number(transferModel.rowCount()));
+}
+
+void Themes::setCopyType(CopyType type)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ this->type=type;
+ updateModeAndType();
+}
+
+void Themes::forceCopyMode(CopyMode mode)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ modeIsForced=true;
+ this->mode=mode;
+ if(mode==Copy)
+ this->setWindowTitle("Ultracopier - "+facilityEngine->translateText("Copy"));
+ else
+ this->setWindowTitle("Ultracopier - "+facilityEngine->translateText("Move"));
+ updateModeAndType();
+}
+
+void Themes::setTransferListOperation(TransferListOperation transferListOperation)
+{
+ ui->exportTransferList->setVisible(transferListOperation & TransferListOperation_Export);
+ ui->importTransferList->setVisible(transferListOperation & TransferListOperation_Import);
+}
+
+void Themes::haveExternalOrder()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+// ui->moreButton->toggle();
+}
+
+void Themes::isInPause(bool isInPause)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"isInPause: "+QString::number(isInPause));
+ //resume in auto the pause
+ storeIsInPause=isInPause;
+ if(isInPause)
+ {
+ ui->pauseButton->setIcon(player_play);
+ ui->pauseButton->setText(facilityEngine->translateText("Resume"));
+ }
+ else
+ {
+ ui->pauseButton->setIcon(player_pause);
+ ui->pauseButton->setText(facilityEngine->translateText("Pause"));
+ }
+}
+
+void Themes::updateCurrentFileInformation()
+{
+ TransferModel::currentTransfertItem transfertItem=transferModel.getCurrentTransfertItem();
+ if(transfertItem.haveItem)
+ {
+ ui->from->setText(transfertItem.from);
+ ui->to->setText(transfertItem.to);
+ ui->current_file->setText(transfertItem.current_file);
+ ui->progressBar_file->setValue(transfertItem.progressBar_file);
+ }
+ else
+ {
+ ui->from->setText("");
+ ui->to->setText("");
+ ui->current_file->setText("-");
+ if(haveStarted)
+ ui->progressBar_file->setValue(65535);
+ else
+ ui->progressBar_file->setValue(0);
+ }
+}
+
+
+void Themes::on_putOnTop_clicked()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ selectedItems=selectionModel->selectedRows();
+ ids.clear();
+ index=0;
+ loop_size=selectedItems.size();
+ while(index<loop_size)
+ {
+ ids << transferModel.data(selectedItems.at(index),Qt::UserRole).toULongLong();
+ index++;
+ }
+ if(ids.size()>0)
+ emit moveItemsOnTop(ids);
+}
+
+void Themes::on_pushUp_clicked()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ selectedItems=selectionModel->selectedRows();
+ ids.clear();
+ index=0;
+ loop_size=selectedItems.size();
+ while(index<loop_size)
+ {
+ ids << transferModel.data(selectedItems.at(index),Qt::UserRole).toULongLong();
+ index++;
+ }
+ if(ids.size()>0)
+ emit moveItemsUp(ids);
+}
+
+void Themes::on_pushDown_clicked()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ selectedItems=selectionModel->selectedRows();
+ ids.clear();
+ index=0;
+ loop_size=selectedItems.size();
+ while(index<loop_size)
+ {
+ ids << transferModel.data(selectedItems.at(index),Qt::UserRole).toULongLong();
+ index++;
+ }
+ if(ids.size()>0)
+ emit moveItemsDown(ids);
+}
+
+void Themes::on_putOnBottom_clicked()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ selectedItems=selectionModel->selectedRows();
+ ids.clear();
+ index=0;
+ loop_size=selectedItems.size();
+ while(index<loop_size)
+ {
+ ids << transferModel.data(selectedItems.at(index),Qt::UserRole).toULongLong();
+ index++;
+ }
+ if(ids.size()>0)
+ emit moveItemsOnBottom(ids);
+}
+
+void Themes::on_del_clicked()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ selectedItems=selectionModel->selectedRows();
+ ids.clear();
+ index=0;
+ loop_size=selectedItems.size();
+ while(index<loop_size)
+ {
+ ids << transferModel.data(selectedItems.at(index),Qt::UserRole).toULongLong();
+ index++;
+ }
+ if(ids.size()>0)
+ emit removeItems(ids);
+}
+
+void Themes::on_cancelButton_clicked()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ this->hide();
+ emit cancel();
+}
+
+void Themes::on_checkBoxShowSpeed_toggled(bool checked)
+{
+ if(checked==checked)
+ updateSpeed();
+}
+
+void Themes::on_SliderSpeed_valueChanged(int value)
+{
+ switch(value)
+ {
+ case 0:
+ currentSpeed=0;
+ break;
+ case 1:
+ currentSpeed=1024;
+ break;
+ case 2:
+ currentSpeed=1024*4;
+ break;
+ case 3:
+ currentSpeed=1024*16;
+ break;
+ case 4:
+ currentSpeed=1024*64;
+ break;
+ case 5:
+ currentSpeed=1024*128;
+ break;
+ }
+ emit newSpeedLimitation(currentSpeed);
+}
+
+void Themes::updateSpeed()
+{
+ bool checked;
+ if(currentSpeed==-1)
+ {
+ ui->checkBoxShowSpeed->setEnabled(false);
+ checked=false;
+ }
+ else
+ {
+ ui->checkBoxShowSpeed->setEnabled(true);
+ checked=ui->checkBox_limitSpeed->isChecked();
+ }
+ ui->label_Slider_speed->setVisible(checked);
+ ui->SliderSpeed->setVisible(checked);
+ ui->label_SpeedMaxValue->setVisible(checked);
+ ui->checkBox_limitSpeed->setEnabled(checked);
+ if(checked)
+ {
+ ui->limitSpeed->setEnabled(false);
+ if(currentSpeed==0)
+ {
+ ui->SliderSpeed->setValue(0);
+ ui->label_SpeedMaxValue->setText(tr("Unlimited"));
+ }
+ else if(currentSpeed<=1024)
+ {
+ if(currentSpeed!=1024)
+ {
+ currentSpeed=1024;
+ emit newSpeedLimitation(currentSpeed);
+ }
+ ui->SliderSpeed->setValue(1);
+ ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*1));
+ }
+ else if(currentSpeed<=1024*4)
+ {
+ if(currentSpeed!=1024*4)
+ {
+ currentSpeed=1024*4;
+ emit newSpeedLimitation(currentSpeed);
+ }
+ ui->SliderSpeed->setValue(2);
+ ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*4));
+ }
+ else if(currentSpeed<=1024*16)
+ {
+ if(currentSpeed!=1024*16)
+ {
+ currentSpeed=1024*16;
+ emit newSpeedLimitation(currentSpeed);
+ }
+ ui->SliderSpeed->setValue(3);
+ ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*16));
+ }
+ else if(currentSpeed<=1024*64)
+ {
+ if(currentSpeed!=1024*64)
+ {
+ currentSpeed=1024*64;
+ emit newSpeedLimitation(currentSpeed);
+ }
+ ui->SliderSpeed->setValue(4);
+ ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*64));
+ }
+ else
+ {
+ if(currentSpeed!=1024*128)
+ {
+ currentSpeed=1024*128;
+ emit newSpeedLimitation(currentSpeed);
+ }
+ ui->SliderSpeed->setValue(5);
+ ui->label_SpeedMaxValue->setText(facilityEngine->speedToString((double)(1024*1024)*128));
+ }
+ }
+ else
+ {
+ ui->checkBox_limitSpeed->setChecked(currentSpeed>0);
+ if(currentSpeed>0)
+ ui->limitSpeed->setValue(currentSpeed);
+ ui->checkBox_limitSpeed->setEnabled(currentSpeed!=-1);
+ ui->limitSpeed->setEnabled(ui->checkBox_limitSpeed->isChecked());
+ }
+}
+
+void Themes::on_limitSpeed_valueChanged(int value)
+{
+ currentSpeed=value;
+ emit newSpeedLimitation(currentSpeed);
+}
+
+void Themes::on_checkBox_limitSpeed_clicked()
+{
+ if(ui->checkBox_limitSpeed->isChecked())
+ {
+ if(ui->checkBoxShowSpeed->isChecked())
+ on_SliderSpeed_valueChanged(ui->SliderSpeed->value());
+ else
+ on_limitSpeed_valueChanged(ui->limitSpeed->value());
+ }
+ else
+ currentSpeed=0;
+}
+
+void Themes::on_pauseButton_clicked()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ if(storeIsInPause)
+ emit resume();
+ else
+ emit pause();
+}
+
+void Themes::on_skipButton_clicked()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ TransferModel::currentTransfertItem transfertItem=transferModel.getCurrentTransfertItem();
+ if(transfertItem.haveItem)
+ emit skip(transfertItem.id);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to skip the transfer, because no transfer running");
+}
+
+void Themes::updateModeAndType()
+{
+ menu->clear();
+ if(modeIsForced)
+ {
+ menu->addAction(ui->actionAddFile);
+ if(type==FileAndFolder)
+ menu->addAction(ui->actionAddFolder);
+ }
+ else
+ {
+ menu->addAction(ui->actionAddFileToCopy);
+ menu->addAction(ui->actionAddFileToMove);
+ if(type==FileAndFolder)
+ {
+ menu->addAction(ui->actionAddFolderToCopy);
+ menu->addAction(ui->actionAddFolderToMove);
+ }
+ }
+}
+
+void Themes::forcedModeAddFile()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ emit userAddFile(mode);
+}
+
+void Themes::forcedModeAddFolder()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ emit userAddFolder(mode);
+}
+
+void Themes::forcedModeAddFileToCopy()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ emit userAddFile(Copy);
+}
+
+void Themes::forcedModeAddFolderToCopy()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ emit userAddFolder(Copy);
+}
+
+void Themes::forcedModeAddFileToMove()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ emit userAddFile(Move);
+}
+
+void Themes::forcedModeAddFolderToMove()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ emit userAddFolder(Move);
+}
+
+void Themes::newLanguageLoaded()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ if(modeIsForced)
+ forceCopyMode(mode);
+ ui->retranslateUi(this);
+ if(!haveStarted)
+ ui->current_file->setText(tr("File Name, 0KB"));
+ else
+ updateCurrentFileInformation();
+ updateOverallInformation();
+ updateSpeed();
+ ui->tabWidget->setTabText(4,facilityEngine->translateText("Copy engine"));
+ on_moreButton_toggled(ui->moreButton->isChecked());
+}
+
+void Themes::on_pushButtonCloseSearch_clicked()
+{
+ closeTheSearchBox();
+}
+
+//close the search box
+void Themes::closeTheSearchBox()
+{
+ currentIndexSearch = -1;
+ ui->lineEditSearch->clear();
+ ui->lineEditSearch->hide();
+ ui->pushButtonSearchPrev->hide();
+ ui->pushButtonSearchNext->hide();
+ ui->pushButtonCloseSearch->hide();
+ ui->searchButton->setChecked(false);
+ hilightTheSearch();
+}
+
+//search box shortcut
+void Themes::searchBoxShortcut()
+{
+/* if(ui->lineEditSearch->isHidden())
+ {*/
+ ui->lineEditSearch->show();
+ ui->pushButtonSearchPrev->show();
+ ui->pushButtonSearchNext->show();
+ ui->pushButtonCloseSearch->show();
+ ui->lineEditSearch->setFocus(Qt::ShortcutFocusReason);
+ ui->searchButton->setChecked(true);
+/* }
+ else
+ closeTheSearchBox();*/
+}
+
+//hilight the search
+void Themes::hilightTheSearch(bool searchNext)
+{
+ int result=transferModel.search(ui->lineEditSearch->text(),searchNext);
+ if(ui->lineEditSearch->text().isEmpty())
+ ui->lineEditSearch->setStyleSheet("");
+ else
+ {
+ if(result==-1)
+ ui->lineEditSearch->setStyleSheet("background-color: rgb(255, 150, 150);");
+ else
+ {
+ ui->lineEditSearch->setStyleSheet("background-color: rgb(193,255,176);");
+ ui->TransferList->scrollTo(transferModel.index(result,0));
+ }
+ }
+}
+
+void Themes::on_pushButtonSearchPrev_clicked()
+{
+ int result=transferModel.searchPrev(ui->lineEditSearch->text());
+ if(ui->lineEditSearch->text().isEmpty())
+ ui->lineEditSearch->setStyleSheet("");
+ else
+ {
+ if(result==-1)
+ ui->lineEditSearch->setStyleSheet("background-color: rgb(255, 150, 150);");
+ else
+ {
+ ui->lineEditSearch->setStyleSheet("background-color: rgb(193,255,176);");
+ ui->TransferList->scrollTo(transferModel.index(result,0));
+ }
+ }
+}
+
+void Themes::on_pushButtonSearchNext_clicked()
+{
+ hilightTheSearch(true);
+}
+
+void Themes::on_lineEditSearch_returnPressed()
+{
+ hilightTheSearch();
+}
+
+void Themes::on_lineEditSearch_textChanged(QString text)
+{
+ if(text=="")
+ {
+ TimerForSearch->stop();
+ hilightTheSearch();
+ }
+ else
+ TimerForSearch->start();
+}
+
+void Themes::on_moreButton_toggled(bool checked)
+{
+ if(checked)
+ this->setMaximumHeight(16777215);
+ else
+ this->setMaximumHeight(130);
+ // usefull under windows
+ this->updateGeometry();
+ this->update();
+ this->adjustSize();
+}
+
+void Themes::on_comboBox_copyErrors_currentIndexChanged(int index)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ emit sendErrorAction(ui->comboBox_copyErrors->itemData(index).toString());
+}
+
+void Themes::on_comboBox_fileCollisions_currentIndexChanged(int index)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
+ emit sendCollisionAction(ui->comboBox_fileCollisions->itemData(index).toString());
+}
+
+/* drag event processing
+
+need setAcceptDrops(true); into the constructor
+need implementation to accept the drop:
+void dragEnterEvent(QDragEnterEvent* event);
+void dragMoveEvent(QDragMoveEvent* event);
+void dragLeaveEvent(QDragLeaveEvent* event);
+*/
+void Themes::dropEvent(QDropEvent *event)
+{
+ const QMimeData* mimeData = event->mimeData();
+ if(mimeData->hasUrls())
+ {
+ emit urlDropped(mimeData->urls());
+ event->acceptProposedAction();
+ }
+}
+
+void Themes::dragEnterEvent(QDragEnterEvent* event)
+{
+ // if some actions should not be usable, like move, this code must be adopted
+ event->acceptProposedAction();
+}
+
+void Themes::dragMoveEvent(QDragMoveEvent* event)
+{
+ // if some actions should not be usable, like move, this code must be adopted
+ event->acceptProposedAction();
+}
+
+void Themes::dragLeaveEvent(QDragLeaveEvent* event)
+{
+ event->accept();
+}
+
+void Themes::on_searchButton_toggled(bool checked)
+{
+ if(checked)
+ searchBoxShortcut();
+ else
+ closeTheSearchBox();
+}
+
+void Themes::on_exportTransferList_clicked()
+{
+ emit exportTransferList();
+}
+
+void Themes::on_importTransferList_clicked()
+{
+ emit importTransferList();
+}
diff --git a/plugins/Themes/Oxygen/interface.h b/plugins/Themes/Oxygen/interface.h
new file mode 100755
index 0000000..745d325
--- /dev/null
+++ b/plugins/Themes/Oxygen/interface.h
@@ -0,0 +1,213 @@
+/** \file interface.h
+\brief Define the interface
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#ifndef INTERFACE_H
+#define INTERFACE_H
+
+#include <QObject>
+#include <QWidget>
+#include <QMenu>
+#include <QCloseEvent>
+#include <QShortcut>
+#include <QItemSelectionModel>
+
+#include "../../../interface/PluginInterface_Themes.h"
+
+#include "ui_interface.h"
+#include "ui_options.h"
+#include "Environment.h"
+#include "TransferModel.h"
+
+// for windows progress bar
+#ifndef __GNUC__
+#include <shobjidl.h>
+#endif
+
+namespace Ui {
+ class interfaceCopy;
+}
+
+/// \brief Define the interface
+class Themes : public PluginInterface_Themes
+{
+ Q_OBJECT
+public:
+ Themes(bool checkBoxShowSpeed,FacilityInterface * facilityEngine);
+ ~Themes();
+ //send information about the copy
+ /// \brief to set the action in progress
+ void actionInProgess(EngineActionInProgress);
+ /// \brief the new folder is listing
+ void newFolderListing(const QString &path);
+ /** \brief show the detected speed
+ * in byte per seconds */
+ void detectedSpeed(const quint64 &speed);
+ /** \brief show the remaining time
+ * time in seconds */
+ void remainingTime(const int &remainingSeconds);
+ /// \brief set the current collision action
+ void newCollisionAction(const QString &action);
+ /// \brief set the current error action
+ void newErrorAction(const QString &action);
+ /// \brief set one error is detected
+ void errorDetected();
+ //speed limitation
+ /** \brief the max speed used
+ * in byte per seconds, -1 if not able, 0 if disabled */
+ bool setSpeedLimitation(const qint64 &speedLimitation);
+ //get information about the copy
+ /// \brief show the general progression
+ void setGeneralProgression(const quint64 &current,const quint64 &total);
+ /// \brief show the file progression
+ void setFileProgression(const QList<ProgressionItem> &progressionList);
+ /// \brief set collision action
+ void setCollisionAction(const QList<QPair<QString,QString> > &);
+ /// \brief set error action
+ void setErrorAction(const QList<QPair<QString,QString> > &);
+ /// \brief set the copyType -> file or folder
+ void setCopyType(CopyType);
+ /// \brief set the copyMove -> copy or move, to force in copy or move, else support both
+ void forceCopyMode(CopyMode);
+ /// \brief set if transfer list is exportable/importable
+ void setTransferListOperation(TransferListOperation transferListOperation);
+ //edit the transfer list
+ /// \brief get action on the transfer list (add/move/remove)
+ void getActionOnList(const QList<returnActionOnCopyList> &returnActions);
+ /** \brief set if the order is external (like file manager copy)
+ * to notify the interface, which can hide add folder/filer button */
+ void haveExternalOrder();
+ /// \brief set if is in pause
+ void isInPause(bool);
+ /// \brief get the widget for the copy engine
+ QWidget * getOptionsEngineWidget();
+ /// \brief to set if the copy engine is found
+ void getOptionsEngineEnabled(bool isEnabled);
+public slots:
+ /// \brief set the translate
+ void newLanguageLoaded();
+private slots:
+ void on_putOnTop_clicked();
+ void on_pushUp_clicked();
+ void on_pushDown_clicked();
+ void on_putOnBottom_clicked();
+ void on_del_clicked();
+ void on_cancelButton_clicked();
+ void on_checkBoxShowSpeed_toggled(bool checked);
+ void on_SliderSpeed_valueChanged(int value);
+ void on_limitSpeed_valueChanged(int );
+ void on_checkBox_limitSpeed_clicked();
+ void on_pauseButton_clicked();
+ void on_skipButton_clicked();
+ void forcedModeAddFile();
+ void forcedModeAddFolder();
+ void forcedModeAddFileToCopy();
+ void forcedModeAddFolderToCopy();
+ void forcedModeAddFileToMove();
+ void forcedModeAddFolderToMove();
+ void uiUpdateSpeed();
+ void on_pushButtonCloseSearch_clicked();
+ //close the search box
+ void closeTheSearchBox();
+ //search box shortcut
+ void searchBoxShortcut();
+ //hilight the search
+ void hilightTheSearch(bool searchNext=false);
+ //auto connect
+ void on_pushButtonSearchPrev_clicked();
+ void on_pushButtonSearchNext_clicked();
+ void on_lineEditSearch_returnPressed();
+ void on_lineEditSearch_textChanged(QString text);
+ void on_moreButton_toggled(bool checked);
+ void on_comboBox_copyErrors_currentIndexChanged(int index);
+ void on_comboBox_fileCollisions_currentIndexChanged(int index);
+ void on_searchButton_toggled(bool checked);
+ void on_exportTransferList_clicked();
+ void on_importTransferList_clicked();
+private:
+ Ui::interfaceCopy *ui;
+ quint64 currentFile;
+ quint64 totalFile;
+ quint64 currentSize;
+ quint64 totalSize;
+ void updateOverallInformation();
+ void updateCurrentFileInformation();
+ QMenu *menu;
+ EngineActionInProgress action;
+ void closeEvent(QCloseEvent *event);
+ qint64 currentSpeed;
+ void updateSpeed();
+ bool storeIsInPause;
+ bool modeIsForced;
+ CopyType type;
+ CopyMode mode;
+ void updateModeAndType();
+ bool haveStarted;
+ bool haveError;
+ QWidget optionEngineWidget;
+ QShortcut *searchShortcut;
+ QShortcut *searchShortcut2;
+ QShortcut *searchShortcut3;
+ QTimer *TimerForSearch;
+ int currentIndexSearch; ///< Current index search in starting at the end
+ FacilityInterface * facilityEngine;
+ QIcon player_play,player_pause;
+ QItemSelectionModel *selectionModel;
+ QModelIndexList selectedItems;
+ //temp variables
+ int loop_size,loop_sub_size,index,indexAction;
+ QList<int> ids;
+ quint64 baseRow,addRow,removeRow;
+ /// \brief the custom transfer model
+ TransferModel transferModel;
+ /** \brief drag event processing
+
+ need setAcceptDrops(true); into the constructor
+ need implementation to accept the drop:
+ void dragEnterEvent(QDragEnterEvent* event);
+ void dragMoveEvent(QDragMoveEvent* event);
+ void dragLeaveEvent(QDragLeaveEvent* event);
+ */
+ void dropEvent(QDropEvent *event);
+ /** \brief accept all event to allow the drag and drop
+ \see dropEvent() */
+ void dragEnterEvent(QDragEnterEvent* event);
+ /** \brief accept all event to allow the drag and drop
+ \see dropEvent() */
+ void dragMoveEvent(QDragMoveEvent* event);
+ /** \brief accept all event to allow the drag and drop
+ \see dropEvent() */
+ void dragLeaveEvent(QDragLeaveEvent* event);
+ //have functionality
+ bool shutdown;
+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 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 sendCollisionAction(QString action);
+ void sendErrorAction(QString action);
+ void newSpeedLimitation(qint64);
+};
+
+#endif // INTERFACE_H
diff --git a/plugins/Themes/Oxygen/interface.pro b/plugins/Themes/Oxygen/interface.pro
new file mode 100644
index 0000000..c5b2680
--- /dev/null
+++ b/plugins/Themes/Oxygen/interface.pro
@@ -0,0 +1,46 @@
+TEMPLATE = lib
+CONFIG += plugin
+HEADERS = interface.h \
+ StructEnumDefinition.h \
+ factory.h \
+ DebugEngineMacro.h \
+ Environment.h \
+ Variable.h \
+ ../../../interface/PluginInterface_Themes.h \
+ ../../../interface/FacilityInterface.h \
+ ../../../interface/OptionInterface.h \
+ TransferModel.h
+SOURCES = interface.cpp \
+ factory.cpp \
+ TransferModel.cpp
+TARGET = $$qtLibraryTarget(interface)
+TRANSLATIONS += Languages/fr/translation.ts \
+ Languages/ar/translation.ts \
+ Languages/ch/translation.ts \
+ Languages/es/translation.ts \
+ Languages/de/translation.ts \
+ Languages/el/translation.ts \
+ Languages/it/translation.ts \
+ Languages/jp/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
+
+win32 {
+ RESOURCES += resources_windows.qrc
+}
+!win32 {
+ RESOURCES += resources_unix.qrc
+}
+
+RESOURCES += resources.qrc
+
+FORMS += \
+ interface.ui \
+ options.ui
diff --git a/plugins/Themes/Oxygen/interface.ui b/plugins/Themes/Oxygen/interface.ui
new file mode 100644
index 0000000..5f2a0d9
--- /dev/null
+++ b/plugins/Themes/Oxygen/interface.ui
@@ -0,0 +1,1019 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>interfaceCopy</class>
+ <widget class="QWidget" name="interfaceCopy">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>483</width>
+ <height>448</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string notr="true">Ultracopier</string>
+ </property>
+ <property name="windowIcon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/resources/main.png</normaloff>:/resources/main.png</iconset>
+ </property>
+ <layout class="QVBoxLayout">
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <property name="margin">
+ <number>1</number>
+ </property>
+ <item>
+ <layout class="QHBoxLayout">
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="from_label">
+ <property name="text">
+ <string>From:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="from">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_5">
+ <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">
+ <property name="spacing">
+ <number>5</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="to_label">
+ <property name="text">
+ <string>To:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="to">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </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>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <item>
+ <widget class="QLabel" name="overall">
+ <property name="text">
+ <string notr="true">File 0/0, Total: 0KB</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="labelTimeRemaining">
+ <property name="text">
+ <string notr="true">&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:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;&amp;nbsp;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="shutdown">
+ <property name="maximumSize">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property name="toolTip">
+ <string>Shutdown when is finish</string>
+ </property>
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/resources/SystemTrayIcon/exit.png</normaloff>:/resources/SystemTrayIcon/exit.png</iconset>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QProgressBar" name="progressBar_all">
+ <property name="maximumSize">
+ <size>
+ <width>16777215</width>
+ <height>16</height>
+ </size>
+ </property>
+ <property name="maximum">
+ <number>65535</number>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="current_file">
+ <property name="text">
+ <string notr="true">File Name, 0KB</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QProgressBar" name="progressBar_file">
+ <property name="maximumSize">
+ <size>
+ <width>16777215</width>
+ <height>16</height>
+ </size>
+ </property>
+ <property name="maximum">
+ <number>65535</number>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout">
+ <property name="spacing">
+ <number>4</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="currentSpeed">
+ <property name="minimumSize">
+ <size>
+ <width>60</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>0KB/sec</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer>
+ <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="moreButton">
+ <property name="text">
+ <string>&amp;More</string>
+ </property>
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/resources/moveDown.png</normaloff>:/resources/moveDown.png</iconset>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="pauseButton">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>&amp;Pause</string>
+ </property>
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/resources/player_pause.png</normaloff>:/resources/player_pause.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="skipButton">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>&amp;Skip</string>
+ </property>
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/resources/player_end.png</normaloff>:/resources/player_end.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="cancelButton">
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/resources/cancel.png</normaloff>:/resources/cancel.png</iconset>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="limitSpeedAsMain">
+ <item>
+ <widget class="QLabel" name="label_Slider_speed">
+ <property name="text">
+ <string>Limit copy speed at:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSlider" name="SliderSpeed">
+ <property name="maximum">
+ <number>5</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_SpeedMaxValue">
+ <property name="text">
+ <string>Unlimited</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>1</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QTabWidget" name="tabWidget">
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <widget class="QWidget" name="tab">
+ <attribute name="icon">
+ <iconset>
+ <normaloff>:/styles/kde3/player_playlist.png</normaloff>:/styles/kde3/player_playlist.png</iconset>
+ </attribute>
+ <attribute name="title">
+ <string>Copy list</string>
+ </attribute>
+ <layout class="QHBoxLayout">
+ <item>
+ <layout class="QVBoxLayout">
+ <property name="spacing">
+ <number>1</number>
+ </property>
+ <item>
+ <widget class="QToolButton" name="putOnTop">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/resources/putOnTop.png</normaloff>:/resources/putOnTop.png</iconset>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="pushUp">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/resources/moveUp.png</normaloff>:/resources/moveUp.png</iconset>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="pushDown">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/resources/moveDown.png</normaloff>:/resources/moveDown.png</iconset>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="putOnBottom">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/resources/putOnBottom.png</normaloff>:/resources/putOnBottom.png</iconset>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="add">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ </property>
+ <property name="popupMode">
+ <enum>QToolButton::InstantPopup</enum>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="del">
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/resources/remove.png</normaloff>:/resources/remove.png</iconset>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="searchButton">
+ <property name="toolTip">
+ <string>Ctrl+F</string>
+ </property>
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/resources/search.png</normaloff>:/resources/search.png</iconset>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="exportTransferList">
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/resources/export-transfer-list.png</normaloff>:/resources/export-transfer-list.png</iconset>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QToolButton" name="importTransferList">
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/resources/import-transfer-list.png</normaloff>:/resources/import-transfer-list.png</iconset>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer>
+ <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>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QTreeView" name="TransferList">
+ <property name="selectionMode">
+ <enum>QAbstractItemView::ExtendedSelection</enum>
+ </property>
+ <property name="rootIsDecorated">
+ <bool>false</bool>
+ </property>
+ <property name="uniformRowHeights">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayoutSearch">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QLineEdit" name="lineEditSearch"/>
+ </item>
+ <item>
+ <widget class="QPushButton" name="pushButtonSearchPrev">
+ <property name="text">
+ <string>Previous</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="pushButtonSearchNext">
+ <property name="text">
+ <string>Next</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="pushButtonCloseSearch">
+ <property name="minimumSize">
+ <size>
+ <width>25</width>
+ <height>25</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>25</width>
+ <height>25</height>
+ </size>
+ </property>
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/resources/remove.png</normaloff>:/resources/remove.png</iconset>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="tab_2">
+ <attribute name="icon">
+ <iconset>
+ <normaloff>:/styles/kde3/tools.png</normaloff>:/styles/kde3/tools.png</iconset>
+ </attribute>
+ <attribute name="title">
+ <string>Options</string>
+ </attribute>
+ <layout class="QVBoxLayout">
+ <property name="spacing">
+ <number>3</number>
+ </property>
+ <item>
+ <widget class="QGroupBox" name="groupBoxCopyEnd">
+ <property name="title">
+ <string>Copy end</string>
+ </property>
+ <layout class="QHBoxLayout">
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <property name="leftMargin">
+ <number>2</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>2</number>
+ </property>
+ <property name="bottomMargin">
+ <number>1</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="label_copyEnd">
+ <property name="text">
+ <string>At the end of the copy: </string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>16</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QComboBox" name="comboBox_copyEnd">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>210</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>210</width>
+ <height>22</height>
+ </size>
+ </property>
+ <item>
+ <property name="text">
+ <string>Don't close if errors are found</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Never close</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Always close</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBoxSpeedLimit">
+ <property name="title">
+ <string>Speed limit</string>
+ </property>
+ <layout class="QHBoxLayout">
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <property name="leftMargin">
+ <number>2</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>2</number>
+ </property>
+ <property name="bottomMargin">
+ <number>1</number>
+ </property>
+ <item>
+ <widget class="QCheckBox" name="checkBox_limitSpeed">
+ <property name="text">
+ <string>Limit copy speed at:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="limitSpeed">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="suffix">
+ <string> KB/s</string>
+ </property>
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>999999</number>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>138</width>
+ <height>10</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBoxFileCollisions">
+ <property name="title">
+ <string>File collisions</string>
+ </property>
+ <layout class="QHBoxLayout">
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <property name="leftMargin">
+ <number>2</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>2</number>
+ </property>
+ <property name="bottomMargin">
+ <number>1</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="label_fileCollisions">
+ <property name="text">
+ <string>What to do: </string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>31</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QComboBox" name="comboBox_fileCollisions">
+ <property name="minimumSize">
+ <size>
+ <width>210</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>16777215</width>
+ <height>22</height>
+ </size>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBoxCopyErrors">
+ <property name="title">
+ <string>Copy errors</string>
+ </property>
+ <layout class="QHBoxLayout">
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <property name="leftMargin">
+ <number>2</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>2</number>
+ </property>
+ <property name="bottomMargin">
+ <number>1</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="label_copyErrors">
+ <property name="text">
+ <string>What to do: </string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer>
+ <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="QComboBox" name="comboBox_copyErrors">
+ <property name="minimumSize">
+ <size>
+ <width>210</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>210</width>
+ <height>22</height>
+ </size>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <spacer>
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>360</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="tab_3">
+ <attribute name="icon">
+ <iconset>
+ <normaloff>:/styles/kde3/player_playlist.png</normaloff>:/styles/kde3/player_playlist.png</iconset>
+ </attribute>
+ <attribute name="title">
+ <string>Interface</string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <layout class="QFormLayout" name="formLayout">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::ExpandingFieldsGrow</enum>
+ </property>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_8">
+ <property name="text">
+ <string>Show speed as main informations</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QCheckBox" name="checkBoxShowSpeed">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </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>220</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ <action name="actionAddFile">
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ </property>
+ <property name="text">
+ <string>Add file</string>
+ </property>
+ </action>
+ <action name="actionAddFolder">
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ </property>
+ <property name="text">
+ <string>Add folder</string>
+ </property>
+ </action>
+ <action name="actionAddFileToMove">
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ </property>
+ <property name="text">
+ <string>Move file(s)</string>
+ </property>
+ </action>
+ <action name="actionAddFolderToMove">
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ </property>
+ <property name="text">
+ <string>Move folder</string>
+ </property>
+ </action>
+ <action name="actionAddFileToCopy">
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ </property>
+ <property name="text">
+ <string>Copy file(s)</string>
+ </property>
+ </action>
+ <action name="actionAddFolderToCopy">
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset>
+ </property>
+ <property name="text">
+ <string>Copy folder</string>
+ </property>
+ </action>
+ </widget>
+ <resources>
+ <include location="resources.qrc"/>
+ </resources>
+ <connections>
+ <connection>
+ <sender>moreButton</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>tabWidget</receiver>
+ <slot>setVisible(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>218</x>
+ <y>144</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>149</x>
+ <y>305</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>checkBox_limitSpeed</sender>
+ <signal>clicked(bool)</signal>
+ <receiver>limitSpeed</receiver>
+ <slot>setEnabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>121</x>
+ <y>304</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>328</x>
+ <y>305</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/plugins/Themes/Oxygen/options.ui b/plugins/Themes/Oxygen/options.ui
new file mode 100644
index 0000000..1455e7e
--- /dev/null
+++ b/plugins/Themes/Oxygen/options.ui
@@ -0,0 +1,38 @@
+<?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>283</width>
+ <height>29</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Form</string>
+ </property>
+ <layout class="QFormLayout" name="formLayout">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::ExpandingFieldsGrow</enum>
+ </property>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Show speed as main informations</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QCheckBox" name="checkBoxShowSpeed">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/plugins/Themes/Oxygen/resources.qrc b/plugins/Themes/Oxygen/resources.qrc
new file mode 100644
index 0000000..75f6259
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources.qrc
@@ -0,0 +1,22 @@
+<RCC>
+ <qresource prefix="/">
+ <file>resources/add.png</file>
+ <file>resources/cancel.png</file>
+ <file>resources/main.png</file>
+ <file>resources/moveDown.png</file>
+ <file>resources/moveUp.png</file>
+ <file>resources/player_end.png</file>
+ <file>resources/player_pause.png</file>
+ <file>resources/player_play.png</file>
+ <file>resources/putOnBottom.png</file>
+ <file>resources/putOnTop.png</file>
+ <file>resources/remove.png</file>
+ <file>resources/search.png</file>
+ <file>resources/export-transfer-list.png</file>
+ <file>resources/import-transfer-list.png</file>
+ <file>resources/SystemTrayIcon/add.png</file>
+ <file>resources/SystemTrayIcon/exit.png</file>
+ <file>resources/SystemTrayIcon/informations.png</file>
+ <file>resources/SystemTrayIcon/options.png</file>
+ </qresource>
+</RCC>
diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/add.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/add.png
new file mode 100644
index 0000000..1e03be9
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/add.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/exit.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/exit.png
new file mode 100644
index 0000000..201353e
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/exit.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/informations.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/informations.png
new file mode 100644
index 0000000..e1eb797
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/informations.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/options.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/options.png
new file mode 100644
index 0000000..d35365c
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/options.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Caught_Unix.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Caught_Unix.png
new file mode 100644
index 0000000..a81e70d
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Caught_Unix.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Caught_Windows.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Caught_Windows.png
new file mode 100644
index 0000000..8072aea
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Caught_Windows.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png
new file mode 100644
index 0000000..f40ea82
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png
new file mode 100644
index 0000000..8d673e4
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Uncaught_Unix.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Uncaught_Unix.png
new file mode 100644
index 0000000..9ce4779
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Uncaught_Unix.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Uncaught_Windows.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Uncaught_Windows.png
new file mode 100644
index 0000000..d0fca1b
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Uncaught_Windows.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/add.png b/plugins/Themes/Oxygen/resources/add.png
new file mode 100644
index 0000000..1e03be9
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources/add.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/cancel.png b/plugins/Themes/Oxygen/resources/cancel.png
new file mode 100644
index 0000000..201353e
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources/cancel.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/export-transfer-list.png b/plugins/Themes/Oxygen/resources/export-transfer-list.png
new file mode 100644
index 0000000..259e887
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources/export-transfer-list.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/import-transfer-list.png b/plugins/Themes/Oxygen/resources/import-transfer-list.png
new file mode 100644
index 0000000..58db827
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources/import-transfer-list.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/main.png b/plugins/Themes/Oxygen/resources/main.png
new file mode 100644
index 0000000..8072aea
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources/main.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/moveDown.png b/plugins/Themes/Oxygen/resources/moveDown.png
new file mode 100644
index 0000000..03f2014
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources/moveDown.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/moveUp.png b/plugins/Themes/Oxygen/resources/moveUp.png
new file mode 100644
index 0000000..5e42321
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources/moveUp.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/player_end.png b/plugins/Themes/Oxygen/resources/player_end.png
new file mode 100644
index 0000000..0d22924
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources/player_end.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/player_pause.png b/plugins/Themes/Oxygen/resources/player_pause.png
new file mode 100644
index 0000000..a9b3113
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources/player_pause.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/player_play.png b/plugins/Themes/Oxygen/resources/player_play.png
new file mode 100644
index 0000000..80ff3a1
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources/player_play.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/putOnBottom.png b/plugins/Themes/Oxygen/resources/putOnBottom.png
new file mode 100644
index 0000000..aadd380
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources/putOnBottom.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/putOnTop.png b/plugins/Themes/Oxygen/resources/putOnTop.png
new file mode 100644
index 0000000..6f54166
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources/putOnTop.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/remove.png b/plugins/Themes/Oxygen/resources/remove.png
new file mode 100644
index 0000000..5b4c488
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources/remove.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources/search.png b/plugins/Themes/Oxygen/resources/search.png
new file mode 100644
index 0000000..3b674c3
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources/search.png
Binary files differ
diff --git a/plugins/Themes/Oxygen/resources_unix.qrc b/plugins/Themes/Oxygen/resources_unix.qrc
new file mode 100644
index 0000000..ae3894b
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources_unix.qrc
@@ -0,0 +1,7 @@
+<RCC>
+ <qresource prefix="/">
+ <file>resources/SystemTrayIcon/systray_Caught_Unix.png</file>
+ <file>resources/SystemTrayIcon/systray_Semiuncaught_Unix.png</file>
+ <file>resources/SystemTrayIcon/systray_Uncaught_Unix.png</file>
+ </qresource>
+</RCC>
diff --git a/plugins/Themes/Oxygen/resources_windows.qrc b/plugins/Themes/Oxygen/resources_windows.qrc
new file mode 100644
index 0000000..99829b3
--- /dev/null
+++ b/plugins/Themes/Oxygen/resources_windows.qrc
@@ -0,0 +1,7 @@
+<RCC>
+ <qresource prefix="/">
+ <file>resources/SystemTrayIcon/systray_Caught_Windows.png</file>
+ <file>resources/SystemTrayIcon/systray_Semiuncaught_Windows.png</file>
+ <file>resources/SystemTrayIcon/systray_Uncaught_Windows.png</file>
+ </qresource>
+</RCC>