diff options
Diffstat (limited to 'plugins')
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>&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>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&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>&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>&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>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&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>&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>&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>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&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>&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>&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>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&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>&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>&Always do this action</source> + <translation>&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>&Skip</source> + <translation>&Passer</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui"/> + <source>&Cancel</source> + <translation>&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 &name</source> + <translation>Suggérer un &nouveau nom</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Always do this action</source> + <translation>&Toujours effectuer cette action</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Rename</source> + <translation>&Renommer</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Overwrite</source> + <translation>&Ecraser</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Skip</source> + <translation>&Passer</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Cancel</source> + <translation>&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 &name</source> + <translation>Suggérer un &nouveau nom</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Always do this action</source> + <translation>&Toujours effectuer cette action</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Rename</source> + <translation>&Renommer</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Skip</source> + <translation>&Passer</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Cancel</source> + <translation>&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 &name</source> + <translation>Suggérer un &nouveau nom</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&Always do this action</source> + <translation>&Toujours effectuer cette action</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&Rename</source> + <translation>&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>&Cancel</source> + <translation>&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'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'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'existe pas</translation> + </message> + <message> + <location filename="../../scanFileOrFolder.cpp" line="159"/> + <source>The folder is not readable</source> + <translation>Le répertoire n'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>&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>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&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>&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>&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>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&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>&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>&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>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&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>&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>&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>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&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>&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>&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>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&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>&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>&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>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&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>&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>&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>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&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>&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>&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>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&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>&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>&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>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&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>&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>&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>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&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>&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>&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>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&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>&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>&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>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui"/> + <source>&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 &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&Always do this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui"/> + <source>&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>&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>&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>&Skip</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="Cancel"> + <property name="text"> + <string>&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 &name</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <item> + <widget class="QCheckBox" name="checkBoxAlways"> + <property name="text"> + <string>&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>&Rename</string> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="Overwrite"> + <property name="text"> + <string>&Overwrite</string> + </property> + <property name="popupMode"> + <enum>QToolButton::MenuButtonPopup</enum> + </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>&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 &name</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <item> + <widget class="QCheckBox" name="checkBoxAlways"> + <property name="text"> + <string>&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>&Rename</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>&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 &name</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <widget class="QCheckBox" name="checkBoxAlways"> + <property name="text"> + <string>&Always do this action</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="Rename"> + <property name="text"> + <string>&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>&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 Binary files differnew file mode 100644 index 0000000..64fe557 --- /dev/null +++ b/plugins/Languages/ar/flag.png 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'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 <a href="%1" rel="%1" title="%1"><span style=" text-decoration: underline; color:#0057ae;">%1</span></a></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>"package" 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 "%1" 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>&About/Debug report</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="287"/> + <source>&About</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="289"/> + <source>&Quit</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="290"/> + <source>&Options</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="291"/> + <source>A&dd copy/moving</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="336"/> + <location filename="../../../SystrayIcon.cpp" line="358"/> + <source>Add &copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="342"/> + <location filename="../../../SystrayIcon.cpp" line="364"/> + <source>Add &transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="346"/> + <location filename="../../../SystrayIcon.cpp" line="368"/> + <source>Add &move</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/plugins/Languages/de/flag.png b/plugins/Languages/de/flag.png Binary files differnew file mode 100644 index 0000000..7707c43 --- /dev/null +++ b/plugins/Languages/de/flag.png 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'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 <a href="%1" rel="%1" title="%1"><span style=" text-decoration: underline; color:#0057ae;">%1</span></a></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>"package" 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 "%1" 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>&About/Debug report</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="287"/> + <source>&About</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="289"/> + <source>&Quit</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="290"/> + <source>&Options</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="291"/> + <source>A&dd copy/moving</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="336"/> + <location filename="../../../SystrayIcon.cpp" line="358"/> + <source>Add &copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="342"/> + <location filename="../../../SystrayIcon.cpp" line="364"/> + <source>Add &transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="346"/> + <location filename="../../../SystrayIcon.cpp" line="368"/> + <source>Add &move</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/plugins/Languages/el/flag.png b/plugins/Languages/el/flag.png Binary files differnew file mode 100644 index 0000000..75e4705 --- /dev/null +++ b/plugins/Languages/el/flag.png 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'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 <a href="%1" rel="%1" title="%1"><span style=" text-decoration: underline; color:#0057ae;">%1</span></a></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>"package" 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 "%1" 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>&About/Debug report</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="287"/> + <source>&About</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="289"/> + <source>&Quit</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="290"/> + <source>&Options</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="291"/> + <source>A&dd copy/moving</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="336"/> + <location filename="../../../SystrayIcon.cpp" line="358"/> + <source>Add &copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="342"/> + <location filename="../../../SystrayIcon.cpp" line="364"/> + <source>Add &transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="346"/> + <location filename="../../../SystrayIcon.cpp" line="368"/> + <source>Add &move</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/plugins/Languages/es/flag.png b/plugins/Languages/es/flag.png Binary files differnew file mode 100644 index 0000000..071c892 --- /dev/null +++ b/plugins/Languages/es/flag.png 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'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 <a href="%1" rel="%1" title="%1"><span style=" text-decoration: underline; color:#0057ae;">%1</span></a></source> + <translation>Para más información consulte la página web <a href="%1" rel="%1" title="%1"><span style=" text-decoration: underline; color:#0057ae;">%1</span></a></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>"package" 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 "%1" 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>&About/Debug report</source> + <translation>&Acerca de/Debug informe</translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="287"/> + <source>&About</source> + <translation>&Sobre</translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="289"/> + <source>&Quit</source> + <translation>&Dejar de</translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="290"/> + <source>&Options</source> + <translation>&Opciones</translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="291"/> + <source>A&dd copy/moving</source> + <translation>Aña&dir copiar/mover</translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="336"/> + <location filename="../../../SystrayIcon.cpp" line="358"/> + <source>Add &copy</source> + <translation>Agregar &copia</translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="342"/> + <location filename="../../../SystrayIcon.cpp" line="364"/> + <source>Add &transfer</source> + <translation>Añadir &transferencia</translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="346"/> + <location filename="../../../SystrayIcon.cpp" line="368"/> + <source>Add &move</source> + <translation>Añadir &movimiento</translation> + </message> +</context> +</TS> diff --git a/plugins/Languages/fr/flag.png b/plugins/Languages/fr/flag.png Binary files differnew file mode 100644 index 0000000..b74ec94 --- /dev/null +++ b/plugins/Languages/fr/flag.png 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'icon du system tray (pret de l'heure) pour l'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'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'ultracopier</translation> + </message> + <message> + <location filename="../../../HelpDialog.ui"/> + <source>Based on Qt. It provide advanced copier with more advanced feature. It's under GPL3. +This version is compiled as version: %1.</source> + <translation>Basé sur Qt. Il fournit un copieur avec plus d'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 <a href="%1" rel="%1" title="%1"><span style=" text-decoration: underline; color:#0057ae;">%1</span></a></source> + <translation>Pour plus d'informations voir le site web <a href="%1" rel="%1" title="%1"><span style=" text-decoration: underline; color:#0057ae;">%1</span></a></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'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'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'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'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'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'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'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'emplacement %3: %4</translation> + </message> + <message> + <location filename="../../../PluginsManager.cpp" line="246"/> + <source>"package" root tag not found for the xml file</source> + <translation>"package" 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 "%1" in version %2?</source> + <translation>Etes vous sur de vouloir supprimé "%1" 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'Ultracopier</translation> + </message> + <message> + <location filename="../../../PluginsManager.cpp" line="677"/> + <source>Ultracopier plugin (*.urc)</source> + <translation>Plugin d'Ultracopier (*.urc)</translation> + </message> + <message> + <location filename="../../../PluginsManager.cpp" line="690"/> + <source>Unable to open the plugin: %1</source> + <translation>Impossible d'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'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'é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'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'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'écouteur trouvé. Effectuez la copie manuelle par le clic droit sur l'icône dans la zone de notification (près de l'horloge).</translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="105"/> + <source>Searching informations...</source> + <translation>Recherche d'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'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'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'explorateur</translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="237"/> + <source>Action on the systray icon is unknown!</source> + <translation>Action sur l'icône du systray est inconnu!</translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="285"/> + <source>&About/Debug report</source> + <translation>&A propos d'ultracopier/Debug</translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="287"/> + <source>&About</source> + <translation>&A propos d'ultracopier</translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="289"/> + <source>&Quit</source> + <translation>&Quitter</translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="290"/> + <source>&Options</source> + <translation>&Options</translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="336"/> + <location filename="../../../SystrayIcon.cpp" line="358"/> + <source>Add &copy</source> + <translation>Ajouter une &copie</translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="342"/> + <location filename="../../../SystrayIcon.cpp" line="364"/> + <source>Add &transfer</source> + <translation>Ajouter un &transfert</translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="346"/> + <location filename="../../../SystrayIcon.cpp" line="368"/> + <source>Add &move</source> + <translation>Ajouter un &déplacement</translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="291"/> + <source>A&dd copy/moving</source> + <translation>&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 Binary files differnew file mode 100644 index 0000000..acb0ee3 --- /dev/null +++ b/plugins/Languages/hi/flag.png 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'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 <a href="%1" rel="%1" title="%1"><span style=" text-decoration: underline; color:#0057ae;">%1</span></a></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>"package" 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 "%1" 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>&About/Debug report</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="287"/> + <source>&About</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="289"/> + <source>&Quit</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="290"/> + <source>&Options</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="291"/> + <source>A&dd copy/moving</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="336"/> + <location filename="../../../SystrayIcon.cpp" line="358"/> + <source>Add &copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="342"/> + <location filename="../../../SystrayIcon.cpp" line="364"/> + <source>Add &transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="346"/> + <location filename="../../../SystrayIcon.cpp" line="368"/> + <source>Add &move</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/plugins/Languages/id/flag.png b/plugins/Languages/id/flag.png Binary files differnew file mode 100644 index 0000000..188ea2c --- /dev/null +++ b/plugins/Languages/id/flag.png 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'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 <a href="%1" rel="%1" title="%1"><span style=" text-decoration: underline; color:#0057ae;">%1</span></a></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>"package" 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 "%1" 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>&About/Debug report</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="287"/> + <source>&About</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="289"/> + <source>&Quit</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="290"/> + <source>&Options</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="291"/> + <source>A&dd copy/moving</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="336"/> + <location filename="../../../SystrayIcon.cpp" line="358"/> + <source>Add &copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="342"/> + <location filename="../../../SystrayIcon.cpp" line="364"/> + <source>Add &transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="346"/> + <location filename="../../../SystrayIcon.cpp" line="368"/> + <source>Add &move</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/plugins/Languages/it/flag.png b/plugins/Languages/it/flag.png Binary files differnew file mode 100644 index 0000000..a3e3a7b --- /dev/null +++ b/plugins/Languages/it/flag.png 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'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'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 <a href="%1" rel="%1" title="%1"><span style=" text-decoration: underline; color:#0057ae;">%1</span></a></source> + <translation>Per maggiori dettagli vistare il sito <a href="%1" rel="%1" title="%1"><span style=" text-decoration: underline; color:#0057ae;">%1</span></a></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'è 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' 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>"package" 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 "%1" 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>&About/Debug report</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="287"/> + <source>&About</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="289"/> + <source>&Quit</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="290"/> + <source>&Options</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="291"/> + <source>A&dd copy/moving</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="336"/> + <location filename="../../../SystrayIcon.cpp" line="358"/> + <source>Add &copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="342"/> + <location filename="../../../SystrayIcon.cpp" line="364"/> + <source>Add &transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="346"/> + <location filename="../../../SystrayIcon.cpp" line="368"/> + <source>Add &move</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/plugins/Languages/ja/flag.png b/plugins/Languages/ja/flag.png Binary files differnew file mode 100644 index 0000000..0cd1398 --- /dev/null +++ b/plugins/Languages/ja/flag.png 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'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 <a href="%1" rel="%1" title="%1"><span style=" text-decoration: underline; color:#0057ae;">%1</span></a></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>"package" 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 "%1" 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>&About/Debug report</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="287"/> + <source>&About</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="289"/> + <source>&Quit</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="290"/> + <source>&Options</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="291"/> + <source>A&dd copy/moving</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="336"/> + <location filename="../../../SystrayIcon.cpp" line="358"/> + <source>Add &copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="342"/> + <location filename="../../../SystrayIcon.cpp" line="364"/> + <source>Add &transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="346"/> + <location filename="../../../SystrayIcon.cpp" line="368"/> + <source>Add &move</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/plugins/Languages/nl/flag.png b/plugins/Languages/nl/flag.png Binary files differnew file mode 100644 index 0000000..679b368 --- /dev/null +++ b/plugins/Languages/nl/flag.png 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'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 <a href="%1" rel="%1" title="%1"><span style=" text-decoration: underline; color:#0057ae;">%1</span></a></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>"package" 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 "%1" 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>&About/Debug report</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="287"/> + <source>&About</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="289"/> + <source>&Quit</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="290"/> + <source>&Options</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="291"/> + <source>A&dd copy/moving</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="336"/> + <location filename="../../../SystrayIcon.cpp" line="358"/> + <source>Add &copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="342"/> + <location filename="../../../SystrayIcon.cpp" line="364"/> + <source>Add &transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="346"/> + <location filename="../../../SystrayIcon.cpp" line="368"/> + <source>Add &move</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/plugins/Languages/no/flag.png b/plugins/Languages/no/flag.png Binary files differnew file mode 100644 index 0000000..36e2636 --- /dev/null +++ b/plugins/Languages/no/flag.png 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'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 <a href="%1" rel="%1" title="%1"><span style=" text-decoration: underline; color:#0057ae;">%1</span></a></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>"package" 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 "%1" 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>&About/Debug report</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="287"/> + <source>&About</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="289"/> + <source>&Quit</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="290"/> + <source>&Options</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="291"/> + <source>A&dd copy/moving</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="336"/> + <location filename="../../../SystrayIcon.cpp" line="358"/> + <source>Add &copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="342"/> + <location filename="../../../SystrayIcon.cpp" line="364"/> + <source>Add &transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="346"/> + <location filename="../../../SystrayIcon.cpp" line="368"/> + <source>Add &move</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/plugins/Languages/pl/flag.png b/plugins/Languages/pl/flag.png Binary files differnew file mode 100644 index 0000000..55595d6 --- /dev/null +++ b/plugins/Languages/pl/flag.png 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'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 <a href="%1" rel="%1" title="%1"><span style=" text-decoration: underline; color:#0057ae;">%1</span></a></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>"package" 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 "%1" 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>&About/Debug report</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="287"/> + <source>&About</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="289"/> + <source>&Quit</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="290"/> + <source>&Options</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="291"/> + <source>A&dd copy/moving</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="336"/> + <location filename="../../../SystrayIcon.cpp" line="358"/> + <source>Add &copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="342"/> + <location filename="../../../SystrayIcon.cpp" line="364"/> + <source>Add &transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="346"/> + <location filename="../../../SystrayIcon.cpp" line="368"/> + <source>Add &move</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/plugins/Languages/pt/flag.png b/plugins/Languages/pt/flag.png Binary files differnew file mode 100644 index 0000000..4d5cedb --- /dev/null +++ b/plugins/Languages/pt/flag.png 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'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 <a href="%1" rel="%1" title="%1"><span style=" text-decoration: underline; color:#0057ae;">%1</span></a></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>"package" 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 "%1" 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>&About/Debug report</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="287"/> + <source>&About</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="289"/> + <source>&Quit</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="290"/> + <source>&Options</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="291"/> + <source>A&dd copy/moving</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="336"/> + <location filename="../../../SystrayIcon.cpp" line="358"/> + <source>Add &copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="342"/> + <location filename="../../../SystrayIcon.cpp" line="364"/> + <source>Add &transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="346"/> + <location filename="../../../SystrayIcon.cpp" line="368"/> + <source>Add &move</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/plugins/Languages/ru/flag.png b/plugins/Languages/ru/flag.png Binary files differnew file mode 100644 index 0000000..c2c9d27 --- /dev/null +++ b/plugins/Languages/ru/flag.png 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'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 <a href="%1" rel="%1" title="%1"><span style=" text-decoration: underline; color:#0057ae;">%1</span></a></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>"package" 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 "%1" 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>&About/Debug report</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="287"/> + <source>&About</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="289"/> + <source>&Quit</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="290"/> + <source>&Options</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="291"/> + <source>A&dd copy/moving</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="336"/> + <location filename="../../../SystrayIcon.cpp" line="358"/> + <source>Add &copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="342"/> + <location filename="../../../SystrayIcon.cpp" line="364"/> + <source>Add &transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="346"/> + <location filename="../../../SystrayIcon.cpp" line="368"/> + <source>Add &move</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/plugins/Languages/th/flag.png b/plugins/Languages/th/flag.png Binary files differnew file mode 100644 index 0000000..ce5a42c --- /dev/null +++ b/plugins/Languages/th/flag.png 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'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 <a href="%1" rel="%1" title="%1"><span style=" text-decoration: underline; color:#0057ae;">%1</span></a></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>"package" 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 "%1" 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>&About/Debug report</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="287"/> + <source>&About</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="289"/> + <source>&Quit</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="290"/> + <source>&Options</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="291"/> + <source>A&dd copy/moving</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="336"/> + <location filename="../../../SystrayIcon.cpp" line="358"/> + <source>Add &copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="342"/> + <location filename="../../../SystrayIcon.cpp" line="364"/> + <source>Add &transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="346"/> + <location filename="../../../SystrayIcon.cpp" line="368"/> + <source>Add &move</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/plugins/Languages/tr/flag.png b/plugins/Languages/tr/flag.png Binary files differnew file mode 100644 index 0000000..b72f1d7 --- /dev/null +++ b/plugins/Languages/tr/flag.png 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'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 <a href="%1" rel="%1" title="%1"><span style=" text-decoration: underline; color:#0057ae;">%1</span></a></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>"package" 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 "%1" 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>&About/Debug report</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="287"/> + <source>&About</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="289"/> + <source>&Quit</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="290"/> + <source>&Options</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="291"/> + <source>A&dd copy/moving</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="336"/> + <location filename="../../../SystrayIcon.cpp" line="358"/> + <source>Add &copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="342"/> + <location filename="../../../SystrayIcon.cpp" line="364"/> + <source>Add &transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="346"/> + <location filename="../../../SystrayIcon.cpp" line="368"/> + <source>Add &move</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/plugins/Languages/zh/flag.png b/plugins/Languages/zh/flag.png Binary files differnew file mode 100644 index 0000000..3c539df --- /dev/null +++ b/plugins/Languages/zh/flag.png 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'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 <a href="%1" rel="%1" title="%1"><span style=" text-decoration: underline; color:#0057ae;">%1</span></a></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>"package" 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 "%1" 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>&About/Debug report</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="287"/> + <source>&About</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="289"/> + <source>&Quit</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="290"/> + <source>&Options</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="291"/> + <source>A&dd copy/moving</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="336"/> + <location filename="../../../SystrayIcon.cpp" line="358"/> + <source>Add &copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="342"/> + <location filename="../../../SystrayIcon.cpp" line="364"/> + <source>Add &transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../SystrayIcon.cpp" line="346"/> + <location filename="../../../SystrayIcon.cpp" line="368"/> + <source>Add &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>&More</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Pause</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&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'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>&More</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Pause</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&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'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>&More</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Pause</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&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'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>&More</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Pause</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&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'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>&More</source> + <translation>Pl&us</translation> + </message> + <message> + <location/> + <source>&Pause</source> + <translation>&Pause</translation> + </message> + <message> + <location/> + <source>&Skip</source> + <translation>&Passer</translation> + </message> + <message> + <location/> + <source>&Cancel</source> + <translation>&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't close if errors are found</source> + <translation>Garder ouvert s'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>&More</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Pause</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&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'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>&More</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Pause</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&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'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>&More</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Pause</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&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'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>&More</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Pause</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&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'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>&More</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Pause</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&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'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>&More</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Pause</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&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'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>&More</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Pause</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&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'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>&More</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Pause</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&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'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>&More</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Pause</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&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'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>&More</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Pause</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&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'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>&More</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Pause</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&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'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>&More</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Pause</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../interface.ui"/> + <source>&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'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>∞</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 ¤t,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 ¤t,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"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">&nbsp;</body></html></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>&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>&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>&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>&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 Binary files differnew file mode 100644 index 0000000..1e03be9 --- /dev/null +++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/add.png diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/exit.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/exit.png Binary files differnew file mode 100644 index 0000000..201353e --- /dev/null +++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/exit.png diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/informations.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/informations.png Binary files differnew file mode 100644 index 0000000..e1eb797 --- /dev/null +++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/informations.png diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/options.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/options.png Binary files differnew file mode 100644 index 0000000..d35365c --- /dev/null +++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/options.png diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Caught_Unix.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Caught_Unix.png Binary files differnew file mode 100644 index 0000000..a81e70d --- /dev/null +++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Caught_Unix.png diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Caught_Windows.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Caught_Windows.png Binary files differnew file mode 100644 index 0000000..8072aea --- /dev/null +++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Caught_Windows.png diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png Binary files differnew file mode 100644 index 0000000..f40ea82 --- /dev/null +++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Semiuncaught_Unix.png diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png Binary files differnew file mode 100644 index 0000000..8d673e4 --- /dev/null +++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Semiuncaught_Windows.png diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Uncaught_Unix.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Uncaught_Unix.png Binary files differnew file mode 100644 index 0000000..9ce4779 --- /dev/null +++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Uncaught_Unix.png diff --git a/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Uncaught_Windows.png b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Uncaught_Windows.png Binary files differnew file mode 100644 index 0000000..d0fca1b --- /dev/null +++ b/plugins/Themes/Oxygen/resources/SystemTrayIcon/systray_Uncaught_Windows.png diff --git a/plugins/Themes/Oxygen/resources/add.png b/plugins/Themes/Oxygen/resources/add.png Binary files differnew file mode 100644 index 0000000..1e03be9 --- /dev/null +++ b/plugins/Themes/Oxygen/resources/add.png diff --git a/plugins/Themes/Oxygen/resources/cancel.png b/plugins/Themes/Oxygen/resources/cancel.png Binary files differnew file mode 100644 index 0000000..201353e --- /dev/null +++ b/plugins/Themes/Oxygen/resources/cancel.png diff --git a/plugins/Themes/Oxygen/resources/export-transfer-list.png b/plugins/Themes/Oxygen/resources/export-transfer-list.png Binary files differnew file mode 100644 index 0000000..259e887 --- /dev/null +++ b/plugins/Themes/Oxygen/resources/export-transfer-list.png diff --git a/plugins/Themes/Oxygen/resources/import-transfer-list.png b/plugins/Themes/Oxygen/resources/import-transfer-list.png Binary files differnew file mode 100644 index 0000000..58db827 --- /dev/null +++ b/plugins/Themes/Oxygen/resources/import-transfer-list.png diff --git a/plugins/Themes/Oxygen/resources/main.png b/plugins/Themes/Oxygen/resources/main.png Binary files differnew file mode 100644 index 0000000..8072aea --- /dev/null +++ b/plugins/Themes/Oxygen/resources/main.png diff --git a/plugins/Themes/Oxygen/resources/moveDown.png b/plugins/Themes/Oxygen/resources/moveDown.png Binary files differnew file mode 100644 index 0000000..03f2014 --- /dev/null +++ b/plugins/Themes/Oxygen/resources/moveDown.png diff --git a/plugins/Themes/Oxygen/resources/moveUp.png b/plugins/Themes/Oxygen/resources/moveUp.png Binary files differnew file mode 100644 index 0000000..5e42321 --- /dev/null +++ b/plugins/Themes/Oxygen/resources/moveUp.png diff --git a/plugins/Themes/Oxygen/resources/player_end.png b/plugins/Themes/Oxygen/resources/player_end.png Binary files differnew file mode 100644 index 0000000..0d22924 --- /dev/null +++ b/plugins/Themes/Oxygen/resources/player_end.png diff --git a/plugins/Themes/Oxygen/resources/player_pause.png b/plugins/Themes/Oxygen/resources/player_pause.png Binary files differnew file mode 100644 index 0000000..a9b3113 --- /dev/null +++ b/plugins/Themes/Oxygen/resources/player_pause.png diff --git a/plugins/Themes/Oxygen/resources/player_play.png b/plugins/Themes/Oxygen/resources/player_play.png Binary files differnew file mode 100644 index 0000000..80ff3a1 --- /dev/null +++ b/plugins/Themes/Oxygen/resources/player_play.png diff --git a/plugins/Themes/Oxygen/resources/putOnBottom.png b/plugins/Themes/Oxygen/resources/putOnBottom.png Binary files differnew file mode 100644 index 0000000..aadd380 --- /dev/null +++ b/plugins/Themes/Oxygen/resources/putOnBottom.png diff --git a/plugins/Themes/Oxygen/resources/putOnTop.png b/plugins/Themes/Oxygen/resources/putOnTop.png Binary files differnew file mode 100644 index 0000000..6f54166 --- /dev/null +++ b/plugins/Themes/Oxygen/resources/putOnTop.png diff --git a/plugins/Themes/Oxygen/resources/remove.png b/plugins/Themes/Oxygen/resources/remove.png Binary files differnew file mode 100644 index 0000000..5b4c488 --- /dev/null +++ b/plugins/Themes/Oxygen/resources/remove.png diff --git a/plugins/Themes/Oxygen/resources/search.png b/plugins/Themes/Oxygen/resources/search.png Binary files differnew file mode 100644 index 0000000..3b674c3 --- /dev/null +++ b/plugins/Themes/Oxygen/resources/search.png 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> |