diff options
Diffstat (limited to 'plugins-unmaintained')
190 files changed, 43376 insertions, 6 deletions
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/AvancedQFile.cpp b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/AvancedQFile.cpp new file mode 100755 index 0000000..3d867fb --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/AvancedQFile.cpp @@ -0,0 +1,208 @@ +/** \file AvancedQFile.cpp +\brief Define the QFile herited class to set file date/time +\author alpha_one_x86 */ + +#include "AvancedQFile.h" + +#ifdef Q_CC_GNU +//this next header is needed to change file time/date under gcc +#include <utime.h> +#include <errno.h> +#endif + +//source +//hSrc=CreateFile(pData->pfiSrcFile->GetFullFilePath(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN | (bNoBuffer ? FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH : 0), NULL); +//destination +//hDst=CreateFile(pData->strDstFile, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN | (bNoBuffer ? FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH : 0), NULL); + +bool AvancedQFile::setCreated(const QDateTime &time) +{ + time_t ctime=time.toTime_t(); + #ifdef Q_CC_GNU + //creation time not exists into unix world + Q_UNUSED(ctime) + return true; + #else + setErrorString(tr("Not supported on this platform")); + return false; + #endif +} + +bool AvancedQFile::setLastModified(const QDateTime &time) +{ + time_t actime=QFileInfo(*this).lastRead().toTime_t(); + //protect to wrong actime + if(actime<0) + actime=0; + time_t modtime=time.toTime_t(); + if(modtime<0) + { + setErrorString(tr("Last modified date is wrong")); + return false; + } + #ifdef Q_CC_GNU + //this function avalaible on unix and mingw + utimbuf butime; + butime.actime=actime; + butime.modtime=modtime; + int returnVal=utime(this->fileName().toLocal8Bit().data(),&butime); + if(returnVal==0) + return true; + else + { + setErrorString(strerror(errno)); + return false; + } + #else + setErrorString(tr("Not supported on this platform")); + return false; + #endif +} + +bool AvancedQFile::setLastRead(const QDateTime &time) +{ + time_t modtime=QFileInfo(*this).lastModified().toTime_t(); + //protect to wrong actime + if(modtime<0) + modtime=0; + time_t actime=time.toTime_t(); + if(actime<0) + { + setErrorString(tr("Last access date is wrong")); + return false; + } + #ifdef Q_CC_GNU + //this function avalaible on unix and mingw + utimbuf butime; + butime.actime=actime; + butime.modtime=modtime; + int returnVal=utime(this->fileName().toLocal8Bit().data(),&butime); + if(returnVal==0) + return true; + else + { + setErrorString(strerror(errno)); + return false; + } + #else + setErrorString(tr("Not supported on this platform")); + return false; + #endif +} + +#ifdef ULTRACOPIER_OVERLAPPED_FILE +AvancedQFile::avancedQFile() +{ + handle=INVALID_HANDLE_VALUE; + fileError=QFileDevice::NoError; + fileErrorString.clear(); +} + +AvancedQFile::~avancedQFile() +{ + close(); +} + +QString AvancedQFile::getLastWindowsError() +{ + WCHAR ErrorStringW[65535]; + DWORD dw = GetLastError(); + + int size=FormatMessage( + FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + dw, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + ErrorStringW, + 0, NULL ); + if(size<0) + tr("Unknown error: %1").arg(dw); + return QString::fromWCharArray(ErrorStringW,size); +} + +bool AvancedQFile::open(OpenMode mode) +{ + fileError=QFileDevice::NoError; + fileErrorString.clear(); + WCHAR fileNameW[fileName().size()+1]; + if(QDir::toNativeSeparators("\\\\?\\"+fileName()).toWCharArray(fileNameW)!=fileName().size()) + { + fileError=QFileDevice::OpenError; + fileErrorString=tr("Path conversion error"); + return false; + } + fileNameW[fileName().size()]='\0'; + + DWORD dwDesiredAccess=0; + if(mode & QIODevice::ReadOnly) + dwDesiredAccess|=GENERIC_READ; + if(mode & QIODevice::WriteOnly) + dwDesiredAccess|=GENERIC_Write; + + DWORD dwCreationDisposition; + if(mode & QIODevice::WriteOnly) + dwCreationDisposition=CREATE_ALWAYS; + else + dwCreationDisposition=OPEN_EXISTING; + + handle=CreateFile( + fileNameW, + dwDesiredAccess, + 0, + 0, + dwCreationDisposition, + FILE_FLAG_WRITE_THROUGH | FILE_FLAG_SEQUENTIAL_SCAN, + 0 + ); + if(handle==INVALID_HANDLE_VALUE) + { + fileError=QFileDevice::OpenError; + fileErrorString=getLastWindowsError(); + } + return (handle!=INVALID_HANDLE_VALUE); +} + +void AvancedQFile::close() +{ + if(handle==INVALID_HANDLE_VALUE) + return; + CloseHandle(handle); +} + +bool AvancedQFile::seek(qint64 pos) +{ + toto +} + +bool AvancedQFile::resize(qint64 size) +{ + toto +} + +QString AvancedQFile::errorString() const +{ + if(fileErrorString.isEmpty()) + return tr("Unknown error"); + return fileErrorString; +} + +bool AvancedQFile::isOpen() const +{ + return (handle!=INVALID_HANDLE_VALUE); +} + +qint64 AvancedQFile::write(const QByteArray &data) +{ +} + +QByteArray AvancedQFile::read(qint64 maxlen) +{ +} + +QFileDevice::FileError AvancedQFile::error() const +{ + return fileError; +} +#endif diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/AvancedQFile.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/AvancedQFile.h new file mode 100755 index 0000000..8c3dc4a --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/AvancedQFile.h @@ -0,0 +1,45 @@ +/** \file AvancedQFile.h +\brief Define the QFile herited class to set file date/time +\author alpha_one_x86 +\licence GPL3, see the file COPYING */ + +#ifndef AVANCEDQFILE_H +#define AVANCEDQFILE_H + +#include <QFile> +#include <QDateTime> +#include <QFileInfo> + +/// \brief devired class from QFile to set time/date on file +class AvancedQFile : public QFile +{ + Q_OBJECT +public: + /// \brief set created date, not exists in unix world + bool setCreated(const QDateTime &time); + /// \brief set last modification date + bool setLastModified(const QDateTime &time); + /// \brief set last read date + bool setLastRead(const QDateTime &time); + + #ifdef ULTRACOPIER_OVERLAPPED_FILE + explicit AvancedQFile(); + ~AvancedQFile(); + bool open(OpenMode mode); + void close(); + bool seek(qint64 pos); + bool resize(qint64 size); + QString errorString() const; + bool isOpen() const; + qint64 write(const QByteArray &data); + QByteArray read(qint64 maxlen); + FileError error() const; + QString getLastWindowsError(); +private: + HANDLE handle; + FileError fileError; + QString fileErrorString; + #endif +}; + +#endif // AVANCEDQFILE_H diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CompilerInfo.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CompilerInfo.h new file mode 100755 index 0000000..84625b9 --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CompilerInfo.h @@ -0,0 +1 @@ +#include "../../../CompilerInfo.h" diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine-collision-and-error.cpp b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine-collision-and-error.cpp new file mode 100755 index 0000000..16c36ae --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine-collision-and-error.cpp @@ -0,0 +1,568 @@ +/** \file copyEngine.cpp +\brief Define the copy engine +\author alpha_one_x86 */ + +#include "CopyEngine.h" +#include "FolderExistsDialog.h" +#include "DiskSpace.h" + +//dialog message +/// \note Can be call without queue because all call will be serialized +void CopyEngine::fileAlreadyExistsSlot(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread) +{ + fileAlreadyExists(source,destination,isSame,thread); +} + +/// \note Can be call without queue because all call will be serialized +void CopyEngine::errorOnFileSlot(QFileInfo fileInfo,std::string errorString,TransferThread * thread,const ErrorType &errorType) +{ + errorOnFile(fileInfo,errorString,thread,errorType); +} + +/// \note Can be call without queue because all call will be serialized +void CopyEngine::folderAlreadyExistsSlot(QFileInfo source,QFileInfo destination,bool isSame,ScanFileOrFolder * thread) +{ + folderAlreadyExists(source,destination,isSame,thread); +} + +/// \note Can be call without queue because all call will be serialized +void CopyEngine::errorOnFolderSlot(QFileInfo fileInfo,std::string errorString,ScanFileOrFolder * thread,ErrorType errorType) +{ + errorOnFolder(fileInfo,errorString,thread,errorType); +} + +//mkpath event +void CopyEngine::mkPathErrorOnFolderSlot(QFileInfo folder,std::string error,ErrorType errorType) +{ + mkPathErrorOnFolder(folder,error,errorType); +} + +/// \note Can be call without queue because all call will be serialized +void CopyEngine::fileAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread,bool isCalledByShowOneNewDialog) +{ + if(stopIt) + return; + if(thread==NULL) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to locate the thread"); + return; + } + //load the action + if(isSame) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file is same: "+source.absoluteFilePath().toStdString()); + FileExistsAction tempFileExistsAction=alwaysDoThisActionForFileExists; + if(tempFileExistsAction==FileExists_Overwrite || tempFileExistsAction==FileExists_OverwriteIfNewer || tempFileExistsAction==FileExists_OverwriteIfNotSame || tempFileExistsAction==FileExists_OverwriteIfOlder) + tempFileExistsAction=FileExists_NotSet; + switch(tempFileExistsAction) + { + case FileExists_Skip: + case FileExists_Rename: + thread->setFileExistsAction(tempFileExistsAction); + break; + default: + if(dialogIsOpen) + { + alreadyExistsQueueItem newItem; + newItem.source=source; + newItem.destination=destination; + newItem.isSame=isSame; + newItem.transfer=thread; + newItem.scan=NULL; + alreadyExistsQueue.push_back(newItem); + return; + } + dialogIsOpen=true; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog"); + FileIsSameDialog dialog(interface,source,firstRenamingRule,otherRenamingRule); + emit isInPause(true); + dialog.exec();/// \bug crash when external close + FileExistsAction newAction=dialog.getAction(); + emit isInPause(false); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"close dialog: "+std::to_string(newAction)); + if(newAction==FileExists_Cancel) + { + emit cancelAll(); + return; + } + if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileExists) + { + alwaysDoThisActionForFileExists=newAction; + listThread->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists); + if(uiIsInstalled) + switch(newAction) + { + default: + case FileExists_Skip: + ui->comboBoxFileCollision->setCurrentIndex(1); + break; + case FileExists_Rename: + ui->comboBoxFileCollision->setCurrentIndex(6); + break; + } + } + if(dialog.getAlways() || newAction!=FileExists_Rename) + thread->setFileExistsAction(newAction); + else + thread->setFileRename(dialog.getNewName()); + dialogIsOpen=false; + if(!isCalledByShowOneNewDialog) + emit queryOneNewDialog(); + return; + break; + } + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file already exists: "+source.absoluteFilePath().toStdString()+", destination: "+destination.absoluteFilePath().toStdString()); + FileExistsAction tempFileExistsAction=alwaysDoThisActionForFileExists; + switch(tempFileExistsAction) + { + case FileExists_Skip: + case FileExists_Rename: + case FileExists_Overwrite: + case FileExists_OverwriteIfNewer: + case FileExists_OverwriteIfOlder: + case FileExists_OverwriteIfNotSame: + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"always do this action: "+std::to_string(tempFileExistsAction)); + thread->setFileExistsAction(tempFileExistsAction); + break; + default: + if(dialogIsOpen) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("dialog open, put in queue: %1 %2") + .arg(source.absoluteFilePath()) + .arg(destination.absoluteFilePath()) + .toStdString() + ); + alreadyExistsQueueItem newItem; + newItem.source=source; + newItem.destination=destination; + newItem.isSame=isSame; + newItem.transfer=thread; + newItem.scan=NULL; + alreadyExistsQueue.push_back(newItem); + return; + } + dialogIsOpen=true; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog"); + FileExistsDialog dialog(interface,source,destination,firstRenamingRule,otherRenamingRule); + emit isInPause(true); + dialog.exec();/// \bug crash when external close + FileExistsAction newAction=dialog.getAction(); + emit isInPause(false); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"close dialog: "+std::to_string(newAction)); + if(newAction==FileExists_Cancel) + { + emit cancelAll(); + return; + } + if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileExists) + { + alwaysDoThisActionForFileExists=newAction; + listThread->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists); + if(uiIsInstalled) + switch(newAction) + { + default: + case FileExists_Skip: + ui->comboBoxFileCollision->setCurrentIndex(1); + break; + case FileExists_Rename: + ui->comboBoxFileCollision->setCurrentIndex(6); + break; + case FileExists_Overwrite: + ui->comboBoxFileCollision->setCurrentIndex(2); + break; + case FileExists_OverwriteIfNotSame: + ui->comboBoxFileCollision->setCurrentIndex(3); + break; + case FileExists_OverwriteIfNewer: + ui->comboBoxFileCollision->setCurrentIndex(4); + break; + case FileExists_OverwriteIfOlder: + ui->comboBoxFileCollision->setCurrentIndex(5); + break; + } + } + if(dialog.getAlways() || newAction!=FileExists_Rename) + thread->setFileExistsAction(newAction); + else + thread->setFileRename(dialog.getNewName()); + dialogIsOpen=false; + if(!isCalledByShowOneNewDialog) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"emit queryOneNewDialog()"); + emit queryOneNewDialog(); + } + return; + break; + } + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop"); +} + +void CopyEngine::haveNeedPutAtBottom(bool needPutAtBottom, const QFileInfo &fileInfo, const std::string &errorString,TransferThread *thread,const ErrorType &errorType) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + if(!needPutAtBottom) + { + alwaysDoThisActionForFileError=FileError_NotSet; + if(uiIsInstalled) + ui->comboBoxFileError->setCurrentIndex(0); + errorQueueItem newItem; + newItem.errorString=errorString; + newItem.inode=fileInfo; + newItem.mkPath=false; + newItem.rmPath=false; + newItem.scan=NULL; + newItem.transfer=thread; + newItem.errorType=errorType; + errorQueue.push_back(newItem); + showOneNewDialog(); + } +} + +void CopyEngine::missingDiskSpace(std::vector<Diskspace> list) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog"); + DiskSpace dialog(facilityEngine,list,interface); + emit isInPause(true); + dialog.exec();/// \bug crash when external close + bool ok=dialog.getAction(); + emit isInPause(false); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"cancel: "+std::to_string(ok)); + if(!ok) + emit cancelAll(); + else + listThread->autoStartIfNeeded(); +} + +/// \note Can be call without queue because all call will be serialized +void CopyEngine::errorOnFile(QFileInfo fileInfo,std::string errorString,TransferThread * thread,const ErrorType &errorType,bool isCalledByShowOneNewDialog) +{ + if(stopIt) + return; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file have error: "+fileInfo.absoluteFilePath().toStdString()+", error: "+errorString); + if(thread==NULL) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to locate the thread"); + return; + } + //load the action + FileErrorAction tempFileErrorAction=alwaysDoThisActionForFileError; + switch(tempFileErrorAction) + { + case FileError_Skip: + thread->skip(); + return; + case FileError_Retry: + thread->retryAfterError(); + return; + case FileError_PutToEndOfTheList: + emit getNeedPutAtBottom(fileInfo,errorString,thread,errorType); + return; + case FileError_Cancel: + return; + default: + if(dialogIsOpen) + { + errorQueueItem newItem; + newItem.errorString=errorString; + newItem.inode=fileInfo; + newItem.mkPath=false; + newItem.rmPath=false; + newItem.scan=NULL; + newItem.transfer=thread; + newItem.errorType=errorType; + errorQueue.push_back(newItem); + return; + } + dialogIsOpen=true; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog"); + emit error(fileInfo.absoluteFilePath().toStdString(),fileInfo.size(),fileInfo.lastModified().toMSecsSinceEpoch()/1000,errorString); + FileErrorDialog dialog(interface,fileInfo,errorString,errorType); + emit isInPause(true); + dialog.exec();/// \bug crash when external close + FileErrorAction newAction=dialog.getAction(); + emit isInPause(false); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"close dialog: "+std::to_string(newAction)); + if(newAction==FileError_Cancel) + { + emit cancelAll(); + return; + } + if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError) + { + alwaysDoThisActionForFileError=newAction; + if(uiIsInstalled) + switch(newAction) + { + default: + case FileError_Skip: + ui->comboBoxFileError->setCurrentIndex(1); + break; + case FileError_PutToEndOfTheList: + ui->comboBoxFileError->setCurrentIndex(2); + break; + } + } + switch(newAction) + { + case FileError_Skip: + thread->skip(); + break; + case FileError_Retry: + thread->retryAfterError(); + break; + case FileError_PutToEndOfTheList: + thread->putAtBottom(); + break; + default: + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"file error action wrong"); + break; + } + dialogIsOpen=false; + if(!isCalledByShowOneNewDialog) + emit queryOneNewDialog(); + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"isCalledByShowOneNewDialog==true then not show other dial"); + return; + break; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop"); +} + +/// \note Can be call without queue because all call will be serialized +void CopyEngine::folderAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,ScanFileOrFolder * thread,bool isCalledByShowOneNewDialog) +{ + if(stopIt) + return; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"folder already exists: "+source.absoluteFilePath().toStdString()+", destination: "+destination.absoluteFilePath().toStdString()); + if(thread==NULL) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to locate the thread"); + return; + } + //load the always action + FolderExistsAction tempFolderExistsAction=alwaysDoThisActionForFolderExists; + switch(tempFolderExistsAction) + { + case FolderExists_Skip: + case FolderExists_Rename: + case FolderExists_Merge: + thread->setFolderExistsAction(tempFolderExistsAction); + break; + default: + if(dialogIsOpen) + { + alreadyExistsQueueItem newItem; + newItem.source=source; + newItem.destination=destination; + newItem.isSame=isSame; + newItem.transfer=NULL; + newItem.scan=thread; + alreadyExistsQueue.push_back(newItem); + return; + } + dialogIsOpen=true; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog"); + FolderExistsDialog dialog(interface,source,isSame,destination,firstRenamingRule,otherRenamingRule); + dialog.exec();/// \bug crash when external close + FolderExistsAction newAction=dialog.getAction(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"close dialog: "+std::to_string(newAction)); + if(newAction==FolderExists_Cancel) + { + emit cancelAll(); + return; + } + if(dialog.getAlways() && newAction!=alwaysDoThisActionForFolderExists) + setComboBoxFolderCollision(newAction); + if(!dialog.getAlways() && newAction==FolderExists_Rename) + thread->setFolderExistsAction(newAction,dialog.getNewName()); + else + thread->setFolderExistsAction(newAction); + dialogIsOpen=false; + if(!isCalledByShowOneNewDialog) + emit queryOneNewDialog(); + return; + break; + } +} + +/// \note Can be call without queue because all call will be serialized +/// \todo all this part +void CopyEngine::errorOnFolder(QFileInfo fileInfo, std::string errorString, ScanFileOrFolder * thread, ErrorType errorType, bool isCalledByShowOneNewDialog) +{ + if(stopIt) + return; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file have error: "+fileInfo.absoluteFilePath().toStdString()+", error: "+errorString); + if(thread==NULL) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to locate the thread"); + return; + } + //load the always action + FileErrorAction tempFileErrorAction=alwaysDoThisActionForFolderError; + switch(tempFileErrorAction) + { + case FileError_Skip: + case FileError_Retry: + case FileError_PutToEndOfTheList: + thread->setFolderErrorAction(tempFileErrorAction); + break; + default: + if(dialogIsOpen) + { + errorQueueItem newItem; + newItem.errorString=errorString; + newItem.inode=fileInfo; + newItem.mkPath=false; + newItem.rmPath=false; + newItem.scan=thread; + newItem.transfer=NULL; + newItem.errorType=errorType; + errorQueue.push_back(newItem); + return; + } + dialogIsOpen=true; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog"); + emit error(fileInfo.absoluteFilePath().toStdString(),fileInfo.size(),fileInfo.lastModified().toMSecsSinceEpoch()/1000,errorString); + FileErrorDialog dialog(interface,fileInfo,errorString,errorType); + dialog.exec();/// \bug crash when external close + FileErrorAction newAction=dialog.getAction(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"close dialog: "+std::to_string(newAction)); + if(newAction==FileError_Cancel) + { + emit cancelAll(); + return; + } + if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError) + { + setComboBoxFolderError(newAction); + alwaysDoThisActionForFolderError=newAction; + } + dialogIsOpen=false; + thread->setFolderErrorAction(newAction); + if(!isCalledByShowOneNewDialog) + emit queryOneNewDialog(); + return; + break; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop"); +} + +// ----------------------------------------------------- + +//mkpath event +void CopyEngine::mkPathErrorOnFolder(QFileInfo folder,std::string errorString,const ErrorType &errorType,bool isCalledByShowOneNewDialog) +{ + if(stopIt) + return; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file have error: "+folder.absoluteFilePath().toStdString()+", error: "+errorString); + //load the always action + FileErrorAction tempFileErrorAction=alwaysDoThisActionForFolderError; + switch(tempFileErrorAction) + { + case FileError_Skip: + listThread->mkPathQueue.skip(); + return; + case FileError_Retry: + listThread->mkPathQueue.retry(); + return; + default: + if(dialogIsOpen) + { + errorQueueItem newItem; + newItem.errorString=errorString; + newItem.inode=folder; + newItem.mkPath=true; + newItem.rmPath=false; + newItem.scan=NULL; + newItem.transfer=NULL; + newItem.errorType=errorType; + errorQueue.push_back(newItem); + return; + } + dialogIsOpen=true; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog"); + emit error(folder.absoluteFilePath().toStdString(),folder.size(),folder.lastModified().toMSecsSinceEpoch()/1000,errorString); + FileErrorDialog dialog(interface,folder,errorString,errorType); + dialog.exec();/// \bug crash when external close + FileErrorAction newAction=dialog.getAction(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"close dialog: "+std::to_string(newAction)); + if(newAction==FileError_Cancel) + { + emit cancelAll(); + return; + } + if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError) + { + setComboBoxFolderError(newAction); + alwaysDoThisActionForFolderError=newAction; + } + dialogIsOpen=false; + switch(newAction) + { + case FileError_Skip: + listThread->mkPathQueue.skip(); + break; + case FileError_Retry: + listThread->mkPathQueue.retry(); + break; + default: + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unknow switch case: "+std::to_string(newAction)); + break; + } + if(!isCalledByShowOneNewDialog) + emit queryOneNewDialog(); + return; + break; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop"); +} + +//show one new dialog if needed +void CopyEngine::showOneNewDialog() +{ + if(stopIt) + return; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"alreadyExistsQueue.size(): "+std::to_string(alreadyExistsQueue.size())); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"errorQueue.size(): "+std::to_string(errorQueue.size())); + int loop_size=alreadyExistsQueue.size(); + while(loop_size>0) + { + if(alreadyExistsQueue.front().transfer!=NULL) + { + fileAlreadyExists(alreadyExistsQueue.front().source, + alreadyExistsQueue.front().destination, + alreadyExistsQueue.front().isSame, + alreadyExistsQueue.front().transfer, + true); + } + else if(alreadyExistsQueue.front().scan!=NULL) + folderAlreadyExists(alreadyExistsQueue.front().source, + alreadyExistsQueue.front().destination, + alreadyExistsQueue.front().isSame, + alreadyExistsQueue.front().scan, + true); + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"bug, no thread actived"); + alreadyExistsQueue.erase(alreadyExistsQueue.cbegin()); + loop_size--; + } + loop_size=errorQueue.size(); + while(errorQueue.size()>0 && loop_size>0) + { + if(errorQueue.front().transfer!=NULL) + errorOnFile(errorQueue.front().inode,errorQueue.front().errorString,errorQueue.front().transfer,errorQueue.front().errorType,true); + else if(errorQueue.front().scan!=NULL) + errorOnFolder(errorQueue.front().inode,errorQueue.front().errorString,errorQueue.front().scan,errorQueue.front().errorType,true); + else if(errorQueue.front().mkPath) + mkPathErrorOnFolder(errorQueue.front().inode,errorQueue.front().errorString,errorQueue.front().errorType,true); + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"bug, no thread actived"); + errorQueue.erase(errorQueue.cbegin()); + loop_size--; + } +} diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.cpp b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.cpp new file mode 100755 index 0000000..d7cdb6c --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.cpp @@ -0,0 +1,1261 @@ +/** \file copyEngine.cpp +\brief Define the copy engine +\author alpha_one_x86 */ + +#include <QFileDialog> +#include <QMessageBox> +#include <cmath> + +#include "CopyEngine.h" +#include "FolderExistsDialog.h" +#include "../../../interface/PluginInterface_CopyEngine.h" + +// The cmath header from MSVC does not contain round() +#if (defined(_WIN64) || defined(_WIN32)) && defined(_MSC_VER) +inline double round(double d) { + return floor( d + 0.5 ); +} +#endif + +CopyEngine::CopyEngine(FacilityInterface * facilityEngine) : + ui(new Ui::copyEngineOptions()) +{ + listThread=new ListThread(facilityEngine); + this->facilityEngine = facilityEngine; + filters = NULL; + renamingRules = NULL; + + blockSize = ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE; + sequentialBuffer = ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE*ULTRACOPIER_PLUGIN_DEFAULT_SEQUENTIAL_NUMBER_OF_BLOCK; + parallelBuffer = ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE*ULTRACOPIER_PLUGIN_DEFAULT_PARALLEL_NUMBER_OF_BLOCK; + interface = NULL; + tempWidget = NULL; + uiIsInstalled = false; + dialogIsOpen = false; + renameTheOriginalDestination = false; + maxSpeed = 0; + alwaysDoThisActionForFileExists = FileExists_NotSet; + alwaysDoThisActionForFileError = FileError_NotSet; + checkDestinationFolderExists = false; + stopIt = false; + size_for_speed = 0; + putAtBottom = 0; + forcedMode = false; + followTheStrictOrder = false; + deletePartiallyTransferredFiles = true; + inodeThreads = 16; + moveTheWholeFolder = true; + + //implement the SingleShot in this class + //timerActionDone.setSingleShot(true); + timerActionDone.setInterval(ULTRACOPIER_PLUGIN_TIME_UPDATE_TRASNFER_LIST); + //timerProgression.setSingleShot(true); + timerProgression.setInterval(ULTRACOPIER_PLUGIN_TIME_UPDATE_PROGRESSION); + + timerUpdateMount.setInterval(ULTRACOPIER_PLUGIN_TIME_UPDATE_MOUNT_MS); +} + +CopyEngine::~CopyEngine() +{ + /*if(filters!=NULL) + delete filters; + if(renamingRules!=NULL) + delete renamingRules; + destroyed by the widget parent, here the interface + */ + stopIt=true; + delete listThread; + delete ui; +} + +void CopyEngine::connectTheSignalsSlots() +{ + #ifdef ULTRACOPIER_PLUGIN_DEBUG + #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW + debugDialogWindow.show(); + #endif + #endif + if(!connect(listThread,&ListThread::actionInProgess, this,&CopyEngine::actionInProgess, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect actionInProgess()"); + if(!connect(listThread,&ListThread::actionInProgess, this,&CopyEngine::newActionInProgess, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect actionInProgess() to slot"); + if(!connect(listThread,&ListThread::newFolderListing, this,&CopyEngine::newFolderListing, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect newFolderListing()"); + if(!connect(listThread,&ListThread::isInPause, this,&CopyEngine::isInPause, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect isInPause()"); + if(!connect(listThread,&ListThread::error, this,&CopyEngine::error, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect error()"); + if(!connect(listThread,&ListThread::rmPath, this,&CopyEngine::rmPath, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect rmPath()"); + if(!connect(listThread,&ListThread::mkPath, this,&CopyEngine::mkPath, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect mkPath()"); + if(!connect(listThread,&ListThread::newActionOnList, this,&CopyEngine::newActionOnList, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect newActionOnList()"); + if(!connect(listThread,&ListThread::doneTime, this,&CopyEngine::doneTime, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect doneTime()"); + if(!connect(listThread,&ListThread::pushFileProgression, this,&CopyEngine::pushFileProgression, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect pushFileProgression()"); + if(!connect(listThread,&ListThread::pushGeneralProgression, this,&CopyEngine::pushGeneralProgression, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect pushGeneralProgression()"); + if(!connect(listThread,&ListThread::syncReady, this,&CopyEngine::syncReady, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect syncReady()"); + if(!connect(listThread,&ListThread::canBeDeleted, this,&CopyEngine::canBeDeleted, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect canBeDeleted()"); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW + if(!connect(listThread,&ListThread::debugInformation, this,&CopyEngine::debugInformation, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect debugInformation()"); + #endif + #endif + + if(!connect(listThread,&ListThread::send_fileAlreadyExists, this,&CopyEngine::fileAlreadyExistsSlot, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_fileAlreadyExists()"); + if(!connect(listThread,&ListThread::send_errorOnFile, this,&CopyEngine::errorOnFileSlot, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_errorOnFile()"); + if(!connect(listThread,&ListThread::send_folderAlreadyExists, this,&CopyEngine::folderAlreadyExistsSlot, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_folderAlreadyExists()"); + if(!connect(listThread,&ListThread::send_errorOnFolder, this,&CopyEngine::errorOnFolderSlot, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_errorOnFolder()"); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW + if(!connect(listThread,&ListThread::updateTheDebugInfo, this,&CopyEngine::updateTheDebugInfo, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect updateTheDebugInfo()"); + #endif + #endif + if(!connect(listThread,&ListThread::errorTransferList, this,&CopyEngine::errorTransferList, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect errorTransferList()"); + if(!connect(listThread,&ListThread::warningTransferList, this,&CopyEngine::warningTransferList, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect warningTransferList()"); + if(!connect(listThread,&ListThread::mkPathErrorOnFolder, this,&CopyEngine::mkPathErrorOnFolderSlot, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect mkPathErrorOnFolder()"); + if(!connect(listThread,&ListThread::send_realBytesTransfered, this,&CopyEngine::get_realBytesTransfered, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_realBytesTransfered()"); + + if(!connect(this,&CopyEngine::tryCancel, listThread,&ListThread::cancel, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect tryCancel()"); + if(!connect(this,&CopyEngine::getNeedPutAtBottom, listThread,&ListThread::getNeedPutAtBottom, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect getNeedPutAtBottom()"); + if(!connect(listThread,&ListThread::haveNeedPutAtBottom, this,&CopyEngine::haveNeedPutAtBottom, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect haveNeedPutAtBottom()"); + + + if(!connect(this,&CopyEngine::signal_pause, listThread,&ListThread::pause, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_pause()"); + if(!connect(this,&CopyEngine::signal_exportErrorIntoTransferList,listThread,&ListThread::exportErrorIntoTransferList, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_exportErrorIntoTransferList()"); + if(!connect(this,&CopyEngine::signal_resume, listThread,&ListThread::resume, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_resume()"); + if(!connect(this,&CopyEngine::signal_skip, listThread,&ListThread::skip, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_skip()"); + if(!connect(this,&CopyEngine::signal_setCollisionAction, listThread,&ListThread::setAlwaysFileExistsAction, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_setCollisionAction()"); + if(!connect(this,&CopyEngine::signal_setTransferAlgorithm, listThread,&ListThread::setTransferAlgorithm, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_setCollisionAction()"); + if(!connect(this,&CopyEngine::signal_setFolderCollision, listThread,&ListThread::setFolderCollision, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_setFolderCollision()"); + if(!connect(this,&CopyEngine::signal_removeItems, listThread,&ListThread::removeItems, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_removeItems()"); + if(!connect(this,&CopyEngine::signal_moveItemsOnTop, listThread,&ListThread::moveItemsOnTop, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_moveItemsOnTop()"); + if(!connect(this,&CopyEngine::signal_moveItemsUp, listThread,&ListThread::moveItemsUp, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_moveItemsUp()"); + if(!connect(this,&CopyEngine::signal_moveItemsDown, listThread,&ListThread::moveItemsDown, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_moveItemsDown()"); + if(!connect(this,&CopyEngine::signal_moveItemsOnBottom, listThread,&ListThread::moveItemsOnBottom, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_moveItemsOnBottom()"); + if(!connect(this,&CopyEngine::signal_exportTransferList, listThread,&ListThread::exportTransferList, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_exportTransferList()"); + if(!connect(this,&CopyEngine::signal_importTransferList, listThread,&ListThread::importTransferList, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_importTransferList()"); + if(!connect(this,&CopyEngine::signal_forceMode, listThread,&ListThread::forceMode, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect signal_forceMode()"); + if(!connect(this,&CopyEngine::send_osBufferLimit, listThread,&ListThread::set_osBufferLimit, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_osBufferLimit()"); + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + if(!connect(this,&CopyEngine::send_speedLimitation, listThread,&ListThread::setSpeedLimitation, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_speedLimitation()"); + #endif + if(!connect(this,&CopyEngine::send_blockSize, listThread,&ListThread::setBlockSize, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_blockSize()"); + if(!connect(this,&CopyEngine::send_parallelBuffer, listThread,&ListThread::setParallelBuffer, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect setParallelBuffer()"); + if(!connect(this,&CopyEngine::send_sequentialBuffer, listThread,&ListThread::setSequentialBuffer, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect setSequentialBuffer()"); + if(!connect(this,&CopyEngine::send_parallelizeIfSmallerThan, listThread,&ListThread::setParallelizeIfSmallerThan, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect setParallelizeIfSmallerThan()"); + if(!connect(this,&CopyEngine::send_moveTheWholeFolder, listThread,&ListThread::setMoveTheWholeFolder, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect moveTheWholeFolder()"); + if(!connect(this,&CopyEngine::send_deletePartiallyTransferredFiles, listThread,&ListThread::setDeletePartiallyTransferredFiles, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect deletePartiallyTransferredFiles()"); + if(!connect(this,&CopyEngine::send_setRenameTheOriginalDestination, listThread,&ListThread::setRenameTheOriginalDestination, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect setRenameTheOriginalDestination()"); + if(!connect(this,&CopyEngine::send_setInodeThreads, listThread,&ListThread::setInodeThreads, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect setInodeThreads()"); + if(!connect(this,&CopyEngine::send_followTheStrictOrder, listThread,&ListThread::setFollowTheStrictOrder, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect followTheStrictOrder()"); + if(!connect(this,&CopyEngine::send_setFilters,listThread,&ListThread::set_setFilters, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_setFilters()"); + if(!connect(this,&CopyEngine::send_sendNewRenamingRules,listThread,&ListThread::set_sendNewRenamingRules, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect send_sendNewRenamingRules()"); + if(!connect(&timerActionDone,&QTimer::timeout, listThread,&ListThread::sendActionDone)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect timerActionDone"); + if(!connect(&timerProgression,&QTimer::timeout, listThread,&ListThread::sendProgression)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect timerProgression"); + if(!connect(listThread,&ListThread::missingDiskSpace, this,&CopyEngine::missingDiskSpace,Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect timerProgression"); + + if(!connect(this,&CopyEngine::queryOneNewDialog,this,&CopyEngine::showOneNewDialog,Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect queryOneNewDialog()"); + if(!connect(listThread,&ListThread::errorToRetry,this,&CopyEngine::errorToRetry,Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect errorToRetry()"); + + if(!connect(&timerUpdateMount,&QTimer::timeout,listThread,&ListThread::set_updateMount, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect set_updateMount()"); +} + +#ifdef ULTRACOPIER_PLUGIN_DEBUG +#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW +void CopyEngine::updateTheDebugInfo(const std::vector<std::string> &newList, const std::vector<std::string> &newList2, const int &numberOfInodeOperation) +{ + debugDialogWindow.setTransferThreadList(newList); + debugDialogWindow.setTransferList(newList2); + debugDialogWindow.setInodeUsage(numberOfInodeOperation); +} +#endif +#endif + +//to send the options panel +bool CopyEngine::getOptionsEngine(QWidget * tempWidget) +{ + this->tempWidget=tempWidget; + ui->setupUi(tempWidget); + ui->toolBox->setCurrentIndex(0); + ui->blockSize->setMaximum(ULTRACOPIER_PLUGIN_MAX_BLOCK_SIZE); + connect(tempWidget, &QWidget::destroyed, this, &CopyEngine::resetTempWidget); + //conect the ui widget + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + if(!setSpeedLimitation(maxSpeed)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to set the speed limitation"); + #endif + + //here else, the default settings can't be loaded + uiIsInstalled=true; + + setBlockSize(blockSize); + setSequentialBuffer(sequentialBuffer); + setParallelBuffer(parallelBuffer); + setAutoStart(autoStart); + #ifdef ULTRACOPIER_PLUGIN_RSYNC + setRsync(rsync); + #else + ui->label_rsync->setVisible(false); + ui->rsync->setVisible(false); + #endif + setCheckDestinationFolderExists(checkDestinationFolderExists); + set_doChecksum(doChecksum); + set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible); + set_checksumOnlyOnError(checksumOnlyOnError); + set_osBuffer(osBuffer); + set_osBufferLimited(osBufferLimited); + set_osBufferLimit(osBufferLimit); + setRightTransfer(doRightTransfer); + setKeepDate(keepDate); + setParallelizeIfSmallerThan(parallelizeIfSmallerThan); + setFollowTheStrictOrder(followTheStrictOrder); + setDeletePartiallyTransferredFiles(deletePartiallyTransferredFiles); + setInodeThreads(inodeThreads); + setRenameTheOriginalDestination(renameTheOriginalDestination); + setMoveTheWholeFolder(moveTheWholeFolder); + setCheckDiskSpace(checkDiskSpace); + setDefaultDestinationFolder(defaultDestinationFolder); + + switch(alwaysDoThisActionForFileExists) + { + case FileExists_NotSet: + ui->comboBoxFileCollision->setCurrentIndex(0); + break; + case FileExists_Skip: + ui->comboBoxFileCollision->setCurrentIndex(1); + break; + case FileExists_Overwrite: + ui->comboBoxFileCollision->setCurrentIndex(2); + break; + case FileExists_OverwriteIfNotSame: + ui->comboBoxFileCollision->setCurrentIndex(3); + break; + case FileExists_OverwriteIfNewer: + ui->comboBoxFileCollision->setCurrentIndex(4); + break; + case FileExists_OverwriteIfOlder: + ui->comboBoxFileCollision->setCurrentIndex(5); + break; + case FileExists_Rename: + ui->comboBoxFileCollision->setCurrentIndex(6); + break; + default: + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored"); + ui->comboBoxFileCollision->setCurrentIndex(0); + break; + } + switch(alwaysDoThisActionForFileError) + { + case FileError_NotSet: + ui->comboBoxFileError->setCurrentIndex(0); + break; + case FileError_Skip: + ui->comboBoxFileError->setCurrentIndex(1); + break; + case FileError_PutToEndOfTheList: + ui->comboBoxFileError->setCurrentIndex(2); + break; + default: + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored"); + ui->comboBoxFileError->setCurrentIndex(0); + break; + } + switch(alwaysDoThisActionForFolderExists) + { + case FolderExists_NotSet: + ui->comboBoxFolderCollision->setCurrentIndex(0); + break; + case FolderExists_Merge: + ui->comboBoxFolderCollision->setCurrentIndex(1); + break; + case FolderExists_Skip: + ui->comboBoxFolderCollision->setCurrentIndex(2); + break; + case FolderExists_Rename: + ui->comboBoxFolderCollision->setCurrentIndex(3); + break; + default: + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored"); + ui->comboBoxFolderCollision->setCurrentIndex(0); + break; + } + switch(alwaysDoThisActionForFolderError) + { + case FileError_NotSet: + ui->comboBoxFolderError->setCurrentIndex(0); + break; + case FileError_Skip: + ui->comboBoxFolderError->setCurrentIndex(1); + break; + default: + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored: "+std::to_string(alwaysDoThisActionForFolderError)); + ui->comboBoxFolderError->setCurrentIndex(0); + break; + } + switch(transferAlgorithm) + { + case TransferAlgorithm_Automatic: + ui->transferAlgorithm->setCurrentIndex(0); + break; + case TransferAlgorithm_Sequential: + ui->transferAlgorithm->setCurrentIndex(1); + break; + case TransferAlgorithm_Parallel: + ui->transferAlgorithm->setCurrentIndex(2); + break; + default: + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored"); + ui->transferAlgorithm->setCurrentIndex(0); + break; + } + return true; +} + +//to have interface widget to do modal dialog +void CopyEngine::setInterfacePointer(QWidget * interface) +{ + this->interface=interface; + filters=new Filters(tempWidget); + renamingRules=new RenamingRules(tempWidget); + + if(uiIsInstalled) + { + connect(ui->doRightTransfer, &QCheckBox::toggled, this,&CopyEngine::setRightTransfer); + connect(ui->keepDate, &QCheckBox::toggled, this,&CopyEngine::setKeepDate); + connect(ui->blockSize, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngine::setBlockSize); + connect(ui->autoStart, &QCheckBox::toggled, this,&CopyEngine::setAutoStart); + connect(ui->doChecksum, &QCheckBox::toggled, this,&CopyEngine::doChecksum_toggled); + connect(ui->checksumIgnoreIfImpossible, &QCheckBox::toggled, this,&CopyEngine::checksumIgnoreIfImpossible_toggled); + connect(ui->checksumOnlyOnError, &QCheckBox::toggled, this,&CopyEngine::checksumOnlyOnError_toggled); + connect(ui->osBuffer, &QCheckBox::toggled, this,&CopyEngine::osBuffer_toggled); + connect(ui->osBufferLimited, &QCheckBox::toggled, this,&CopyEngine::osBufferLimited_toggled); + connect(ui->osBufferLimit, &QSpinBox::editingFinished, this,&CopyEngine::osBufferLimit_editingFinished); + connect(ui->moveTheWholeFolder, &QCheckBox::toggled, this,&CopyEngine::setMoveTheWholeFolder); + connect(ui->deletePartiallyTransferredFiles, &QCheckBox::toggled, this,&CopyEngine::setDeletePartiallyTransferredFiles); + connect(ui->followTheStrictOrder, &QCheckBox::toggled, this,&CopyEngine::setFollowTheStrictOrder); + connect(ui->checkBoxDestinationFolderExists, &QCheckBox::toggled, this,&CopyEngine::setCheckDestinationFolderExists); + #ifdef ULTRACOPIER_PLUGIN_RSYNC + connect(ui->rsync, &QCheckBox::toggled, this,&CopyEngine::setRsync); + #endif + connect(ui->renameTheOriginalDestination, &QCheckBox::toggled, this,&CopyEngine::setRenameTheOriginalDestination); + connect(filters, &Filters::haveNewFilters, this,&CopyEngine::sendNewFilters); + connect(ui->filters, &QPushButton::clicked, this,&CopyEngine::showFilterDialog); + connect(ui->inodeThreads, &QSpinBox::editingFinished, this,&CopyEngine::inodeThreadsFinished); + connect(ui->inodeThreads, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngine::setInodeThreads); + connect(ui->defaultDestinationFolderBrowse, &QPushButton::clicked, this,&CopyEngine::defaultDestinationFolderBrowse); + + connect(ui->sequentialBuffer, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngine::setSequentialBuffer); + connect(ui->parallelBuffer, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngine::setParallelBuffer); + connect(ui->parallelizeIfSmallerThan, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngine::setParallelizeIfSmallerThan); + connect(ui->comboBoxFolderError, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngine::setFolderError); + connect(ui->comboBoxFolderCollision, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngine::setFolderCollision); + connect(ui->comboBoxFileError, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngine::setFileError); + connect(ui->comboBoxFileCollision, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngine::setFileCollision); + connect(ui->transferAlgorithm, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngine::setTransferAlgorithm); + + if(!connect(renamingRules,&RenamingRules::sendNewRenamingRules,this,&CopyEngine::sendNewRenamingRules)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect sendNewRenamingRules()"); + if(!connect(ui->renamingRules,&QPushButton::clicked,this,&CopyEngine::showRenamingRules)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect renamingRules.clicked()"); + } + + filters->setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions); + set_setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions); + + renamingRules->setRenamingRules(firstRenamingRule,otherRenamingRule); + emit send_sendNewRenamingRules(firstRenamingRule,otherRenamingRule); +} + +bool CopyEngine::haveSameSource(const std::vector<std::string> &sources) +{ + return listThread->haveSameSource(sources); +} + +bool CopyEngine::haveSameDestination(const std::string &destination) +{ + return listThread->haveSameDestination(destination); +} + +bool CopyEngine::newCopy(const std::vector<std::string> &sources) +{ + if(forcedMode && mode!=Ultracopier::Copy) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The engine is forced to move, you can't copy with it"); + QMessageBox::critical(NULL,QString::fromStdString(facilityEngine->translateText("Internal error")),tr("The engine is forced to move, you can't copy with it")); + return false; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + std::string destination; + if(!defaultDestinationFolder.empty() && QDir(QString::fromStdString(defaultDestinationFolder)).exists()) + destination = defaultDestinationFolder; + else + destination = askDestination(); + if(destination.empty()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Canceled by the user"); + return false; + } + return listThread->newCopy(sources,destination); +} + +bool CopyEngine::newCopy(const std::vector<std::string> &sources,const std::string &destination) +{ + if(forcedMode && mode!=Ultracopier::Copy) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The engine is forced to move, you can't copy with it"); + QMessageBox::critical(NULL,QString::fromStdString(facilityEngine->translateText("Internal error")),tr("The engine is forced to move, you can't copy with it")); + return false; + } + return listThread->newCopy(sources,destination); +} + +bool CopyEngine::newMove(const std::vector<std::string> &sources) +{ + if(forcedMode && mode!=Ultracopier::Move) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The engine is forced to copy, you can't move with it"); + QMessageBox::critical(NULL,QString::fromStdString(facilityEngine->translateText("Internal error")),tr("The engine is forced to copy, you can't move with it")); + return false; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + std::string destination; + if(!ui->defaultDestinationFolder->text().isEmpty() && QDir(ui->defaultDestinationFolder->text()).exists()) + destination = ui->defaultDestinationFolder->text().toStdString(); + else + destination = askDestination(); + if(destination.empty()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Canceled by the user"); + return false; + } + return listThread->newMove(sources,destination); +} + +bool CopyEngine::newMove(const std::vector<std::string> &sources,const std::string &destination) +{ + if(forcedMode && mode!=Ultracopier::Move) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The engine is forced to copy, you can't move with it"); + QMessageBox::critical(NULL,QString::fromStdString(facilityEngine->translateText("Internal error")),tr("The engine is forced to copy, you can't move with it")); + return false; + } + return listThread->newMove(sources,destination); +} + +void CopyEngine::defaultDestinationFolderBrowse() +{ + std::string destination = askDestination(); + if(destination.empty()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Canceled by the user"); + return; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(uiIsInstalled) + ui->defaultDestinationFolder->setText(QString::fromStdString(destination)); +} + +std::string CopyEngine::askDestination() +{ + std::string destination = listThread->getUniqueDestinationFolder(); + if(!destination.empty()) + { + QMessageBox::StandardButton button=QMessageBox::question(interface,tr("Destination"),tr("Use the actual destination \"%1\"?") + .arg(QString::fromStdString(destination)), + QMessageBox::Yes | QMessageBox::No,QMessageBox::Yes); + if(button==QMessageBox::Yes) + return destination; + } + destination=QFileDialog::getExistingDirectory(interface,QString::fromStdString(facilityEngine->translateText("Select destination directory")),QStringLiteral(""),QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks).toStdString(); + return destination; +} + +void CopyEngine::newTransferList(const std::string &file) +{ + emit signal_importTransferList(file); +} + +//because direct access to list thread into the main thread can't be do +uint64_t CopyEngine::realByteTransfered() +{ + return size_for_speed; +} + +//speed limitation +bool CopyEngine::supportSpeedLimitation() const +{ + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + return true; + #else + return false; + #endif +} + +/** \brief to sync the transfer list + * Used when the interface is changed, useful to minimize the memory size */ +void CopyEngine::syncTransferList() +{ + listThread->syncTransferList(); +} + +void CopyEngine::set_doChecksum(bool doChecksum) +{ + listThread->set_doChecksum(doChecksum); + if(uiIsInstalled) + { + ui->doChecksum->setChecked(doChecksum); + ui->checksumOnlyOnError->setEnabled(ui->doChecksum->isChecked()); + ui->checksumIgnoreIfImpossible->setEnabled(ui->doChecksum->isChecked()); + } + this->doChecksum=doChecksum; +} + +void CopyEngine::set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible) +{ + listThread->set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible); + if(uiIsInstalled) + ui->checksumIgnoreIfImpossible->setChecked(checksumIgnoreIfImpossible); + this->checksumIgnoreIfImpossible=checksumIgnoreIfImpossible; +} + +void CopyEngine::set_checksumOnlyOnError(bool checksumOnlyOnError) +{ + listThread->set_checksumOnlyOnError(checksumOnlyOnError); + if(uiIsInstalled) + ui->checksumOnlyOnError->setChecked(checksumOnlyOnError); + this->checksumOnlyOnError=checksumOnlyOnError; +} + +void CopyEngine::set_osBuffer(bool osBuffer) +{ + listThread->set_osBuffer(osBuffer); + if(uiIsInstalled) + { + ui->osBuffer->setChecked(osBuffer); + updateBufferCheckbox(); + } + this->osBuffer=osBuffer; +} + +void CopyEngine::set_osBufferLimited(bool osBufferLimited) +{ + listThread->set_osBufferLimited(osBufferLimited); + if(uiIsInstalled) + { + ui->osBufferLimited->setChecked(osBufferLimited); + updateBufferCheckbox(); + } + this->osBufferLimited=osBufferLimited; +} + +void CopyEngine::set_osBufferLimit(unsigned int osBufferLimit) +{ + emit send_osBufferLimit(osBufferLimit); + if(uiIsInstalled) + ui->osBufferLimit->setValue(osBufferLimit); + this->osBufferLimit=osBufferLimit; +} + +void CopyEngine::updateBufferCheckbox() +{ + ui->osBufferLimited->setEnabled(ui->osBuffer->isChecked()); + ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked()); +} + +void CopyEngine::set_setFilters(std::vector<std::string> includeStrings,std::vector<std::string> includeOptions,std::vector<std::string> excludeStrings,std::vector<std::string> excludeOptions) +{ + if(filters!=NULL) + { + filters->setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions); + emit send_setFilters(filters->getInclude(),filters->getExclude()); + } + this->includeStrings=includeStrings; + this->includeOptions=includeOptions; + this->excludeStrings=excludeStrings; + this->excludeOptions=excludeOptions; +} + +void CopyEngine::setRenamingRules(std::string firstRenamingRule,std::string otherRenamingRule) +{ + sendNewRenamingRules(firstRenamingRule,otherRenamingRule); +} + +bool CopyEngine::userAddFolder(const Ultracopier::CopyMode &mode) +{ + std::string source = QFileDialog::getExistingDirectory(interface,QString::fromStdString(facilityEngine->translateText("Select source directory")), + QStringLiteral(""), + QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks).toStdString(); + if(source.empty() || source=="") + return false; + std::vector<std::string> sources; + sources.push_back(source); + if(mode==Ultracopier::Copy) + return newCopy(sources); + else + return newMove(sources); +} + +bool CopyEngine::userAddFile(const Ultracopier::CopyMode &mode) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + QStringList sources = QFileDialog::getOpenFileNames( + interface, + QString::fromStdString(facilityEngine->translateText("Select one or more files to open")), + QStringLiteral(""), + QString::fromStdString(facilityEngine->translateText("All files"))+QStringLiteral(" (*)")); + + std::vector<std::string> sourcesstd; + unsigned int index=0; + while(index<(unsigned int)sources.size()) + { + sourcesstd.push_back(sources.at(index).toStdString()); + index++; + } + + if(sourcesstd.empty()) + return false; + if(mode==Ultracopier::Copy) + return newCopy(sourcesstd); + else + return newMove(sourcesstd); +} + +void CopyEngine::pause() +{ + emit signal_pause(); +} + +void CopyEngine::resume() +{ + emit signal_resume(); +} + +void CopyEngine::skip(const uint64_t &id) +{ + emit signal_skip(id); +} + +void CopyEngine::cancel() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + stopIt=true; + timerProgression.stop(); + timerActionDone.stop(); + emit tryCancel(); +} + +void CopyEngine::removeItems(const std::vector<uint64_t> &ids) +{ + emit signal_removeItems(ids); +} + +void CopyEngine::moveItemsOnTop(const std::vector<uint64_t> &ids) +{ + emit signal_moveItemsOnTop(ids); +} + +void CopyEngine::moveItemsUp(const std::vector<uint64_t> &ids) +{ + emit signal_moveItemsUp(ids); +} + +void CopyEngine::moveItemsDown(const std::vector<uint64_t> &ids) +{ + emit signal_moveItemsDown(ids); +} + +void CopyEngine::moveItemsOnBottom(const std::vector<uint64_t> &ids) +{ + emit signal_moveItemsOnBottom(ids); +} + +/** \brief give the forced mode, to export/import transfer list */ +void CopyEngine::forceMode(const Ultracopier::CopyMode &mode) +{ + #ifdef ULTRACOPIER_PLUGIN_RSYNC + if(mode==Ultracopier::Move) + { + listThread->setRsync(false); + rsync=false; + } + if(uiIsInstalled) + ui->rsync->setEnabled(mode==Ultracopier::Copy); + #endif + if(forcedMode) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Mode forced previously"); + QMessageBox::critical(NULL,QString::fromStdString(facilityEngine->translateText("Internal error")),tr("The mode has been forced previously. This is an internal error, please report it")); + return; + } + #ifdef ULTRACOPIER_PLUGIN_RSYNC + if(mode==Ultracopier::Move) + rsync=false; + #endif + if(mode==Ultracopier::Copy) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"Force mode to copy"); + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"Force mode to move"); + #ifdef ULTRACOPIER_PLUGIN_RSYNC + if(uiIsInstalled) + ui->rsync->setEnabled(mode==Ultracopier::Copy); + #endif + this->mode=mode; + forcedMode=true; + emit signal_forceMode(mode); +} + +void CopyEngine::exportTransferList() +{ + std::string fileName = QFileDialog::getSaveFileName(interface,QString::fromStdString(facilityEngine->translateText("Save transfer list")),QStringLiteral("transfer-list.lst"),QString::fromStdString(facilityEngine->translateText("Transfer list"))+QStringLiteral(" (*.lst)")).toStdString(); + if(fileName.empty()) + return; + emit signal_exportTransferList(fileName); +} + +void CopyEngine::importTransferList() +{ + std::string fileName = QFileDialog::getOpenFileName(interface,QString::fromStdString(facilityEngine->translateText("Open transfer list")),QStringLiteral("transfer-list.lst"),QString::fromStdString(facilityEngine->translateText("Transfer list"))+QStringLiteral(" (*.lst)")).toStdString(); + if(fileName.empty()) + return; + emit signal_importTransferList(fileName); +} + +void CopyEngine::warningTransferList(const std::string &warning) +{ + QMessageBox::warning(interface,QString::fromStdString(facilityEngine->translateText("Error")),QString::fromStdString(warning)); +} + +void CopyEngine::errorTransferList(const std::string &error) +{ + QMessageBox::critical(interface,QString::fromStdString(facilityEngine->translateText("Error")),QString::fromStdString(error)); +} + +bool CopyEngine::setSpeedLimitation(const int64_t &speedLimitation) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"maxSpeed: "+std::to_string(speedLimitation)); + maxSpeed=speedLimitation; + emit send_speedLimitation(speedLimitation); + return true; +} + +void CopyEngine::setFileCollision(int index) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"action index: "+std::to_string(index)); + if(uiIsInstalled) + if(index!=ui->comboBoxFileCollision->currentIndex()) + ui->comboBoxFileCollision->setCurrentIndex(index); + switch(index) + { + case 0: + alwaysDoThisActionForFileExists=FileExists_NotSet; + break; + case 1: + alwaysDoThisActionForFileExists=FileExists_Skip; + break; + case 2: + alwaysDoThisActionForFileExists=FileExists_Overwrite; + break; + case 3: + alwaysDoThisActionForFileExists=FileExists_OverwriteIfNotSame; + break; + case 4: + alwaysDoThisActionForFileExists=FileExists_OverwriteIfNewer; + break; + case 5: + alwaysDoThisActionForFileExists=FileExists_OverwriteIfOlder; + break; + case 6: + alwaysDoThisActionForFileExists=FileExists_Rename; + break; + default: + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored"); + alwaysDoThisActionForFileExists=FileExists_NotSet; + break; + } + emit signal_setCollisionAction(alwaysDoThisActionForFileExists); +} + +void CopyEngine::setFileError(int index) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"action index: "+std::to_string(index)); + if(uiIsInstalled) + if(index!=ui->comboBoxFileError->currentIndex()) + ui->comboBoxFileError->setCurrentIndex(index); + switch(index) + { + case 0: + alwaysDoThisActionForFileError=FileError_NotSet; + break; + case 1: + alwaysDoThisActionForFileError=FileError_Skip; + break; + case 2: + alwaysDoThisActionForFileError=FileError_PutToEndOfTheList; + break; + default: + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored"); + alwaysDoThisActionForFileError=FileError_NotSet; + break; + } + emit signal_setCollisionAction(alwaysDoThisActionForFileExists); +} + +void CopyEngine::setTransferAlgorithm(int index) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"action index: "+std::to_string(index)); + if(uiIsInstalled) + if(index!=ui->transferAlgorithm->currentIndex()) + ui->transferAlgorithm->setCurrentIndex(index); + switch(index) + { + case 0: + transferAlgorithm=TransferAlgorithm_Automatic; + break; + case 1: + transferAlgorithm=TransferAlgorithm_Sequential; + break; + case 2: + transferAlgorithm=TransferAlgorithm_Parallel; + break; + default: + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored"); + transferAlgorithm=TransferAlgorithm_Automatic; + break; + } + if(transferAlgorithm==TransferAlgorithm_Sequential) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"transferAlgorithm==TransferAlgorithm_Sequential"); + else if(transferAlgorithm==TransferAlgorithm_Automatic) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"transferAlgorithm==TransferAlgorithm_Automatic"); + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"transferAlgorithm==TransferAlgorithm_Parallel"); + emit signal_setTransferAlgorithm(transferAlgorithm); +} + +void CopyEngine::setRightTransfer(const bool doRightTransfer) +{ + this->doRightTransfer=doRightTransfer; + if(uiIsInstalled) + ui->doRightTransfer->setChecked(doRightTransfer); + listThread->setRightTransfer(doRightTransfer); +} + +//set keep date +void CopyEngine::setKeepDate(const bool keepDate) +{ + this->keepDate=keepDate; + if(uiIsInstalled) + ui->keepDate->setChecked(keepDate); + listThread->setKeepDate(keepDate); +} + +//set block size in KB +void CopyEngine::setBlockSize(const int blockSize) +{ + this->blockSize=blockSize; + if(uiIsInstalled) + { + ui->blockSize->setValue(blockSize); + ui->sequentialBuffer->setSingleStep(blockSize); + ui->parallelBuffer->setSingleStep(blockSize); + } + emit send_blockSize(blockSize); + updatedBlockSize(); +} + +void CopyEngine::setParallelBuffer(int parallelBuffer) +{ + parallelBuffer=round((float)parallelBuffer/(float)blockSize)*blockSize; + this->parallelBuffer=parallelBuffer; + if(uiIsInstalled) + ui->parallelBuffer->setValue(parallelBuffer); + emit send_parallelBuffer(parallelBuffer/blockSize); +} + +void CopyEngine::setSequentialBuffer(int sequentialBuffer) +{ + sequentialBuffer=round((float)sequentialBuffer/(float)blockSize)*blockSize; + this->sequentialBuffer=sequentialBuffer; + if(uiIsInstalled) + ui->sequentialBuffer->setValue(sequentialBuffer); + emit send_sequentialBuffer(sequentialBuffer/blockSize); +} + +void CopyEngine::setParallelizeIfSmallerThan(int parallelizeIfSmallerThan) +{ + this->parallelizeIfSmallerThan=parallelizeIfSmallerThan; + if(uiIsInstalled) + ui->parallelizeIfSmallerThan->setValue(parallelizeIfSmallerThan); + emit send_parallelizeIfSmallerThan(parallelizeIfSmallerThan*1024); +} + +void CopyEngine::setMoveTheWholeFolder(const bool &moveTheWholeFolder) +{ + this->moveTheWholeFolder=moveTheWholeFolder; + if(uiIsInstalled) + ui->moveTheWholeFolder->setChecked(moveTheWholeFolder); + emit send_moveTheWholeFolder(moveTheWholeFolder); +} + +void CopyEngine::setFollowTheStrictOrder(const bool &followTheStrictOrder) +{ + this->followTheStrictOrder=followTheStrictOrder; + if(uiIsInstalled) + ui->followTheStrictOrder->setChecked(followTheStrictOrder); + emit send_followTheStrictOrder(followTheStrictOrder); +} + +void CopyEngine::setDeletePartiallyTransferredFiles(const bool &deletePartiallyTransferredFiles) +{ + this->deletePartiallyTransferredFiles=deletePartiallyTransferredFiles; + if(uiIsInstalled) + ui->deletePartiallyTransferredFiles->setChecked(deletePartiallyTransferredFiles); + emit send_deletePartiallyTransferredFiles(deletePartiallyTransferredFiles); +} + +void CopyEngine::setInodeThreads(const int &inodeThreads) +{ + this->inodeThreads=inodeThreads; + if(uiIsInstalled) + ui->inodeThreads->setValue(inodeThreads); + emit send_setInodeThreads(inodeThreads); +} + +void CopyEngine::setRenameTheOriginalDestination(const bool &renameTheOriginalDestination) +{ + this->renameTheOriginalDestination=renameTheOriginalDestination; + if(uiIsInstalled) + ui->renameTheOriginalDestination->setChecked(renameTheOriginalDestination); + emit send_setRenameTheOriginalDestination(renameTheOriginalDestination); +} + +void CopyEngine::inodeThreadsFinished() +{ + this->inodeThreads=ui->inodeThreads->value(); + emit send_setInodeThreads(inodeThreads); +} + +//set auto start +void CopyEngine::setAutoStart(const bool autoStart) +{ + this->autoStart=autoStart; + if(uiIsInstalled) + ui->autoStart->setChecked(autoStart); + listThread->setAutoStart(autoStart); +} + +#ifdef ULTRACOPIER_PLUGIN_RSYNC +/// \brief set rsync +void CopyEngine::setRsync(const bool rsync) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"set rsync: "+std::to_string(rsync)); + this->rsync=rsync; + if(uiIsInstalled) + { + ui->rsync->setChecked(rsync); + ui->rsync->setEnabled(forcedMode && mode==Ultracopier::Copy); + ui->label_rsync->setEnabled(forcedMode && mode==Ultracopier::Copy); + } + listThread->setRsync(rsync); +} +#endif + +//set check destination folder +void CopyEngine::setCheckDestinationFolderExists(const bool checkDestinationFolderExists) +{ + this->checkDestinationFolderExists=checkDestinationFolderExists; + if(uiIsInstalled) + ui->checkBoxDestinationFolderExists->setChecked(checkDestinationFolderExists); + listThread->setCheckDestinationFolderExists(checkDestinationFolderExists); +} + +//reset widget +void CopyEngine::resetTempWidget() +{ + uiIsInstalled=false; + tempWidget=NULL; +} + +void CopyEngine::setFolderCollision(int index) +{ + switch(index) + { + case 0: + setComboBoxFolderCollision(FolderExists_NotSet,false); + break; + case 1: + setComboBoxFolderCollision(FolderExists_Merge,false); + break; + case 2: + setComboBoxFolderCollision(FolderExists_Skip,false); + break; + case 3: + setComboBoxFolderCollision(FolderExists_Rename,false); + break; + } +} + +void CopyEngine::setFolderError(int index) +{ + switch(index) + { + case 0: + setComboBoxFolderError(FileError_NotSet,false); + break; + case 1: + setComboBoxFolderError(FileError_Skip,false); + break; + } +} + +//set the translate +void CopyEngine::newLanguageLoaded() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start, retranslate the widget options"); + if(tempWidget!=NULL) + { + ui->retranslateUi(tempWidget); + ui->comboBoxFolderError->setItemText(0,tr("Ask")); + ui->comboBoxFolderError->setItemText(1,tr("Skip")); + + ui->comboBoxFolderCollision->setItemText(0,tr("Ask")); + ui->comboBoxFolderCollision->setItemText(1,tr("Merge")); + ui->comboBoxFolderCollision->setItemText(2,tr("Skip")); + ui->comboBoxFolderCollision->setItemText(3,tr("Rename")); + + ui->comboBoxFileError->setItemText(0,tr("Ask")); + ui->comboBoxFileError->setItemText(1,tr("Skip")); + ui->comboBoxFileError->setItemText(2,tr("Put at the end")); + + ui->comboBoxFileCollision->setItemText(0,tr("Ask")); + ui->comboBoxFileCollision->setItemText(1,tr("Skip")); + ui->comboBoxFileCollision->setItemText(2,tr("Overwrite")); + ui->comboBoxFileCollision->setItemText(3,tr("Overwrite if different")); + ui->comboBoxFileCollision->setItemText(4,tr("Overwrite if newer")); + ui->comboBoxFileCollision->setItemText(5,tr("Overwrite if older")); + ui->comboBoxFileCollision->setItemText(6,tr("Rename")); + + ui->transferAlgorithm->setItemText(0,tr("Automatic")); + ui->transferAlgorithm->setItemText(1,tr("Sequential")); + ui->transferAlgorithm->setItemText(2,tr("Parallel")); + } + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"ui not loaded!"); +} + +void CopyEngine::setComboBoxFolderCollision(FolderExistsAction action,bool changeComboBox) +{ + alwaysDoThisActionForFolderExists=action; + emit signal_setFolderCollision(alwaysDoThisActionForFolderExists); + if(!changeComboBox || !uiIsInstalled) + return; + switch(action) + { + case FolderExists_Merge: + ui->comboBoxFolderCollision->setCurrentIndex(1); + break; + case FolderExists_Skip: + ui->comboBoxFolderCollision->setCurrentIndex(2); + break; + case FolderExists_Rename: + ui->comboBoxFolderCollision->setCurrentIndex(3); + break; + default: + ui->comboBoxFolderCollision->setCurrentIndex(0); + break; + } +} + +void CopyEngine::setComboBoxFolderError(FileErrorAction action,bool changeComboBox) +{ + alwaysDoThisActionForFileError=action; + if(!changeComboBox || !uiIsInstalled) + return; + switch(action) + { + case FileError_Skip: + ui->comboBoxFolderError->setCurrentIndex(1); + break; + default: + ui->comboBoxFolderError->setCurrentIndex(0); + break; + } +} + +void CopyEngine::doChecksum_toggled(bool doChecksum) +{ + listThread->set_doChecksum(doChecksum); +} + +void CopyEngine::checksumOnlyOnError_toggled(bool checksumOnlyOnError) +{ + listThread->set_checksumOnlyOnError(checksumOnlyOnError); +} + +void CopyEngine::checksumIgnoreIfImpossible_toggled(bool checksumIgnoreIfImpossible) +{ + listThread->set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible); +} + +void CopyEngine::osBuffer_toggled(bool osBuffer) +{ + listThread->set_osBuffer(osBuffer); + updateBufferCheckbox(); +} + +void CopyEngine::osBufferLimited_toggled(bool osBufferLimited) +{ + listThread->set_osBufferLimited(osBufferLimited); + updateBufferCheckbox(); +} + +void CopyEngine::osBufferLimit_editingFinished() +{ + emit send_osBufferLimit(ui->osBufferLimit->value()); +} + +void CopyEngine::showFilterDialog() +{ + if(filters!=NULL) + filters->exec(); +} + +void CopyEngine::sendNewFilters() +{ + if(filters!=NULL) + emit send_setFilters(filters->getInclude(),filters->getExclude()); +} + +void CopyEngine::sendNewRenamingRules(std::string firstRenamingRule,std::string otherRenamingRule) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"new filter"); + this->firstRenamingRule=firstRenamingRule; + this->otherRenamingRule=otherRenamingRule; + emit send_sendNewRenamingRules(firstRenamingRule,otherRenamingRule); +} + +void CopyEngine::showRenamingRules() +{ + if(renamingRules==NULL) + { + QMessageBox::critical(NULL,tr("Options error"),tr("Options engine is not loaded. Unable to access the filters")); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"options not loaded"); + return; + } + renamingRules->exec(); +} + +void CopyEngine::get_realBytesTransfered(quint64 realBytesTransfered) +{ + size_for_speed=realBytesTransfered; +} + +void CopyEngine::newActionInProgess(Ultracopier::EngineActionInProgress action) +{ + if(action==Ultracopier::Idle) + { + timerProgression.stop(); + timerActionDone.stop(); + } + else + { + timerProgression.start(); + timerActionDone.start(); + } +} + +void CopyEngine::updatedBlockSize() +{ + if(uiIsInstalled) + { + ui->sequentialBuffer->setMinimum(ui->blockSize->value()); + ui->sequentialBuffer->setSingleStep(ui->blockSize->value()); + ui->sequentialBuffer->setMaximum(ui->blockSize->value()*ULTRACOPIER_PLUGIN_MAX_SEQUENTIAL_NUMBER_OF_BLOCK); + ui->parallelBuffer->setMinimum(ui->blockSize->value()); + ui->parallelBuffer->setSingleStep(ui->blockSize->value()); + ui->parallelBuffer->setMaximum(ui->blockSize->value()*ULTRACOPIER_PLUGIN_MAX_PARALLEL_NUMBER_OF_BLOCK); + } + setParallelBuffer(parallelBuffer); + setSequentialBuffer(sequentialBuffer); +} + +void CopyEngine::setCheckDiskSpace(const bool &checkDiskSpace) +{ + this->checkDiskSpace=checkDiskSpace; + if(uiIsInstalled) + ui->checkDiskSpace->setChecked(checkDiskSpace); + listThread->setCheckDiskSpace(checkDiskSpace); +} + +void CopyEngine::setDefaultDestinationFolder(const std::string &defaultDestinationFolder) +{ + this->defaultDestinationFolder=defaultDestinationFolder; + if(uiIsInstalled) + ui->defaultDestinationFolder->setText(QString::fromStdString(defaultDestinationFolder)); +} + +void CopyEngine::setCopyListOrder(const bool &order) +{ + listThread->setCopyListOrder(order); +} + +void CopyEngine::exportErrorIntoTransferList() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"exportErrorIntoTransferList"); + std::string fileName = QFileDialog::getSaveFileName(interface,QString::fromStdString(facilityEngine->translateText("Save transfer list")),QStringLiteral("transfer-list.lst"),QString::fromStdString(facilityEngine->translateText("Transfer list"))+QStringLiteral(" (*.lst)")).toStdString(); + if(fileName.empty()) + return; + emit signal_exportErrorIntoTransferList(fileName); +} diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.h new file mode 100755 index 0000000..7b0ce36 --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.h @@ -0,0 +1,386 @@ +/** \file copyEngine.h +\brief Define the copy engine +\author alpha_one_x86 +\licence GPL3, see the file COPYING */ + +#include <QWidget> +#include <QObject> +#include <QList> +#include <vector> +#include <string> +#include <QFileInfo> +#include <QFile> +#include <QFileDialog> +#include <QMessageBox> + +#include "../../../interface/PluginInterface_CopyEngine.h" +#include "FileErrorDialog.h" +#include "FileExistsDialog.h" +#include "FolderExistsDialog.h" +#include "FileIsSameDialog.h" +#include "ui_copyEngineOptions.h" +#include "Environment.h" +#include "ListThread.h" +#include "Filters.h" +#include "RenamingRules.h" + +#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW +#include "DebugDialog.h" +#include <QTimer> +#endif + +#ifndef COPY_ENGINE_H +#define COPY_ENGINE_H + +namespace Ui { + class copyEngineOptions; +} + +/// \brief the implementation of copy engine plugin, manage directly few stuff, else pass to ListThread class. +class CopyEngine : public PluginInterface_CopyEngine +{ + Q_OBJECT +public: + CopyEngine(FacilityInterface * facilityEngine); + ~CopyEngine(); + void connectTheSignalsSlots(); +private: + ListThread * listThread; + #ifdef ULTRACOPIER_PLUGIN_DEBUG + #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW + DebugDialog debugDialogWindow; + #endif + #endif + QWidget * tempWidget; + Ui::copyEngineOptions * ui; + bool uiIsInstalled; + QWidget * interface; + Filters * filters; + RenamingRules * renamingRules; + FacilityInterface * facilityEngine; + uint32_t maxSpeed; + bool doRightTransfer; + bool keepDate; + int blockSize; + int parallelBuffer; + int sequentialBuffer; + int parallelizeIfSmallerThan; + bool followTheStrictOrder; + bool deletePartiallyTransferredFiles; + int inodeThreads; + bool renameTheOriginalDestination; + bool moveTheWholeFolder; + bool autoStart; + #ifdef ULTRACOPIER_PLUGIN_RSYNC + bool rsync; + #endif + bool checkDestinationFolderExists; + FileExistsAction alwaysDoThisActionForFileExists; + FileErrorAction alwaysDoThisActionForFileError; + FileErrorAction alwaysDoThisActionForFolderError; + FolderExistsAction alwaysDoThisActionForFolderExists; + TransferAlgorithm transferAlgorithm; + bool dialogIsOpen; + volatile bool stopIt; + std::string defaultDestinationFolder; + /// \brief error queue + struct errorQueueItem + { + TransferThread * transfer; ///< NULL if send by scan thread + ScanFileOrFolder * scan; ///< NULL if send by transfer thread + bool mkPath; + bool rmPath; + QFileInfo inode; + std::string errorString; + ErrorType errorType; + }; + std::vector<errorQueueItem> errorQueue; + /// \brief already exists queue + struct alreadyExistsQueueItem + { + TransferThread * transfer; ///< NULL if send by scan thread + ScanFileOrFolder * scan; ///< NULL if send by transfer thread + QFileInfo source; + QFileInfo destination; + bool isSame; + }; + std::vector<alreadyExistsQueueItem> alreadyExistsQueue; + uint64_t size_for_speed;//because direct access to list thread into the main thread can't be do + Ultracopier::CopyMode mode; + bool forcedMode; + + bool doChecksum; + bool checksumIgnoreIfImpossible; + bool checksumOnlyOnError; + bool osBuffer; + bool osBufferLimited; + bool checkDiskSpace; + unsigned int osBufferLimit; + std::vector<std::string> includeStrings,includeOptions,excludeStrings,excludeOptions; + std::string firstRenamingRule; + std::string otherRenamingRule; + + //send action done timer + QTimer timerActionDone; + //send progression timer + QTimer timerProgression; + + QTimer timerUpdateMount; + int putAtBottom;//to keep how many automatic put at bottom have been used +private slots: + #ifdef ULTRACOPIER_PLUGIN_DEBUG + #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW + void updateTheDebugInfo(const std::vector<std::string> &newList, const std::vector<std::string> &newList2, const int &numberOfInodeOperation); + #endif + #endif + + /************* External call ********************/ + //dialog message + /// \note Can be call without queue because all call will be serialized + void fileAlreadyExistsSlot(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread); + /// \note Can be call without queue because all call will be serialized + void errorOnFileSlot(QFileInfo fileInfo, std::string errorString, TransferThread * thread, const ErrorType &errorType); + /// \note Can be call without queue because all call will be serialized + void folderAlreadyExistsSlot(QFileInfo source,QFileInfo destination,bool isSame,ScanFileOrFolder * thread); + /// \note Can be call without queue because all call will be serialized + void errorOnFolderSlot(QFileInfo fileInfo, std::string errorString, ScanFileOrFolder * thread, ErrorType errorType); + //mkpath event + void mkPathErrorOnFolderSlot(QFileInfo, std::string, ErrorType errorType); + + //dialog message + /// \note Can be call without queue because all call will be serialized + void fileAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread,bool isCalledByShowOneNewDialog=false); + /// \note Can be call without queue because all call will be serialized + void errorOnFile(QFileInfo fileInfo, std::string errorString, TransferThread * thread, const ErrorType &errorType, bool isCalledByShowOneNewDialog=false); + /// \note Can be call without queue because all call will be serialized + void folderAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,ScanFileOrFolder * thread,bool isCalledByShowOneNewDialog=false); + /// \note Can be call without queue because all call will be serialized + void errorOnFolder(QFileInfo fileInfo, std::string errorString, ScanFileOrFolder * thread, ErrorType errorType, bool isCalledByShowOneNewDialog=false); + //mkpath event + void mkPathErrorOnFolder(QFileInfo, std::string, const ErrorType &errorType, bool isCalledByShowOneNewDialog=false); + + //show one new dialog if needed + void showOneNewDialog(); + void sendNewFilters(); + + void doChecksum_toggled(bool); + void checksumOnlyOnError_toggled(bool); + void checksumIgnoreIfImpossible_toggled(bool); + void osBuffer_toggled(bool); + void osBufferLimited_toggled(bool); + void osBufferLimit_editingFinished(); + void showFilterDialog(); + void sendNewRenamingRules(std::string firstRenamingRule,std::string otherRenamingRule); + void showRenamingRules(); + void get_realBytesTransfered(quint64 realBytesTransfered); + void newActionInProgess(Ultracopier::EngineActionInProgress); + void updatedBlockSize(); + void updateBufferCheckbox(); + void haveNeedPutAtBottom(bool needPutAtBottom, const QFileInfo &fileInfo, const std::string &errorString, TransferThread *thread, const ErrorType &errorType); + void missingDiskSpace(std::vector<Diskspace> list); + void exportErrorIntoTransferList(); +public: + /** \brief to send the options panel + * \return return false if have not the options + * \param tempWidget the widget to generate on it the options */ + bool getOptionsEngine(QWidget * tempWidget); + /** \brief to have interface widget to do modal dialog + * \param interface to have the widget of the interface, useful for modal dialog */ + void setInterfacePointer(QWidget * interface); + //return empty if multiple + /** \brief compare the current sources of the copy, with the passed arguments + * \param sources the sources list to compares with the current sources list + * \return true if have same sources, else false (or empty) */ + bool haveSameSource(const std::vector<std::string> &sources); + /** \brief compare the current destination of the copy, with the passed arguments + * \param destination the destination to compares with the current destination + * \return true if have same destination, else false (or empty) */ + bool haveSameDestination(const std::string &destination); + //external soft like file browser have send copy/move list to do + /** \brief send copy without destination, ask the destination + * \param sources the sources list to copy + * \return true if the copy have been accepted */ + bool newCopy(const std::vector<std::string> &sources); + /** \brief send copy with destination + * \param sources the sources list to copy + * \param destination the destination to copy + * \return true if the copy have been accepted */ + bool newCopy(const std::vector<std::string> &sources,const std::string &destination); + /** \brief send move without destination, ask the destination + * \param sources the sources list to move + * \return true if the move have been accepted */ + bool newMove(const std::vector<std::string> &sources); + /** \brief send move without destination, ask the destination + * \param sources the sources list to move + * \param destination the destination to move + * \return true if the move have been accepted */ + bool newMove(const std::vector<std::string> &sources,const std::string &destination); + /** \brief send the new transfer list + * \param file the transfer list */ + void newTransferList(const std::string &file); + + /** \brief to get byte read, use by Ultracopier for the speed calculation + * real size transfered to right speed calculation */ + uint64_t realByteTransfered(); + /** \brief support speed limitation */ + bool supportSpeedLimitation() const; + + /** \brief to set drives detected + * specific to this copy engine */ + + /** \brief to sync the transfer list + * Used when the interface is changed, useful to minimize the memory size */ + void syncTransferList(); + + void set_doChecksum(bool doChecksum); + void set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible); + void set_checksumOnlyOnError(bool checksumOnlyOnError); + void set_osBuffer(bool osBuffer); + void set_osBufferLimited(bool osBufferLimited); + void set_osBufferLimit(unsigned int osBufferLimit); + void set_setFilters(std::vector<std::string> includeStrings,std::vector<std::string> includeOptions,std::vector<std::string> excludeStrings,std::vector<std::string> excludeOptions); + void setRenamingRules(std::string firstRenamingRule,std::string otherRenamingRule); + #ifdef ULTRACOPIER_PLUGIN_RSYNC + void setRsync(const bool rsync); + #endif + void setCheckDiskSpace(const bool &checkDiskSpace); + void setDefaultDestinationFolder(const std::string &defaultDestinationFolder); + void setCopyListOrder(const bool &order); + void defaultDestinationFolderBrowse(); + std::string askDestination(); +public slots: + //user ask ask to add folder (add it with interface ask source/destination) + /** \brief add folder called on the interface + * Used by manual adding */ + bool userAddFolder(const Ultracopier::CopyMode &mode); + /** \brief add file called on the interface + * Used by manual adding */ + bool userAddFile(const Ultracopier::CopyMode &mode); + //action on the copy + /// \brief put the transfer in pause + void pause(); + /// \brief resume the transfer + void resume(); + /** \brief skip one transfer entry + * \param id id of the file to remove */ + void skip(const uint64_t &id); + /// \brief cancel all the transfer + void cancel(); + //edit the transfer list + /** \brief remove the selected item + * \param ids ids is the id list of the selected items */ + void removeItems(const std::vector<uint64_t> &ids); + /** \brief move on top of the list the selected item + * \param ids ids is the id list of the selected items */ + void moveItemsOnTop(const std::vector<uint64_t> &ids); + /** \brief move up the list the selected item + * \param ids ids is the id list of the selected items */ + void moveItemsUp(const std::vector<uint64_t> &ids); + /** \brief move down the list the selected item + * \param ids ids is the id list of the selected items */ + void moveItemsDown(const std::vector<uint64_t> &ids); + /** \brief move on bottom of the list the selected item + * \param ids ids is the id list of the selected items */ + void moveItemsOnBottom(const std::vector<uint64_t> &ids); + + /** \brief give the forced mode, to export/import transfer list */ + void forceMode(const Ultracopier::CopyMode &mode); + /// \brief export the transfer list into a file + void exportTransferList(); + /// \brief import the transfer list into a file + void importTransferList(); + + /** \brief to set the speed limitation + * -1 if not able, 0 if disabled */ + bool setSpeedLimitation(const int64_t &speedLimitation); + + // specific to this copy engine + + /// \brief set if the rights shoul be keep + void setRightTransfer(const bool doRightTransfer); + /// \brief set keep date + void setKeepDate(const bool keepDate); + /// \brief set block size in KB + void setBlockSize(const int blockSize); + + void setParallelBuffer(int parallelBuffer); + void setSequentialBuffer(int sequentialBuffer); + void setParallelizeIfSmallerThan(int parallelizeIfSmallerThan); + void setMoveTheWholeFolder(const bool &moveTheWholeFolder); + void setFollowTheStrictOrder(const bool &followTheStrictOrder); + void setDeletePartiallyTransferredFiles(const bool &deletePartiallyTransferredFiles); + void setInodeThreads(const int &inodeThreads); + void setRenameTheOriginalDestination(const bool &renameTheOriginalDestination); + void inodeThreadsFinished(); + + /// \brief set auto start + void setAutoStart(const bool autoStart); + /// \brief set if need check if the destination folder exists + void setCheckDestinationFolderExists(const bool checkDestinationFolderExists); + /// \brief reset widget + void resetTempWidget(); + //autoconnect + void setFolderCollision(int index); + void setFolderError(int index); + void setFileCollision(int index); + void setFileError(int index); + void setTransferAlgorithm(int index); + /// \brief need retranslate the insterface + void newLanguageLoaded(); +private slots: + void setComboBoxFolderCollision(FolderExistsAction action,bool changeComboBox=true); + void setComboBoxFolderError(FileErrorAction action,bool changeComboBox=true); + void warningTransferList(const std::string &warning); + void errorTransferList(const std::string &error); +signals: + //action on the copy + void signal_pause() const; + void signal_resume() const; + void signal_skip(const uint64_t &id) const; + + //edit the transfer list + void signal_removeItems(const std::vector<uint64_t> &ids) const; + void signal_moveItemsOnTop(const std::vector<uint64_t> &ids) const; + void signal_moveItemsUp(const std::vector<uint64_t> &ids) const; + void signal_moveItemsDown(const std::vector<uint64_t> &ids) const; + void signal_moveItemsOnBottom(const std::vector<uint64_t> &ids) const; + + void signal_forceMode(const Ultracopier::CopyMode &mode) const; + void signal_exportTransferList(const std::string &fileName) const; + void signal_importTransferList(const std::string &fileName) const; + void signal_exportErrorIntoTransferList(const std::string &fileName) const; + + //action + void signal_setTransferAlgorithm(TransferAlgorithm transferAlgorithm) const; + void signal_setCollisionAction(FileExistsAction alwaysDoThisActionForFileExists) const; + void signal_setComboBoxFolderCollision(FolderExistsAction action) const; + void signal_setFolderCollision(FolderExistsAction action) const; + + //internal cancel + void tryCancel() const; + void getNeedPutAtBottom(const QFileInfo &fileInfo,const std::string &errorString,TransferThread * thread,const ErrorType &errorType) const; + + #ifdef ULTRACOPIER_PLUGIN_DEBUG + /// \brief To debug source + void debugInformation(const Ultracopier::DebugLevel &level,std::string fonction,std::string text,std::string file,int ligne) const; + #endif + + //other signals + void queryOneNewDialog() const; + + void send_speedLimitation(const uint64_t &speedLimitation) const; + void send_blockSize(const int &blockSize) const; + void send_osBufferLimit(const unsigned int &osBufferLimit) const; + void send_setFilters(const std::vector<Filters_rules> &include,const std::vector<Filters_rules> &exclude) const; + void send_sendNewRenamingRules(std::string firstRenamingRule,std::string otherRenamingRule) const; + void send_parallelBuffer(const int ¶llelBuffer) const; + void send_sequentialBuffer(const int &sequentialBuffer) const; + void send_parallelizeIfSmallerThan(const int ¶llelizeIfSmallerThan) const; + void send_followTheStrictOrder(const bool &followTheStrictOrder) const; + void send_deletePartiallyTransferredFiles(const bool &deletePartiallyTransferredFiles) const; + void send_setInodeThreads(const int &inodeThreads) const; + void send_moveTheWholeFolder(const bool &moveTheWholeFolder) const; + void send_setRenameTheOriginalDestination(const bool &renameTheOriginalDestination) const; +}; + +#endif // COPY_ENGINE_H diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.pro b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.pro new file mode 100755 index 0000000..a529e1f --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.pro @@ -0,0 +1,106 @@ +CONFIG += c++11 +QMAKE_CXXFLAGS+="-std=c++0x -Wall -Wextra" +mac:QMAKE_CXXFLAGS+="-stdlib=libc++" + +QT += widgets xml +DEFINES += UNICODE _UNICODE +TEMPLATE = lib +CONFIG += plugin +win32 { + LIBS += -ladvapi32 +} + +HEADERS = \ + $$PWD/StructEnumDefinition.h \ + $$PWD/StructEnumDefinition_CopyEngine.h \ + $$PWD/DebugEngineMacro.h \ + $$PWD/CopyEngineUltracopierVariable.h \ + $$PWD/TransferThread.h \ + $$PWD/ReadThread.h \ + $$PWD/WriteThread.h \ + $$PWD/MkPath.h \ + $$PWD/AvancedQFile.h \ + $$PWD/ListThread.h \ + $$PWD/../../../interface/PluginInterface_CopyEngine.h \ + $$PWD/../../../interface/OptionInterface.h \ + $$PWD/../../../interface/FacilityInterface.h \ + $$PWD/../../../cpp11addition.h \ + $$PWD/Filters.h \ + $$PWD/FilterRules.h \ + $$PWD/RenamingRules.h \ + $$PWD/DriveManagement.h \ + $$PWD/CopyEngine.h \ + $$PWD/DebugDialog.h \ + $$PWD/CopyEngineFactory.h \ + $$PWD/FileErrorDialog.h \ + $$PWD/FileExistsDialog.h \ + $$PWD/FileIsSameDialog.h \ + $$PWD/FolderExistsDialog.h \ + $$PWD/ScanFileOrFolder.h \ + $$PWD/DiskSpace.h +SOURCES = \ + $$PWD/TransferThread.cpp \ + $$PWD/ReadThread.cpp \ + $$PWD/WriteThread.cpp \ + $$PWD/MkPath.cpp \ + $$PWD/AvancedQFile.cpp \ + $$PWD/ListThread.cpp \ + $$PWD/../../../cpp11addition.cpp \ + $$PWD/../../../cpp11additionstringtointcpp.cpp \ + $$PWD/Filters.cpp \ + $$PWD/FilterRules.cpp \ + $$PWD/RenamingRules.cpp \ + $$PWD/ListThread_InodeAction.cpp \ + $$PWD/DriveManagement.cpp \ + $$PWD/CopyEngine-collision-and-error.cpp \ + $$PWD/CopyEngine.cpp \ + $$PWD/DebugDialog.cpp \ + $$PWD/CopyEngineFactory.cpp \ + $$PWD/FileErrorDialog.cpp \ + $$PWD/FileExistsDialog.cpp \ + $$PWD/FileIsSameDialog.cpp \ + $$PWD/FolderExistsDialog.cpp \ + $$PWD/ScanFileOrFolder.cpp \ + $$PWD/DiskSpace.cpp +TARGET = $$qtLibraryTarget(copyEngine) +TRANSLATIONS += \ + $$PWD/Languages/ar/translation.ts \ + $$PWD/Languages/de/translation.ts \ + $$PWD/Languages/el/translation.ts \ + $$PWD/Languages/en/translation.ts \ + $$PWD/Languages/es/translation.ts \ + $$PWD/Languages/fr/translation.ts \ + $$PWD/Languages/hi/translation.ts \ + $$PWD/Languages/hu/translation.ts \ + $$PWD/Languages/id/translation.ts \ + $$PWD/Languages/it/translation.ts \ + $$PWD/Languages/ja/translation.ts \ + $$PWD/Languages/ko/translation.ts \ + $$PWD/Languages/nl/translation.ts \ + $$PWD/Languages/no/translation.ts \ + $$PWD/Languages/pl/translation.ts \ + $$PWD/Languages/pt/translation.ts \ + $$PWD/Languages/ru/translation.ts \ + $$PWD/Languages/th/translation.ts \ + $$PWD/Languages/tr/translation.ts \ + $$PWD/Languages/zh/translation.ts + +FORMS += \ + $$PWD/fileErrorDialog.ui \ + $$PWD/fileExistsDialog.ui \ + $$PWD/fileIsSameDialog.ui \ + $$PWD/debugDialog.ui \ + $$PWD/folderExistsDialog.ui \ + $$PWD/Filters.ui \ + $$PWD/FilterRules.ui \ + $$PWD/RenamingRules.ui \ + $$PWD/copyEngineOptions.ui \ + $$PWD/DiskSpace.ui + +OTHER_FILES += \ + $$PWD/informations.xml + +!CONFIG(static) { +RESOURCES += \ + $$PWD/copyEngineResources.qrc +} diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.pro.user.4.8-pre1 b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.pro.user.4.8-pre1 new file mode 100755 index 0000000..4ed3507 --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngine.pro.user.4.8-pre1 @@ -0,0 +1,288 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE QtCreatorProject> +<!-- Written by QtCreator 4.6.2, 2019-07-02T23:09:58. --> +<qtcreator> + <data> + <variable>EnvironmentId</variable> + <value type="QByteArray">{74ab603f-f657-4135-92cf-c93af71b2f91}</value> + </data> + <data> + <variable>ProjectExplorer.Project.ActiveTarget</variable> + <value type="int">0</value> + </data> + <data> + <variable>ProjectExplorer.Project.EditorSettings</variable> + <valuemap type="QVariantMap"> + <value type="bool" key="EditorConfiguration.AutoIndent">true</value> + <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value> + <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value> + <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0"> + <value type="QString" key="language">Cpp</value> + <valuemap type="QVariantMap" key="value"> + <value type="QByteArray" key="CurrentPreferences">CppGlobal</value> + </valuemap> + </valuemap> + <value type="int" key="EditorConfiguration.CodeStyle.Count">1</value> + <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value> + <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value> + <value type="int" key="EditorConfiguration.IndentSize">4</value> + <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value> + <value type="int" key="EditorConfiguration.MarginColumn">80</value> + <value type="bool" key="EditorConfiguration.MouseHiding">true</value> + <value type="bool" key="EditorConfiguration.MouseNavigation">true</value> + <value type="int" key="EditorConfiguration.PaddingMode">1</value> + <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value> + <value type="bool" key="EditorConfiguration.ShowMargin">false</value> + <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value> + <value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value> + <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value> + <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value> + <value type="int" key="EditorConfiguration.TabSize">8</value> + <value type="bool" key="EditorConfiguration.UseGlobal">true</value> + <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value> + <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value> + <value type="bool" key="EditorConfiguration.cleanIndentation">true</value> + <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value> + <value type="bool" key="EditorConfiguration.inEntireDocument">true</value> + </valuemap> + </data> + <data> + <variable>ProjectExplorer.Project.PluginSettings</variable> + <valuemap type="QVariantMap"/> + </data> + <data> + <variable>ProjectExplorer.Project.Target.0</variable> + <valuemap type="QVariantMap"> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{23178a1c-09be-4e9f-9aab-ff55e05e7637}</value> + <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value> + <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value> + <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value> + <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0"> + <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/user/Desktop/ultracopier/sources/plugins/CopyEngine/build-CopyEngine-Desktop-Debug</value> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value> + <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> + <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"> + <value type="QString">-w</value> + <value type="QString">-r</value> + </valuelist> + <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">-j4</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> + <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"> + <value type="QString">-w</value> + <value type="QString">-r</value> + </valuelist> + <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> + <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> + <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> + <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value> + <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1"> + <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/user/Desktop/ultracopier/sources/plugins/CopyEngine/build-CopyEngine-Desktop-Release</value> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value> + <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">true</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> + <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"> + <value type="QString">-w</value> + <value type="QString">-r</value> + </valuelist> + <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> + <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"> + <value type="QString">-w</value> + <value type="QString">-r</value> + </valuelist> + <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> + <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> + <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> + <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value> + <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2"> + <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/user/Desktop/ultracopier/sources/plugins/CopyEngine/build-CopyEngine-Desktop-Profile</value> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value> + <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value> + <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">true</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> + <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"> + <value type="QString">-w</value> + <value type="QString">-r</value> + </valuelist> + <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value> + </valuemap> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> + <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> + <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"> + <value type="QString">-w</value> + <value type="QString">-r</value> + </valuelist> + <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> + <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> + <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value> + <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value> + <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value> + <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value> + </valuemap> + <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value> + <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0"> + <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> + <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value> + </valuemap> + <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy Configuration</value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value> + </valuemap> + <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value> + <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/> + <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0"> + <value type="int" key="PE.EnvironmentAspect.Base">2</value> + <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/> + <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Arguments"></value> + <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value> + <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.WorkingDirectory"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> + <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value> + <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value> + <value type="bool" key="RunConfiguration.UseCppDebugger">false</value> + <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value> + <value type="bool" key="RunConfiguration.UseMultiProcess">false</value> + <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value> + <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value> + </valuemap> + <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value> + </valuemap> + </data> + <data> + <variable>ProjectExplorer.Project.TargetCount</variable> + <value type="int">1</value> + </data> + <data> + <variable>ProjectExplorer.Project.Updater.FileVersion</variable> + <value type="int">18</value> + </data> + <data> + <variable>Version</variable> + <value type="int">18</value> + </data> +</qtcreator> diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngineFactory.cpp b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngineFactory.cpp new file mode 100755 index 0000000..cb89371 --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngineFactory.cpp @@ -0,0 +1,715 @@ +/** \file factory.cpp +\brief Define the factory to create new instance +\author alpha_one_x86 */ + +#include <QFileDialog> +#include <QList> +#include <QDebug> +#include <cmath> +#include <QStorageInfo> + +#include "../../../cpp11addition.h" +#include "CopyEngineFactory.h" + +// The cmath header from MSVC does not contain round() +#if (defined(_WIN64) || defined(_WIN32)) && defined(_MSC_VER) +inline double round(double d) { + return floor( d + 0.5 ); +} +#endif + +CopyEngineFactory::CopyEngineFactory() : + ui(new Ui::copyEngineOptions()) +{ + qRegisterMetaType<FolderExistsAction>("FolderExistsAction"); + qRegisterMetaType<FileExistsAction>("FileExistsAction"); + qRegisterMetaType<QList<Filters_rules> >("QList<Filters_rules>"); + qRegisterMetaType<TransferStat>("TransferStat"); + qRegisterMetaType<QList<QByteArray> >("QList<QByteArray>"); + qRegisterMetaType<TransferAlgorithm>("TransferAlgorithm"); + qRegisterMetaType<ActionType>("ActionType"); + qRegisterMetaType<ErrorType>("ErrorType"); + qRegisterMetaType<Diskspace>("Diskspace"); + qRegisterMetaType<QList<Diskspace> >("QList<Diskspace>"); + qRegisterMetaType<QFileInfo>("QFileInfo"); + qRegisterMetaType<Ultracopier::CopyMode>("Ultracopier::CopyMode"); + qRegisterMetaType<std::vector<Filters_rules> >("std::vector<Filters_rules>"); + + tempWidget=new QWidget(); + ui->setupUi(tempWidget); + ui->toolBox->setCurrentIndex(0); + ui->blockSize->setMaximum(ULTRACOPIER_PLUGIN_MAX_BLOCK_SIZE); + errorFound=false; + optionsEngine=NULL; + filters=new Filters(tempWidget); + renamingRules=new RenamingRules(tempWidget); + + connect(ui->doRightTransfer, &QCheckBox::toggled, this,&CopyEngineFactory::setDoRightTransfer); + connect(ui->keepDate, &QCheckBox::toggled, this,&CopyEngineFactory::setKeepDate); + connect(ui->blockSize, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngineFactory::setBlockSize); + connect(ui->sequentialBuffer, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngineFactory::setSequentialBuffer); + connect(ui->parallelBuffer, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngineFactory::setParallelBuffer); + connect(ui->parallelizeIfSmallerThan, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngineFactory::setParallelizeIfSmallerThan); + connect(ui->inodeThreads, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,&CopyEngineFactory::on_inodeThreads_editingFinished); + connect(ui->autoStart, &QCheckBox::toggled, this,&CopyEngineFactory::setAutoStart); + connect(ui->doChecksum, &QCheckBox::toggled, this,&CopyEngineFactory::doChecksum_toggled); + connect(ui->comboBoxFolderError, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngineFactory::setFolderError); + connect(ui->comboBoxFolderCollision, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngineFactory::setFolderCollision); + connect(ui->comboBoxFileError, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngineFactory::setFileError); + connect(ui->comboBoxFileCollision, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngineFactory::setFileCollision); + connect(ui->transferAlgorithm, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,&CopyEngineFactory::setTransferAlgorithm); + connect(ui->checkBoxDestinationFolderExists, &QCheckBox::toggled, this,&CopyEngineFactory::setCheckDestinationFolder); + connect(ui->checksumIgnoreIfImpossible, &QCheckBox::toggled, this,&CopyEngineFactory::checksumIgnoreIfImpossible_toggled); + connect(ui->checksumOnlyOnError, &QCheckBox::toggled, this,&CopyEngineFactory::checksumOnlyOnError_toggled); + connect(ui->osBuffer, &QCheckBox::toggled, this,&CopyEngineFactory::osBuffer_toggled); + connect(ui->osBufferLimited, &QCheckBox::toggled, this,&CopyEngineFactory::osBufferLimited_toggled); + connect(ui->osBufferLimit, &QSpinBox::editingFinished, this,&CopyEngineFactory::osBufferLimit_editingFinished); + #ifdef ULTRACOPIER_PLUGIN_RSYNC + connect(ui->rsync, &QCheckBox::toggled, this,&CopyEngineFactory::setRsync); + #endif + connect(ui->inodeThreads, &QSpinBox::editingFinished, this,&CopyEngineFactory::on_inodeThreads_editingFinished); + connect(ui->osBufferLimited, &QAbstractButton::toggled, this,&CopyEngineFactory::updateBufferCheckbox); + connect(ui->osBuffer, &QAbstractButton::toggled, this,&CopyEngineFactory::updateBufferCheckbox); + connect(ui->moveTheWholeFolder, &QCheckBox::toggled, this,&CopyEngineFactory::moveTheWholeFolder); + connect(ui->followTheStrictOrder, &QCheckBox::toggled, this,&CopyEngineFactory::followTheStrictOrder); + connect(ui->deletePartiallyTransferredFiles,&QCheckBox::toggled, this,&CopyEngineFactory::deletePartiallyTransferredFiles); + connect(ui->renameTheOriginalDestination,&QCheckBox::toggled, this,&CopyEngineFactory::renameTheOriginalDestination); + connect(ui->checkDiskSpace, &QCheckBox::toggled, this,&CopyEngineFactory::checkDiskSpace); + connect(ui->defaultDestinationFolderBrowse,&QPushButton::clicked, this,&CopyEngineFactory::defaultDestinationFolderBrowse); + connect(ui->defaultDestinationFolder,&QLineEdit::editingFinished, this,&CopyEngineFactory::defaultDestinationFolder); + connect(ui->copyListOrder, &QCheckBox::toggled, this,&CopyEngineFactory::copyListOrder); + + connect(filters,&Filters::sendNewFilters,this,&CopyEngineFactory::sendNewFilters); + connect(ui->filters,&QPushButton::clicked,this,&CopyEngineFactory::showFilterDialog); + connect(renamingRules,&RenamingRules::sendNewRenamingRules,this,&CopyEngineFactory::sendNewRenamingRules); + connect(ui->renamingRules,&QPushButton::clicked,this,&CopyEngineFactory::showRenamingRules); + + lunchInitFunction.setInterval(0); + lunchInitFunction.setSingleShot(true); + connect(&lunchInitFunction,&QTimer::timeout,this,&CopyEngineFactory::init,Qt::QueuedConnection); + lunchInitFunction.start(); +} + +CopyEngineFactory::~CopyEngineFactory() +{ + delete renamingRules; + delete filters; + delete ui; +} + +void CopyEngineFactory::init() +{ +} + +PluginInterface_CopyEngine * CopyEngineFactory::getInstance() +{ + CopyEngine *realObject=new CopyEngine(facilityEngine); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + connect(realObject,&CopyEngine::debugInformation,this,&CopyEngineFactory::debugInformation); + #endif + realObject->connectTheSignalsSlots(); + PluginInterface_CopyEngine * newTransferEngine=realObject; + connect(this,&CopyEngineFactory::reloadLanguage,realObject,&CopyEngine::newLanguageLoaded); + realObject->setRightTransfer(ui->doRightTransfer->isChecked()); + realObject->setKeepDate(ui->keepDate->isChecked()); + realObject->setBlockSize(ui->blockSize->value()); + realObject->setAutoStart(ui->autoStart->isChecked()); + #ifdef ULTRACOPIER_PLUGIN_RSYNC + realObject->setRsync(ui->rsync->isChecked()); + #endif + realObject->setFolderCollision(ui->comboBoxFolderCollision->currentIndex()); + realObject->setFolderError(ui->comboBoxFolderError->currentIndex()); + realObject->setFileCollision(ui->comboBoxFileCollision->currentIndex()); + realObject->setFileError(ui->comboBoxFileError->currentIndex()); + realObject->setTransferAlgorithm(ui->transferAlgorithm->currentIndex()); + realObject->setCheckDestinationFolderExists(ui->checkBoxDestinationFolderExists->isChecked()); + realObject->set_doChecksum(ui->doChecksum->isChecked()); + realObject->set_checksumIgnoreIfImpossible(ui->checksumIgnoreIfImpossible->isChecked()); + realObject->set_checksumOnlyOnError(ui->checksumOnlyOnError->isChecked()); + realObject->set_osBuffer(ui->osBuffer->isChecked()); + realObject->set_osBufferLimited(ui->osBufferLimited->isChecked()); + realObject->set_osBufferLimit(ui->osBufferLimit->value()); + realObject->set_setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions); + realObject->setRenamingRules(firstRenamingRule,otherRenamingRule); + realObject->setSequentialBuffer(ui->sequentialBuffer->value()); + realObject->setParallelBuffer(ui->parallelBuffer->value()); + realObject->setParallelizeIfSmallerThan(ui->parallelizeIfSmallerThan->value()); + realObject->setMoveTheWholeFolder(ui->moveTheWholeFolder->isChecked()); + realObject->setFollowTheStrictOrder(ui->followTheStrictOrder->isChecked()); + realObject->setDeletePartiallyTransferredFiles(ui->deletePartiallyTransferredFiles->isChecked()); + realObject->setInodeThreads(ui->inodeThreads->value()); + realObject->setRenameTheOriginalDestination(ui->renameTheOriginalDestination->isChecked()); + realObject->setCheckDiskSpace(ui->checkDiskSpace->isChecked()); + realObject->setDefaultDestinationFolder(ui->defaultDestinationFolder->text().toStdString()); + realObject->setCopyListOrder(ui->copyListOrder->isChecked()); + return newTransferEngine; +} + +void CopyEngineFactory::setResources(OptionInterface * options,const std::string &writePath,const std::string &pluginPath, + FacilityInterface * facilityInterface,const bool &portableVersion) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start, writePath: "+writePath+", pluginPath:"+pluginPath); + this->facilityEngine=facilityInterface; + Q_UNUSED(portableVersion); + #ifndef ULTRACOPIER_PLUGIN_DEBUG + Q_UNUSED(writePath); + Q_UNUSED(pluginPath); + #endif + #if ! defined (Q_CC_GNU) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("Unable to change date time of files, only gcc is supported")); + #endif + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,COMPILERINFO); + #if defined (ULTRACOPIER_PLUGIN_CHECKLISTTYPE) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"CHECK LIST TYPE set"); + #else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"CHECK LIST TYPE not set"); + #endif + if(options!=NULL) + { + //load the options + std::vector<std::pair<std::string, std::string> > KeysList; + KeysList.push_back(std::pair<std::string, std::string>("doRightTransfer","true")); + #ifndef Q_OS_LINUX + KeysList.push_back(std::pair<std::string, std::string>("keepDate","false")); + #else + KeysList.push_back(std::pair<std::string, std::string>("keepDate","true")); + #endif + KeysList.push_back(std::pair<std::string, std::string>("blockSize",std::to_string(ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE))); + uint32_t sequentialBuffer=ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE*ULTRACOPIER_PLUGIN_DEFAULT_SEQUENTIAL_NUMBER_OF_BLOCK; + uint32_t parallelBuffer=ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE*ULTRACOPIER_PLUGIN_DEFAULT_PARALLEL_NUMBER_OF_BLOCK; + //to prevent swap and other bad effect, only under windows and unix for now + #if defined(Q_OS_WIN32) or (defined(Q_OS_LINUX) and defined(_SC_PHYS_PAGES)) + size_t max_memory=getTotalSystemMemory()/1024; + if(max_memory>0) + { + if(max_memory>2147483648) + max_memory=2147483648; + if(sequentialBuffer>(max_memory/10)) + sequentialBuffer=max_memory/10; + if(parallelBuffer>(max_memory/100)) + parallelBuffer=max_memory/100; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("detected memory: %1MB").arg(max_memory/1024).toStdString()); + #endif + KeysList.push_back(std::pair<std::string, std::string>("sequentialBuffer",std::to_string(sequentialBuffer))); + KeysList.push_back(std::pair<std::string, std::string>("parallelBuffer",std::to_string(parallelBuffer))); + KeysList.push_back(std::pair<std::string, std::string>("parallelizeIfSmallerThan",std::to_string(128)));//128KB, better for modern hardware: Multiple queue en linux, SSD, ... + KeysList.push_back(std::pair<std::string, std::string>("autoStart","true")); + #ifdef ULTRACOPIER_PLUGIN_RSYNC + KeysList.push_back(std::pair<std::string, std::string>("rsync","true")); + #endif + KeysList.push_back(std::pair<std::string, std::string>("folderError",std::to_string(0))); + KeysList.push_back(std::pair<std::string, std::string>("folderCollision",std::to_string(0))); + KeysList.push_back(std::pair<std::string, std::string>("fileError",std::to_string(2))); + KeysList.push_back(std::pair<std::string, std::string>("fileCollision",std::to_string(0))); + KeysList.push_back(std::pair<std::string, std::string>("transferAlgorithm",std::to_string(0))); + KeysList.push_back(std::pair<std::string, std::string>("checkDestinationFolder","true")); + KeysList.push_back(std::pair<std::string, std::string>("includeStrings","")); + KeysList.push_back(std::pair<std::string, std::string>("includeOptions","")); + KeysList.push_back(std::pair<std::string, std::string>("excludeStrings","")); + KeysList.push_back(std::pair<std::string, std::string>("excludeOptions","")); + KeysList.push_back(std::pair<std::string, std::string>("doChecksum","false")); + KeysList.push_back(std::pair<std::string, std::string>("checksumIgnoreIfImpossible","true")); + KeysList.push_back(std::pair<std::string, std::string>("checksumOnlyOnError","true")); + KeysList.push_back(std::pair<std::string, std::string>("osBuffer","false")); + KeysList.push_back(std::pair<std::string, std::string>("firstRenamingRule","")); + KeysList.push_back(std::pair<std::string, std::string>("otherRenamingRule","")); + KeysList.push_back(std::pair<std::string, std::string>("osBufferLimited","false")); + KeysList.push_back(std::pair<std::string, std::string>("osBufferLimit",std::to_string(512))); + KeysList.push_back(std::pair<std::string, std::string>("deletePartiallyTransferredFiles","true")); + KeysList.push_back(std::pair<std::string, std::string>("moveTheWholeFolder","true")); + KeysList.push_back(std::pair<std::string, std::string>("followTheStrictOrder","false")); + KeysList.push_back(std::pair<std::string, std::string>("renameTheOriginalDestination","false")); + KeysList.push_back(std::pair<std::string, std::string>("checkDiskSpace","true")); + KeysList.push_back(std::pair<std::string, std::string>("defaultDestinationFolder","")); + KeysList.push_back(std::pair<std::string, std::string>("inodeThreads",std::to_string(1))); + KeysList.push_back(std::pair<std::string, std::string>("copyListOrder","false")); + options->addOptionGroup(KeysList); + + optionsEngine=options; + resetOptions(); + + updateBufferCheckbox(); + + updatedBlockSize(); + } +} + +std::vector<std::string> CopyEngineFactory::supportedProtocolsForTheSource() const +{ + std::vector<std::string> l; + l.push_back("file"); + return l; +} + +std::vector<std::string> CopyEngineFactory::supportedProtocolsForTheDestination() const +{ + std::vector<std::string> l; + l.push_back("file"); + return l; +} + +Ultracopier::CopyType CopyEngineFactory::getCopyType() +{ + return Ultracopier::FileAndFolder; +} + +Ultracopier::TransferListOperation CopyEngineFactory::getTransferListOperation() +{ + return Ultracopier::TransferListOperation_ImportExport; +} + +bool CopyEngineFactory::canDoOnlyCopy() const +{ + return false; +} + +void CopyEngineFactory::resetOptions() +{ + auto options=optionsEngine; + optionsEngine=NULL; + #if ! defined (Q_CC_GNU) + ui->keepDate->setEnabled(false); + ui->keepDate->setToolTip(QStringLiteral("Not supported with this compiler")); + #endif + ui->doRightTransfer->setChecked(stringtobool(options->getOptionValue("doRightTransfer"))); + ui->keepDate->setChecked(stringtobool(options->getOptionValue("keepDate"))); + ui->blockSize->setValue(stringtouint32(options->getOptionValue("blockSize")));//keep before sequentialBuffer and parallelBuffer + ui->autoStart->setChecked(stringtobool(options->getOptionValue("autoStart"))); + #ifdef ULTRACOPIER_PLUGIN_RSYNC + ui->rsync->setChecked(stringtobool(options->getOptionValue("rsync"))); + #else + ui->label_rsync->setVisible(false); + ui->rsync->setVisible(false); + #endif + ui->comboBoxFolderError->setCurrentIndex(stringtouint32(options->getOptionValue("folderError"))); + ui->comboBoxFolderCollision->setCurrentIndex(stringtouint32(options->getOptionValue("folderCollision"))); + ui->comboBoxFileError->setCurrentIndex(stringtouint32(options->getOptionValue("fileError"))); + ui->comboBoxFileCollision->setCurrentIndex(stringtouint32(options->getOptionValue("fileCollision"))); + ui->transferAlgorithm->setCurrentIndex(stringtouint32(options->getOptionValue("transferAlgorithm"))); + ui->checkBoxDestinationFolderExists->setChecked(stringtobool(options->getOptionValue("checkDestinationFolder"))); + ui->parallelizeIfSmallerThan->setValue(stringtouint32(options->getOptionValue("parallelizeIfSmallerThan"))); + ui->sequentialBuffer->setValue(stringtouint32(options->getOptionValue("sequentialBuffer"))); + ui->parallelBuffer->setValue(stringtouint32(options->getOptionValue("parallelBuffer"))); + ui->sequentialBuffer->setSingleStep(ui->blockSize->value()); + ui->parallelBuffer->setSingleStep(ui->blockSize->value()); + ui->deletePartiallyTransferredFiles->setChecked(stringtobool(options->getOptionValue("deletePartiallyTransferredFiles"))); + ui->moveTheWholeFolder->setChecked(stringtobool(options->getOptionValue("moveTheWholeFolder"))); + ui->followTheStrictOrder->setChecked(stringtobool(options->getOptionValue("followTheStrictOrder"))); + ui->inodeThreads->setValue(stringtouint32(options->getOptionValue("inodeThreads"))); + ui->renameTheOriginalDestination->setChecked(stringtobool(options->getOptionValue("renameTheOriginalDestination"))); + ui->checkDiskSpace->setChecked(stringtobool(options->getOptionValue("checkDiskSpace"))); + ui->defaultDestinationFolder->setText(QString::fromStdString(options->getOptionValue("defaultDestinationFolder"))); + + ui->doChecksum->setChecked(stringtobool(options->getOptionValue("doChecksum"))); + ui->checksumIgnoreIfImpossible->setChecked(stringtobool(options->getOptionValue("checksumIgnoreIfImpossible"))); + ui->checksumOnlyOnError->setChecked(stringtobool(options->getOptionValue("checksumOnlyOnError"))); + + ui->osBuffer->setChecked(stringtobool(options->getOptionValue("osBuffer"))); + ui->osBufferLimited->setChecked(stringtobool(options->getOptionValue("osBufferLimited"))); + ui->osBufferLimit->setValue(stringtouint32(options->getOptionValue("osBufferLimit"))); + //ui->autoStart->setChecked(options->getOptionValue("autoStart").toBool());//moved from options(), wrong previous place + includeStrings=stringtostringlist(options->getOptionValue("includeStrings")); + includeOptions=stringtostringlist(options->getOptionValue("includeOptions")); + excludeStrings=stringtostringlist(options->getOptionValue("excludeStrings")); + excludeOptions=stringtostringlist(options->getOptionValue("excludeOptions")); + filters->setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions); + firstRenamingRule=options->getOptionValue("firstRenamingRule"); + otherRenamingRule=options->getOptionValue("otherRenamingRule"); + renamingRules->setRenamingRules(firstRenamingRule,otherRenamingRule); + + ui->checksumOnlyOnError->setEnabled(ui->doChecksum->isChecked()); + ui->checksumIgnoreIfImpossible->setEnabled(ui->doChecksum->isChecked()); + ui->copyListOrder->setChecked(stringtobool(options->getOptionValue("copyListOrder"))); + + optionsEngine=options; +} + +QWidget * CopyEngineFactory::options() +{ + return tempWidget; +} + +/// \brief to get if have pause +bool CopyEngineFactory::havePause() +{ + return true; +} + +void CopyEngineFactory::setDoRightTransfer(bool doRightTransfer) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue("doRightTransfer",booltostring(doRightTransfer)); +} + +void CopyEngineFactory::setKeepDate(bool keepDate) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue("keepDate",booltostring(keepDate)); +} + +void CopyEngineFactory::setBlockSize(int blockSize) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue("blockSize",std::to_string(blockSize)); + updatedBlockSize(); +} + +void CopyEngineFactory::setParallelBuffer(int parallelBuffer) +{ + if(optionsEngine!=NULL) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + parallelBuffer=round((float)parallelBuffer/(float)ui->blockSize->value())*ui->blockSize->value(); + ui->parallelBuffer->setValue(parallelBuffer); + optionsEngine->setOptionValue("parallelBuffer",std::to_string(parallelBuffer)); + } +} + +void CopyEngineFactory::setSequentialBuffer(int sequentialBuffer) +{ + if(optionsEngine!=NULL) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + sequentialBuffer=round((float)sequentialBuffer/(float)ui->blockSize->value())*ui->blockSize->value(); + ui->sequentialBuffer->setValue(sequentialBuffer); + optionsEngine->setOptionValue("sequentialBuffer",std::to_string(sequentialBuffer)); + } +} + +void CopyEngineFactory::setParallelizeIfSmallerThan(int parallelizeIfSmallerThan) +{ + if(optionsEngine!=NULL) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + optionsEngine->setOptionValue("parallelizeIfSmallerThan",std::to_string(parallelizeIfSmallerThan)); + } +} + +void CopyEngineFactory::setAutoStart(bool autoStart) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue("autoStart",booltostring(autoStart)); +} + +void CopyEngineFactory::setFolderCollision(int index) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue("folderCollision",std::to_string(index)); +} + +void CopyEngineFactory::setFolderError(int index) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue("folderError",std::to_string(index)); +} + +void CopyEngineFactory::setTransferAlgorithm(int index) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue("transferAlgorithm",std::to_string(index)); +} + +void CopyEngineFactory::setCheckDestinationFolder() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue("checkDestinationFolder",booltostring(ui->checkBoxDestinationFolderExists->isChecked())); +} + +void CopyEngineFactory::newLanguageLoaded() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start, retranslate the widget options"); + OptionInterface * optionsEngine=this->optionsEngine; + this->optionsEngine=NULL; + ui->retranslateUi(tempWidget); + ui->comboBoxFolderError->setItemText(0,tr("Ask")); + ui->comboBoxFolderError->setItemText(1,tr("Skip")); + + ui->comboBoxFolderCollision->setItemText(0,tr("Ask")); + ui->comboBoxFolderCollision->setItemText(1,tr("Merge")); + ui->comboBoxFolderCollision->setItemText(2,tr("Skip")); + ui->comboBoxFolderCollision->setItemText(3,tr("Rename")); + + ui->comboBoxFileError->setItemText(0,tr("Ask")); + ui->comboBoxFileError->setItemText(1,tr("Skip")); + ui->comboBoxFileError->setItemText(2,tr("Put at the end")); + + ui->comboBoxFileCollision->setItemText(0,tr("Ask")); + ui->comboBoxFileCollision->setItemText(1,tr("Skip")); + ui->comboBoxFileCollision->setItemText(2,tr("Overwrite")); + ui->comboBoxFileCollision->setItemText(3,tr("Overwrite if different")); + ui->comboBoxFileCollision->setItemText(4,tr("Overwrite if newer")); + ui->comboBoxFileCollision->setItemText(5,tr("Overwrite if older")); + ui->comboBoxFileCollision->setItemText(6,tr("Rename")); + + ui->transferAlgorithm->setItemText(0,tr("Automatic")); + ui->transferAlgorithm->setItemText(1,tr("Sequential")); + ui->transferAlgorithm->setItemText(2,tr("Parallel")); + if(optionsEngine!=NULL) + { + filters->newLanguageLoaded(); + renamingRules->newLanguageLoaded(); + } + emit reloadLanguage(); + this->optionsEngine=optionsEngine; +} + +void CopyEngineFactory::doChecksum_toggled(bool doChecksum) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue("doChecksum",booltostring(doChecksum)); +} + +void CopyEngineFactory::checksumOnlyOnError_toggled(bool checksumOnlyOnError) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue("checksumOnlyOnError",booltostring(checksumOnlyOnError)); +} + +void CopyEngineFactory::osBuffer_toggled(bool osBuffer) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue("osBuffer",booltostring(osBuffer)); + ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked()); +} + +void CopyEngineFactory::osBufferLimited_toggled(bool osBufferLimited) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue("osBufferLimited",booltostring(osBufferLimited)); + ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked()); +} + +void CopyEngineFactory::osBufferLimit_editingFinished() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the spinbox have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue("osBufferLimit",std::to_string(ui->osBufferLimit->value())); +} + +void CopyEngineFactory::showFilterDialog() +{ + if(optionsEngine==NULL) + { + QMessageBox::critical(NULL,tr("Options error"),tr("Options engine is not loaded. Unable to access the filters")); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"options not loaded"); + return; + } + filters->exec(); +} + +void CopyEngineFactory::sendNewFilters(const std::vector<std::string> &includeStrings,const std::vector<std::string> &includeOptions,const std::vector<std::string> &excludeStrings,const std::vector<std::string> &excludeOptions) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"new filter"); + this->includeStrings=includeStrings; + this->includeOptions=includeOptions; + this->excludeStrings=excludeStrings; + this->excludeOptions=excludeOptions; + if(optionsEngine!=NULL) + { + optionsEngine->setOptionValue("includeStrings",stringlisttostring(includeStrings)); + optionsEngine->setOptionValue("includeOptions",stringlisttostring(includeOptions)); + optionsEngine->setOptionValue("excludeStrings",stringlisttostring(excludeStrings)); + optionsEngine->setOptionValue("excludeOptions",stringlisttostring(excludeOptions)); + } +} + +void CopyEngineFactory::sendNewRenamingRules(const std::string &firstRenamingRule,const std::string &otherRenamingRule) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"new filter"); + this->firstRenamingRule=firstRenamingRule; + this->otherRenamingRule=otherRenamingRule; + if(optionsEngine!=NULL) + { + optionsEngine->setOptionValue("firstRenamingRule",firstRenamingRule); + optionsEngine->setOptionValue("otherRenamingRule",otherRenamingRule); + } +} + +void CopyEngineFactory::showRenamingRules() +{ + if(optionsEngine==NULL) + { + QMessageBox::critical(NULL,tr("Options error"),tr("Options engine is not loaded, can't access to the filters")); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"options not loaded"); + return; + } + renamingRules->exec(); +} + +void CopyEngineFactory::updateBufferCheckbox() +{ + ui->osBufferLimited->setEnabled(ui->osBuffer->isChecked()); + ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked()); +} + +void CopyEngineFactory::checksumIgnoreIfImpossible_toggled(bool checksumIgnoreIfImpossible) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue("checksumIgnoreIfImpossible",booltostring(checksumIgnoreIfImpossible)); +} + +void CopyEngineFactory::setFileCollision(int index) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"action index: "+std::to_string(index)); + if(optionsEngine==NULL) + return; + switch(index) + { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + optionsEngine->setOptionValue("fileCollision",std::to_string(index)); + break; + default: + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored"); + break; + } +} + +void CopyEngineFactory::setFileError(int index) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"action index: "+std::to_string(index)); + if(optionsEngine==NULL) + return; + switch(index) + { + case 0: + case 1: + case 2: + optionsEngine->setOptionValue("fileError",std::to_string(index)); + break; + default: + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored"); + break; + } +} + +void CopyEngineFactory::updatedBlockSize() +{ + ui->sequentialBuffer->setMinimum(ui->blockSize->value()); + ui->sequentialBuffer->setSingleStep(ui->blockSize->value()); + ui->sequentialBuffer->setMaximum(ui->blockSize->value()*ULTRACOPIER_PLUGIN_MAX_SEQUENTIAL_NUMBER_OF_BLOCK); + ui->parallelBuffer->setMinimum(ui->blockSize->value()); + ui->parallelBuffer->setSingleStep(ui->blockSize->value()); + ui->parallelBuffer->setMaximum(ui->blockSize->value()*ULTRACOPIER_PLUGIN_MAX_PARALLEL_NUMBER_OF_BLOCK); + setParallelBuffer(ui->parallelBuffer->value()); + setSequentialBuffer(ui->sequentialBuffer->value()); +} + +void CopyEngineFactory::deletePartiallyTransferredFiles(bool checked) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue("deletePartiallyTransferredFiles",booltostring(checked)); +} + +void CopyEngineFactory::renameTheOriginalDestination(bool checked) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue("renameTheOriginalDestination",booltostring(checked)); +} + +void CopyEngineFactory::checkDiskSpace(bool checked) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue("checkDiskSpace",booltostring(checked)); +} + +void CopyEngineFactory::defaultDestinationFolderBrowse() +{ + QString destination = QFileDialog::getExistingDirectory(ui->defaultDestinationFolder, + QString::fromStdString(facilityEngine->translateText("Select destination directory")), + "",QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); + if(destination.isEmpty()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Canceled by the user"); + return; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + ui->defaultDestinationFolder->setText(destination); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue("defaultDestinationFolder",destination.toStdString()); +} + +void CopyEngineFactory::defaultDestinationFolder() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue("defaultDestinationFolder",ui->defaultDestinationFolder->text().toStdString()); +} + +void CopyEngineFactory::followTheStrictOrder(bool checked) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue("followTheStrictOrder",booltostring(checked)); +} + +void CopyEngineFactory::moveTheWholeFolder(bool checked) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue("moveTheWholeFolder",booltostring(checked)); +} + +void CopyEngineFactory::on_inodeThreads_editingFinished() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the spinbox have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue("inodeThreads",std::to_string(ui->inodeThreads->value())); +} + +#ifdef Q_OS_WIN32 +size_t CopyEngineFactory::getTotalSystemMemory() +{ + MEMORYSTATUSEX status; + status.dwLength = sizeof(status); + GlobalMemoryStatusEx(&status); + return status.ullTotalPhys; +} +#endif + +#ifdef Q_OS_LINUX +size_t CopyEngineFactory::getTotalSystemMemory() +{ + long pages = sysconf(_SC_PHYS_PAGES); + long page_size = sysconf(_SC_PAGE_SIZE); + return pages * page_size; +} +#endif + +#ifdef ULTRACOPIER_PLUGIN_RSYNC +void CopyEngineFactory::setRsync(bool rsync) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue("rsync",std::to_string(rsync)); +} +#endif + +void CopyEngineFactory::copyListOrder(bool checked) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue("copyListOrder",booltostring(checked)); +} diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngineFactory.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngineFactory.h new file mode 100755 index 0000000..e761f4e --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngineFactory.h @@ -0,0 +1,135 @@ +/** \file factory.h +\brief Define the factory to create new instance +\author alpha_one_x86 +\licence GPL3, see the file COPYING */ + +#include "StructEnumDefinition_CopyEngine.h" + +#include <QObject> +#include <QList> +#include <QStringList> +#include <QFileInfo> +#include <QProcess> +#include <QTimer> + +#include "../../../interface/PluginInterface_CopyEngine.h" +#include "qstorageinfo.h" +#include "StructEnumDefinition.h" +#include "ui_copyEngineOptions.h" +#include "CopyEngine.h" +#include "Environment.h" +#include "Filters.h" +#include "RenamingRules.h" + +#ifdef Q_OS_WIN32 + #ifndef NOMINMAX + #define NOMINMAX + #endif + #include <windows.h> +#endif +#ifdef Q_OS_LINUX + #include <unistd.h> +#endif + +#ifndef FACTORY_H +#define FACTORY_H + +namespace Ui { + class copyEngineOptions; +} + +/** \brief to generate copy engine instance */ +class CopyEngineFactory : public PluginInterface_CopyEngineFactory +{ + Q_OBJECT + #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT + Q_PLUGIN_METADATA(IID "first-world.info.ultracopier.PluginInterface.CopyEngineFactory/1.0.0.0" FILE "plugin.json") + Q_INTERFACES(PluginInterface_CopyEngineFactory) + #endif +public: + CopyEngineFactory(); + ~CopyEngineFactory(); + /// \brief to return the instance of the copy engine + PluginInterface_CopyEngine * getInstance(); + /// \brief set the resources, to store options, to have facilityInterface + void setResources(OptionInterface * options,const std::string &writePath,const std::string &pluginPath,FacilityInterface * facilityInterface,const bool &portableVersion); + //get mode allowed + /// \brief define if can copy file, folder or both + Ultracopier::CopyType getCopyType(); + /// \brief to return which kind of transfer list operation is supported + Ultracopier::TransferListOperation getTransferListOperation(); + /// \brief define if can only copy, or copy and move + bool canDoOnlyCopy() const; + /// \brief to get the supported protocols for the source + std::vector<std::string> supportedProtocolsForTheSource() const; + /// \brief to get the supported protocols for the destination + std::vector<std::string> supportedProtocolsForTheDestination() const; + /// \brief to get the options of the copy engine + QWidget * options(); + /// \brief to get if have pause + bool havePause(); + +private: + Ui::copyEngineOptions *ui; + QWidget* tempWidget; + OptionInterface * optionsEngine; + bool errorFound; + FacilityInterface * facilityEngine; + Filters *filters; + RenamingRules *renamingRules; + QStorageInfo storageInfo; + QTimer lunchInitFunction; + std::vector<std::string> includeStrings,includeOptions,excludeStrings,excludeOptions; + std::string firstRenamingRule,otherRenamingRule; + +#if defined(Q_OS_WIN32) || (defined(Q_OS_LINUX) && defined(_SC_PHYS_PAGES)) + static size_t getTotalSystemMemory(); +#endif +private slots: + void init(); + void setDoRightTransfer(bool doRightTransfer); + void setKeepDate(bool keepDate); + void setBlockSize(int blockSize); + void setParallelBuffer(int parallelBuffer); + void setSequentialBuffer(int sequentialBuffer); + void setParallelizeIfSmallerThan(int parallelizeIfSmallerThan); + void setAutoStart(bool autoStart); + #ifdef ULTRACOPIER_PLUGIN_RSYNC + void setRsync(bool rsync); + #endif + void setFolderCollision(int index); + void setFolderError(int index); + void setTransferAlgorithm(int index); + void setCheckDestinationFolder(); + void showFilterDialog(); + void sendNewFilters(const std::vector<std::string> &includeStrings,const std::vector<std::string> &includeOptions, + const std::vector<std::string> &excludeStrings,const std::vector<std::string> &excludeOptions); + void doChecksum_toggled(bool); + void checksumOnlyOnError_toggled(bool); + void osBuffer_toggled(bool); + void osBufferLimited_toggled(bool); + void osBufferLimit_editingFinished(); + void checksumIgnoreIfImpossible_toggled(bool); + void sendNewRenamingRules(const std::string &firstRenamingRule, const std::string &otherRenamingRule); + void showRenamingRules(); + void updateBufferCheckbox(); + void setFileCollision(int index); + void setFileError(int index); + void updatedBlockSize(); + void deletePartiallyTransferredFiles(bool checked); + void renameTheOriginalDestination(bool checked); + void checkDiskSpace(bool checked); + void defaultDestinationFolderBrowse(); + void defaultDestinationFolder(); + void followTheStrictOrder(bool checked); + void moveTheWholeFolder(bool checked); + void on_inodeThreads_editingFinished(); + void copyListOrder(bool checked); +public slots: + void resetOptions(); + void newLanguageLoaded(); +signals: + void reloadLanguage() const; +}; + +#endif // FACTORY_H diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngineUltracopierVariable.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngineUltracopierVariable.h new file mode 100755 index 0000000..3311483 --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/CopyEngineUltracopierVariable.h @@ -0,0 +1,45 @@ +/** \file Variable.h
+\brief Define the environment variable
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef VARIABLE_H
+#define VARIABLE_H
+
+//Un-comment this next line to put ultracopier plugin in debug mode
+#ifndef ULTRACOPIER_NODEBUG
+#define ULTRACOPIER_PLUGIN_DEBUG
+//#define ULTRACOPIER_PLUGIN_DEBUG_SCHEDULER
+#define ULTRACOPIER_PLUGIN_DEBUG_WINDOW
+#define ULTRACOPIER_PLUGIN_DEBUG_WINDOW_TIMER 150
+#endif
+
+#define ULTRACOPIER_PLUGIN_MINTIMERINTERVAL 50
+#define ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL 100
+#define ULTRACOPIER_PLUGIN_NUMSEMSPEEDMANAGEMENT 2
+#define ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER 1
+#define ULTRACOPIER_PLUGIN_MINIMALYEAR 1995
+#define ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE 256 //in KB
+#define ULTRACOPIER_PLUGIN_DEFAULT_SEQUENTIAL_NUMBER_OF_BLOCK 512
+#define ULTRACOPIER_PLUGIN_DEFAULT_PARALLEL_NUMBER_OF_BLOCK 4 //in KB
+#define ULTRACOPIER_PLUGIN_MAX_BLOCK_SIZE 16*1024 //in KB
+#define ULTRACOPIER_PLUGIN_MAX_SEQUENTIAL_NUMBER_OF_BLOCK 2048
+#define ULTRACOPIER_PLUGIN_MAX_PARALLEL_NUMBER_OF_BLOCK 128 //in KB
+
+//if set, check the inode type at scanFileOrFolder, deprecated into the new algorithm and not used
+#define ULTRACOPIER_PLUGIN_CHECKLISTTYPE
+
+#define ULTRACOPIER_PLUGIN_SPEED_SUPPORT
+//#define ULTRACOPIER_PLUGIN_RIGHTS
+
+/** \brief Need be greater than 2, but greater than 20 to be efficient */
+#define ULTRACOPIER_PLUGIN_TIME_UPDATE_TRASNFER_LIST 40
+#define ULTRACOPIER_PLUGIN_TIME_UPDATE_PROGRESSION 200
+#define ULTRACOPIER_PLUGIN_TIME_UPDATE_MOUNT_MS 60*1000
+
+//#define ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY
+
+#endif // VARIABLE_H
+
+
+
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DebugDialog.cpp b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DebugDialog.cpp new file mode 100755 index 0000000..8bc559d --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DebugDialog.cpp @@ -0,0 +1,56 @@ +/** \file debugDialog.cpp +\brief Define the dialog to have debug information +\author alpha_one_x86 */ + +#include "DebugDialog.h" + +#ifdef ULTRACOPIER_PLUGIN_DEBUG +#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW +#include "ui_debugDialog.h" + +DebugDialog::DebugDialog(QWidget *parent) : + QWidget(parent), + ui(new Ui::debugDialog) +{ + ui->setupUi(this); +} + +DebugDialog::~DebugDialog() +{ + delete ui; +} + +void DebugDialog::setTransferList(const std::vector<std::string> &list) +{ + ui->tranferList->clear(); + unsigned int index=0; + while(index<list.size()) + { + ui->tranferList->addItem(QString::fromStdString(list.at(index))); + index++; + } +} + +void DebugDialog::setActiveTransfer(const int &activeTransfer) +{ + ui->spinBoxActiveTransfer->setValue(activeTransfer); +} + +void DebugDialog::setInodeUsage(const int &inodeUsage) +{ + ui->spinBoxNumberOfInode->setValue(inodeUsage); +} + +void DebugDialog::setTransferThreadList(const std::vector<std::string> &list) +{ + ui->transferThreadList->clear(); + unsigned int index=0; + while(index<list.size()) + { + ui->transferThreadList->addItem(QString::fromStdString(list.at(index))); + index++; + } +} + +#endif +#endif diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DebugDialog.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DebugDialog.h new file mode 100755 index 0000000..386fd7a --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DebugDialog.h @@ -0,0 +1,41 @@ +/** \file debugDialog.h +\brief Define the dialog to have debug information +\author alpha_one_x86 +\licence GPL3, see the file COPYING */ + +#ifndef DEBUGDAILOG_H +#define DEBUGDAILOG_H + +#include "Environment.h" + +#ifdef ULTRACOPIER_PLUGIN_DEBUG +#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW +#include <QWidget> + +namespace Ui { + class debugDialog; +} + +/// \brief class to the dialog to have debug information +class DebugDialog : public QWidget +{ + Q_OBJECT +public: + explicit DebugDialog(QWidget *parent = 0); + ~DebugDialog(); + /// \brief to set the transfer list, limited in result to not slow down the application + void setTransferList(const std::vector<std::string> &list); + /// \brief show the transfer thread, it show be a thread pool in normal time + void setTransferThreadList(const std::vector<std::string> &list); + /// \brief show how many transfer is active + void setActiveTransfer(const int &activeTransfer); + /// \brief show many many inode is manipulated + void setInodeUsage(const int &inodeUsage); +private: + Ui::debugDialog *ui; +}; + +#endif // ULTRACOPIER_PLUGIN_DEBUG_WINDOW +#endif // ULTRACOPIER_PLUGIN_DEBUG + +#endif // DEBUGDAILOG_H diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DebugEngineMacro.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DebugEngineMacro.h new file mode 100755 index 0000000..f9b5349 --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DebugEngineMacro.h @@ -0,0 +1,28 @@ +/** \file DebugEngineMacro.h +\brief Define the macro for the debug +\author alpha_one_x86 +\licence GPL3, see the file COPYING */ + +#ifndef DEBUGENGINEMACRO_H +#define DEBUGENGINEMACRO_H + +#ifdef WIN32 +# define __func__ __FUNCTION__ +#endif + +/// \brief Macro for the debug log +#ifdef ULTRACOPIER_PLUGIN_DEBUG + #if defined (__FILE__) && defined (__LINE__) + #define ULTRACOPIER_DEBUGCONSOLE(a,b) emit debugInformation(a,__func__,b,__FILE__,__LINE__) + #else + #define ULTRACOPIER_DEBUGCONSOLE(a,b) emit debugInformation(a,__func__,b) + #endif +#else // ULTRACOPIER_PLUGIN_DEBUG + #define ULTRACOPIER_DEBUGCONSOLE(a,b) void() +#endif // ULTRACOPIER_PLUGIN_DEBUG + +#endif // DEBUGENGINEMACRO_H + + + + diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DiskSpace.cpp b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DiskSpace.cpp new file mode 100755 index 0000000..e9b996d --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DiskSpace.cpp @@ -0,0 +1,53 @@ +#include "DiskSpace.h" +#include "ui_DiskSpace.h" +#include "StructEnumDefinition_CopyEngine.h" + +DiskSpace::DiskSpace(FacilityInterface * facilityEngine,std::vector<Diskspace> list,QWidget *parent) : + QDialog(parent), + ui(new Ui::DiskSpace) +{ + Qt::WindowFlags flags = windowFlags(); + #ifdef Q_OS_LINUX + flags=flags & ~Qt::X11BypassWindowManagerHint; + #endif + flags=flags | Qt::WindowStaysOnTopHint; + setWindowFlags(flags); + + ui->setupUi(this); + ok=false; + int index=0; + int size=list.size(); + QString drives; + while(index<size) + { + drives+=tr("Drives %1 have %2 available but need %3") + .arg(QString::fromStdString(list.at(index).drive)) + .arg(QString::fromStdString(facilityEngine->sizeToString(list.at(index).freeSpace))) + .arg(QString::fromStdString(facilityEngine->sizeToString(list.at(index).requiredSpace))); + drives+=QStringLiteral("<br />"); + index++; + } + ui->drives->setText(drives); +} + +DiskSpace::~DiskSpace() +{ + delete ui; +} + +void DiskSpace::on_ok_clicked() +{ + ok=true; + close(); +} + +void DiskSpace::on_cancel_clicked() +{ + ok=false; + close(); +} + +bool DiskSpace::getAction() const +{ + return ok; +} diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DiskSpace.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DiskSpace.h new file mode 100755 index 0000000..5a923ab --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DiskSpace.h @@ -0,0 +1,29 @@ +#ifndef DISKSPACE_H +#define DISKSPACE_H + +#include <QDialog> +#include <vector> +#include "../../../interface/PluginInterface_CopyEngine.h" +#include "StructEnumDefinition_CopyEngine.h" + +namespace Ui { +class DiskSpace; +} + +class DiskSpace : public QDialog +{ + Q_OBJECT + +public: + explicit DiskSpace(FacilityInterface * facilityEngine,std::vector<Diskspace> list,QWidget *parent = 0); + ~DiskSpace(); + bool getAction() const; +private slots: + void on_ok_clicked(); + void on_cancel_clicked(); +private: + Ui::DiskSpace *ui; + bool ok; +}; + +#endif // DISKSPACE_H diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DiskSpace.ui b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DiskSpace.ui new file mode 100755 index 0000000..10b5c69 --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DiskSpace.ui @@ -0,0 +1,68 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>DiskSpace</class> + <widget class="QDialog" name="DiskSpace"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>367</width> + <height>146</height> + </rect> + </property> + <property name="windowTitle"> + <string>Disk space</string> + </property> + <property name="windowIcon"> + <iconset resource="copyEngineResources.qrc"> + <normaloff>:/CopyEngine/Ultracopier/resources/remove.png</normaloff>:/CopyEngine/Ultracopier/resources/remove.png</iconset> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QLabel" name="label"> + <property name="text"> + <string>You need more space on this drive to finish this transfer</string> + </property> + </widget> + </item> + <item> + <widget class="QTextBrowser" name="drives"/> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="ok"> + <property name="text"> + <string>Continue</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="cancel"> + <property name="text"> + <string>Cancel</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <resources> + <include location="copyEngineResources.qrc"/> + </resources> + <connections/> +</ui> diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DriveManagement.cpp b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DriveManagement.cpp new file mode 100755 index 0000000..27fc9cb --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DriveManagement.cpp @@ -0,0 +1,105 @@ +#include "DriveManagement.h" + +#include <QDir> +#include <QFileInfoList> +#include <QStorageInfo> + +#include "../../../cpp11addition.h" + +DriveManagement::DriveManagement() +{ + tryUpdate(); + #ifdef Q_OS_WIN32 + reg1=std::regex("^(\\\\\\\\|//)[^\\\\\\\\/]+(\\\\|/)[^\\\\\\\\/]+.*"); + reg2=std::regex("^((\\\\\\\\|//)[^\\\\\\\\/]+(\\\\|/)[^\\\\\\\\/]+).*$"); + reg3=std::regex("^[a-zA-Z]:[\\\\/].*"); + reg4=std::regex("^([a-zA-Z]:[\\\\/]).*$"); + #endif + /// \warn ULTRACOPIER_DEBUGCONSOLE() don't work here because the sinal slot is not connected! +} + +//get drive of an file or folder +/// \todo do network drive support for windows +std::string DriveManagement::getDrive(const std::string &fileOrFolder) const +{ + const std::string &inode=QDir::toNativeSeparators(QString::fromStdString(fileOrFolder)).toStdString(); + int size=mountSysPoint.size(); + for (int i = 0; i < size; ++i) { + if(stringStartWith(inode,mountSysPoint.at(i))) + return QDir::toNativeSeparators(QString::fromStdString(mountSysPoint.at(i))).toStdString(); + } + #ifdef Q_OS_WIN32 + if(std::regex_match(fileOrFolder,reg1)) + { + std::string returnString=fileOrFolder; + std::regex_replace(returnString,reg2,"$1"); + return returnString; + } + //due to lack of WMI support into mingw, the new drive event is never called, this is a workaround + if(std::regex_match(fileOrFolder,reg3)) + { + std::string returnString=fileOrFolder; + std::regex_replace(returnString,reg4,"$1"); + return QDir::toNativeSeparators(QString::fromStdString(returnString)).toUpper().toStdString(); + } + #endif + //if unable to locate the right mount point + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"unable to locate the right mount point for: "+inode+", mount point: "+stringimplode(mountSysPoint,";")); + return std::string(); +} + +QByteArray DriveManagement::getDriveType(const std::string &drive) const +{ + int index=vectorindexOf(mountSysPoint,drive); + if(index!=-1) + return driveType.at(index); + return QByteArray(); +} + +bool DriveManagement::isSameDrive(const std::string &file1,const std::string &file2) const +{ + if(mountSysPoint.size()==0) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"no mount point found"); + return false; + } + const std::string &drive1=getDrive(file1); + if(drive1.empty()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"drive for the file1 not found: "+file1); + return false; + } + const std::string &drive2=getDrive(file2); + if(drive2.empty()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"drive for the file2 not found: "+file2); + return false; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,drive1+" is egal to "+drive2); + if(drive1==drive2) + return true; + else + return false; +} + +void DriveManagement::tryUpdate() +{ + mountSysPoint.clear(); + driveType.clear(); + const QList<QStorageInfo> mountedVolumesList=QStorageInfo::mountedVolumes(); + int index=0; + while(index<mountedVolumesList.size()) + { + mountSysPoint.push_back(QDir::toNativeSeparators(mountedVolumesList.at(index).rootPath()).toStdString()); + #ifdef Q_OS_WIN32 + if(mountSysPoint.back()!="A:\\" && mountSysPoint.back()!="A:/" && mountSysPoint.back()!="A:" && mountSysPoint.back()!="A" && + mountSysPoint.back()!="a:\\" && mountSysPoint.back()!="a:/" && mountSysPoint.back()!="a:" && mountSysPoint.back()!="a") + driveType.push_back(mountedVolumesList.at(index).fileSystemType()); + else + driveType.push_back(QByteArray()); + #else + driveType.push_back(mountedVolumesList.at(index).fileSystemType()); + #endif + index++; + } +} diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DriveManagement.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DriveManagement.h new file mode 100755 index 0000000..8013b7c --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/DriveManagement.h @@ -0,0 +1,34 @@ +#ifndef DRIVEMANAGEMENT_H +#define DRIVEMANAGEMENT_H + +#include <QObject> +#include <QString> +#include <QStringList> +#include <QRegularExpression> +#include <QStorageInfo> +#include <QTimer> + +#include "Environment.h" + +class DriveManagement : public QObject +{ + Q_OBJECT +public: + explicit DriveManagement(); + bool isSameDrive(const std::string &file1, const std::string &file2) const; + /// \brief get drive of an file or folder + std::string getDrive(const std::string &fileOrFolder) const; + QByteArray getDriveType(const std::string &drive) const; + void tryUpdate(); +protected: + std::vector<std::string> mountSysPoint; + std::vector<QByteArray> driveType; + #ifdef Q_OS_WIN32 + std::regex reg1,reg2,reg3,reg4; + #endif +signals: + /// \brief To debug source + void debugInformation(const Ultracopier::DebugLevel &level,const std::string &fonction,const std::string &text,const std::string &file,const int &ligne) const; +}; + +#endif // DRIVEMANAGEMENT_H diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Environment.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Environment.h new file mode 100755 index 0000000..85d017b --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Environment.h @@ -0,0 +1,11 @@ +/** \file Environment.h
+\brief Define the environment variable and global function
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#include "CopyEngineUltracopierVariable.h"
+/// \brief The global include
+#include "StructEnumDefinition.h"
+#include "StructEnumDefinition_CopyEngine.h"
+#include "DebugEngineMacro.h"
+#include "CompilerInfo.h"
diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileErrorDialog.cpp b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileErrorDialog.cpp new file mode 100755 index 0000000..d88fb90 --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileErrorDialog.cpp @@ -0,0 +1,163 @@ +#include "FileErrorDialog.h" +#include "ui_fileErrorDialog.h" +#include "TransferThread.h" + +#include <QString> + +bool FileErrorDialog::isInAdmin=false; + +FileErrorDialog::FileErrorDialog(QWidget *parent, QFileInfo fileInfo, std::string errorString, const ErrorType &errorType) : + QDialog(parent), + ui(new Ui::fileErrorDialog) +{ + Qt::WindowFlags flags = windowFlags(); + #ifdef Q_OS_LINUX + flags=flags & ~Qt::X11BypassWindowManagerHint; + #endif + flags=flags | Qt::WindowStaysOnTopHint; + setWindowFlags(flags); + + ui->setupUi(this); + action=FileError_Cancel; + ui->label_error->setText(QString::fromStdString(errorString)); + if(fileInfo.exists()) + { + ui->label_content_file_name->setText(QString::fromStdString(TransferThread::resolvedName(fileInfo))); + if(ui->label_content_file_name->text().isEmpty()) + { + ui->label_content_file_name->setText(fileInfo.absoluteFilePath()); + ui->label_folder->setVisible(false); + ui->label_content_folder->setVisible(false); + } + else + { + QString folder=fileInfo.absolutePath(); + if(folder.size()>80) + folder=folder.mid(0,38)+"..."+folder.mid(folder.size()-38); + ui->label_content_folder->setText(fileInfo.absolutePath()); + } + ui->label_content_size->setText(QString::number(fileInfo.size())); + QDateTime maxTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1)); + if(maxTime<fileInfo.lastModified()) + { + ui->label_modified->setVisible(true); + ui->label_content_modified->setVisible(true); + ui->label_content_modified->setText(fileInfo.lastModified().toString()); + } + else + { + ui->label_modified->setVisible(false); + ui->label_content_modified->setVisible(false); + } + if(fileInfo.isDir()) + { + this->setWindowTitle(tr("Error on folder")); + ui->label_size->hide(); + ui->label_content_size->hide(); + ui->label_file_name->setText(tr("Folder name")); + } + ui->label_file_destination->setVisible(fileInfo.isSymLink()); + ui->label_content_file_destination->setVisible(fileInfo.isSymLink()); + if(fileInfo.isSymLink()) + ui->label_content_file_destination->setText(fileInfo.symLinkTarget()); + } + else + { + ui->label_content_file_name->setText(QString::fromStdString(TransferThread::resolvedName(fileInfo))); + if(ui->label_content_file_name->text().isEmpty()) + { + ui->label_content_file_name->setText(fileInfo.absoluteFilePath()); + ui->label_folder->setVisible(false); + ui->label_content_folder->setVisible(false); + } + else + ui->label_content_folder->setText(fileInfo.absolutePath()); + + ui->label_file_destination->hide(); + ui->label_content_file_destination->hide(); + ui->label_size->hide(); + ui->label_content_size->hide(); + ui->label_modified->hide(); + ui->label_content_modified->hide(); + } + if(errorType==ErrorType_Folder || errorType==ErrorType_FolderWithRety) + ui->PutToBottom->hide(); + if(errorType==ErrorType_Folder) + ui->Retry->hide(); + + ui->Rights->hide(); + #ifdef ULTRACOPIER_PLUGIN_RIGHTS + if(isInAdmin) + ui->Rights->hide(); + #ifdef Q_OS_WIN32 + if(errorType!=ErrorType_Rights) + ui->Rights->hide(); + #else + ui->Rights->hide(); + #endif + #else + ui->Rights->hide(); + #endif +} + +FileErrorDialog::~FileErrorDialog() +{ + delete ui; +} + +void FileErrorDialog::changeEvent(QEvent *e) +{ + QWidget::changeEvent(e); + switch (e->type()) { + case QEvent::LanguageChange: + ui->retranslateUi(this); + break; + default: + break; + } +} + +void FileErrorDialog::on_PutToBottom_clicked() +{ + action=FileError_PutToEndOfTheList; + this->close(); +} + +void FileErrorDialog::on_Retry_clicked() +{ + action=FileError_Retry; + this->close(); +} + +void FileErrorDialog::on_Skip_clicked() +{ + action=FileError_Skip; + this->close(); +} + +void FileErrorDialog::on_Cancel_clicked() +{ + action=FileError_Cancel; + this->close(); +} + +bool FileErrorDialog::getAlways() +{ + return ui->checkBoxAlways->isChecked(); +} + +FileErrorAction FileErrorDialog::getAction() +{ + return action; +} + +void FileErrorDialog::on_checkBoxAlways_clicked() +{ + ui->Rights->setEnabled(!ui->checkBoxAlways->isChecked()); +} + +#ifdef ULTRACOPIER_PLUGIN_RIGHTS +void FileErrorDialog::on_Rights_clicked() +{ +} +#endif diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileErrorDialog.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileErrorDialog.h new file mode 100755 index 0000000..133a8b0 --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileErrorDialog.h @@ -0,0 +1,51 @@ +/** \file fileErrorDialog.h +\brief Define the dialog error on the file +\author alpha_one_x86 +\licence GPL3, see the file COPYING */ + +#include <QDialog> +#include <QWidget> +#include <QString> +#include <QDateTime> +#include <QFileInfo> +#include "Environment.h" + +#ifndef FILEERRORDIALOG_H +#define FILEERRORDIALOG_H + + + +namespace Ui { + class fileErrorDialog; +} + +/// \brief to show error dialog, and ask what do +class FileErrorDialog : public QDialog +{ + Q_OBJECT +public: + /// \brief create the object and pass all the informations to it + explicit FileErrorDialog(QWidget *parent,QFileInfo fileInfo,std::string errorString,const ErrorType &errorType); + ~FileErrorDialog(); + /// \brief return the the always checkbox is checked + bool getAlways(); + /// \brief return the action clicked + FileErrorAction getAction(); +protected: + void changeEvent(QEvent *e); + static bool isInAdmin; +private slots: + void on_PutToBottom_clicked(); + void on_Retry_clicked(); + void on_Skip_clicked(); + void on_Cancel_clicked(); + void on_checkBoxAlways_clicked(); + #ifdef ULTRACOPIER_PLUGIN_RIGHTS + void on_Rights_clicked(); + #endif +private: + Ui::fileErrorDialog *ui; + FileErrorAction action; +}; + +#endif // FILEERRORDIALOG_H diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileExistsDialog.cpp b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileExistsDialog.cpp new file mode 100755 index 0000000..10b8543 --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileExistsDialog.cpp @@ -0,0 +1,240 @@ +#include "FileExistsDialog.h" +#include "ui_fileExistsDialog.h" +#include "TransferThread.h" + +#ifdef Q_OS_WIN32 +#define CURRENTSEPARATOR "\\" +#else +#define CURRENTSEPARATOR "/" +#endif + +#include <QRegularExpression> +#include <QFileInfo> +#include <QMessageBox> + +FileExistsDialog::FileExistsDialog(QWidget *parent, QFileInfo source, QFileInfo destination, std::string firstRenamingRule, std::string otherRenamingRule) : + QDialog(parent), + ui(new Ui::fileExistsDialog) +{ + Qt::WindowFlags flags = windowFlags(); + #ifdef Q_OS_LINUX + flags=flags & ~Qt::X11BypassWindowManagerHint; + #endif + flags=flags | Qt::WindowStaysOnTopHint; + setWindowFlags(flags); + + ui->setupUi(this); + action=FileExists_Cancel; + destinationInfo=destination; + oldName=TransferThread::resolvedName(destination); + ui->lineEditNewName->setText(QString::fromStdString(oldName)); + ui->lineEditNewName->setPlaceholderText(QString::fromStdString(oldName)); + ui->Overwrite->addAction(ui->actionOverwrite_if_newer); + ui->Overwrite->addAction(ui->actionOverwrite_if_not_same_modification_date); + ui->label_content_source_size->setText(QString::number(source.size())); + ui->label_content_source_modified->setText(source.lastModified().toString()); + ui->label_content_source_file_name->setText(QString::fromStdString(TransferThread::resolvedName(source))); + QString folder=source.absolutePath(); + if(folder.size()>80) + folder=folder.mid(0,38)+"..."+folder.mid(folder.size()-38); + ui->label_content_source_folder->setText(folder); + ui->label_content_destination_size->setText(QString::number(destination.size())); + ui->label_content_destination_modified->setText(destination.lastModified().toString()); + ui->label_content_destination_file_name->setText(QString::fromStdString(TransferThread::resolvedName(destination))); + folder=destination.absolutePath(); + if(folder.size()>80) + folder=folder.mid(0,38)+"..."+folder.mid(folder.size()-38); + ui->label_content_destination_folder->setText(folder); + QDateTime maxTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1)); + if(maxTime<source.lastModified()) + { + ui->label_source_modified->setVisible(true); + ui->label_content_source_modified->setVisible(true); + ui->label_content_source_modified->setText(source.lastModified().toString()); + } + else + { + ui->label_source_modified->setVisible(false); + ui->label_content_source_modified->setVisible(false); + } + if(maxTime<destination.lastModified()) + { + ui->label_destination_modified->setVisible(true); + ui->label_content_destination_modified->setVisible(true); + ui->label_content_destination_modified->setText(destination.lastModified().toString()); + } + else + { + ui->label_destination_modified->setVisible(false); + ui->label_content_destination_modified->setVisible(false); + } + if(!source.exists()) + { + ui->label_content_source_size->setVisible(false); + ui->label_source_size->setVisible(false); + ui->label_source_modified->setVisible(false); + ui->label_content_source_modified->setVisible(false); + } + if(!destination.exists()) + { + ui->label_content_destination_size->setVisible(false); + ui->label_destination_size->setVisible(false); + ui->label_destination_modified->setVisible(false); + ui->label_content_destination_modified->setVisible(false); + } + this->firstRenamingRule=firstRenamingRule; + this->otherRenamingRule=otherRenamingRule; + on_SuggestNewName_clicked(); +} + +FileExistsDialog::~FileExistsDialog() +{ + delete ui; +} + +void FileExistsDialog::changeEvent(QEvent *e) +{ + QWidget::changeEvent(e); + switch (e->type()) { + case QEvent::LanguageChange: + ui->retranslateUi(this); + break; + default: + break; + } +} + +std::string FileExistsDialog::getNewName() +{ + if(oldName==ui->lineEditNewName->text().toStdString() || ui->checkBoxAlways->isChecked()) + return oldName; + else + return ui->lineEditNewName->text().toStdString(); +} + +void FileExistsDialog::on_SuggestNewName_clicked() +{ + QFileInfo destinationInfo=this->destinationInfo; + QString absolutePath=destinationInfo.absolutePath(); + QString fileName=QString::fromStdString(TransferThread::resolvedName(destinationInfo)); + QString suffix=""; + QString destination; + QString newFileName; + //resolv the suffix + if(fileName.contains(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$")))) + { + suffix=fileName; + suffix.replace(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$")),QStringLiteral("\\2")); + fileName.replace(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$")),QStringLiteral("\\1")); + } + //resolv the new name + int num=1; + do + { + if(num==1) + { + if(firstRenamingRule.empty()) + newFileName=tr("%name% - copy%suffix%"); + else + newFileName=QString::fromStdString(firstRenamingRule); + } + else + { + if(otherRenamingRule.empty()) + newFileName=tr("%name% - copy (%number%)%suffix%"); + else + newFileName=QString::fromStdString(otherRenamingRule); + newFileName.replace(QStringLiteral("%number%"),QString::number(num)); + } + newFileName.replace(QStringLiteral("%name%"),fileName); + newFileName.replace(QStringLiteral("%suffix%"),suffix); + destination=absolutePath+CURRENTSEPARATOR+newFileName; + destinationInfo.setFile(destination); + num++; + } + while(destinationInfo.exists()); + ui->lineEditNewName->setText(newFileName); +} + +void FileExistsDialog::on_Rename_clicked() +{ + action=FileExists_Rename; + this->close(); +} + +void FileExistsDialog::on_Overwrite_clicked() +{ + action=FileExists_Overwrite; + this->close(); +} + +void FileExistsDialog::on_Skip_clicked() +{ + action=FileExists_Skip; + this->close(); +} + +void FileExistsDialog::on_Cancel_clicked() +{ + action=FileExists_Cancel; + this->close(); +} + +void FileExistsDialog::on_actionOverwrite_if_newer_triggered() +{ + action=FileExists_OverwriteIfNewer; + this->close(); +} + +void FileExistsDialog::on_actionOverwrite_if_not_same_modification_date_triggered() +{ + action=FileExists_OverwriteIfNotSame; + this->close(); +} + +FileExistsAction FileExistsDialog::getAction() +{ + return action; +} + +bool FileExistsDialog::getAlways() +{ + return ui->checkBoxAlways->isChecked(); +} + +void FileExistsDialog::updateRenameButton() +{ + ui->Rename->setEnabled(ui->checkBoxAlways->isChecked() || (!ui->lineEditNewName->text().contains(QRegularExpression("[/\\\\\\*]")) && oldName!=ui->lineEditNewName->text().toStdString() && !ui->lineEditNewName->text().isEmpty())); +} + +void FileExistsDialog::on_checkBoxAlways_toggled(bool checked) +{ + Q_UNUSED(checked); + updateRenameButton(); +} + +void FileExistsDialog::on_lineEditNewName_textChanged(const QString &arg1) +{ + Q_UNUSED(arg1); + updateRenameButton(); +} + +void FileExistsDialog::on_lineEditNewName_returnPressed() +{ + updateRenameButton(); + if(ui->Rename->isEnabled()) + on_Rename_clicked(); + else + QMessageBox::warning(this,tr("Error"),tr("Try rename with using special characters")); +} + +void FileExistsDialog::on_actionOverwrite_if_older_triggered() +{ + action=FileExists_OverwriteIfOlder; + this->close(); +} + +void FileExistsDialog::on_lineEditNewName_editingFinished() +{ + updateRenameButton(); +} diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileExistsDialog.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileExistsDialog.h new file mode 100755 index 0000000..05ff7e0 --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileExistsDialog.h @@ -0,0 +1,60 @@ +/** \file fileExistsDialog.h +\brief Define the dialog when file already exists +\author alpha_one_x86 +\licence GPL3, see the file COPYING */ + +#include <QDialog> +#include <QWidget> +#include <QString> +#include <QDateTime> +#include <QFileInfo> +#include <QDir> +#include "Environment.h" + +#ifndef FILEEXISTSDIALOG_H +#define FILEEXISTSDIALOG_H + +namespace Ui { + class fileExistsDialog; +} + +/// \brief to show file exists dialog, and ask what do +class FileExistsDialog : public QDialog +{ + Q_OBJECT +public: + /// \brief create the object and pass all the informations to it + explicit FileExistsDialog(QWidget *parent,QFileInfo source,QFileInfo destination,std::string firstRenamingRule,std::string otherRenamingRule); + ~FileExistsDialog(); + /// \brief return the the always checkbox is checked + bool getAlways(); + /// \brief return the action clicked + FileExistsAction getAction(); + /// \brief return the new rename is case in manual renaming + std::string getNewName(); +protected: + void changeEvent(QEvent *e); +private slots: + void on_SuggestNewName_clicked(); + void on_Rename_clicked(); + void on_Overwrite_clicked(); + void on_Skip_clicked(); + void on_Cancel_clicked(); + void on_actionOverwrite_if_newer_triggered(); + void on_actionOverwrite_if_not_same_modification_date_triggered(); + void updateRenameButton(); + void on_checkBoxAlways_toggled(bool checked); + void on_lineEditNewName_textChanged(const QString &arg1); + void on_lineEditNewName_returnPressed(); + void on_actionOverwrite_if_older_triggered(); + void on_lineEditNewName_editingFinished(); +private: + Ui::fileExistsDialog *ui; + FileExistsAction action; + std::string oldName; + QFileInfo destinationInfo; + std::string firstRenamingRule; + std::string otherRenamingRule; +}; + +#endif // FILEEXISTSDIALOG_H diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileIsSameDialog.cpp b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileIsSameDialog.cpp new file mode 100755 index 0000000..7683d1d --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileIsSameDialog.cpp @@ -0,0 +1,190 @@ +#include "FileIsSameDialog.h" +#include "ui_fileIsSameDialog.h" +#include "TransferThread.h" + +#ifdef Q_OS_WIN32 +#define CURRENTSEPARATOR "\\" +#else +#define CURRENTSEPARATOR "/" +#endif + +#include <QRegularExpression> +#include <QFileInfo> +#include <QMessageBox> + +FileIsSameDialog::FileIsSameDialog(QWidget *parent, QFileInfo fileInfo, std::string firstRenamingRule, std::string otherRenamingRule) : + QDialog(parent), + ui(new Ui::fileIsSameDialog) +{ + Qt::WindowFlags flags = windowFlags(); + #ifdef Q_OS_LINUX + flags=flags & ~Qt::X11BypassWindowManagerHint; + #endif + flags=flags | Qt::WindowStaysOnTopHint; + setWindowFlags(flags); + + ui->setupUi(this); + action=FileExists_Cancel; + oldName=TransferThread::resolvedName(fileInfo); + destinationInfo=fileInfo; + ui->lineEditNewName->setText(QString::fromStdString(oldName)); + ui->lineEditNewName->setPlaceholderText(QString::fromStdString(oldName)); + ui->label_content_size->setText(QString::number(fileInfo.size())); + ui->label_content_modified->setText(fileInfo.lastModified().toString()); + ui->label_content_file_name->setText(QString::fromStdString(TransferThread::resolvedName(fileInfo))); + QString folder=fileInfo.absolutePath(); + if(folder.size()>80) + folder=folder.mid(0,38)+"..."+folder.mid(folder.size()-38); + ui->label_content_folder->setText(folder); + updateRenameButton(); + QDateTime maxTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1)); + if(maxTime<fileInfo.lastModified()) + { + ui->label_modified->setVisible(true); + ui->label_content_modified->setVisible(true); + ui->label_content_modified->setText(fileInfo.lastModified().toString()); + } + else + { + ui->label_modified->setVisible(false); + ui->label_content_modified->setVisible(false); + } + if(!fileInfo.exists()) + { + ui->label_content_size->setVisible(false); + ui->label_size->setVisible(false); + ui->label_modified->setVisible(false); + ui->label_content_modified->setVisible(false); + } + this->firstRenamingRule=firstRenamingRule; + this->otherRenamingRule=otherRenamingRule; + on_SuggestNewName_clicked(); +} + +FileIsSameDialog::~FileIsSameDialog() +{ + delete ui; +} + +void FileIsSameDialog::changeEvent(QEvent *e) +{ + QWidget::changeEvent(e); + switch (e->type()) { + case QEvent::LanguageChange: + ui->retranslateUi(this); + break; + default: + break; + } +} + +std::string FileIsSameDialog::getNewName() +{ + if(oldName==ui->lineEditNewName->text().toStdString() || ui->checkBoxAlways->isChecked()) + return oldName; + else + return ui->lineEditNewName->text().toStdString(); +} + +void FileIsSameDialog::on_SuggestNewName_clicked() +{ + QFileInfo destinationInfo=this->destinationInfo; + QString absolutePath=destinationInfo.absolutePath(); + QString fileName=QString::fromStdString(TransferThread::resolvedName(destinationInfo)); + QString suffix=""; + QString destination; + QString newFileName; + //resolv the suffix + if(fileName.contains(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$")))) + { + suffix=fileName; + suffix.replace(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$")),QStringLiteral("\\2")); + fileName.replace(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$")),QStringLiteral("\\1")); + } + //resolv the new name + int num=1; + do + { + if(num==1) + { + if(firstRenamingRule.empty()) + newFileName=tr("%name% - copy"); + else + newFileName=QString::fromStdString(firstRenamingRule); + } + else + { + if(otherRenamingRule.empty()) + newFileName=tr("%name% - copy (%number%)"); + else + newFileName=QString::fromStdString(otherRenamingRule); + newFileName.replace(QStringLiteral("%number%"),QString::number(num)); + } + newFileName.replace(QStringLiteral("%name%"),fileName); + newFileName.replace(QStringLiteral("%suffix%"),suffix); + destination=absolutePath+CURRENTSEPARATOR+newFileName+suffix; + destinationInfo.setFile(destination); + num++; + } + while(destinationInfo.exists()); + ui->lineEditNewName->setText(newFileName); +} + +void FileIsSameDialog::on_Rename_clicked() +{ + action=FileExists_Rename; + this->close(); +} + +void FileIsSameDialog::on_Skip_clicked() +{ + action=FileExists_Skip; + this->close(); +} + +void FileIsSameDialog::on_Cancel_clicked() +{ + action=FileExists_Cancel; + this->close(); +} + +FileExistsAction FileIsSameDialog::getAction() +{ + return action; +} + +bool FileIsSameDialog::getAlways() +{ + return ui->checkBoxAlways->isChecked(); +} + +void FileIsSameDialog::updateRenameButton() +{ + ui->Rename->setEnabled(ui->checkBoxAlways->isChecked() || (!ui->lineEditNewName->text().contains(QRegularExpression("[/\\\\\\*]")) && oldName!=ui->lineEditNewName->text().toStdString() && !ui->lineEditNewName->text().isEmpty())); +} + +void FileIsSameDialog::on_lineEditNewName_textChanged(const QString &arg1) +{ + Q_UNUSED(arg1); + updateRenameButton(); +} + +void FileIsSameDialog::on_checkBoxAlways_toggled(bool checked) +{ + Q_UNUSED(checked); + updateRenameButton(); +} + +void FileIsSameDialog::on_lineEditNewName_returnPressed() +{ + updateRenameButton(); + if(ui->Rename->isEnabled()) + on_Rename_clicked(); + else + QMessageBox::warning(this,tr("Error"),tr("Try rename with using special characters")); +} + +void FileIsSameDialog::on_lineEditNewName_editingFinished() +{ + updateRenameButton(); +} diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileIsSameDialog.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileIsSameDialog.h new file mode 100755 index 0000000..5dc0067 --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FileIsSameDialog.h @@ -0,0 +1,57 @@ +/** \file fileIsSameDialog.h +\brief Define the dialog when file is same +\author alpha_one_x86 +\licence GPL3, see the file COPYING */ + +#include <QDialog> +#include <QWidget> +#include <QString> +#include <QDateTime> +#include <QFileInfo> +#include <QDir> +#include "Environment.h" + +#ifndef FILEISSAMEDIALOG_H +#define FILEISSAMEDIALOG_H + +namespace Ui { + class fileIsSameDialog; +} + +/// \brief to show file is same dialog, and ask what do +class FileIsSameDialog : public QDialog +{ + Q_OBJECT +public: + /// \brief create the object and pass all the informations to it + explicit FileIsSameDialog(QWidget *parent,QFileInfo fileInfo,std::string firstRenamingRule,std::string otherRenamingRule); + ~FileIsSameDialog(); + /// \brief return the the always checkbox is checked + bool getAlways(); + /// \brief return the action clicked + FileExistsAction getAction(); + /// \brief return the new rename is case in manual renaming + std::string getNewName(); +protected: + void changeEvent(QEvent *e); +private slots: + void on_SuggestNewName_clicked(); + void on_Rename_clicked(); + void on_Skip_clicked(); + void on_Cancel_clicked(); + void updateRenameButton(); + void on_lineEditNewName_textChanged(const QString &arg1); + void on_checkBoxAlways_toggled(bool checked); + void on_lineEditNewName_returnPressed(); + void on_lineEditNewName_editingFinished(); +private: + Ui::fileIsSameDialog *ui; + FileExistsAction action; + std::string oldName; + QFileInfo destinationInfo; + std::string firstRenamingRule; + std::string otherRenamingRule; + +}; + +#endif // FILEISSAMEDIALOG_H diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FilterRules.cpp b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FilterRules.cpp new file mode 100755 index 0000000..0f6bf2c --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FilterRules.cpp @@ -0,0 +1,193 @@ +#include "FilterRules.h" +#include "ui_FilterRules.h" + +#include <QRegularExpression> + +FilterRules::FilterRules(QWidget *parent) : + QDialog(parent), + ui(new Ui::FilterRules) +{ + ui->setupUi(this); + updateChecking(); + haveBeenValided=false; +} + +FilterRules::~FilterRules() +{ + delete ui; +} + +bool FilterRules::getIsValid() +{ + return isValid && haveBeenValided; +} + +std::string FilterRules::get_search_text() +{ + return ui->search->text().toStdString(); +} + +SearchType FilterRules::get_search_type() +{ + switch(ui->search_type->currentIndex()) + { + case 0: + return SearchType_rawText; + case 1: + return SearchType_simpleRegex; + case 2: + return SearchType_perlRegex; + } + return SearchType_simpleRegex; +} + +ApplyOn FilterRules::get_apply_on() +{ + switch(ui->apply_on->currentIndex()) + { + case 0: + return ApplyOn_file; + case 1: + return ApplyOn_fileAndFolder; + case 2: + return ApplyOn_folder; + } + return ApplyOn_fileAndFolder; +} + +bool FilterRules::get_need_match_all() +{ + return ui->need_match_all->isChecked(); +} + +void FilterRules::set_search_text(std::string search_text) +{ + ui->search->setText(QString::fromStdString(search_text)); +} + +void FilterRules::set_search_type(SearchType search_type) +{ + switch(search_type) + { + case SearchType_rawText: + ui->search_type->setCurrentIndex(0); + break; + case SearchType_simpleRegex: + ui->search_type->setCurrentIndex(1); + break; + case SearchType_perlRegex: + ui->search_type->setCurrentIndex(2); + break; + } +} + +void FilterRules::set_apply_on(ApplyOn apply_on) +{ + switch(apply_on) + { + case ApplyOn_file: + ui->apply_on->setCurrentIndex(0); + break; + case ApplyOn_fileAndFolder: + ui->apply_on->setCurrentIndex(1); + break; + case ApplyOn_folder: + ui->apply_on->setCurrentIndex(2); + break; + } +} + +void FilterRules::set_need_match_all(bool need_match_all) +{ + ui->need_match_all->setChecked(need_match_all); +} + +void FilterRules::on_search_textChanged(const std::string &arg1) +{ + Q_UNUSED(arg1); + updateChecking(); +} + +void FilterRules::updateChecking() +{ + QRegularExpression regex; + isValid=!ui->search->text().isEmpty(); + if(isValid) + { + QString tempString; + if(ui->search_type->currentIndex()==0) + { + tempString=QRegularExpression::escape(ui->search->text()); + if(tempString.contains('/') || tempString.contains('\\')) + isValid=false; + } + else if(ui->search_type->currentIndex()==1) + { + tempString=QRegularExpression::escape(ui->search->text()); + tempString.replace(QStringLiteral("\\*"),QStringLiteral("[^\\\\/]*")); + } + else if(ui->search_type->currentIndex()==2) + { + tempString=ui->search->text(); + if(tempString.startsWith('^') && tempString.endsWith('$')) + { + ui->need_match_all->setChecked(true); + tempString.remove(QRegularExpression(QStringLiteral("^\\^"))); + tempString.remove(QRegularExpression(QStringLiteral("\\$$"))); + ui->search->setText(tempString); + } + } + if(isValid) + { + if(ui->need_match_all->isChecked()) + tempString=QStringLiteral("^")+tempString+QStringLiteral("$"); + regex=QRegularExpression(tempString); + isValid=regex.isValid(); + } + } + + ui->isValid->setChecked(isValid); + ui->testString->setEnabled(isValid); + ui->label_test_string->setEnabled(isValid); + ui->matched->setEnabled(isValid); + ui->matched->setChecked(isValid && ui->testString->text().contains(regex)); + ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(isValid); +} + +void FilterRules::on_isValid_clicked() +{ + updateChecking(); +} + +void FilterRules::on_testString_textChanged(const std::string &arg1) +{ + Q_UNUSED(arg1); + updateChecking(); +} + +void FilterRules::on_matched_clicked() +{ + updateChecking(); +} + +void FilterRules::on_search_type_currentIndexChanged(int index) +{ + Q_UNUSED(index); + updateChecking(); +} + +void FilterRules::on_need_match_all_clicked() +{ + updateChecking(); +} + +void FilterRules::on_buttonBox_clicked(QAbstractButton *button) +{ + if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::RejectRole) + reject(); + else + { + haveBeenValided=true; + accept(); + } +} diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FilterRules.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FilterRules.h new file mode 100755 index 0000000..0838792 --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FilterRules.h @@ -0,0 +1,46 @@ +#ifndef FILTERRULES_H +#define FILTERRULES_H + +#include <QDialog> +#include <QAbstractButton> +#include <QPushButton> + +#include "StructEnumDefinition_CopyEngine.h" + +namespace Ui { +class FilterRules; +} + +/** All the filter rules to include/exclude some file during the listing */ +class FilterRules : public QDialog +{ + Q_OBJECT + +public: + explicit FilterRules(QWidget *parent = 0); + ~FilterRules(); + bool getIsValid(); + std::string get_search_text(); + SearchType get_search_type(); + ApplyOn get_apply_on(); + bool get_need_match_all(); + void set_search_text(std::string search_text); + void set_search_type(SearchType search_type); + void set_apply_on(ApplyOn apply_on); + void set_need_match_all(bool need_match_all); +private slots: + void on_search_textChanged(const std::string &arg1); + void on_isValid_clicked(); + void on_testString_textChanged(const std::string &arg1); + void on_matched_clicked(); + void on_search_type_currentIndexChanged(int index); + void on_need_match_all_clicked(); + void on_buttonBox_clicked(QAbstractButton *button); +private: + Ui::FilterRules *ui; + void updateChecking(); + bool isValid; + bool haveBeenValided; +}; + +#endif // FILTERRULES_H diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FilterRules.ui b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FilterRules.ui new file mode 100755 index 0000000..a4006fe --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FilterRules.ui @@ -0,0 +1,162 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>FilterRules</class> + <widget class="QDialog" name="FilterRules"> + <property name="windowModality"> + <enum>Qt::WindowModal</enum> + </property> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>289</width> + <height>231</height> + </rect> + </property> + <property name="windowTitle"> + <string>Filters dialog</string> + </property> + <property name="windowIcon"> + <iconset resource="copyEngineResources.qrc"> + <normaloff>:/CopyEngine/resources/resources/filter.png</normaloff>:/CopyEngine/resources/resources/filter.png</iconset> + </property> + <layout class="QGridLayout" name="gridLayout_2"> + <property name="margin"> + <number>1</number> + </property> + <property name="spacing"> + <number>1</number> + </property> + <item row="0" column="0"> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Search:</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLineEdit" name="search"/> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_3"> + <property name="text"> + <string>Search type:</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QComboBox" name="search_type"> + <item> + <property name="text"> + <string>Raw text</string> + </property> + </item> + <item> + <property name="text"> + <string>Simplified regex</string> + </property> + </item> + <item> + <property name="text"> + <string>Perl's regex</string> + </property> + </item> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>Apply on:</string> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QComboBox" name="apply_on"> + <item> + <property name="text"> + <string>File</string> + </property> + </item> + <item> + <property name="text"> + <string>Folder</string> + </property> + </item> + <item> + <property name="text"> + <string>File and folder</string> + </property> + </item> + </widget> + </item> + <item row="3" column="0" colspan="2"> + <widget class="QCheckBox" name="need_match_all"> + <property name="text"> + <string>Whole string must match</string> + </property> + </widget> + </item> + <item row="4" column="0" colspan="2"> + <widget class="QGroupBox" name="groupBoxChecking"> + <property name="title"> + <string>Checking</string> + </property> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0" colspan="2"> + <widget class="QCheckBox" name="isValid"> + <property name="text"> + <string>The regex is valid</string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_test_string"> + <property name="text"> + <string>Test string:</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QLineEdit" name="testString"/> + </item> + <item row="2" column="0" colspan="2"> + <widget class="QCheckBox" name="matched"> + <property name="text"> + <string>The test string matches with the regex</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="5" column="0" colspan="2"> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>68</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="standardButtons"> + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <resources> + <include location="copyEngineResources.qrc"/> + </resources> + <connections/> +</ui> diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Filters.cpp b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Filters.cpp new file mode 100755 index 0000000..c7b1526 --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Filters.cpp @@ -0,0 +1,460 @@ +#include "Filters.h" +#include "ui_Filters.h" +#include "../../../cpp11addition.h" + +#include <QRegularExpression> + +Filters::Filters(QWidget *parent) : + QDialog(parent), + ui(new Ui::Filters) +{ + ui->setupUi(this); +} + +Filters::~Filters() +{ + delete ui; +} + +void Filters::setFilters(std::vector<std::string> includeStrings,std::vector<std::string> includeOptions,std::vector<std::string> excludeStrings,std::vector<std::string> excludeOptions) +{ + if(includeStrings.size()!=includeOptions.size() || excludeStrings.size()!=excludeOptions.size()) + return; + Filters_rules new_item; + + include.clear(); + unsigned int index=0; + while(index<(unsigned int)includeStrings.size()) + { + new_item.search_text=includeStrings.at(index); + std::vector<std::string> options=stringsplit(includeOptions.at(index),';'); + new_item.need_match_all=false; + new_item.search_type=SearchType_rawText; + new_item.apply_on=ApplyOn_fileAndFolder; + + if(vectorcontainsAtLeastOne(options,std::string("SearchType_simpleRegex"))) + new_item.search_type=SearchType_simpleRegex; + if(vectorcontainsAtLeastOne(options,std::string("SearchType_perlRegex"))) + new_item.search_type=SearchType_perlRegex; + if(vectorcontainsAtLeastOne(options,std::string("ApplyOn_file"))) + new_item.apply_on=ApplyOn_file; + if(vectorcontainsAtLeastOne(options,std::string("ApplyOn_folder"))) + new_item.apply_on=ApplyOn_folder; + if(vectorcontainsAtLeastOne(options,std::string("need_match_all"))) + new_item.need_match_all=true; + + if(convertToRegex(new_item)) + include.push_back(new_item); + + index++; + } + + exclude.clear(); + index=0; + while(index<excludeStrings.size()) + { + new_item.search_text=excludeStrings.at(index); + std::vector<std::string> options=stringsplit(excludeOptions.at(index),';'); + new_item.need_match_all=false; + new_item.search_type=SearchType_rawText; + new_item.apply_on=ApplyOn_fileAndFolder; + + if(vectorcontainsAtLeastOne(options,std::string("SearchType_simpleRegex"))) + new_item.search_type=SearchType_simpleRegex; + if(vectorcontainsAtLeastOne(options,std::string("SearchType_perlRegex"))) + new_item.search_type=SearchType_perlRegex; + if(vectorcontainsAtLeastOne(options,std::string("ApplyOn_file"))) + new_item.apply_on=ApplyOn_file; + if(vectorcontainsAtLeastOne(options,std::string("ApplyOn_folder"))) + new_item.apply_on=ApplyOn_folder; + if(vectorcontainsAtLeastOne(options,std::string("need_match_all"))) + new_item.need_match_all=true; + + if(convertToRegex(new_item)) + exclude.push_back(new_item); + + index++; + } + + reShowAll(); +} + +void Filters::reShowAll() +{ + ui->inclusion->clear(); + unsigned int index=0; + while(index<(unsigned int)include.size()) + { + std::string entryShow=include.at(index).search_text+" ("; + std::vector<std::string> optionsToShow; + switch(include.at(index).search_type) + { + case SearchType_rawText: + optionsToShow.push_back(tr("Raw text").toStdString()); + break; + case SearchType_simpleRegex: + optionsToShow.push_back(tr("Simplified regex").toStdString()); + break; + case SearchType_perlRegex: + optionsToShow.push_back(tr("Perl's regex").toStdString()); + break; + default: + break; + } + switch(include.at(index).apply_on) + { + case ApplyOn_file: + optionsToShow.push_back(tr("Only on file").toStdString()); + break; + case ApplyOn_folder: + optionsToShow.push_back(tr("Only on folder").toStdString()); + break; + default: + break; + } + if(include.at(index).need_match_all) + optionsToShow.push_back(tr("Full match").toStdString()); + entryShow+=stringimplode(optionsToShow,","); + entryShow+=")"; + ui->inclusion->addItem(new QListWidgetItem(QString::fromStdString(entryShow))); + index++; + } + ui->exclusion->clear(); + index=0; + while(index<(unsigned int)exclude.size()) + { + std::string entryShow=exclude.at(index).search_text+" ("; + std::vector<std::string> optionsToShow; + switch(exclude.at(index).search_type) + { + case SearchType_rawText: + optionsToShow.push_back(tr("Raw text").toStdString()); + break; + case SearchType_simpleRegex: + optionsToShow.push_back(tr("Simplified regex").toStdString()); + break; + case SearchType_perlRegex: + optionsToShow.push_back(tr("Perl's regex").toStdString()); + break; + default: + break; + } + switch(exclude.at(index).apply_on) + { + case ApplyOn_file: + optionsToShow.push_back(tr("Only on file").toStdString()); + break; + case ApplyOn_folder: + optionsToShow.push_back(tr("Only on folder").toStdString()); + break; + default: + break; + } + if(exclude.at(index).need_match_all) + optionsToShow.push_back(tr("Full match").toStdString()); + entryShow+=stringimplode(optionsToShow,","); + entryShow+=")"; + ui->exclusion->addItem(new QListWidgetItem(QString::fromStdString(entryShow))); + index++; + } +} + +std::vector<Filters_rules> Filters::getInclude() const +{ + return include; +} + +std::vector<Filters_rules> Filters::getExclude() const +{ + return exclude; +} + +void Filters::newLanguageLoaded() +{ + ui->retranslateUi(this); + reShowAll(); +} + +void Filters::updateFilters() +{ + std::vector<std::string> includeStrings,includeOptions,excludeStrings,excludeOptions; + unsigned int index=0; + while(index<(unsigned int)include.size()) + { + includeStrings.push_back(include.at(index).search_text); + std::vector<std::string> optionsToShow; + + switch(include.at(index).search_type) + { + case SearchType_rawText: + optionsToShow.push_back("SearchType_rawText"); + break; + case SearchType_simpleRegex: + optionsToShow.push_back("SearchType_simpleRegex"); + break; + case SearchType_perlRegex: + optionsToShow.push_back("SearchType_perlRegex"); + break; + default: + break; + } + switch(include.at(index).apply_on) + { + case ApplyOn_file: + optionsToShow.push_back("ApplyOn_file"); + break; + case ApplyOn_fileAndFolder: + optionsToShow.push_back("ApplyOn_fileAndFolder"); + break; + case ApplyOn_folder: + optionsToShow.push_back("ApplyOn_folder"); + break; + default: + break; + } + if(include.at(index).need_match_all) + optionsToShow.push_back(tr("Full match").toStdString()); + includeOptions.push_back(stringimplode(optionsToShow,";")); + index++; + } + index=0; + while(index<(unsigned int)exclude.size()) + { + excludeStrings.push_back(exclude.at(index).search_text); + std::vector<std::string> optionsToShow; + + switch(exclude.at(index).search_type) + { + case SearchType_rawText: + optionsToShow.push_back("SearchType_rawText"); + break; + case SearchType_simpleRegex: + optionsToShow.push_back("SearchType_simpleRegex"); + break; + case SearchType_perlRegex: + optionsToShow.push_back("SearchType_perlRegex"); + break; + default: + break; + } + switch(exclude.at(index).apply_on) + { + case ApplyOn_file: + optionsToShow.push_back("ApplyOn_file"); + break; + case ApplyOn_fileAndFolder: + optionsToShow.push_back("ApplyOn_fileAndFolder"); + break; + case ApplyOn_folder: + optionsToShow.push_back("ApplyOn_folder"); + break; + default: + break; + } + if(exclude.at(index).need_match_all) + optionsToShow.push_back(tr("Full match").toStdString()); + excludeOptions.push_back(stringimplode(optionsToShow,";")); + index++; + } + emit sendNewFilters(includeStrings,includeOptions,excludeStrings,excludeOptions); + emit haveNewFilters(); +} + +bool Filters::convertToRegex(Filters_rules &item) +{ + bool isValid=!item.search_text.empty(); + if(isValid) + { + std::regex regex; + std::string tempString; + if(item.search_type==SearchType_rawText) + { + tempString=QRegularExpression::escape(QString::fromStdString(item.search_text)).toStdString(); + if(tempString.find('/') != std::string::npos || tempString.find('\\') != std::string::npos) + isValid=false; + } + else if(item.search_type==SearchType_simpleRegex) + { + tempString=QRegularExpression::escape(QString::fromStdString(item.search_text)).toStdString(); + stringreplaceAll(tempString,"\\*","[^\\\\/]*"); + } + else if(item.search_type==SearchType_perlRegex) + { + tempString=item.search_text; + if(stringStartWith(tempString,'^') && stringEndsWith(tempString,'$')) + { + item.need_match_all=true; + if(stringStartWith(tempString,'^')) + tempString=tempString.substr(1,tempString.size()-1); + if(stringEndsWith(tempString,'$')) + tempString=tempString.substr(0,tempString.size()-1); + item.search_text=tempString; + } + } + if(isValid) + { + if(item.need_match_all==true) + tempString="^"+tempString+"$"; + regex=std::regex(tempString); + //isValid=regex.isValid(); + item.regex=regex; + return true; + } + else + return false; + } + return false; +} + +void Filters::on_remove_exclusion_clicked() +{ + bool removedEntry=false; + int index=0; + while(index<ui->exclusion->count()) + { + if(ui->exclusion->item(index)->isSelected()) + { + delete ui->exclusion->item(index); + exclude.erase(exclude.cbegin()+index); + removedEntry=true; + } + else + index++; + } + if(removedEntry) + { + reShowAll(); + updateFilters(); + } +} + +void Filters::on_remove_inclusion_clicked() +{ + bool removedEntry=false; + int index=0; + while(index<ui->inclusion->count()) + { + if(ui->inclusion->item(index)->isSelected()) + { + delete ui->inclusion->item(index); + include.erase(include.cbegin()+index); + removedEntry=true; + } + else + index++; + } + if(removedEntry) + { + reShowAll(); + updateFilters(); + } +} + +void Filters::on_add_exclusion_clicked() +{ + FilterRules dialog(this); + dialog.exec(); + if(dialog.getIsValid()) + { + Filters_rules new_item; + new_item.apply_on=dialog.get_apply_on(); + new_item.need_match_all=dialog.get_need_match_all(); + new_item.search_text=dialog.get_search_text(); + new_item.search_type=dialog.get_search_type(); + exclude.push_back(new_item); + reShowAll(); + updateFilters(); + } +} + +void Filters::on_buttonBox_clicked(QAbstractButton *button) +{ + if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::RejectRole) + reject(); +} + +void Filters::on_add_inclusion_clicked() +{ + FilterRules dialog(this); + dialog.exec(); + if(dialog.getIsValid()) + { + Filters_rules new_item; + new_item.apply_on=dialog.get_apply_on(); + new_item.need_match_all=dialog.get_need_match_all(); + new_item.search_text=dialog.get_search_text(); + new_item.search_type=dialog.get_search_type(); + if(convertToRegex(new_item)) + include.push_back(new_item); + reShowAll(); + updateFilters(); + } +} + +void Filters::on_edit_exclusion_clicked() +{ + bool editedEntry=false; + int index=0; + while(index<ui->exclusion->count()) + { + if(ui->exclusion->item(index)->isSelected()) + { + FilterRules dialog(this); + dialog.set_apply_on(exclude.at(index).apply_on); + dialog.set_need_match_all(exclude.at(index).need_match_all); + dialog.set_search_text(exclude.at(index).search_text); + dialog.set_search_type(exclude.at(index).search_type); + dialog.exec(); + if(dialog.getIsValid()) + { + exclude[index].apply_on=dialog.get_apply_on(); + exclude[index].need_match_all=dialog.get_need_match_all(); + exclude[index].search_text=dialog.get_search_text(); + exclude[index].search_type=dialog.get_search_type(); + if(!convertToRegex(exclude[index])) + exclude.erase(exclude.cbegin()+index); + editedEntry=true; + } + } + index++; + } + if(editedEntry) + { + reShowAll(); + updateFilters(); + } +} + +void Filters::on_edit_inclusion_clicked() +{ + bool editedEntry=false; + int index=0; + while(index<ui->inclusion->count()) + { + if(ui->inclusion->item(index)->isSelected()) + { + FilterRules dialog(this); + dialog.set_apply_on(exclude.at(index).apply_on); + dialog.set_need_match_all(exclude.at(index).need_match_all); + dialog.set_search_text(exclude.at(index).search_text); + dialog.set_search_type(exclude.at(index).search_type); + dialog.exec(); + if(dialog.getIsValid()) + { + exclude[index].apply_on=dialog.get_apply_on(); + exclude[index].need_match_all=dialog.get_need_match_all(); + exclude[index].search_text=dialog.get_search_text(); + exclude[index].search_type=dialog.get_search_type(); + if(!convertToRegex(exclude[index])) + exclude.erase(exclude.cbegin()+index); + editedEntry=true; + } + } + index++; + } + if(editedEntry) + { + reShowAll(); + updateFilters(); + } +} diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Filters.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Filters.h new file mode 100755 index 0000000..6645afc --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Filters.h @@ -0,0 +1,45 @@ +#ifndef FILTERS_H +#define FILTERS_H + +#include <QDialog> +#include <QStringList> + +#include "FilterRules.h" +#include "StructEnumDefinition_CopyEngine.h" + +namespace Ui { +class Filters; +} + +/** To add/edit one filter rules */ +class Filters : public QDialog +{ + Q_OBJECT +public: + explicit Filters(QWidget *parent = 0); + ~Filters(); + void setFilters(std::vector<std::string> includeStrings, std::vector<std::string> includeOptions, std::vector<std::string> excludeStrings, std::vector<std::string> excludeOptions); + void reShowAll(); + std::vector<Filters_rules> getInclude() const; + std::vector<Filters_rules> getExclude() const; + void newLanguageLoaded(); +private: + Ui::Filters *ui; + std::vector<Filters_rules> include; + std::vector<Filters_rules> exclude; + void updateFilters(); + bool convertToRegex(Filters_rules &item); +signals: + void sendNewFilters(const std::vector<std::string> &includeStrings,const std::vector<std::string> &includeOptions,const std::vector<std::string> &excludeStrings,const std::vector<std::string> &excludeOptions) const; + void haveNewFilters() const; +private slots: + void on_remove_exclusion_clicked(); + void on_remove_inclusion_clicked(); + void on_add_exclusion_clicked(); + void on_buttonBox_clicked(QAbstractButton *button); + void on_add_inclusion_clicked(); + void on_edit_exclusion_clicked(); + void on_edit_inclusion_clicked(); +}; + +#endif // FILTERS_H diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Filters.ui b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Filters.ui new file mode 100755 index 0000000..33822af --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Filters.ui @@ -0,0 +1,194 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Filters</class> + <widget class="QDialog" name="Filters"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>507</width> + <height>502</height> + </rect> + </property> + <property name="windowTitle"> + <string>Filters</string> + </property> + <property name="windowIcon"> + <iconset resource="resources.qrc"> + <normaloff>:/CopyEngine/Ultracopier/resources/filter.png</normaloff>:/CopyEngine/Ultracopier/resources/filter.png</iconset> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>1</number> + </property> + <property name="margin"> + <number>1</number> + </property> + <item> + <widget class="QGroupBox" name="groupBox"> + <property name="title"> + <string>Exclusion filters</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <property name="spacing"> + <number>1</number> + </property> + <property name="margin"> + <number>2</number> + </property> + <item> + <widget class="QListWidget" name="exclusion"> + <property name="selectionMode"> + <enum>QAbstractItemView::MultiSelection</enum> + </property> + </widget> + </item> + <item> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <widget class="QToolButton" name="add_exclusion"> + <property name="icon"> + <iconset resource="resources.qrc"> + <normaloff>:/CopyEngine/Ultracopier/resources/add.png</normaloff>:/CopyEngine/Ultracopier/resources/add.png</iconset> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="edit_exclusion"> + <property name="icon"> + <iconset resource="resources.qrc"> + <normaloff>:/CopyEngine/Ultracopier/resources/edit.png</normaloff>:/CopyEngine/Ultracopier/resources/edit.png</iconset> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="remove_exclusion"> + <property name="icon"> + <iconset resource="resources.qrc"> + <normaloff>:/CopyEngine/Ultracopier/resources/remove.png</normaloff>:/CopyEngine/Ultracopier/resources/remove.png</iconset> + </property> + </widget> + </item> + <item> + <spacer name="verticalSpacer_2"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QGroupBox" name="groupBox_2"> + <property name="title"> + <string>Inclusion filters</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_4"> + <property name="spacing"> + <number>1</number> + </property> + <property name="margin"> + <number>2</number> + </property> + <item> + <widget class="QLabel" name="label"> + <property name="text"> + <string>None = Include all</string> + </property> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QListWidget" name="inclusion"> + <property name="selectionMode"> + <enum>QAbstractItemView::MultiSelection</enum> + </property> + </widget> + </item> + <item> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <item> + <widget class="QToolButton" name="add_inclusion"> + <property name="icon"> + <iconset resource="resources.qrc"> + <normaloff>:/CopyEngine/Ultracopier/resources/add.png</normaloff>:/CopyEngine/Ultracopier/resources/add.png</iconset> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="edit_inclusion"> + <property name="icon"> + <iconset resource="resources.qrc"> + <normaloff>:/CopyEngine/Ultracopier/resources/edit.png</normaloff>:/CopyEngine/Ultracopier/resources/edit.png</iconset> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="remove_inclusion"> + <property name="icon"> + <iconset resource="resources.qrc"> + <normaloff>:/CopyEngine/Ultracopier/resources/remove.png</normaloff>:/CopyEngine/Ultracopier/resources/remove.png</iconset> + </property> + </widget> + </item> + <item> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + </layout> + </item> + </layout> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="standardButtons"> + <set>QDialogButtonBox::Cancel</set> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <resources> + <include location="resources.qrc"/> + </resources> + <connections/> +</ui> diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FolderExistsDialog.cpp b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FolderExistsDialog.cpp new file mode 100755 index 0000000..59466ed --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FolderExistsDialog.cpp @@ -0,0 +1,202 @@ +#include "FolderExistsDialog.h" +#include "ui_folderExistsDialog.h" +#include "TransferThread.h" + +#ifdef Q_OS_WIN32 +#define CURRENTSEPARATOR "\\" +#else +#define CURRENTSEPARATOR "/" +#endif + +#include <QMessageBox> +#include <QFileInfo> +#include <QMessageBox> + +FolderExistsDialog::FolderExistsDialog(QWidget *parent, QFileInfo source, bool isSame, QFileInfo destination, std::string firstRenamingRule, std::string otherRenamingRule) : + QDialog(parent), + ui(new Ui::folderExistsDialog) +{ + Qt::WindowFlags flags = windowFlags(); + #ifdef Q_OS_LINUX + flags=flags & ~Qt::X11BypassWindowManagerHint; + #endif + flags=flags | Qt::WindowStaysOnTopHint; + setWindowFlags(flags); + + ui->setupUi(this); + action=FolderExists_Cancel; + oldName=TransferThread::resolvedName(destination); + ui->lineEditNewName->setText(QString::fromStdString(oldName)); + ui->lineEditNewName->setPlaceholderText(QString::fromStdString(oldName)); + ui->label_content_source_modified->setText(source.lastModified().toString()); + ui->label_content_source_folder_name->setText(source.fileName()); + QString folder=source.absolutePath(); + if(folder.size()>80) + folder=folder.mid(0,38)+"..."+folder.mid(folder.size()-38); + ui->label_content_source_folder->setText(folder); + if(ui->label_content_source_folder_name->text().isEmpty()) + { + ui->label_source_folder_name->hide(); + ui->label_content_source_folder_name->hide(); + } + if(isSame) + { + this->destinationInfo=source; + ui->label_source->hide(); + ui->label_destination->hide(); + ui->label_destination_modified->hide(); + ui->label_destination_folder_name->hide(); + ui->label_destination_folder->hide(); + ui->label_content_destination_modified->hide(); + ui->label_content_destination_folder_name->hide(); + ui->label_content_destination_folder->hide(); + } + else + { + this->destinationInfo=destination; + this->setWindowTitle(tr("Folder already exists")); + ui->label_content_destination_modified->setText(destination.lastModified().toString()); + ui->label_content_destination_folder_name->setText(destination.fileName()); + QString folder=destination.absolutePath(); + if(folder.size()>80) + folder=folder.mid(0,38)+"..."+folder.mid(folder.size()-38); + ui->label_content_destination_folder->setText(folder); + if(ui->label_content_destination_folder_name->text().isEmpty()) + { + ui->label_destination_folder_name->hide(); + ui->label_content_destination_folder_name->hide(); + } + } + this->firstRenamingRule=firstRenamingRule; + this->otherRenamingRule=otherRenamingRule; + on_SuggestNewName_clicked(); +} + +FolderExistsDialog::~FolderExistsDialog() +{ + delete ui; +} + +void FolderExistsDialog::changeEvent(QEvent *e) +{ + QDialog::changeEvent(e); + switch (e->type()) { + case QEvent::LanguageChange: + ui->retranslateUi(this); + break; + default: + break; + } +} + +std::string FolderExistsDialog::getNewName() +{ + if(oldName==ui->lineEditNewName->text().toStdString() || ui->checkBoxAlways->isChecked()) + return ""; + else + return ui->lineEditNewName->text().toStdString(); +} + +void FolderExistsDialog::on_SuggestNewName_clicked() +{ + QFileInfo destinationInfo=this->destinationInfo; + QString absolutePath=destinationInfo.absolutePath(); + QString fileName=QString::fromStdString(TransferThread::resolvedName(destinationInfo)); + QString suffix; + QString destination; + QString newFileName; + //resolv the suffix + if(fileName.contains(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$")))) + { + suffix=fileName; + suffix.replace(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$")),QStringLiteral("\\2")); + fileName.replace(QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$")),QStringLiteral("\\1")); + } + //resolv the new name + int num=1; + do + { + if(num==1) + { + if(firstRenamingRule.empty()) + newFileName=tr("%name% - copy"); + else + { + newFileName=QString::fromStdString(firstRenamingRule); + } + } + else + { + if(otherRenamingRule.empty()) + newFileName=tr("%name% - copy (%number%)"); + else + newFileName=QString::fromStdString(otherRenamingRule); + newFileName.replace(QStringLiteral("%number%"),QString::number(num)); + } + newFileName.replace(QStringLiteral("%name%"),fileName); + destination=absolutePath+CURRENTSEPARATOR+newFileName+suffix; + destinationInfo.setFile(destination); + num++; + } + while(destinationInfo.exists()); + ui->lineEditNewName->setText(newFileName); +} + +void FolderExistsDialog::on_Rename_clicked() +{ + action=FolderExists_Rename; + this->close(); +} + +void FolderExistsDialog::on_Skip_clicked() +{ + action=FolderExists_Skip; + this->close(); +} + +void FolderExistsDialog::on_Cancel_clicked() +{ + action=FolderExists_Cancel; + this->close(); +} + +FolderExistsAction FolderExistsDialog::getAction() +{ + return action; +} + +bool FolderExistsDialog::getAlways() +{ + return ui->checkBoxAlways->isChecked(); +} + +void FolderExistsDialog::on_Merge_clicked() +{ + action=FolderExists_Merge; + this->close(); +} + +void FolderExistsDialog::on_lineEditNewName_editingFinished() +{ + updateRenameButton(); +} + +void FolderExistsDialog::on_lineEditNewName_returnPressed() +{ + updateRenameButton(); + if(ui->Rename->isEnabled()) + on_Rename_clicked(); + else + QMessageBox::warning(this,tr("Error"),tr("Try rename with using special characters")); +} + +void FolderExistsDialog::on_lineEditNewName_textChanged(const std::string &arg1) +{ + Q_UNUSED(arg1); + updateRenameButton(); +} + +void FolderExistsDialog::updateRenameButton() +{ + ui->Rename->setEnabled(ui->checkBoxAlways->isChecked() || (!ui->lineEditNewName->text().contains(QRegularExpression("[/\\\\\\*]")) && oldName!=ui->lineEditNewName->text().toStdString() && !ui->lineEditNewName->text().isEmpty())); +} diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FolderExistsDialog.h b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FolderExistsDialog.h new file mode 100755 index 0000000..a3bcf67 --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/FolderExistsDialog.h @@ -0,0 +1,57 @@ +/** \file folderExistsDialog.h +\brief Define the dialog when file exists +\author alpha_one_x86 +\licence GPL3, see the file COPYING */ + +#ifndef FOLDERISSAMEDIALOG_H +#define FOLDERISSAMEDIALOG_H + +#include <QDialog> +#include <QFileInfo> +#include <QString> +#include <QDateTime> +#include <QDir> + +#include "Environment.h" + +namespace Ui { + class folderExistsDialog; +} + +/// \brief to show file exists dialog, and ask what do +class FolderExistsDialog : public QDialog +{ + Q_OBJECT + +public: + /// \brief create the object and pass all the informations to it + explicit FolderExistsDialog(QWidget *parent,QFileInfo source,bool isSame,QFileInfo destination,std::string firstRenamingRule,std::string otherRenamingRule); + ~FolderExistsDialog(); + /// \brief return the the always checkbox is checked + bool getAlways(); + /// \brief return the action clicked + FolderExistsAction getAction(); + /// \brief return the new rename is case in manual renaming + std::string getNewName(); +protected: + void changeEvent(QEvent *e); +private slots: + void updateRenameButton(); + void on_SuggestNewName_clicked(); + void on_Rename_clicked(); + void on_Skip_clicked(); + void on_Cancel_clicked(); + void on_Merge_clicked(); + void on_lineEditNewName_editingFinished(); + void on_lineEditNewName_returnPressed(); + void on_lineEditNewName_textChanged(const std::string &arg1); +private: + Ui::folderExistsDialog *ui; + FolderExistsAction action; + std::string oldName; + std::string firstRenamingRule; + std::string otherRenamingRule; + QFileInfo destinationInfo; +}; + +#endif // FOLDERISSAMEDIALOG_H diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/ar/translation.qm b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/ar/translation.qm Binary files differnew file mode 100755 index 0000000..3738845 --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/ar/translation.qm diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/ar/translation.ts b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/ar/translation.ts new file mode 100755 index 0000000..e0764bb --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/ar/translation.ts @@ -0,0 +1,1291 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1"> +<context> + <name>AvancedQFile</name> + <message> + <location filename="../../AvancedQFile.cpp" line="26"/> + <location filename="../../AvancedQFile.cpp" line="57"/> + <location filename="../../AvancedQFile.cpp" line="88"/> + <source>Not supported on this platform</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="40"/> + <source>Last modified date is wrong</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="71"/> + <source>Last access date is wrong</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="121"/> + <source>Unknown error: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="187"/> + <source>Unknown error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="133"/> + <source>Path conversion error</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>CopyEngine</name> + <message> + <location filename="../../CopyEngine.cpp" line="437"/> + <location filename="../../CopyEngine.cpp" line="459"/> + <source>The engine is forced to move, you can't copy with it</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="470"/> + <location filename="../../CopyEngine.cpp" line="492"/> + <source>The engine is forced to copy, you can't move with it</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="516"/> + <source>Destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="516"/> + <source>Use the actual destination "%1"?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="740"/> + <source>The mode has been forced previously. This is an internal error, please report it</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1070"/> + <location filename="../../CopyEngine.cpp" line="1073"/> + <location filename="../../CopyEngine.cpp" line="1078"/> + <location filename="../../CopyEngine.cpp" line="1082"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1071"/> + <location filename="../../CopyEngine.cpp" line="1075"/> + <location filename="../../CopyEngine.cpp" line="1079"/> + <location filename="../../CopyEngine.cpp" line="1083"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1074"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1076"/> + <location filename="../../CopyEngine.cpp" line="1088"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1080"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1084"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1085"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1086"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1087"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1090"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1091"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1092"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1193"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1193"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>CopyEngineFactory</name> + <message> + <location filename="../../CopyEngineFactory.cpp" line="433"/> + <location filename="../../CopyEngineFactory.cpp" line="436"/> + <location filename="../../CopyEngineFactory.cpp" line="441"/> + <location filename="../../CopyEngineFactory.cpp" line="445"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="434"/> + <location filename="../../CopyEngineFactory.cpp" line="438"/> + <location filename="../../CopyEngineFactory.cpp" line="442"/> + <location filename="../../CopyEngineFactory.cpp" line="446"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="437"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="439"/> + <location filename="../../CopyEngineFactory.cpp" line="451"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="443"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="447"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="448"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="449"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="450"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="453"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="454"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="455"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="506"/> + <location filename="../../CopyEngineFactory.cpp" line="545"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="506"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="545"/> + <source>Options engine is not loaded, can't access to the filters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>DiskSpace</name> + <message> + <location filename="../../DiskSpace.ui" line="14"/> + <source>Disk space</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../DiskSpace.ui" line="24"/> + <source>You need more space on this drive to finish this transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../DiskSpace.ui" line="49"/> + <source>Continue</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../DiskSpace.ui" line="56"/> + <source>Cancel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../DiskSpace.cpp" line="23"/> + <source>Drives %1 have %2 available but need %3</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FileErrorDialog</name> + <message> + <location filename="../../FileErrorDialog.cpp" line="54"/> + <source>Error on folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileErrorDialog.cpp" line="57"/> + <source>Folder name</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FileExistsDialog</name> + <message> + <location filename="../../FileExistsDialog.cpp" line="137"/> + <source>%name% - copy%suffix%</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="144"/> + <source>%name% - copy (%number%)%suffix%</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="228"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="228"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FileIsSameDialog</name> + <message> + <location filename="../../FileIsSameDialog.cpp" line="111"/> + <source>%name% - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="118"/> + <source>%name% - copy (%number%)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="184"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="184"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FilterRules</name> + <message> + <location filename="../../FilterRules.ui" line="33"/> + <source>Search:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="43"/> + <source>Search type:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="51"/> + <source>Raw text</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="56"/> + <source>Simplified regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="61"/> + <source>Perl's regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="69"/> + <source>Apply on:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="77"/> + <source>File</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="82"/> + <source>Folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="87"/> + <source>File and folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="125"/> + <source>The test string matches with the regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="102"/> + <source>Checking</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="115"/> + <source>Test string:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="17"/> + <source>Filters dialog</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="95"/> + <source>Whole string must match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="108"/> + <source>The regex is valid</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>Filters</name> + <message> + <location filename="../../Filters.ui" line="14"/> + <source>Filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.ui" line="30"/> + <source>Exclusion filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.ui" line="93"/> + <source>Inclusion filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.ui" line="105"/> + <source>None = Include all</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="93"/> + <location filename="../../Filters.cpp" line="131"/> + <source>Raw text</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="96"/> + <location filename="../../Filters.cpp" line="134"/> + <source>Simplified regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="99"/> + <location filename="../../Filters.cpp" line="137"/> + <source>Perl's regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="107"/> + <location filename="../../Filters.cpp" line="145"/> + <source>Only on file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="110"/> + <location filename="../../Filters.cpp" line="148"/> + <source>Only on folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="116"/> + <location filename="../../Filters.cpp" line="154"/> + <location filename="../../Filters.cpp" line="216"/> + <location filename="../../Filters.cpp" line="255"/> + <source>Full match</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FolderExistsDialog</name> + <message> + <location filename="../../FolderExistsDialog.cpp" line="57"/> + <source>Folder already exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="122"/> + <source>%name% - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="131"/> + <source>%name% - copy (%number%)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="190"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="190"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ListThread</name> + <message> + <location filename="../../ListThread.cpp" line="1490"/> + <location filename="../../ListThread.cpp" line="2422"/> + <source>Unable do to move or copy item into wrong forced mode: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1497"/> + <location filename="../../ListThread.cpp" line="2429"/> + <source>Unable to save the transfer list: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1513"/> + <source>Problem reading file, or file-size is 0</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1520"/> + <source>Wrong header: "%1"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1529"/> + <source>The transfer list is in mixed mode, but this instance is not in this mode</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1538"/> + <source>The transfer list is in copy mode, but this instance is not in this mode</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1544"/> + <source>The transfer list is in move mode, but this instance is not in this mode</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1607"/> + <source>Some errors have been found during the line parsing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1615"/> + <source>Unable to open the transfer list: %1</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>MkPath</name> + <message> + <location filename="../../MkPath.cpp" line="142"/> + <source>Unable to create the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="155"/> + <source>The source folder don't exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="183"/> + <source>Unable to temporary rename the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="206"/> + <source>Unable to do the final real move the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="233"/> + <source>Unable to move the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="93"/> + <location filename="../../MkPath.cpp" line="276"/> + <source>Unable to remove</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ReadThread</name> + <message> + <location filename="../../ReadThread.cpp" line="59"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="188"/> + <source>Internal error reading the source file:block size out of range</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="196"/> + <location filename="../../ReadThread.cpp" line="422"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="237"/> + <location filename="../../ReadThread.cpp" line="470"/> + <source>File truncated during the read, possible data change</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>RenamingRules</name> + <message> + <location filename="../../RenamingRules.ui" line="35"/> + <source>First renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="41"/> + <source>%name% - copy%suffix%</source> + <extracomment>%name% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="57"/> + <source>%name% - copy (%number%)%suffix%</source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="67"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name, <span style=" font-weight:600;">%number%</span> for the extra number, <span style=" font-weight:600;">%suffix%</span> file suffix</p></body></html></source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="51"/> + <source>Second renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="14"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="39"/> + <location filename="../../RenamingRules.cpp" line="62"/> + <source>%1 - copy%2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="43"/> + <location filename="../../RenamingRules.cpp" line="73"/> + <source>%1 - copy (%2)%3</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ScanFileOrFolder</name> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="274"/> + <source>Blacklisted folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="338"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="345"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="401"/> + <source>%name% - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="408"/> + <source>%name% - copy (%number%)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="444"/> + <source>This is not a folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="446"/> + <source>The folder does exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="448"/> + <source>The folder is not readable</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="459"/> + <source>Problem with name encoding</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TransferThread</name> + <message> + <location filename="../../TransferThread.cpp" line="244"/> + <location filename="../../TransferThread.cpp" line="673"/> + <location filename="../../TransferThread.cpp" line="745"/> + <location filename="../../TransferThread.cpp" line="1315"/> + <source>File not found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="346"/> + <location filename="../../TransferThread.cpp" line="363"/> + <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="421"/> + <location filename="../../TransferThread.cpp" line="444"/> + <source>Internal error: Already opening</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="586"/> + <source>Drive %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="588"/> + <source>Unknown folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="592"/> + <source>root</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="645"/> + <source>%name% - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="652"/> + <source>%name% - copy (%number%)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="711"/> + <location filename="../../TransferThread.cpp" line="826"/> + <source>The source file doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="751"/> + <location filename="../../TransferThread.cpp" line="838"/> + <source>Unable to do the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="787"/> + <source>The source doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="832"/> + <source>Another file exists at same place</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1134"/> + <source>The checksums do not match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1224"/> + <source>Internal error: The destination is not closed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1239"/> + <source>Internal error: The size transfered doesn't match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1250"/> + <source>Internal error: The buffer is not empty</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1315"/> + <location filename="../../TransferThread.cpp" line="1333"/> + <location filename="../../TransferThread.cpp" line="1348"/> + <source>Unable to change the date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="228"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>WriteThread</name> + <message> + <location filename="../../WriteThread.cpp" line="83"/> + <source>Path resolution error (Empty path)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="277"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="680"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="705"/> + <source>File truncated during read, possible data change</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>copyEngineOptions</name> + <message> + <location filename="../../copyEngineOptions.ui" line="44"/> + <source>Transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="53"/> + <source>Move the whole folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="60"/> + <source>Transfer the file rights</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="70"/> + <source>Keep the file date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="83"/> + <source>Autostart the transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="90"/> + <location filename="../../copyEngineOptions.ui" line="110"/> + <source>Less performance if checked</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="113"/> + <source>Follow the strict order</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="139"/> + <source>Error and collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="145"/> + <source>When folder error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="155"/> + <source>When file error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="181"/> + <source>When file collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="241"/> + <source>When folder collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="272"/> + <source>Check if destination folder exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="279"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="299"/> + <source>Delete partially transferred files</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="312"/> + <source>Rename the original destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="343"/> + <source>Control</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="349"/> + <source>Checksum</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="358"/> + <source>Only after error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="365"/> + <source>Ignore if impossible</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="382"/> + <source>Verify checksums</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="414"/> + <source>Performance</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="420"/> + <source>Parallel buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="427"/> + <location filename="../../copyEngineOptions.ui" line="440"/> + <location filename="../../copyEngineOptions.ui" line="453"/> + <location filename="../../copyEngineOptions.ui" line="490"/> + <location filename="../../copyEngineOptions.ui" line="559"/> + <source>KB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="469"/> + <source>Block size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="476"/> + <source>Sequential buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="483"/> + <source>Enable OS buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="506"/> + <source>OS buffer only if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="513"/> + <source>Transfer algorithm</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="552"/> + <source>Parallelize if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="582"/> + <source>Inode threads (unsafe > 1)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="589"/> + <location filename="../../copyEngineOptions.ui" line="599"/> + <source>More cpu, but better organisation on the disk</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="602"/> + <source>Order the list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="618"/> + <source>Misc</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="624"/> + <source>Check the disk space</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="634"/> + <source>Use this folder when destination is not set</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="646"/> + <source>Browse</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="668"/> + <source>Filters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>fileErrorDialog</name> + <message> + <location filename="../../fileErrorDialog.ui" line="14"/> + <source>Error with file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="20"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="59"/> + <source>Size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="76"/> + <source>Modified</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="93"/> + <source>File name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="110"/> + <source>Destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="127"/> + <source>Folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="173"/> + <source>&Always perform this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="193"/> + <source>Try in with elevated privileges</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="200"/> + <source>Put to bottom</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="207"/> + <source>Retry</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="214"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="221"/> + <source>&Cancel</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>fileExistsDialog</name> + <message> + <location filename="../../fileExistsDialog.ui" line="14"/> + <source>The file exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="34"/> + <source>Source</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="50"/> + <source>Destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="82"/> + <location filename="../../fileExistsDialog.ui" line="170"/> + <source>Size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="99"/> + <location filename="../../fileExistsDialog.ui" line="187"/> + <source>Modified</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="116"/> + <location filename="../../fileExistsDialog.ui" line="204"/> + <source>File name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="133"/> + <location filename="../../fileExistsDialog.ui" line="221"/> + <source>Folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="277"/> + <source>Suggest new &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="288"/> + <source>&Always perform this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="346"/> + <location filename="../../fileExistsDialog.ui" line="349"/> + <source>Overwrite if modification date differs</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="308"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="315"/> + <source>&Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="325"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="332"/> + <source>&Cancel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="341"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="354"/> + <location filename="../../fileExistsDialog.ui" line="357"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>fileIsSameDialog</name> + <message> + <location filename="../../fileIsSameDialog.ui" line="40"/> + <source>Size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="110"/> + <source>Modified</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="70"/> + <source>File name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="14"/> + <source>The source and destination are same</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="90"/> + <source>Folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="159"/> + <source>Suggest new &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="170"/> + <source>&Always perform this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="190"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="197"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="204"/> + <source>&Cancel</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>folderExistsDialog</name> + <message> + <location filename="../../folderExistsDialog.ui" line="34"/> + <source>Source</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="50"/> + <source>Destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="14"/> + <source>The source and destination is identical</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="82"/> + <location filename="../../folderExistsDialog.ui" line="150"/> + <source>Modified</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="99"/> + <location filename="../../folderExistsDialog.ui" line="160"/> + <source>Folder name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="116"/> + <location filename="../../folderExistsDialog.ui" line="184"/> + <source>Folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="227"/> + <source>Suggest new &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="238"/> + <source>&Always perform this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="245"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="252"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="259"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="266"/> + <source>&Cancel</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/de/translation.qm b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/de/translation.qm Binary files differnew file mode 100755 index 0000000..a9f1ba4 --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/de/translation.qm diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/de/translation.ts b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/de/translation.ts new file mode 100644 index 0000000..b8450f4 --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/de/translation.ts @@ -0,0 +1,1292 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="de" sourcelanguage="en"> +<context> + <name>AvancedQFile</name> + <message> + <location filename="../../AvancedQFile.cpp" line="26"/> + <location filename="../../AvancedQFile.cpp" line="57"/> + <location filename="../../AvancedQFile.cpp" line="88"/> + <source>Not supported on this platform</source> + <translation>Wird auf dieser Plattform nicht unterstützt</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="40"/> + <source>Last modified date is wrong</source> + <translation>Letztes Änderungsdatum ist falsch</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="71"/> + <source>Last access date is wrong</source> + <translatorcomment> </translatorcomment> + <translation>Letztes Zugriffsdatum ist falsch</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="121"/> + <source>Unknown error: %1</source> + <translation>Unbekannter Fehler: %1</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="187"/> + <source>Unknown error</source> + <translation>Unbekannter Fehler</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="133"/> + <source>Path conversion error</source> + <translation>Pfad Konvertierungsfehler</translation> + </message> +</context> +<context> + <name>CopyEngine</name> + <message> + <location filename="../../CopyEngine.cpp" line="437"/> + <location filename="../../CopyEngine.cpp" line="459"/> + <source>The engine is forced to move, you can't copy with it</source> + <translation>Verschiebemodus - Sie können nicht kopieren</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="470"/> + <location filename="../../CopyEngine.cpp" line="492"/> + <source>The engine is forced to copy, you can't move with it</source> + <translation>Kopiermodus - Sie können nicht verschieben</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="516"/> + <source>Destination</source> + <translation>Ziel</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="516"/> + <source>Use the actual destination "%1"?</source> + <translation>Aktuelles Ziel: "%1" benutzen?</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="740"/> + <source>The mode has been forced previously. This is an internal error, please report it</source> + <translation>Der Modus wurde vorher erzwungen. Interner Fehler - Bitte bei mir melden</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1070"/> + <location filename="../../CopyEngine.cpp" line="1073"/> + <location filename="../../CopyEngine.cpp" line="1078"/> + <location filename="../../CopyEngine.cpp" line="1082"/> + <source>Ask</source> + <translation>Fragen</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1071"/> + <location filename="../../CopyEngine.cpp" line="1075"/> + <location filename="../../CopyEngine.cpp" line="1079"/> + <location filename="../../CopyEngine.cpp" line="1083"/> + <source>Skip</source> + <translation>Überspringen</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1074"/> + <source>Merge</source> + <translation>Zusammenfassen</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1076"/> + <location filename="../../CopyEngine.cpp" line="1088"/> + <source>Rename</source> + <translation>Umbenennen</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1080"/> + <source>Put at the end</source> + <translation>Ans Ende verschieben</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1084"/> + <source>Overwrite</source> + <translation>Überschreiben</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1085"/> + <source>Overwrite if different</source> + <translation>Überschreiben, falls verschieden</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1086"/> + <source>Overwrite if newer</source> + <translation>Überschreiben, falls neuer</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1087"/> + <source>Overwrite if older</source> + <translation>Überschreiben, falls älter</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1090"/> + <source>Automatic</source> + <translation>Automatisch</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1091"/> + <source>Sequential</source> + <translation>Sequentiell</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1092"/> + <source>Parallel</source> + <translation>Parallel</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1193"/> + <source>Options error</source> + <translation>Fehlerhafte Optionen</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1193"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation>Optionen nicht geladen - Kein Zugriff auf Filter</translation> + </message> +</context> +<context> + <name>CopyEngineFactory</name> + <message> + <location filename="../../CopyEngineFactory.cpp" line="433"/> + <location filename="../../CopyEngineFactory.cpp" line="436"/> + <location filename="../../CopyEngineFactory.cpp" line="441"/> + <location filename="../../CopyEngineFactory.cpp" line="445"/> + <source>Ask</source> + <translation>Fragen</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="434"/> + <location filename="../../CopyEngineFactory.cpp" line="438"/> + <location filename="../../CopyEngineFactory.cpp" line="442"/> + <location filename="../../CopyEngineFactory.cpp" line="446"/> + <source>Skip</source> + <translation>Überspringen</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="437"/> + <source>Merge</source> + <translation>Zusammenfassen</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="439"/> + <location filename="../../CopyEngineFactory.cpp" line="451"/> + <source>Rename</source> + <translation>Umbenennen</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="443"/> + <source>Put at the end</source> + <translation>Ans Ende verschieben</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="447"/> + <source>Overwrite</source> + <translation>Überschreiben</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="448"/> + <source>Overwrite if different</source> + <translation>Überschreiben, falls verschieden</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="449"/> + <source>Overwrite if newer</source> + <translation>Überschreiben, falls neuer</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="450"/> + <source>Overwrite if older</source> + <translation>Überschreiben, falls älter</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="453"/> + <source>Automatic</source> + <translation>Automatisch</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="454"/> + <source>Sequential</source> + <translation>Sequentiell</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="455"/> + <source>Parallel</source> + <translation>Parallel</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="506"/> + <location filename="../../CopyEngineFactory.cpp" line="545"/> + <source>Options error</source> + <translation>Fehlerhafte Optionen</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="506"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation>Option nicht geladen - Kein Zugriff auf Filter</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="545"/> + <source>Options engine is not loaded, can't access to the filters</source> + <translation>Option nicht geladen - Kann nicht auf Filter zugreifen</translation> + </message> +</context> +<context> + <name>DiskSpace</name> + <message> + <location filename="../../DiskSpace.ui" line="14"/> + <source>Disk space</source> + <translation>Speicherplatz</translation> + </message> + <message> + <location filename="../../DiskSpace.ui" line="24"/> + <source>You need more space on this drive to finish this transfer</source> + <translation>Zu wenig Speicherplatz auf diesem Laufwerk</translation> + </message> + <message> + <location filename="../../DiskSpace.ui" line="49"/> + <source>Continue</source> + <translation>Fortsetzen</translation> + </message> + <message> + <location filename="../../DiskSpace.ui" line="56"/> + <source>Cancel</source> + <translation>Abbrechen</translation> + </message> + <message> + <location filename="../../DiskSpace.cpp" line="23"/> + <source>Drives %1 have %2 available but need %3</source> + <translation>Laufwerk %1: %2 verfügbar %3 benötigt</translation> + </message> +</context> +<context> + <name>FileErrorDialog</name> + <message> + <location filename="../../FileErrorDialog.cpp" line="54"/> + <source>Error on folder</source> + <translation>Ordnerfehler</translation> + </message> + <message> + <location filename="../../FileErrorDialog.cpp" line="57"/> + <source>Folder name</source> + <translation>Ordnername</translation> + </message> +</context> +<context> + <name>FileExistsDialog</name> + <message> + <location filename="../../FileExistsDialog.cpp" line="137"/> + <source>%name% - copy%suffix%</source> + <translation>%name% - Kopie%suffix%</translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="144"/> + <source>%name% - copy (%number%)%suffix%</source> + <translation>%name% - Kopie (%number%)%suffix%</translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="228"/> + <source>Error</source> + <translation>Fehler</translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="228"/> + <source>Try rename with using special characters</source> + <translation>Versuche Umbenennung mit Sonderzeichen</translation> + </message> +</context> +<context> + <name>FileIsSameDialog</name> + <message> + <location filename="../../FileIsSameDialog.cpp" line="111"/> + <source>%name% - copy</source> + <translation>%name% - Kopie</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="118"/> + <source>%name% - copy (%number%)</source> + <translation>%name% - Kopie (%number%)</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="184"/> + <source>Error</source> + <translation>Fehler</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="184"/> + <source>Try rename with using special characters</source> + <translation>Versuche Umbenennung mit Sonderzeichen</translation> + </message> +</context> +<context> + <name>FilterRules</name> + <message> + <location filename="../../FilterRules.ui" line="33"/> + <source>Search:</source> + <translation>Suche:</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="43"/> + <source>Search type:</source> + <translation>Suche (Typ):</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="51"/> + <source>Raw text</source> + <translation>Roh-Text</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="56"/> + <source>Simplified regex</source> + <translation>Vereinfachte RegEx</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="61"/> + <source>Perl's regex</source> + <translation>Perls RegEx</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="69"/> + <source>Apply on:</source> + <translation>Anwenden auf:</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="77"/> + <source>File</source> + <translation>Datei</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="82"/> + <source>Folder</source> + <translation>Ordner</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="87"/> + <source>File and folder</source> + <translation>Datei und Ordner</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="125"/> + <source>The test string matches with the regex</source> + <translation>Die Test-Zeichenfolge stimmt mit RegEx überein</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="102"/> + <source>Checking</source> + <translation>Überprüfen</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="115"/> + <source>Test string:</source> + <translation>Test-Zeichenfolge:</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="17"/> + <source>Filters dialog</source> + <translation>Filter-Dialog</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="95"/> + <source>Whole string must match</source> + <translation>Ganze Zeichenfolge muss übereinstimmen</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="108"/> + <source>The regex is valid</source> + <translation>Die RegEx ist gültig</translation> + </message> +</context> +<context> + <name>Filters</name> + <message> + <location filename="../../Filters.ui" line="14"/> + <source>Filters</source> + <translation>Filter</translation> + </message> + <message> + <location filename="../../Filters.ui" line="30"/> + <source>Exclusion filters</source> + <translation>Ausschließen Filter</translation> + </message> + <message> + <location filename="../../Filters.ui" line="93"/> + <source>Inclusion filters</source> + <translation>Einschließen Filter</translation> + </message> + <message> + <location filename="../../Filters.ui" line="105"/> + <source>None = Include all</source> + <translation>Keiner = Alle einschließen</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="93"/> + <location filename="../../Filters.cpp" line="131"/> + <source>Raw text</source> + <translation>Roh-Text</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="96"/> + <location filename="../../Filters.cpp" line="134"/> + <source>Simplified regex</source> + <translation>Vereinfachte RegEx</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="99"/> + <location filename="../../Filters.cpp" line="137"/> + <source>Perl's regex</source> + <translation>Perls RegEx</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="107"/> + <location filename="../../Filters.cpp" line="145"/> + <source>Only on file</source> + <translation>Nur auf Datei</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="110"/> + <location filename="../../Filters.cpp" line="148"/> + <source>Only on folder</source> + <translation>Nur auf Ordner</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="116"/> + <location filename="../../Filters.cpp" line="154"/> + <location filename="../../Filters.cpp" line="216"/> + <location filename="../../Filters.cpp" line="255"/> + <source>Full match</source> + <translation>Volle Übereinstimmung</translation> + </message> +</context> +<context> + <name>FolderExistsDialog</name> + <message> + <location filename="../../FolderExistsDialog.cpp" line="57"/> + <source>Folder already exists</source> + <translation>Ordner existiert bereits</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="122"/> + <source>%name% - copy</source> + <translation>%name% - Kopie</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="131"/> + <source>%name% - copy (%number%)</source> + <translation>%name% - Kopie (%number%)</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="190"/> + <source>Error</source> + <translation>Fehler</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="190"/> + <source>Try rename with using special characters</source> + <translation>Versuche Umbenennung mit Sonderzeichen</translation> + </message> +</context> +<context> + <name>ListThread</name> + <message> + <location filename="../../ListThread.cpp" line="1490"/> + <location filename="../../ListThread.cpp" line="2422"/> + <source>Unable do to move or copy item into wrong forced mode: %1</source> + <translation>Falscher Modus: %1 - Kann Element nicht verschieben oder kopieren</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1497"/> + <location filename="../../ListThread.cpp" line="2429"/> + <source>Unable to save the transfer list: %1</source> + <translation>Konnte die Transferliste: %1 nicht speichern</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1513"/> + <source>Problem reading file, or file-size is 0</source> + <translation>Lesefehler, oder Dateigröße=0</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1520"/> + <source>Wrong header: "%1"</source> + <translation>Falscher Header: "%1"</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1529"/> + <source>The transfer list is in mixed mode, but this instance is not in this mode</source> + <translation>Die Transferliste ist im gemischten Modus, aber diese Instanz ist nicht im selben Modus</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1538"/> + <source>The transfer list is in copy mode, but this instance is not in this mode</source> + <translation>Die Transferliste ist im Kopiermodus, aber diese Instanz ist nicht im selben Modus</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1544"/> + <source>The transfer list is in move mode, but this instance is not in this mode</source> + <translation>Die Transferliste ist im Verschiebe-Modus, aber diese Instanz ist nicht im selben Modus</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1607"/> + <source>Some errors have been found during the line parsing</source> + <translation>Bei der Zeilenanalyse sind Fehler aufgetreten</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1615"/> + <source>Unable to open the transfer list: %1</source> + <translation>Transferliste: %1 kann nicht geöffnet werden</translation> + </message> +</context> +<context> + <name>MkPath</name> + <message> + <location filename="../../MkPath.cpp" line="142"/> + <source>Unable to create the folder</source> + <translation>Der Ordner kann nicht erstellt werden</translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="155"/> + <source>The source folder don't exists</source> + <translation>Quell-Ordner existiert nicht</translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="183"/> + <source>Unable to temporary rename the folder</source> + <translation>Kann den Ordner nicht temporär umbenennen</translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="206"/> + <source>Unable to do the final real move the folder</source> + <translation>Kann den Ordner nicht endgültig verschieben</translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="233"/> + <source>Unable to move the folder</source> + <translation>Kann den Ordner nicht verschieben</translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="93"/> + <location filename="../../MkPath.cpp" line="276"/> + <source>Unable to remove</source> + <translation>Kann nicht löschen</translation> + </message> +</context> +<context> + <name>ReadThread</name> + <message> + <location filename="../../ReadThread.cpp" line="59"/> + <source>Internal error, please report it!</source> + <translation>Interner Fehler - Bitte bei mir melden!</translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="188"/> + <source>Internal error reading the source file:block size out of range</source> + <translation>Interner Fehler beim Lesen der Quelldatei: Blockgröße außerhalb des zulässigen Bereichs</translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="196"/> + <location filename="../../ReadThread.cpp" line="422"/> + <source>Unable to read the source file: </source> + <translation>Die Quelldatei kann nicht gelesen werden: </translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="237"/> + <location filename="../../ReadThread.cpp" line="470"/> + <source>File truncated during the read, possible data change</source> + <translation>Datei während des Lesevorgangs abgeschnitten, Daten wurden möglicherweise verändert</translation> + </message> +</context> +<context> + <name>RenamingRules</name> + <message> + <location filename="../../RenamingRules.ui" line="35"/> + <source>First renaming</source> + <translation>Erste Umbenennung</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="41"/> + <source>%name% - copy%suffix%</source> + <extracomment>%name% should not be translated</extracomment> + <translation>%name% - Kopie%suffix%</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="57"/> + <source>%name% - copy (%number%)%suffix%</source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation>%name% - Kopie% (%number%)%suffix%</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="67"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name, <span style=" font-weight:600;">%number%</span> for the extra number, <span style=" font-weight:600;">%suffix%</span> file suffix</p></body></html></source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation><html><head/><body><p>Variablen: <span style=" font-weight:600;">%name%</span> für den originalen Dateinamen, <span style=" font-weight:600;">%number%</span> für die extra Nummer, <span style=" font-weight:600;">%suffix%</span> für den Datei suffix</p></body></html></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="51"/> + <source>Second renaming</source> + <translation>Zweite Umbenennung</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="14"/> + <source>Renaming rules</source> + <translation>Umbennungsregeln</translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="39"/> + <location filename="../../RenamingRules.cpp" line="62"/> + <source>%1 - copy%2</source> + <translation>%1 - Kopie%2</translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="43"/> + <location filename="../../RenamingRules.cpp" line="73"/> + <source>%1 - copy (%2)%3</source> + <translation>%1 - Kopie (%2) {1 ?} {2)%3?}</translation> + </message> +</context> +<context> + <name>ScanFileOrFolder</name> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="274"/> + <source>Blacklisted folder</source> + <translation>Ordner der schwarzen Liste</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="338"/> + <source>%1 - copy</source> + <translation>%1 - Kopie</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="345"/> + <source>%1 - copy (%2)</source> + <translation>%1 - Kopie (%2)</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="401"/> + <source>%name% - copy</source> + <translation>%name% - Kopie</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="408"/> + <source>%name% - copy (%number%)</source> + <translation>%name% - Kopie (%number%)</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="444"/> + <source>This is not a folder</source> + <translation>Dies ist kein Ordner</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="446"/> + <source>The folder does exists</source> + <translation>Ordner existiert bereits</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="448"/> + <source>The folder is not readable</source> + <translation>Der Ordner kann nicht gelesen werden</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="459"/> + <source>Problem with name encoding</source> + <translation>Problem mit der Namen-Encodierung</translation> + </message> +</context> +<context> + <name>TransferThread</name> + <message> + <location filename="../../TransferThread.cpp" line="244"/> + <location filename="../../TransferThread.cpp" line="673"/> + <location filename="../../TransferThread.cpp" line="745"/> + <location filename="../../TransferThread.cpp" line="1315"/> + <source>File not found</source> + <translation>Datei nicht gefunden</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="346"/> + <location filename="../../TransferThread.cpp" line="363"/> + <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source> + <translation>Falsches Änderungsdatum oder Fehler beim Auslesen, Sie können die Zeitstempel Übermittlung deaktivieren</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="421"/> + <location filename="../../TransferThread.cpp" line="444"/> + <source>Internal error: Already opening</source> + <translation>Interner Fehler: Bereits geöffnet</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="586"/> + <source>Drive %1</source> + <translation>Laufwerk %1</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="588"/> + <source>Unknown folder</source> + <translation>Unbekannter Ordner</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="592"/> + <source>root</source> + <translation>Stammverzeichnis</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="787"/> + <source>The source doesn't exist</source> + <translation>Quelle existiert nicht</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1315"/> + <location filename="../../TransferThread.cpp" line="1333"/> + <location filename="../../TransferThread.cpp" line="1348"/> + <source>Unable to change the date</source> + <translation>Kann Datum nicht ändern</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="711"/> + <location filename="../../TransferThread.cpp" line="826"/> + <source>The source file doesn't exist</source> + <translation>Quelldatei existiert nicht</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1134"/> + <source>The checksums do not match</source> + <translation>Prüfsummen sind verschieden</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1239"/> + <source>Internal error: The size transfered doesn't match</source> + <translation>Interner Fehler: Ubertragene Größe ungleich</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="751"/> + <location filename="../../TransferThread.cpp" line="838"/> + <source>Unable to do the folder</source> + <translation>Ordner kann nicht erstellt werden</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="228"/> + <source>Try rename with using special characters</source> + <translation>Versuche Umbenennung mit Sonderzeichen</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="645"/> + <source>%name% - copy</source> + <translation>%name% - Kopie</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="652"/> + <source>%name% - copy (%number%)</source> + <translation>%name% - Kopie (%number%)</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="832"/> + <source>Another file exists at same place</source> + <translation>Eine andere Datei befindet sich bereits am selben Ort</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1224"/> + <source>Internal error: The destination is not closed</source> + <translation>Interner Fehler: Ziel ist nicht geschlossen</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1250"/> + <source>Internal error: The buffer is not empty</source> + <translation>Interner Fehler: Puffer ist nicht leer</translation> + </message> +</context> +<context> + <name>WriteThread</name> + <message> + <location filename="../../WriteThread.cpp" line="83"/> + <source>Path resolution error (Empty path)</source> + <translation>Pfad-Auflösungsfehler (leerer Pfad)</translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="277"/> + <source>Internal error, please report it!</source> + <translation>Interner Fehler - Bitte bei mir melden!</translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="680"/> + <source>Unable to read the source file: </source> + <translation>Quelldatei kann nicht gelesen werden: </translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="705"/> + <source>File truncated during read, possible data change</source> + <translation>Datenabbruch beim Lesen, Daten wurden möglicherweise verändert</translation> + </message> +</context> +<context> + <name>copyEngineOptions</name> + <message> + <location filename="../../copyEngineOptions.ui" line="44"/> + <source>Transfer</source> + <translation>Übertragung</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="53"/> + <source>Move the whole folder</source> + <translation>Verschiebe ganzen Ordner</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="60"/> + <source>Transfer the file rights</source> + <translation>Übertrage Dateirechte</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="70"/> + <source>Keep the file date</source> + <translation>Originales Datum der Dateien beibehalten</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="83"/> + <source>Autostart the transfer</source> + <translation>Übertragung automatisch starten</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="90"/> + <location filename="../../copyEngineOptions.ui" line="110"/> + <source>Less performance if checked</source> + <translation>Vermindert die Leistung, wenn ausgewählt</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="113"/> + <source>Follow the strict order</source> + <translation>Genau nach Reihenfolge</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="139"/> + <source>Error and collision</source> + <translation>Fehler und Kollisionen</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="145"/> + <source>When folder error</source> + <translation>Bei Ordnerfehler</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="155"/> + <source>When file error</source> + <translation>Bei Dateifehler</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="181"/> + <source>When file collision</source> + <translation>Bei Dateikollision</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="241"/> + <source>When folder collision</source> + <translation>Bei Ordnerkollision</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="272"/> + <source>Check if destination folder exists</source> + <translation>Prüfen ob Zielordner vorhanden ist</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="279"/> + <source>Renaming rules</source> + <translation>Umbennungsregeln</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="299"/> + <source>Delete partially transferred files</source> + <translation>Unvollständig übertragene Dateien löschen</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="312"/> + <source>Rename the original destination</source> + <translation>Original-Ziel umbenennen</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="343"/> + <source>Control</source> + <translation>Überprüfung</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="349"/> + <source>Checksum</source> + <translation>Prüfsumme</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="358"/> + <source>Only after error</source> + <translation>Nur nach einem Fehler</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="365"/> + <source>Ignore if impossible</source> + <translation>Ignorieren falls unmöglich</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="382"/> + <source>Verify checksums</source> + <translation>Prüfsummen vergleichen</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="414"/> + <source>Performance</source> + <translation>Leistung</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="420"/> + <source>Parallel buffer</source> + <translation>Paralleler Puffer</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="427"/> + <location filename="../../copyEngineOptions.ui" line="440"/> + <location filename="../../copyEngineOptions.ui" line="453"/> + <location filename="../../copyEngineOptions.ui" line="490"/> + <location filename="../../copyEngineOptions.ui" line="559"/> + <source>KB</source> + <translation>KB</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="469"/> + <source>Block size</source> + <translation>Blockgröße</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="476"/> + <source>Sequential buffer</source> + <translation>Sequentieller Puffer</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="483"/> + <source>Enable OS buffer</source> + <translation>OS-Puffer aktivieren</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="506"/> + <source>OS buffer only if smaller than</source> + <translation>OS-Puffer nur verwenden, wenn kleiner als</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="513"/> + <source>Transfer algorithm</source> + <translation>Übertragungs-Algorithmus</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="552"/> + <source>Parallelize if smaller than</source> + <translation>Parallelisieren wenn kleiner als</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="582"/> + <source>Inode threads (unsafe > 1)</source> + <translation>Inode Threads (unsicher >1)</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="589"/> + <location filename="../../copyEngineOptions.ui" line="599"/> + <source>More cpu, but better organisation on the disk</source> + <translation>Mehr CPU Leitstung, aber bessere Organisation am Laufwerk</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="602"/> + <source>Order the list</source> + <translation>Liste ordnen</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="618"/> + <source>Misc</source> + <translation>Verschiedenes</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="624"/> + <source>Check the disk space</source> + <translation>Auf freien Speicherplatz überprüfen</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="634"/> + <source>Use this folder when destination is not set</source> + <translation>Folgenden Ordner benutzen, falls kein Ziel definiert wurde</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="646"/> + <source>Browse</source> + <translation>Wählen</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="668"/> + <source>Filters</source> + <translation>Filter</translation> + </message> +</context> +<context> + <name>fileErrorDialog</name> + <message> + <location filename="../../fileErrorDialog.ui" line="14"/> + <source>Error with file</source> + <translation>Dateifehler</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="20"/> + <source>Error</source> + <translation>Fehler</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="59"/> + <source>Size</source> + <translation>Größe</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="76"/> + <source>Modified</source> + <translation>Geändert</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="93"/> + <source>File name</source> + <translation>Dateiname</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="110"/> + <source>Destination</source> + <translation>Ziel</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="127"/> + <source>Folder</source> + <translation>Ordner</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="173"/> + <source>&Always perform this action</source> + <translation>&Aktion immer ausführen</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="193"/> + <source>Try in with elevated privileges</source> + <translation>Mit erweiterten Rechten versuchen</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="200"/> + <source>Put to bottom</source> + <translation>Ans Ende verschieben</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="207"/> + <source>Retry</source> + <translation>Wiederholen</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="214"/> + <source>&Skip</source> + <translation>Über&springen</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="221"/> + <source>&Cancel</source> + <translation>Abbrechen (&C)</translation> + </message> +</context> +<context> + <name>fileExistsDialog</name> + <message> + <location filename="../../fileExistsDialog.ui" line="14"/> + <source>The file exists</source> + <translation>Die Datei existiert</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="34"/> + <source>Source</source> + <translation>Quelle</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="50"/> + <source>Destination</source> + <translation>Ziel</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="82"/> + <location filename="../../fileExistsDialog.ui" line="170"/> + <source>Size</source> + <translation>Größe</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="99"/> + <location filename="../../fileExistsDialog.ui" line="187"/> + <source>Modified</source> + <translation>Geändert</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="116"/> + <location filename="../../fileExistsDialog.ui" line="204"/> + <source>File name</source> + <translation>Dateiname</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="133"/> + <location filename="../../fileExistsDialog.ui" line="221"/> + <source>Folder</source> + <translation>Ordner</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="277"/> + <source>Suggest new &name</source> + <translation>Neuen &Namen vorschlagen</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="288"/> + <source>&Always perform this action</source> + <translation>&Aktion immer ausführen</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="346"/> + <location filename="../../fileExistsDialog.ui" line="349"/> + <source>Overwrite if modification date differs</source> + <translation>Überschreiben, falls Änderungsdatum verschieden</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="308"/> + <source>&Rename</source> + <translation>Umbenennen (&R)</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="315"/> + <source>&Overwrite</source> + <translation>Überschreiben (&O)</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="325"/> + <source>&Skip</source> + <translation>Über&springen</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="332"/> + <source>&Cancel</source> + <translation>Abbrechen (&C)</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="341"/> + <source>Overwrite if newer</source> + <translation>Überschreiben, falls neuer</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="354"/> + <location filename="../../fileExistsDialog.ui" line="357"/> + <source>Overwrite if older</source> + <translation>Überschreiben, falls älter</translation> + </message> +</context> +<context> + <name>fileIsSameDialog</name> + <message> + <location filename="../../fileIsSameDialog.ui" line="40"/> + <source>Size</source> + <translation>Größe</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="110"/> + <source>Modified</source> + <translation>Geändert</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="70"/> + <source>File name</source> + <translation>Dateiname</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="14"/> + <source>The source and destination are same</source> + <translation>Quelle und Ziel sind gleich</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="90"/> + <source>Folder</source> + <translation>Ordner</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="159"/> + <source>Suggest new &name</source> + <translation>Neuen &Namen vorschlagen</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="170"/> + <source>&Always perform this action</source> + <translation>&Aktion immer ausführen</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="190"/> + <source>&Rename</source> + <translation>Umbenennen (&R)</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="197"/> + <source>&Skip</source> + <translation>Über&springen</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="204"/> + <source>&Cancel</source> + <translation>Abbrechen (&C)</translation> + </message> +</context> +<context> + <name>folderExistsDialog</name> + <message> + <location filename="../../folderExistsDialog.ui" line="34"/> + <source>Source</source> + <translation>Quelle</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="50"/> + <source>Destination</source> + <translation>Ziel</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="14"/> + <source>The source and destination is identical</source> + <translation>Quelle und Ziel sind identisch</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="82"/> + <location filename="../../folderExistsDialog.ui" line="150"/> + <source>Modified</source> + <translation>Geändert</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="99"/> + <location filename="../../folderExistsDialog.ui" line="160"/> + <source>Folder name</source> + <translation>Ordnername</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="116"/> + <location filename="../../folderExistsDialog.ui" line="184"/> + <source>Folder</source> + <translation>Ordner</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="227"/> + <source>Suggest new &name</source> + <translation>Neuen &Namen vorschlagen</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="238"/> + <source>&Always perform this action</source> + <translation>&Aktion immer ausführen</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="245"/> + <source>&Rename</source> + <translation>Umbenennen (&R)</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="252"/> + <source>Merge</source> + <translation>Zusammenfassen</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="259"/> + <source>Skip</source> + <translation>Überspringen</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="266"/> + <source>&Cancel</source> + <translation>Abbrechen (&C)</translation> + </message> +</context> +</TS> diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/el/translation.qm b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/el/translation.qm Binary files differnew file mode 100755 index 0000000..3738845 --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/el/translation.qm diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/el/translation.ts b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/el/translation.ts new file mode 100755 index 0000000..e0764bb --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/el/translation.ts @@ -0,0 +1,1291 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1"> +<context> + <name>AvancedQFile</name> + <message> + <location filename="../../AvancedQFile.cpp" line="26"/> + <location filename="../../AvancedQFile.cpp" line="57"/> + <location filename="../../AvancedQFile.cpp" line="88"/> + <source>Not supported on this platform</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="40"/> + <source>Last modified date is wrong</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="71"/> + <source>Last access date is wrong</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="121"/> + <source>Unknown error: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="187"/> + <source>Unknown error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="133"/> + <source>Path conversion error</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>CopyEngine</name> + <message> + <location filename="../../CopyEngine.cpp" line="437"/> + <location filename="../../CopyEngine.cpp" line="459"/> + <source>The engine is forced to move, you can't copy with it</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="470"/> + <location filename="../../CopyEngine.cpp" line="492"/> + <source>The engine is forced to copy, you can't move with it</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="516"/> + <source>Destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="516"/> + <source>Use the actual destination "%1"?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="740"/> + <source>The mode has been forced previously. This is an internal error, please report it</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1070"/> + <location filename="../../CopyEngine.cpp" line="1073"/> + <location filename="../../CopyEngine.cpp" line="1078"/> + <location filename="../../CopyEngine.cpp" line="1082"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1071"/> + <location filename="../../CopyEngine.cpp" line="1075"/> + <location filename="../../CopyEngine.cpp" line="1079"/> + <location filename="../../CopyEngine.cpp" line="1083"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1074"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1076"/> + <location filename="../../CopyEngine.cpp" line="1088"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1080"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1084"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1085"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1086"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1087"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1090"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1091"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1092"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1193"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1193"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>CopyEngineFactory</name> + <message> + <location filename="../../CopyEngineFactory.cpp" line="433"/> + <location filename="../../CopyEngineFactory.cpp" line="436"/> + <location filename="../../CopyEngineFactory.cpp" line="441"/> + <location filename="../../CopyEngineFactory.cpp" line="445"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="434"/> + <location filename="../../CopyEngineFactory.cpp" line="438"/> + <location filename="../../CopyEngineFactory.cpp" line="442"/> + <location filename="../../CopyEngineFactory.cpp" line="446"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="437"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="439"/> + <location filename="../../CopyEngineFactory.cpp" line="451"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="443"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="447"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="448"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="449"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="450"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="453"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="454"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="455"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="506"/> + <location filename="../../CopyEngineFactory.cpp" line="545"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="506"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="545"/> + <source>Options engine is not loaded, can't access to the filters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>DiskSpace</name> + <message> + <location filename="../../DiskSpace.ui" line="14"/> + <source>Disk space</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../DiskSpace.ui" line="24"/> + <source>You need more space on this drive to finish this transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../DiskSpace.ui" line="49"/> + <source>Continue</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../DiskSpace.ui" line="56"/> + <source>Cancel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../DiskSpace.cpp" line="23"/> + <source>Drives %1 have %2 available but need %3</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FileErrorDialog</name> + <message> + <location filename="../../FileErrorDialog.cpp" line="54"/> + <source>Error on folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileErrorDialog.cpp" line="57"/> + <source>Folder name</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FileExistsDialog</name> + <message> + <location filename="../../FileExistsDialog.cpp" line="137"/> + <source>%name% - copy%suffix%</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="144"/> + <source>%name% - copy (%number%)%suffix%</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="228"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="228"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FileIsSameDialog</name> + <message> + <location filename="../../FileIsSameDialog.cpp" line="111"/> + <source>%name% - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="118"/> + <source>%name% - copy (%number%)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="184"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="184"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FilterRules</name> + <message> + <location filename="../../FilterRules.ui" line="33"/> + <source>Search:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="43"/> + <source>Search type:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="51"/> + <source>Raw text</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="56"/> + <source>Simplified regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="61"/> + <source>Perl's regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="69"/> + <source>Apply on:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="77"/> + <source>File</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="82"/> + <source>Folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="87"/> + <source>File and folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="125"/> + <source>The test string matches with the regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="102"/> + <source>Checking</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="115"/> + <source>Test string:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="17"/> + <source>Filters dialog</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="95"/> + <source>Whole string must match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="108"/> + <source>The regex is valid</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>Filters</name> + <message> + <location filename="../../Filters.ui" line="14"/> + <source>Filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.ui" line="30"/> + <source>Exclusion filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.ui" line="93"/> + <source>Inclusion filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.ui" line="105"/> + <source>None = Include all</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="93"/> + <location filename="../../Filters.cpp" line="131"/> + <source>Raw text</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="96"/> + <location filename="../../Filters.cpp" line="134"/> + <source>Simplified regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="99"/> + <location filename="../../Filters.cpp" line="137"/> + <source>Perl's regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="107"/> + <location filename="../../Filters.cpp" line="145"/> + <source>Only on file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="110"/> + <location filename="../../Filters.cpp" line="148"/> + <source>Only on folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="116"/> + <location filename="../../Filters.cpp" line="154"/> + <location filename="../../Filters.cpp" line="216"/> + <location filename="../../Filters.cpp" line="255"/> + <source>Full match</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FolderExistsDialog</name> + <message> + <location filename="../../FolderExistsDialog.cpp" line="57"/> + <source>Folder already exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="122"/> + <source>%name% - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="131"/> + <source>%name% - copy (%number%)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="190"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="190"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ListThread</name> + <message> + <location filename="../../ListThread.cpp" line="1490"/> + <location filename="../../ListThread.cpp" line="2422"/> + <source>Unable do to move or copy item into wrong forced mode: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1497"/> + <location filename="../../ListThread.cpp" line="2429"/> + <source>Unable to save the transfer list: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1513"/> + <source>Problem reading file, or file-size is 0</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1520"/> + <source>Wrong header: "%1"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1529"/> + <source>The transfer list is in mixed mode, but this instance is not in this mode</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1538"/> + <source>The transfer list is in copy mode, but this instance is not in this mode</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1544"/> + <source>The transfer list is in move mode, but this instance is not in this mode</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1607"/> + <source>Some errors have been found during the line parsing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1615"/> + <source>Unable to open the transfer list: %1</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>MkPath</name> + <message> + <location filename="../../MkPath.cpp" line="142"/> + <source>Unable to create the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="155"/> + <source>The source folder don't exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="183"/> + <source>Unable to temporary rename the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="206"/> + <source>Unable to do the final real move the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="233"/> + <source>Unable to move the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="93"/> + <location filename="../../MkPath.cpp" line="276"/> + <source>Unable to remove</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ReadThread</name> + <message> + <location filename="../../ReadThread.cpp" line="59"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="188"/> + <source>Internal error reading the source file:block size out of range</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="196"/> + <location filename="../../ReadThread.cpp" line="422"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="237"/> + <location filename="../../ReadThread.cpp" line="470"/> + <source>File truncated during the read, possible data change</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>RenamingRules</name> + <message> + <location filename="../../RenamingRules.ui" line="35"/> + <source>First renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="41"/> + <source>%name% - copy%suffix%</source> + <extracomment>%name% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="57"/> + <source>%name% - copy (%number%)%suffix%</source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="67"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name, <span style=" font-weight:600;">%number%</span> for the extra number, <span style=" font-weight:600;">%suffix%</span> file suffix</p></body></html></source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="51"/> + <source>Second renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="14"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="39"/> + <location filename="../../RenamingRules.cpp" line="62"/> + <source>%1 - copy%2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="43"/> + <location filename="../../RenamingRules.cpp" line="73"/> + <source>%1 - copy (%2)%3</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ScanFileOrFolder</name> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="274"/> + <source>Blacklisted folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="338"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="345"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="401"/> + <source>%name% - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="408"/> + <source>%name% - copy (%number%)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="444"/> + <source>This is not a folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="446"/> + <source>The folder does exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="448"/> + <source>The folder is not readable</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="459"/> + <source>Problem with name encoding</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TransferThread</name> + <message> + <location filename="../../TransferThread.cpp" line="244"/> + <location filename="../../TransferThread.cpp" line="673"/> + <location filename="../../TransferThread.cpp" line="745"/> + <location filename="../../TransferThread.cpp" line="1315"/> + <source>File not found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="346"/> + <location filename="../../TransferThread.cpp" line="363"/> + <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="421"/> + <location filename="../../TransferThread.cpp" line="444"/> + <source>Internal error: Already opening</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="586"/> + <source>Drive %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="588"/> + <source>Unknown folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="592"/> + <source>root</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="645"/> + <source>%name% - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="652"/> + <source>%name% - copy (%number%)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="711"/> + <location filename="../../TransferThread.cpp" line="826"/> + <source>The source file doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="751"/> + <location filename="../../TransferThread.cpp" line="838"/> + <source>Unable to do the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="787"/> + <source>The source doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="832"/> + <source>Another file exists at same place</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1134"/> + <source>The checksums do not match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1224"/> + <source>Internal error: The destination is not closed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1239"/> + <source>Internal error: The size transfered doesn't match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1250"/> + <source>Internal error: The buffer is not empty</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1315"/> + <location filename="../../TransferThread.cpp" line="1333"/> + <location filename="../../TransferThread.cpp" line="1348"/> + <source>Unable to change the date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="228"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>WriteThread</name> + <message> + <location filename="../../WriteThread.cpp" line="83"/> + <source>Path resolution error (Empty path)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="277"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="680"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="705"/> + <source>File truncated during read, possible data change</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>copyEngineOptions</name> + <message> + <location filename="../../copyEngineOptions.ui" line="44"/> + <source>Transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="53"/> + <source>Move the whole folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="60"/> + <source>Transfer the file rights</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="70"/> + <source>Keep the file date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="83"/> + <source>Autostart the transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="90"/> + <location filename="../../copyEngineOptions.ui" line="110"/> + <source>Less performance if checked</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="113"/> + <source>Follow the strict order</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="139"/> + <source>Error and collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="145"/> + <source>When folder error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="155"/> + <source>When file error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="181"/> + <source>When file collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="241"/> + <source>When folder collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="272"/> + <source>Check if destination folder exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="279"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="299"/> + <source>Delete partially transferred files</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="312"/> + <source>Rename the original destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="343"/> + <source>Control</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="349"/> + <source>Checksum</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="358"/> + <source>Only after error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="365"/> + <source>Ignore if impossible</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="382"/> + <source>Verify checksums</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="414"/> + <source>Performance</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="420"/> + <source>Parallel buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="427"/> + <location filename="../../copyEngineOptions.ui" line="440"/> + <location filename="../../copyEngineOptions.ui" line="453"/> + <location filename="../../copyEngineOptions.ui" line="490"/> + <location filename="../../copyEngineOptions.ui" line="559"/> + <source>KB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="469"/> + <source>Block size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="476"/> + <source>Sequential buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="483"/> + <source>Enable OS buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="506"/> + <source>OS buffer only if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="513"/> + <source>Transfer algorithm</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="552"/> + <source>Parallelize if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="582"/> + <source>Inode threads (unsafe > 1)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="589"/> + <location filename="../../copyEngineOptions.ui" line="599"/> + <source>More cpu, but better organisation on the disk</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="602"/> + <source>Order the list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="618"/> + <source>Misc</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="624"/> + <source>Check the disk space</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="634"/> + <source>Use this folder when destination is not set</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="646"/> + <source>Browse</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="668"/> + <source>Filters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>fileErrorDialog</name> + <message> + <location filename="../../fileErrorDialog.ui" line="14"/> + <source>Error with file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="20"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="59"/> + <source>Size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="76"/> + <source>Modified</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="93"/> + <source>File name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="110"/> + <source>Destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="127"/> + <source>Folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="173"/> + <source>&Always perform this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="193"/> + <source>Try in with elevated privileges</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="200"/> + <source>Put to bottom</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="207"/> + <source>Retry</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="214"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="221"/> + <source>&Cancel</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>fileExistsDialog</name> + <message> + <location filename="../../fileExistsDialog.ui" line="14"/> + <source>The file exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="34"/> + <source>Source</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="50"/> + <source>Destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="82"/> + <location filename="../../fileExistsDialog.ui" line="170"/> + <source>Size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="99"/> + <location filename="../../fileExistsDialog.ui" line="187"/> + <source>Modified</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="116"/> + <location filename="../../fileExistsDialog.ui" line="204"/> + <source>File name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="133"/> + <location filename="../../fileExistsDialog.ui" line="221"/> + <source>Folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="277"/> + <source>Suggest new &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="288"/> + <source>&Always perform this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="346"/> + <location filename="../../fileExistsDialog.ui" line="349"/> + <source>Overwrite if modification date differs</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="308"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="315"/> + <source>&Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="325"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="332"/> + <source>&Cancel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="341"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="354"/> + <location filename="../../fileExistsDialog.ui" line="357"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>fileIsSameDialog</name> + <message> + <location filename="../../fileIsSameDialog.ui" line="40"/> + <source>Size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="110"/> + <source>Modified</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="70"/> + <source>File name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="14"/> + <source>The source and destination are same</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="90"/> + <source>Folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="159"/> + <source>Suggest new &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="170"/> + <source>&Always perform this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="190"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="197"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="204"/> + <source>&Cancel</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>folderExistsDialog</name> + <message> + <location filename="../../folderExistsDialog.ui" line="34"/> + <source>Source</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="50"/> + <source>Destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="14"/> + <source>The source and destination is identical</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="82"/> + <location filename="../../folderExistsDialog.ui" line="150"/> + <source>Modified</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="99"/> + <location filename="../../folderExistsDialog.ui" line="160"/> + <source>Folder name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="116"/> + <location filename="../../folderExistsDialog.ui" line="184"/> + <source>Folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="227"/> + <source>Suggest new &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="238"/> + <source>&Always perform this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="245"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="252"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="259"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="266"/> + <source>&Cancel</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/en/translation.qm b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/en/translation.qm Binary files differnew file mode 100755 index 0000000..d925dd6 --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/en/translation.qm diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/en/translation.ts b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/en/translation.ts new file mode 100755 index 0000000..f2cd952 --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/en/translation.ts @@ -0,0 +1,1291 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="en"> +<context> + <name>AvancedQFile</name> + <message> + <location filename="../../AvancedQFile.cpp" line="26"/> + <location filename="../../AvancedQFile.cpp" line="57"/> + <location filename="../../AvancedQFile.cpp" line="88"/> + <source>Not supported on this platform</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="40"/> + <source>Last modified date is wrong</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="71"/> + <source>Last access date is wrong</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="121"/> + <source>Unknown error: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="187"/> + <source>Unknown error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="133"/> + <source>Path conversion error</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>CopyEngine</name> + <message> + <location filename="../../CopyEngine.cpp" line="437"/> + <location filename="../../CopyEngine.cpp" line="459"/> + <source>The engine is forced to move, you can't copy with it</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="470"/> + <location filename="../../CopyEngine.cpp" line="492"/> + <source>The engine is forced to copy, you can't move with it</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="516"/> + <source>Destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="516"/> + <source>Use the actual destination "%1"?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="740"/> + <source>The mode has been forced previously. This is an internal error, please report it</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1070"/> + <location filename="../../CopyEngine.cpp" line="1073"/> + <location filename="../../CopyEngine.cpp" line="1078"/> + <location filename="../../CopyEngine.cpp" line="1082"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1071"/> + <location filename="../../CopyEngine.cpp" line="1075"/> + <location filename="../../CopyEngine.cpp" line="1079"/> + <location filename="../../CopyEngine.cpp" line="1083"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1074"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1076"/> + <location filename="../../CopyEngine.cpp" line="1088"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1080"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1084"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1085"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1086"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1087"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1090"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1091"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1092"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1193"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1193"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>CopyEngineFactory</name> + <message> + <location filename="../../CopyEngineFactory.cpp" line="433"/> + <location filename="../../CopyEngineFactory.cpp" line="436"/> + <location filename="../../CopyEngineFactory.cpp" line="441"/> + <location filename="../../CopyEngineFactory.cpp" line="445"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="434"/> + <location filename="../../CopyEngineFactory.cpp" line="438"/> + <location filename="../../CopyEngineFactory.cpp" line="442"/> + <location filename="../../CopyEngineFactory.cpp" line="446"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="437"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="439"/> + <location filename="../../CopyEngineFactory.cpp" line="451"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="443"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="447"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="448"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="449"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="450"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="453"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="454"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="455"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="506"/> + <location filename="../../CopyEngineFactory.cpp" line="545"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="506"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="545"/> + <source>Options engine is not loaded, can't access to the filters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>DiskSpace</name> + <message> + <location filename="../../DiskSpace.ui" line="14"/> + <source>Disk space</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../DiskSpace.ui" line="24"/> + <source>You need more space on this drive to finish this transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../DiskSpace.ui" line="49"/> + <source>Continue</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../DiskSpace.ui" line="56"/> + <source>Cancel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../DiskSpace.cpp" line="23"/> + <source>Drives %1 have %2 available but need %3</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FileErrorDialog</name> + <message> + <location filename="../../FileErrorDialog.cpp" line="54"/> + <source>Error on folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileErrorDialog.cpp" line="57"/> + <source>Folder name</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FileExistsDialog</name> + <message> + <location filename="../../FileExistsDialog.cpp" line="137"/> + <source>%name% - copy%suffix%</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="144"/> + <source>%name% - copy (%number%)%suffix%</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="228"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="228"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FileIsSameDialog</name> + <message> + <location filename="../../FileIsSameDialog.cpp" line="111"/> + <source>%name% - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="118"/> + <source>%name% - copy (%number%)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="184"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="184"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FilterRules</name> + <message> + <location filename="../../FilterRules.ui" line="17"/> + <source>Filters dialog</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="33"/> + <source>Search:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="43"/> + <source>Search type:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="51"/> + <source>Raw text</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="56"/> + <source>Simplified regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="61"/> + <source>Perl's regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="69"/> + <source>Apply on:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="77"/> + <source>File</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="82"/> + <source>Folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="87"/> + <source>File and folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="95"/> + <source>Whole string must match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="125"/> + <source>The test string matches with the regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="102"/> + <source>Checking</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="108"/> + <source>The regex is valid</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="115"/> + <source>Test string:</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>Filters</name> + <message> + <location filename="../../Filters.ui" line="14"/> + <source>Filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.ui" line="30"/> + <source>Exclusion filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.ui" line="93"/> + <source>Inclusion filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.ui" line="105"/> + <source>None = Include all</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="93"/> + <location filename="../../Filters.cpp" line="131"/> + <source>Raw text</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="96"/> + <location filename="../../Filters.cpp" line="134"/> + <source>Simplified regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="99"/> + <location filename="../../Filters.cpp" line="137"/> + <source>Perl's regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="107"/> + <location filename="../../Filters.cpp" line="145"/> + <source>Only on file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="110"/> + <location filename="../../Filters.cpp" line="148"/> + <source>Only on folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="116"/> + <location filename="../../Filters.cpp" line="154"/> + <location filename="../../Filters.cpp" line="216"/> + <location filename="../../Filters.cpp" line="255"/> + <source>Full match</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FolderExistsDialog</name> + <message> + <location filename="../../FolderExistsDialog.cpp" line="57"/> + <source>Folder already exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="122"/> + <source>%name% - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="131"/> + <source>%name% - copy (%number%)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="190"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="190"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ListThread</name> + <message> + <location filename="../../ListThread.cpp" line="1490"/> + <location filename="../../ListThread.cpp" line="2422"/> + <source>Unable do to move or copy item into wrong forced mode: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1497"/> + <location filename="../../ListThread.cpp" line="2429"/> + <source>Unable to save the transfer list: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1513"/> + <source>Problem reading file, or file-size is 0</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1520"/> + <source>Wrong header: "%1"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1529"/> + <source>The transfer list is in mixed mode, but this instance is not in this mode</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1538"/> + <source>The transfer list is in copy mode, but this instance is not in this mode</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1544"/> + <source>The transfer list is in move mode, but this instance is not in this mode</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1607"/> + <source>Some errors have been found during the line parsing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1615"/> + <source>Unable to open the transfer list: %1</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>MkPath</name> + <message> + <location filename="../../MkPath.cpp" line="142"/> + <source>Unable to create the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="155"/> + <source>The source folder don't exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="183"/> + <source>Unable to temporary rename the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="206"/> + <source>Unable to do the final real move the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="233"/> + <source>Unable to move the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="93"/> + <location filename="../../MkPath.cpp" line="276"/> + <source>Unable to remove</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ReadThread</name> + <message> + <location filename="../../ReadThread.cpp" line="59"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="188"/> + <source>Internal error reading the source file:block size out of range</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="196"/> + <location filename="../../ReadThread.cpp" line="422"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="237"/> + <location filename="../../ReadThread.cpp" line="470"/> + <source>File truncated during the read, possible data change</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>RenamingRules</name> + <message> + <location filename="../../RenamingRules.ui" line="14"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="35"/> + <source>First renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="41"/> + <source>%name% - copy%suffix%</source> + <extracomment>%name% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="57"/> + <source>%name% - copy (%number%)%suffix%</source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="67"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name, <span style=" font-weight:600;">%number%</span> for the extra number, <span style=" font-weight:600;">%suffix%</span> file suffix</p></body></html></source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="51"/> + <source>Second renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="39"/> + <location filename="../../RenamingRules.cpp" line="62"/> + <source>%1 - copy%2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="43"/> + <location filename="../../RenamingRules.cpp" line="73"/> + <source>%1 - copy (%2)%3</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ScanFileOrFolder</name> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="274"/> + <source>Blacklisted folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="338"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="345"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="401"/> + <source>%name% - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="408"/> + <source>%name% - copy (%number%)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="444"/> + <source>This is not a folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="446"/> + <source>The folder does exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="448"/> + <source>The folder is not readable</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="459"/> + <source>Problem with name encoding</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TransferThread</name> + <message> + <location filename="../../TransferThread.cpp" line="244"/> + <location filename="../../TransferThread.cpp" line="673"/> + <location filename="../../TransferThread.cpp" line="745"/> + <location filename="../../TransferThread.cpp" line="1315"/> + <source>File not found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="346"/> + <location filename="../../TransferThread.cpp" line="363"/> + <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="421"/> + <location filename="../../TransferThread.cpp" line="444"/> + <source>Internal error: Already opening</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="586"/> + <source>Drive %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="588"/> + <source>Unknown folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="592"/> + <source>root</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="645"/> + <source>%name% - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="652"/> + <source>%name% - copy (%number%)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="711"/> + <location filename="../../TransferThread.cpp" line="826"/> + <source>The source file doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="751"/> + <location filename="../../TransferThread.cpp" line="838"/> + <source>Unable to do the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="787"/> + <source>The source doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="832"/> + <source>Another file exists at same place</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1134"/> + <source>The checksums do not match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1224"/> + <source>Internal error: The destination is not closed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1239"/> + <source>Internal error: The size transfered doesn't match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1250"/> + <source>Internal error: The buffer is not empty</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1315"/> + <location filename="../../TransferThread.cpp" line="1333"/> + <location filename="../../TransferThread.cpp" line="1348"/> + <source>Unable to change the date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="228"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>WriteThread</name> + <message> + <location filename="../../WriteThread.cpp" line="83"/> + <source>Path resolution error (Empty path)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="277"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="680"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="705"/> + <source>File truncated during read, possible data change</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>copyEngineOptions</name> + <message> + <location filename="../../copyEngineOptions.ui" line="44"/> + <source>Transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="53"/> + <source>Move the whole folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="60"/> + <source>Transfer the file rights</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="70"/> + <source>Keep the file date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="83"/> + <source>Autostart the transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="90"/> + <location filename="../../copyEngineOptions.ui" line="110"/> + <source>Less performance if checked</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="113"/> + <source>Follow the strict order</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="139"/> + <source>Error and collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="145"/> + <source>When folder error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="155"/> + <source>When file error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="181"/> + <source>When file collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="241"/> + <source>When folder collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="272"/> + <source>Check if destination folder exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="279"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="299"/> + <source>Delete partially transferred files</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="312"/> + <source>Rename the original destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="343"/> + <source>Control</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="349"/> + <source>Checksum</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="358"/> + <source>Only after error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="365"/> + <source>Ignore if impossible</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="382"/> + <source>Verify checksums</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="414"/> + <source>Performance</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="420"/> + <source>Parallel buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="427"/> + <location filename="../../copyEngineOptions.ui" line="440"/> + <location filename="../../copyEngineOptions.ui" line="453"/> + <location filename="../../copyEngineOptions.ui" line="490"/> + <location filename="../../copyEngineOptions.ui" line="559"/> + <source>KB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="469"/> + <source>Block size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="476"/> + <source>Sequential buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="483"/> + <source>Enable OS buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="506"/> + <source>OS buffer only if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="513"/> + <source>Transfer algorithm</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="552"/> + <source>Parallelize if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="582"/> + <source>Inode threads (unsafe > 1)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="589"/> + <location filename="../../copyEngineOptions.ui" line="599"/> + <source>More cpu, but better organisation on the disk</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="602"/> + <source>Order the list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="618"/> + <source>Misc</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="624"/> + <source>Check the disk space</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="634"/> + <source>Use this folder when destination is not set</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="646"/> + <source>Browse</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="668"/> + <source>Filters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>fileErrorDialog</name> + <message> + <location filename="../../fileErrorDialog.ui" line="14"/> + <source>Error with file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="20"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="59"/> + <source>Size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="76"/> + <source>Modified</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="93"/> + <source>File name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="110"/> + <source>Destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="127"/> + <source>Folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="173"/> + <source>&Always perform this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="193"/> + <source>Try in with elevated privileges</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="200"/> + <source>Put to bottom</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="207"/> + <source>Retry</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="214"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="221"/> + <source>&Cancel</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>fileExistsDialog</name> + <message> + <location filename="../../fileExistsDialog.ui" line="14"/> + <source>The file exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="34"/> + <source>Source</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="50"/> + <source>Destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="82"/> + <location filename="../../fileExistsDialog.ui" line="170"/> + <source>Size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="99"/> + <location filename="../../fileExistsDialog.ui" line="187"/> + <source>Modified</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="116"/> + <location filename="../../fileExistsDialog.ui" line="204"/> + <source>File name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="133"/> + <location filename="../../fileExistsDialog.ui" line="221"/> + <source>Folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="277"/> + <source>Suggest new &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="288"/> + <source>&Always perform this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="346"/> + <location filename="../../fileExistsDialog.ui" line="349"/> + <source>Overwrite if modification date differs</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="308"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="315"/> + <source>&Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="325"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="332"/> + <source>&Cancel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="341"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="354"/> + <location filename="../../fileExistsDialog.ui" line="357"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>fileIsSameDialog</name> + <message> + <location filename="../../fileIsSameDialog.ui" line="40"/> + <source>Size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="110"/> + <source>Modified</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="70"/> + <source>File name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="14"/> + <source>The source and destination are same</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="90"/> + <source>Folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="159"/> + <source>Suggest new &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="170"/> + <source>&Always perform this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="190"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="197"/> + <source>&Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="204"/> + <source>&Cancel</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>folderExistsDialog</name> + <message> + <location filename="../../folderExistsDialog.ui" line="34"/> + <source>Source</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="50"/> + <source>Destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="14"/> + <source>The source and destination is identical</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="82"/> + <location filename="../../folderExistsDialog.ui" line="150"/> + <source>Modified</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="99"/> + <location filename="../../folderExistsDialog.ui" line="160"/> + <source>Folder name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="116"/> + <location filename="../../folderExistsDialog.ui" line="184"/> + <source>Folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="227"/> + <source>Suggest new &name</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="238"/> + <source>&Always perform this action</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="245"/> + <source>&Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="252"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="259"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="266"/> + <source>&Cancel</source> + <translation type="unfinished"></translation> + </message> +</context> +</TS> diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/es/translation.qm b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/es/translation.qm Binary files differnew file mode 100755 index 0000000..9518d5a --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/es/translation.qm diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/es/translation.ts b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/es/translation.ts new file mode 100755 index 0000000..1e2bcb1 --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/es/translation.ts @@ -0,0 +1,1291 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="es" sourcelanguage="en"> +<context> + <name>AvancedQFile</name> + <message> + <location filename="../../AvancedQFile.cpp" line="26"/> + <location filename="../../AvancedQFile.cpp" line="57"/> + <location filename="../../AvancedQFile.cpp" line="88"/> + <source>Not supported on this platform</source> + <translation>No es compatible con esta plataforma</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="40"/> + <source>Last modified date is wrong</source> + <translation>Fecha de última modificación es incorrecto</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="71"/> + <source>Last access date is wrong</source> + <translation>Fecha de último acceso es incorrecto</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="121"/> + <source>Unknown error: %1</source> + <translation>Error desconocido: %1</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="187"/> + <source>Unknown error</source> + <translation>Error desconocido</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="133"/> + <source>Path conversion error</source> + <translation>Error de conversión de Sendero</translation> + </message> +</context> +<context> + <name>CopyEngine</name> + <message> + <location filename="../../CopyEngine.cpp" line="437"/> + <location filename="../../CopyEngine.cpp" line="459"/> + <source>The engine is forced to move, you can't copy with it</source> + <translation>El motor se ve obligado a moverse, no se puede copiar con ella</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="470"/> + <location filename="../../CopyEngine.cpp" line="492"/> + <source>The engine is forced to copy, you can't move with it</source> + <translation>El motor se ve obligado a copiar, no te puedes mover con él</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="516"/> + <source>Destination</source> + <translation>Destino</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="516"/> + <source>Use the actual destination "%1"?</source> + <translation>Utilice el destino "%1" actual?</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="740"/> + <source>The mode has been forced previously. This is an internal error, please report it</source> + <translation>El modo se ha visto obligado previamente. Este es un error interno, por favor repórtelo</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1070"/> + <location filename="../../CopyEngine.cpp" line="1073"/> + <location filename="../../CopyEngine.cpp" line="1078"/> + <location filename="../../CopyEngine.cpp" line="1082"/> + <source>Ask</source> + <translation>Pedir</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1071"/> + <location filename="../../CopyEngine.cpp" line="1075"/> + <location filename="../../CopyEngine.cpp" line="1079"/> + <location filename="../../CopyEngine.cpp" line="1083"/> + <source>Skip</source> + <translation>Omitir</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1074"/> + <source>Merge</source> + <translation>Unir</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1076"/> + <location filename="../../CopyEngine.cpp" line="1088"/> + <source>Rename</source> + <translation>Cambiar el nombre</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1080"/> + <source>Put at the end</source> + <translation>Ponga al final</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1084"/> + <source>Overwrite</source> + <translation>Sobrescribir</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1085"/> + <source>Overwrite if different</source> + <translation>Sobrescribir si es diferente</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1086"/> + <source>Overwrite if newer</source> + <translation>Sobrescribir si nuevo</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1087"/> + <source>Overwrite if older</source> + <translation>Sobrescribir si es mayor</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1090"/> + <source>Automatic</source> + <translation>Automático</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1091"/> + <source>Sequential</source> + <translation>Secuencial</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1092"/> + <source>Parallel</source> + <translation>Paralelo</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1193"/> + <source>Options error</source> + <translation>error Opciones</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1193"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation>Opciones del motor no está cargado. No es posible acceder a los filtros</translation> + </message> +</context> +<context> + <name>CopyEngineFactory</name> + <message> + <location filename="../../CopyEngineFactory.cpp" line="433"/> + <location filename="../../CopyEngineFactory.cpp" line="436"/> + <location filename="../../CopyEngineFactory.cpp" line="441"/> + <location filename="../../CopyEngineFactory.cpp" line="445"/> + <source>Ask</source> + <translation>Pedir</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="434"/> + <location filename="../../CopyEngineFactory.cpp" line="438"/> + <location filename="../../CopyEngineFactory.cpp" line="442"/> + <location filename="../../CopyEngineFactory.cpp" line="446"/> + <source>Skip</source> + <translation>Omitir</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="437"/> + <source>Merge</source> + <translation>Unir</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="439"/> + <location filename="../../CopyEngineFactory.cpp" line="451"/> + <source>Rename</source> + <translation>Cambiar el nombre</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="443"/> + <source>Put at the end</source> + <translation>Ponga al final</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="447"/> + <source>Overwrite</source> + <translation>Sobrescribir</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="448"/> + <source>Overwrite if different</source> + <translation>Sobrescribir si es diferente</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="449"/> + <source>Overwrite if newer</source> + <translation>Sobrescribir si nuevo</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="450"/> + <source>Overwrite if older</source> + <translation>Sobrescribir si es mayor</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="453"/> + <source>Automatic</source> + <translation>Automático</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="454"/> + <source>Sequential</source> + <translation>Secuencial</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="455"/> + <source>Parallel</source> + <translation>Paralelo</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="506"/> + <location filename="../../CopyEngineFactory.cpp" line="545"/> + <source>Options error</source> + <translation>error Opciones</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="506"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation>Opciones del motor no está cargado. No es posible acceder a los filtros</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="545"/> + <source>Options engine is not loaded, can't access to the filters</source> + <translation>Opciones del motor no está cargado, no se puede acceder a los filtros</translation> + </message> +</context> +<context> + <name>DiskSpace</name> + <message> + <location filename="../../DiskSpace.ui" line="14"/> + <source>Disk space</source> + <translation>Espacio en disco</translation> + </message> + <message> + <location filename="../../DiskSpace.ui" line="24"/> + <source>You need more space on this drive to finish this transfer</source> + <translation>Necesita más espacio en esta unidad para terminar esta transferencia</translation> + </message> + <message> + <location filename="../../DiskSpace.ui" line="49"/> + <source>Continue</source> + <translation>Continuar</translation> + </message> + <message> + <location filename="../../DiskSpace.ui" line="56"/> + <source>Cancel</source> + <translation>Cancelar</translation> + </message> + <message> + <location filename="../../DiskSpace.cpp" line="23"/> + <source>Drives %1 have %2 available but need %3</source> + <translation>Drives %1 tienen %2 disponible, pero necesitan %3</translation> + </message> +</context> +<context> + <name>FileErrorDialog</name> + <message> + <location filename="../../FileErrorDialog.cpp" line="54"/> + <source>Error on folder</source> + <translation>Error en la carpeta</translation> + </message> + <message> + <location filename="../../FileErrorDialog.cpp" line="57"/> + <source>Folder name</source> + <translation>Nombre de la carpeta</translation> + </message> +</context> +<context> + <name>FileExistsDialog</name> + <message> + <location filename="../../FileExistsDialog.cpp" line="137"/> + <source>%name% - copy%suffix%</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="144"/> + <source>%name% - copy (%number%)%suffix%</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="228"/> + <source>Error</source> + <translation>Error</translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="228"/> + <source>Try rename with using special characters</source> + <translation>Trate de cambiar el nombre con el uso de caracteres especiales</translation> + </message> +</context> +<context> + <name>FileIsSameDialog</name> + <message> + <location filename="../../FileIsSameDialog.cpp" line="111"/> + <source>%name% - copy</source> + <translation type="unfinished">%name% - copia</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="118"/> + <source>%name% - copy (%number%)</source> + <translation type="unfinished">%name% - copia (%number%)</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="184"/> + <source>Error</source> + <translation>Error</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="184"/> + <source>Try rename with using special characters</source> + <translation>Trate de cambiar el nombre con el uso de caracteres especiales</translation> + </message> +</context> +<context> + <name>FilterRules</name> + <message> + <location filename="../../FilterRules.ui" line="33"/> + <source>Search:</source> + <translation>Buscar:</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="43"/> + <source>Search type:</source> + <translation>Tipo de búsqueda:</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="51"/> + <source>Raw text</source> + <translation>texto Fuente</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="56"/> + <source>Simplified regex</source> + <translation>Regex simplificado</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="61"/> + <source>Perl's regex</source> + <translation>Perl's regex</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="69"/> + <source>Apply on:</source> + <translation>Aplicar sobre:</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="77"/> + <source>File</source> + <translation>Archivos</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="82"/> + <source>Folder</source> + <translation>Carpeta</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="87"/> + <source>File and folder</source> + <translation>Archivos y carpeta</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="125"/> + <source>The test string matches with the regex</source> + <translation>La cadena de prueba coincide con la expresión regular</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="102"/> + <source>Checking</source> + <translation>Verification</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="115"/> + <source>Test string:</source> + <translation>Prueba de la cuerda:</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="17"/> + <source>Filters dialog</source> + <translation>Filtros de diálogo</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="95"/> + <source>Whole string must match</source> + <translation>Todo cadena debe coincidir</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="108"/> + <source>The regex is valid</source> + <translation>La expresión regular es válido</translation> + </message> +</context> +<context> + <name>Filters</name> + <message> + <location filename="../../Filters.ui" line="14"/> + <source>Filters</source> + <translation>Filtros</translation> + </message> + <message> + <location filename="../../Filters.ui" line="30"/> + <source>Exclusion filters</source> + <translation>Filtros de exclusión</translation> + </message> + <message> + <location filename="../../Filters.ui" line="93"/> + <source>Inclusion filters</source> + <translation>Filtros de inclusión</translation> + </message> + <message> + <location filename="../../Filters.ui" line="105"/> + <source>None = Include all</source> + <translation>Ninguno = Incluya todos los</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="93"/> + <location filename="../../Filters.cpp" line="131"/> + <source>Raw text</source> + <translation>texto Fuente</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="96"/> + <location filename="../../Filters.cpp" line="134"/> + <source>Simplified regex</source> + <translation>Simplificado regex</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="99"/> + <location filename="../../Filters.cpp" line="137"/> + <source>Perl's regex</source> + <translation>Perl's regex</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="107"/> + <location filename="../../Filters.cpp" line="145"/> + <source>Only on file</source> + <translation>Sólo en el archivo</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="110"/> + <location filename="../../Filters.cpp" line="148"/> + <source>Only on folder</source> + <translation>Sólo en la carpeta</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="116"/> + <location filename="../../Filters.cpp" line="154"/> + <location filename="../../Filters.cpp" line="216"/> + <location filename="../../Filters.cpp" line="255"/> + <source>Full match</source> + <translation>Partido completo</translation> + </message> +</context> +<context> + <name>FolderExistsDialog</name> + <message> + <location filename="../../FolderExistsDialog.cpp" line="57"/> + <source>Folder already exists</source> + <translation>Carpeta ya existe</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="122"/> + <source>%name% - copy</source> + <translation type="unfinished">%name% - copia</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="131"/> + <source>%name% - copy (%number%)</source> + <translation type="unfinished">%name% - copia (%number%)</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="190"/> + <source>Error</source> + <translation>Error</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="190"/> + <source>Try rename with using special characters</source> + <translation>Trate de cambiar el nombre con el uso de caracteres especiales</translation> + </message> +</context> +<context> + <name>ListThread</name> + <message> + <location filename="../../ListThread.cpp" line="1490"/> + <location filename="../../ListThread.cpp" line="2422"/> + <source>Unable do to move or copy item into wrong forced mode: %1</source> + <translation>No se puede hacer para mover o copiar elemento en modo incorrecto obligado: %1</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1497"/> + <location filename="../../ListThread.cpp" line="2429"/> + <source>Unable to save the transfer list: %1</source> + <translation>No se puede guardar la lista de transferencias: %1</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1513"/> + <source>Problem reading file, or file-size is 0</source> + <translation>Problema al leer el archivo o archivos de tamaño es 0</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1520"/> + <source>Wrong header: "%1"</source> + <translation>Encabezado incorrecto: "%1"</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1529"/> + <source>The transfer list is in mixed mode, but this instance is not in this mode</source> + <translation>La lista de transferencia está en modo mixto, pero este caso no es de este modo</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1538"/> + <source>The transfer list is in copy mode, but this instance is not in this mode</source> + <translation>La lista de transferencia está en el modo de copia, pero esta instancia no está en este modo</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1544"/> + <source>The transfer list is in move mode, but this instance is not in this mode</source> + <translation>La lista de transferencia es el modo de desplazamiento, pero esta instancia no está en este modo</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1607"/> + <source>Some errors have been found during the line parsing</source> + <translation>Algunos errores han sido encontrados durante el análisis de línea</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1615"/> + <source>Unable to open the transfer list: %1</source> + <translation>No se puede abrir la lista de transferencias: %1</translation> + </message> +</context> +<context> + <name>MkPath</name> + <message> + <location filename="../../MkPath.cpp" line="142"/> + <source>Unable to create the folder</source> + <translation>No se puede crear la carpeta</translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="155"/> + <source>The source folder don't exists</source> + <translation>La carpeta de origen no existe</translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="183"/> + <source>Unable to temporary rename the folder</source> + <translation>No es posible cambiar el nombre de la carpeta temporal</translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="206"/> + <source>Unable to do the final real move the folder</source> + <translation>No se puede hacer el movimiento final real de la carpeta</translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="233"/> + <source>Unable to move the folder</source> + <translation>No se puede mover la carpeta</translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="93"/> + <location filename="../../MkPath.cpp" line="276"/> + <source>Unable to remove</source> + <translation>No se puede eliminar</translation> + </message> +</context> +<context> + <name>ReadThread</name> + <message> + <location filename="../../ReadThread.cpp" line="59"/> + <source>Internal error, please report it!</source> + <translation>Error interno, por favor informe de ello!</translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="188"/> + <source>Internal error reading the source file:block size out of range</source> + <translation>Error interno de leer el archivo de origen: tamaño de bloque fuera de rango</translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="196"/> + <location filename="../../ReadThread.cpp" line="422"/> + <source>Unable to read the source file: </source> + <translation>No se puede leer el archivo de origen: </translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="237"/> + <location filename="../../ReadThread.cpp" line="470"/> + <source>File truncated during the read, possible data change</source> + <translation>Archivo truncada durante el cambio de lectura, los datos posibles</translation> + </message> +</context> +<context> + <name>RenamingRules</name> + <message> + <location filename="../../RenamingRules.ui" line="35"/> + <source>First renaming</source> + <translation>En primer lugar el cambio de nombre</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="41"/> + <source>%name% - copy%suffix%</source> + <extracomment>%name% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="57"/> + <source>%name% - copy (%number%)%suffix%</source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="67"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name, <span style=" font-weight:600;">%number%</span> for the extra number, <span style=" font-weight:600;">%suffix%</span> file suffix</p></body></html></source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="51"/> + <source>Second renaming</source> + <translation>En segundo lugar el cambio de nombre</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="14"/> + <source>Renaming rules</source> + <translation>Reglas de Cambio de nombre</translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="39"/> + <location filename="../../RenamingRules.cpp" line="62"/> + <source>%1 - copy%2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="43"/> + <location filename="../../RenamingRules.cpp" line="73"/> + <source>%1 - copy (%2)%3</source> + <translation type="unfinished">%1 - copia (%2) {1 ?} {2)%3?}</translation> + </message> +</context> +<context> + <name>ScanFileOrFolder</name> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="274"/> + <source>Blacklisted folder</source> + <translation>Carpeta de la lista negra</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="338"/> + <source>%1 - copy</source> + <translation>%1 - copia</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="345"/> + <source>%1 - copy (%2)</source> + <translation>%1 - copia (%2)</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="401"/> + <source>%name% - copy</source> + <translation type="unfinished">%name% - copia</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="408"/> + <source>%name% - copy (%number%)</source> + <translation type="unfinished">%name% - copia (%number%)</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="444"/> + <source>This is not a folder</source> + <translation>Esto no es una carpeta</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="446"/> + <source>The folder does exists</source> + <translation>La carpeta no existe</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="448"/> + <source>The folder is not readable</source> + <translation>La carpeta no se puede leer</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="459"/> + <source>Problem with name encoding</source> + <translation>Problema con codificación de nombres</translation> + </message> +</context> +<context> + <name>TransferThread</name> + <message> + <location filename="../../TransferThread.cpp" line="244"/> + <location filename="../../TransferThread.cpp" line="673"/> + <location filename="../../TransferThread.cpp" line="745"/> + <location filename="../../TransferThread.cpp" line="1315"/> + <source>File not found</source> + <translation>Archivo no encontrado</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="346"/> + <location filename="../../TransferThread.cpp" line="363"/> + <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="421"/> + <location filename="../../TransferThread.cpp" line="444"/> + <source>Internal error: Already opening</source> + <translation type="unfinished">Error interno: Ya la apertura</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="586"/> + <source>Drive %1</source> + <translation type="unfinished">Drive %1</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="588"/> + <source>Unknown folder</source> + <translation type="unfinished">Desconocido carpeta</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="592"/> + <source>root</source> + <translation type="unfinished">raíz</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="787"/> + <source>The source doesn't exist</source> + <translation type="unfinished">La fuente no existe</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1315"/> + <location filename="../../TransferThread.cpp" line="1333"/> + <location filename="../../TransferThread.cpp" line="1348"/> + <source>Unable to change the date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="711"/> + <location filename="../../TransferThread.cpp" line="826"/> + <source>The source file doesn't exist</source> + <translation type="unfinished">El archivo de origen no existe</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1134"/> + <source>The checksums do not match</source> + <translation type="unfinished">Las sumas de comprobación no coinciden</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1239"/> + <source>Internal error: The size transfered doesn't match</source> + <translation type="unfinished">Error interno: El tamaño transferido no coincide</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="751"/> + <location filename="../../TransferThread.cpp" line="838"/> + <source>Unable to do the folder</source> + <translation type="unfinished">Incapaz de hacer la carpeta</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="228"/> + <source>Try rename with using special characters</source> + <translation>Trate de cambiar el nombre con el uso de caracteres especiales</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="645"/> + <source>%name% - copy</source> + <translation type="unfinished">%name% - copia</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="652"/> + <source>%name% - copy (%number%)</source> + <translation type="unfinished">%name% - copia (%number%)</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="832"/> + <source>Another file exists at same place</source> + <translation type="unfinished">Otro archivo existe en el mismo lugar</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1224"/> + <source>Internal error: The destination is not closed</source> + <translation type="unfinished">Error interno: El destino no está cerrado</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1250"/> + <source>Internal error: The buffer is not empty</source> + <translation type="unfinished">Error interno: El buffer no está vacío</translation> + </message> +</context> +<context> + <name>WriteThread</name> + <message> + <location filename="../../WriteThread.cpp" line="83"/> + <source>Path resolution error (Empty path)</source> + <translation>Error de resolución de ruta (camino vacío)</translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="277"/> + <source>Internal error, please report it!</source> + <translation>Error interno, por favor informe de ello!</translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="680"/> + <source>Unable to read the source file: </source> + <translation>No se puede leer el archivo de origen: </translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="705"/> + <source>File truncated during read, possible data change</source> + <translation>Archivo truncado durante lectura, posible cambio de datos</translation> + </message> +</context> +<context> + <name>copyEngineOptions</name> + <message> + <location filename="../../copyEngineOptions.ui" line="44"/> + <source>Transfer</source> + <translation>Transferencia</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="53"/> + <source>Move the whole folder</source> + <translation>Mueva la carpeta completa</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="60"/> + <source>Transfer the file rights</source> + <translation>Transferencia de los derechos de archivo</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="70"/> + <source>Keep the file date</source> + <translation>Mantener la fecha de archivo</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="83"/> + <source>Autostart the transfer</source> + <translation>Inicio automático de la transferencia</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="90"/> + <location filename="../../copyEngineOptions.ui" line="110"/> + <source>Less performance if checked</source> + <translation>Si comprueba Menos rendimiento</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="113"/> + <source>Follow the strict order</source> + <translation>Siga el orden estricto</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="139"/> + <source>Error and collision</source> + <translation>Error y de la colisión</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="145"/> + <source>When folder error</source> + <translation>Cuando el error carpeta</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="155"/> + <source>When file error</source> + <translation>Cuando archivo error</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="181"/> + <source>When file collision</source> + <translation>Cuando archivo colisión</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="241"/> + <source>When folder collision</source> + <translation>Cuando la colisión carpeta</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="272"/> + <source>Check if destination folder exists</source> + <translation>Compruebe si existe la carpeta de destino</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="279"/> + <source>Renaming rules</source> + <translation>Reglas de Cambio de nombre</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="299"/> + <source>Delete partially transferred files</source> + <translation>Eliminar archivos parcialmente transferidos</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="312"/> + <source>Rename the original destination</source> + <translation>Cambie el nombre del destino original</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="343"/> + <source>Control</source> + <translation>Controlar</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="349"/> + <source>Checksum</source> + <translation>Suma de comprobación</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="358"/> + <source>Only after error</source> + <translation>Sólo después de un error</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="365"/> + <source>Ignore if impossible</source> + <translation>No haga caso si no es posible</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="382"/> + <source>Verify checksums</source> + <translation>Verifique checksums</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="414"/> + <source>Performance</source> + <translation>Rendimiento</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="420"/> + <source>Parallel buffer</source> + <translation>Búfer paralelo</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="427"/> + <location filename="../../copyEngineOptions.ui" line="440"/> + <location filename="../../copyEngineOptions.ui" line="453"/> + <location filename="../../copyEngineOptions.ui" line="490"/> + <location filename="../../copyEngineOptions.ui" line="559"/> + <source>KB</source> + <translation>KB</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="469"/> + <source>Block size</source> + <translation>Tamaño del bloque</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="476"/> + <source>Sequential buffer</source> + <translation>Tampón secuencial</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="483"/> + <source>Enable OS buffer</source> + <translation>Habilitar el OS de amortiguación</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="506"/> + <source>OS buffer only if smaller than</source> + <translation>OS de amortiguación sólo si menor que</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="513"/> + <source>Transfer algorithm</source> + <translation>Algoritmo de transferencia</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="552"/> + <source>Parallelize if smaller than</source> + <translation>Paralelice si más pequeño que</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="582"/> + <source>Inode threads (unsafe > 1)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="589"/> + <location filename="../../copyEngineOptions.ui" line="599"/> + <source>More cpu, but better organisation on the disk</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="602"/> + <source>Order the list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="618"/> + <source>Misc</source> + <translation>Misc</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="624"/> + <source>Check the disk space</source> + <translation>Compruebe el espacio en disco</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="634"/> + <source>Use this folder when destination is not set</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="646"/> + <source>Browse</source> + <translation>Busque</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="668"/> + <source>Filters</source> + <translation>Filtros</translation> + </message> +</context> +<context> + <name>fileErrorDialog</name> + <message> + <location filename="../../fileErrorDialog.ui" line="14"/> + <source>Error with file</source> + <translation>Error con el archivo</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="20"/> + <source>Error</source> + <translation>Error</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="59"/> + <source>Size</source> + <translation>Tamaño</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="76"/> + <source>Modified</source> + <translation>Modificado</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="93"/> + <source>File name</source> + <translation>Nombre de archivo</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="110"/> + <source>Destination</source> + <translation>Destino</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="127"/> + <source>Folder</source> + <translation>Carpeta</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="173"/> + <source>&Always perform this action</source> + <translation>&Siempre realice esta acción</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="193"/> + <source>Try in with elevated privileges</source> + <translation>Pruebe con privilegios elevados</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="200"/> + <source>Put to bottom</source> + <translation>Ponga a abajo</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="207"/> + <source>Retry</source> + <translation>Reintentar</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="214"/> + <source>&Skip</source> + <translation>&Omitir</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="221"/> + <source>&Cancel</source> + <translation>Cancelar</translation> + </message> +</context> +<context> + <name>fileExistsDialog</name> + <message> + <location filename="../../fileExistsDialog.ui" line="14"/> + <source>The file exists</source> + <translation>El archivo ya existe</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="34"/> + <source>Source</source> + <translation>Fuente</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="50"/> + <source>Destination</source> + <translation>Destino</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="82"/> + <location filename="../../fileExistsDialog.ui" line="170"/> + <source>Size</source> + <translation>Tamaño</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="99"/> + <location filename="../../fileExistsDialog.ui" line="187"/> + <source>Modified</source> + <translation>Modificado</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="116"/> + <location filename="../../fileExistsDialog.ui" line="204"/> + <source>File name</source> + <translation>Nombre de archivo</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="133"/> + <location filename="../../fileExistsDialog.ui" line="221"/> + <source>Folder</source> + <translation>Carpeta</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="277"/> + <source>Suggest new &name</source> + <translation>Sugerir nuevo &nombre</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="288"/> + <source>&Always perform this action</source> + <translation>&Siempre realice esta acción</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="346"/> + <location filename="../../fileExistsDialog.ui" line="349"/> + <source>Overwrite if modification date differs</source> + <translation>Sobrescribir si la fecha de modificación difiere</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="308"/> + <source>&Rename</source> + <translation>&Cambiar el nombre</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="315"/> + <source>&Overwrite</source> + <translation>&Sobrescribir</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="325"/> + <source>&Skip</source> + <translation>&Omitir</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="332"/> + <source>&Cancel</source> + <translation>Ca&ncelar</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="341"/> + <source>Overwrite if newer</source> + <translation>Sobrescribir si nuevo</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="354"/> + <location filename="../../fileExistsDialog.ui" line="357"/> + <source>Overwrite if older</source> + <translation>Sobrescribir si es mayor</translation> + </message> +</context> +<context> + <name>fileIsSameDialog</name> + <message> + <location filename="../../fileIsSameDialog.ui" line="40"/> + <source>Size</source> + <translation>Tamaño</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="110"/> + <source>Modified</source> + <translation>Modificado</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="70"/> + <source>File name</source> + <translation>Nombre de archivo</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="14"/> + <source>The source and destination are same</source> + <translation>El origen y el destino son los mismos</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="90"/> + <source>Folder</source> + <translation>Carpeta</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="159"/> + <source>Suggest new &name</source> + <translation>Sugerir nuevo nombre</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="170"/> + <source>&Always perform this action</source> + <translation>&Siempre realice esta acción</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="190"/> + <source>&Rename</source> + <translation>Cambiar el nombre</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="197"/> + <source>&Skip</source> + <translation>Omitir</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="204"/> + <source>&Cancel</source> + <translation>Cancelar</translation> + </message> +</context> +<context> + <name>folderExistsDialog</name> + <message> + <location filename="../../folderExistsDialog.ui" line="34"/> + <source>Source</source> + <translation>Fuente</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="50"/> + <source>Destination</source> + <translation>Destino</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="14"/> + <source>The source and destination is identical</source> + <translation>La fuente y el destino es idéntica</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="82"/> + <location filename="../../folderExistsDialog.ui" line="150"/> + <source>Modified</source> + <translation>Modificado</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="99"/> + <location filename="../../folderExistsDialog.ui" line="160"/> + <source>Folder name</source> + <translation>Nombre de la carpeta</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="116"/> + <location filename="../../folderExistsDialog.ui" line="184"/> + <source>Folder</source> + <translation>Carpeta</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="227"/> + <source>Suggest new &name</source> + <translation>Sugerir nuevo nombre</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="238"/> + <source>&Always perform this action</source> + <translation>&Siempre realice esta acción</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="245"/> + <source>&Rename</source> + <translation>Cambiar el nombre</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="252"/> + <source>Merge</source> + <translation>Unir</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="259"/> + <source>Skip</source> + <translation>Omitir</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="266"/> + <source>&Cancel</source> + <translation>Cancelar</translation> + </message> +</context> +</TS> diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/fr/translation.qm b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/fr/translation.qm Binary files differnew file mode 100755 index 0000000..f8759ce --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/fr/translation.qm diff --git a/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/fr/translation.ts b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/fr/translation.ts new file mode 100755 index 0000000..aa8d78a --- /dev/null +++ b/plugins-unmaintained/CopyEngine/Ultracopier-Qt/Languages/fr/translation.ts @@ -0,0 +1,1292 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="fr" sourcelanguage="en"> +<context> + <name>AvancedQFile</name> + <message> + <location filename="../../AvancedQFile.cpp" line="26"/> + <location filename="../../AvancedQFile.cpp" line="57"/> + <location filename="../../AvancedQFile.cpp" line="88"/> + <source>Not supported on this platform</source> + <translation>Non supporté sur cette plateforme</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="40"/> + <source>Last modified date is wrong</source> + <translation>Date de dernière modification du fichier incorrecte</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="71"/> + <source>Last access date is wrong</source> + <translation>Date du dernier accès au fichier incorrecte</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="121"/> + <source>Unknown error: %1</source> + <translation>Erreur inconnue: %1</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="187"/> + <source>Unknown error</source> + <translation>Erreur inconnue</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="133"/> + <source>Path conversion error</source> + <translation>Erreur de conversion de chemain</translation> + </message> +</context> +<context> + <name>CopyEngine</name> + <message> + <location filename="../../CopyEngine.cpp" line="437"/> + <location filename="../../CopyEngine.cpp" line="459"/> + <source>The engine is forced to move, you can't copy with it</source> + <translation>Le moteur est forcé en déplacement, vous ne pouvez pas copier avec</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="470"/> + <location filename="../../CopyEngine.cpp" line="492"/> + <source>The engine is forced to copy, you can't move with it</source> + <translation>Le moteur est forcé en copie, vous ne pouvez pas déplacer avec</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="516"/> + <source>Destination</source> + <translation>Destination</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="516"/> + <source>Use the actual destination "%1"?</source> + <translation>Utiliser la destination actuelle "%1"?</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="740"/> + <source>The mode has been forced previously. This is an internal error, please report it</source> + <translation>Le mode a été forcé. C'est une erreur interne, merci de la repporter</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1070"/> + <location filename="../../CopyEngine.cpp" line="1073"/> + <location filename="../../CopyEngine.cpp" line="1078"/> + <location filename="../../CopyEngine.cpp" line="1082"/> + <source>Ask</source> + <translation>Demander</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1071"/> + <location filename="../../CopyEngine.cpp" line="1075"/> + <location filename="../../CopyEngine.cpp" line="1079"/> + <location filename="../../CopyEngine.cpp" line="1083"/> + <source>Skip</source> + <translation>Passer</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1074"/> + <source>Merge</source> + <translation>Fusionner</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1076"/> + <location filename="../../CopyEngine.cpp" line="1088"/> + <source>Rename</source> + <translation>Renommer</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1080"/> + <source>Put at the end</source> + <translation>Mettre à la fin</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1084"/> + <source>Overwrite</source> + <translation>Écraser</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1085"/> + <source>Overwrite if different</source> + <translation>Écraser si différent</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1086"/> + <source>Overwrite if newer</source> + <translation>Écraser si plus récent</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1087"/> + <source>Overwrite if older</source> + <translation>Écraser si plus vieux</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1090"/> + <source>Automatic</source> + <translation>Automatique</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1091"/> + <source>Sequential</source> + <translation>Séquentiel</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1092"/> + <source>Parallel</source> + <translation>Parallèle</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1193"/> + <source>Options error</source> + <translation>Erreur d'options</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1193"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation>Le moteur d'options n'est pas chargé. Impossible d'accédé aux filtres</translation> + </message> +</context> +<context> + <name>CopyEngineFactory</name> + <message> + <location filename="../../CopyEngineFactory.cpp" line="433"/> + <location filename="../../CopyEngineFactory.cpp" line="436"/> + <location filename="../../CopyEngineFactory.cpp" line="441"/> + <location filename="../../CopyEngineFactory.cpp" line="445"/> + <source>Ask</source> + <translation>Demander</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="434"/> + <location filename="../../CopyEngineFactory.cpp" line="438"/> + <location filename="../../CopyEngineFactory.cpp" line="442"/> + <location filename="../../CopyEngineFactory.cpp" line="446"/> + <source>Skip</source> + <translation>Passer</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="437"/> + <source>Merge</source> + <translation>Fusionner</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="439"/> + <location filename="../../CopyEngineFactory.cpp" line="451"/> + <source>Rename</source> + <translation>Renommer</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="443"/> + <source>Put at the end</source> + <translation>Mettre à la fin</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="447"/> + <source>Overwrite</source> + <translation>Écraser</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="448"/> + <source>Overwrite if different</source> + <translation>Écraser si différent</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="449"/> + <source>Overwrite if newer</source> + <translation>Écraser si plus récent</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="450"/> + <source>Overwrite if older</source> + <translation>Écraser si plus vieux</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="453"/> + <source>Automatic</source> + <translation>Automatique</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="454"/> + <source>Sequential</source> + <translation>Séquentiel</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="455"/> + <source>Parallel</source> + <translation>Parallèle</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="506"/> + <location filename="../../CopyEngineFactory.cpp" line="545"/> + <source>Options error</source> + <translation>Erreur d'options</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="506"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation>Le moteur d'options n'est pas chargé. Impossible d'accédé aux filtres</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="545"/> + <source>Options engine is not loaded, can't access to the filters</source> + <translation>Moteur d'options non chargé, impossible d'accéder aux filtres</translation> + </message> +</context> +<context> + <name>DiskSpace</name> + <message> + <location filename="../../DiskSpace.ui" line="14"/> + <source>Disk space</source> + <translation>Espace disque</translation> + </message> + <message> + <location filename="../../DiskSpace.ui" line="24"/> + <source>You need more space on this drive to finish this transfer</source> + <translation>Vous avez besoin de plus d'espace pour finir ce transfert</translation> + </message> + <message> + <location filename="../../DiskSpace.ui" line="49"/> + <source>Continue</source> + <translation>Continuer</translation> + </message> + <message> + <location filename="../../DiskSpace.ui" line="56"/> + <source>Cancel</source> + <translation>Annuler</translation> + </message> + <message> + <location filename="../../DiskSpace.cpp" line="23"/> + <source>Drives %1 have %2 available but need %3</source> + <translation>Lecteur %1 as %2 disponible mais à besoin de %3</translation> + </message> +</context> +<context> + <name>FileErrorDialog</name> + <message> + <location filename="../../FileErrorDialog.cpp" line="54"/> + <source>Error on folder</source> + <translation>Erreur sur un dossier</translation> + </message> + <message> + <location filename="../../FileErrorDialog.cpp" line="57"/> + <source>Folder name</source> + <translation>Nom de répertoire</translation> + </message> +</context> +<context> + <name>FileExistsDialog</name> + <message> + <location filename="../../FileExistsDialog.cpp" line="137"/> + <source>%name% - copy%suffix%</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="144"/> + <source>%name% - copy (%number%)%suffix%</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="228"/> + <source>Error</source> + <translation>Erreur</translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="228"/> + <source>Try rename with using special characters</source> + <translation>Essaie de renommage avec caratéres interdits</translation> + </message> +</context> +<context> + <name>FileIsSameDialog</name> + <message> + <location filename="../../FileIsSameDialog.cpp" line="111"/> + <source>%name% - copy</source> + <translation type="unfinished">%name% - copie</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="118"/> + <source>%name% - copy (%number%)</source> + <translation type="unfinished">%name% - copie (%number%)</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="184"/> + <source>Error</source> + <translation>Erreur</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="184"/> + <source>Try rename with using special characters</source> + <translation>Essaie de renommage avec caratéres interdits</translation> + </message> +</context> +<context> + <name>FilterRules</name> + <message> + <location filename="../../FilterRules.ui" line="33"/> + <source>Search:</source> + <translation>Recherche:</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="43"/> + <source>Search type:</source> + <translation>Type de recherche:</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="51"/> + <source>Raw text</source> + <translation>Texte brut</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="56"/> + <source>Simplified regex</source> + <translation>Regex simplifiée</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="61"/> + <source>Perl's regex</source> + <translation>Regex perl</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="69"/> + <source>Apply on:</source> + <translation>Appliquer sur:</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="77"/> + <source>File</source> + <translation>Fichier</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="82"/> + <source>Folder</source> + <translation>Dossier</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="87"/> + <source>File and folder</source> + <translation>Fichier et dossier</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="125"/> + <source>The test string matches with the regex</source> + <translation>La chaine de texte corresponds avec la regex</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="102"/> + <source>Checking</source> + <translation>Vérification</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="115"/> + <source>Test string:</source> + <translation>Chaine de test:</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="17"/> + <source>Filters dialog</source> + <translation>Dialogue des filtres</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="95"/> + <source>Whole string must match</source> + <translation>Toute la chaine doit correspondre</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="108"/> + <source>The regex is valid</source> + <translation>La regex est valid</translation> + </message> +</context> +<context> + <name>Filters</name> + <message> + <location filename="../../Filters.ui" line="14"/> + <source>Filters</source> + <translation>Filtres</translation> + </message> + <message> + <location filename="../../Filters.ui" line="30"/> + <source>Exclusion filters</source> + <translation>Filtres d'exclusion</translation> + </message> + <message> + <location filename="../../Filters.ui" line="93"/> + <source>Inclusion filters</source> + <translation>Filtres d'inclusion</translation> + </message> + <message> + <location filename="../../Filters.ui" line="105"/> + <source>None = Include all</source> + <translation>Aucun = tout inclure</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="93"/> + <location filename="../../Filters.cpp" line="131"/> + <source>Raw text</source> + <translation>Texte brute</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="96"/> + <location filename="../../Filters.cpp" line="134"/> + <source>Simplified regex</source> + <translation>Regex simplifié</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="99"/> + <location filename="../../Filters.cpp" line="137"/> + <source>Perl's regex</source> + <translation>Regex perl</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="107"/> + <location filename="../../Filters.cpp" line="145"/> + <source>Only on file</source> + <translation>Appliquer sur fichier</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="110"/> + <location filename="../../Filters.cpp" line="148"/> + <source>Only on folder</source> + <translation>Appliquer sur dossier</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="116"/> + <location filename="../../Filters.cpp" line="154"/> + <location filename="../../Filters.cpp" line="216"/> + <location filename="../../Filters.cpp" line="255"/> + <source>Full match</source> + <translation>Correspondance totale</translation> + </message> +</context> +<context> + <name>FolderExistsDialog</name> + <message> + <location filename="../../FolderExistsDialog.cpp" line="57"/> + <source>Folder already exists</source> + <translation>Dossier déjà existant</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="122"/> + <source>%name% - copy</source> + <translation type="unfinished">%name% - copie</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="131"/> + <source>%name% - copy (%number%)</source> + <translation type="unfinished">%name% - copie (%number%)</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="190"/> + <source>Error</source> + <translation>Erreur</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="190"/> + <source>Try rename with using special characters</source> + <translation>Essaie de renommage avec caratéres interdits</translation> + </message> +</context> +<context> + <name>ListThread</name> + <message> + <location filename="../../ListThread.cpp" line="1490"/> + <location filename="../../ListThread.cpp" line="2422"/> + <source>Unable do to move or copy item into wrong forced mode: %1</source> + <translation>Impossible de faire un déplacement ou une copie dans le mauvais mode forcé: %1</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1497"/> + <location filename="../../ListThread.cpp" line="2429"/> + <source>Unable to save the transfer list: %1</source> + <translation>Impossible de sauvegarder la liste de transfert: %1</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1513"/> + <source>Problem reading file, or file-size is 0</source> + <translation>Problem durant la lecture, ou taille de fichier est 0</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1520"/> + <source>Wrong header: "%1"</source> + <translation>Mauvais en-tête: "%1"</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1529"/> + <source>The transfer list is in mixed mode, but this instance is not in this mode</source> + <translation>La liste de transfert est en mode mixte, mais l'instance n'est pas dans ce mode</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1538"/> + <source>The transfer list is in copy mode, but this instance is not in this mode</source> + <translation>La liste de transfert est en mode copie, mais l'instance n'est pas dans ce mode</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1544"/> + <source>The transfer list is in move mode, but this instance is not in this mode</source> + <translation>La liste de transfert est en mode déplacement, mais l'instance n'est pas dans ce mode</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1607"/> + <source>Some errors have been found during the line parsing</source> + <translation>Certaine erreur ont été trouvé durant l'analise de la line</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1615"/> + <source>Unable to open the transfer list: %1</source> + <translation>Impossible d'ouvrir la list de transfert: %1</translation> + </message> +</context> +<context> + <name>MkPath</name> + <message> + <location filename="../../MkPath.cpp" line="142"/> + <source>Unable to create the folder</source> + <translation>Impossible de créer le répertoire</translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="155"/> + <source>The source folder don't exists</source> + <translation>Le dossier source n'éxiste pas</translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="183"/> + <source>Unable to temporary rename the folder</source> + <translation>Impossible de renommer le dossier</translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="206"/> + <source>Unable to do the final real move the folder</source> + <translation>Impossible de faire le déplacement final du dossier</translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="233"/> + <source>Unable to move the folder</source> + <translation>Impossible de déplacer le dossier</translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="93"/> + <location filename="../../MkPath.cpp" line="276"/> + <source>Unable to remove</source> + <translation>Impossible de supprimer</translation> + </message> +</context> +<context> + <name>ReadThread</name> + <message> + <location filename="../../ReadThread.cpp" line="59"/> + <source>Internal error, please report it!</source> + <translation>Erreur interne, merci de la reporter!</translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="188"/> + <source>Internal error reading the source file:block size out of range</source> + <translation>Erreur interne lisant le fichier source: taille de block hors de la plage</translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="196"/> + <location filename="../../ReadThread.cpp" line="422"/> + <source>Unable to read the source file: </source> + <translation>Impossible de lire le fichier source: </translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="237"/> + <location filename="../../ReadThread.cpp" line="470"/> + <source>File truncated during the read, possible data change</source> + <translatorcomment>La taille du fichier a diminué durant -> changé le texte original</translatorcomment> + <translation>Fichier a diminué durant la lecture, possible changement de données</translation> + </message> +</context> +<context> + <name>RenamingRules</name> + <message> + <location filename="../../RenamingRules.ui" line="35"/> + <source>First renaming</source> + <translation>Premier renommage</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="41"/> + <source>%name% - copy%suffix%</source> + <extracomment>%name% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="57"/> + <source>%name% - copy (%number%)%suffix%</source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="67"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name, <span style=" font-weight:600;">%number%</span> for the extra number, <span style=" font-weight:600;">%suffix%</span> file suffix</p></body></html></source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="51"/> + <source>Second renaming</source> + <translation>Second renommage</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="14"/> + <source>Renaming rules</source> + <translation>Règles de renommage</translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="39"/> + <location filename="../../RenamingRules.cpp" line="62"/> + <source>%1 - copy%2</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="43"/> + <location filename="../../RenamingRules.cpp" line="73"/> + <source>%1 - copy (%2)%3</source> + <translation type="unfinished">%1 - copie (%2) {1 ?} {2)%3?}</translation> + </message> +</context> +<context> + <name>ScanFileOrFolder</name> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="274"/> + <source>Blacklisted folder</source> + <translation>Dossier banis</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="338"/> + <source>%1 - copy</source> + <translation>%1 - copie</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="345"/> + <source>%1 - copy (%2)</source> + <translation>%1 - copie (%2)</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="401"/> + <source>%name% - copy</source> + <translation type="unfinished">%name% - copie</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="408"/> + <source>%name% - copy (%number%)</source> + <translation type="unfinished">%name% - copie (%number%)</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="444"/> + <source>This is not a folder</source> + <translation>N'est pas un dossier</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="446"/> + <source>The folder does exists</source> + <translation>Le répertoire n'existe pas</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="448"/> + <source>The folder is not readable</source> + <translation>Le répertoire n'est pas lisible</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="459"/> + <source>Problem with name encoding</source> + <translation>Problém d'encodage</translation> + </message> +</context> +<context> + <name>TransferThread</name> + <message> + <location filename="../../TransferThread.cpp" line="244"/> + <location filename="../../TransferThread.cpp" line="673"/> + <location filename="../../TransferThread.cpp" line="745"/> + <location filename="../../TransferThread.cpp" line="1315"/> + <source>File not found</source> + <translation>Fichier non trouvé</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="586"/> + <source>Drive %1</source> + <translation>Lecteur %1</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="588"/> + <source>Unknown folder</source> + <translation>Dossier inconnu</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="592"/> + <source>root</source> + <translation>racine</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="787"/> + <source>The source doesn't exist</source> + <translation>La source n'existe pas</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="711"/> + <location filename="../../TransferThread.cpp" line="826"/> + <source>The source file doesn't exist</source> + <translation>Le fichier source n'existe pas</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1134"/> + <source>The checksums do not match</source> + <translation>Les sommes de controle ne correspondent pas</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1239"/> + <source>Internal error: The size transfered doesn't match</source> + <translation>Erreur interne: La taille transféré ne corresponds pas</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="751"/> + <location filename="../../TransferThread.cpp" line="838"/> + <source>Unable to do the folder</source> + <translation>Impossible de créer le dossier</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="228"/> + <source>Try rename with using special characters</source> + <translation>Essaie de renommage avec caratéres interdits</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="346"/> + <location filename="../../TransferThread.cpp" line="363"/> + <source>Wrong modification date or unable to get it, you can disable time transfer to do it</source> + <translation>Mauvaise date de modification ou impossible de l'avoir, vous pouvez désactiver le transfert de celui-ci</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="421"/> + <location filename="../../TransferThread.cpp" line="444"/> + <source>Internal error: Already opening</source> + <translation>Erreur interne: Déjà ouvert</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="645"/> + <source>%name% - copy</source> + <translation type="unfinished">%name% - copie</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="652"/> + <source>%name% - copy (%number%)</source> + <translation type="unfinished">%name% - copie (%number%)</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="832"/> + <source>Another file exists at same place</source> + <translation>Un autre fichier exists à la même place</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1224"/> + <source>Internal error: The destination is not closed</source> + <translation>Erreur interne: La destination n'est pas fermé</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1250"/> + <source>Internal error: The buffer is not empty</source> + <translation>Erreur interne: Le buffer n'est pas vide</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1315"/> + <location filename="../../TransferThread.cpp" line="1333"/> + <location filename="../../TransferThread.cpp" line="1348"/> + <source>Unable to change the date</source> + <translation>Impossible de changer la date</translation> + </message> +</context> +<context> + <name>WriteThread</name> + <message> + <location filename="../../WriteThread.cpp" line="83"/> + <source>Path resolution error (Empty path)</source> + <translation>Erreur de résolution de chemain (chemain vide)</translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="277"/> + <source>Internal error, please report it!</source> + <translation>Erreur interne, merci de la reporter!</translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="680"/> + <source>Unable to read the source file: </source> + <translation>Impossible de lire le fichier source: </translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="705"/> + <source>File truncated during read, possible data change</source> + <translation>Fichier rétréci pendant la lecture, possible changement de données</translation> + </message> +</context> +<context> + <name>copyEngineOptions</name> + <message> + <location filename="../../copyEngineOptions.ui" line="44"/> + <source>Transfer</source> + <translation>Transfert</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="53"/> + <source>Move the whole folder</source> + <translation>Déplacer le dossier complet</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="60"/> + <source>Transfer the file rights</source> + <translation>Transférer les droits des fichiers</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="70"/> + <source>Keep the file date</source> + <translation>Garder la date du fichier</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="83"/> + <source>Autostart the transfer</source> + <translation>Démarrer automatiquement le transfert</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="90"/> + <location filename="../../copyEngineOptions.ui" line="110"/> + <source>Less performance if checked</source> + <translation>Moins de performance si coché</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="113"/> + <source>Follow the strict order</source> + <translation>Suivre l'ordre strict</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="139"/> + <source>Error and collision</source> + <translation>Erreur et collision</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="145"/> + <source>When folder error</source> + <translation>En cas d'erreur de répertoire</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="155"/> + <source>When file error</source> + <translation>En cas d'erreur de fichier</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="181"/> + <source>When file collision</source> + <translation>En cas de collision de fichier</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="241"/> + <source>When folder collision</source> + <translation>Lors d'une collision de dossier</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="272"/> + <source>Check if destination folder exists</source> + <translation>Vérifier si le répertoire de destination existe</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="279"/> + <source>Renaming rules</source> + <translation>Règles de renommage</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="299"/> + <source>Delete partially transferred files</source> + <translation>Supprimer les transferts partiels</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="312"/> + <source>Rename the original destination</source> + <translation>Renommer la destination originale</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="343"/> + <source>Control</source> + <translation>Controle</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="349"/> + <source>Checksum</source> + <translation>Somme de contrôle</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="358"/> + <source>Only after error</source> + <translation>Seulement après erreur</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="365"/> + <source>Ignore if impossible</source> + <translation>Ignorer si impossible</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="382"/> + <source>Verify checksums</source> + <translation>Vérifier les sommes de contrôles</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="414"/> + <source>Performance</source> + <translation>Performance</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="420"/> + <source>Parallel buffer</source> + <translation>Buffer paralléle</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="427"/> + <location filename="../../copyEngineOptions.ui" line="440"/> + <location filename="../../copyEngineOptions.ui" line="453"/> + <location filename="../../copyEngineOptions.ui" line="490"/> + <location filename="../../copyEngineOptions.ui" line="559"/> + <source>KB</source> + <translation>Ko</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="469"/> + <source>Block size</source> + <translation>Taille de bloc</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="476"/> + <source>Sequential buffer</source> + <translation>Buffer séquentiel</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="483"/> + <source>Enable OS buffer</source> + <translation>Activer le tampon de l'OS</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="506"/> + <source>OS buffer only if smaller than</source> + <translation>Tampon de l'OS seulement si plus petit que</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="513"/> + <source>Transfer algorithm</source> + <translation>Algorithme de transfert</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="552"/> + <source>Parallelize if smaller than</source> + <translation>Parallèlise si plus petit que</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="582"/> + <source>Inode threads (unsafe > 1)</source> + <translation>Inode threads (non sécurisé> 1)</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="589"/> + <location filename="../../copyEngineOptions.ui" line="599"/> + <source>More cpu, but better organisation on the disk</source> + <translation>Plus de cpu mais meilleur organisation sur le disque</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="602"/> + <source>Order the list</source> + <translation>Ordonner la liste</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="618"/> + <source>Misc</source> + <translation>Divers</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="624"/> + <source>Check the disk space</source> + <translation>Vérifier l'espace disque</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="634"/> + <source>Use this folder when destination is not set</source> + <translation>Utiliser ce dossier quand la destination n'est pas défini</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="646"/> + <source>Browse</source> + <translation>Parcourir</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="668"/> + <source>Filters</source> + <translation>Filtres</translation> + </message> +</context> +<context> + <name>fileErrorDialog</name> + <message> + <location filename="../../fileErrorDialog.ui" line="14"/> + <source>Error with file</source> + <translation>Erreur avec un fichier</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="20"/> + <source>Error</source> + <translation>Erreur</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="59"/> + <source>Size</source> + <translation>Taille</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="76"/> + <source>Modified</source> + <translation>Modifié</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="93"/> + <source>File name</source> + <translation>Nom de fichier</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="110"/> + <source>Destination</source> + <translation>Destination</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="127"/> + <source>Folder</source> + <translation>Dossier</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="173"/> + <source>&Always perform this action</source> + <translation>&Toujours faire cette action</translation> + </message> + <mess |