diff options
author | Thomas Preud'homme <robotux@celest.fr> | 2017-11-24 23:24:09 +0000 |
---|---|---|
committer | Thomas Preud'homme <robotux@celest.fr> | 2017-11-24 23:24:09 +0000 |
commit | b3c8bdcc0d1e4b2ab298847a7902b6d60410a5bc (patch) | |
tree | 8fce8a51adfb245db8ab2a76831661780c0c713e /plugins/CopyEngine | |
parent | e297dbd8052ef4e66f069e2dd1865ae7fa8af28e (diff) |
New upstream version 1.2.3.6
Diffstat (limited to 'plugins/CopyEngine')
149 files changed, 41202 insertions, 24797 deletions
diff --git a/plugins/CopyEngine/Rsync/Rsync.pro b/plugins/CopyEngine/Rsync/Rsync.pro new file mode 100644 index 0000000..168fadd --- /dev/null +++ b/plugins/CopyEngine/Rsync/Rsync.pro @@ -0,0 +1,2 @@ +include(../Ultracopier/CopyEngine.pro) +DEFINES += ULTRACOPIER_PLUGIN_RSYNC diff --git a/plugins/CopyEngine/Ultracopier-0.3/AvancedQFile.cpp b/plugins/CopyEngine/Ultracopier-0.3/AvancedQFile.cpp deleted file mode 100644 index af5805b..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/AvancedQFile.cpp +++ /dev/null @@ -1,94 +0,0 @@ -/** \file AvancedQFile.cpp -\brief Define the QFile herited class to set file date/time -\author alpha_one_x86 -\version 0.3 -\date 2010 */ - -#include "AvancedQFile.h" - -#ifdef Q_CC_GNU -//this next header is needed to change file time/date under gcc -#include <utime.h> -#include <errno.h> -#endif - -//source -//hSrc=CreateFile(pData->pfiSrcFile->GetFullFilePath(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN | (bNoBuffer ? FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH : 0), NULL); -//destination -//hDst=CreateFile(pData->strDstFile, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN | (bNoBuffer ? FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH : 0), NULL); - -bool AvancedQFile::setCreated(QDateTime time) -{ - time_t ctime=time.toTime_t(); - #ifdef Q_CC_GNU - //creation time not exists into unix world - Q_UNUSED(ctime) - return true; - #else - setErrorString(tr("Not supported on this platform")); - return false; - #endif -} - -bool AvancedQFile::setLastModified(QDateTime time) -{ - time_t actime=QFileInfo(*this).lastRead().toTime_t(); - //protect to wrong actime - if(actime<0) - actime=0; - time_t modtime=time.toTime_t(); - if(modtime<0) - { - setErrorString(tr("Last modified date is wrong")); - return false; - } - #ifdef Q_CC_GNU - //this function avalaible on unix and mingw - utimbuf butime; - butime.actime=actime; - butime.modtime=modtime; - int returnVal=utime(this->fileName().toLocal8Bit().data(),&butime); - if(returnVal==0) - return true; - else - { - setErrorString(strerror(errno)); - return false; - } - #else - setErrorString(tr("Not supported on this platform")); - return false; - #endif -} - -bool AvancedQFile::setLastRead(QDateTime time) -{ - time_t modtime=QFileInfo(*this).lastModified().toTime_t(); - //protect to wrong actime - if(modtime<0) - modtime=0; - time_t actime=time.toTime_t(); - if(actime<0) - { - setErrorString(tr("Last access date is wrong")); - return false; - } - #ifdef Q_CC_GNU - //this function avalaible on unix and mingw - utimbuf butime; - butime.actime=actime; - butime.modtime=modtime; - int returnVal=utime(this->fileName().toLocal8Bit().data(),&butime); - if(returnVal==0) - return true; - else - { - setErrorString(strerror(errno)); - return false; - } - #else - setErrorString(tr("Not supported on this platform")); - return false; - #endif -} - diff --git a/plugins/CopyEngine/Ultracopier-0.3/AvancedQFile.h b/plugins/CopyEngine/Ultracopier-0.3/AvancedQFile.h deleted file mode 100644 index 284cf02..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/AvancedQFile.h +++ /dev/null @@ -1,32 +0,0 @@ -/** \file AvancedQFile.h -\brief Define the QFile herited class to set file date/time -\author alpha_one_x86 -\version 0.3 -\date 2010 */ - -#ifndef AVANCEDQFILE_H -#define AVANCEDQFILE_H - -#include <QFile> -#include <QDateTime> -#include <QFileInfo> - -/// \brief devired class from QFile to set time/date on file -class AvancedQFile : public QFile -{ - Q_OBJECT -public: - /// \brief set created date, not exists in unix world - bool setCreated(QDateTime time); - /// \brief set last modification date - bool setLastModified(QDateTime time); - /// \brief set last read date - bool setLastRead(QDateTime time); - -/* //fileName - void close(); - bool open ( FILE * fh, OpenMode mode ) - bool open ( int fd, OpenMode mode )*/ -}; - -#endif // AVANCEDQFILE_H diff --git a/plugins/CopyEngine/Ultracopier-0.3/FilterRules.cpp b/plugins/CopyEngine/Ultracopier-0.3/FilterRules.cpp deleted file mode 100644 index 0e6ba25..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/FilterRules.cpp +++ /dev/null @@ -1,193 +0,0 @@ -#include "FilterRules.h" -#include "ui_FilterRules.h" - -#include <QMessageBox> - -FilterRules::FilterRules(QWidget *parent) : - QDialog(parent), - ui(new Ui::FilterRules) -{ - ui->setupUi(this); - updateChecking(); - haveBeenValided=false; -} - -FilterRules::~FilterRules() -{ - delete ui; -} - -bool FilterRules::getIsValid() -{ - return isValid && haveBeenValided; -} - -QString FilterRules::get_search_text() -{ - return ui->search->text(); -} - -SearchType FilterRules::get_search_type() -{ - switch(ui->search_type->currentIndex()) - { - case 0: - return SearchType_rawText; - case 1: - return SearchType_simpleRegex; - case 2: - return SearchType_perlRegex; - } - return SearchType_simpleRegex; -} - -ApplyOn FilterRules::get_apply_on() -{ - switch(ui->apply_on->currentIndex()) - { - case 0: - return ApplyOn_file; - case 1: - return ApplyOn_fileAndFolder; - case 2: - return ApplyOn_folder; - } - return ApplyOn_fileAndFolder; -} - -bool FilterRules::get_need_match_all() -{ - return ui->need_match_all->isChecked(); -} - -void FilterRules::set_search_text(QString search_text) -{ - ui->search->setText(search_text); -} - -void FilterRules::set_search_type(SearchType search_type) -{ - switch(search_type) - { - case SearchType_rawText: - ui->search_type->setCurrentIndex(0); - break; - case SearchType_simpleRegex: - ui->search_type->setCurrentIndex(1); - break; - case SearchType_perlRegex: - ui->search_type->setCurrentIndex(2); - break; - } -} - -void FilterRules::set_apply_on(ApplyOn apply_on) -{ - switch(apply_on) - { - case ApplyOn_file: - ui->apply_on->setCurrentIndex(0); - break; - case ApplyOn_fileAndFolder: - ui->apply_on->setCurrentIndex(1); - break; - case ApplyOn_folder: - ui->apply_on->setCurrentIndex(2); - break; - } -} - -void FilterRules::set_need_match_all(bool need_match_all) -{ - ui->need_match_all->setChecked(need_match_all); -} - -void FilterRules::on_search_textChanged(const QString &arg1) -{ - Q_UNUSED(arg1); - updateChecking(); -} - -void FilterRules::updateChecking() -{ - QRegExp regex; - isValid=!ui->search->text().isEmpty(); - if(isValid) - { - QString tempString; - if(ui->search_type->currentIndex()==0) - { - tempString=QRegExp::escape(ui->search->text()); - if(tempString.contains('/') || tempString.contains('\\')) - isValid=false; - } - else if(ui->search_type->currentIndex()==1) - { - tempString=QRegExp::escape(ui->search->text()); - tempString.replace("\\*","[^\\\\/]*"); - } - else if(ui->search_type->currentIndex()==2) - { - tempString=ui->search->text(); - if(tempString.startsWith('^') && tempString.endsWith('$')) - { - ui->need_match_all->setChecked(true); - tempString.remove(QRegExp("^\\^")); - tempString.remove(QRegExp("\\$$")); - ui->search->setText(tempString); - } - } - if(isValid) - { - if(ui->need_match_all->isChecked()) - tempString="^"+tempString+"$"; - regex=QRegExp(tempString); - isValid=regex.isValid() && !regex.isEmpty(); - } - } - - ui->isValid->setChecked(isValid); - ui->testString->setEnabled(isValid); - ui->label_test_string->setEnabled(isValid); - ui->matched->setEnabled(isValid); - ui->matched->setChecked(isValid && ui->testString->text().contains(regex)); - ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(isValid); -} - -void FilterRules::on_isValid_clicked() -{ - updateChecking(); -} - -void FilterRules::on_testString_textChanged(const QString &arg1) -{ - Q_UNUSED(arg1); - updateChecking(); -} - -void FilterRules::on_matched_clicked() -{ - updateChecking(); -} - -void FilterRules::on_search_type_currentIndexChanged(int index) -{ - Q_UNUSED(index); - updateChecking(); -} - -void FilterRules::on_need_match_all_clicked() -{ - updateChecking(); -} - -void FilterRules::on_buttonBox_clicked(QAbstractButton *button) -{ - if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::RejectRole) - reject(); - else - { - haveBeenValided=true; - accept(); - } -} diff --git a/plugins/CopyEngine/Ultracopier-0.3/Filters.cpp b/plugins/CopyEngine/Ultracopier-0.3/Filters.cpp deleted file mode 100644 index ce87b52..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/Filters.cpp +++ /dev/null @@ -1,456 +0,0 @@ -#include "Filters.h" -#include "ui_Filters.h" - -#include <QMessageBox> - -Filters::Filters(QWidget *parent) : - QDialog(parent), - ui(new Ui::Filters) -{ - ui->setupUi(this); -} - -Filters::~Filters() -{ - delete ui; -} - -void Filters::setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions) -{ - if(includeStrings.size()!=includeOptions.size() || excludeStrings.size()!=excludeOptions.size()) - return; - Filters_rules new_item; - - include.clear(); - int index=0; - while(index<includeStrings.size()) - { - new_item.search_text=includeStrings.at(index); - QStringList options=includeOptions.at(index).split(";"); - new_item.need_match_all=false; - new_item.search_type=SearchType_rawText; - new_item.apply_on=ApplyOn_fileAndFolder; - - if(options.contains("SearchType_simpleRegex")) - new_item.search_type=SearchType_simpleRegex; - if(options.contains("SearchType_perlRegex")) - new_item.search_type=SearchType_perlRegex; - if(options.contains("ApplyOn_file")) - new_item.apply_on=ApplyOn_file; - if(options.contains("ApplyOn_folder")) - new_item.apply_on=ApplyOn_folder; - if(options.contains("need_match_all")) - new_item.need_match_all=true; - - if(convertToRegex(new_item)) - include << new_item; - - index++; - } - - exclude.clear(); - index=0; - while(index<excludeStrings.size()) - { - new_item.search_text=excludeStrings.at(index); - QStringList options=excludeOptions.at(index).split(";"); - new_item.need_match_all=false; - new_item.search_type=SearchType_rawText; - new_item.apply_on=ApplyOn_fileAndFolder; - - if(options.contains("SearchType_simpleRegex")) - new_item.search_type=SearchType_simpleRegex; - if(options.contains("SearchType_perlRegex")) - new_item.search_type=SearchType_perlRegex; - if(options.contains("ApplyOn_file")) - new_item.apply_on=ApplyOn_file; - if(options.contains("ApplyOn_folder")) - new_item.apply_on=ApplyOn_folder; - if(options.contains("need_match_all")) - new_item.need_match_all=true; - - if(convertToRegex(new_item)) - exclude << new_item; - - index++; - } - - reShowAll(); -} - -void Filters::reShowAll() -{ - ui->inclusion->clear(); - int index=0; - while(index<include.size()) - { - QString entryShow=include.at(index).search_text+" ("; - QStringList optionsToShow; - switch(include.at(index).search_type) - { - case SearchType_rawText: - optionsToShow << tr("Raw text"); - break; - case SearchType_simpleRegex: - optionsToShow << tr("Simplified regex"); - break; - case SearchType_perlRegex: - optionsToShow << tr("Perl's regex"); - break; - default: - break; - } - switch(include.at(index).apply_on) - { - case ApplyOn_file: - optionsToShow << tr("Only on file"); - break; - case ApplyOn_folder: - optionsToShow << tr("Only on folder"); - break; - default: - break; - } - if(include.at(index).need_match_all) - optionsToShow << tr("Full match"); - entryShow+=optionsToShow.join(","); - entryShow+=")"; - ui->inclusion->addItem(new QListWidgetItem(entryShow)); - index++; - } - ui->exclusion->clear(); - index=0; - while(index<exclude.size()) - { - QString entryShow=exclude.at(index).search_text+" ("; - QStringList optionsToShow; - switch(exclude.at(index).search_type) - { - case SearchType_rawText: - optionsToShow << tr("Raw text"); - break; - case SearchType_simpleRegex: - optionsToShow << tr("Simplified regex"); - break; - case SearchType_perlRegex: - optionsToShow << tr("Perl's regex"); - break; - default: - break; - } - switch(exclude.at(index).apply_on) - { - case ApplyOn_file: - optionsToShow << tr("Only on file"); - break; - case ApplyOn_folder: - optionsToShow << tr("Only on folder"); - break; - default: - break; - } - if(exclude.at(index).need_match_all) - optionsToShow << tr("Full match"); - entryShow+=optionsToShow.join(","); - entryShow+=")"; - ui->exclusion->addItem(new QListWidgetItem(entryShow)); - index++; - } -} - -QList<Filters_rules> Filters::getInclude() -{ - return include; -} - -QList<Filters_rules> Filters::getExclude() -{ - return exclude; -} - -void Filters::newLanguageLoaded() -{ - ui->retranslateUi(this); - reShowAll(); -} - -void Filters::haveNewFilters() -{ - QStringList includeStrings,includeOptions,excludeStrings,excludeOptions; - int index=0; - while(index<include.size()) - { - includeStrings<<include.at(index).search_text; - QStringList optionsToShow; - - switch(include.at(index).search_type) - { - case SearchType_rawText: - optionsToShow << "SearchType_rawText"; - break; - case SearchType_simpleRegex: - optionsToShow << "SearchType_simpleRegex"; - break; - case SearchType_perlRegex: - optionsToShow << "SearchType_perlRegex"; - break; - default: - break; - } - switch(include.at(index).apply_on) - { - case ApplyOn_file: - optionsToShow << "ApplyOn_file"; - break; - case ApplyOn_fileAndFolder: - optionsToShow << "ApplyOn_fileAndFolder"; - break; - case ApplyOn_folder: - optionsToShow << "ApplyOn_folder"; - break; - default: - break; - } - if(include.at(index).need_match_all) - optionsToShow << tr("Full match"); - includeOptions<<optionsToShow.join(";"); - index++; - } - index=0; - while(index<exclude.size()) - { - excludeStrings<<exclude.at(index).search_text; - QStringList optionsToShow; - - switch(exclude.at(index).search_type) - { - case SearchType_rawText: - optionsToShow << "SearchType_rawText"; - break; - case SearchType_simpleRegex: - optionsToShow << "SearchType_simpleRegex"; - break; - case SearchType_perlRegex: - optionsToShow << "SearchType_perlRegex"; - break; - default: - break; - } - switch(exclude.at(index).apply_on) - { - case ApplyOn_file: - optionsToShow << "ApplyOn_file"; - break; - case ApplyOn_fileAndFolder: - optionsToShow << "ApplyOn_fileAndFolder"; - break; - case ApplyOn_folder: - optionsToShow << "ApplyOn_folder"; - break; - default: - break; - } - if(exclude.at(index).need_match_all) - optionsToShow << tr("Full match"); - excludeOptions<<optionsToShow.join(";"); - index++; - } - emit sendNewFilters(includeStrings,includeOptions,excludeStrings,excludeOptions); -} - -bool Filters::convertToRegex(Filters_rules &item) -{ - bool isValid=!item.search_text.isEmpty(); - if(isValid) - { - QRegExp regex; - QString tempString; - if(item.search_type==SearchType_rawText) - { - tempString=QRegExp::escape(item.search_text); - if(tempString.contains('/') || tempString.contains('\\')) - isValid=false; - } - else if(item.search_type==SearchType_simpleRegex) - { - tempString=QRegExp::escape(item.search_text); - tempString.replace("\\*","[^\\\\/]*"); - } - else if(item.search_type==SearchType_perlRegex) - { - tempString=item.search_text; - if(tempString.startsWith('^') && tempString.endsWith('$')) - { - item.need_match_all=true; - tempString.remove(QRegExp("^\\^")); - tempString.remove(QRegExp("\\$$")); - item.search_text=tempString; - } - } - if(isValid) - { - if(item.need_match_all==true) - tempString="^"+tempString+"$"; - regex=QRegExp(tempString); - isValid=regex.isValid() && !regex.isEmpty(); - item.regex=regex; - return true; - } - else - return false; - } - return false; -} - -void Filters::on_remove_exclusion_clicked() -{ - bool removedEntry=false; - int index=0; - while(index<ui->exclusion->count()) - { - if(ui->exclusion->item(index)->isSelected()) - { - delete ui->exclusion->item(index); - exclude.removeAt(index); - removedEntry=true; - } - else - index++; - } - if(removedEntry) - { - reShowAll(); - haveNewFilters(); - } -} - -void Filters::on_remove_inclusion_clicked() -{ - bool removedEntry=false; - int index=0; - while(index<ui->inclusion->count()) - { - if(ui->inclusion->item(index)->isSelected()) - { - delete ui->inclusion->item(index); - include.removeAt(index); - removedEntry=true; - } - else - index++; - } - if(removedEntry) - { - reShowAll(); - haveNewFilters(); - } -} - -void Filters::on_add_exclusion_clicked() -{ - FilterRules dialog(this); - dialog.exec(); - if(dialog.getIsValid()) - { - Filters_rules new_item; - new_item.apply_on=dialog.get_apply_on(); - new_item.need_match_all=dialog.get_need_match_all(); - new_item.search_text=dialog.get_search_text(); - new_item.search_type=dialog.get_search_type(); - exclude << new_item; - reShowAll(); - haveNewFilters(); - } -} - -void Filters::on_buttonBox_clicked(QAbstractButton *button) -{ - if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::RejectRole) - reject(); -} - -void Filters::on_add_inclusion_clicked() -{ - FilterRules dialog(this); - dialog.exec(); - if(dialog.getIsValid()) - { - Filters_rules new_item; - new_item.apply_on=dialog.get_apply_on(); - new_item.need_match_all=dialog.get_need_match_all(); - new_item.search_text=dialog.get_search_text(); - new_item.search_type=dialog.get_search_type(); - if(convertToRegex(new_item)) - include << new_item; - reShowAll(); - haveNewFilters(); - } -} - -void Filters::on_edit_exclusion_clicked() -{ - bool editedEntry=false; - int index=0; - while(index<ui->exclusion->count()) - { - if(ui->exclusion->item(index)->isSelected()) - { - FilterRules dialog(this); - dialog.set_apply_on(exclude[index].apply_on); - dialog.set_need_match_all(exclude[index].need_match_all); - dialog.set_search_text(exclude[index].search_text); - dialog.set_search_type(exclude[index].search_type); - dialog.exec(); - if(dialog.getIsValid()) - { - exclude[index].apply_on=dialog.get_apply_on(); - exclude[index].need_match_all=dialog.get_need_match_all(); - exclude[index].search_text=dialog.get_search_text(); - exclude[index].search_type=dialog.get_search_type(); - if(!convertToRegex(exclude[index])) - exclude.removeAt(index); - editedEntry=true; - } - } - index++; - } - if(editedEntry) - { - reShowAll(); - haveNewFilters(); - } -} - -void Filters::on_edit_inclusion_clicked() -{ - bool editedEntry=false; - int index=0; - while(index<ui->inclusion->count()) - { - if(ui->inclusion->item(index)->isSelected()) - { - FilterRules dialog(this); - dialog.set_apply_on(exclude[index].apply_on); - dialog.set_need_match_all(exclude[index].need_match_all); - dialog.set_search_text(exclude[index].search_text); - dialog.set_search_type(exclude[index].search_type); - dialog.exec(); - if(dialog.getIsValid()) - { - exclude[index].apply_on=dialog.get_apply_on(); - exclude[index].need_match_all=dialog.get_need_match_all(); - exclude[index].search_text=dialog.get_search_text(); - exclude[index].search_type=dialog.get_search_type(); - if(!convertToRegex(exclude[index])) - exclude.removeAt(index); - editedEntry=true; - } - } - index++; - } - if(editedEntry) - { - reShowAll(); - haveNewFilters(); - } -} diff --git a/plugins/CopyEngine/Ultracopier-0.3/Filters.h b/plugins/CopyEngine/Ultracopier-0.3/Filters.h deleted file mode 100644 index dcdcb36..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/Filters.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef FILTERS_H -#define FILTERS_H - -#include <QDialog> -#include <QStringList> - -#include "FilterRules.h" -#include "StructEnumDefinition_CopyEngine.h" - -namespace Ui { -class Filters; -} - -/** To add/edit one filter rules */ -class Filters : public QDialog -{ - Q_OBJECT -public: - explicit Filters(QWidget *parent = 0); - ~Filters(); - void setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions); - void reShowAll(); - QList<Filters_rules> getInclude(); - QList<Filters_rules> getExclude(); - void newLanguageLoaded(); -private: - Ui::Filters *ui; - QList<Filters_rules> include; - QList<Filters_rules> exclude; - void haveNewFilters(); - bool convertToRegex(Filters_rules &item); -signals: - void sendNewFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions); -private slots: - void on_remove_exclusion_clicked(); - void on_remove_inclusion_clicked(); - void on_add_exclusion_clicked(); - void on_buttonBox_clicked(QAbstractButton *button); - void on_add_inclusion_clicked(); - void on_edit_exclusion_clicked(); - void on_edit_inclusion_clicked(); -}; - -#endif // FILTERS_H diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/ar/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/ar/translation.ts deleted file mode 100644 index 0898631..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/Languages/ar/translation.ts +++ /dev/null @@ -1,795 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.0"> -<context> - <name>AvancedQFile</name> - <message> - <location filename="../../AvancedQFile.cpp" line="28"/> - <location filename="../../AvancedQFile.cpp" line="59"/> - <location filename="../../AvancedQFile.cpp" line="90"/> - <source>Not supported on this platform</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="42"/> - <source>Last modified date is wrong</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="73"/> - <source>Last access date is wrong</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Factory</name> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>FilterRules</name> - <message> - <location filename="../../FilterRules.ui" line="33"/> - <source>Search:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="43"/> - <source>Search type:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="51"/> - <source>Raw text</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="56"/> - <source>Simplified regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="61"/> - <source>Perl's regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="69"/> - <source>Apply on:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="77"/> - <source>File</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="82"/> - <source>Folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="87"/> - <source>File and folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="95"/> - <source>All string need match</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="102"/> - <source>Checking</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="115"/> - <source>Test string:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="17"/> - <source>Filters dialog</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="108"/> - <source>The regex is valid</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="125"/> - <source>The test string match with the regex</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Filters</name> - <message> - <location filename="../../Filters.ui" line="14"/> - <source>Filters</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="30"/> - <source>Exclusion filter</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="93"/> - <source>Inclusion filter</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="105"/> - <source>None = Include all</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="92"/> - <location filename="../../Filters.cpp" line="130"/> - <source>Raw text</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="95"/> - <location filename="../../Filters.cpp" line="133"/> - <source>Simplified regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="98"/> - <location filename="../../Filters.cpp" line="136"/> - <source>Perl's regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="106"/> - <location filename="../../Filters.cpp" line="144"/> - <source>Only on file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="109"/> - <location filename="../../Filters.cpp" line="147"/> - <source>Only on folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="115"/> - <location filename="../../Filters.cpp" line="153"/> - <location filename="../../Filters.cpp" line="215"/> - <location filename="../../Filters.cpp" line="254"/> - <source>Full match</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>ListThread</name> - <message> - <location filename="../../ListThread.cpp" line="1162"/> - <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="1169"/> - <source>Unable to save the transfer list: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1185"/> - <source>Problem at the reading, or file size is null</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1192"/> - <source>Wrong header: "%1"</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1201"/> - <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="1210"/> - <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="1216"/> - <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="1263"/> - <source>Some error have been found during the line parsing</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1269"/> - <source>Unable to open the transfer list: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>MkPath</name> - <message> - <location filename="../../MkPath.cpp" line="62"/> - <source>Unable to create the folder</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>ReadThread</name> - <message> - <location filename="../../ReadThread.cpp" line="154"/> - <location filename="../../ReadThread.cpp" line="316"/> - <source>Unable to read the source file: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ReadThread.cpp" line="193"/> - <location filename="../../ReadThread.cpp" line="373"/> - <source>File truncated during the read, possible data change</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>RenamingRules</name> - <message> - <location filename="../../RenamingRules.ui" line="26"/> - <source>First renaming</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="32"/> - <source>%name% - copy</source> - <extracomment>%name% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="39"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> - <extracomment> should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="49"/> - <source>Second renaming</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="55"/> - <source>%name% - copy (%number%)</source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="62"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="39"/> - <location filename="../../RenamingRules.cpp" line="62"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="43"/> - <location filename="../../RenamingRules.cpp" line="73"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="14"/> - <source>Renaming rules</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>RmPath</name> - <message> - <location filename="../../RmPath.cpp" line="59"/> - <source>Unable to remove the folder</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>TransferThread</name> - <message> - <location filename="../../TransferThread.cpp" line="311"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="321"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="626"/> - <source>The checksums not match</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>WriteThread</name> - <message> - <location filename="../../WriteThread.cpp" line="443"/> - <source>Unable to read the source file: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../WriteThread.cpp" line="481"/> - <source>File truncated during the read, possible data change</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>copyEngine</name> - <message> - <location filename="../../copyEngine.cpp" line="257"/> - <location filename="../../copyEngine.cpp" line="275"/> - <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="286"/> - <location filename="../../copyEngine.cpp" line="304"/> - <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="511"/> - <source>The mode have been forced previously, it's internal error, please report it</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileErrorDialog</name> - <message> - <location filename="../../fileErrorDialog.ui" line="14"/> - <source>Error on file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="20"/> - <source>Error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="56"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="73"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="90"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="136"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="156"/> - <source>Put to bottom</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="163"/> - <source>Retry</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="170"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="177"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="29"/> - <source>Error on folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="32"/> - <source>Folder name</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileExistsDialog</name> - <message> - <location filename="../../fileExistsDialog.ui" line="14"/> - <source>The file exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="34"/> - <source>Source</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="82"/> - <location filename="../../fileExistsDialog.ui" line="153"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="99"/> - <location filename="../../fileExistsDialog.ui" line="170"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="116"/> - <location filename="../../fileExistsDialog.ui" line="187"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="243"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="254"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="274"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="281"/> - <source>&Overwrite</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="291"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="298"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="307"/> - <source>Overwrite if newer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="312"/> - <source>Overwrite if not same modification date</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="102"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="112"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileIsSameDialog</name> - <message> - <location filename="../../fileIsSameDialog.ui" line="14"/> - <source>This files are the same file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="20"/> - <source>The source and destination is same</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="47"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="64"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="81"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="137"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="148"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="168"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="175"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="182"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="87"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="97"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>folderExistsDialog</name> - <message> - <location filename="../../folderExistsDialog.ui" line="14"/> - <source>This folders are the same folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="34"/> - <source>Source</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="62"/> - <source>The source and destination is same</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="89"/> - <location filename="../../folderExistsDialog.ui" line="140"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="106"/> - <location filename="../../folderExistsDialog.ui" line="150"/> - <source>Folder name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="200"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="211"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="218"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="225"/> - <source>Merge</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="232"/> - <source>Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="239"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="29"/> - <source>Folder already exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="85"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="95"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>options</name> - <message> - <location filename="../../options.ui" line="23"/> - <source>Transfer the file rights</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="33"/> - <source>Keep the file date</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="214"/> - <source>Block size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="43"/> - <location filename="../../options.ui" line="198"/> - <source>KB</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="56"/> - <source>Auto start the transfer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="66"/> - <source>When folder error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="74"/> - <location filename="../../options.ui" line="95"/> - <source>Ask</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="79"/> - <location filename="../../options.ui" line="105"/> - <source>Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="100"/> - <source>Merge</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="110"/> - <source>Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="118"/> - <source>Check if destination folder exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="87"/> - <source>When folder collision</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="128"/> - <source>Checksum</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="144"/> - <source>Only after error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="154"/> - <source>Ignore if impossible</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="171"/> - <source>Do checksum</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="181"/> - <source>Enable OS buffer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="234"/> - <source>Filters</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="241"/> - <source>Renaming rules</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="191"/> - <source>OS buffer only if smaller than</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>scanFileOrFolder</name> - <message> - <location filename="../../scanFileOrFolder.cpp" line="218"/> - <location filename="../../scanFileOrFolder.cpp" line="282"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="228"/> - <location filename="../../scanFileOrFolder.cpp" line="292"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="326"/> - <source>The folder not exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="328"/> - <source>The folder is not readable</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/de/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/de/translation.ts deleted file mode 100644 index 08c7422..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/Languages/de/translation.ts +++ /dev/null @@ -1,795 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.0" language="de" sourcelanguage="en"> -<context> - <name>AvancedQFile</name> - <message> - <location filename="../../AvancedQFile.cpp" line="28"/> - <location filename="../../AvancedQFile.cpp" line="59"/> - <location filename="../../AvancedQFile.cpp" line="90"/> - <source>Not supported on this platform</source> - <translation>Auf dieser Plattform nicht unterstĆ¼tzt</translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="42"/> - <source>Last modified date is wrong</source> - <translation>Datum der letzten Ćnderung ist falsch</translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="73"/> - <source>Last access date is wrong</source> - <translation>Datum des letzten Zugriffs ist falsch</translation> - </message> -</context> -<context> - <name>Factory</name> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options error</source> - <translation>Optionen Fehler</translation> - </message> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation>Optionen Motor nicht geladen wird, kann nicht auf die Filter zu Ć¼bersetzen</translation> - </message> -</context> -<context> - <name>FilterRules</name> - <message> - <location filename="../../FilterRules.ui" line="33"/> - <source>Search:</source> - <translation>Suche:</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="43"/> - <source>Search type:</source> - <translation>Suche Typ:</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="51"/> - <source>Raw text</source> - <translation>Roh text</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="56"/> - <source>Simplified regex</source> - <translation>Vereinfachte regex</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="61"/> - <source>Perl's regex</source> - <translation>Perl's regex</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="69"/> - <source>Apply on:</source> - <translation>Anwenden auf:</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="77"/> - <source>File</source> - <translation>Datei</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="82"/> - <source>Folder</source> - <translation>Ordner</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="87"/> - <source>File and folder</source> - <translation>Datei-und Ordnernamen</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="95"/> - <source>All string need match</source> - <translation>Alle Saite muss passen</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="102"/> - <source>Checking</source> - <translation>ĆberprĆ¼fung</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="115"/> - <source>Test string:</source> - <translation>Test-String:</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="17"/> - <source>Filters dialog</source> - <translation>Filters dialog</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="108"/> - <source>The regex is valid</source> - <translation>Die Regex ist gĆ¼ltig</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="125"/> - <source>The test string match with the regex</source> - <translation>Der Test-String Match mit dem regex</translation> - </message> -</context> -<context> - <name>Filters</name> - <message> - <location filename="../../Filters.ui" line="14"/> - <source>Filters</source> - <translation>Filter</translation> - </message> - <message> - <location filename="../../Filters.ui" line="30"/> - <source>Exclusion filter</source> - <translation>Ausschluss-Filter</translation> - </message> - <message> - <location filename="../../Filters.ui" line="93"/> - <source>Inclusion filter</source> - <translation>Einbeziehungsfilter</translation> - </message> - <message> - <location filename="../../Filters.ui" line="105"/> - <source>None = Include all</source> - <translation>None = SchlieĆt alle</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="92"/> - <location filename="../../Filters.cpp" line="130"/> - <source>Raw text</source> - <translation>Roh text</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="95"/> - <location filename="../../Filters.cpp" line="133"/> - <source>Simplified regex</source> - <translation>Vereinfachte regex</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="98"/> - <location filename="../../Filters.cpp" line="136"/> - <source>Perl's regex</source> - <translation>Perl's regex</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="106"/> - <location filename="../../Filters.cpp" line="144"/> - <source>Only on file</source> - <translation>Nur auf Datei</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="109"/> - <location filename="../../Filters.cpp" line="147"/> - <source>Only on folder</source> - <translation>Nur auf Ordner</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="115"/> - <location filename="../../Filters.cpp" line="153"/> - <location filename="../../Filters.cpp" line="215"/> - <location filename="../../Filters.cpp" line="254"/> - <source>Full match</source> - <translation>Spielaufzeichnung</translation> - </message> -</context> -<context> - <name>ListThread</name> - <message> - <location filename="../../ListThread.cpp" line="1162"/> - <source>Unable do to move or copy item into wrong forced mode: %1</source> - <translation>Kann nicht tun, verschieben oder kopieren Artikel in den falschen gezwungen Modus: %1</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1169"/> - <source>Unable to save the transfer list: %1</source> - <translation>UnfƤhig, die Transferliste sparen: %1</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1185"/> - <source>Problem at the reading, or file size is null</source> - <translation>Problem an der LektĆ¼re, der Oder DateigrƶĆe IST Null</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1192"/> - <source>Wrong header: "%1"</source> - <translation>Falsche Header: "%1"</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1201"/> - <source>The transfer list is in mixed mode, but this instance is not in this mode</source> - <translation>Die Transferliste ist im gemischten Modus, aber diese Instanz ist in diesem Modus nicht</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1210"/> - <source>The transfer list is in copy mode, but this instance is not in this mode</source> - <translation>Die Transferliste ist im Copy-Mode, aber dieser Fall ist in diesem Modus nicht</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1216"/> - <source>The transfer list is in move mode, but this instance is not in this mode</source> - <translation>Die Transferliste ist in Verschiebe-Modus, aber diese Instanz ist in diesem Modus nicht</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1263"/> - <source>Some error have been found during the line parsing</source> - <translation>Einige Fehler wurden wƤhrend des Parsing gefunden</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1269"/> - <source>Unable to open the transfer list: %1</source> - <translation>UnfƤhig, die Transferliste geƶffnet: %1</translation> - </message> -</context> -<context> - <name>MkPath</name> - <message> - <location filename="../../MkPath.cpp" line="62"/> - <source>Unable to create the folder</source> - <translation>Der Ordner kann nicht erstellt</translation> - </message> -</context> -<context> - <name>ReadThread</name> - <message> - <location filename="../../ReadThread.cpp" line="154"/> - <location filename="../../ReadThread.cpp" line="316"/> - <source>Unable to read the source file: </source> - <translation>UnfƤhig, die Quelldatei zu lesen: </translation> - </message> - <message> - <location filename="../../ReadThread.cpp" line="193"/> - <location filename="../../ReadThread.cpp" line="373"/> - <source>File truncated during the read, possible data change</source> - <translation>Datei wƤhrend der Lese, mƶglich DatenƤnderung abgeschnitten</translation> - </message> -</context> -<context> - <name>RenamingRules</name> - <message> - <location filename="../../RenamingRules.ui" line="26"/> - <source>First renaming</source> - <translation>erste Umbenennung</translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="32"/> - <source>%name% - copy</source> - <extracomment>%name% should not be translated</extracomment> - <translation>%name% - kopieren</translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="39"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> - <extracomment> should not be translated</extracomment> - <translation><html><head/><body><p>Variablen: <span style=" font-weight:600;">%name%</span> fĆ¼r den ursprĆ¼nglichen Dateinamen</p></body></html></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="49"/> - <source>Second renaming</source> - <translation>zweite Umbenennung</translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="55"/> - <source>%name% - copy (%number%)</source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation>%name% - kopieren (%number%)</translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="62"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</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 ursprĆ¼nglichen Dateinamen</p><p><span style=" font-weight:600;">%number%</span> fĆ¼r die zusƤtzliche Zahl</p></body></html></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="39"/> - <location filename="../../RenamingRules.cpp" line="62"/> - <source>%1 - copy</source> - <translation>%1 - kopieren</translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="43"/> - <location filename="../../RenamingRules.cpp" line="73"/> - <source>%1 - copy (%2)</source> - <translation>%1 - kopieren (%2)</translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="14"/> - <source>Renaming rules</source> - <translation>Umbenennen von Regeln</translation> - </message> -</context> -<context> - <name>RmPath</name> - <message> - <location filename="../../RmPath.cpp" line="59"/> - <source>Unable to remove the folder</source> - <translation>Der Ordner kann nicht entfernen</translation> - </message> -</context> -<context> - <name>TransferThread</name> - <message> - <location filename="../../TransferThread.cpp" line="311"/> - <source>%1 - copy</source> - <translation>%1 - kopieren</translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="321"/> - <source>%1 - copy (%2)</source> - <translation>%1 - kopieren (%2)</translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="626"/> - <source>The checksums not match</source> - <translation>Die PrĆ¼fsummen nicht Ć¼berein</translation> - </message> -</context> -<context> - <name>WriteThread</name> - <message> - <location filename="../../WriteThread.cpp" line="443"/> - <source>Unable to read the source file: </source> - <translation>UnfƤhig, die Quelldatei zu lesen: </translation> - </message> - <message> - <location filename="../../WriteThread.cpp" line="481"/> - <source>File truncated during the read, possible data change</source> - <translation>Datei wƤhrend der Lese, mƶglich DatenƤnderung abgeschnitten</translation> - </message> -</context> -<context> - <name>copyEngine</name> - <message> - <location filename="../../copyEngine.cpp" line="257"/> - <location filename="../../copyEngine.cpp" line="275"/> - <source>The engine is forced to move, you can't copy with it</source> - <translation>Der Motor wird gezwungen sich zu bewegen, kƶnnen Sie mit ihr nicht zu kopieren</translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="286"/> - <location filename="../../copyEngine.cpp" line="304"/> - <source>The engine is forced to copy, you can't move with it</source> - <translation>Der Motor ist gezwungen, zu kopieren, kƶnnen Sie nicht mit ihm bewegen</translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="511"/> - <source>The mode have been forced previously, it's internal error, please report it</source> - <translation>Der Modus wurden vorher gezwungen, es interner Fehler ist, melden Sie dies bitte</translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options error</source> - <translation>Optionen Fehler</translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation>Optionen Motor nicht geladen wird, kann nicht auf die Filter zu Ć¼bersetzen</translation> - </message> -</context> -<context> - <name>fileErrorDialog</name> - <message> - <location filename="../../fileErrorDialog.ui" line="14"/> - <source>Error on file</source> - <translation>Fehler bei der Datei</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="20"/> - <source>Error</source> - <translation>Fehler</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="56"/> - <source>Size</source> - <translation>GrƶĆe</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="73"/> - <source>Modified</source> - <translation>GeƤndert</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="90"/> - <source>File name</source> - <translation>Dateiname</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="136"/> - <source>&Always do this action</source> - <translation>Immer diese Aktion</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="156"/> - <source>Put to bottom</source> - <translation>Legen Sie nach unten</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="163"/> - <source>Retry</source> - <translation>Wiederholen</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="170"/> - <source>&Skip</source> - <translation>Ć¼berspringen</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="177"/> - <source>&Cancel</source> - <translation>Stornieren</translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="29"/> - <source>Error on folder</source> - <translation>Fehler auf Ordner</translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="32"/> - <source>Folder name</source> - <translation>Ordnername</translation> - </message> -</context> -<context> - <name>fileExistsDialog</name> - <message> - <location filename="../../fileExistsDialog.ui" line="14"/> - <source>The file exists</source> - <translation>Die Datei existiert</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="34"/> - <source>Source</source> - <translation>Quelle</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation>Ziel</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="82"/> - <location filename="../../fileExistsDialog.ui" line="153"/> - <source>Size</source> - <translation>GrƶĆe</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="99"/> - <location filename="../../fileExistsDialog.ui" line="170"/> - <source>Modified</source> - <translation>GeƤndert</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="116"/> - <location filename="../../fileExistsDialog.ui" line="187"/> - <source>File name</source> - <translation>Dateiname</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="243"/> - <source>Suggest new &name</source> - <translation>Schlagen neuen Namen</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="254"/> - <source>&Always do this action</source> - <translation>Immer diese Aktion</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="274"/> - <source>&Rename</source> - <translation>Umbenennen</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="281"/> - <source>&Overwrite</source> - <translation>Ć¼berschreiben</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="291"/> - <source>&Skip</source> - <translation>Ć¼berspringen</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="298"/> - <source>&Cancel</source> - <translation>Stornieren</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="307"/> - <source>Overwrite if newer</source> - <translation>Ćberschreiben, wenn neuere</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="312"/> - <source>Overwrite if not same modification date</source> - <translation>Ćberschreiben, wenn nicht gleiche Ćnderungsdatum</translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="102"/> - <source>%1 - copy</source> - <translation>%1 - kopieren</translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="112"/> - <source>%1 - copy (%2)</source> - <translation>%1 - kopieren (%2)</translation> - </message> -</context> -<context> - <name>fileIsSameDialog</name> - <message> - <location filename="../../fileIsSameDialog.ui" line="14"/> - <source>This files are the same file</source> - <translation>Diese Dateien sind die gleiche Datei</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="20"/> - <source>The source and destination is same</source> - <translation>Die Quelle und das Ziel ist dasselbe</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="47"/> - <source>Size</source> - <translation>GrƶĆe</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="64"/> - <source>Modified</source> - <translation>GeƤndert</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="81"/> - <source>File name</source> - <translation>Dateiname</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="137"/> - <source>Suggest new &name</source> - <translation>Schlagen neuen Namen</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="148"/> - <source>&Always do this action</source> - <translation>Immer diese Aktion</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="168"/> - <source>&Rename</source> - <translation>Umbenennen</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="175"/> - <source>&Skip</source> - <translation>Ć¼berspringen</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="182"/> - <source>&Cancel</source> - <translation>Stornieren</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="87"/> - <source>%1 - copy</source> - <translation>%1 - kopieren</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="97"/> - <source>%1 - copy (%2)</source> - <translation>%1 - kopieren (%2)</translation> - </message> -</context> -<context> - <name>folderExistsDialog</name> - <message> - <location filename="../../folderExistsDialog.ui" line="14"/> - <source>This folders are the same folder</source> - <translation>Diese Ordner sind die gleichen Ordner</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="34"/> - <source>Source</source> - <translation>Quelle</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation>Ziel</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="62"/> - <source>The source and destination is same</source> - <translation>Die Quelle und das Ziel ist dasselbe</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="89"/> - <location filename="../../folderExistsDialog.ui" line="140"/> - <source>Modified</source> - <translation>GeƤndert</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="106"/> - <location filename="../../folderExistsDialog.ui" line="150"/> - <source>Folder name</source> - <translation>Ordnername</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="200"/> - <source>Suggest new &name</source> - <translation>Schlagen neuen Namen</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="211"/> - <source>&Always do this action</source> - <translation>Immer diese Aktion</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="218"/> - <source>&Rename</source> - <translation>Umbenennen</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="225"/> - <source>Merge</source> - <translation>Fusionieren</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="232"/> - <source>Skip</source> - <translation>Ć¼berspringen</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="239"/> - <source>&Cancel</source> - <translation>Stornieren</translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="29"/> - <source>Folder already exists</source> - <translation>Ordner bereits vorhanden ist</translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="85"/> - <source>%1 - copy</source> - <translation>%1 - kopieren</translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="95"/> - <source>%1 - copy (%2)</source> - <translation>%1 - kopieren (%2)</translation> - </message> -</context> -<context> - <name>options</name> - <message> - <location filename="../../options.ui" line="23"/> - <source>Transfer the file rights</source> - <translation>Ćbertragen Sie die Datei Rechte</translation> - </message> - <message> - <location filename="../../options.ui" line="33"/> - <source>Keep the file date</source> - <translation>Halten Sie das Datei-Datum</translation> - </message> - <message> - <location filename="../../options.ui" line="214"/> - <source>Block size</source> - <translation>BlockgrƶĆe</translation> - </message> - <message> - <location filename="../../options.ui" line="43"/> - <location filename="../../options.ui" line="198"/> - <source>KB</source> - <translation>KB</translation> - </message> - <message> - <location filename="../../options.ui" line="56"/> - <source>Auto start the transfer</source> - <translation>Auto starten Sie die Ćbertragung</translation> - </message> - <message> - <location filename="../../options.ui" line="66"/> - <source>When folder error</source> - <translation>Wenn Ordner Fehler</translation> - </message> - <message> - <location filename="../../options.ui" line="74"/> - <location filename="../../options.ui" line="95"/> - <source>Ask</source> - <translation>Fragen</translation> - </message> - <message> - <location filename="../../options.ui" line="79"/> - <location filename="../../options.ui" line="105"/> - <source>Skip</source> - <translation>Ć¼berspringen</translation> - </message> - <message> - <location filename="../../options.ui" line="100"/> - <source>Merge</source> - <translation>Fusionieren</translation> - </message> - <message> - <location filename="../../options.ui" line="110"/> - <source>Rename</source> - <translation>Umbenennen</translation> - </message> - <message> - <location filename="../../options.ui" line="118"/> - <source>Check if destination folder exists</source> - <translation>PrĆ¼fen Sie, ob Zielordner vorhanden ist</translation> - </message> - <message> - <location filename="../../options.ui" line="87"/> - <source>When folder collision</source> - <translation>Wenn Ordner Kollision</translation> - </message> - <message> - <location filename="../../options.ui" line="128"/> - <source>Checksum</source> - <translation>Checksum</translation> - </message> - <message> - <location filename="../../options.ui" line="144"/> - <source>Only after error</source> - <translation>Erst nach dem Fehler</translation> - </message> - <message> - <location filename="../../options.ui" line="154"/> - <source>Ignore if impossible</source> - <translation>Ignorieren, wenn nicht</translation> - </message> - <message> - <location filename="../../options.ui" line="171"/> - <source>Do checksum</source> - <translation>Haben checksum</translation> - </message> - <message> - <location filename="../../options.ui" line="181"/> - <source>Enable OS buffer</source> - <translation>Aktivieren Sie OS-Puffer</translation> - </message> - <message> - <location filename="../../options.ui" line="234"/> - <source>Filters</source> - <translation>Filter</translation> - </message> - <message> - <location filename="../../options.ui" line="241"/> - <source>Renaming rules</source> - <translation>Umbenennen von Regeln</translation> - </message> - <message> - <location filename="../../options.ui" line="191"/> - <source>OS buffer only if smaller than</source> - <translation>OS-Puffer, wenn kleiner als</translation> - </message> -</context> -<context> - <name>scanFileOrFolder</name> - <message> - <location filename="../../scanFileOrFolder.cpp" line="218"/> - <location filename="../../scanFileOrFolder.cpp" line="282"/> - <source>%1 - copy</source> - <translation>%1 - kopieren</translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="228"/> - <location filename="../../scanFileOrFolder.cpp" line="292"/> - <source>%1 - copy (%2)</source> - <translation>%1 - kopieren (%2)</translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="326"/> - <source>The folder not exists</source> - <translation>Der Ordner existiert nicht</translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="328"/> - <source>The folder is not readable</source> - <translation>Der Ordner ist nicht lesbar</translation> - </message> -</context> -</TS> diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/el/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/el/translation.ts deleted file mode 100644 index 0898631..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/Languages/el/translation.ts +++ /dev/null @@ -1,795 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.0"> -<context> - <name>AvancedQFile</name> - <message> - <location filename="../../AvancedQFile.cpp" line="28"/> - <location filename="../../AvancedQFile.cpp" line="59"/> - <location filename="../../AvancedQFile.cpp" line="90"/> - <source>Not supported on this platform</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="42"/> - <source>Last modified date is wrong</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="73"/> - <source>Last access date is wrong</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Factory</name> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>FilterRules</name> - <message> - <location filename="../../FilterRules.ui" line="33"/> - <source>Search:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="43"/> - <source>Search type:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="51"/> - <source>Raw text</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="56"/> - <source>Simplified regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="61"/> - <source>Perl's regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="69"/> - <source>Apply on:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="77"/> - <source>File</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="82"/> - <source>Folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="87"/> - <source>File and folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="95"/> - <source>All string need match</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="102"/> - <source>Checking</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="115"/> - <source>Test string:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="17"/> - <source>Filters dialog</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="108"/> - <source>The regex is valid</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="125"/> - <source>The test string match with the regex</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Filters</name> - <message> - <location filename="../../Filters.ui" line="14"/> - <source>Filters</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="30"/> - <source>Exclusion filter</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="93"/> - <source>Inclusion filter</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="105"/> - <source>None = Include all</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="92"/> - <location filename="../../Filters.cpp" line="130"/> - <source>Raw text</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="95"/> - <location filename="../../Filters.cpp" line="133"/> - <source>Simplified regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="98"/> - <location filename="../../Filters.cpp" line="136"/> - <source>Perl's regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="106"/> - <location filename="../../Filters.cpp" line="144"/> - <source>Only on file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="109"/> - <location filename="../../Filters.cpp" line="147"/> - <source>Only on folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="115"/> - <location filename="../../Filters.cpp" line="153"/> - <location filename="../../Filters.cpp" line="215"/> - <location filename="../../Filters.cpp" line="254"/> - <source>Full match</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>ListThread</name> - <message> - <location filename="../../ListThread.cpp" line="1162"/> - <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="1169"/> - <source>Unable to save the transfer list: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1185"/> - <source>Problem at the reading, or file size is null</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1192"/> - <source>Wrong header: "%1"</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1201"/> - <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="1210"/> - <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="1216"/> - <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="1263"/> - <source>Some error have been found during the line parsing</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1269"/> - <source>Unable to open the transfer list: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>MkPath</name> - <message> - <location filename="../../MkPath.cpp" line="62"/> - <source>Unable to create the folder</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>ReadThread</name> - <message> - <location filename="../../ReadThread.cpp" line="154"/> - <location filename="../../ReadThread.cpp" line="316"/> - <source>Unable to read the source file: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ReadThread.cpp" line="193"/> - <location filename="../../ReadThread.cpp" line="373"/> - <source>File truncated during the read, possible data change</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>RenamingRules</name> - <message> - <location filename="../../RenamingRules.ui" line="26"/> - <source>First renaming</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="32"/> - <source>%name% - copy</source> - <extracomment>%name% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="39"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> - <extracomment> should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="49"/> - <source>Second renaming</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="55"/> - <source>%name% - copy (%number%)</source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="62"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="39"/> - <location filename="../../RenamingRules.cpp" line="62"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="43"/> - <location filename="../../RenamingRules.cpp" line="73"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="14"/> - <source>Renaming rules</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>RmPath</name> - <message> - <location filename="../../RmPath.cpp" line="59"/> - <source>Unable to remove the folder</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>TransferThread</name> - <message> - <location filename="../../TransferThread.cpp" line="311"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="321"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="626"/> - <source>The checksums not match</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>WriteThread</name> - <message> - <location filename="../../WriteThread.cpp" line="443"/> - <source>Unable to read the source file: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../WriteThread.cpp" line="481"/> - <source>File truncated during the read, possible data change</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>copyEngine</name> - <message> - <location filename="../../copyEngine.cpp" line="257"/> - <location filename="../../copyEngine.cpp" line="275"/> - <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="286"/> - <location filename="../../copyEngine.cpp" line="304"/> - <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="511"/> - <source>The mode have been forced previously, it's internal error, please report it</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileErrorDialog</name> - <message> - <location filename="../../fileErrorDialog.ui" line="14"/> - <source>Error on file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="20"/> - <source>Error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="56"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="73"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="90"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="136"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="156"/> - <source>Put to bottom</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="163"/> - <source>Retry</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="170"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="177"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="29"/> - <source>Error on folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="32"/> - <source>Folder name</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileExistsDialog</name> - <message> - <location filename="../../fileExistsDialog.ui" line="14"/> - <source>The file exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="34"/> - <source>Source</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="82"/> - <location filename="../../fileExistsDialog.ui" line="153"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="99"/> - <location filename="../../fileExistsDialog.ui" line="170"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="116"/> - <location filename="../../fileExistsDialog.ui" line="187"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="243"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="254"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="274"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="281"/> - <source>&Overwrite</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="291"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="298"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="307"/> - <source>Overwrite if newer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="312"/> - <source>Overwrite if not same modification date</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="102"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="112"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileIsSameDialog</name> - <message> - <location filename="../../fileIsSameDialog.ui" line="14"/> - <source>This files are the same file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="20"/> - <source>The source and destination is same</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="47"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="64"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="81"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="137"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="148"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="168"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="175"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="182"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="87"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="97"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>folderExistsDialog</name> - <message> - <location filename="../../folderExistsDialog.ui" line="14"/> - <source>This folders are the same folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="34"/> - <source>Source</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="62"/> - <source>The source and destination is same</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="89"/> - <location filename="../../folderExistsDialog.ui" line="140"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="106"/> - <location filename="../../folderExistsDialog.ui" line="150"/> - <source>Folder name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="200"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="211"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="218"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="225"/> - <source>Merge</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="232"/> - <source>Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="239"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="29"/> - <source>Folder already exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="85"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="95"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>options</name> - <message> - <location filename="../../options.ui" line="23"/> - <source>Transfer the file rights</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="33"/> - <source>Keep the file date</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="214"/> - <source>Block size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="43"/> - <location filename="../../options.ui" line="198"/> - <source>KB</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="56"/> - <source>Auto start the transfer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="66"/> - <source>When folder error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="74"/> - <location filename="../../options.ui" line="95"/> - <source>Ask</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="79"/> - <location filename="../../options.ui" line="105"/> - <source>Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="100"/> - <source>Merge</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="110"/> - <source>Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="118"/> - <source>Check if destination folder exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="87"/> - <source>When folder collision</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="128"/> - <source>Checksum</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="144"/> - <source>Only after error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="154"/> - <source>Ignore if impossible</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="171"/> - <source>Do checksum</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="181"/> - <source>Enable OS buffer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="234"/> - <source>Filters</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="241"/> - <source>Renaming rules</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="191"/> - <source>OS buffer only if smaller than</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>scanFileOrFolder</name> - <message> - <location filename="../../scanFileOrFolder.cpp" line="218"/> - <location filename="../../scanFileOrFolder.cpp" line="282"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="228"/> - <location filename="../../scanFileOrFolder.cpp" line="292"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="326"/> - <source>The folder not exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="328"/> - <source>The folder is not readable</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/es/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/es/translation.ts deleted file mode 100644 index fd90e5e..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/Languages/es/translation.ts +++ /dev/null @@ -1,795 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.0" language="es" sourcelanguage="en"> -<context> - <name>AvancedQFile</name> - <message> - <location filename="../../AvancedQFile.cpp" line="28"/> - <location filename="../../AvancedQFile.cpp" line="59"/> - <location filename="../../AvancedQFile.cpp" line="90"/> - <source>Not supported on this platform</source> - <translation>No es compatible con esta plataforma</translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="42"/> - <source>Last modified date is wrong</source> - <translation>Fecha de Ćŗltima modificaciĆ³n es incorrecto</translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="73"/> - <source>Last access date is wrong</source> - <translation>Fecha de Ćŗltimo acceso es incorrecto</translation> - </message> -</context> -<context> - <name>Factory</name> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options error</source> - <translation>Error de opciones</translation> - </message> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <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>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="95"/> - <source>All string need match</source> - <translation>Todas las lĆneas tiene por quĆ© coincidir</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="102"/> - <source>Checking</source> - <translation>Verification</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="115"/> - <source>Test string:</source> - <translation>Prueba de la cuerda:</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="17"/> - <source>Filters dialog</source> - <translation>Filtros de diĆ”logo</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="108"/> - <source>The regex is valid</source> - <translation>La expresiĆ³n regular es vĆ”lido</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="125"/> - <source>The test string match with the regex</source> - <translation>La coincidencia con la cadena de prueba con la expresiĆ³n regular</translation> - </message> -</context> -<context> - <name>Filters</name> - <message> - <location filename="../../Filters.ui" line="14"/> - <source>Filters</source> - <translation>Filtros</translation> - </message> - <message> - <location filename="../../Filters.ui" line="30"/> - <source>Exclusion filter</source> - <translation>ExclusiĆ³n filtro</translation> - </message> - <message> - <location filename="../../Filters.ui" line="93"/> - <source>Inclusion filter</source> - <translation>La inclusiĆ³n del filtro</translation> - </message> - <message> - <location filename="../../Filters.ui" line="105"/> - <source>None = Include all</source> - <translation>Ninguno = Incluya todos los</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="92"/> - <location filename="../../Filters.cpp" line="130"/> - <source>Raw text</source> - <translation>texto Fuente</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="95"/> - <location filename="../../Filters.cpp" line="133"/> - <source>Simplified regex</source> - <translation>Simplificado regex</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="98"/> - <location filename="../../Filters.cpp" line="136"/> - <source>Perl's regex</source> - <translation>Perl's regex</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="106"/> - <location filename="../../Filters.cpp" line="144"/> - <source>Only on file</source> - <translation>SĆ³lo en el archivo</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="109"/> - <location filename="../../Filters.cpp" line="147"/> - <source>Only on folder</source> - <translation>SĆ³lo en la carpeta</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="115"/> - <location filename="../../Filters.cpp" line="153"/> - <location filename="../../Filters.cpp" line="215"/> - <location filename="../../Filters.cpp" line="254"/> - <source>Full match</source> - <translation>Partido completo</translation> - </message> -</context> -<context> - <name>ListThread</name> - <message> - <location filename="../../ListThread.cpp" line="1162"/> - <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="1169"/> - <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="1185"/> - <source>Problem at the reading, or file size is null</source> - <translation>Problema en la lectura, o el tamaƱo del archivo es nulo</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1192"/> - <source>Wrong header: "%1"</source> - <translation>Encabezado incorrecto: "%1"</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1201"/> - <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="1210"/> - <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="1216"/> - <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="1263"/> - <source>Some error have been found during the line parsing</source> - <translation>Algunos errores han sido encontrados durante el anĆ”lisis de lĆnea</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1269"/> - <source>Unable to open the transfer list: %1</source> - <translation>No se puede abrir la lista de transferencias: %1</translation> - </message> -</context> -<context> - <name>MkPath</name> - <message> - <location filename="../../MkPath.cpp" line="62"/> - <source>Unable to create the folder</source> - <translation>No se puede crear la carpeta</translation> - </message> -</context> -<context> - <name>ReadThread</name> - <message> - <location filename="../../ReadThread.cpp" line="154"/> - <location filename="../../ReadThread.cpp" line="316"/> - <source>Unable to read the source file: </source> - <translation>No se puede leer el archivo de origen: </translation> - </message> - <message> - <location filename="../../ReadThread.cpp" line="193"/> - <location filename="../../ReadThread.cpp" line="373"/> - <source>File truncated during the read, possible data change</source> - <translation>Archivo truncada durante el cambio de lectura, los datos posibles</translation> - </message> -</context> -<context> - <name>RenamingRules</name> - <message> - <location filename="../../RenamingRules.ui" line="26"/> - <source>First renaming</source> - <translation>En primer lugar el cambio de nombre</translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="32"/> - <source>%name% - copy</source> - <extracomment>%name% should not be translated</extracomment> - <translation>%name% - copia</translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="39"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> - <extracomment> should not be translated</extracomment> - <translation><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> para el nombre del archivo original</p></body></html></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="49"/> - <source>Second renaming</source> - <translation>En segundo lugar el cambio de nombre</translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="55"/> - <source>%name% - copy (%number%)</source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation>%name% - copia (%number%)</translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="62"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> para el nombre del archivo original</p><p><span style=" font-weight:600;">%number%</span> para el nĆŗmero adicional</p></body></html></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="39"/> - <location filename="../../RenamingRules.cpp" line="62"/> - <source>%1 - copy</source> - <translation>%1 - copia</translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="43"/> - <location filename="../../RenamingRules.cpp" line="73"/> - <source>%1 - copy (%2)</source> - <translation>%1 - copia (%2)</translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="14"/> - <source>Renaming rules</source> - <translation>Reglas de Cambio de nombre</translation> - </message> -</context> -<context> - <name>RmPath</name> - <message> - <location filename="../../RmPath.cpp" line="59"/> - <source>Unable to remove the folder</source> - <translation>No se puede eliminar la carpeta</translation> - </message> -</context> -<context> - <name>TransferThread</name> - <message> - <location filename="../../TransferThread.cpp" line="311"/> - <source>%1 - copy</source> - <translation>%1 - copia</translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="321"/> - <source>%1 - copy (%2)</source> - <translation>%1 - copia (%2)</translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="626"/> - <source>The checksums not match</source> - <translation>Las sumas de comprobaciĆ³n no coincide</translation> - </message> -</context> -<context> - <name>WriteThread</name> - <message> - <location filename="../../WriteThread.cpp" line="443"/> - <source>Unable to read the source file: </source> - <translation>No se puede leer el archivo de origen: </translation> - </message> - <message> - <location filename="../../WriteThread.cpp" line="481"/> - <source>File truncated during the read, possible data change</source> - <translation>Archivo truncada durante el cambio de lectura, los datos posibles</translation> - </message> -</context> -<context> - <name>copyEngine</name> - <message> - <location filename="../../copyEngine.cpp" line="257"/> - <location filename="../../copyEngine.cpp" line="275"/> - <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="286"/> - <location filename="../../copyEngine.cpp" line="304"/> - <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="511"/> - <source>The mode have been forced previously, it's internal error, please report it</source> - <translation>El modo se han visto obligados con anterioridad, es un error interno, por favor repĆ³rtelo</translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options error</source> - <translation>Opciones de error</translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <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>fileErrorDialog</name> - <message> - <location filename="../../fileErrorDialog.ui" line="14"/> - <source>Error on file</source> - <translation>Error en el archivo</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="20"/> - <source>Error</source> - <translation>Error</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="56"/> - <source>Size</source> - <translation>TamaƱo</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="73"/> - <source>Modified</source> - <translation>Modificado</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="90"/> - <source>File name</source> - <translation>Nombre de archivo</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="136"/> - <source>&Always do this action</source> - <translation>Siempre hacer esta acciĆ³n</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="156"/> - <source>Put to bottom</source> - <translation>Ponga a abajo</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="163"/> - <source>Retry</source> - <translation>Reintentar</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="170"/> - <source>&Skip</source> - <translation>Omitir</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="177"/> - <source>&Cancel</source> - <translation>Cancelar</translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="29"/> - <source>Error on folder</source> - <translation>Error en la carpeta</translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="32"/> - <source>Folder name</source> - <translation>Nombre de la carpeta</translation> - </message> -</context> -<context> - <name>fileExistsDialog</name> - <message> - <location filename="../../fileExistsDialog.ui" line="14"/> - <source>The file exists</source> - <translation>El archivo ya existe</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="34"/> - <source>Source</source> - <translation>Fuente</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation>Destino</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="82"/> - <location filename="../../fileExistsDialog.ui" line="153"/> - <source>Size</source> - <translation>TamaƱo</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="99"/> - <location filename="../../fileExistsDialog.ui" line="170"/> - <source>Modified</source> - <translation>Modificado</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="116"/> - <location filename="../../fileExistsDialog.ui" line="187"/> - <source>File name</source> - <translation>Nombre de archivo</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="243"/> - <source>Suggest new &name</source> - <translation>Sugerir nuevo nombre</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="254"/> - <source>&Always do this action</source> - <translation>Siempre hacer esta acciĆ³n</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="274"/> - <source>&Rename</source> - <translation>Cambiar el nombre</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="281"/> - <source>&Overwrite</source> - <translation>Sobrescribir</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="291"/> - <source>&Skip</source> - <translation>Omitir</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="298"/> - <source>&Cancel</source> - <translation>Cancelar</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="307"/> - <source>Overwrite if newer</source> - <translation>Sobrescribir si nuevo</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="312"/> - <source>Overwrite if not same modification date</source> - <translation>Sobrescribir si no es misma fecha de modificaciĆ³n</translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="102"/> - <source>%1 - copy</source> - <translation>%1 - copia</translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="112"/> - <source>%1 - copy (%2)</source> - <translation>%1 - copia (%2)</translation> - </message> -</context> -<context> - <name>fileIsSameDialog</name> - <message> - <location filename="../../fileIsSameDialog.ui" line="14"/> - <source>This files are the same file</source> - <translation>Estos archivos son el mismo archivo</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="20"/> - <source>The source and destination is same</source> - <translation>La fuente y el destino es el mismo</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="47"/> - <source>Size</source> - <translation>TamaƱo</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="64"/> - <source>Modified</source> - <translation>Modificado</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="81"/> - <source>File name</source> - <translation>Nombre de archivo</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="137"/> - <source>Suggest new &name</source> - <translation>Sugerir nuevo nombre</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="148"/> - <source>&Always do this action</source> - <translation>Siempre hacer esta acciĆ³n</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="168"/> - <source>&Rename</source> - <translation>Cambiar el nombre</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="175"/> - <source>&Skip</source> - <translation>Omitir</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="182"/> - <source>&Cancel</source> - <translation>Cancelar</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="87"/> - <source>%1 - copy</source> - <translation>%1 - copia</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="97"/> - <source>%1 - copy (%2)</source> - <translation>%1 - copia (%2)</translation> - </message> -</context> -<context> - <name>folderExistsDialog</name> - <message> - <location filename="../../folderExistsDialog.ui" line="14"/> - <source>This folders are the same folder</source> - <translation>Esta carpeta es la misma carpeta</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="34"/> - <source>Source</source> - <translation>Fuente</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation>Destino</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="62"/> - <source>The source and destination is same</source> - <translation>La fuente y el destino es el mismo</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="89"/> - <location filename="../../folderExistsDialog.ui" line="140"/> - <source>Modified</source> - <translation>Modificado</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="106"/> - <location filename="../../folderExistsDialog.ui" line="150"/> - <source>Folder name</source> - <translation>Nombre de la carpeta</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="200"/> - <source>Suggest new &name</source> - <translation>Sugerir nuevo nombre</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="211"/> - <source>&Always do this action</source> - <translation>Siempre hacer esta acciĆ³n</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="218"/> - <source>&Rename</source> - <translation>Cambiar el nombre</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="225"/> - <source>Merge</source> - <translation>Unir</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="232"/> - <source>Skip</source> - <translation>Omitir</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="239"/> - <source>&Cancel</source> - <translation>Cancelar</translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="29"/> - <source>Folder already exists</source> - <translation>Carpeta ya existe</translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="85"/> - <source>%1 - copy</source> - <translation>%1 - copia</translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="95"/> - <source>%1 - copy (%2)</source> - <translation>%1 - copia (%2)</translation> - </message> -</context> -<context> - <name>options</name> - <message> - <location filename="../../options.ui" line="23"/> - <source>Transfer the file rights</source> - <translation>Transferencia de los derechos de archivo</translation> - </message> - <message> - <location filename="../../options.ui" line="33"/> - <source>Keep the file date</source> - <translation>Mantener la fecha de archivo</translation> - </message> - <message> - <location filename="../../options.ui" line="214"/> - <source>Block size</source> - <translation>TamaƱo del bloque</translation> - </message> - <message> - <location filename="../../options.ui" line="43"/> - <location filename="../../options.ui" line="198"/> - <source>KB</source> - <translation>KB</translation> - </message> - <message> - <location filename="../../options.ui" line="56"/> - <source>Auto start the transfer</source> - <translation>Auto iniciar la transferencia</translation> - </message> - <message> - <location filename="../../options.ui" line="66"/> - <source>When folder error</source> - <translation>Cuando el error carpeta</translation> - </message> - <message> - <location filename="../../options.ui" line="74"/> - <location filename="../../options.ui" line="95"/> - <source>Ask</source> - <translation>Pedir</translation> - </message> - <message> - <location filename="../../options.ui" line="79"/> - <location filename="../../options.ui" line="105"/> - <source>Skip</source> - <translation>Omitir</translation> - </message> - <message> - <location filename="../../options.ui" line="100"/> - <source>Merge</source> - <translation>Unir</translation> - </message> - <message> - <location filename="../../options.ui" line="110"/> - <source>Rename</source> - <translation>Cambiar el nombre</translation> - </message> - <message> - <location filename="../../options.ui" line="118"/> - <source>Check if destination folder exists</source> - <translation>Compruebe si existe la carpeta de destino</translation> - </message> - <message> - <location filename="../../options.ui" line="87"/> - <source>When folder collision</source> - <translation>Cuando la colisiĆ³n carpeta</translation> - </message> - <message> - <location filename="../../options.ui" line="128"/> - <source>Checksum</source> - <translation>Suma de comprobaciĆ³n</translation> - </message> - <message> - <location filename="../../options.ui" line="144"/> - <source>Only after error</source> - <translation>SĆ³lo despuĆ©s de un error</translation> - </message> - <message> - <location filename="../../options.ui" line="154"/> - <source>Ignore if impossible</source> - <translation>No haga caso si no es posible</translation> - </message> - <message> - <location filename="../../options.ui" line="171"/> - <source>Do checksum</source> - <translation>Hacer suma de comprobaciĆ³n</translation> - </message> - <message> - <location filename="../../options.ui" line="181"/> - <source>Enable OS buffer</source> - <translation>Habilitar el OS de amortiguaciĆ³n</translation> - </message> - <message> - <location filename="../../options.ui" line="234"/> - <source>Filters</source> - <translation>Filtros</translation> - </message> - <message> - <location filename="../../options.ui" line="241"/> - <source>Renaming rules</source> - <translation>Reglas de Cambio de nombre</translation> - </message> - <message> - <location filename="../../options.ui" line="191"/> - <source>OS buffer only if smaller than</source> - <translation>OS de amortiguaciĆ³n sĆ³lo si menor que</translation> - </message> -</context> -<context> - <name>scanFileOrFolder</name> - <message> - <location filename="../../scanFileOrFolder.cpp" line="218"/> - <location filename="../../scanFileOrFolder.cpp" line="282"/> - <source>%1 - copy</source> - <translation>%1 - copia</translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="228"/> - <location filename="../../scanFileOrFolder.cpp" line="292"/> - <source>%1 - copy (%2)</source> - <translation>%1 - copia (%2)</translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="326"/> - <source>The folder not exists</source> - <translation>La carpeta no existe</translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="328"/> - <source>The folder is not readable</source> - <translation>La carpeta no se puede leer</translation> - </message> -</context> -</TS> diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/fr/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/fr/translation.ts deleted file mode 100644 index 56e2373..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/Languages/fr/translation.ts +++ /dev/null @@ -1,799 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.0" language="fr" sourcelanguage="en"> -<context> - <name>AvancedQFile</name> - <message> - <location filename="../../AvancedQFile.cpp" line="28"/> - <location filename="../../AvancedQFile.cpp" line="59"/> - <location filename="../../AvancedQFile.cpp" line="90"/> - <source>Not supported on this platform</source> - <translation>Non supportĆ© sur cette plateforme</translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="42"/> - <source>Last modified date is wrong</source> - <translation>Date de derniĆØre modification du fichier fausse</translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="73"/> - <source>Last access date is wrong</source> - <translation>Date du dernier accĆØs au fichier fausse</translation> - </message> -</context> -<context> - <name>Factory</name> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options error</source> - <translation>Erreur d'options</translation> - </message> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation>Moteur d'options non chargĆ©, impossible d'accĆ©drer aux filtres</translation> - </message> -</context> -<context> - <name>FilterRules</name> - <message> - <location filename="../../FilterRules.ui" line="33"/> - <source>Search:</source> - <translation>Recherche:</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="43"/> - <source>Search type:</source> - <translation>Type de recherche:</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="51"/> - <source>Raw text</source> - <translation>Texte brute</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="56"/> - <source>Simplified regex</source> - <translation>Regex simplifiĆ©</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="61"/> - <source>Perl's regex</source> - <translation>Regex perl</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="69"/> - <source>Apply on:</source> - <translation>Appliquer sur:</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="77"/> - <source>File</source> - <translation>Fichier</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="82"/> - <source>Folder</source> - <translation>Dossier</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="87"/> - <source>File and folder</source> - <translation>Fichier et dossier</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="95"/> - <source>All string need match</source> - <translation>Toute la chaine doit correspondre</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="102"/> - <source>Checking</source> - <translation>VĆ©rification</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="115"/> - <source>Test string:</source> - <translation>Chaine de teste:</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="17"/> - <source>Filters dialog</source> - <translation>Dialogue des filtres</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="108"/> - <source>The regex is valid</source> - <translation>La regex est valid</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="125"/> - <source>The test string match with the regex</source> - <translation>La chaine de teste corresponds avec la regex</translation> - </message> -</context> -<context> - <name>Filters</name> - <message> - <location filename="../../Filters.ui" line="14"/> - <source>Filters</source> - <translation>Filtres</translation> - </message> - <message> - <location filename="../../Filters.ui" line="30"/> - <source>Exclusion filter</source> - <translation>Filtre d'exclusion</translation> - </message> - <message> - <location filename="../../Filters.ui" line="93"/> - <source>Inclusion filter</source> - <translation>Filtre 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="92"/> - <location filename="../../Filters.cpp" line="130"/> - <source>Raw text</source> - <translation>Texte brute</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="95"/> - <location filename="../../Filters.cpp" line="133"/> - <source>Simplified regex</source> - <translation>Regex simplifiĆ©</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="98"/> - <location filename="../../Filters.cpp" line="136"/> - <source>Perl's regex</source> - <translation>Regex perl</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="106"/> - <location filename="../../Filters.cpp" line="144"/> - <source>Only on file</source> - <translation>Appliquer sur fichier</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="109"/> - <location filename="../../Filters.cpp" line="147"/> - <source>Only on folder</source> - <translation>Appliquer sur dossier</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="115"/> - <location filename="../../Filters.cpp" line="153"/> - <location filename="../../Filters.cpp" line="215"/> - <location filename="../../Filters.cpp" line="254"/> - <source>Full match</source> - <translation>Correspondance totale</translation> - </message> -</context> -<context> - <name>ListThread</name> - <message> - <location filename="../../ListThread.cpp" line="1162"/> - <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="1169"/> - <source>Unable to save the transfer list: %1</source> - <translation>Impossible de sauvegarde la liste de transfer: %1</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1185"/> - <source>Problem at the reading, or file size is null</source> - <translation>ProblĆ©me Ć la lecture, ou fichier de taille nulle</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1192"/> - <source>Wrong header: "%1"</source> - <translation>Mauvaise en-tĆŖte: "%1"</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1201"/> - <source>The transfer list is in mixed mode, but this instance is not in this mode</source> - <translation>La list de transfer est en mode mixte, mais l'instance n'est pas dans ce mode</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1210"/> - <source>The transfer list is in copy mode, but this instance is not in this mode</source> - <translation>La list de transfer est en mode copie, mais l'instance n'est pas dans ce mode</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1216"/> - <source>The transfer list is in move mode, but this instance is not in this mode</source> - <translation>La list de transfer est en mode dĆ©placement, mais l'instance n'est pas dans ce mode</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1263"/> - <source>Some error have been found during the line parsing</source> - <translation>Quelque erreur ont Ć©tĆ© trouvĆ© durrant l'analise des lignes</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1269"/> - <source>Unable to open the transfer list: %1</source> - <translation>Impossible d'ouvrir la list de transfer: %1</translation> - </message> -</context> -<context> - <name>MkPath</name> - <message> - <location filename="../../MkPath.cpp" line="62"/> - <source>Unable to create the folder</source> - <translation>Impossible de crĆ©er le rĆ©pertoire</translation> - </message> -</context> -<context> - <name>ReadThread</name> - <message> - <location filename="../../ReadThread.cpp" line="154"/> - <location filename="../../ReadThread.cpp" line="316"/> - <source>Unable to read the source file: </source> - <translation>Impossible de lire le fichier source: </translation> - </message> - <message> - <location filename="../../ReadThread.cpp" line="193"/> - <location filename="../../ReadThread.cpp" line="373"/> - <source>File truncated during the read, possible data change</source> - <translation>Fichier diminuĆ© durrant la lecture, possible changement de donnĆ©es</translation> - </message> -</context> -<context> - <name>RenamingRules</name> - <message> - <location filename="../../RenamingRules.ui" line="26"/> - <source>First renaming</source> - <translation>Premier renommage</translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="32"/> - <source>%name% - copy</source> - <extracomment>%name% should not be translated</extracomment> - <translatorcomment>variables need never be translated</translatorcomment> - <translation>%name% - copie</translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="39"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> - <extracomment> should not be translated</extracomment> - <translatorcomment>variables need never be translated</translatorcomment> - <translation><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> pour le nom originel</p></body></html></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="49"/> - <source>Second renaming</source> - <translation>Seconds renommage</translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="55"/> - <source>%name% - copy (%number%)</source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translatorcomment>variables need never be translated</translatorcomment> - <translation>%name% - copie (%number%)</translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="62"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translatorcomment>variables need never be translated</translatorcomment> - <translation><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> pour le nom originel</p><p><span style=" font-weight:600;">%number%</span> pour le nombre extra</p></body></html></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="39"/> - <location filename="../../RenamingRules.cpp" line="62"/> - <source>%1 - copy</source> - <translation>%1 - copie</translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="43"/> - <location filename="../../RenamingRules.cpp" line="73"/> - <source>%1 - copy (%2)</source> - <translation>%1 - copie (%2)</translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="14"/> - <source>Renaming rules</source> - <translation>RĆ©gles de renommage</translation> - </message> -</context> -<context> - <name>RmPath</name> - <message> - <location filename="../../RmPath.cpp" line="59"/> - <source>Unable to remove the folder</source> - <translation>Impossible de supprimer le rĆ©pertoire</translation> - </message> -</context> -<context> - <name>TransferThread</name> - <message> - <location filename="../../TransferThread.cpp" line="311"/> - <source>%1 - copy</source> - <translation>%1 - copie</translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="321"/> - <source>%1 - copy (%2)</source> - <translation>%1 - copie (%2)</translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="626"/> - <source>The checksums not match</source> - <translation>Les checksums ne correspondent pas</translation> - </message> -</context> -<context> - <name>WriteThread</name> - <message> - <location filename="../../WriteThread.cpp" line="443"/> - <source>Unable to read the source file: </source> - <translation>Impossible de lire le fichier source: </translation> - </message> - <message> - <location filename="../../WriteThread.cpp" line="481"/> - <source>File truncated during the read, possible data change</source> - <translation>Fichier diminuĆ© durrant la lecture, possible changement de donnĆ©es</translation> - </message> -</context> -<context> - <name>copyEngine</name> - <message> - <location filename="../../copyEngine.cpp" line="257"/> - <location filename="../../copyEngine.cpp" line="275"/> - <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="286"/> - <location filename="../../copyEngine.cpp" line="304"/> - <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="511"/> - <source>The mode have been forced previously, it's internal error, please report it</source> - <translation>Le mode as Ć©tĆ© forcĆ© prĆ©cĆ©dement, c'est une erreur interne, merci de le repporter</translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options error</source> - <translation>Erreur d'options</translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation>Moteur d'options non chargĆ©, impossible d'accĆ©drer aux filtres</translation> - </message> -</context> -<context> - <name>fileErrorDialog</name> - <message> - <location filename="../../fileErrorDialog.ui" line="14"/> - <source>Error on file</source> - <translation>Erreur sur le fichier</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="20"/> - <source>Error</source> - <translation>Erreur</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="56"/> - <source>Size</source> - <translation>Taille</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="73"/> - <source>Modified</source> - <translation>ModifiĆ©</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="90"/> - <source>File name</source> - <translation>Nom de fichier</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="136"/> - <source>&Always do this action</source> - <translation>&Toujours effectuer cette action</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="156"/> - <source>Put to bottom</source> - <translation>Mettre Ć la fin</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="163"/> - <source>Retry</source> - <translation>RĆ©essayer</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="170"/> - <source>&Skip</source> - <translation>&Passer</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="177"/> - <source>&Cancel</source> - <translation>&Annuler</translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="29"/> - <source>Error on folder</source> - <translation>Erreur sur un dossier</translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="32"/> - <source>Folder name</source> - <translation>Nom de rĆ©pertoire</translation> - </message> -</context> -<context> - <name>fileExistsDialog</name> - <message> - <location filename="../../fileExistsDialog.ui" line="14"/> - <source>The file exists</source> - <translation>Le fichier existe</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="34"/> - <source>Source</source> - <translation>Source</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation>Destination</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="82"/> - <location filename="../../fileExistsDialog.ui" line="153"/> - <source>Size</source> - <translation>Taille</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="99"/> - <location filename="../../fileExistsDialog.ui" line="170"/> - <source>Modified</source> - <translation>ModifiĆ©</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="116"/> - <location filename="../../fileExistsDialog.ui" line="187"/> - <source>File name</source> - <translation>Nom de fichier</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="243"/> - <source>Suggest new &name</source> - <translation>SuggĆ©rer un &nouveau nom</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="254"/> - <source>&Always do this action</source> - <translation>&Toujours effectuer cette action</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="274"/> - <source>&Rename</source> - <translation>&Renommer</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="281"/> - <source>&Overwrite</source> - <translation>&Ecraser</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="291"/> - <source>&Skip</source> - <translation>&Passer</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="298"/> - <source>&Cancel</source> - <translation>&Annuler</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="307"/> - <source>Overwrite if newer</source> - <translation>Ecraser si plus rĆ©cent</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="312"/> - <source>Overwrite if not same modification date</source> - <translation>Ecraser si la date de modification est diffĆ©rente</translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="102"/> - <source>%1 - copy</source> - <translation>%1 - copie</translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="112"/> - <source>%1 - copy (%2)</source> - <translation>%1 - copie (%2)</translation> - </message> -</context> -<context> - <name>fileIsSameDialog</name> - <message> - <location filename="../../fileIsSameDialog.ui" line="14"/> - <source>This files are the same file</source> - <translation>Ces fichiers sont identiques</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="20"/> - <source>The source and destination is same</source> - <translation>La source et la destination sont identiques</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="47"/> - <source>Size</source> - <translation>Taille</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="64"/> - <source>Modified</source> - <translation>ModifiĆ©</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="81"/> - <source>File name</source> - <translation>Nom de fichier</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="137"/> - <source>Suggest new &name</source> - <translation>SuggĆ©rer un &nouveau nom</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="148"/> - <source>&Always do this action</source> - <translation>&Toujours effectuer cette action</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="168"/> - <source>&Rename</source> - <translation>&Renommer</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="175"/> - <source>&Skip</source> - <translation>&Passer</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="182"/> - <source>&Cancel</source> - <translation>&Annuler</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="87"/> - <source>%1 - copy</source> - <translation>%1 - copie</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="97"/> - <source>%1 - copy (%2)</source> - <translation>%1 - copie (%2)</translation> - </message> -</context> -<context> - <name>folderExistsDialog</name> - <message> - <location filename="../../folderExistsDialog.ui" line="14"/> - <source>This folders are the same folder</source> - <translation>Les rĆ©pertoires sont identiques</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="34"/> - <source>Source</source> - <translation>Source</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation>Destination</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="62"/> - <source>The source and destination is same</source> - <translation>La source et la destination sont identiques</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="89"/> - <location filename="../../folderExistsDialog.ui" line="140"/> - <source>Modified</source> - <translation>ModifiĆ©</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="106"/> - <location filename="../../folderExistsDialog.ui" line="150"/> - <source>Folder name</source> - <translation>Nom de rĆ©pertoire</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="200"/> - <source>Suggest new &name</source> - <translation>SuggĆ©rer un &nouveau nom</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="211"/> - <source>&Always do this action</source> - <translation>&Toujours effectuer cette action</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="218"/> - <source>&Rename</source> - <translation>&Renommer</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="225"/> - <source>Merge</source> - <translation>Fusionner</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="232"/> - <source>Skip</source> - <translation>Passer</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="239"/> - <source>&Cancel</source> - <translation>&Annuler</translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="29"/> - <source>Folder already exists</source> - <translation>Dossier dĆ©jĆ existant</translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="85"/> - <source>%1 - copy</source> - <translation>%1 - copie</translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="95"/> - <source>%1 - copy (%2)</source> - <translation>%1 - copie (%2)</translation> - </message> -</context> -<context> - <name>options</name> - <message> - <location filename="../../options.ui" line="23"/> - <source>Transfer the file rights</source> - <translation>TransfĆ©rer les droits des fichiers</translation> - </message> - <message> - <location filename="../../options.ui" line="33"/> - <source>Keep the file date</source> - <translation>Garder la date du fichier</translation> - </message> - <message> - <location filename="../../options.ui" line="66"/> - <source>When folder error</source> - <translation>En cas d'erreur de rĆ©pertoire</translation> - </message> - <message> - <location filename="../../options.ui" line="74"/> - <location filename="../../options.ui" line="95"/> - <source>Ask</source> - <translation>Demander</translation> - </message> - <message> - <location filename="../../options.ui" line="79"/> - <location filename="../../options.ui" line="105"/> - <source>Skip</source> - <translation>Passer</translation> - </message> - <message> - <location filename="../../options.ui" line="100"/> - <source>Merge</source> - <translation>Fusionner</translation> - </message> - <message> - <location filename="../../options.ui" line="110"/> - <source>Rename</source> - <translation>Renommer</translation> - </message> - <message> - <location filename="../../options.ui" line="118"/> - <source>Check if destination folder exists</source> - <translation>VĆ©rifier si le rĆ©pertoire de destination existe</translation> - </message> - <message> - <location filename="../../options.ui" line="214"/> - <source>Block size</source> - <translation>Taille de block</translation> - </message> - <message> - <location filename="../../options.ui" line="43"/> - <location filename="../../options.ui" line="198"/> - <source>KB</source> - <translation>Ko</translation> - </message> - <message> - <location filename="../../options.ui" line="56"/> - <source>Auto start the transfer</source> - <translation>DĆ©mmarer automatiquement le transfert</translation> - </message> - <message> - <location filename="../../options.ui" line="87"/> - <source>When folder collision</source> - <translation>Lors d'une collision de dossier</translation> - </message> - <message> - <location filename="../../options.ui" line="128"/> - <source>Checksum</source> - <translation>Checksum</translation> - </message> - <message> - <location filename="../../options.ui" line="144"/> - <source>Only after error</source> - <translation>Seulement aprĆØs erreur</translation> - </message> - <message> - <location filename="../../options.ui" line="154"/> - <source>Ignore if impossible</source> - <translation>Ignorer si impossible</translation> - </message> - <message> - <location filename="../../options.ui" line="171"/> - <source>Do checksum</source> - <translation>Faire un checksum</translation> - </message> - <message> - <location filename="../../options.ui" line="181"/> - <source>Enable OS buffer</source> - <translation>Activer le buffer de l'OS</translation> - </message> - <message> - <location filename="../../options.ui" line="234"/> - <source>Filters</source> - <translation>Filtres</translation> - </message> - <message> - <location filename="../../options.ui" line="241"/> - <source>Renaming rules</source> - <translation>RĆ©gles de renommage</translation> - </message> - <message> - <location filename="../../options.ui" line="191"/> - <source>OS buffer only if smaller than</source> - <translation>Buffer de l'OS seulement si plus petit que</translation> - </message> -</context> -<context> - <name>scanFileOrFolder</name> - <message> - <location filename="../../scanFileOrFolder.cpp" line="218"/> - <location filename="../../scanFileOrFolder.cpp" line="282"/> - <source>%1 - copy</source> - <translation>%1 - copie</translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="228"/> - <location filename="../../scanFileOrFolder.cpp" line="292"/> - <source>%1 - copy (%2)</source> - <translation>%1 - copie (%2)</translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="326"/> - <source>The folder not exists</source> - <translation>Le rĆ©pertoire n'existe pas</translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="328"/> - <source>The folder is not readable</source> - <translation>Le rĆ©pertoire n'est pas lisible</translation> - </message> -</context> -</TS> diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/hi/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/hi/translation.ts deleted file mode 100644 index 0898631..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/Languages/hi/translation.ts +++ /dev/null @@ -1,795 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.0"> -<context> - <name>AvancedQFile</name> - <message> - <location filename="../../AvancedQFile.cpp" line="28"/> - <location filename="../../AvancedQFile.cpp" line="59"/> - <location filename="../../AvancedQFile.cpp" line="90"/> - <source>Not supported on this platform</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="42"/> - <source>Last modified date is wrong</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="73"/> - <source>Last access date is wrong</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Factory</name> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>FilterRules</name> - <message> - <location filename="../../FilterRules.ui" line="33"/> - <source>Search:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="43"/> - <source>Search type:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="51"/> - <source>Raw text</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="56"/> - <source>Simplified regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="61"/> - <source>Perl's regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="69"/> - <source>Apply on:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="77"/> - <source>File</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="82"/> - <source>Folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="87"/> - <source>File and folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="95"/> - <source>All string need match</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="102"/> - <source>Checking</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="115"/> - <source>Test string:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="17"/> - <source>Filters dialog</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="108"/> - <source>The regex is valid</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="125"/> - <source>The test string match with the regex</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Filters</name> - <message> - <location filename="../../Filters.ui" line="14"/> - <source>Filters</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="30"/> - <source>Exclusion filter</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="93"/> - <source>Inclusion filter</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="105"/> - <source>None = Include all</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="92"/> - <location filename="../../Filters.cpp" line="130"/> - <source>Raw text</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="95"/> - <location filename="../../Filters.cpp" line="133"/> - <source>Simplified regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="98"/> - <location filename="../../Filters.cpp" line="136"/> - <source>Perl's regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="106"/> - <location filename="../../Filters.cpp" line="144"/> - <source>Only on file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="109"/> - <location filename="../../Filters.cpp" line="147"/> - <source>Only on folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="115"/> - <location filename="../../Filters.cpp" line="153"/> - <location filename="../../Filters.cpp" line="215"/> - <location filename="../../Filters.cpp" line="254"/> - <source>Full match</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>ListThread</name> - <message> - <location filename="../../ListThread.cpp" line="1162"/> - <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="1169"/> - <source>Unable to save the transfer list: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1185"/> - <source>Problem at the reading, or file size is null</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1192"/> - <source>Wrong header: "%1"</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1201"/> - <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="1210"/> - <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="1216"/> - <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="1263"/> - <source>Some error have been found during the line parsing</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1269"/> - <source>Unable to open the transfer list: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>MkPath</name> - <message> - <location filename="../../MkPath.cpp" line="62"/> - <source>Unable to create the folder</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>ReadThread</name> - <message> - <location filename="../../ReadThread.cpp" line="154"/> - <location filename="../../ReadThread.cpp" line="316"/> - <source>Unable to read the source file: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ReadThread.cpp" line="193"/> - <location filename="../../ReadThread.cpp" line="373"/> - <source>File truncated during the read, possible data change</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>RenamingRules</name> - <message> - <location filename="../../RenamingRules.ui" line="26"/> - <source>First renaming</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="32"/> - <source>%name% - copy</source> - <extracomment>%name% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="39"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> - <extracomment> should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="49"/> - <source>Second renaming</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="55"/> - <source>%name% - copy (%number%)</source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="62"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="39"/> - <location filename="../../RenamingRules.cpp" line="62"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="43"/> - <location filename="../../RenamingRules.cpp" line="73"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="14"/> - <source>Renaming rules</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>RmPath</name> - <message> - <location filename="../../RmPath.cpp" line="59"/> - <source>Unable to remove the folder</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>TransferThread</name> - <message> - <location filename="../../TransferThread.cpp" line="311"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="321"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="626"/> - <source>The checksums not match</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>WriteThread</name> - <message> - <location filename="../../WriteThread.cpp" line="443"/> - <source>Unable to read the source file: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../WriteThread.cpp" line="481"/> - <source>File truncated during the read, possible data change</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>copyEngine</name> - <message> - <location filename="../../copyEngine.cpp" line="257"/> - <location filename="../../copyEngine.cpp" line="275"/> - <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="286"/> - <location filename="../../copyEngine.cpp" line="304"/> - <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="511"/> - <source>The mode have been forced previously, it's internal error, please report it</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileErrorDialog</name> - <message> - <location filename="../../fileErrorDialog.ui" line="14"/> - <source>Error on file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="20"/> - <source>Error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="56"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="73"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="90"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="136"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="156"/> - <source>Put to bottom</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="163"/> - <source>Retry</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="170"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="177"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="29"/> - <source>Error on folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="32"/> - <source>Folder name</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileExistsDialog</name> - <message> - <location filename="../../fileExistsDialog.ui" line="14"/> - <source>The file exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="34"/> - <source>Source</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="82"/> - <location filename="../../fileExistsDialog.ui" line="153"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="99"/> - <location filename="../../fileExistsDialog.ui" line="170"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="116"/> - <location filename="../../fileExistsDialog.ui" line="187"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="243"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="254"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="274"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="281"/> - <source>&Overwrite</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="291"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="298"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="307"/> - <source>Overwrite if newer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="312"/> - <source>Overwrite if not same modification date</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="102"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="112"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileIsSameDialog</name> - <message> - <location filename="../../fileIsSameDialog.ui" line="14"/> - <source>This files are the same file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="20"/> - <source>The source and destination is same</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="47"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="64"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="81"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="137"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="148"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="168"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="175"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="182"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="87"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="97"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>folderExistsDialog</name> - <message> - <location filename="../../folderExistsDialog.ui" line="14"/> - <source>This folders are the same folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="34"/> - <source>Source</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="62"/> - <source>The source and destination is same</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="89"/> - <location filename="../../folderExistsDialog.ui" line="140"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="106"/> - <location filename="../../folderExistsDialog.ui" line="150"/> - <source>Folder name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="200"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="211"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="218"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="225"/> - <source>Merge</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="232"/> - <source>Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="239"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="29"/> - <source>Folder already exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="85"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="95"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>options</name> - <message> - <location filename="../../options.ui" line="23"/> - <source>Transfer the file rights</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="33"/> - <source>Keep the file date</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="214"/> - <source>Block size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="43"/> - <location filename="../../options.ui" line="198"/> - <source>KB</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="56"/> - <source>Auto start the transfer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="66"/> - <source>When folder error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="74"/> - <location filename="../../options.ui" line="95"/> - <source>Ask</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="79"/> - <location filename="../../options.ui" line="105"/> - <source>Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="100"/> - <source>Merge</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="110"/> - <source>Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="118"/> - <source>Check if destination folder exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="87"/> - <source>When folder collision</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="128"/> - <source>Checksum</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="144"/> - <source>Only after error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="154"/> - <source>Ignore if impossible</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="171"/> - <source>Do checksum</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="181"/> - <source>Enable OS buffer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="234"/> - <source>Filters</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="241"/> - <source>Renaming rules</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="191"/> - <source>OS buffer only if smaller than</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>scanFileOrFolder</name> - <message> - <location filename="../../scanFileOrFolder.cpp" line="218"/> - <location filename="../../scanFileOrFolder.cpp" line="282"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="228"/> - <location filename="../../scanFileOrFolder.cpp" line="292"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="326"/> - <source>The folder not exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="328"/> - <source>The folder is not readable</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/id/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/id/translation.ts deleted file mode 100644 index 0898631..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/Languages/id/translation.ts +++ /dev/null @@ -1,795 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.0"> -<context> - <name>AvancedQFile</name> - <message> - <location filename="../../AvancedQFile.cpp" line="28"/> - <location filename="../../AvancedQFile.cpp" line="59"/> - <location filename="../../AvancedQFile.cpp" line="90"/> - <source>Not supported on this platform</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="42"/> - <source>Last modified date is wrong</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="73"/> - <source>Last access date is wrong</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Factory</name> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>FilterRules</name> - <message> - <location filename="../../FilterRules.ui" line="33"/> - <source>Search:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="43"/> - <source>Search type:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="51"/> - <source>Raw text</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="56"/> - <source>Simplified regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="61"/> - <source>Perl's regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="69"/> - <source>Apply on:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="77"/> - <source>File</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="82"/> - <source>Folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="87"/> - <source>File and folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="95"/> - <source>All string need match</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="102"/> - <source>Checking</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="115"/> - <source>Test string:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="17"/> - <source>Filters dialog</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="108"/> - <source>The regex is valid</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="125"/> - <source>The test string match with the regex</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Filters</name> - <message> - <location filename="../../Filters.ui" line="14"/> - <source>Filters</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="30"/> - <source>Exclusion filter</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="93"/> - <source>Inclusion filter</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="105"/> - <source>None = Include all</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="92"/> - <location filename="../../Filters.cpp" line="130"/> - <source>Raw text</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="95"/> - <location filename="../../Filters.cpp" line="133"/> - <source>Simplified regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="98"/> - <location filename="../../Filters.cpp" line="136"/> - <source>Perl's regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="106"/> - <location filename="../../Filters.cpp" line="144"/> - <source>Only on file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="109"/> - <location filename="../../Filters.cpp" line="147"/> - <source>Only on folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="115"/> - <location filename="../../Filters.cpp" line="153"/> - <location filename="../../Filters.cpp" line="215"/> - <location filename="../../Filters.cpp" line="254"/> - <source>Full match</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>ListThread</name> - <message> - <location filename="../../ListThread.cpp" line="1162"/> - <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="1169"/> - <source>Unable to save the transfer list: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1185"/> - <source>Problem at the reading, or file size is null</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1192"/> - <source>Wrong header: "%1"</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1201"/> - <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="1210"/> - <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="1216"/> - <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="1263"/> - <source>Some error have been found during the line parsing</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1269"/> - <source>Unable to open the transfer list: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>MkPath</name> - <message> - <location filename="../../MkPath.cpp" line="62"/> - <source>Unable to create the folder</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>ReadThread</name> - <message> - <location filename="../../ReadThread.cpp" line="154"/> - <location filename="../../ReadThread.cpp" line="316"/> - <source>Unable to read the source file: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ReadThread.cpp" line="193"/> - <location filename="../../ReadThread.cpp" line="373"/> - <source>File truncated during the read, possible data change</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>RenamingRules</name> - <message> - <location filename="../../RenamingRules.ui" line="26"/> - <source>First renaming</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="32"/> - <source>%name% - copy</source> - <extracomment>%name% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="39"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> - <extracomment> should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="49"/> - <source>Second renaming</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="55"/> - <source>%name% - copy (%number%)</source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="62"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="39"/> - <location filename="../../RenamingRules.cpp" line="62"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="43"/> - <location filename="../../RenamingRules.cpp" line="73"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="14"/> - <source>Renaming rules</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>RmPath</name> - <message> - <location filename="../../RmPath.cpp" line="59"/> - <source>Unable to remove the folder</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>TransferThread</name> - <message> - <location filename="../../TransferThread.cpp" line="311"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="321"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="626"/> - <source>The checksums not match</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>WriteThread</name> - <message> - <location filename="../../WriteThread.cpp" line="443"/> - <source>Unable to read the source file: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../WriteThread.cpp" line="481"/> - <source>File truncated during the read, possible data change</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>copyEngine</name> - <message> - <location filename="../../copyEngine.cpp" line="257"/> - <location filename="../../copyEngine.cpp" line="275"/> - <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="286"/> - <location filename="../../copyEngine.cpp" line="304"/> - <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="511"/> - <source>The mode have been forced previously, it's internal error, please report it</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileErrorDialog</name> - <message> - <location filename="../../fileErrorDialog.ui" line="14"/> - <source>Error on file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="20"/> - <source>Error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="56"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="73"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="90"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="136"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="156"/> - <source>Put to bottom</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="163"/> - <source>Retry</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="170"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="177"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="29"/> - <source>Error on folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="32"/> - <source>Folder name</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileExistsDialog</name> - <message> - <location filename="../../fileExistsDialog.ui" line="14"/> - <source>The file exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="34"/> - <source>Source</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="82"/> - <location filename="../../fileExistsDialog.ui" line="153"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="99"/> - <location filename="../../fileExistsDialog.ui" line="170"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="116"/> - <location filename="../../fileExistsDialog.ui" line="187"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="243"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="254"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="274"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="281"/> - <source>&Overwrite</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="291"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="298"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="307"/> - <source>Overwrite if newer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="312"/> - <source>Overwrite if not same modification date</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="102"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="112"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileIsSameDialog</name> - <message> - <location filename="../../fileIsSameDialog.ui" line="14"/> - <source>This files are the same file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="20"/> - <source>The source and destination is same</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="47"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="64"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="81"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="137"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="148"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="168"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="175"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="182"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="87"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="97"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>folderExistsDialog</name> - <message> - <location filename="../../folderExistsDialog.ui" line="14"/> - <source>This folders are the same folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="34"/> - <source>Source</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="62"/> - <source>The source and destination is same</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="89"/> - <location filename="../../folderExistsDialog.ui" line="140"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="106"/> - <location filename="../../folderExistsDialog.ui" line="150"/> - <source>Folder name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="200"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="211"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="218"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="225"/> - <source>Merge</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="232"/> - <source>Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="239"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="29"/> - <source>Folder already exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="85"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="95"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>options</name> - <message> - <location filename="../../options.ui" line="23"/> - <source>Transfer the file rights</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="33"/> - <source>Keep the file date</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="214"/> - <source>Block size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="43"/> - <location filename="../../options.ui" line="198"/> - <source>KB</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="56"/> - <source>Auto start the transfer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="66"/> - <source>When folder error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="74"/> - <location filename="../../options.ui" line="95"/> - <source>Ask</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="79"/> - <location filename="../../options.ui" line="105"/> - <source>Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="100"/> - <source>Merge</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="110"/> - <source>Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="118"/> - <source>Check if destination folder exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="87"/> - <source>When folder collision</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="128"/> - <source>Checksum</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="144"/> - <source>Only after error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="154"/> - <source>Ignore if impossible</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="171"/> - <source>Do checksum</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="181"/> - <source>Enable OS buffer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="234"/> - <source>Filters</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="241"/> - <source>Renaming rules</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="191"/> - <source>OS buffer only if smaller than</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>scanFileOrFolder</name> - <message> - <location filename="../../scanFileOrFolder.cpp" line="218"/> - <location filename="../../scanFileOrFolder.cpp" line="282"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="228"/> - <location filename="../../scanFileOrFolder.cpp" line="292"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="326"/> - <source>The folder not exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="328"/> - <source>The folder is not readable</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/it/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/it/translation.ts deleted file mode 100644 index 92743de..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/Languages/it/translation.ts +++ /dev/null @@ -1,795 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.0" language="it" sourcelanguage="en"> -<context> - <name>AvancedQFile</name> - <message> - <location filename="../../AvancedQFile.cpp" line="28"/> - <location filename="../../AvancedQFile.cpp" line="59"/> - <location filename="../../AvancedQFile.cpp" line="90"/> - <source>Not supported on this platform</source> - <translation>Non supportato su questa piattaforma</translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="42"/> - <source>Last modified date is wrong</source> - <translation>Ultima modifica ĆØ sbagliato</translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="73"/> - <source>Last access date is wrong</source> - <translation>Ultima data di accesso ĆØ sbagliato</translation> - </message> -</context> -<context> - <name>Factory</name> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options error</source> - <translation>opzioni di errore</translation> - </message> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation>Opzioni del motore non viene caricato, non possono accedere ai filtri</translation> - </message> -</context> -<context> - <name>FilterRules</name> - <message> - <location filename="../../FilterRules.ui" line="33"/> - <source>Search:</source> - <translation>Cerca:</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="43"/> - <source>Search type:</source> - <translation>Tipo di ricerca:</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="51"/> - <source>Raw text</source> - <translation>testo Raw</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="56"/> - <source>Simplified regex</source> - <translation>semplificato regex</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="61"/> - <source>Perl's regex</source> - <translation>Perl's regex</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="69"/> - <source>Apply on:</source> - <translation>Applicare su:</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="77"/> - <source>File</source> - <translation>File</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="82"/> - <source>Folder</source> - <translation>Cartella</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="87"/> - <source>File and folder</source> - <translation>File e cartelle</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="95"/> - <source>All string need match</source> - <translation>Tutti stringa bisogno di corrispondere</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="102"/> - <source>Checking</source> - <translation>Verifica</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="115"/> - <source>Test string:</source> - <translation>Test stringa:</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="17"/> - <source>Filters dialog</source> - <translation>Filtri di dialogo</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="108"/> - <source>The regex is valid</source> - <translation>La regex ĆØ valido</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="125"/> - <source>The test string match with the regex</source> - <translation>La stringa di test match con la regex</translation> - </message> -</context> -<context> - <name>Filters</name> - <message> - <location filename="../../Filters.ui" line="14"/> - <source>Filters</source> - <translation>Filtri</translation> - </message> - <message> - <location filename="../../Filters.ui" line="30"/> - <source>Exclusion filter</source> - <translation>Esclusione filtro</translation> - </message> - <message> - <location filename="../../Filters.ui" line="93"/> - <source>Inclusion filter</source> - <translation>inclusione filtro</translation> - </message> - <message> - <location filename="../../Filters.ui" line="105"/> - <source>None = Include all</source> - <translation>Nessuno = Includi tutte le</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="92"/> - <location filename="../../Filters.cpp" line="130"/> - <source>Raw text</source> - <translation>testo Raw</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="95"/> - <location filename="../../Filters.cpp" line="133"/> - <source>Simplified regex</source> - <translation>semplificato regex</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="98"/> - <location filename="../../Filters.cpp" line="136"/> - <source>Perl's regex</source> - <translation>Perl's regex</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="106"/> - <location filename="../../Filters.cpp" line="144"/> - <source>Only on file</source> - <translation>Solo su file</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="109"/> - <location filename="../../Filters.cpp" line="147"/> - <source>Only on folder</source> - <translation>Solo sulla cartella</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="115"/> - <location filename="../../Filters.cpp" line="153"/> - <location filename="../../Filters.cpp" line="215"/> - <location filename="../../Filters.cpp" line="254"/> - <source>Full match</source> - <translation>partita completa</translation> - </message> -</context> -<context> - <name>ListThread</name> - <message> - <location filename="../../ListThread.cpp" line="1162"/> - <source>Unable do to move or copy item into wrong forced mode: %1</source> - <translation>Impossibile fare per spostare o copiare elemento in male modo forzato: %1</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1169"/> - <source>Unable to save the transfer list: %1</source> - <translation>Impossibile salvare la lista dei trasferimenti: %1</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1185"/> - <source>Problem at the reading, or file size is null</source> - <translation>Problema alla lettura, o la dimensione del file ĆØ nullo</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1192"/> - <source>Wrong header: "%1"</source> - <translation>Sbagliato intestazione: "%1"</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1201"/> - <source>The transfer list is in mixed mode, but this instance is not in this mode</source> - <translation>La lista di trasferimento ĆØ in modalitĆ mista, ma questa istanza non ĆØ in questa modalitĆ </translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1210"/> - <source>The transfer list is in copy mode, but this instance is not in this mode</source> - <translation>La lista di trasferimento ĆØ in modalitĆ di copia, ma questa istanza non ĆØ in questa modalitĆ </translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1216"/> - <source>The transfer list is in move mode, but this instance is not in this mode</source> - <translation>La lista di trasferimento ĆØ in modalitĆ di spostamento, ma questa istanza non ĆØ in questa modalitĆ </translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1263"/> - <source>Some error have been found during the line parsing</source> - <translation>Alcuni errori sono stati trovati durante l'analisi linea</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1269"/> - <source>Unable to open the transfer list: %1</source> - <translation>Impossibile aprire la lista di trasferimento: %1</translation> - </message> -</context> -<context> - <name>MkPath</name> - <message> - <location filename="../../MkPath.cpp" line="62"/> - <source>Unable to create the folder</source> - <translation>Impossibile creare la cartella</translation> - </message> -</context> -<context> - <name>ReadThread</name> - <message> - <location filename="../../ReadThread.cpp" line="154"/> - <location filename="../../ReadThread.cpp" line="316"/> - <source>Unable to read the source file: </source> - <translation>Impossibile leggere il file sorgente: </translation> - </message> - <message> - <location filename="../../ReadThread.cpp" line="193"/> - <location filename="../../ReadThread.cpp" line="373"/> - <source>File truncated during the read, possible data change</source> - <translation>File troncato durante la lettura, i possibili cambiamenti di dati</translation> - </message> -</context> -<context> - <name>RenamingRules</name> - <message> - <location filename="../../RenamingRules.ui" line="26"/> - <source>First renaming</source> - <translation>Prima ridenominazione</translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="32"/> - <source>%name% - copy</source> - <extracomment>%name% should not be translated</extracomment> - <translation>%name% - copia</translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="39"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> - <extracomment> should not be translated</extracomment> - <translation><html><head/><body><p>variabili: <span style=" font-weight:600;">%name%</span> per il nome del file originale</p></body></html></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="49"/> - <source>Second renaming</source> - <translation>Secondo ridenominazione</translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="55"/> - <source>%name% - copy (%number%)</source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation>%name% - copia (%number%)</translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="62"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation><html><head/><body><p>variabili: <span style=" font-weight:600;">%name%</span> per il nome del file originale</p><p><span style=" font-weight:600;">%number%</span> per il numero aggiuntivo</p></body></html></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="39"/> - <location filename="../../RenamingRules.cpp" line="62"/> - <source>%1 - copy</source> - <translation>%1 - copia</translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="43"/> - <location filename="../../RenamingRules.cpp" line="73"/> - <source>%1 - copy (%2)</source> - <translation>%1 - copia (%2)</translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="14"/> - <source>Renaming rules</source> - <translation>Rinominare le regole</translation> - </message> -</context> -<context> - <name>RmPath</name> - <message> - <location filename="../../RmPath.cpp" line="59"/> - <source>Unable to remove the folder</source> - <translation>Impossibile rimuovere la cartella</translation> - </message> -</context> -<context> - <name>TransferThread</name> - <message> - <location filename="../../TransferThread.cpp" line="311"/> - <source>%1 - copy</source> - <translation>%1 - copia</translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="321"/> - <source>%1 - copy (%2)</source> - <translation>%1 - copia (%2)</translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="626"/> - <source>The checksums not match</source> - <translation>Il checksum non corrisponde</translation> - </message> -</context> -<context> - <name>WriteThread</name> - <message> - <location filename="../../WriteThread.cpp" line="443"/> - <source>Unable to read the source file: </source> - <translation>Impossibile leggere il file sorgente: </translation> - </message> - <message> - <location filename="../../WriteThread.cpp" line="481"/> - <source>File truncated during the read, possible data change</source> - <translation>File troncato durante la lettura, i possibili cambiamenti di dati</translation> - </message> -</context> -<context> - <name>copyEngine</name> - <message> - <location filename="../../copyEngine.cpp" line="257"/> - <location filename="../../copyEngine.cpp" line="275"/> - <source>The engine is forced to move, you can't copy with it</source> - <translation>Il motore ĆØ costretto a muoversi, non ĆØ possibile copiare con esso</translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="286"/> - <location filename="../../copyEngine.cpp" line="304"/> - <source>The engine is forced to copy, you can't move with it</source> - <translation>Il motore ĆØ costretto a copiare, non ĆØ possibile spostare con esso</translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="511"/> - <source>The mode have been forced previously, it's internal error, please report it</source> - <translation>La modalitĆ sono stati costretti in precedenza, ĆØ un errore interno, si prega di segnalarlo</translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options error</source> - <translation>opzioni di errore</translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation>Opzioni del motore non viene caricato, non possono accedere ai filtri</translation> - </message> -</context> -<context> - <name>fileErrorDialog</name> - <message> - <location filename="../../fileErrorDialog.ui" line="14"/> - <source>Error on file</source> - <translation>Errore su file</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="20"/> - <source>Error</source> - <translation>Errore</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="56"/> - <source>Size</source> - <translation>Dimensione</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="73"/> - <source>Modified</source> - <translation>Modificato</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="90"/> - <source>File name</source> - <translation>Nome file</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="136"/> - <source>&Always do this action</source> - <translation>Eseguire sempre questa azione</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="156"/> - <source>Put to bottom</source> - <translation>Mettere a fondo</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="163"/> - <source>Retry</source> - <translation>Riprova</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="170"/> - <source>&Skip</source> - <translation>Saltare</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="177"/> - <source>&Cancel</source> - <translation>Annullare</translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="29"/> - <source>Error on folder</source> - <translation>Errore cartella</translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="32"/> - <source>Folder name</source> - <translation>Nome della cartella</translation> - </message> -</context> -<context> - <name>fileExistsDialog</name> - <message> - <location filename="../../fileExistsDialog.ui" line="14"/> - <source>The file exists</source> - <translation>Il file esiste</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="34"/> - <source>Source</source> - <translation>Fonte</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation>Destinazione</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="82"/> - <location filename="../../fileExistsDialog.ui" line="153"/> - <source>Size</source> - <translation>Dimensione</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="99"/> - <location filename="../../fileExistsDialog.ui" line="170"/> - <source>Modified</source> - <translation>Modificato</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="116"/> - <location filename="../../fileExistsDialog.ui" line="187"/> - <source>File name</source> - <translation>Nome file</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="243"/> - <source>Suggest new &name</source> - <translation>Suggerisci nuovo nome</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="254"/> - <source>&Always do this action</source> - <translation>Eseguire sempre questa azione</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="274"/> - <source>&Rename</source> - <translation>Rinominare</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="281"/> - <source>&Overwrite</source> - <translation>Sovrascrivi</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="291"/> - <source>&Skip</source> - <translation>Saltare</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="298"/> - <source>&Cancel</source> - <translation>Annullare</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="307"/> - <source>Overwrite if newer</source> - <translation>Sovrascrivi se piĆ¹ recente</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="312"/> - <source>Overwrite if not same modification date</source> - <translation>Sovrascrivi se non la data di modifica stessa</translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="102"/> - <source>%1 - copy</source> - <translation>%1 - copia</translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="112"/> - <source>%1 - copy (%2)</source> - <translation>%1 - copia (%2)</translation> - </message> -</context> -<context> - <name>fileIsSameDialog</name> - <message> - <location filename="../../fileIsSameDialog.ui" line="14"/> - <source>This files are the same file</source> - <translation>Questi file sono lo stesso file</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="20"/> - <source>The source and destination is same</source> - <translation>La sorgente e destinazione ĆØ uguale</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="47"/> - <source>Size</source> - <translation>Dimensione</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="64"/> - <source>Modified</source> - <translation>Modificato</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="81"/> - <source>File name</source> - <translation>Nome file</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="137"/> - <source>Suggest new &name</source> - <translation>Suggerisci nuovo nome</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="148"/> - <source>&Always do this action</source> - <translation>Eseguire sempre questa azione</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="168"/> - <source>&Rename</source> - <translation>Rinominare</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="175"/> - <source>&Skip</source> - <translation>Saltare</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="182"/> - <source>&Cancel</source> - <translation>Annullare</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="87"/> - <source>%1 - copy</source> - <translation>%1 - copia</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="97"/> - <source>%1 - copy (%2)</source> - <translation>%1 - copia (%2)</translation> - </message> -</context> -<context> - <name>folderExistsDialog</name> - <message> - <location filename="../../folderExistsDialog.ui" line="14"/> - <source>This folders are the same folder</source> - <translation>Questo cartelle sono nella stessa cartella</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="34"/> - <source>Source</source> - <translation>Fonte</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation>Destinazione</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="62"/> - <source>The source and destination is same</source> - <translation>La sorgente e destinazione ĆØ uguale</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="89"/> - <location filename="../../folderExistsDialog.ui" line="140"/> - <source>Modified</source> - <translation>Modificato</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="106"/> - <location filename="../../folderExistsDialog.ui" line="150"/> - <source>Folder name</source> - <translation>Nome della cartella</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="200"/> - <source>Suggest new &name</source> - <translation>Suggerisci nuovo nome</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="211"/> - <source>&Always do this action</source> - <translation>Eseguire sempre questa azione</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="218"/> - <source>&Rename</source> - <translation>Rinominare</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="225"/> - <source>Merge</source> - <translation>Unire</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="232"/> - <source>Skip</source> - <translation>Saltare</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="239"/> - <source>&Cancel</source> - <translation>Annullare</translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="29"/> - <source>Folder already exists</source> - <translation>Cartella esiste giĆ </translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="85"/> - <source>%1 - copy</source> - <translation>%1 - copia</translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="95"/> - <source>%1 - copy (%2)</source> - <translation>%1 - copia (%2)</translation> - </message> -</context> -<context> - <name>options</name> - <message> - <location filename="../../options.ui" line="23"/> - <source>Transfer the file rights</source> - <translation>Trasferire i diritti di file</translation> - </message> - <message> - <location filename="../../options.ui" line="33"/> - <source>Keep the file date</source> - <translation>Tenere la data del file</translation> - </message> - <message> - <location filename="../../options.ui" line="214"/> - <source>Block size</source> - <translation>Dimensione del blocco</translation> - </message> - <message> - <location filename="../../options.ui" line="43"/> - <location filename="../../options.ui" line="198"/> - <source>KB</source> - <translation></translation> - </message> - <message> - <location filename="../../options.ui" line="56"/> - <source>Auto start the transfer</source> - <translation>Auto iniziare il trasferimento</translation> - </message> - <message> - <location filename="../../options.ui" line="66"/> - <source>When folder error</source> - <translation>Quando errore cartella</translation> - </message> - <message> - <location filename="../../options.ui" line="74"/> - <location filename="../../options.ui" line="95"/> - <source>Ask</source> - <translation>Chiedere</translation> - </message> - <message> - <location filename="../../options.ui" line="79"/> - <location filename="../../options.ui" line="105"/> - <source>Skip</source> - <translation>Saltare</translation> - </message> - <message> - <location filename="../../options.ui" line="100"/> - <source>Merge</source> - <translation>Unire</translation> - </message> - <message> - <location filename="../../options.ui" line="110"/> - <source>Rename</source> - <translation>Rinominare</translation> - </message> - <message> - <location filename="../../options.ui" line="118"/> - <source>Check if destination folder exists</source> - <translation>Controllare se la cartella di destinazione esiste</translation> - </message> - <message> - <location filename="../../options.ui" line="87"/> - <source>When folder collision</source> - <translation>Quando collisione cartella</translation> - </message> - <message> - <location filename="../../options.ui" line="128"/> - <source>Checksum</source> - <translation></translation> - </message> - <message> - <location filename="../../options.ui" line="144"/> - <source>Only after error</source> - <translation>Solo dopo l'errore</translation> - </message> - <message> - <location filename="../../options.ui" line="154"/> - <source>Ignore if impossible</source> - <translation>Ignora se impossibile</translation> - </message> - <message> - <location filename="../../options.ui" line="171"/> - <source>Do checksum</source> - <translation>Fare checksum</translation> - </message> - <message> - <location filename="../../options.ui" line="181"/> - <source>Enable OS buffer</source> - <translation>Abilita OS tampone</translation> - </message> - <message> - <location filename="../../options.ui" line="234"/> - <source>Filters</source> - <translation>Filtri</translation> - </message> - <message> - <location filename="../../options.ui" line="241"/> - <source>Renaming rules</source> - <translation>Rinominare le regole</translation> - </message> - <message> - <location filename="../../options.ui" line="191"/> - <source>OS buffer only if smaller than</source> - <translation>OS tampone solo se inferiori</translation> - </message> -</context> -<context> - <name>scanFileOrFolder</name> - <message> - <location filename="../../scanFileOrFolder.cpp" line="218"/> - <location filename="../../scanFileOrFolder.cpp" line="282"/> - <source>%1 - copy</source> - <translation>%1 - copia</translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="228"/> - <location filename="../../scanFileOrFolder.cpp" line="292"/> - <source>%1 - copy (%2)</source> - <translation>%1 - copia (%2)</translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="326"/> - <source>The folder not exists</source> - <translation>La cartella non esiste</translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="328"/> - <source>The folder is not readable</source> - <translation>La cartella non ĆØ leggibile</translation> - </message> -</context> -</TS> diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/ja/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/ja/translation.ts deleted file mode 100644 index 9a215b1..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/Languages/ja/translation.ts +++ /dev/null @@ -1,795 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.0"> -<context> - <name>AvancedQFile</name> - <message> - <location filename="../../AvancedQFile.cpp" line="28"/> - <location filename="../../AvancedQFile.cpp" line="59"/> - <location filename="../../AvancedQFile.cpp" line="90"/> - <source>Not supported on this platform</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="42"/> - <source>Last modified date is wrong</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="73"/> - <source>Last access date is wrong</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Factory</name> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>FilterRules</name> - <message> - <location filename="../../FilterRules.ui" line="17"/> - <source>Filters dialog</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="33"/> - <source>Search:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="43"/> - <source>Search type:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="51"/> - <source>Raw text</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="56"/> - <source>Simplified regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="61"/> - <source>Perl's regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="69"/> - <source>Apply on:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="77"/> - <source>File</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="82"/> - <source>Folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="87"/> - <source>File and folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="95"/> - <source>All string need match</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="102"/> - <source>Checking</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="108"/> - <source>The regex is valid</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="115"/> - <source>Test string:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="125"/> - <source>The test string match with the regex</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Filters</name> - <message> - <location filename="../../Filters.ui" line="14"/> - <source>Filters</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="30"/> - <source>Exclusion filter</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="93"/> - <source>Inclusion filter</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="105"/> - <source>None = Include all</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="92"/> - <location filename="../../Filters.cpp" line="130"/> - <source>Raw text</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="95"/> - <location filename="../../Filters.cpp" line="133"/> - <source>Simplified regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="98"/> - <location filename="../../Filters.cpp" line="136"/> - <source>Perl's regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="106"/> - <location filename="../../Filters.cpp" line="144"/> - <source>Only on file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="109"/> - <location filename="../../Filters.cpp" line="147"/> - <source>Only on folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="115"/> - <location filename="../../Filters.cpp" line="153"/> - <location filename="../../Filters.cpp" line="215"/> - <location filename="../../Filters.cpp" line="254"/> - <source>Full match</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>ListThread</name> - <message> - <location filename="../../ListThread.cpp" line="1162"/> - <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="1169"/> - <source>Unable to save the transfer list: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1185"/> - <source>Problem at the reading, or file size is null</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1192"/> - <source>Wrong header: "%1"</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1201"/> - <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="1210"/> - <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="1216"/> - <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="1263"/> - <source>Some error have been found during the line parsing</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1269"/> - <source>Unable to open the transfer list: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>MkPath</name> - <message> - <location filename="../../MkPath.cpp" line="62"/> - <source>Unable to create the folder</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>ReadThread</name> - <message> - <location filename="../../ReadThread.cpp" line="154"/> - <location filename="../../ReadThread.cpp" line="316"/> - <source>Unable to read the source file: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ReadThread.cpp" line="193"/> - <location filename="../../ReadThread.cpp" line="373"/> - <source>File truncated during the read, possible data change</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>RenamingRules</name> - <message> - <location filename="../../RenamingRules.ui" line="14"/> - <source>Renaming rules</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="26"/> - <source>First renaming</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="32"/> - <source>%name% - copy</source> - <extracomment>%name% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="39"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> - <extracomment> should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="49"/> - <source>Second renaming</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="55"/> - <source>%name% - copy (%number%)</source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="62"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="39"/> - <location filename="../../RenamingRules.cpp" line="62"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="43"/> - <location filename="../../RenamingRules.cpp" line="73"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>RmPath</name> - <message> - <location filename="../../RmPath.cpp" line="59"/> - <source>Unable to remove the folder</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>TransferThread</name> - <message> - <location filename="../../TransferThread.cpp" line="311"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="321"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="626"/> - <source>The checksums not match</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>WriteThread</name> - <message> - <location filename="../../WriteThread.cpp" line="443"/> - <source>Unable to read the source file: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../WriteThread.cpp" line="481"/> - <source>File truncated during the read, possible data change</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>copyEngine</name> - <message> - <location filename="../../copyEngine.cpp" line="257"/> - <location filename="../../copyEngine.cpp" line="275"/> - <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="286"/> - <location filename="../../copyEngine.cpp" line="304"/> - <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="511"/> - <source>The mode have been forced previously, it's internal error, please report it</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileErrorDialog</name> - <message> - <location filename="../../fileErrorDialog.ui" line="14"/> - <source>Error on file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="20"/> - <source>Error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="56"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="73"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="90"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="136"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="156"/> - <source>Put to bottom</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="163"/> - <source>Retry</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="170"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="177"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="29"/> - <source>Error on folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="32"/> - <source>Folder name</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileExistsDialog</name> - <message> - <location filename="../../fileExistsDialog.ui" line="14"/> - <source>The file exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="34"/> - <source>Source</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="82"/> - <location filename="../../fileExistsDialog.ui" line="153"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="99"/> - <location filename="../../fileExistsDialog.ui" line="170"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="116"/> - <location filename="../../fileExistsDialog.ui" line="187"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="243"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="254"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="274"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="281"/> - <source>&Overwrite</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="291"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="298"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="307"/> - <source>Overwrite if newer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="312"/> - <source>Overwrite if not same modification date</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="102"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="112"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileIsSameDialog</name> - <message> - <location filename="../../fileIsSameDialog.ui" line="14"/> - <source>This files are the same file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="20"/> - <source>The source and destination is same</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="47"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="64"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="81"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="137"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="148"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="168"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="175"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="182"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="87"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="97"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>folderExistsDialog</name> - <message> - <location filename="../../folderExistsDialog.ui" line="14"/> - <source>This folders are the same folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="34"/> - <source>Source</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="62"/> - <source>The source and destination is same</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="89"/> - <location filename="../../folderExistsDialog.ui" line="140"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="106"/> - <location filename="../../folderExistsDialog.ui" line="150"/> - <source>Folder name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="200"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="211"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="218"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="225"/> - <source>Merge</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="232"/> - <source>Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="239"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="29"/> - <source>Folder already exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="85"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="95"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>options</name> - <message> - <location filename="../../options.ui" line="23"/> - <source>Transfer the file rights</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="33"/> - <source>Keep the file date</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="128"/> - <source>Checksum</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="144"/> - <source>Only after error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="154"/> - <source>Ignore if impossible</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="171"/> - <source>Do checksum</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="181"/> - <source>Enable OS buffer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="191"/> - <source>OS buffer only if smaller than</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="214"/> - <source>Block size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="234"/> - <source>Filters</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="241"/> - <source>Renaming rules</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="43"/> - <location filename="../../options.ui" line="198"/> - <source>KB</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="56"/> - <source>Auto start the transfer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="66"/> - <source>When folder error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="74"/> - <location filename="../../options.ui" line="95"/> - <source>Ask</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="79"/> - <location filename="../../options.ui" line="105"/> - <source>Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="100"/> - <source>Merge</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="110"/> - <source>Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="118"/> - <source>Check if destination folder exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="87"/> - <source>When folder collision</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>scanFileOrFolder</name> - <message> - <location filename="../../scanFileOrFolder.cpp" line="218"/> - <location filename="../../scanFileOrFolder.cpp" line="282"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="228"/> - <location filename="../../scanFileOrFolder.cpp" line="292"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="326"/> - <source>The folder not exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="328"/> - <source>The folder is not readable</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/ko/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/ko/translation.ts deleted file mode 100644 index 6210b83..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/Languages/ko/translation.ts +++ /dev/null @@ -1,795 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.0" language="ko_KR"> -<context> - <name>AvancedQFile</name> - <message> - <location filename="../../AvancedQFile.cpp" line="28"/> - <location filename="../../AvancedQFile.cpp" line="59"/> - <location filename="../../AvancedQFile.cpp" line="90"/> - <source>Not supported on this platform</source> - <translation>ģ“ ķė«ķ¼ģģ ģ§ģėģ§ ģģµėė¤</translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="42"/> - <source>Last modified date is wrong</source> - <translation>ė§ģ§ė§ ģģ ė ģ§ź° ģėŖ»ėģģµėė¤</translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="73"/> - <source>Last access date is wrong</source> - <translation>ė§ģ§ė§ ģģøģ¤ ė ģ§ź° ģėŖ»ėģģµėė¤</translation> - </message> -</context> -<context> - <name>Factory</name> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>FilterRules</name> - <message> - <location filename="../../FilterRules.ui" line="17"/> - <source>Filters dialog</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="33"/> - <source>Search:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="43"/> - <source>Search type:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="51"/> - <source>Raw text</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="56"/> - <source>Simplified regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="61"/> - <source>Perl's regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="69"/> - <source>Apply on:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="77"/> - <source>File</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="82"/> - <source>Folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="87"/> - <source>File and folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="95"/> - <source>All string need match</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="102"/> - <source>Checking</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="108"/> - <source>The regex is valid</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="115"/> - <source>Test string:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="125"/> - <source>The test string match with the regex</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Filters</name> - <message> - <location filename="../../Filters.ui" line="14"/> - <source>Filters</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="30"/> - <source>Exclusion filter</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="93"/> - <source>Inclusion filter</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="105"/> - <source>None = Include all</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="92"/> - <location filename="../../Filters.cpp" line="130"/> - <source>Raw text</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="95"/> - <location filename="../../Filters.cpp" line="133"/> - <source>Simplified regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="98"/> - <location filename="../../Filters.cpp" line="136"/> - <source>Perl's regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="106"/> - <location filename="../../Filters.cpp" line="144"/> - <source>Only on file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="109"/> - <location filename="../../Filters.cpp" line="147"/> - <source>Only on folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="115"/> - <location filename="../../Filters.cpp" line="153"/> - <location filename="../../Filters.cpp" line="215"/> - <location filename="../../Filters.cpp" line="254"/> - <source>Full match</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>ListThread</name> - <message> - <location filename="../../ListThread.cpp" line="1162"/> - <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="1169"/> - <source>Unable to save the transfer list: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1185"/> - <source>Problem at the reading, or file size is null</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1192"/> - <source>Wrong header: "%1"</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1201"/> - <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="1210"/> - <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="1216"/> - <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="1263"/> - <source>Some error have been found during the line parsing</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1269"/> - <source>Unable to open the transfer list: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>MkPath</name> - <message> - <location filename="../../MkPath.cpp" line="62"/> - <source>Unable to create the folder</source> - <translation>ķ“ėė„¼ ģģ±ķ ģ ģģµėė¤</translation> - </message> -</context> -<context> - <name>ReadThread</name> - <message> - <location filename="../../ReadThread.cpp" line="154"/> - <location filename="../../ReadThread.cpp" line="316"/> - <source>Unable to read the source file: </source> - <translation>ģė³ø ķģ¼ ģ½źø° ė¶ź°:</translation> - </message> - <message> - <location filename="../../ReadThread.cpp" line="193"/> - <location filename="../../ReadThread.cpp" line="373"/> - <source>File truncated during the read, possible data change</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>RenamingRules</name> - <message> - <location filename="../../RenamingRules.ui" line="14"/> - <source>Renaming rules</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="26"/> - <source>First renaming</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="32"/> - <source>%name% - copy</source> - <extracomment>%name% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="39"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> - <extracomment> should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="49"/> - <source>Second renaming</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="55"/> - <source>%name% - copy (%number%)</source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="62"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="39"/> - <location filename="../../RenamingRules.cpp" line="62"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="43"/> - <location filename="../../RenamingRules.cpp" line="73"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>RmPath</name> - <message> - <location filename="../../RmPath.cpp" line="59"/> - <source>Unable to remove the folder</source> - <translation>ķ“ėė„¼ ģ ź±°ķ ģ ģģµėė¤</translation> - </message> -</context> -<context> - <name>TransferThread</name> - <message> - <location filename="../../TransferThread.cpp" line="311"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="321"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="626"/> - <source>The checksums not match</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>WriteThread</name> - <message> - <location filename="../../WriteThread.cpp" line="443"/> - <source>Unable to read the source file: </source> - <translation type="unfinished">ģė³ø ķģ¼ ģ½źø° ė¶ź°:</translation> - </message> - <message> - <location filename="../../WriteThread.cpp" line="481"/> - <source>File truncated during the read, possible data change</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>copyEngine</name> - <message> - <location filename="../../copyEngine.cpp" line="257"/> - <location filename="../../copyEngine.cpp" line="275"/> - <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="286"/> - <location filename="../../copyEngine.cpp" line="304"/> - <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="511"/> - <source>The mode have been forced previously, it's internal error, please report it</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileErrorDialog</name> - <message> - <location filename="../../fileErrorDialog.ui" line="14"/> - <source>Error on file</source> - <translation>ķģ¼ ģ¤ė„ź° ė°ģķģµėė¤</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="20"/> - <source>Error</source> - <translation>ģ¤ė„</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="56"/> - <source>Size</source> - <translation>ķ¬źø°</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="73"/> - <source>Modified</source> - <translation>ģģ ė ģ§</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="90"/> - <source>File name</source> - <translation>ķģ¼ ģ“ė¦</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="136"/> - <source>&Always do this action</source> - <translation>&ķģ ģ“ ģė ģ¤ķ</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="156"/> - <source>Put to bottom</source> - <translation>ģėģ ėźø°</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="163"/> - <source>Retry</source> - <translation>ģ¬ģė</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="170"/> - <source>&Skip</source> - <translation>&ź±“ėė°źø°</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="177"/> - <source>&Cancel</source> - <translation>&ģ·Øģ</translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="29"/> - <source>Error on folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="32"/> - <source>Folder name</source> - <translation type="unfinished">ķ“ė ģ“ė¦</translation> - </message> -</context> -<context> - <name>fileExistsDialog</name> - <message> - <location filename="../../fileExistsDialog.ui" line="14"/> - <source>The file exists</source> - <translation>ķģ¼ģ“ ģ”“ģ¬ķ©ėė¤</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="34"/> - <source>Source</source> - <translation>ģė³ø</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation>ėģ</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="82"/> - <location filename="../../fileExistsDialog.ui" line="153"/> - <source>Size</source> - <translation>ķ¬źø°</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="99"/> - <location filename="../../fileExistsDialog.ui" line="170"/> - <source>Modified</source> - <translation>ģģ ė ģ§</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="116"/> - <location filename="../../fileExistsDialog.ui" line="187"/> - <source>File name</source> - <translation>ķģ¼ ģ“ė¦</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="243"/> - <source>Suggest new &name</source> - <translation>ģ &ģ“ė¦ ģ ģ</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="254"/> - <source>&Always do this action</source> - <translation>&ķģ ģ“ ģė ģ¤ķ</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="274"/> - <source>&Rename</source> - <translation>&ģ“ė¦ ė°ź¾øźø°</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="281"/> - <source>&Overwrite</source> - <translation>&ė®ģ“ģģ°źø°</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="291"/> - <source>&Skip</source> - <translation>&ź±“ėė°źø°</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="298"/> - <source>&Cancel</source> - <translation>&ģ·Øģ</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="307"/> - <source>Overwrite if newer</source> - <translation>ė ģµģ ģ“ė©“ ė®ģ“ģģ°źø°</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="312"/> - <source>Overwrite if not same modification date</source> - <translation>ģģ ė ģ§ź° ė¤ė„“ė©“ ė®ģ“ģģ°źø°</translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="102"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="112"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileIsSameDialog</name> - <message> - <location filename="../../fileIsSameDialog.ui" line="14"/> - <source>This files are the same file</source> - <translation>ģ“ ķģ¼ė¤ģ ėģ¼ķ ķģ¼ģ
ėė¤</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="20"/> - <source>The source and destination is same</source> - <translation>ģė³øź³¼ ėģģ“ ėģ¼ķ©ėė¤</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="47"/> - <source>Size</source> - <translation>ķ¬źø°</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="64"/> - <source>Modified</source> - <translation>ģģ ė ģ§</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="81"/> - <source>File name</source> - <translation>ķģ¼ ģ“ė¦</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="137"/> - <source>Suggest new &name</source> - <translation>ģ &ģ“ė¦ ģ ģ</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="148"/> - <source>&Always do this action</source> - <translation>&ķģ ģ“ ģė ģ¤ķ</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="168"/> - <source>&Rename</source> - <translation>&ģ“ė¦ ė°ź¾øźø°</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="175"/> - <source>&Skip</source> - <translation>&ź±“ėė°źø°</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="182"/> - <source>&Cancel</source> - <translation>&ģ·Øģ</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="87"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="97"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>folderExistsDialog</name> - <message> - <location filename="../../folderExistsDialog.ui" line="14"/> - <source>This folders are the same folder</source> - <translation>ģ“ ķ“ėė¤ģ ėģ¼ķ ķ“ėģ
ėė¤</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="34"/> - <source>Source</source> - <translation>ģė³ø</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation>ėģ</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="62"/> - <source>The source and destination is same</source> - <translation>ģė³øź³¼ ėģģ“ ėģ¼ķ©ėė¤</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="89"/> - <location filename="../../folderExistsDialog.ui" line="140"/> - <source>Modified</source> - <translation>ģģ ė ģ§</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="106"/> - <location filename="../../folderExistsDialog.ui" line="150"/> - <source>Folder name</source> - <translation>ķ“ė ģ“ė¦</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="200"/> - <source>Suggest new &name</source> - <translation>ģ &ģ“ė¦ ģ ģ</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="211"/> - <source>&Always do this action</source> - <translation>&ķģ ģ“ ģė ģ¤ķ</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="218"/> - <source>&Rename</source> - <translation>&ģ“ė¦ ė°ź¾øźø°</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="225"/> - <source>Merge</source> - <translation>ķ©ģ¹źø°</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="232"/> - <source>Skip</source> - <translation>ź±“ėė°źø°</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="239"/> - <source>&Cancel</source> - <translation>&ģ·Øģ</translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="29"/> - <source>Folder already exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="85"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="95"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>options</name> - <message> - <location filename="../../options.ui" line="23"/> - <source>Transfer the file rights</source> - <translation>ķģ¼ ź¶ķ ģ ģ”</translation> - </message> - <message> - <location filename="../../options.ui" line="33"/> - <source>Keep the file date</source> - <translation>ķģ¼ ė ģ§ ė³“ģ”“</translation> - </message> - <message> - <location filename="../../options.ui" line="128"/> - <source>Checksum</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="144"/> - <source>Only after error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="154"/> - <source>Ignore if impossible</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="171"/> - <source>Do checksum</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="181"/> - <source>Enable OS buffer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="191"/> - <source>OS buffer only if smaller than</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="214"/> - <source>Block size</source> - <translation>ėøė ķ¬źø°</translation> - </message> - <message> - <location filename="../../options.ui" line="234"/> - <source>Filters</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="241"/> - <source>Renaming rules</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="43"/> - <location filename="../../options.ui" line="198"/> - <source>KB</source> - <translation>KB</translation> - </message> - <message> - <location filename="../../options.ui" line="56"/> - <source>Auto start the transfer</source> - <translation>ģ ģ” ģė ģģ</translation> - </message> - <message> - <location filename="../../options.ui" line="66"/> - <source>When folder error</source> - <translation>ķ“ė ģ¤ė„ģ</translation> - </message> - <message> - <location filename="../../options.ui" line="74"/> - <location filename="../../options.ui" line="95"/> - <source>Ask</source> - <translation>ķģø</translation> - </message> - <message> - <location filename="../../options.ui" line="79"/> - <location filename="../../options.ui" line="105"/> - <source>Skip</source> - <translation>ź±“ėė°źø°</translation> - </message> - <message> - <location filename="../../options.ui" line="100"/> - <source>Merge</source> - <translation>ķ©ģ¹źø°</translation> - </message> - <message> - <location filename="../../options.ui" line="110"/> - <source>Rename</source> - <translation>ģ“ė¦ ė°ź¾øźø°</translation> - </message> - <message> - <location filename="../../options.ui" line="118"/> - <source>Check if destination folder exists</source> - <translation>ėģ ķ“ė ģ”“ģ¬ģ ķģø</translation> - </message> - <message> - <location filename="../../options.ui" line="87"/> - <source>When folder collision</source> - <translation>ķ“ė ģ¶©ėģ</translation> - </message> -</context> -<context> - <name>scanFileOrFolder</name> - <message> - <location filename="../../scanFileOrFolder.cpp" line="218"/> - <location filename="../../scanFileOrFolder.cpp" line="282"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="228"/> - <location filename="../../scanFileOrFolder.cpp" line="292"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="326"/> - <source>The folder not exists</source> - <translation>ķ“ėź° ģ”“ģ¬ķģ§ ģģµėė¤</translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="328"/> - <source>The folder is not readable</source> - <translation>ķ“ėė„¼ ģ½ģ ģ ģģµėė¤</translation> - </message> -</context> -</TS> diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/nl/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/nl/translation.ts deleted file mode 100644 index 0898631..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/Languages/nl/translation.ts +++ /dev/null @@ -1,795 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.0"> -<context> - <name>AvancedQFile</name> - <message> - <location filename="../../AvancedQFile.cpp" line="28"/> - <location filename="../../AvancedQFile.cpp" line="59"/> - <location filename="../../AvancedQFile.cpp" line="90"/> - <source>Not supported on this platform</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="42"/> - <source>Last modified date is wrong</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="73"/> - <source>Last access date is wrong</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Factory</name> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>FilterRules</name> - <message> - <location filename="../../FilterRules.ui" line="33"/> - <source>Search:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="43"/> - <source>Search type:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="51"/> - <source>Raw text</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="56"/> - <source>Simplified regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="61"/> - <source>Perl's regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="69"/> - <source>Apply on:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="77"/> - <source>File</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="82"/> - <source>Folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="87"/> - <source>File and folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="95"/> - <source>All string need match</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="102"/> - <source>Checking</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="115"/> - <source>Test string:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="17"/> - <source>Filters dialog</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="108"/> - <source>The regex is valid</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="125"/> - <source>The test string match with the regex</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Filters</name> - <message> - <location filename="../../Filters.ui" line="14"/> - <source>Filters</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="30"/> - <source>Exclusion filter</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="93"/> - <source>Inclusion filter</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="105"/> - <source>None = Include all</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="92"/> - <location filename="../../Filters.cpp" line="130"/> - <source>Raw text</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="95"/> - <location filename="../../Filters.cpp" line="133"/> - <source>Simplified regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="98"/> - <location filename="../../Filters.cpp" line="136"/> - <source>Perl's regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="106"/> - <location filename="../../Filters.cpp" line="144"/> - <source>Only on file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="109"/> - <location filename="../../Filters.cpp" line="147"/> - <source>Only on folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="115"/> - <location filename="../../Filters.cpp" line="153"/> - <location filename="../../Filters.cpp" line="215"/> - <location filename="../../Filters.cpp" line="254"/> - <source>Full match</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>ListThread</name> - <message> - <location filename="../../ListThread.cpp" line="1162"/> - <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="1169"/> - <source>Unable to save the transfer list: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1185"/> - <source>Problem at the reading, or file size is null</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1192"/> - <source>Wrong header: "%1"</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1201"/> - <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="1210"/> - <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="1216"/> - <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="1263"/> - <source>Some error have been found during the line parsing</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1269"/> - <source>Unable to open the transfer list: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>MkPath</name> - <message> - <location filename="../../MkPath.cpp" line="62"/> - <source>Unable to create the folder</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>ReadThread</name> - <message> - <location filename="../../ReadThread.cpp" line="154"/> - <location filename="../../ReadThread.cpp" line="316"/> - <source>Unable to read the source file: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ReadThread.cpp" line="193"/> - <location filename="../../ReadThread.cpp" line="373"/> - <source>File truncated during the read, possible data change</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>RenamingRules</name> - <message> - <location filename="../../RenamingRules.ui" line="26"/> - <source>First renaming</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="32"/> - <source>%name% - copy</source> - <extracomment>%name% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="39"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> - <extracomment> should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="49"/> - <source>Second renaming</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="55"/> - <source>%name% - copy (%number%)</source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="62"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="39"/> - <location filename="../../RenamingRules.cpp" line="62"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="43"/> - <location filename="../../RenamingRules.cpp" line="73"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="14"/> - <source>Renaming rules</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>RmPath</name> - <message> - <location filename="../../RmPath.cpp" line="59"/> - <source>Unable to remove the folder</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>TransferThread</name> - <message> - <location filename="../../TransferThread.cpp" line="311"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="321"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="626"/> - <source>The checksums not match</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>WriteThread</name> - <message> - <location filename="../../WriteThread.cpp" line="443"/> - <source>Unable to read the source file: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../WriteThread.cpp" line="481"/> - <source>File truncated during the read, possible data change</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>copyEngine</name> - <message> - <location filename="../../copyEngine.cpp" line="257"/> - <location filename="../../copyEngine.cpp" line="275"/> - <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="286"/> - <location filename="../../copyEngine.cpp" line="304"/> - <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="511"/> - <source>The mode have been forced previously, it's internal error, please report it</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileErrorDialog</name> - <message> - <location filename="../../fileErrorDialog.ui" line="14"/> - <source>Error on file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="20"/> - <source>Error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="56"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="73"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="90"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="136"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="156"/> - <source>Put to bottom</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="163"/> - <source>Retry</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="170"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="177"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="29"/> - <source>Error on folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="32"/> - <source>Folder name</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileExistsDialog</name> - <message> - <location filename="../../fileExistsDialog.ui" line="14"/> - <source>The file exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="34"/> - <source>Source</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="82"/> - <location filename="../../fileExistsDialog.ui" line="153"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="99"/> - <location filename="../../fileExistsDialog.ui" line="170"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="116"/> - <location filename="../../fileExistsDialog.ui" line="187"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="243"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="254"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="274"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="281"/> - <source>&Overwrite</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="291"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="298"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="307"/> - <source>Overwrite if newer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="312"/> - <source>Overwrite if not same modification date</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="102"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="112"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileIsSameDialog</name> - <message> - <location filename="../../fileIsSameDialog.ui" line="14"/> - <source>This files are the same file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="20"/> - <source>The source and destination is same</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="47"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="64"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="81"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="137"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="148"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="168"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="175"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="182"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="87"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="97"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>folderExistsDialog</name> - <message> - <location filename="../../folderExistsDialog.ui" line="14"/> - <source>This folders are the same folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="34"/> - <source>Source</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="62"/> - <source>The source and destination is same</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="89"/> - <location filename="../../folderExistsDialog.ui" line="140"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="106"/> - <location filename="../../folderExistsDialog.ui" line="150"/> - <source>Folder name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="200"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="211"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="218"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="225"/> - <source>Merge</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="232"/> - <source>Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="239"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="29"/> - <source>Folder already exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="85"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="95"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>options</name> - <message> - <location filename="../../options.ui" line="23"/> - <source>Transfer the file rights</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="33"/> - <source>Keep the file date</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="214"/> - <source>Block size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="43"/> - <location filename="../../options.ui" line="198"/> - <source>KB</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="56"/> - <source>Auto start the transfer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="66"/> - <source>When folder error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="74"/> - <location filename="../../options.ui" line="95"/> - <source>Ask</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="79"/> - <location filename="../../options.ui" line="105"/> - <source>Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="100"/> - <source>Merge</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="110"/> - <source>Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="118"/> - <source>Check if destination folder exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="87"/> - <source>When folder collision</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="128"/> - <source>Checksum</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="144"/> - <source>Only after error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="154"/> - <source>Ignore if impossible</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="171"/> - <source>Do checksum</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="181"/> - <source>Enable OS buffer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="234"/> - <source>Filters</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="241"/> - <source>Renaming rules</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="191"/> - <source>OS buffer only if smaller than</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>scanFileOrFolder</name> - <message> - <location filename="../../scanFileOrFolder.cpp" line="218"/> - <location filename="../../scanFileOrFolder.cpp" line="282"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="228"/> - <location filename="../../scanFileOrFolder.cpp" line="292"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="326"/> - <source>The folder not exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="328"/> - <source>The folder is not readable</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/no/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/no/translation.ts deleted file mode 100644 index 0898631..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/Languages/no/translation.ts +++ /dev/null @@ -1,795 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.0"> -<context> - <name>AvancedQFile</name> - <message> - <location filename="../../AvancedQFile.cpp" line="28"/> - <location filename="../../AvancedQFile.cpp" line="59"/> - <location filename="../../AvancedQFile.cpp" line="90"/> - <source>Not supported on this platform</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="42"/> - <source>Last modified date is wrong</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="73"/> - <source>Last access date is wrong</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Factory</name> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>FilterRules</name> - <message> - <location filename="../../FilterRules.ui" line="33"/> - <source>Search:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="43"/> - <source>Search type:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="51"/> - <source>Raw text</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="56"/> - <source>Simplified regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="61"/> - <source>Perl's regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="69"/> - <source>Apply on:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="77"/> - <source>File</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="82"/> - <source>Folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="87"/> - <source>File and folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="95"/> - <source>All string need match</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="102"/> - <source>Checking</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="115"/> - <source>Test string:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="17"/> - <source>Filters dialog</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="108"/> - <source>The regex is valid</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="125"/> - <source>The test string match with the regex</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Filters</name> - <message> - <location filename="../../Filters.ui" line="14"/> - <source>Filters</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="30"/> - <source>Exclusion filter</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="93"/> - <source>Inclusion filter</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="105"/> - <source>None = Include all</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="92"/> - <location filename="../../Filters.cpp" line="130"/> - <source>Raw text</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="95"/> - <location filename="../../Filters.cpp" line="133"/> - <source>Simplified regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="98"/> - <location filename="../../Filters.cpp" line="136"/> - <source>Perl's regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="106"/> - <location filename="../../Filters.cpp" line="144"/> - <source>Only on file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="109"/> - <location filename="../../Filters.cpp" line="147"/> - <source>Only on folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="115"/> - <location filename="../../Filters.cpp" line="153"/> - <location filename="../../Filters.cpp" line="215"/> - <location filename="../../Filters.cpp" line="254"/> - <source>Full match</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>ListThread</name> - <message> - <location filename="../../ListThread.cpp" line="1162"/> - <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="1169"/> - <source>Unable to save the transfer list: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1185"/> - <source>Problem at the reading, or file size is null</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1192"/> - <source>Wrong header: "%1"</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1201"/> - <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="1210"/> - <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="1216"/> - <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="1263"/> - <source>Some error have been found during the line parsing</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1269"/> - <source>Unable to open the transfer list: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>MkPath</name> - <message> - <location filename="../../MkPath.cpp" line="62"/> - <source>Unable to create the folder</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>ReadThread</name> - <message> - <location filename="../../ReadThread.cpp" line="154"/> - <location filename="../../ReadThread.cpp" line="316"/> - <source>Unable to read the source file: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ReadThread.cpp" line="193"/> - <location filename="../../ReadThread.cpp" line="373"/> - <source>File truncated during the read, possible data change</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>RenamingRules</name> - <message> - <location filename="../../RenamingRules.ui" line="26"/> - <source>First renaming</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="32"/> - <source>%name% - copy</source> - <extracomment>%name% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="39"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> - <extracomment> should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="49"/> - <source>Second renaming</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="55"/> - <source>%name% - copy (%number%)</source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="62"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="39"/> - <location filename="../../RenamingRules.cpp" line="62"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="43"/> - <location filename="../../RenamingRules.cpp" line="73"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="14"/> - <source>Renaming rules</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>RmPath</name> - <message> - <location filename="../../RmPath.cpp" line="59"/> - <source>Unable to remove the folder</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>TransferThread</name> - <message> - <location filename="../../TransferThread.cpp" line="311"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="321"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="626"/> - <source>The checksums not match</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>WriteThread</name> - <message> - <location filename="../../WriteThread.cpp" line="443"/> - <source>Unable to read the source file: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../WriteThread.cpp" line="481"/> - <source>File truncated during the read, possible data change</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>copyEngine</name> - <message> - <location filename="../../copyEngine.cpp" line="257"/> - <location filename="../../copyEngine.cpp" line="275"/> - <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="286"/> - <location filename="../../copyEngine.cpp" line="304"/> - <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="511"/> - <source>The mode have been forced previously, it's internal error, please report it</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileErrorDialog</name> - <message> - <location filename="../../fileErrorDialog.ui" line="14"/> - <source>Error on file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="20"/> - <source>Error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="56"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="73"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="90"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="136"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="156"/> - <source>Put to bottom</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="163"/> - <source>Retry</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="170"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="177"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="29"/> - <source>Error on folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="32"/> - <source>Folder name</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileExistsDialog</name> - <message> - <location filename="../../fileExistsDialog.ui" line="14"/> - <source>The file exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="34"/> - <source>Source</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="82"/> - <location filename="../../fileExistsDialog.ui" line="153"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="99"/> - <location filename="../../fileExistsDialog.ui" line="170"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="116"/> - <location filename="../../fileExistsDialog.ui" line="187"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="243"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="254"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="274"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="281"/> - <source>&Overwrite</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="291"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="298"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="307"/> - <source>Overwrite if newer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="312"/> - <source>Overwrite if not same modification date</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="102"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="112"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileIsSameDialog</name> - <message> - <location filename="../../fileIsSameDialog.ui" line="14"/> - <source>This files are the same file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="20"/> - <source>The source and destination is same</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="47"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="64"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="81"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="137"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="148"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="168"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="175"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="182"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="87"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="97"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>folderExistsDialog</name> - <message> - <location filename="../../folderExistsDialog.ui" line="14"/> - <source>This folders are the same folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="34"/> - <source>Source</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="62"/> - <source>The source and destination is same</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="89"/> - <location filename="../../folderExistsDialog.ui" line="140"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="106"/> - <location filename="../../folderExistsDialog.ui" line="150"/> - <source>Folder name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="200"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="211"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="218"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="225"/> - <source>Merge</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="232"/> - <source>Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="239"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="29"/> - <source>Folder already exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="85"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="95"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>options</name> - <message> - <location filename="../../options.ui" line="23"/> - <source>Transfer the file rights</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="33"/> - <source>Keep the file date</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="214"/> - <source>Block size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="43"/> - <location filename="../../options.ui" line="198"/> - <source>KB</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="56"/> - <source>Auto start the transfer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="66"/> - <source>When folder error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="74"/> - <location filename="../../options.ui" line="95"/> - <source>Ask</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="79"/> - <location filename="../../options.ui" line="105"/> - <source>Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="100"/> - <source>Merge</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="110"/> - <source>Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="118"/> - <source>Check if destination folder exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="87"/> - <source>When folder collision</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="128"/> - <source>Checksum</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="144"/> - <source>Only after error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="154"/> - <source>Ignore if impossible</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="171"/> - <source>Do checksum</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="181"/> - <source>Enable OS buffer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="234"/> - <source>Filters</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="241"/> - <source>Renaming rules</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="191"/> - <source>OS buffer only if smaller than</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>scanFileOrFolder</name> - <message> - <location filename="../../scanFileOrFolder.cpp" line="218"/> - <location filename="../../scanFileOrFolder.cpp" line="282"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="228"/> - <location filename="../../scanFileOrFolder.cpp" line="292"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="326"/> - <source>The folder not exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="328"/> - <source>The folder is not readable</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/pl/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/pl/translation.ts deleted file mode 100644 index 0898631..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/Languages/pl/translation.ts +++ /dev/null @@ -1,795 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.0"> -<context> - <name>AvancedQFile</name> - <message> - <location filename="../../AvancedQFile.cpp" line="28"/> - <location filename="../../AvancedQFile.cpp" line="59"/> - <location filename="../../AvancedQFile.cpp" line="90"/> - <source>Not supported on this platform</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="42"/> - <source>Last modified date is wrong</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="73"/> - <source>Last access date is wrong</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Factory</name> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>FilterRules</name> - <message> - <location filename="../../FilterRules.ui" line="33"/> - <source>Search:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="43"/> - <source>Search type:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="51"/> - <source>Raw text</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="56"/> - <source>Simplified regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="61"/> - <source>Perl's regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="69"/> - <source>Apply on:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="77"/> - <source>File</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="82"/> - <source>Folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="87"/> - <source>File and folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="95"/> - <source>All string need match</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="102"/> - <source>Checking</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="115"/> - <source>Test string:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="17"/> - <source>Filters dialog</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="108"/> - <source>The regex is valid</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="125"/> - <source>The test string match with the regex</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Filters</name> - <message> - <location filename="../../Filters.ui" line="14"/> - <source>Filters</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="30"/> - <source>Exclusion filter</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="93"/> - <source>Inclusion filter</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="105"/> - <source>None = Include all</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="92"/> - <location filename="../../Filters.cpp" line="130"/> - <source>Raw text</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="95"/> - <location filename="../../Filters.cpp" line="133"/> - <source>Simplified regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="98"/> - <location filename="../../Filters.cpp" line="136"/> - <source>Perl's regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="106"/> - <location filename="../../Filters.cpp" line="144"/> - <source>Only on file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="109"/> - <location filename="../../Filters.cpp" line="147"/> - <source>Only on folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="115"/> - <location filename="../../Filters.cpp" line="153"/> - <location filename="../../Filters.cpp" line="215"/> - <location filename="../../Filters.cpp" line="254"/> - <source>Full match</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>ListThread</name> - <message> - <location filename="../../ListThread.cpp" line="1162"/> - <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="1169"/> - <source>Unable to save the transfer list: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1185"/> - <source>Problem at the reading, or file size is null</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1192"/> - <source>Wrong header: "%1"</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1201"/> - <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="1210"/> - <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="1216"/> - <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="1263"/> - <source>Some error have been found during the line parsing</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1269"/> - <source>Unable to open the transfer list: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>MkPath</name> - <message> - <location filename="../../MkPath.cpp" line="62"/> - <source>Unable to create the folder</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>ReadThread</name> - <message> - <location filename="../../ReadThread.cpp" line="154"/> - <location filename="../../ReadThread.cpp" line="316"/> - <source>Unable to read the source file: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ReadThread.cpp" line="193"/> - <location filename="../../ReadThread.cpp" line="373"/> - <source>File truncated during the read, possible data change</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>RenamingRules</name> - <message> - <location filename="../../RenamingRules.ui" line="26"/> - <source>First renaming</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="32"/> - <source>%name% - copy</source> - <extracomment>%name% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="39"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> - <extracomment> should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="49"/> - <source>Second renaming</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="55"/> - <source>%name% - copy (%number%)</source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="62"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="39"/> - <location filename="../../RenamingRules.cpp" line="62"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="43"/> - <location filename="../../RenamingRules.cpp" line="73"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="14"/> - <source>Renaming rules</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>RmPath</name> - <message> - <location filename="../../RmPath.cpp" line="59"/> - <source>Unable to remove the folder</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>TransferThread</name> - <message> - <location filename="../../TransferThread.cpp" line="311"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="321"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="626"/> - <source>The checksums not match</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>WriteThread</name> - <message> - <location filename="../../WriteThread.cpp" line="443"/> - <source>Unable to read the source file: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../WriteThread.cpp" line="481"/> - <source>File truncated during the read, possible data change</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>copyEngine</name> - <message> - <location filename="../../copyEngine.cpp" line="257"/> - <location filename="../../copyEngine.cpp" line="275"/> - <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="286"/> - <location filename="../../copyEngine.cpp" line="304"/> - <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="511"/> - <source>The mode have been forced previously, it's internal error, please report it</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileErrorDialog</name> - <message> - <location filename="../../fileErrorDialog.ui" line="14"/> - <source>Error on file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="20"/> - <source>Error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="56"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="73"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="90"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="136"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="156"/> - <source>Put to bottom</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="163"/> - <source>Retry</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="170"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="177"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="29"/> - <source>Error on folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="32"/> - <source>Folder name</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileExistsDialog</name> - <message> - <location filename="../../fileExistsDialog.ui" line="14"/> - <source>The file exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="34"/> - <source>Source</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="82"/> - <location filename="../../fileExistsDialog.ui" line="153"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="99"/> - <location filename="../../fileExistsDialog.ui" line="170"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="116"/> - <location filename="../../fileExistsDialog.ui" line="187"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="243"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="254"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="274"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="281"/> - <source>&Overwrite</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="291"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="298"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="307"/> - <source>Overwrite if newer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="312"/> - <source>Overwrite if not same modification date</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="102"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="112"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileIsSameDialog</name> - <message> - <location filename="../../fileIsSameDialog.ui" line="14"/> - <source>This files are the same file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="20"/> - <source>The source and destination is same</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="47"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="64"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="81"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="137"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="148"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="168"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="175"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="182"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="87"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="97"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>folderExistsDialog</name> - <message> - <location filename="../../folderExistsDialog.ui" line="14"/> - <source>This folders are the same folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="34"/> - <source>Source</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="62"/> - <source>The source and destination is same</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="89"/> - <location filename="../../folderExistsDialog.ui" line="140"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="106"/> - <location filename="../../folderExistsDialog.ui" line="150"/> - <source>Folder name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="200"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="211"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="218"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="225"/> - <source>Merge</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="232"/> - <source>Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="239"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="29"/> - <source>Folder already exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="85"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="95"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>options</name> - <message> - <location filename="../../options.ui" line="23"/> - <source>Transfer the file rights</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="33"/> - <source>Keep the file date</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="214"/> - <source>Block size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="43"/> - <location filename="../../options.ui" line="198"/> - <source>KB</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="56"/> - <source>Auto start the transfer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="66"/> - <source>When folder error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="74"/> - <location filename="../../options.ui" line="95"/> - <source>Ask</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="79"/> - <location filename="../../options.ui" line="105"/> - <source>Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="100"/> - <source>Merge</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="110"/> - <source>Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="118"/> - <source>Check if destination folder exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="87"/> - <source>When folder collision</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="128"/> - <source>Checksum</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="144"/> - <source>Only after error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="154"/> - <source>Ignore if impossible</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="171"/> - <source>Do checksum</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="181"/> - <source>Enable OS buffer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="234"/> - <source>Filters</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="241"/> - <source>Renaming rules</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="191"/> - <source>OS buffer only if smaller than</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>scanFileOrFolder</name> - <message> - <location filename="../../scanFileOrFolder.cpp" line="218"/> - <location filename="../../scanFileOrFolder.cpp" line="282"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="228"/> - <location filename="../../scanFileOrFolder.cpp" line="292"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="326"/> - <source>The folder not exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="328"/> - <source>The folder is not readable</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/pt/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/pt/translation.ts deleted file mode 100644 index 0898631..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/Languages/pt/translation.ts +++ /dev/null @@ -1,795 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.0"> -<context> - <name>AvancedQFile</name> - <message> - <location filename="../../AvancedQFile.cpp" line="28"/> - <location filename="../../AvancedQFile.cpp" line="59"/> - <location filename="../../AvancedQFile.cpp" line="90"/> - <source>Not supported on this platform</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="42"/> - <source>Last modified date is wrong</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="73"/> - <source>Last access date is wrong</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Factory</name> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>FilterRules</name> - <message> - <location filename="../../FilterRules.ui" line="33"/> - <source>Search:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="43"/> - <source>Search type:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="51"/> - <source>Raw text</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="56"/> - <source>Simplified regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="61"/> - <source>Perl's regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="69"/> - <source>Apply on:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="77"/> - <source>File</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="82"/> - <source>Folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="87"/> - <source>File and folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="95"/> - <source>All string need match</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="102"/> - <source>Checking</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="115"/> - <source>Test string:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="17"/> - <source>Filters dialog</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="108"/> - <source>The regex is valid</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="125"/> - <source>The test string match with the regex</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Filters</name> - <message> - <location filename="../../Filters.ui" line="14"/> - <source>Filters</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="30"/> - <source>Exclusion filter</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="93"/> - <source>Inclusion filter</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="105"/> - <source>None = Include all</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="92"/> - <location filename="../../Filters.cpp" line="130"/> - <source>Raw text</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="95"/> - <location filename="../../Filters.cpp" line="133"/> - <source>Simplified regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="98"/> - <location filename="../../Filters.cpp" line="136"/> - <source>Perl's regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="106"/> - <location filename="../../Filters.cpp" line="144"/> - <source>Only on file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="109"/> - <location filename="../../Filters.cpp" line="147"/> - <source>Only on folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="115"/> - <location filename="../../Filters.cpp" line="153"/> - <location filename="../../Filters.cpp" line="215"/> - <location filename="../../Filters.cpp" line="254"/> - <source>Full match</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>ListThread</name> - <message> - <location filename="../../ListThread.cpp" line="1162"/> - <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="1169"/> - <source>Unable to save the transfer list: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1185"/> - <source>Problem at the reading, or file size is null</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1192"/> - <source>Wrong header: "%1"</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1201"/> - <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="1210"/> - <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="1216"/> - <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="1263"/> - <source>Some error have been found during the line parsing</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1269"/> - <source>Unable to open the transfer list: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>MkPath</name> - <message> - <location filename="../../MkPath.cpp" line="62"/> - <source>Unable to create the folder</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>ReadThread</name> - <message> - <location filename="../../ReadThread.cpp" line="154"/> - <location filename="../../ReadThread.cpp" line="316"/> - <source>Unable to read the source file: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ReadThread.cpp" line="193"/> - <location filename="../../ReadThread.cpp" line="373"/> - <source>File truncated during the read, possible data change</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>RenamingRules</name> - <message> - <location filename="../../RenamingRules.ui" line="26"/> - <source>First renaming</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="32"/> - <source>%name% - copy</source> - <extracomment>%name% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="39"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> - <extracomment> should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="49"/> - <source>Second renaming</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="55"/> - <source>%name% - copy (%number%)</source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="62"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="39"/> - <location filename="../../RenamingRules.cpp" line="62"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="43"/> - <location filename="../../RenamingRules.cpp" line="73"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="14"/> - <source>Renaming rules</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>RmPath</name> - <message> - <location filename="../../RmPath.cpp" line="59"/> - <source>Unable to remove the folder</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>TransferThread</name> - <message> - <location filename="../../TransferThread.cpp" line="311"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="321"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="626"/> - <source>The checksums not match</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>WriteThread</name> - <message> - <location filename="../../WriteThread.cpp" line="443"/> - <source>Unable to read the source file: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../WriteThread.cpp" line="481"/> - <source>File truncated during the read, possible data change</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>copyEngine</name> - <message> - <location filename="../../copyEngine.cpp" line="257"/> - <location filename="../../copyEngine.cpp" line="275"/> - <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="286"/> - <location filename="../../copyEngine.cpp" line="304"/> - <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="511"/> - <source>The mode have been forced previously, it's internal error, please report it</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileErrorDialog</name> - <message> - <location filename="../../fileErrorDialog.ui" line="14"/> - <source>Error on file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="20"/> - <source>Error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="56"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="73"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="90"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="136"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="156"/> - <source>Put to bottom</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="163"/> - <source>Retry</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="170"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="177"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="29"/> - <source>Error on folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="32"/> - <source>Folder name</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileExistsDialog</name> - <message> - <location filename="../../fileExistsDialog.ui" line="14"/> - <source>The file exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="34"/> - <source>Source</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="82"/> - <location filename="../../fileExistsDialog.ui" line="153"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="99"/> - <location filename="../../fileExistsDialog.ui" line="170"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="116"/> - <location filename="../../fileExistsDialog.ui" line="187"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="243"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="254"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="274"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="281"/> - <source>&Overwrite</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="291"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="298"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="307"/> - <source>Overwrite if newer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="312"/> - <source>Overwrite if not same modification date</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="102"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="112"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileIsSameDialog</name> - <message> - <location filename="../../fileIsSameDialog.ui" line="14"/> - <source>This files are the same file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="20"/> - <source>The source and destination is same</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="47"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="64"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="81"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="137"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="148"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="168"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="175"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="182"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="87"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="97"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>folderExistsDialog</name> - <message> - <location filename="../../folderExistsDialog.ui" line="14"/> - <source>This folders are the same folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="34"/> - <source>Source</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="62"/> - <source>The source and destination is same</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="89"/> - <location filename="../../folderExistsDialog.ui" line="140"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="106"/> - <location filename="../../folderExistsDialog.ui" line="150"/> - <source>Folder name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="200"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="211"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="218"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="225"/> - <source>Merge</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="232"/> - <source>Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="239"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="29"/> - <source>Folder already exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="85"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="95"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>options</name> - <message> - <location filename="../../options.ui" line="23"/> - <source>Transfer the file rights</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="33"/> - <source>Keep the file date</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="214"/> - <source>Block size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="43"/> - <location filename="../../options.ui" line="198"/> - <source>KB</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="56"/> - <source>Auto start the transfer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="66"/> - <source>When folder error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="74"/> - <location filename="../../options.ui" line="95"/> - <source>Ask</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="79"/> - <location filename="../../options.ui" line="105"/> - <source>Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="100"/> - <source>Merge</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="110"/> - <source>Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="118"/> - <source>Check if destination folder exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="87"/> - <source>When folder collision</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="128"/> - <source>Checksum</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="144"/> - <source>Only after error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="154"/> - <source>Ignore if impossible</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="171"/> - <source>Do checksum</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="181"/> - <source>Enable OS buffer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="234"/> - <source>Filters</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="241"/> - <source>Renaming rules</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="191"/> - <source>OS buffer only if smaller than</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>scanFileOrFolder</name> - <message> - <location filename="../../scanFileOrFolder.cpp" line="218"/> - <location filename="../../scanFileOrFolder.cpp" line="282"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="228"/> - <location filename="../../scanFileOrFolder.cpp" line="292"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="326"/> - <source>The folder not exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="328"/> - <source>The folder is not readable</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/ru/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/ru/translation.ts deleted file mode 100644 index 90f4c0f..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/Languages/ru/translation.ts +++ /dev/null @@ -1,795 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.0" language="ru" sourcelanguage="en"> -<context> - <name>AvancedQFile</name> - <message> - <location filename="../../AvancedQFile.cpp" line="28"/> - <location filename="../../AvancedQFile.cpp" line="59"/> - <location filename="../../AvancedQFile.cpp" line="90"/> - <source>Not supported on this platform</source> - <translation>ŠŠµ ŠæŠ¾Š“Š“ŠµŃŠ¶ŠøŠ²Š°ŠµŃŃŃ Š½Š° ŃŃŠ¾Š¹ ŠæŠ»Š°ŃŃŠ¾ŃŠ¼Šµ</translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="42"/> - <source>Last modified date is wrong</source> - <translation>ŠŠ°ŃŠ° Š¾Š±Š½Š¾Š²Š»ŠµŠ½ŠøŃ Š½ŠµŠæŃŠ°Š²ŠøŠ»ŃŠ½Š¾</translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="73"/> - <source>Last access date is wrong</source> - <translation>ŠŠ°ŃŠ° ŠæŠ¾ŃŠ»ŠµŠ“Š½ŠµŠ³Š¾ Š“Š¾ŃŃŃŠæŠ° Š½Šµ ŃŠ°Šŗ</translation> - </message> -</context> -<context> - <name>Factory</name> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options error</source> - <translation>ŠŠæŃŠøŠø Š¾ŃŠøŠ±ŠŗŠµ</translation> - </message> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation>ŠŠ°ŃŠ°Š¼ŠµŃŃŃ Š“Š²ŠøŠ³Š°ŃŠµŠ»Ń Š½Šµ Š·Š°Š³ŃŃŠ¶Š°ŠµŃŃŃ, Š½Šµ Š¼Š¾Š¶ŠµŃ ŠæŠ¾Š»ŃŃŠøŃŃ Š“Š¾ŃŃŃŠæ Šŗ ŃŠøŠ»ŃŃŃŠ°Š¼</translation> - </message> -</context> -<context> - <name>FilterRules</name> - <message> - <location filename="../../FilterRules.ui" line="33"/> - <source>Search:</source> - <translation>ŠŠ¾ŠøŃŠŗ ŠæŠ¾ ŃŠ°Š¹ŃŃ:</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="43"/> - <source>Search type:</source> - <translation>Š¢ŠøŠæ ŠæŠ¾ŠøŃŠŗŠ°:</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="51"/> - <source>Raw text</source> - <translation>Š”ŃŃŠ¾Š¹ ŃŠµŠŗŃŃ</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="56"/> - <source>Simplified regex</source> - <translation>ŃŠæŃŠ¾ŃŠµŠ½Š½ŃŠ¹ regex</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="61"/> - <source>Perl's regex</source> - <translation>Perl's regex</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="69"/> - <source>Apply on:</source> - <translation>ŠŠ°Š½ŠµŃŠøŃŠµ Š½Š°:</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="77"/> - <source>File</source> - <translation>ŃŠ°Š¹Š»</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="82"/> - <source>Folder</source> - <translation>ŠæŠ°ŠæŠŗŠ°</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="87"/> - <source>File and folder</source> - <translation>Š¤Š°Š¹Š»Š¾Š² Šø ŠæŠ°ŠæŠ¾Šŗ</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="95"/> - <source>All string need match</source> - <translation>ŠŃŠµ ŃŃŃŠ¾ŠŗŠø Š½ŃŠ¶Š½Š¾ ŃŠ¾Š¾ŃŠ²ŠµŃŃŃŠ²Š¾Š²Š°ŃŃ</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="102"/> - <source>Checking</source> - <translation>ŠŗŠ¾Š½ŃŃŠ¾Š»Ń</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="115"/> - <source>Test string:</source> - <translation>ŠŃŠæŃŃŠ°Š½ŠøŠµ ŃŃŃŠ¾ŠŗŠø:</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="17"/> - <source>Filters dialog</source> - <translation>Š¤ŠøŠ»ŃŃŃŃ Š“ŠøŠ°Š»Š¾Š³Š¾Š²Š¾Š³Š¾</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="108"/> - <source>The regex is valid</source> - <translation>Š ŠµŠ³ŃŠ»ŃŃŠ½Š¾Šµ Š“ŠµŠ¹ŃŃŠ²ŃŠµŃ</translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="125"/> - <source>The test string match with the regex</source> - <translation>ŠŠ°ŃŃ ŃŠµŃŃŠ¾Š²ŃŃ ŃŃŃŠ¾ŠŗŃ Ń ŃŠµŠ³ŃŠ»ŃŃŠ½ŃŠ¼ Š²ŃŃŠ°Š¶ŠµŠ½ŠøŠµŠ¼</translation> - </message> -</context> -<context> - <name>Filters</name> - <message> - <location filename="../../Filters.ui" line="14"/> - <source>Filters</source> - <translation>Š¤ŠøŠ»ŃŃŃŃ</translation> - </message> - <message> - <location filename="../../Filters.ui" line="30"/> - <source>Exclusion filter</source> - <translation>ŠŃŠŗŠ»ŃŃŠµŠ½ŠøŠµ ŃŠøŠ»ŃŃŃŠ°</translation> - </message> - <message> - <location filename="../../Filters.ui" line="93"/> - <source>Inclusion filter</source> - <translation>ŠŠŗŠ»ŃŃŠµŠ½ŠøŠµ ŃŠøŠ»ŃŃŃŠ°</translation> - </message> - <message> - <location filename="../../Filters.ui" line="105"/> - <source>None = Include all</source> - <translation>ŠŠø = ŠŠŗŠ»ŃŃŠøŃŃ Š²ŃŠµ</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="92"/> - <location filename="../../Filters.cpp" line="130"/> - <source>Raw text</source> - <translation>Š”ŃŃŠ¾Š¹ ŃŠµŠŗŃŃ</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="95"/> - <location filename="../../Filters.cpp" line="133"/> - <source>Simplified regex</source> - <translation>Š£ŠæŃŠ¾ŃŠµŠ½Š½Š°Ń ŃŠµŠ³ŃŠ»ŃŃŠ½ŃŃ
Š²ŃŃŠ°Š¶ŠµŠ½ŠøŠ¹</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="98"/> - <location filename="../../Filters.cpp" line="136"/> - <source>Perl's regex</source> - <translation>Perl's regex</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="106"/> - <location filename="../../Filters.cpp" line="144"/> - <source>Only on file</source> - <translation>Š¢Š¾Š»ŃŠŗŠ¾ Š½Š° ŃŠ°Š¹Š»</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="109"/> - <location filename="../../Filters.cpp" line="147"/> - <source>Only on folder</source> - <translation>Š¢Š¾Š»ŃŠŗŠ¾ Š½Š° ŠæŠ°ŠæŠŗŃ</translation> - </message> - <message> - <location filename="../../Filters.cpp" line="115"/> - <location filename="../../Filters.cpp" line="153"/> - <location filename="../../Filters.cpp" line="215"/> - <location filename="../../Filters.cpp" line="254"/> - <source>Full match</source> - <translation>ŠŠ¾Š»Š½ŃŠ¹ Š¼Š°ŃŃ</translation> - </message> -</context> -<context> - <name>ListThread</name> - <message> - <location filename="../../ListThread.cpp" line="1162"/> - <source>Unable do to move or copy item into wrong forced mode: %1</source> - <translation>ŠŠµŠ²Š¾Š·Š¼Š¾Š¶Š½Š¾ ŃŠ“ŠµŠ»Š°ŃŃ, ŃŃŠ¾Š±Ń ŃŠŗŠ¾ŠæŠøŃŠ¾Š²Š°ŃŃ ŠøŠ»Šø ŠæŠµŃŠµŠ¼ŠµŃŃŠøŃŃ ŃŠ»ŠµŠ¼ŠµŠ½Ń Š² Š½ŠµŠæŃŠ°Š²ŠøŠ»ŃŠ½Š¾Š¼ ŃŠ¾ŃŃŠøŃŠ¾Š²Š°Š½Š½Š¾Š¼ ŃŠµŠ¶ŠøŠ¼Šµ: %1</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1169"/> - <source>Unable to save the transfer list: %1</source> - <translation>ŠŠµŠ²Š¾Š·Š¼Š¾Š¶Š½Š¾ ŃŠ¾Ń
ŃŠ°Š½ŠøŃŃ ŃŃŠ°Š½ŃŃŠµŃ: %1</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1185"/> - <source>Problem at the reading, or file size is null</source> - <translation>ŠŃŠ¾Š±Š»ŠµŠ¼Š° ŠæŃŠø ŃŃŠµŠ½ŠøŠø ŠøŠ»Šø ŃŠ°Š·Š¼ŠµŃ ŃŠ°Š¹Š»Š° Š½ŃŠ»ŠµŠ²Š¾Š¹</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1192"/> - <source>Wrong header: "%1"</source> - <translation>ŠŠµŠæŃŠ°Š²ŠøŠ»ŃŠ½ŃŠ¹ Š·Š°Š³Š¾Š»Š¾Š²Š¾Šŗ: "%1"</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1201"/> - <source>The transfer list is in mixed mode, but this instance is not in this mode</source> - <translation>Š¢ŃŠ°Š½ŃŃŠµŃ Š² ŃŠ¼ŠµŃŠ°Š½Š½Š¾Š¼ ŃŠµŠ¶ŠøŠ¼Šµ, Š½Š¾ ŃŃŠ¾Ń ŃŠŗŠ·ŠµŠ¼ŠæŠ»ŃŃ Š½Šµ Š² ŃŃŠ¾Š¼ ŃŠµŠ¶ŠøŠ¼Šµ</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1210"/> - <source>The transfer list is in copy mode, but this instance is not in this mode</source> - <translation>ŠŠµŃŠµŠ“Š°ŃŠ° ŃŠæŠøŃŠŗŠ° Š² ŃŠµŠ¶ŠøŠ¼Šµ ŠŗŠ¾ŠæŠøŃŠ¾Š²Š°Š½ŠøŃ, Š½Š¾ ŃŃŠ¾Ń ŃŠŗŠ·ŠµŠ¼ŠæŠ»ŃŃ Š½Šµ Š² ŃŃŠ¾Š¼ ŃŠµŠ¶ŠøŠ¼Šµ</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1216"/> - <source>The transfer list is in move mode, but this instance is not in this mode</source> - <translation>Š¢ŃŠ°Š½ŃŃŠµŃ Š² ŃŠµŠ¶ŠøŠ¼ ŠæŠµŃŠµŠ¼ŠµŃŠµŠ½ŠøŃ, Š½Š¾ ŃŃŠ¾Ń ŃŠŗŠ·ŠµŠ¼ŠæŠ»ŃŃ Š½Šµ Š² ŃŃŠ¾Š¼ ŃŠµŠ¶ŠøŠ¼Šµ</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1263"/> - <source>Some error have been found during the line parsing</source> - <translation>ŠŠµŠŗŠ¾ŃŠ¾ŃŃŠµ Š¾ŃŠøŠ±ŠŗŠø Š±ŃŠ»Šø Š¾Š±Š½Š°ŃŃŠ¶ŠµŠ½Ń Š² Ń
Š¾Š“Šµ ŃŠ°Š·Š±Š¾ŃŠ° Š»ŠøŠ½ŠøŃ</translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1269"/> - <source>Unable to open the transfer list: %1</source> - <translation>ŠŠµ ŃŠ“Š°ŠµŃŃŃ Š¾ŃŠŗŃŃŃŃ ŃŃŠ°Š½ŃŃŠµŃ: %1</translation> - </message> -</context> -<context> - <name>MkPath</name> - <message> - <location filename="../../MkPath.cpp" line="62"/> - <source>Unable to create the folder</source> - <translation>ŠŠµŠ²Š¾Š·Š¼Š¾Š¶Š½Š¾ ŃŠ¾Š·Š“Š°ŃŃ ŠæŠ°ŠæŠŗŃ</translation> - </message> -</context> -<context> - <name>ReadThread</name> - <message> - <location filename="../../ReadThread.cpp" line="154"/> - <location filename="../../ReadThread.cpp" line="316"/> - <source>Unable to read the source file: </source> - <translation>ŠŠµŠ²Š¾Š·Š¼Š¾Š¶Š½Š¾ ŠæŃŠ¾ŃŠøŃŠ°ŃŃ ŠøŃŃ
Š¾Š“Š½ŃŠ¹ ŃŠ°Š¹Š»: </translation> - </message> - <message> - <location filename="../../ReadThread.cpp" line="193"/> - <location filename="../../ReadThread.cpp" line="373"/> - <source>File truncated during the read, possible data change</source> - <translation>Š¤Š°Š¹Š» ŃŃŠµŃŠµŠ½Ń Š²Š¾ Š²ŃŠµŠ¼Ń ŃŃŠµŠ½ŠøŃ, Š²Š¾Š·Š¼Š¾Š¶Š½Š¾ŃŃŃ ŠøŠ·Š¼ŠµŠ½ŠµŠ½ŠøŃ Š“Š°Š½Š½ŃŃ
</translation> - </message> -</context> -<context> - <name>RenamingRules</name> - <message> - <location filename="../../RenamingRules.ui" line="26"/> - <source>First renaming</source> - <translation>ŠŠµŃŠ²Š¾Šµ ŠæŠµŃŠµŠøŠ¼ŠµŠ½Š¾Š²Š°Š½ŠøŠµ</translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="32"/> - <source>%name% - copy</source> - <extracomment>%name% should not be translated</extracomment> - <translation>%name% - ŠŗŠ¾ŠæŠøŃ</translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="39"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> - <extracomment> should not be translated</extracomment> - <translation><html><head/><body><p>ŠŠµŃŠµŠ¼ŠµŠ½Š½ŃŠµ: <span style=" font-weight:600;">%name%</span> ŠæŠ¾ Š¾ŃŠøŠ³ŠøŠ½Š°Š»ŃŠ½Š¾Š¼Ń Š½Š°Š·Š²Š°Š½ŠøŃ ŃŠ°Š¹Š»Š°</p></body></html></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="49"/> - <source>Second renaming</source> - <translation>ŠŃŠ¾ŃŠ¾Šµ ŠæŠµŃŠµŠøŠ¼ŠµŠ½Š¾Š²Š°Š½ŠøŠµ</translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="55"/> - <source>%name% - copy (%number%)</source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation>%name% - ŠŗŠ¾ŠæŠøŃ (%number%)</translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="62"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation><html><head/><body><p>ŠŠµŃŠµŠ¼ŠµŠ½Š½ŃŠµ: <span style=" font-weight:600;">%name%</span> ŠæŠ¾ Š¾ŃŠøŠ³ŠøŠ½Š°Š»ŃŠ½Š¾Š¼Ń Š½Š°Š·Š²Š°Š½ŠøŃ ŃŠ°Š¹Š»Š°</p><p><span style=" font-weight:600;">%number%</span> Š·Š° Š“Š¾ŠæŠ¾Š»Š½ŠøŃŠµŠ»ŃŠ½ŃŠ¹ Š½Š¾Š¼ŠµŃ</p></body></html></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="39"/> - <location filename="../../RenamingRules.cpp" line="62"/> - <source>%1 - copy</source> - <translation>%1 - ŠŗŠ¾ŠæŠøŃ</translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="43"/> - <location filename="../../RenamingRules.cpp" line="73"/> - <source>%1 - copy (%2)</source> - <translation>%1 - ŠŗŠ¾ŠæŠøŃ (%2)</translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="14"/> - <source>Renaming rules</source> - <translation>ŠŠµŃŠµŠøŠ¼ŠµŠ½Š¾Š²Š°Š½ŠøŠµ ŠæŃŠ°Š²ŠøŠ»Š°</translation> - </message> -</context> -<context> - <name>RmPath</name> - <message> - <location filename="../../RmPath.cpp" line="59"/> - <source>Unable to remove the folder</source> - <translation>ŠŠµ ŃŠ“Š°ŠµŃŃŃ ŃŠ“Š°Š»ŠøŃŃ ŠæŠ°ŠæŠŗŃ</translation> - </message> -</context> -<context> - <name>TransferThread</name> - <message> - <location filename="../../TransferThread.cpp" line="311"/> - <source>%1 - copy</source> - <translation>%1 - ŠŗŠ¾ŠæŠøŃ</translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="321"/> - <source>%1 - copy (%2)</source> - <translation>%1 - ŠŗŠ¾ŠæŠøŃ (%2)</translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="626"/> - <source>The checksums not match</source> - <translation>ŠŠ¾Š½ŃŃŠ¾Š»ŃŠ½ŃŠµ ŃŃŠ¼Š¼Ń Š½Šµ ŃŠ¾Š²ŠæŠ°Š“Š°ŃŃ</translation> - </message> -</context> -<context> - <name>WriteThread</name> - <message> - <location filename="../../WriteThread.cpp" line="443"/> - <source>Unable to read the source file: </source> - <translation>ŠŠµŠ²Š¾Š·Š¼Š¾Š¶Š½Š¾ ŠæŃŠ¾ŃŠøŃŠ°ŃŃ ŠøŃŃ
Š¾Š“Š½ŃŠ¹ ŃŠ°Š¹Š»: </translation> - </message> - <message> - <location filename="../../WriteThread.cpp" line="481"/> - <source>File truncated during the read, possible data change</source> - <translation>Š¤Š°Š¹Š» ŃŃŠµŃŠµŠ½Ń Š²Š¾ Š²ŃŠµŠ¼Ń ŃŃŠµŠ½ŠøŃ, Š²Š¾Š·Š¼Š¾Š¶Š½Š¾ŃŃŃ ŠøŠ·Š¼ŠµŠ½ŠµŠ½ŠøŃ Š“Š°Š½Š½ŃŃ
</translation> - </message> -</context> -<context> - <name>copyEngine</name> - <message> - <location filename="../../copyEngine.cpp" line="257"/> - <location filename="../../copyEngine.cpp" line="275"/> - <source>The engine is forced to move, you can't copy with it</source> - <translation>ŠŠ²ŠøŠ³Š°ŃŠµŠ»Ń Š²ŃŠ½ŃŠ¶Š“ŠµŠ½Ń ŠæŠ¾ŠŗŠøŠ½ŃŃŃ ŃŠ²Š¾Šø Š“Š¾Š¼Š°, Š²Ń Š½Šµ Š¼Š¾Š¶ŠµŃŠµ ŃŠŗŠ¾ŠæŠøŃŠ¾Š²Š°ŃŃ Ń Š½ŠøŠ¼</translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="286"/> - <location filename="../../copyEngine.cpp" line="304"/> - <source>The engine is forced to copy, you can't move with it</source> - <translation>ŠŠ²ŠøŠ³Š°ŃŠµŠ»Ń Š²ŃŠ½ŃŠ¶Š“ŠµŠ½ ŠŗŠ¾ŠæŠøŠø, Š²Ń Š½Šµ Š¼Š¾Š¶ŠµŃŠµ Š“Š²ŠøŠ³Š°ŃŃŃŃ Š²Š¼ŠµŃŃŠµ Ń Š½ŠøŠ¼</translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="511"/> - <source>The mode have been forced previously, it's internal error, please report it</source> - <translation>Š ŠµŠ¶ŠøŠ¼ Š±ŃŠ» Š²ŃŠ½ŃŠ¶Š“ŠµŠ½ ŃŠ°Š½ŠµŠµ, ŃŃŠ¾ Š²Š½ŃŃŃŠµŠ½Š½ŃŃ Š¾ŃŠøŠ±ŠŗŠ°, ŠæŠ¾Š¶Š°Š»ŃŠ¹ŃŃŠ°, ŃŠ¾Š¾Š±ŃŠøŃŠµ Š¾Š± ŃŃŠ¾Š¼</translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options error</source> - <translation>ŠŠæŃŠøŠø Š¾ŃŠøŠ±ŠŗŠµ</translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation>ŠŠ°ŃŠ°Š¼ŠµŃŃŃ Š“Š²ŠøŠ³Š°ŃŠµŠ»Ń Š½Šµ Š·Š°Š³ŃŃŠ¶Š°ŠµŃŃŃ, Š½Šµ Š¼Š¾Š¶ŠµŃ ŠæŠ¾Š»ŃŃŠøŃŃ Š“Š¾ŃŃŃŠæ Šŗ ŃŠøŠ»ŃŃŃŠ°Š¼</translation> - </message> -</context> -<context> - <name>fileErrorDialog</name> - <message> - <location filename="../../fileErrorDialog.ui" line="14"/> - <source>Error on file</source> - <translation>ŠŃŠøŠ±ŠŗŠ° Š² ŃŠ°Š¹Š»Šµ</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="20"/> - <source>Error</source> - <translation>Š¾ŃŠøŠ±ŠŗŠ°</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="56"/> - <source>Size</source> - <translation>ŃŠ°Š·Š¼ŠµŃ</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="73"/> - <source>Modified</source> - <translation>Š¼Š¾Š“ŠøŃŠøŃŠøŃŠ¾Š²Š°Š½Š½ŃŠ¹</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="90"/> - <source>File name</source> - <translation>ŠøŠ¼Ń ŃŠ°Š¹Š»Š°</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="136"/> - <source>&Always do this action</source> - <translation>ŠŃŠµŠ³Š“Š° Š“ŠµŠ»Š°Š¹ŃŠµ ŃŃŠ¾ Š“ŠµŠ¹ŃŃŠ²ŠøŠµ</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="156"/> - <source>Put to bottom</source> - <translation>ŠŠ¾Š»Š¾Š¶ŠøŃŃ Š² Š½ŠøŠ¶Š½ŠµŠ¹</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="163"/> - <source>Retry</source> - <translation>ŠŠ¾Š²ŃŠ¾ŃŠøŃŃ</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="170"/> - <source>&Skip</source> - <translation>ŠæŃŠ¾ŠæŃŃŠŗŠ°ŃŃ</translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="177"/> - <source>&Cancel</source> - <translation>Š¾ŃŠ¼ŠµŠ½ŠøŃŃ</translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="29"/> - <source>Error on folder</source> - <translation>ŠŃŠøŠ±ŠŗŠ° Š² ŠæŠ°ŠæŠŗŃ</translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="32"/> - <source>Folder name</source> - <translation>ŠøŠ¼Ń ŠæŠ°ŠæŠŗŠø</translation> - </message> -</context> -<context> - <name>fileExistsDialog</name> - <message> - <location filename="../../fileExistsDialog.ui" line="14"/> - <source>The file exists</source> - <translation>Š¤Š°Š¹Š» ŃŃŃŠµŃŃŠ²ŃŠµŃ</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="34"/> - <source>Source</source> - <translation>ŠøŃŃŠ¾ŃŠ½ŠøŠŗ</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation>Š½Š°Š·Š½Š°ŃŠµŠ½ŠøŠµ</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="82"/> - <location filename="../../fileExistsDialog.ui" line="153"/> - <source>Size</source> - <translation>ŃŠ°Š·Š¼ŠµŃ</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="99"/> - <location filename="../../fileExistsDialog.ui" line="170"/> - <source>Modified</source> - <translation>Š¼Š¾Š“ŠøŃŠøŃŠøŃŠ¾Š²Š°Š½Š½ŃŠ¹</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="116"/> - <location filename="../../fileExistsDialog.ui" line="187"/> - <source>File name</source> - <translation>ŠøŠ¼Ń ŃŠ°Š¹Š»Š°</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="243"/> - <source>Suggest new &name</source> - <translation>ŠŃŠµŠ“Š»Š¾Š¶ŠøŃŃ Š½Š¾Š²Š¾Šµ ŠøŠ¼Ń</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="254"/> - <source>&Always do this action</source> - <translation>ŠŃŠµŠ³Š“Š° Š“ŠµŠ»Š°Š¹ŃŠµ ŃŃŠ¾ Š“ŠµŠ¹ŃŃŠ²ŠøŠµ</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="274"/> - <source>&Rename</source> - <translation>ŠæŠµŃŠµŠøŠ¼ŠµŠ½Š¾Š²Š°ŃŃ</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="281"/> - <source>&Overwrite</source> - <translation>ŠæŠµŃŠµŠæŠøŃŃŠ²Š°ŃŃ</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="291"/> - <source>&Skip</source> - <translation>ŠæŃŠ¾ŠæŃŃŠŗŠ°ŃŃ</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="298"/> - <source>&Cancel</source> - <translation>Š¾ŃŠ¼ŠµŠ½ŠøŃŃ</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="307"/> - <source>Overwrite if newer</source> - <translation>ŠŠ°Š¼ŠµŠ½ŠøŃŃ, ŠµŃŠ»Šø Š½Š¾Š²ŠµŠµ</translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="312"/> - <source>Overwrite if not same modification date</source> - <translation>ŠŠ°Š¼ŠµŠ½ŠøŃŃ, ŠµŃŠ»Šø Š½Šµ ŃŃ Š¶Šµ Š“Š°ŃŃ Š¼Š¾Š“ŠøŃŠøŠŗŠ°ŃŠøŠø</translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="102"/> - <source>%1 - copy</source> - <translation>%1 - ŠŗŠ¾ŠæŠøŃ</translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="112"/> - <source>%1 - copy (%2)</source> - <translation>%1 - ŠŗŠ¾ŠæŠøŃ (%2)</translation> - </message> -</context> -<context> - <name>fileIsSameDialog</name> - <message> - <location filename="../../fileIsSameDialog.ui" line="14"/> - <source>This files are the same file</source> - <translation>ŠŃŠø ŃŠ°Š¹Š»Ń ŠøŠ¼ŠµŃŃ ŃŠ¾Ń Š¶Šµ ŃŠ°Š¹Š»</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="20"/> - <source>The source and destination is same</source> - <translation>ŠŃŃŠ¾ŃŠ½ŠøŠŗ Šø Š½Š°Š·Š½Š°ŃŠµŠ½ŠøŠµ ŃŠ°ŠŗŠ¾Šµ Š¶Šµ,</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="47"/> - <source>Size</source> - <translation>ŃŠ°Š·Š¼ŠµŃ</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="64"/> - <source>Modified</source> - <translation>Š¼Š¾Š“ŠøŃŠøŃŠøŃŠ¾Š²Š°Š½Š½ŃŠ¹</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="81"/> - <source>File name</source> - <translation>ŠøŠ¼Ń ŃŠ°Š¹Š»Š°</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="137"/> - <source>Suggest new &name</source> - <translation>ŠŃŠµŠ“Š»Š¾Š¶ŠøŃŃ Š½Š¾Š²Š¾Šµ ŠøŠ¼Ń</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="148"/> - <source>&Always do this action</source> - <translation>ŠŃŠµŠ³Š“Š° Š“ŠµŠ»Š°Š¹ŃŠµ ŃŃŠ¾ Š“ŠµŠ¹ŃŃŠ²ŠøŠµ</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="168"/> - <source>&Rename</source> - <translation>ŠæŠµŃŠµŠøŠ¼ŠµŠ½Š¾Š²Š°ŃŃ</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="175"/> - <source>&Skip</source> - <translation>ŠæŃŠ¾ŠæŃŃŠŗŠ°ŃŃ</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="182"/> - <source>&Cancel</source> - <translation>Š¾ŃŠ¼ŠµŠ½ŠøŃŃ</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="87"/> - <source>%1 - copy</source> - <translation>%1 - ŠŗŠ¾ŠæŠøŃ</translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="97"/> - <source>%1 - copy (%2)</source> - <translation>%1 - ŠŗŠ¾ŠæŠøŃ (%2)</translation> - </message> -</context> -<context> - <name>folderExistsDialog</name> - <message> - <location filename="../../folderExistsDialog.ui" line="14"/> - <source>This folders are the same folder</source> - <translation>ŠŃŠ¾ ŠæŠ°ŠæŠŗŠø ŃŠ¾Š¹ Š¶Šµ ŠæŠ°ŠæŠŗŠµ,</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="34"/> - <source>Source</source> - <translation>ŠøŃŃŠ¾ŃŠ½ŠøŠŗ</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation>Š½Š°Š·Š½Š°ŃŠµŠ½ŠøŠµ</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="62"/> - <source>The source and destination is same</source> - <translation>ŠŃŃŠ¾ŃŠ½ŠøŠŗ Šø Š½Š°Š·Š½Š°ŃŠµŠ½ŠøŠµ ŃŠ°ŠŗŠ¾Šµ Š¶Šµ,</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="89"/> - <location filename="../../folderExistsDialog.ui" line="140"/> - <source>Modified</source> - <translation>Š¼Š¾Š“ŠøŃŠøŃŠøŃŠ¾Š²Š°Š½Š½ŃŠ¹</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="106"/> - <location filename="../../folderExistsDialog.ui" line="150"/> - <source>Folder name</source> - <translation>ŠøŠ¼Ń ŠæŠ°ŠæŠŗŠø</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="200"/> - <source>Suggest new &name</source> - <translation>ŠŃŠµŠ“Š»Š¾Š¶ŠøŃŃ Š½Š¾Š²Š¾Šµ ŠøŠ¼Ń</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="211"/> - <source>&Always do this action</source> - <translation>ŠŃŠµŠ³Š“Š° Š“ŠµŠ»Š°Š¹ŃŠµ ŃŃŠ¾ Š“ŠµŠ¹ŃŃŠ²ŠøŠµ</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="218"/> - <source>&Rename</source> - <translation>ŠæŠµŃŠµŠøŠ¼ŠµŠ½Š¾Š²Š°ŃŃ</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="225"/> - <source>Merge</source> - <translation>ŃŠ»ŠøŃŠ½ŠøŠµ</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="232"/> - <source>Skip</source> - <translation>ŠæŃŠ¾ŠæŃŃŠŗŠ°ŃŃ</translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="239"/> - <source>&Cancel</source> - <translation>Š¾ŃŠ¼ŠµŠ½ŠøŃŃ</translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="29"/> - <source>Folder already exists</source> - <translation>ŠŠ°ŠæŠŗŠ° ŃŠ¶Šµ ŃŃŃŠµŃŃŠ²ŃŠµŃ</translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="85"/> - <source>%1 - copy</source> - <translation>%1 - ŠŗŠ¾ŠæŠøŃ</translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="95"/> - <source>%1 - copy (%2)</source> - <translation>%1 - ŠŗŠ¾ŠæŠøŃ (%2)</translation> - </message> -</context> -<context> - <name>options</name> - <message> - <location filename="../../options.ui" line="23"/> - <source>Transfer the file rights</source> - <translation>ŠŠµŃŠµŠ“Š°ŃŠ° ŃŠ°Š¹Š»Š¾Š² ŠæŃŠ°Š²</translation> - </message> - <message> - <location filename="../../options.ui" line="33"/> - <source>Keep the file date</source> - <translation>ŠŠµŃŠ¶ŠøŃŠµ Š“Š°ŃŃ ŃŠ°Š¹Š»Š°</translation> - </message> - <message> - <location filename="../../options.ui" line="214"/> - <source>Block size</source> - <translation>ŃŠ°Š·Š¼ŠµŃ Š±Š»Š¾ŠŗŠ°</translation> - </message> - <message> - <location filename="../../options.ui" line="43"/> - <location filename="../../options.ui" line="198"/> - <source>KB</source> - <translation>KB</translation> - </message> - <message> - <location filename="../../options.ui" line="56"/> - <source>Auto start the transfer</source> - <translation>ŠŠ²ŃŠ¾ Š½Š°ŃŠ°ŃŃ ŠæŠµŃŠµŠ“Š°ŃŃ</translation> - </message> - <message> - <location filename="../../options.ui" line="66"/> - <source>When folder error</source> - <translation>ŠŠ¾Š³Š“Š° ŠæŠ°ŠæŠŗŠ° Š¾ŃŠøŠ±ŠŗŠ°</translation> - </message> - <message> - <location filename="../../options.ui" line="74"/> - <location filename="../../options.ui" line="95"/> - <source>Ask</source> - <translation>ŠæŃŠ¾ŃŠøŃŃ</translation> - </message> - <message> - <location filename="../../options.ui" line="79"/> - <location filename="../../options.ui" line="105"/> - <source>Skip</source> - <translation>ŠæŃŠ¾ŠæŃŃŠŗŠ°ŃŃ</translation> - </message> - <message> - <location filename="../../options.ui" line="100"/> - <source>Merge</source> - <translation>ŃŠ»ŠøŃŠ½ŠøŠµ</translation> - </message> - <message> - <location filename="../../options.ui" line="110"/> - <source>Rename</source> - <translation>ŠæŠµŃŠµŠøŠ¼ŠµŠ½Š¾Š²Š°ŃŃ</translation> - </message> - <message> - <location filename="../../options.ui" line="118"/> - <source>Check if destination folder exists</source> - <translation>Š£Š±ŠµŠ“ŠøŃŠµŃŃ, ŃŃŠ¾ ŠæŠ°ŠæŠŗŠ° ŃŃŃŠµŃŃŠ²ŃŠµŃ</translation> - </message> - <message> - <location filename="../../options.ui" line="87"/> - <source>When folder collision</source> - <translation>ŠŠ¾Š³Š“Š° ŠæŠ°ŠæŠŗŠ° ŃŃŠ¾Š»ŠŗŠ½Š¾Š²ŠµŠ½ŠøŃ</translation> - </message> - <message> - <location filename="../../options.ui" line="128"/> - <source>Checksum</source> - <translation>ŠŠ¾Š½ŃŃŠ¾Š»ŃŠ½Š°Ń</translation> - </message> - <message> - <location filename="../../options.ui" line="144"/> - <source>Only after error</source> - <translation>Š¢Š¾Š»ŃŠŗŠ¾ ŠæŠ¾ŃŠ»Šµ ŃŠ¾Š³Š¾, ŠŗŠ°Šŗ Š¾ŃŠøŠ±ŠŗŠ°</translation> - </message> - <message> - <location filename="../../options.ui" line="154"/> - <source>Ignore if impossible</source> - <translation>ŠŠ³Š½Š¾ŃŠøŃŠ¾Š²Š°ŃŃ, ŠµŃŠ»Šø Š½ŠµŠ²Š¾Š·Š¼Š¾Š¶Š½Š¾</translation> - </message> - <message> - <location filename="../../options.ui" line="171"/> - <source>Do checksum</source> - <translation>Š£ ŠŗŠ¾Š½ŃŃŠ¾Š»ŃŠ½Š¾Š¹ ŃŃŠ¼Š¼Ń</translation> - </message> - <message> - <location filename="../../options.ui" line="181"/> - <source>Enable OS buffer</source> - <translation>ŠŠŗŠ»ŃŃŠøŃŃ OS Š±ŃŃŠµŃ</translation> - </message> - <message> - <location filename="../../options.ui" line="234"/> - <source>Filters</source> - <translation>Š¤ŠøŠ»ŃŃŃŃ</translation> - </message> - <message> - <location filename="../../options.ui" line="241"/> - <source>Renaming rules</source> - <translation>ŠŠµŃŠµŠøŠ¼ŠµŠ½Š¾Š²Š°Š½ŠøŠµ ŠæŃŠ°Š²ŠøŠ»Š°</translation> - </message> - <message> - <location filename="../../options.ui" line="191"/> - <source>OS buffer only if smaller than</source> - <translation>ŠŠ” Š±ŃŃŠµŃ, ŃŠ¾Š»ŃŠŗŠ¾ ŠµŃŠ»Šø Š¼ŠµŠ½ŃŃŠµ</translation> - </message> -</context> -<context> - <name>scanFileOrFolder</name> - <message> - <location filename="../../scanFileOrFolder.cpp" line="218"/> - <location filename="../../scanFileOrFolder.cpp" line="282"/> - <source>%1 - copy</source> - <translation>%1 - ŠŗŠ¾ŠæŠøŃ</translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="228"/> - <location filename="../../scanFileOrFolder.cpp" line="292"/> - <source>%1 - copy (%2)</source> - <translation>%1 - ŠŗŠ¾ŠæŠøŃ (%2)</translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="326"/> - <source>The folder not exists</source> - <translation>ŠŠ°ŠæŠŗŠ° Š½Šµ ŃŃŃŠµŃŃŠ²ŃŠµŃ</translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="328"/> - <source>The folder is not readable</source> - <translation>ŠŠ°ŠæŠŗŠø Š½Šµ ŃŠøŃŠ°ŠµŃŃŃ</translation> - </message> -</context> -</TS> diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/th/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/th/translation.ts deleted file mode 100644 index 0898631..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/Languages/th/translation.ts +++ /dev/null @@ -1,795 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.0"> -<context> - <name>AvancedQFile</name> - <message> - <location filename="../../AvancedQFile.cpp" line="28"/> - <location filename="../../AvancedQFile.cpp" line="59"/> - <location filename="../../AvancedQFile.cpp" line="90"/> - <source>Not supported on this platform</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="42"/> - <source>Last modified date is wrong</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="73"/> - <source>Last access date is wrong</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Factory</name> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>FilterRules</name> - <message> - <location filename="../../FilterRules.ui" line="33"/> - <source>Search:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="43"/> - <source>Search type:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="51"/> - <source>Raw text</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="56"/> - <source>Simplified regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="61"/> - <source>Perl's regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="69"/> - <source>Apply on:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="77"/> - <source>File</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="82"/> - <source>Folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="87"/> - <source>File and folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="95"/> - <source>All string need match</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="102"/> - <source>Checking</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="115"/> - <source>Test string:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="17"/> - <source>Filters dialog</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="108"/> - <source>The regex is valid</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="125"/> - <source>The test string match with the regex</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Filters</name> - <message> - <location filename="../../Filters.ui" line="14"/> - <source>Filters</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="30"/> - <source>Exclusion filter</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="93"/> - <source>Inclusion filter</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="105"/> - <source>None = Include all</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="92"/> - <location filename="../../Filters.cpp" line="130"/> - <source>Raw text</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="95"/> - <location filename="../../Filters.cpp" line="133"/> - <source>Simplified regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="98"/> - <location filename="../../Filters.cpp" line="136"/> - <source>Perl's regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="106"/> - <location filename="../../Filters.cpp" line="144"/> - <source>Only on file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="109"/> - <location filename="../../Filters.cpp" line="147"/> - <source>Only on folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="115"/> - <location filename="../../Filters.cpp" line="153"/> - <location filename="../../Filters.cpp" line="215"/> - <location filename="../../Filters.cpp" line="254"/> - <source>Full match</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>ListThread</name> - <message> - <location filename="../../ListThread.cpp" line="1162"/> - <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="1169"/> - <source>Unable to save the transfer list: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1185"/> - <source>Problem at the reading, or file size is null</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1192"/> - <source>Wrong header: "%1"</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1201"/> - <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="1210"/> - <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="1216"/> - <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="1263"/> - <source>Some error have been found during the line parsing</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1269"/> - <source>Unable to open the transfer list: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>MkPath</name> - <message> - <location filename="../../MkPath.cpp" line="62"/> - <source>Unable to create the folder</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>ReadThread</name> - <message> - <location filename="../../ReadThread.cpp" line="154"/> - <location filename="../../ReadThread.cpp" line="316"/> - <source>Unable to read the source file: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ReadThread.cpp" line="193"/> - <location filename="../../ReadThread.cpp" line="373"/> - <source>File truncated during the read, possible data change</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>RenamingRules</name> - <message> - <location filename="../../RenamingRules.ui" line="26"/> - <source>First renaming</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="32"/> - <source>%name% - copy</source> - <extracomment>%name% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="39"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> - <extracomment> should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="49"/> - <source>Second renaming</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="55"/> - <source>%name% - copy (%number%)</source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="62"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="39"/> - <location filename="../../RenamingRules.cpp" line="62"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="43"/> - <location filename="../../RenamingRules.cpp" line="73"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="14"/> - <source>Renaming rules</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>RmPath</name> - <message> - <location filename="../../RmPath.cpp" line="59"/> - <source>Unable to remove the folder</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>TransferThread</name> - <message> - <location filename="../../TransferThread.cpp" line="311"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="321"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="626"/> - <source>The checksums not match</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>WriteThread</name> - <message> - <location filename="../../WriteThread.cpp" line="443"/> - <source>Unable to read the source file: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../WriteThread.cpp" line="481"/> - <source>File truncated during the read, possible data change</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>copyEngine</name> - <message> - <location filename="../../copyEngine.cpp" line="257"/> - <location filename="../../copyEngine.cpp" line="275"/> - <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="286"/> - <location filename="../../copyEngine.cpp" line="304"/> - <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="511"/> - <source>The mode have been forced previously, it's internal error, please report it</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileErrorDialog</name> - <message> - <location filename="../../fileErrorDialog.ui" line="14"/> - <source>Error on file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="20"/> - <source>Error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="56"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="73"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="90"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="136"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="156"/> - <source>Put to bottom</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="163"/> - <source>Retry</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="170"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="177"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="29"/> - <source>Error on folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="32"/> - <source>Folder name</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileExistsDialog</name> - <message> - <location filename="../../fileExistsDialog.ui" line="14"/> - <source>The file exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="34"/> - <source>Source</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="82"/> - <location filename="../../fileExistsDialog.ui" line="153"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="99"/> - <location filename="../../fileExistsDialog.ui" line="170"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="116"/> - <location filename="../../fileExistsDialog.ui" line="187"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="243"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="254"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="274"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="281"/> - <source>&Overwrite</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="291"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="298"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="307"/> - <source>Overwrite if newer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="312"/> - <source>Overwrite if not same modification date</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="102"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="112"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileIsSameDialog</name> - <message> - <location filename="../../fileIsSameDialog.ui" line="14"/> - <source>This files are the same file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="20"/> - <source>The source and destination is same</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="47"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="64"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="81"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="137"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="148"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="168"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="175"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="182"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="87"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="97"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>folderExistsDialog</name> - <message> - <location filename="../../folderExistsDialog.ui" line="14"/> - <source>This folders are the same folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="34"/> - <source>Source</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="62"/> - <source>The source and destination is same</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="89"/> - <location filename="../../folderExistsDialog.ui" line="140"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="106"/> - <location filename="../../folderExistsDialog.ui" line="150"/> - <source>Folder name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="200"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="211"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="218"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="225"/> - <source>Merge</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="232"/> - <source>Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="239"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="29"/> - <source>Folder already exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="85"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="95"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>options</name> - <message> - <location filename="../../options.ui" line="23"/> - <source>Transfer the file rights</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="33"/> - <source>Keep the file date</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="214"/> - <source>Block size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="43"/> - <location filename="../../options.ui" line="198"/> - <source>KB</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="56"/> - <source>Auto start the transfer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="66"/> - <source>When folder error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="74"/> - <location filename="../../options.ui" line="95"/> - <source>Ask</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="79"/> - <location filename="../../options.ui" line="105"/> - <source>Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="100"/> - <source>Merge</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="110"/> - <source>Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="118"/> - <source>Check if destination folder exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="87"/> - <source>When folder collision</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="128"/> - <source>Checksum</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="144"/> - <source>Only after error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="154"/> - <source>Ignore if impossible</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="171"/> - <source>Do checksum</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="181"/> - <source>Enable OS buffer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="234"/> - <source>Filters</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="241"/> - <source>Renaming rules</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="191"/> - <source>OS buffer only if smaller than</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>scanFileOrFolder</name> - <message> - <location filename="../../scanFileOrFolder.cpp" line="218"/> - <location filename="../../scanFileOrFolder.cpp" line="282"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="228"/> - <location filename="../../scanFileOrFolder.cpp" line="292"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="326"/> - <source>The folder not exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="328"/> - <source>The folder is not readable</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/tr/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/tr/translation.ts deleted file mode 100644 index 0898631..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/Languages/tr/translation.ts +++ /dev/null @@ -1,795 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.0"> -<context> - <name>AvancedQFile</name> - <message> - <location filename="../../AvancedQFile.cpp" line="28"/> - <location filename="../../AvancedQFile.cpp" line="59"/> - <location filename="../../AvancedQFile.cpp" line="90"/> - <source>Not supported on this platform</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="42"/> - <source>Last modified date is wrong</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="73"/> - <source>Last access date is wrong</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Factory</name> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>FilterRules</name> - <message> - <location filename="../../FilterRules.ui" line="33"/> - <source>Search:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="43"/> - <source>Search type:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="51"/> - <source>Raw text</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="56"/> - <source>Simplified regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="61"/> - <source>Perl's regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="69"/> - <source>Apply on:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="77"/> - <source>File</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="82"/> - <source>Folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="87"/> - <source>File and folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="95"/> - <source>All string need match</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="102"/> - <source>Checking</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="115"/> - <source>Test string:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="17"/> - <source>Filters dialog</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="108"/> - <source>The regex is valid</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="125"/> - <source>The test string match with the regex</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Filters</name> - <message> - <location filename="../../Filters.ui" line="14"/> - <source>Filters</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="30"/> - <source>Exclusion filter</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="93"/> - <source>Inclusion filter</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="105"/> - <source>None = Include all</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="92"/> - <location filename="../../Filters.cpp" line="130"/> - <source>Raw text</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="95"/> - <location filename="../../Filters.cpp" line="133"/> - <source>Simplified regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="98"/> - <location filename="../../Filters.cpp" line="136"/> - <source>Perl's regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="106"/> - <location filename="../../Filters.cpp" line="144"/> - <source>Only on file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="109"/> - <location filename="../../Filters.cpp" line="147"/> - <source>Only on folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="115"/> - <location filename="../../Filters.cpp" line="153"/> - <location filename="../../Filters.cpp" line="215"/> - <location filename="../../Filters.cpp" line="254"/> - <source>Full match</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>ListThread</name> - <message> - <location filename="../../ListThread.cpp" line="1162"/> - <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="1169"/> - <source>Unable to save the transfer list: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1185"/> - <source>Problem at the reading, or file size is null</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1192"/> - <source>Wrong header: "%1"</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1201"/> - <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="1210"/> - <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="1216"/> - <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="1263"/> - <source>Some error have been found during the line parsing</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1269"/> - <source>Unable to open the transfer list: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>MkPath</name> - <message> - <location filename="../../MkPath.cpp" line="62"/> - <source>Unable to create the folder</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>ReadThread</name> - <message> - <location filename="../../ReadThread.cpp" line="154"/> - <location filename="../../ReadThread.cpp" line="316"/> - <source>Unable to read the source file: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ReadThread.cpp" line="193"/> - <location filename="../../ReadThread.cpp" line="373"/> - <source>File truncated during the read, possible data change</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>RenamingRules</name> - <message> - <location filename="../../RenamingRules.ui" line="26"/> - <source>First renaming</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="32"/> - <source>%name% - copy</source> - <extracomment>%name% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="39"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> - <extracomment> should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="49"/> - <source>Second renaming</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="55"/> - <source>%name% - copy (%number%)</source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="62"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="39"/> - <location filename="../../RenamingRules.cpp" line="62"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="43"/> - <location filename="../../RenamingRules.cpp" line="73"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="14"/> - <source>Renaming rules</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>RmPath</name> - <message> - <location filename="../../RmPath.cpp" line="59"/> - <source>Unable to remove the folder</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>TransferThread</name> - <message> - <location filename="../../TransferThread.cpp" line="311"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="321"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="626"/> - <source>The checksums not match</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>WriteThread</name> - <message> - <location filename="../../WriteThread.cpp" line="443"/> - <source>Unable to read the source file: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../WriteThread.cpp" line="481"/> - <source>File truncated during the read, possible data change</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>copyEngine</name> - <message> - <location filename="../../copyEngine.cpp" line="257"/> - <location filename="../../copyEngine.cpp" line="275"/> - <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="286"/> - <location filename="../../copyEngine.cpp" line="304"/> - <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="511"/> - <source>The mode have been forced previously, it's internal error, please report it</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileErrorDialog</name> - <message> - <location filename="../../fileErrorDialog.ui" line="14"/> - <source>Error on file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="20"/> - <source>Error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="56"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="73"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="90"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="136"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="156"/> - <source>Put to bottom</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="163"/> - <source>Retry</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="170"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="177"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="29"/> - <source>Error on folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="32"/> - <source>Folder name</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileExistsDialog</name> - <message> - <location filename="../../fileExistsDialog.ui" line="14"/> - <source>The file exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="34"/> - <source>Source</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="82"/> - <location filename="../../fileExistsDialog.ui" line="153"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="99"/> - <location filename="../../fileExistsDialog.ui" line="170"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="116"/> - <location filename="../../fileExistsDialog.ui" line="187"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="243"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="254"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="274"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="281"/> - <source>&Overwrite</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="291"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="298"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="307"/> - <source>Overwrite if newer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="312"/> - <source>Overwrite if not same modification date</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="102"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="112"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileIsSameDialog</name> - <message> - <location filename="../../fileIsSameDialog.ui" line="14"/> - <source>This files are the same file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="20"/> - <source>The source and destination is same</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="47"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="64"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="81"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="137"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="148"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="168"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="175"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="182"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="87"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="97"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>folderExistsDialog</name> - <message> - <location filename="../../folderExistsDialog.ui" line="14"/> - <source>This folders are the same folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="34"/> - <source>Source</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="62"/> - <source>The source and destination is same</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="89"/> - <location filename="../../folderExistsDialog.ui" line="140"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="106"/> - <location filename="../../folderExistsDialog.ui" line="150"/> - <source>Folder name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="200"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="211"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="218"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="225"/> - <source>Merge</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="232"/> - <source>Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="239"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="29"/> - <source>Folder already exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="85"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="95"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>options</name> - <message> - <location filename="../../options.ui" line="23"/> - <source>Transfer the file rights</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="33"/> - <source>Keep the file date</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="214"/> - <source>Block size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="43"/> - <location filename="../../options.ui" line="198"/> - <source>KB</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="56"/> - <source>Auto start the transfer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="66"/> - <source>When folder error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="74"/> - <location filename="../../options.ui" line="95"/> - <source>Ask</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="79"/> - <location filename="../../options.ui" line="105"/> - <source>Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="100"/> - <source>Merge</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="110"/> - <source>Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="118"/> - <source>Check if destination folder exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="87"/> - <source>When folder collision</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="128"/> - <source>Checksum</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="144"/> - <source>Only after error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="154"/> - <source>Ignore if impossible</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="171"/> - <source>Do checksum</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="181"/> - <source>Enable OS buffer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="234"/> - <source>Filters</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="241"/> - <source>Renaming rules</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="191"/> - <source>OS buffer only if smaller than</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>scanFileOrFolder</name> - <message> - <location filename="../../scanFileOrFolder.cpp" line="218"/> - <location filename="../../scanFileOrFolder.cpp" line="282"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="228"/> - <location filename="../../scanFileOrFolder.cpp" line="292"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="326"/> - <source>The folder not exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="328"/> - <source>The folder is not readable</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/plugins/CopyEngine/Ultracopier-0.3/Languages/zh/translation.ts b/plugins/CopyEngine/Ultracopier-0.3/Languages/zh/translation.ts deleted file mode 100644 index 9a215b1..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/Languages/zh/translation.ts +++ /dev/null @@ -1,795 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE TS> -<TS version="2.0"> -<context> - <name>AvancedQFile</name> - <message> - <location filename="../../AvancedQFile.cpp" line="28"/> - <location filename="../../AvancedQFile.cpp" line="59"/> - <location filename="../../AvancedQFile.cpp" line="90"/> - <source>Not supported on this platform</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="42"/> - <source>Last modified date is wrong</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../AvancedQFile.cpp" line="73"/> - <source>Last access date is wrong</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Factory</name> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../factory.cpp" line="356"/> - <location filename="../../factory.cpp" line="393"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>FilterRules</name> - <message> - <location filename="../../FilterRules.ui" line="17"/> - <source>Filters dialog</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="33"/> - <source>Search:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="43"/> - <source>Search type:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="51"/> - <source>Raw text</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="56"/> - <source>Simplified regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="61"/> - <source>Perl's regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="69"/> - <source>Apply on:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="77"/> - <source>File</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="82"/> - <source>Folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="87"/> - <source>File and folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="95"/> - <source>All string need match</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="102"/> - <source>Checking</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="108"/> - <source>The regex is valid</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="115"/> - <source>Test string:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../FilterRules.ui" line="125"/> - <source>The test string match with the regex</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>Filters</name> - <message> - <location filename="../../Filters.ui" line="14"/> - <source>Filters</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="30"/> - <source>Exclusion filter</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="93"/> - <source>Inclusion filter</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.ui" line="105"/> - <source>None = Include all</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="92"/> - <location filename="../../Filters.cpp" line="130"/> - <source>Raw text</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="95"/> - <location filename="../../Filters.cpp" line="133"/> - <source>Simplified regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="98"/> - <location filename="../../Filters.cpp" line="136"/> - <source>Perl's regex</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="106"/> - <location filename="../../Filters.cpp" line="144"/> - <source>Only on file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="109"/> - <location filename="../../Filters.cpp" line="147"/> - <source>Only on folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../Filters.cpp" line="115"/> - <location filename="../../Filters.cpp" line="153"/> - <location filename="../../Filters.cpp" line="215"/> - <location filename="../../Filters.cpp" line="254"/> - <source>Full match</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>ListThread</name> - <message> - <location filename="../../ListThread.cpp" line="1162"/> - <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="1169"/> - <source>Unable to save the transfer list: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1185"/> - <source>Problem at the reading, or file size is null</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1192"/> - <source>Wrong header: "%1"</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1201"/> - <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="1210"/> - <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="1216"/> - <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="1263"/> - <source>Some error have been found during the line parsing</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ListThread.cpp" line="1269"/> - <source>Unable to open the transfer list: %1</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>MkPath</name> - <message> - <location filename="../../MkPath.cpp" line="62"/> - <source>Unable to create the folder</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>ReadThread</name> - <message> - <location filename="../../ReadThread.cpp" line="154"/> - <location filename="../../ReadThread.cpp" line="316"/> - <source>Unable to read the source file: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../ReadThread.cpp" line="193"/> - <location filename="../../ReadThread.cpp" line="373"/> - <source>File truncated during the read, possible data change</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>RenamingRules</name> - <message> - <location filename="../../RenamingRules.ui" line="14"/> - <source>Renaming rules</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="26"/> - <source>First renaming</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="32"/> - <source>%name% - copy</source> - <extracomment>%name% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="39"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> - <extracomment> should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="49"/> - <source>Second renaming</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="55"/> - <source>%name% - copy (%number%)</source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.ui" line="62"/> - <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> - <extracomment>%name%, %number% should not be translated</extracomment> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="39"/> - <location filename="../../RenamingRules.cpp" line="62"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../RenamingRules.cpp" line="43"/> - <location filename="../../RenamingRules.cpp" line="73"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>RmPath</name> - <message> - <location filename="../../RmPath.cpp" line="59"/> - <source>Unable to remove the folder</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>TransferThread</name> - <message> - <location filename="../../TransferThread.cpp" line="311"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="321"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../TransferThread.cpp" line="626"/> - <source>The checksums not match</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>WriteThread</name> - <message> - <location filename="../../WriteThread.cpp" line="443"/> - <source>Unable to read the source file: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../WriteThread.cpp" line="481"/> - <source>File truncated during the read, possible data change</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>copyEngine</name> - <message> - <location filename="../../copyEngine.cpp" line="257"/> - <location filename="../../copyEngine.cpp" line="275"/> - <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="286"/> - <location filename="../../copyEngine.cpp" line="304"/> - <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="511"/> - <source>The mode have been forced previously, it's internal error, please report it</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../copyEngine.cpp" line="772"/> - <source>Options engine is not loaded, can't access to the filters</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileErrorDialog</name> - <message> - <location filename="../../fileErrorDialog.ui" line="14"/> - <source>Error on file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="20"/> - <source>Error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="56"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="73"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="90"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="136"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="156"/> - <source>Put to bottom</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="163"/> - <source>Retry</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="170"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.ui" line="177"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="29"/> - <source>Error on folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileErrorDialog.cpp" line="32"/> - <source>Folder name</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileExistsDialog</name> - <message> - <location filename="../../fileExistsDialog.ui" line="14"/> - <source>The file exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="34"/> - <source>Source</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="82"/> - <location filename="../../fileExistsDialog.ui" line="153"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="99"/> - <location filename="../../fileExistsDialog.ui" line="170"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="116"/> - <location filename="../../fileExistsDialog.ui" line="187"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="243"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="254"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="274"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="281"/> - <source>&Overwrite</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="291"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="298"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="307"/> - <source>Overwrite if newer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.ui" line="312"/> - <source>Overwrite if not same modification date</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="102"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileExistsDialog.cpp" line="112"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>fileIsSameDialog</name> - <message> - <location filename="../../fileIsSameDialog.ui" line="14"/> - <source>This files are the same file</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="20"/> - <source>The source and destination is same</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="47"/> - <source>Size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="64"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="81"/> - <source>File name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="137"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="148"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="168"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="175"/> - <source>&Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.ui" line="182"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="87"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../fileIsSameDialog.cpp" line="97"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>folderExistsDialog</name> - <message> - <location filename="../../folderExistsDialog.ui" line="14"/> - <source>This folders are the same folder</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="34"/> - <source>Source</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="50"/> - <source>Destination</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="62"/> - <source>The source and destination is same</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="89"/> - <location filename="../../folderExistsDialog.ui" line="140"/> - <source>Modified</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="106"/> - <location filename="../../folderExistsDialog.ui" line="150"/> - <source>Folder name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="200"/> - <source>Suggest new &name</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="211"/> - <source>&Always do this action</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="218"/> - <source>&Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="225"/> - <source>Merge</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="232"/> - <source>Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.ui" line="239"/> - <source>&Cancel</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="29"/> - <source>Folder already exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="85"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../folderExistsDialog.cpp" line="95"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>options</name> - <message> - <location filename="../../options.ui" line="23"/> - <source>Transfer the file rights</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="33"/> - <source>Keep the file date</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="128"/> - <source>Checksum</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="144"/> - <source>Only after error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="154"/> - <source>Ignore if impossible</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="171"/> - <source>Do checksum</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="181"/> - <source>Enable OS buffer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="191"/> - <source>OS buffer only if smaller than</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="214"/> - <source>Block size</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="234"/> - <source>Filters</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="241"/> - <source>Renaming rules</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="43"/> - <location filename="../../options.ui" line="198"/> - <source>KB</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="56"/> - <source>Auto start the transfer</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="66"/> - <source>When folder error</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="74"/> - <location filename="../../options.ui" line="95"/> - <source>Ask</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="79"/> - <location filename="../../options.ui" line="105"/> - <source>Skip</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="100"/> - <source>Merge</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="110"/> - <source>Rename</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="118"/> - <source>Check if destination folder exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../options.ui" line="87"/> - <source>When folder collision</source> - <translation type="unfinished"></translation> - </message> -</context> -<context> - <name>scanFileOrFolder</name> - <message> - <location filename="../../scanFileOrFolder.cpp" line="218"/> - <location filename="../../scanFileOrFolder.cpp" line="282"/> - <source>%1 - copy</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="228"/> - <location filename="../../scanFileOrFolder.cpp" line="292"/> - <source>%1 - copy (%2)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="326"/> - <source>The folder not exists</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../scanFileOrFolder.cpp" line="328"/> - <source>The folder is not readable</source> - <translation type="unfinished"></translation> - </message> -</context> -</TS> diff --git a/plugins/CopyEngine/Ultracopier-0.3/ListThread.cpp b/plugins/CopyEngine/Ultracopier-0.3/ListThread.cpp deleted file mode 100755 index 9856c3c..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/ListThread.cpp +++ /dev/null @@ -1,1689 +0,0 @@ -#include "ListThread.h" - -ListThread::ListThread(FacilityInterface * facilityInterface) -{ - qRegisterMetaType<DebugLevel>("DebugLevel"); - qRegisterMetaType<ItemOfCopyList>("ItemOfCopyList"); - qRegisterMetaType<QFileInfo>("QFileInfo"); - qRegisterMetaType<CopyMode>("CopyMode"); - qRegisterMetaType<QList<Filters_rules> >("QList<Filters_rules>"); - qRegisterMetaType<TransferStat>("TransferStat"); - - moveToThread(this); - start(HighPriority); - this->facilityInterface = facilityInterface; - putInPause = false; - sourceDrive = ""; - sourceDriveMultiple = false; - destinationDrive = ""; - destinationDriveMultiple = false; - stopIt = false; - bytesToTransfer = 0; - bytesTransfered = 0; - idIncrementNumber = 1; - actualRealByteTransfered = 0; - preOperationNumber = 0; - numberOfTranferRuning = 0; - numberOfTransferIntoToDoList = 0; - numberOfInodeOperation = 0; - maxSpeed = 0; - doRightTransfer = false; - keepDate = false; - blockSize = 1024; - osBufferLimit = 512; - alwaysDoThisActionForFileExists = FileExists_NotSet; - doChecksum = false; - checksumIgnoreIfImpossible = true; - checksumOnlyOnError = true; - osBuffer = false; - osBufferLimited = false; - forcedMode = false; - - #if ! defined (Q_CC_GNU) - ui->keepDate->setEnabled(false); - ui->keepDate->setToolTip("Not supported with this compiler"); - #endif - #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW - connect(&timerUpdateDebugDialog,SIGNAL(timeout()),this,SLOT(timedUpdateDebugDialog())); - timerUpdateDebugDialog.start(ULTRACOPIER_PLUGIN_DEBUG_WINDOW_TIMER); - #endif - connect(this, SIGNAL(tryCancel()), this,SLOT(cancel()), Qt::QueuedConnection); - connect(this, SIGNAL(askNewTransferThread()), this,SLOT(createTransferThread()), Qt::QueuedConnection); - connect(&mkPathQueue, SIGNAL(firstFolderFinish()), this,SLOT(mkPathFirstFolderFinish()), Qt::QueuedConnection); - connect(&rmPathQueue, SIGNAL(firstFolderFinish()), this,SLOT(rmPathFirstFolderFinish()), Qt::QueuedConnection); - connect(&mkPathQueue, SIGNAL(errorOnFolder(QFileInfo,QString)), this,SIGNAL(mkPathErrorOnFolder(QFileInfo,QString)), Qt::QueuedConnection); - connect(&rmPathQueue, SIGNAL(errorOnFolder(QFileInfo,QString)), this,SIGNAL(rmPathErrorOnFolder(QFileInfo,QString)), Qt::QueuedConnection); - connect(this, SIGNAL(send_syncTransferList()), this,SLOT(syncTransferList_internal()), Qt::QueuedConnection); - #ifdef ULTRACOPIER_PLUGIN_DEBUG - connect(&mkPathQueue, SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), Qt::QueuedConnection); - connect(&rmPathQueue, SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), Qt::QueuedConnection); - #endif // ULTRACOPIER_PLUGIN_DEBUG - - emit askNewTransferThread(); - mkpathTransfer.release(); -} - -ListThread::~ListThread() -{ - emit tryCancel(); - waitCancel.acquire(); - quit(); - wait(); -} - -//transfer is finished -void ListThread::transferInodeIsClosed() -{ - numberOfInodeOperation--; - temp_transfer_thread=qobject_cast<TransferThread *>(QObject::sender()); - if(temp_transfer_thread==NULL) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("transfer thread not located!")); - return; - } - isFound=false; - #ifdef ULTRACOPIER_PLUGIN_DEBUG - int countLocalParse=0; - #endif - if(temp_transfer_thread->getStat()!=TransferStat_Idle) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("transfer thread not idle!")); - return; - } - int_for_internal_loop=0; - loop_size=actionToDoListTransfer.size(); - while(int_for_internal_loop<loop_size) - { - if(actionToDoListTransfer.at(int_for_internal_loop).id==temp_transfer_thread->transferId) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("[%1] have finish, put at idle; for id: %2").arg(int_for_internal_loop).arg(temp_transfer_thread->transferId)); - returnActionOnCopyList newAction; - newAction.type=RemoveItem; - newAction.addAction.id=temp_transfer_thread->transferId; - newAction.userAction.position=int_for_internal_loop; - actionDone << newAction; - /// \todo check if item is at the right thread - actionToDoListTransfer.removeAt(int_for_internal_loop); - if(actionToDoListTransfer.size()==0 && actionToDoListInode.size()==0 && actionToDoListInode_afterTheTransfer.size()==0) - updateTheStatus(); - - temp_transfer_thread->transferId=0; - temp_transfer_thread->transferSize=0; - #ifdef ULTRACOPIER_PLUGIN_DEBUG - countLocalParse++; - #endif - isFound=true; - //emit newActionOnList(); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"numberOfTranferRuning: "+QString::number(numberOfTranferRuning)); - if(actionToDoListTransfer.size()==0) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"numberOfTranferRuning==0"); - actionToDoListInode << actionToDoListInode_afterTheTransfer; - actionToDoListInode_afterTheTransfer.clear(); - doNewActions_inode_manipulation(); - } - break; - } - int_for_internal_loop++; - } - if(!isFound) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("unable to found item into the todo list, id: %1, index: %2").arg(temp_transfer_thread->transferId).arg(int_for_loop)); - temp_transfer_thread->transferId=0; - temp_transfer_thread->transferSize=0; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("countLocalParse: %1, actionToDoList.size(): %2").arg(countLocalParse).arg(actionToDoListTransfer.size())); - #ifdef ULTRACOPIER_PLUGIN_DEBUG - if(countLocalParse!=1) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("countLocalParse != 1")); - #endif - doNewActions_inode_manipulation(); -} - -//transfer is finished -void ListThread::transferIsFinished() -{ - temp_transfer_thread=qobject_cast<TransferThread *>(QObject::sender()); - if(temp_transfer_thread==NULL) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("transfer thread not located!")); - return; - } - - //add the current size of file, to general size because it's finish - copiedSize=temp_transfer_thread->copiedSize(); - if(copiedSize>(qint64)temp_transfer_thread->transferSize) - { - oversize=copiedSize-temp_transfer_thread->transferSize; - bytesToTransfer+=oversize; - bytesTransfered+=oversize; - } - bytesTransfered+=temp_transfer_thread->transferSize; - -// emit newTransferStop(temp_transfer_thread->transferId); - numberOfTranferRuning--; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start transferIsFinished(), numberOfTranferRuning: "+QString::number(numberOfTranferRuning)); - doNewActions_start_transfer(); -} - -/** \brief put the current file at bottom in case of error -\note ONLY IN CASE OF ERROR */ -void ListThread::transferPutAtBottom() -{ - TransferThread *transfer=qobject_cast<TransferThread *>(QObject::sender()); - if(transfer==NULL) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("transfer thread not located!")); - return; - } - transfer->skip(); - bool isFound=false; - #ifdef ULTRACOPIER_PLUGIN_DEBUG - int countLocalParse=0; - #endif - int indexAction=0; - while(indexAction<actionToDoListTransfer.size()) - { - if(actionToDoListTransfer.at(indexAction).id==transfer->transferId) - { - //push for interface at the end - returnActionOnCopyList newAction; - newAction.type=MoveItem; - newAction.addAction.id=transfer->transferId; - newAction.userAction.position=actionToDoListTransfer.size()-1; - actionDone << newAction; - //do the wait stat - actionToDoListTransfer[indexAction].isRunning=false; - //move at the end - actionToDoListTransfer.move(indexAction,actionToDoListTransfer.size()-1); - //reset the thread list stat - transfer->transferId=0; - transfer->transferSize=0; - #ifdef ULTRACOPIER_PLUGIN_DEBUG - countLocalParse++; - #endif - isFound=true; - break; - } - indexAction++; - } - if(!isFound) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("unable to found item into the todo list, id: %1, index: %2").arg(transfer->transferId)); - transfer->transferId=0; - transfer->transferSize=0; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("countLocalParse: %1").arg(countLocalParse)); - #ifdef ULTRACOPIER_PLUGIN_DEBUG - if(countLocalParse!=1) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("countLocalParse != 1")); - #endif -} - -//set the copy info and options before runing -void ListThread::setRightTransfer(const bool doRightTransfer) -{ - this->doRightTransfer=doRightTransfer; - int index=0; - loop_sub_size_transfer_thread_search=transferThreadList.size(); - while(index<loop_sub_size_transfer_thread_search) - { - transferThreadList.at(index)->setRightTransfer(doRightTransfer); - index++; - } -} - -//set keep date -void ListThread::setKeepDate(const bool keepDate) -{ - this->keepDate=keepDate; - int index=0; - loop_sub_size_transfer_thread_search=transferThreadList.size(); - while(index<loop_sub_size_transfer_thread_search) - { - transferThreadList.at(index)->setKeepDate(keepDate); - index++; - } -} - -//set block size in KB -void ListThread::setBlockSize(const int blockSize) -{ - this->blockSize=blockSize; - int index=0; - loop_sub_size_transfer_thread_search=transferThreadList.size(); - while(index<loop_sub_size_transfer_thread_search) - { - transferThreadList.at(index)->setBlockSize(blockSize); - index++; - } -} - -//set auto start -void ListThread::setAutoStart(const bool autoStart) -{ - this->autoStart=autoStart; -} - -//set check destination folder -void ListThread::setCheckDestinationFolderExists(const bool checkDestinationFolderExists) -{ - this->checkDestinationFolderExists=checkDestinationFolderExists; - for(int i=0;i<scanFileOrFolderThreadsPool.size();i++) - scanFileOrFolderThreadsPool.at(i)->setCheckDestinationFolderExists(checkDestinationFolderExists && alwaysDoThisActionForFolderExists!=FolderExists_Merge); -} - -void ListThread::fileTransfer(const QFileInfo &sourceFileInfo,const QFileInfo &destinationFileInfo,const CopyMode &mode) -{ - addToTransfer(sourceFileInfo,destinationFileInfo,mode); -} - -// -> add thread safe, by Qt::BlockingQueuedConnection -bool ListThread::haveSameSource(QStringList sources) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - if(sourceDriveMultiple) - return false; - if(sourceDrive.isEmpty()) - return true; - int index=0; - while(index<sources.size()) - { -// if(threadOfTheTransfer.getDrive(sources.at(index))!=sourceDrive) -// return false; - index++; - } - return true; -} - -// -> add thread safe, by Qt::BlockingQueuedConnection -bool ListThread::haveSameDestination(QString destination) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - if(destinationDriveMultiple) - return false; - if(destinationDrive.isEmpty()) - return true; - int index=0; - while(index<destination.size()) - { -// if(threadOfTheTransfer.getDrive(destination.at(index))!=destinationDrive) -// return false; - index++; - } - return true; -} - -scanFileOrFolder * ListThread::newScanThread(CopyMode mode) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start with: "+QString::number(mode)); - - //create new thread because is auto-detroyed - scanFileOrFolderThreadsPool << new scanFileOrFolder(mode); - connect(scanFileOrFolderThreadsPool.last(),SIGNAL(finishedTheListing()), this,SLOT(scanThreadHaveFinish()), Qt::QueuedConnection); - connect(scanFileOrFolderThreadsPool.last(),SIGNAL(fileTransfer(QFileInfo,QFileInfo,CopyMode)), this,SLOT(fileTransfer(QFileInfo,QFileInfo,CopyMode)), Qt::QueuedConnection); - #ifdef ULTRACOPIER_PLUGIN_DEBUG - connect(scanFileOrFolderThreadsPool.last(),SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int))); - #endif - connect(scanFileOrFolderThreadsPool.last(),SIGNAL(newFolderListing(QString)), this,SIGNAL(newFolderListing(QString))); - connect(scanFileOrFolderThreadsPool.last(),SIGNAL(addToRmPath(QString,int)), this,SLOT(addToRmPath(QString,int)), Qt::QueuedConnection); - connect(scanFileOrFolderThreadsPool.last(),SIGNAL(addToMkPath(QString)), this,SLOT(addToMkPath(QString)), Qt::QueuedConnection); - - connect(scanFileOrFolderThreadsPool.last(),SIGNAL(errorOnFolder(QFileInfo,QString)), this,SLOT(errorOnFolder(QFileInfo,QString)), Qt::QueuedConnection); - connect(scanFileOrFolderThreadsPool.last(),SIGNAL(folderAlreadyExists(QFileInfo,QFileInfo,bool)), this,SLOT(folderAlreadyExists(QFileInfo,QFileInfo,bool)), Qt::QueuedConnection); - - scanFileOrFolderThreadsPool.last()->setFilters(include,exclude); - scanFileOrFolderThreadsPool.last()->setCheckDestinationFolderExists(checkDestinationFolderExists && alwaysDoThisActionForFolderExists!=FolderExists_Merge); - if(scanFileOrFolderThreadsPool.size()==1) - updateTheStatus(); - scanFileOrFolderThreadsPool.last()->setRenamingRules(firstRenamingRule,otherRenamingRule); - return scanFileOrFolderThreadsPool.last(); -} - -void ListThread::scanThreadHaveFinish(bool skipFirstRemove) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"listing thread have finish, skipFirstRemove: "+QString::number(skipFirstRemove)); - if(!skipFirstRemove) - { - scanFileOrFolder * senderThread = qobject_cast<scanFileOrFolder *>(QObject::sender()); - if(senderThread==NULL) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"sender pointer null (plugin copy engine)"); - else - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start the next thread, scanFileOrFolderThreadsPool.size(): "+QString::number(scanFileOrFolderThreadsPool.size())); - delete senderThread; - scanFileOrFolderThreadsPool.removeOne(senderThread); - if(scanFileOrFolderThreadsPool.size()==0) - updateTheStatus(); - } - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start the next thread, scanFileOrFolderThreadsPool.size(): "+QString::number(scanFileOrFolderThreadsPool.size())); - if(scanFileOrFolderThreadsPool.size()>0) - { - //then start the next listing threads - if(scanFileOrFolderThreadsPool.first()->isFinished()) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"Start listing thread"); - scanFileOrFolderThreadsPool.first()->start(); - } - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"The listing thread is already running"); - } - else - { - if(autoStart) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"Auto start the copy"); - startGeneralTransfer(); - } - else - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"Put the copy engine in pause"); - putInPause=true; - emit isInPause(true); - } - } -} - -void ListThread::startGeneralTransfer() -{ - doNewActions_inode_manipulation(); -} - -// -> add thread safe, by Qt::BlockingQueuedConnection -bool ListThread::newCopy(QStringList sources,QString destination) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+sources.join(";")+", destination: "+destination); - scanFileOrFolder * scanFileOrFolderThread = newScanThread(Copy); - if(scanFileOrFolderThread==NULL) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to get new thread"); - return false; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start the listing"); - scanFileOrFolderThread->addToList(sources,destination); - scanThreadHaveFinish(true); - return true; -} - -// -> add thread safe, by Qt::BlockingQueuedConnection -bool ListThread::newMove(QStringList sources,QString destination) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - scanFileOrFolder * scanFileOrFolderThread = newScanThread(Move); - if(scanFileOrFolderThread==NULL) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to get new thread"); - return false; - } - scanFileOrFolderThread->addToList(sources,destination); - scanThreadHaveFinish(true); -/* int index=0; - while(index<sources.size() && !sourceDriveMultiple) - { - QString tempDrive=threadOfTheTransfer.getDrive(sources.at(index)); - if(sourceDrive=="") - sourceDrive=tempDrive; - if(tempDrive!=sourceDrive) - sourceDriveMultiple=true; - index++; - }*/ -/* QString tempDrive=threadOfTheTransfer.getDrive(destination); - if(!destinationDriveMultiple) - { - if(tempDrive=="") - destinationDrive=tempDrive; - if(tempDrive!=destinationDrive) - destinationDriveMultiple=true; - }*/ - return true; -} - -void ListThread::setDrive(QStringList drives) -{ - this->drives=drives; - int index=0; - loop_sub_size_transfer_thread_search=transferThreadList.size(); - while(index<loop_sub_size_transfer_thread_search) - { - transferThreadList.at(index)->setDrive(drives); - index++; - } -} - -void ListThread::setCollisionAction(FileExistsAction alwaysDoThisActionForFileExists) -{ - this->alwaysDoThisActionForFileExists=alwaysDoThisActionForFileExists; - int index=0; - loop_sub_size_transfer_thread_search=transferThreadList.size(); - while(index<loop_sub_size_transfer_thread_search) - { - transferThreadList.at(index)->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists); - index++; - } -} - -/** \brief to sync the transfer list - * Used when the interface is changed, useful to minimize the memory size */ -void ListThread::syncTransferList() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - emit send_syncTransferList(); -} - -//set the folder local colision -void ListThread::setFolderColision(FolderExistsAction alwaysDoThisActionForFolderExists) -{ - this->alwaysDoThisActionForFolderExists=alwaysDoThisActionForFolderExists; -} - -bool ListThread::getReturnBoolToCopyEngine() -{ - return returnBoolToCopyEngine; -} - -QPair<quint64,quint64> ListThread::getReturnPairQuint64ToCopyEngine() -{ - return returnPairQuint64ToCopyEngine; -} - -ItemOfCopyList ListThread::getReturnItemOfCopyListToCopyEngine() -{ - return returnItemOfCopyListToCopyEngine; -} - -void ListThread::set_doChecksum(bool doChecksum) -{ - this->doChecksum=doChecksum; - int index=0; - loop_sub_size_transfer_thread_search=transferThreadList.size(); - while(index<loop_sub_size_transfer_thread_search) - { - transferThreadList.at(index)->set_doChecksum(doChecksum); - index++; - } -} - -void ListThread::set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible) -{ - this->checksumIgnoreIfImpossible=checksumIgnoreIfImpossible; - int index=0; - loop_sub_size_transfer_thread_search=transferThreadList.size(); - while(index<loop_sub_size_transfer_thread_search) - { - transferThreadList.at(index)->set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible); - index++; - } -} - -void ListThread::set_checksumOnlyOnError(bool checksumOnlyOnError) -{ - this->checksumOnlyOnError=checksumOnlyOnError; - int index=0; - loop_sub_size_transfer_thread_search=transferThreadList.size(); - while(index<loop_sub_size_transfer_thread_search) - { - transferThreadList.at(index)->set_checksumOnlyOnError(checksumOnlyOnError); - index++; - } -} - -void ListThread::set_osBuffer(bool osBuffer) -{ - this->osBuffer=osBuffer; - int index=0; - loop_sub_size_transfer_thread_search=transferThreadList.size(); - while(index<loop_sub_size_transfer_thread_search) - { - transferThreadList.at(index)->set_osBuffer(osBuffer); - index++; - } -} - -void ListThread::set_osBufferLimited(bool osBufferLimited) -{ - this->osBufferLimited=osBufferLimited; - int index=0; - loop_sub_size_transfer_thread_search=transferThreadList.size(); - while(index<loop_sub_size_transfer_thread_search) - { - transferThreadList.at(index)->set_osBufferLimited(osBufferLimited); - index++; - } -} - -void ListThread::realByteTransfered() -{ - quint64 totalRealByteTransfered=0; - int index=0; - loop_sub_size_transfer_thread_search=transferThreadList.size(); - while(index<loop_sub_size_transfer_thread_search) - { - totalRealByteTransfered+=transferThreadList.at(index)->realByteTransfered(); - index++; - } - emit send_realBytesTransfered(totalRealByteTransfered); -} - -void ListThread::pause() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - if(putInPause) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Seam already in pause!"); - return; - } - putInPause=true; - int index=0; - loop_sub_size_transfer_thread_search=transferThreadList.size(); - while(index<loop_sub_size_transfer_thread_search) - { - transferThreadList.at(index)->pause(); - index++; - } - emit isInPause(true); -} - -void ListThread::resume() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - if(!putInPause) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Seam already resumed!"); - return; - } - putInPause=false; - startGeneralTransfer(); - doNewActions_start_transfer(); - int index=0; - loop_sub_size_transfer_thread_search=transferThreadList.size(); - while(index<loop_sub_size_transfer_thread_search) - { - transferThreadList.at(index)->resume(); - index++; - } - emit isInPause(false); -} - -void ListThread::skip(const quint64 &id) -{ - skipInternal(id); -// emit newActionOnList(); -} - -bool ListThread::skipInternal(const quint64 &id) -{ - int index=0; - loop_sub_size_transfer_thread_search=transferThreadList.size(); - while(index<loop_sub_size_transfer_thread_search) - { - if(transferThreadList.at(index)->transferId==id) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("skip one transfer: %1").arg(id)); - transferThreadList.at(index)->skip(); - return true; - } - index++; - } - int_for_internal_loop=0; - loop_size=actionToDoListTransfer.size(); - while(int_for_internal_loop<loop_size) - { - if(actionToDoListTransfer.at(int_for_internal_loop).id==id) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("[%1] remove at not running, for id: %2").arg(int_for_internal_loop).arg(id)); - returnActionOnCopyList newAction; - newAction.type=RemoveItem; - newAction.addAction.id=id; - newAction.userAction.position=int_for_internal_loop; - actionDone << newAction; - actionToDoListTransfer.removeAt(int_for_internal_loop); - if(actionToDoListTransfer.size()==0 && actionToDoListInode.size()==0 && actionToDoListInode_afterTheTransfer.size()==0) - updateTheStatus(); - return true; - } - int_for_internal_loop++; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("skip transfer not found: %1").arg(id)); - return false; -} - -void ListThread::cancel() -{ - if(stopIt) - { - waitCancel.release(); - return; - } - stopIt=true; - int index=0; - loop_size=transferThreadList.size(); - while(index<loop_size) - { - transferThreadList.at(index)->stop(); - delete transferThreadList.at(index);//->deleteLayer(); - transferThreadList[index]=NULL; - index++; - } - index=0; - loop_size=scanFileOrFolderThreadsPool.size(); - while(index<loop_size) - { - scanFileOrFolderThreadsPool.at(index)->stop(); - delete scanFileOrFolderThreadsPool.at(index);//->deleteLayer(); - scanFileOrFolderThreadsPool[index]=NULL; - index++; - } - quit(); - waitCancel.release(); - emit canBeDeleted(); -} - -//speed limitation -qint64 ListThread::getSpeedLimitation() -{ - return maxSpeed; -} - -bool ListThread::setSpeedLimitation(const qint64 &speedLimitation) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"maxSpeed: "+QString::number(speedLimitation)); - maxSpeed=speedLimitation; - int_for_loop=0; - loop_size=transferThreadList.size(); - while(int_for_loop<loop_size) - { - transferThreadList.at(int_for_loop)->setMaxSpeed(speedLimitation/ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER); - int_for_loop++; - } - return true; -} - -void ListThread::updateTheStatus() -{ - /*if(threadOfTheTransfer.haveContent()) - copy=true;*/ - updateTheStatus_listing=scanFileOrFolderThreadsPool.size()>0; - updateTheStatus_copying=actionToDoListTransfer.size()>0 || actionToDoListInode.size()>0 || actionToDoListInode_afterTheTransfer.size()>0; - if(updateTheStatus_copying && updateTheStatus_listing) - updateTheStatus_action_in_progress=CopyingAndListing; - else if(updateTheStatus_listing) - updateTheStatus_action_in_progress=Listing; - else if(updateTheStatus_copying) - updateTheStatus_action_in_progress=Copying; - else - updateTheStatus_action_in_progress=Idle; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"emit actionInProgess("+QString::number(updateTheStatus_action_in_progress)+")"); - emit actionInProgess(updateTheStatus_action_in_progress); - if(updateTheStatus_action_in_progress==Idle) - sendActionDone(); -} - -//set data local to the thread -void ListThread::setAlwaysFileExistsAction(FileExistsAction alwaysDoThisActionForFileExists) -{ - this->alwaysDoThisActionForFileExists=alwaysDoThisActionForFileExists; - int_for_loop=0; - loop_size=transferThreadList.size(); - while(int_for_loop<loop_size) - { - transferThreadList.at(int_for_loop)->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists); - int_for_loop++; - } -} - -//mk path to do -quint64 ListThread::addToMkPath(const QString& folder) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"folder: "+folder); - actionToDoInode temp; - temp.type = ActionType_MkPath; - temp.id = generateIdNumber(); - temp.folder.setFile(folder); - temp.isRunning = false; - actionToDoListInode << temp; - return temp.id; -} - -//add rm path to do -void ListThread::addToRmPath(const QString& folder,const int& inodeToRemove) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"folder: "+folder+",inodeToRemove: "+QString::number(inodeToRemove)); - actionToDoInode temp; - temp.type = ActionType_RmPath; - temp.id = generateIdNumber(); - temp.size = inodeToRemove; - temp.folder.setFile(folder); - temp.isRunning = false; - if(inodeToRemove==0) - actionToDoListInode << temp; - else - actionToDoListInode_afterTheTransfer << temp; -} - -//send action done -void ListThread::sendActionDone() -{ - if(actionDone.size()>0) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - emit newActionOnList(actionDone); - actionDone.clear(); - } -} - -//send progression -void ListThread::sendProgression() -{ - if(actionToDoListTransfer.size()==0) - return; - oversize=0; - currentProgression=0; - int_for_loop=0; - loop_size=transferThreadList.size(); - while(int_for_loop<loop_size) - { - temp_transfer_thread=transferThreadList.at(int_for_loop); - if(temp_transfer_thread->getStat()==TransferStat_Transfer || temp_transfer_thread->getStat()==TransferStat_Checksum) - { - copiedSize=temp_transfer_thread->copiedSize(); - - //for the general progression - currentProgression+=copiedSize; - - //the oversize (when the file is bigger after/during the copy then what was during the listing) - if(copiedSize>(qint64)temp_transfer_thread->transferSize) - localOverSize=copiedSize-temp_transfer_thread->transferSize; - else - localOverSize=0; - - //the current size copied - totalSize=temp_transfer_thread->transferSize+localOverSize; - if(temp_transfer_thread->getStat()==TransferStat_Checksum) - tempItem.current=temp_transfer_thread->realByteTransfered(); - else - tempItem.current=copiedSize; - tempItem.id=temp_transfer_thread->transferId; - tempItem.total=totalSize; - progressionList << tempItem; - - //add the oversize to the general progression - oversize+=localOverSize; - } - int_for_loop++; - } - emit pushFileProgression(progressionList); - progressionList.clear(); - emit pushGeneralProgression(bytesTransfered+currentProgression,bytesToTransfer+oversize); - realByteTransfered(); -} - -//send the progression, after full reset of the interface (then all is empty) -void ListThread::syncTransferList_internal() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - emit syncReady(); - actionDone.clear(); - //do list operation - TransferThread *transferThread; - loop_size=actionToDoListTransfer.size(); - loop_sub_size=transferThreadList.size(); - //this loop to have at max ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT*ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT, not ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT*transferThreadList.size() - for(int_for_loop=0; int_for_loop<loop_size; ++int_for_loop) { - const actionToDoTransfer &item=actionToDoListTransfer.at(int_for_loop); - returnActionOnCopyList newAction; - newAction.type = PreOperation; - newAction.addAction.id = item.id; - newAction.addAction.sourceFullPath = item.source.absoluteFilePath(); - newAction.addAction.sourceFileName = item.source.fileName(); - newAction.addAction.destinationFullPath = item.destination.absoluteFilePath(); - newAction.addAction.destinationFileName = item.destination.fileName(); - newAction.addAction.size = item.size; - newAction.addAction.mode = item.mode; - actionDone << newAction; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("id: %1, size: %2, name: %3, size2: %4").arg(item.id).arg(item.size).arg(item.source.absoluteFilePath()).arg(newAction.addAction.size)); - if(item.isRunning) - { - for(int_for_internal_loop=0; int_for_internal_loop<loop_sub_size; ++int_for_internal_loop) { - transferThread=transferThreadList.at(int_for_internal_loop); - returnActionOnCopyList newAction; - newAction.type = PreOperation; - newAction.addAction.id = item.id; - newAction.addAction.sourceFullPath = item.source.absoluteFilePath(); - newAction.addAction.sourceFileName = item.source.fileName(); - newAction.addAction.destinationFullPath = item.destination.absoluteFilePath(); - newAction.addAction.destinationFileName = item.destination.fileName(); - newAction.addAction.size = item.size; - newAction.addAction.mode = item.mode; - actionDone << newAction; - if(transferThread->getStat()!=TransferStat_PreOperation) - { - returnActionOnCopyList newAction; - switch(transferThread->getStat()) - { - case TransferStat_Transfer: - newAction.type=Transfer; - break; - case TransferStat_PostTransfer: - newAction.type=PostOperation; - break; - default: - break; - } - newAction.addAction.id = item.id; - actionDone << newAction; - } - } - } - } -} - -//add file transfer to do -quint64 ListThread::addToTransfer(const QFileInfo& source,const QFileInfo& destination,const CopyMode& mode) -{ - //add to transfer list - numberOfTransferIntoToDoList++; - bytesToTransfer+= source.size(); - actionToDoTransfer temp; - temp.id = generateIdNumber(); - temp.size = source.size(); - temp.source = source; - temp.destination= destination; - temp.mode = mode; - temp.isRunning = false; - actionToDoListTransfer << temp; - //push the new transfer to interface - returnActionOnCopyList newAction; - newAction.type = AddingItem; - newAction.addAction.id = temp.id; - newAction.addAction.sourceFullPath = source.absoluteFilePath(); - newAction.addAction.sourceFileName = source.fileName(); - newAction.addAction.destinationFullPath = destination.absoluteFilePath(); - newAction.addAction.destinationFileName = destination.fileName(); - newAction.addAction.size = temp.size; - newAction.addAction.mode = mode; - actionDone << newAction; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("source: %1, destination: %2, add entry: %3, size: %4, size2: %5").arg(source.absoluteFilePath()).arg(destination.absoluteFilePath()).arg(temp.id).arg(temp.size).arg(newAction.addAction.size)); - return temp.id; -} - -//generate id number -quint64 ListThread::generateIdNumber() -{ - idIncrementNumber++; - if(idIncrementNumber>(((quint64)1024*1024)*1024*1024*2)) - idIncrementNumber=0; - return idIncrementNumber; -} - -//warning the first entry is accessible will copy -void ListThread::removeItems(const QList<int> &ids) -{ - for(int i=0;i<ids.size();i++) - skipInternal(ids.at(i)); -// emit newActionOnList(); -} - -//put on top -void ListThread::moveItemsOnTop(QList<int> ids) -{ - if(actionToDoListTransfer.size()<=1) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"list size is empty"); - return; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - //do list operation - int indexToMove=0; - loop_size=actionToDoListTransfer.size(); - for (int i=0; i<loop_size; ++i) { - if(ids.contains(actionToDoListTransfer.at(i).id)) - { - ids.removeOne(actionToDoListTransfer.at(i).id); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("move item ")+QString::number(i)+" to "+QString::number(indexToMove)); - returnActionOnCopyList newAction; - newAction.type=MoveItem; - newAction.addAction.id=actionToDoListTransfer.at(i).id; - newAction.userAction.moveAt=indexToMove; - newAction.userAction.position=i; - actionDone << newAction; - actionToDoListTransfer.move(i,indexToMove); - indexToMove++; - if(ids.size()==0) - { - //emit newActionOnList(); - return; - } - } - } -// emit newActionOnList(); -} - -//move up -void ListThread::moveItemsUp(QList<int> ids) -{ - if(actionToDoListTransfer.size()<=1) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"list size is empty"); - return; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - //do list operation - int lastGoodPositionExtern=0; - int lastGoodPositionReal=0; - bool haveGoodPosition=false; - bool haveChanged=false; - loop_size=actionToDoListTransfer.size(); - for (int i=0; i<loop_size; ++i) { - if(ids.contains(actionToDoListTransfer.at(i).id)) - { - if(haveGoodPosition) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("move item ")+QString::number(i)+" to "+QString::number(i-1)); - returnActionOnCopyList newAction; - newAction.type=MoveItem; - newAction.addAction.id=actionToDoListTransfer.at(i).id; - newAction.userAction.moveAt=lastGoodPositionExtern; - newAction.userAction.position=i; - actionDone << newAction; - actionToDoListTransfer.swap(i,lastGoodPositionReal); - haveChanged=true; - } - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Try move up false, item ")+QString::number(i)); - ids.removeOne(actionToDoListTransfer.at(i).id); - if(ids.size()==0) - { -/* if(haveChanged) - emit newActionOnList();*/ - return; - } - } - else - { - lastGoodPositionExtern++; - lastGoodPositionReal=i; - haveGoodPosition=true; - } - } - //emit newActionOnList(); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop"); -} - -//move down -void ListThread::moveItemsDown(QList<int> ids) -{ - if(actionToDoListTransfer.size()<=1) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"list size is empty"); - return; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - //do list operation - int lastGoodPositionExtern=numberOfTransferIntoToDoList; - int lastGoodPositionReal=0; - bool haveGoodPosition=false; - bool haveChanged=false; - for (int i=actionToDoListTransfer.size()-1; i>=0; --i) { - if(ids.contains(actionToDoListTransfer.at(i).id)) - { - if(haveGoodPosition) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("move item ")+QString::number(i)+" to "+QString::number(i+1)); - returnActionOnCopyList newAction; - newAction.type=MoveItem; - newAction.addAction.id=actionToDoListTransfer.at(i).id; - newAction.userAction.moveAt=lastGoodPositionReal; - newAction.userAction.position=i; - actionDone << newAction; - actionToDoListTransfer.swap(i,lastGoodPositionReal); - haveChanged=true; - } - else - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Try move up false, item ")+QString::number(i)); - } - ids.removeOne(actionToDoListTransfer.at(i).id); - if(ids.size()==0) - { -/* if(haveChanged) - emit newActionOnList();*/ - return; - } - } - else - { - lastGoodPositionExtern--; - lastGoodPositionReal=i; - haveGoodPosition=true; - } - } - //emit newActionOnList(); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop"); -} - -//put on bottom -void ListThread::moveItemsOnBottom(QList<int> ids) -{ - if(actionToDoListTransfer.size()<=1) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"list size is empty"); - return; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - //do list operation - int lastGoodPositionExtern=numberOfTransferIntoToDoList; - int lastGoodPositionReal=actionToDoListTransfer.size()-1; - for (int i=lastGoodPositionReal; i>=0; --i) { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Check action on item ")+QString::number(i)); - if(ids.contains(actionToDoListTransfer.at(i).id)) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("move item ")+QString::number(i)+" to "+QString::number(lastGoodPositionReal)); - ids.removeOne(actionToDoListTransfer.at(i).id); - returnActionOnCopyList newAction; - newAction.type=MoveItem; - newAction.addAction.id=actionToDoListTransfer.at(i).id; - newAction.userAction.moveAt=lastGoodPositionExtern; - newAction.userAction.position=i; - actionDone << newAction; - actionToDoListTransfer.move(i,lastGoodPositionReal); - lastGoodPositionReal--; - lastGoodPositionExtern--; - if(ids.size()==0) - { -// emit newActionOnList(); - return; - } - } - } -// emit newActionOnList(); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop"); -} - -/** \brief give the forced mode, to export/import transfer list */ -void ListThread::forceMode(const CopyMode &mode) -{ - if(mode==Copy) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Force mode to copy")); - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Force mode to move")); - this->mode=mode; - forcedMode=true; -} - -void ListThread::exportTransferList(const QString &fileName) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - QFile transferFile(fileName); - if(transferFile.open(QIODevice::WriteOnly|QIODevice::Truncate)) - { - transferFile.write(QString("Ultracopier-0.3;Transfer-list;").toUtf8()); - if(!forcedMode) - transferFile.write(QString("Transfer;").toUtf8()); - else - { - if(mode==Copy) - transferFile.write(QString("Copy;").toUtf8()); - else - transferFile.write(QString("Move;").toUtf8()); - } - transferFile.write(QString("Ultracopier-0.3\n").toUtf8()); - bool haveError=false; - int size=actionToDoListTransfer.size(); - for (int index=0;index<size;++index) { - if(actionToDoListTransfer.at(index).mode==Copy) - { - if(!forcedMode || mode==Copy) - { - if(forcedMode) - transferFile.write(QString("%1;%2\n").arg(actionToDoListTransfer.at(index).source.absoluteFilePath()).arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()).toUtf8()); - else - transferFile.write(QString("Copy;%1;%2\n").arg(actionToDoListTransfer.at(index).source.absoluteFilePath()).arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()).toUtf8()); - } - else - haveError=true; - } - else if(actionToDoListTransfer.at(index).mode==Move) - { - if(!forcedMode || mode==Move) - { - if(forcedMode) - transferFile.write(QString("Move;%1;%2\n").arg(actionToDoListTransfer.at(index).source.absoluteFilePath()).arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()).toUtf8()); - else - transferFile.write(QString("%1;%2\n").arg(actionToDoListTransfer.at(index).source.absoluteFilePath()).arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()).toUtf8()); - } - else - haveError=true; - } - } - if(haveError) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Unable do to move or copy item into wrong forced mode: %1").arg(transferFile.errorString())); - emit errorTransferList(tr("Unable do to move or copy item into wrong forced mode: %1").arg(transferFile.errorString())); - } - transferFile.close(); - } - else - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Unable to save the transfer list: %1").arg(transferFile.errorString())); - emit errorTransferList(tr("Unable to save the transfer list: %1").arg(transferFile.errorString())); - return; - } -} - -void ListThread::importTransferList(const QString &fileName) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - QFile transferFile(fileName); - if(transferFile.open(QIODevice::ReadOnly)) - { - QString content; - QByteArray data=transferFile.readLine(64); - if(data.size()<=0) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Problem at the reading, or file size is null")); - emit errorTransferList(tr("Problem at the reading, or file size is null")); - return; - } - content=QString::fromUtf8(data); - if(content!="Ultracopier-0.3;Transfer-list;Transfer;Ultracopier-0.3\n" && content!="Ultracopier-0.3;Transfer-list;Copy;Ultracopier-0.3\n" && content!="Ultracopier-0.3;Transfer-list;Move;Ultracopier-0.3\n") - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Wrong header: \"%1\"").arg(content)); - emit errorTransferList(tr("Wrong header: \"%1\"").arg(content)); - return; - } - bool transferListMixedMode=false; - if(content=="Ultracopier-0.3;Transfer-list;Transfer;Ultracopier-0.3\n") - { - if(forcedMode) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("The transfer list is in mixed mode, but this instance is not in this mode")); - emit errorTransferList(tr("The transfer list is in mixed mode, but this instance is not in this mode")); - return; - } - else - transferListMixedMode=true; - } - if(content=="Ultracopier-0.3;Transfer-list;Copy;Ultracopier-0.3\n" && (forcedMode && mode==Move)) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("The transfer list is in copy mode, but this instance is not in this mode: forcedMode: %1, mode: %2").arg(forcedMode).arg(mode)); - emit errorTransferList(tr("The transfer list is in copy mode, but this instance is not in this mode")); - return; - } - if(content=="Ultracopier-0.3;Transfer-list;Move;Ultracopier-0.3\n" && (forcedMode && mode==Copy)) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("The transfer list is in move mode, but this instance is not in this mode: forcedMode: %1, mode: %2").arg(forcedMode).arg(mode)); - emit errorTransferList(tr("The transfer list is in move mode, but this instance is not in this mode")); - return; - } - bool errorFound=false; - QRegExp correctLine; - if(transferListMixedMode) - correctLine=QRegExp("^(Copy|Move);[^;]+;[^;]+\n$"); - else - correctLine=QRegExp("^[^;]+;[^;]+\n$"); - QStringList args; - CopyMode tempMode; - do - { - data=transferFile.readLine(65535*2); - if(data.size()>0) - { - content=QString::fromUtf8(data); - //do the import here - if(content.contains(correctLine)) - { - content.remove("\n"); - args=content.split(";"); - if(forcedMode) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("New data to import in forced mode: %2,%3").arg(args.at(0)).arg(args.at(1))); - addToTransfer(QFileInfo(args.at(0)),QFileInfo(args.at(1)),mode); - } - else - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("New data to import: %1,%2,%3").arg(args.at(0)).arg(args.at(1)).arg(args.at(2))); - if(args.at(0)=="Copy") - tempMode=Copy; - else - tempMode=Move; - addToTransfer(QFileInfo(args.at(1)),QFileInfo(args.at(2)),tempMode); - } - } - else - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Wrong line syntax: %1").arg(content)); - errorFound=true; - } - } - } - while(data.size()>0); - transferFile.close(); - if(errorFound) - emit warningTransferList(tr("Some error have been found during the line parsing")); -// emit newActionOnList(); - } - else - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Unable to open the transfer list: %1").arg(transferFile.errorString())); - emit errorTransferList(tr("Unable to open the transfer list: %1").arg(transferFile.errorString())); - return; - } -} - -//do new actions -void ListThread::doNewActions_start_transfer() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("actionToDoListTransfer.size(): %1, numberOfTranferRuning: %2").arg(actionToDoListTransfer.size()).arg(numberOfTranferRuning)); - if(stopIt || putInPause) - return; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - //lunch the transfer in WaitForTheTransfer - int_for_loop=0; - loop_size=transferThreadList.size(); - while(int_for_loop<loop_size && numberOfTranferRuning<ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER) - { - if(transferThreadList.at(int_for_loop)->getStat()==TransferStat_WaitForTheTransfer) - { - transferThreadList.at(int_for_loop)->startTheTransfer(); - numberOfTranferRuning++; - } - int_for_loop++; - } - int_for_loop=0; - while(int_for_loop<loop_size && numberOfTranferRuning<ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER) - { - if(transferThreadList.at(int_for_loop)->getStat()==TransferStat_PreOperation) - { - transferThreadList.at(int_for_loop)->startTheTransfer(); - numberOfTranferRuning++; - } - int_for_loop++; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"numberOfTranferRuning: "+QString::number(numberOfTranferRuning)); -} - -/** \brief lunch the pre-op or inode op - 1) locate the next next item to do into the both list - 1a) optimisation posible on the mkpath/rmpath - 2) determine what need be lunched - 3) lunch it, rerun the 2) - */ -void ListThread::doNewActions_inode_manipulation() -{ - //ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("actionToDoList.size(): %1").arg(actionToDoList.size())); - if(stopIt || putInPause) - return; - //ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - //lunch the pre-op or inode op - int_for_loop=0; - int_for_internal_loop=0; - number_rm_path_moved=0; - int_for_transfer_thread_search=0; - actionToDoListTransfer_count=actionToDoListTransfer.count(); - actionToDoListInode_count=actionToDoListInode.count(); - loop_sub_size_transfer_thread_search=transferThreadList.size(); - //search the next transfer action to do - while(int_for_loop<actionToDoListTransfer_count) - { - if(!actionToDoListTransfer[int_for_loop].isRunning) - { - //search the next inode action to do - while(int_for_internal_loop<actionToDoListInode_count) - { - if(!actionToDoListInode[int_for_internal_loop].isRunning) - { - if(actionToDoListTransfer[int_for_loop].id<actionToDoListInode[int_for_internal_loop].id) - { - //do the tranfer action in the next code - break; - } - else - { - //do the inode action - #include "ListThread_InodeAction.cpp" - } - } - int_for_internal_loop++; - } - actionToDoTransfer& currentActionToDoTransfer=actionToDoListTransfer[int_for_loop]; - //do the tranfer action - while(int_for_transfer_thread_search<loop_sub_size_transfer_thread_search) - { - /** - transferThreadList.at(int_for_transfer_thread_search)->transferId==0) /!\ important! - Because the other thread can have call doNewAction before than this thread have the finish event parsed! - I this case it lose all data - */ - currentTransferThread=transferThreadList[int_for_transfer_thread_search]; - if(currentTransferThread->getStat()==TransferStat_Idle && currentTransferThread->transferId==0) // /!\ important! - { - currentTransferThread->transferId=currentActionToDoTransfer.id; - currentTransferThread->transferSize=currentActionToDoTransfer.size; - currentTransferThread->setFiles( - currentActionToDoTransfer.source.absoluteFilePath(), - currentActionToDoTransfer.size, - currentActionToDoTransfer.destination.absoluteFilePath(), - currentActionToDoTransfer.mode - ); - currentActionToDoTransfer.isRunning=true; - - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("[%1] id: %2 is idle, use it for %3").arg(int_for_loop).arg(currentTransferThread->transferId).arg(currentActionToDoTransfer.destination.absoluteFilePath())); - - /// \note wrong position? Else write why it's here - returnActionOnCopyList newAction; - newAction.type = PreOperation; - newAction.addAction.id = currentActionToDoTransfer.id; - newAction.addAction.sourceFullPath = currentActionToDoTransfer.source.absoluteFilePath(); - newAction.addAction.sourceFileName = currentActionToDoTransfer.source.fileName(); - newAction.addAction.destinationFullPath = currentActionToDoTransfer.destination.absoluteFilePath(); - newAction.addAction.destinationFileName = currentActionToDoTransfer.destination.fileName(); - newAction.addAction.size = currentActionToDoTransfer.size; - newAction.addAction.mode = currentActionToDoTransfer.mode; - actionDone << newAction; - int_for_transfer_thread_search++; - break; - } - int_for_transfer_thread_search++; - } - if(int_for_internal_loop==loop_sub_size_transfer_thread_search) - { - /// \note Can be normal when all thread is not initialized - //ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to found free thread to do the transfer"); - break; - } - numberOfInodeOperation++; - if(numberOfInodeOperation>=ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT) - return; - } - int_for_loop++; - } - //search the next inode action to do - while(int_for_internal_loop<actionToDoListInode_count) - { - if(!actionToDoListInode[int_for_internal_loop].isRunning) - { - //do the inode action - #include "ListThread_InodeAction.cpp" - } - int_for_internal_loop++; - } - //error checking - if((actionToDoListTransfer_count+actionToDoListInode_count)>ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("The index have been detected as out of max range: %1>%2").arg(actionToDoListTransfer_count+actionToDoListInode_count).arg(ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT)); - return; - } -} - -//restart transfer if it can -void ListThread::restartTransferIfItCan() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - TransferThread *transfer=qobject_cast<TransferThread *>(QObject::sender()); - if(transfer==NULL) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,QString("transfer thread not located!")); - return; - } - if(numberOfTranferRuning<ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER && transfer->getStat()==TransferStat_WaitForTheTransfer) - { - transfer->startTheTransfer(); - numberOfTranferRuning++; - } - doNewActions_start_transfer(); -} - -/// \brief update the transfer stat -void ListThread::newTransferStat(TransferStat stat,quint64 id) -{ - returnActionOnCopyList newAction; - switch(stat) - { - case TransferStat_Idle: - return; - break; - case TransferStat_PreOperation: - return; - break; - case TransferStat_WaitForTheTransfer: - return; - break; - case TransferStat_Transfer: - newAction.type=Transfer; - break; - case TransferStat_PostTransfer: - case TransferStat_PostOperation: - newAction.type=PostOperation; - break; - case TransferStat_Checksum: - newAction.type=CustomOperation; - break; - default: - return; - break; - } - newAction.addAction.id = id; - actionDone << newAction; -} - -void ListThread::set_osBufferLimit(unsigned int osBufferLimit) -{ - this->osBufferLimit=osBufferLimit; - int index=0; - loop_sub_size_transfer_thread_search=transferThreadList.size(); - while(index<loop_sub_size_transfer_thread_search) - { - transferThreadList.at(index)->set_osBufferLimit(osBufferLimit); - index++; - } -} - -void ListThread::set_setFilters(QList<Filters_rules> include,QList<Filters_rules> exclude) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("include.size(): %1, exclude.size(): %2").arg(include.size()).arg(exclude.size())); - this->include=include; - this->exclude=exclude; - int index=0; - while(index<scanFileOrFolderThreadsPool.size()) - { - scanFileOrFolderThreadsPool.at(index)->setFilters(include,exclude); - index++; - } -} - -void ListThread::set_sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule) -{ - this->firstRenamingRule=firstRenamingRule; - this->otherRenamingRule=otherRenamingRule; - emit send_sendNewRenamingRules(firstRenamingRule,otherRenamingRule); -} - -void ListThread::mkPathFirstFolderFinish() -{ - int_for_loop=0; - loop_size=actionToDoListInode.size(); - while(int_for_loop<loop_size) - { - if(actionToDoListInode.at(int_for_loop).type==ActionType_MkPath) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("stop mkpath: %1").arg(actionToDoListInode.at(int_for_loop).folder.absoluteFilePath())); - actionToDoListInode.removeAt(int_for_loop); - if(actionToDoListTransfer.size()==0 && actionToDoListInode.size()==0 && actionToDoListInode_afterTheTransfer.size()==0) - updateTheStatus(); - numberOfInodeOperation--; - doNewActions_inode_manipulation(); - return; - } - int_for_loop++; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to found item into the todo list"); -} - -void ListThread::rmPathFirstFolderFinish() -{ - int_for_loop=0; - loop_size=actionToDoListInode.size(); - while(int_for_loop<loop_size) - { - if(actionToDoListInode.at(int_for_loop).type==ActionType_RmPath) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("stop rmpath: %1").arg(actionToDoListInode.at(int_for_loop).folder.absoluteFilePath())); - actionToDoListInode.removeAt(int_for_loop); - if(actionToDoListTransfer.size()==0 && actionToDoListInode.size()==0 && actionToDoListInode_afterTheTransfer.size()==0) - updateTheStatus(); - numberOfInodeOperation--; - doNewActions_inode_manipulation(); - return; - } - int_for_loop++; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to found item into the todo list"); -} - -#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW - -void ListThread::timedUpdateDebugDialog() -{ - QStringList newList; - int index=0; - loop_sub_size_transfer_thread_search=transferThreadList.size(); - while(index<loop_sub_size_transfer_thread_search) - { - QString stat; - switch(transferThreadList.at(index)->getStat()) - { - case TransferStat_Idle: - stat="Idle"; - break; - case TransferStat_PreOperation: - stat="PreOperation"; - break; - case TransferStat_WaitForTheTransfer: - stat="WaitForTheTransfer"; - break; - case TransferStat_Transfer: - stat="Transfer"; - break; - case TransferStat_PostOperation: - stat="PostOperation"; - break; - case TransferStat_PostTransfer: - stat="PostTransfer"; - break; - case TransferStat_Checksum: - stat="Checksum"; - break; - default: - stat=QString("??? (%1)").arg(transferThreadList.at(index)->getStat()); - break; - } - newList << QString("%1) (%3,%4) %2") - .arg(index) - .arg(stat) - .arg(transferThreadList.at(index)->readingLetter()) - .arg(transferThreadList.at(index)->writingLetter()); - index++; - } - QStringList newList2; - index=0; - loop_size=actionToDoListTransfer.size(); - while(index<loop_size) - { - newList2 << QString("%1 %2 %3") - .arg(actionToDoListTransfer.at(index).source.absoluteFilePath()) - .arg(actionToDoListTransfer.at(index).size) - .arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()); - if(index>(actionToDoListTransfer.size()+2)) - { - newList2 << QString("..."); - break; - } - index++; - } - emit updateTheDebugInfo(newList,newList2,numberOfInodeOperation); -} - -#endif - -/// \note Can be call without queue because all call will be serialized -void ListThread::fileAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame) -{ - emit send_fileAlreadyExists(source,destination,isSame,qobject_cast<TransferThread *>(sender())); -} - -/// \note Can be call without queue because all call will be serialized -void ListThread::errorOnFile(const QFileInfo &fileInfo,const QString &errorString) -{ - emit send_errorOnFile(fileInfo,errorString,qobject_cast<TransferThread *>(sender())); -} - -/// \note Can be call without queue because all call will be serialized -void ListThread::folderAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame) -{ - emit send_folderAlreadyExists(source,destination,isSame,qobject_cast<scanFileOrFolder *>(sender())); -} - -/// \note Can be call without queue because all call will be serialized -/// \todo all this part -void ListThread::errorOnFolder(const QFileInfo &fileInfo,const QString &errorString) -{ - emit send_errorOnFolder(fileInfo,errorString,qobject_cast<scanFileOrFolder *>(sender())); -} - -//to run the thread -void ListThread::run() -{ - exec(); -} - -/// \to create transfer thread -void ListThread::createTransferThread() -{ - if(stopIt) - return; - transferThreadList << new TransferThread(); - TransferThread * last=transferThreadList.last(); - last->transferId=0; - last->transferSize=0; - last->setRightTransfer(doRightTransfer); - last->setKeepDate(keepDate); - last->setBlockSize(blockSize); - last->setDrive(drives); - last->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists); - last->setMaxSpeed(maxSpeed/ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER); - last->set_doChecksum(doChecksum); - last->set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible); - last->set_checksumOnlyOnError(checksumOnlyOnError); - last->set_osBuffer(osBuffer); - last->set_osBufferLimited(osBufferLimited); - last->set_osBufferLimit(osBufferLimit); - - #ifdef ULTRACOPIER_PLUGIN_DEBUG - connect(last,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), Qt::QueuedConnection); - #endif // ULTRACOPIER_PLUGIN_DEBUG - connect(last,SIGNAL(errorOnFile(QFileInfo,QString)), this,SLOT(errorOnFile(QFileInfo,QString)), Qt::QueuedConnection); - connect(last,SIGNAL(fileAlreadyExists(QFileInfo,QFileInfo,bool)), this,SLOT(fileAlreadyExists(QFileInfo,QFileInfo,bool)), Qt::QueuedConnection); - connect(last,SIGNAL(tryPutAtBottom()), this,SLOT(transferPutAtBottom()), Qt::QueuedConnection); - connect(last,SIGNAL(readStopped()), this,SLOT(transferIsFinished()), Qt::QueuedConnection); - connect(last,SIGNAL(preOperationStopped()), this,SLOT(doNewActions_start_transfer()), Qt::QueuedConnection); - connect(last,SIGNAL(postOperationStopped()), this,SLOT(transferInodeIsClosed()), Qt::QueuedConnection); - connect(last,SIGNAL(checkIfItCanBeResumed()), this,SLOT(restartTransferIfItCan()), Qt::QueuedConnection); - connect(last,SIGNAL(pushStat(TransferStat,quint64)), this,SLOT(newTransferStat(TransferStat,quint64)), Qt::QueuedConnection); - - connect(this,SIGNAL(send_sendNewRenamingRules(QString,QString)), last,SLOT(setRenamingRules(QString,QString)), Qt::QueuedConnection); - - last->start(); - last->setObjectName(QString("transfer %1").arg(transferThreadList.size()-1)); - last->setMkpathTransfer(&mkpathTransfer); - last->setRenamingRules(firstRenamingRule,otherRenamingRule); - #ifdef ULTRACOPIER_PLUGIN_DEBUG - last->setId(transferThreadList.size()-1); - #endif - if(transferThreadList.size()>=ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT) - return; - if(stopIt) - return; - doNewActions_inode_manipulation(); - emit askNewTransferThread(); -} diff --git a/plugins/CopyEngine/Ultracopier-0.3/ListThread.h b/plugins/CopyEngine/Ultracopier-0.3/ListThread.h deleted file mode 100755 index ef6b7f8..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/ListThread.h +++ /dev/null @@ -1,370 +0,0 @@ -/** \file ListThread.h -\brief Define the list thread, and management to the action to do -\author alpha_one_x86 -\version 0.3 -\date 2011 */ - -#ifndef LISTTHREAD_H -#define LISTTHREAD_H - -#include <QThread> -#include <QObject> -#include <QList> -#include <QStringList> -#include <QFileInfo> -#include <QSemaphore> -#include <QTextStream> -#include <QFile> - -#include "../../../interface/PluginInterface_CopyEngine.h" -#include "scanFileOrFolder.h" -#include "TransferThread.h" -#include "MkPath.h" -#include "RmPath.h" -#include "Environment.h" - -/// \brief Define the list thread, and management to the action to do -class ListThread : public QThread -{ - Q_OBJECT -public: - explicit ListThread(FacilityInterface * facilityInterface); - ~ListThread(); - //duplication copy detection - /** \brief compare the current sources of the copy, with the passed arguments - * \param sources the sources list to compares with the current sources list - * \return true if have same sources, else false (or empty) */ - bool haveSameSource(QStringList sources); - /** \brief compare the current destination of the copy, with the passed arguments - * \param destination the destination to compares with the current destination - * \return true if have same destination, else false (or empty) */ - bool haveSameDestination(QString destination); - //external soft like file browser have send copy/move list to do - /** \brief send copy with destination - * \param sources the sources list to copy - * \param destination the destination to copy - * \return true if the copy have been accepted */ - bool newCopy(QStringList sources,QString destination); - /** \brief send move without destination, ask the destination - * \param sources the sources list to move - * \param destination the destination to move - * \return true if the move have been accepted */ - bool newMove(QStringList sources,QString destination); - /** \brief get the speed limitation - * < -1 if not able, 0 if disabled */ - qint64 getSpeedLimitation(); - /** \brief to set drives detected - * specific to this copy engine */ - void setDrive(QStringList drives); - /// \brief to set the collision action - void setCollisionAction(FileExistsAction alwaysDoThisActionForFileExists); - /** \brief to sync the transfer list - * Used when the interface is changed, useful to minimize the memory size */ - void syncTransferList(); - /// \brief to store one action to do - struct actionToDoTransfer - { - quint64 id; - qint64 size;///< Used to set: used in case of transfer or remainingInode for drop folder - QFileInfo source;///< Used to set: source for transfer, folder to create, folder to drop - QFileInfo destination; - CopyMode mode; - bool isRunning;///< store if the action si running - //TransferThread * transfer; // -> see transferThreadList - }; - QList<actionToDoTransfer> actionToDoListTransfer; - /// \brief get action type - enum ActionType - { - ActionType_MkPath=1, - ActionType_RmPath=2 - }; - /// \brief to store one action to do - struct actionToDoInode - { - ActionType type;///< \see ActionType - quint64 id; - qint64 size;///< Used to set: used in case of transfer or remainingInode for drop folder - QFileInfo folder;///< Used to set: source for transfer, folder to create, folder to drop - bool isRunning;///< store if the action si running - }; - QList<actionToDoInode> actionToDoListInode; - QList<actionToDoInode> actionToDoListInode_afterTheTransfer; - int numberOfInodeOperation; - //dir operation thread queue - MkPath mkPathQueue; - RmPath rmPathQueue; - //to get the return value from copyEngine - bool getReturnBoolToCopyEngine(); - QPair<quint64,quint64> getReturnPairQuint64ToCopyEngine(); - ItemOfCopyList getReturnItemOfCopyListToCopyEngine(); - - void set_doChecksum(bool doChecksum); - void set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible); - void set_checksumOnlyOnError(bool checksumOnlyOnError); - void set_osBuffer(bool osBuffer); - void set_osBufferLimited(bool osBufferLimited); -public slots: - //action on the copy - /// \brief put the transfer in pause - void pause(); - /// \brief resume the transfer - void resume(); - /** \brief skip one transfer entry - * \param id id of the file to remove */ - void skip(const quint64 &id); - /** \brief skip as interanl one transfer entry - * \param id id of the file to remove */ - bool skipInternal(const quint64 &id); - /// \brief cancel all the transfer - void cancel(); - //edit the transfer list - /** \brief remove the selected item - * \param ids ids is the id list of the selected items */ - void removeItems(const QList<int> &ids); - /** \brief move on top of the list the selected item - * \param ids ids is the id list of the selected items */ - void moveItemsOnTop(QList<int> ids); - /** \brief move up the list the selected item - * \param ids ids is the id list of the selected items */ - void moveItemsUp(QList<int> ids); - /** \brief move down the list the selected item - * \param ids ids is the id list of the selected items */ - void moveItemsDown(QList<int> ids); - /** \brief move on bottom of the list the selected item - * \param ids ids is the id list of the selected items */ - void moveItemsOnBottom(QList<int> ids); - - /** \brief give the forced mode, to export/import transfer list */ - void forceMode(const CopyMode &mode); - /// \brief export the transfer list into a file - void exportTransferList(const QString &fileName); - /// \brief import the transfer list into a file - void importTransferList(const QString &fileName); - - /// \brief set the folder local colision - void setFolderColision(FolderExistsAction alwaysDoThisActionForFolderExists); - /** \brief to set the speed limitation - * -1 if not able, 0 if disabled */ - bool setSpeedLimitation(const qint64 &speedLimitation); - /// \brief set the copy info and options before runing - void setRightTransfer(const bool doRightTransfer); - /// \brief set keep date - void setKeepDate(const bool keepDate); - /// \brief set block size in KB - void setBlockSize(const int blockSize); - /// \brief set auto start - void setAutoStart(const bool autoStart); - /// \brief set check destination folder - void setCheckDestinationFolderExists(const bool checkDestinationFolderExists); - /// \brief set data local to the thread - void setAlwaysFileExistsAction(FileExistsAction alwaysDoThisActionForFileExists); - /// \brief do new actions, start transfer - void doNewActions_start_transfer(); - /** \brief lunch the pre-op or inode op - 1) locate the next next item to do into the both list - 1a) optimisation posible on the mkpath/rmpath - 2) determine what need be lunched - 3) lunch it, rerun the 2) - */ - void doNewActions_inode_manipulation(); - /// \brief restart transfer if it can - void restartTransferIfItCan(); - - /// \brief update the transfer stat - void newTransferStat(TransferStat stat,quint64 id); - - void set_osBufferLimit(unsigned int osBufferLimit); - void set_setFilters(QList<Filters_rules> include,QList<Filters_rules> exclude); - void set_sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule); - - //send action done - void sendActionDone(); - //send progression - void sendProgression(); -private: - QSemaphore mkpathTransfer; - QString sourceDrive; - bool sourceDriveMultiple; - bool stopIt; - QString destinationDrive; - bool destinationDriveMultiple; - QList<scanFileOrFolder *> scanFileOrFolderThreadsPool; - int numberOfTransferIntoToDoList; - QList<TransferThread *> transferThreadList; - scanFileOrFolder * newScanThread(CopyMode mode); - quint64 bytesToTransfer; - quint64 bytesTransfered; - bool autoStart; - bool putInPause; - QList<returnActionOnCopyList> actionDone;///< to action to send to the interface - quint64 idIncrementNumber;///< to store the last id returned - qint64 actualRealByteTransfered; - int preOperationNumber; - int numberOfTranferRuning; - int maxSpeed;///< in KB/s, assume as 0KB/s as default like every where - FolderExistsAction alwaysDoThisActionForFolderExists; - bool checkDestinationFolderExists; - bool doChecksum; - bool checksumIgnoreIfImpossible; - bool checksumOnlyOnError; - bool osBuffer; - bool osBufferLimited; - unsigned int osBufferLimit; - QList<Filters_rules> include,exclude; - CopyMode mode; - bool forcedMode; - QString firstRenamingRule; - QString otherRenamingRule; - - //add file transfer to do - quint64 addToTransfer(const QFileInfo& source,const QFileInfo& destination,const CopyMode& mode); - //generate id number - quint64 generateIdNumber(); - //warning the first entry is accessible will copy - bool removeItems(quint64 id); - //put on top - bool moveOnTopItem(quint64 id); - //move up - bool moveUpItem(quint64 id); - //move down - bool moveDownItem(quint64 id); - //put on bottom - bool moveOnBottomItem(quint64 id); - //general transfer - void startGeneralTransfer(); - //debug windows if needed - #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW - QTimer timerUpdateDebugDialog; - #endif - FacilityInterface * facilityInterface; - //temp variable for not always alocate the memory - int int_for_loop,int_for_internal_loop,int_for_transfer_thread_search,loop_size,loop_sub_size,loop_sub_size_transfer_thread_search,number_rm_path_moved; - TransferThread *temp_transfer_thread; - bool isFound; - bool updateTheStatus_listing,updateTheStatus_copying; - EngineActionInProgress updateTheStatus_action_in_progress; - QSemaphore waitConstructor,waitCancel; - int actionToDoListTransfer_count,actionToDoListInode_count; - bool doTransfer,doInode; - qint64 oversize;//used as temp variable - qint64 currentProgression; - qint64 copiedSize,totalSize,localOverSize; - QList<ProgressionItem> progressionList; - TransferThread* currentTransferThread; - //memory variable for transfer thread creation - bool doRightTransfer; - bool keepDate; - int blockSize; - QStringList drives; - FileExistsAction alwaysDoThisActionForFileExists; - //to return value to the copyEngine - bool returnBoolToCopyEngine; - QPair<quint64,quint64> returnPairQuint64ToCopyEngine; - QList<ItemOfCopyList> returnListItemOfCopyListToCopyEngine; - ItemOfCopyList returnItemOfCopyListToCopyEngine; - ProgressionItem tempItem; - - void realByteTransfered(); -private slots: - void scanThreadHaveFinish(bool skipFirstRemove=false); - void updateTheStatus(); - void fileTransfer(const QFileInfo &sourceFileInfo,const QFileInfo &destinationFileInfo,const CopyMode &mode); - //mkpath event - void mkPathFirstFolderFinish(); - //rmpath event - void rmPathFirstFolderFinish(); - //transfer is finished - void transferIsFinished(); - /** \brief put the current file at bottom in case of error - \note ONLY IN CASE OF ERROR */ - void transferPutAtBottom(); - //transfer is finished - void transferInodeIsClosed(); - //debug windows if needed - #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW - void timedUpdateDebugDialog(); - #endif - //dialog message - /// \note Can be call without queue because all call will be serialized - void fileAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame); - /// \note Can be call without queue because all call will be serialized - void errorOnFile(const QFileInfo &fileInfo,const QString &errorString); - /// \note Can be call without queue because all call will be serialized - void folderAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame); - /// \note Can be call without queue because all call will be serialized - void errorOnFolder(const QFileInfo &fileInfo,const QString &errorString); - //to run the thread - void run(); - /// \to create transfer thread - void createTransferThread(); - //mk path to do - quint64 addToMkPath(const QString& folder); - //add rm path to do - void addToRmPath(const QString& folder,const int& inodeToRemove); - //send the progression, after full reset of the interface (then all is empty) - void syncTransferList_internal(); -signals: - //send information about the copy - void actionInProgess(EngineActionInProgress); //should update interface information on this event - - void newActionOnList(const QList<returnActionOnCopyList> &);///very important, need be temporized to group the modification to do and not flood the interface - void syncReady(); - - /** \brief to get the progression for a specific file - * \param id the id of the transfer, id send during population the transfer list - * first = current transfered byte, second = byte to transfer */ - void pushFileProgression(const QList<ProgressionItem> &progressionList); - //get information about the copy - /** \brief to get the general progression - * first = current transfered byte, second = byte to transfer */ - void pushGeneralProgression(const quint64 &,const quint64 &); - - void newFolderListing(const QString &path); - void newCollisionAction(QString action); - void newErrorAction(QString action); - void isInPause(bool); - - //when can be deleted - void canBeDeleted(); - - //send error occurred - void error(QString path,quint64 size,QDateTime mtime,QString error); - //for the extra logging - void rmPath(QString path); - void mkPath(QString path); - /// \brief To debug source - #ifdef ULTRACOPIER_PLUGIN_DEBUG - void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne); - #endif - #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW - void updateTheDebugInfo(QStringList,QStringList,int); - #endif - - //other signal - /// \note Can be call without queue because all call will be serialized - void send_fileAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread); - /// \note Can be call without queue because all call will be serialized - void send_errorOnFile(QFileInfo fileInfo,QString errorString,TransferThread * thread); - /// \note Can be call without queue because all call will be serialized - void send_folderAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,scanFileOrFolder * thread); - /// \note Can be call without queue because all call will be serialized - void send_errorOnFolder(QFileInfo fileInfo,QString errorString,scanFileOrFolder * thread); - //send the progression - void send_syncTransferList(); - //mkpath error event - void mkPathErrorOnFolder(QFileInfo fileInfo,QString errorString); - //rmpath error event - void rmPathErrorOnFolder(QFileInfo fileInfo,QString errorString); - //to close - void tryCancel(); - //to ask new transfer thread - void askNewTransferThread(); - - void warningTransferList(QString warning); - void errorTransferList(QString error); - void send_sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule); - void send_realBytesTransfered(quint64); -}; - -#endif // LISTTHREAD_H diff --git a/plugins/CopyEngine/Ultracopier-0.3/ListThread_InodeAction.cpp b/plugins/CopyEngine/Ultracopier-0.3/ListThread_InodeAction.cpp deleted file mode 100644 index 0f4c2f4..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/ListThread_InodeAction.cpp +++ /dev/null @@ -1,58 +0,0 @@ -/** \file ListThread_InodeAction.cpp -\brief To be included into ListThread.cpp, to optimize and prevent code duplication -\see ListThread.cpp -\author alpha_one_x86 -\version 0.3 -\date 2011 */ - -#ifdef LISTTHREAD_H - -//do the inode action -actionToDoInode& currentActionToDoInode=actionToDoListInode[int_for_internal_loop]; -switch(currentActionToDoInode.type) -{ -case ActionType_MkPath: - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("launch mkpath: %1").arg(currentActionToDoInode.folder.absoluteFilePath())); - mkPathQueue.addPath(currentActionToDoInode.folder.absoluteFilePath()); - currentActionToDoInode.isRunning=true; - numberOfInodeOperation++; - if(numberOfInodeOperation>=ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT) - return; -break; -case ActionType_RmPath: -/* What is this code? - if((int_for_loop+number_rm_path_moved)>=(loop_size-1)) - { - if(numberOfTranferRuning) - break; - else - currentActionToDoInode.size=0; - }*/ - //then empty (no file), can try remove it - if(true)//currentActionToDoInode.size==0 - { - if(numberOfTranferRuning>0) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("skipped because already inode = 0 and transfer is running: %1").arg(currentActionToDoInode.folder.absoluteFilePath())); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("launch rmpath: %1").arg(currentActionToDoInode.folder.absoluteFilePath())); - rmPathQueue.addPath(currentActionToDoInode.folder.absoluteFilePath()); - currentActionToDoInode.isRunning=true; - numberOfInodeOperation++; - if(numberOfInodeOperation>=ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT) - return; - } - else //have not finish all the transfer into it, do it later - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"should never pass here"); - /*actionToDoListInode.move(int_for_internal_loop,actionToDoListInode_count-1); - currentActionToDoInode.id=generateIdNumber(); - number_rm_path_moved++; - currentActionToDoInode.size=0; - continue;*/ - } -break; -default: - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Wrong type at inode action")); - return; -} - -#endif diff --git a/plugins/CopyEngine/Ultracopier-0.3/MkPath.cpp b/plugins/CopyEngine/Ultracopier-0.3/MkPath.cpp deleted file mode 100644 index dd71231..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/MkPath.cpp +++ /dev/null @@ -1,100 +0,0 @@ -#include "MkPath.h" - -MkPath::MkPath() -{ - stopIt=false; - waitAction=false; - setObjectName("MkPath"); - moveToThread(this); - start(); -} - -MkPath::~MkPath() -{ - stopIt=true; - quit(); - wait(); -} - -void MkPath::addPath(const QString &path) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+path); - if(stopIt) - return; - emit internalStartAddPath(path); -} - -void MkPath::skip() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - emit internalStartSkip(); -} - -void MkPath::retry() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - emit internalStartRetry(); -} - -void MkPath::run() -{ - connect(this,SIGNAL(internalStartAddPath(QString)),this,SLOT(internalAddPath(QString)),Qt::QueuedConnection); - connect(this,SIGNAL(internalStartDoThisPath()),this,SLOT(internalDoThisPath()),Qt::QueuedConnection); - connect(this,SIGNAL(internalStartSkip()),this,SLOT(internalSkip()),Qt::QueuedConnection); - connect(this,SIGNAL(internalStartRetry()),this,SLOT(internalRetry()),Qt::QueuedConnection); - exec(); -} - -void MkPath::internalDoThisPath() -{ - if(waitAction || pathList.isEmpty()) - return; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+pathList.first()); - if(!dir.exists(pathList.first())) - if(!dir.mkpath(pathList.first())) - { - if(!dir.exists(pathList.first())) - { - if(stopIt) - return; - waitAction=true; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to remove the folder: "+pathList.first()); - emit errorOnFolder(pathList.first(),tr("Unable to create the folder")); - return; - } - } - pathList.removeFirst(); - emit firstFolderFinish(); - checkIfCanDoTheNext(); -} - -void MkPath::internalAddPath(const QString &path) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+path); - pathList << path; - if(!waitAction) - checkIfCanDoTheNext(); -} - -void MkPath::checkIfCanDoTheNext() -{ - if(!waitAction && !stopIt && pathList.size()>0) - emit internalStartDoThisPath(); -} - -void MkPath::internalSkip() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - waitAction=false; - pathList.removeFirst(); - emit firstFolderFinish(); - checkIfCanDoTheNext(); -} - -void MkPath::internalRetry() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - waitAction=false; - checkIfCanDoTheNext(); -} - diff --git a/plugins/CopyEngine/Ultracopier-0.3/MkPath.h b/plugins/CopyEngine/Ultracopier-0.3/MkPath.h deleted file mode 100644 index 5d00d60..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/MkPath.h +++ /dev/null @@ -1,56 +0,0 @@ -/** \file MkPath.h -\brief Make the path given as queued mkpath -\author alpha_one_x86 -\version 0.3 -\date 2011 */ - -#ifndef MKPATH_H -#define MKPATH_H - -#include <QThread> -#include <QFileInfo> -#include <QString> -#include <QSemaphore> -#include <QStringList> -#include <QDir> - -#include "Environment.h" - -/// \brief Make the path given as queued mkpath -class MkPath : public QThread -{ - Q_OBJECT -public: - explicit MkPath(); - ~MkPath(); - /// \brief add path to make - void addPath(const QString &path); -signals: - void errorOnFolder(const QFileInfo &,const QString &); - void firstFolderFinish(); - void internalStartAddPath(const QString &path); - void internalStartDoThisPath(); - void internalStartSkip(); - void internalStartRetry(); - void debugInformation(const DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne); -public slots: - /// \brief skip after creation error - void skip(); - /// \brief retry after creation error - void retry(); -private: - void run(); - bool waitAction; - bool stopIt; - bool skipIt; - QStringList pathList; - void checkIfCanDoTheNext(); - QDir dir; -private slots: - void internalDoThisPath(); - void internalAddPath(const QString &path); - void internalSkip(); - void internalRetry(); -}; - -#endif // MKPATH_H diff --git a/plugins/CopyEngine/Ultracopier-0.3/ReadThread.cpp b/plugins/CopyEngine/Ultracopier-0.3/ReadThread.cpp deleted file mode 100644 index 3c7bfc1..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/ReadThread.cpp +++ /dev/null @@ -1,597 +0,0 @@ -#include "ReadThread.h" - -ReadThread::ReadThread() -{ - start(); - moveToThread(this); - stopIt=false; - putInPause=false; - blockSize=1024*1024; - setObjectName("read"); - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=Idle; - #endif - isInReadLoop=false; - tryStartRead=false; - isOpen.release(); -} - -ReadThread::~ReadThread() -{ - stopIt=true; - disconnect(this); - waitNewClockForSpeed.release(); - isOpen.acquire(); - exit(); - wait(); -} - -void ReadThread::run() -{ - connect(this,SIGNAL(internalStartOpen()), this,SLOT(internalOpen()), Qt::QueuedConnection); - connect(this,SIGNAL(internalStartReopen()), this,SLOT(internalReopen()), Qt::QueuedConnection); - connect(this,SIGNAL(internalStartRead()), this,SLOT(internalRead()), Qt::QueuedConnection); - connect(this,SIGNAL(internalStartClose()), this,SLOT(internalClose()), Qt::QueuedConnection); - connect(this,SIGNAL(checkIfIsWait()), this,SLOT(isInWait()), Qt::QueuedConnection); - connect(this,SIGNAL(internalStartChecksum()), this,SLOT(checkSum()), Qt::QueuedConnection); - exec(); -} - -void ReadThread::open(const QString &name,const CopyMode &mode) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] open source: "+name); - if(file.isOpen()) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] previous file is already open: "+file.fileName()+", try open: "+this->name); - return; - } - if(isInReadLoop) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] previous file is already readding: "+file.fileName()+", try open: "+this->name); - return; - } - if(tryStartRead) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] previous file is already try read: "+file.fileName()+", try open: "+this->name); - return; - } - fakeMode=false; - this->name=name; - this->mode=mode; - emit internalStartOpen(); -} - -QString ReadThread::errorString() -{ - return errorString_internal; -} - -void ReadThread::stop() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stop()"); - stopIt=true; - if(isOpen.available()>0) - return; - emit internalStartClose(); -} - -bool ReadThread::pause() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] try put read thread in pause"); - putInPause=true; - stopIt=true; - return isInReadLoop; -} - -void ReadThread::resume() -{ - if(putInPause) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start"); - putInPause=false; - stopIt=false; - } - else - return; - if(tryStartRead) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] already in try start"); - return; - } - tryStartRead=true; - if(isInReadLoop) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] is in read loop"); - return; - } - if(!file.isOpen()) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] file is not open"); - return; - } - emit internalStartRead(); -} - -bool ReadThread::seek(qint64 position) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start with: "+QString::number(position)); - if(position>file.size()) - return false; - return file.seek(position); -} - -qint64 ReadThread::size() -{ - return file.size(); -} - -void ReadThread::postOperation() -{ - emit internalStartClose(); -} - -void ReadThread::checkSum() -{ - QByteArray blockArray; - QCryptographicHash hash(QCryptographicHash::Sha1); - isInReadLoop=true; - lastGoodPosition=0; - seek(0); - int sizeReaden=0; - do - { - //read one block - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=Read; - #endif - blockArray=file.read(blockSize); - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=Idle; - #endif - - if(file.error()!=QFile::NoError) - { - errorString_internal=tr("Unable to read the source file: ")+file.errorString()+" ("+QString::number(file.error())+")"; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("file.error()!=QFile::NoError: %1, error: %2").arg(QString::number(file.error())).arg(errorString_internal)); - emit error(); - isInReadLoop=false; - return; - } - sizeReaden=blockArray.size(); - if(sizeReaden>0) - { - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=Checksum; - #endif - hash.addData(blockArray); - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=Idle; - #endif - - if(stopIt) - break; - - lastGoodPosition+=blockArray.size(); - - //wait for limitation speed if stop not query - if(maxSpeed>0) - { - numberOfBlockCopied++; - if(numberOfBlockCopied>=MultiForBigSpeed) - { - numberOfBlockCopied=0; - waitNewClockForSpeed.acquire(); - if(stopIt) - break; - } - } - } - } - while(sizeReaden>0 && !stopIt); - if(lastGoodPosition>file.size()) - { - errorString_internal=tr("File truncated during the read, possible data change"); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Source truncated during the read: %1 (%2)").arg(file.errorString()).arg(QString::number(file.error()))); - emit error(); - isInReadLoop=false; - return; - } - isInReadLoop=false; - if(stopIt) - { - if(putInPause) - emit isInPause(); - stopIt=false; - return; - } - emit checksumFinish(hash.result()); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stop the read"); -} - -bool ReadThread::internalOpen(bool resetLastGoodPosition) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] internalOpen source: "+name); - stopIt=false; - putInPause=false; - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=InodeOperation; - #endif - if(file.isOpen()) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] already open! source: "+name); - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=Idle; - #endif - return false; - } - file.setFileName(name); - QIODevice::OpenMode openMode=QIODevice::ReadOnly; - if(mode==Move) - openMode=QIODevice::ReadWrite; - seekToZero=false; - if(file.open(openMode)) - { - size_at_open=file.size(); - mtime_at_open=QFileInfo(file).lastModified(); - putInPause=false; - if(resetLastGoodPosition) - { - lastGoodPosition=0; - seek(0); - emit opened(); - } - else if(!seek(lastGoodPosition)) - { - errorString_internal=file.errorString(); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Unable to seek after open: %1, error: %2").arg(name).arg(errorString_internal)); - emit error(); - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=Idle; - #endif - return false; - } - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=Idle; - #endif - isOpen.acquire(); - return true; - } - else - { - errorString_internal=file.errorString(); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Unable to open: %1, error: %2").arg(name).arg(errorString_internal)); - emit error(); - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=Idle; - #endif - return false; - } -} - -void ReadThread::internalRead() -{ - isInReadLoop=true; - tryStartRead=false; - if(stopIt) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] stopIt == true, then quit"); - internalClose(); - return; - } - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=InodeOperation; - #endif - int sizeReaden=0; - if(!file.isOpen()) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] is not open!"); - return; - } - QByteArray blockArray; - //numberOfBlockCopied = 0; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start the copy"); - emit readIsStarted(); - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=Idle; - #endif - if(stopIt) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] stopIt == true, then quit"); - internalClose(); - return; - } - do - { - //read one block - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=Read; - #endif - blockArray=file.read(blockSize); - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=Idle; - #endif - - if(file.error()!=QFile::NoError) - { - errorString_internal=tr("Unable to read the source file: ")+file.errorString()+" ("+QString::number(file.error())+")"; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("file.error()!=QFile::NoError: %1, error: %2").arg(QString::number(file.error())).arg(errorString_internal)); - emit error(); - isInReadLoop=false; - return; - } - sizeReaden=blockArray.size(); - if(sizeReaden>0) - { - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=WaitWritePipe; - #endif - if(!writeThread->write(blockArray)) - { - if(!stopIt) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] stopped because the write is stopped: "+QString::number(lastGoodPosition)); - stopIt=true; - } - } - - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=Idle; - #endif - - if(stopIt) - break; - - lastGoodPosition+=blockArray.size(); - - //wait for limitation speed if stop not query - if(maxSpeed>0) - { - numberOfBlockCopied++; - if(numberOfBlockCopied>=MultiForBigSpeed) - { - numberOfBlockCopied=0; - waitNewClockForSpeed.acquire(); - if(stopIt) - break; - } - } - } - /* - if(lastGoodPosition>16*1024) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Test error in reading: %1 (%2)").arg(file.errorString()).arg(file.error())); - errorString_internal=QString("Test error in reading: %1 (%2)").arg(file.errorString()).arg(file.error()); - emit error(); - isInReadLoop=false; - return; - } - */ - } - while(sizeReaden>0 && !stopIt); - if(lastGoodPosition>file.size()) - { - errorString_internal=tr("File truncated during the read, possible data change"); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Source truncated during the read: %1 (%2)").arg(file.errorString()).arg(QString::number(file.error()))); - emit error(); - isInReadLoop=false; - return; - } - isInReadLoop=false; - if(stopIt) - { - if(putInPause) - emit isInPause(); - stopIt=false; - return; - } - emit readIsStopped();//will product by signal connection writeThread->endIsDetected(); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stop the read"); -} - -void ReadThread::startRead() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start"); - if(tryStartRead) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] already in try start"); - return; - } - if(isInReadLoop) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] double event dropped"); - else - { - tryStartRead=true; - emit internalStartRead(); - } -} - -void ReadThread::internalClose(bool callByTheDestructor) -{ - /// \note never send signal here, because it's called by the destructor - //ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start"); - if(!fakeMode) - file.close(); - if(!callByTheDestructor) - emit closed(); - - /// \note always the last of this function - if(!fakeMode) - isOpen.release(); -} - -/** \brief set block size -\param block the new block size in KB -\return Return true if succes */ -bool ReadThread::setBlockSize(const int blockSize) -{ - if(blockSize<1 || blockSize>16384) - { - this->blockSize=blockSize*1024; - //set the new max speed because the timer have changed - setMaxSpeed(maxSpeed); - return true; - } - else - return false; -} - -/*! \brief Set the max speed -\param tempMaxSpeed Set the max speed in KB/s, 0 for no limit */ -int ReadThread::setMaxSpeed(const int maxSpeed) -{ - if(this->maxSpeed==0 && maxSpeed==0 && waitNewClockForSpeed.available()>0) - waitNewClockForSpeed.tryAcquire(waitNewClockForSpeed.available()); - this->maxSpeed=maxSpeed; - if(this->maxSpeed>0) - { - int NewInterval,newMultiForBigSpeed=0; - do - { - newMultiForBigSpeed++; - NewInterval=(blockSize*newMultiForBigSpeed)/(this->maxSpeed); - } - while (NewInterval<ULTRACOPIER_PLUGIN_MINTIMERINTERVAL); - if(NewInterval>ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL) - { - NewInterval=ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL; - newMultiForBigSpeed=1; - blockSize=this->maxSpeed*NewInterval; - } - MultiForBigSpeed=newMultiForBigSpeed; - return NewInterval; - } - else - { - waitNewClockForSpeed.release(); - return 0; - } -} - -/// \brief For give timer every X ms -void ReadThread::timeOfTheBlockCopyFinished() -{ - if(waitNewClockForSpeed.available()<ULTRACOPIER_PLUGIN_NUMSEMSPEEDMANAGEMENT) - waitNewClockForSpeed.release(); - //why not just use waitNewClockForSpeed.release() ? -} - -/// \brief do the fake open -void ReadThread::fakeOpen() -{ - fakeMode=true; - emit opened(); -} - -/// \brief do the fake writeIsStarted -void ReadThread::fakeReadIsStarted() -{ - emit readIsStarted(); -} - -/// \brief do the fake writeIsStopped -void ReadThread::fakeReadIsStopped() -{ - emit readIsStopped(); -} - -/// do the checksum -void ReadThread::startCheckSum() -{ - emit internalStartChecksum(); -} - -qint64 ReadThread::getLastGoodPosition() -{ - /*if(lastGoodPosition>file.size()) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] Bug, the lastGoodPosition is greater than the file size!"); - return file.size(); - } - else*/ - return lastGoodPosition; -} - -//reopen after an error -void ReadThread::reopen() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start"); - if(isInReadLoop) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] try reopen where read is not finish"); - return; - } - stopIt=true; - emit internalStartReopen(); -} - -bool ReadThread::internalReopen() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start"); - stopIt=false; - file.close(); - if(size_at_open!=file.size() && mtime_at_open!=QFileInfo(file).lastModified()) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] source file have changed since the last open, restart all"); - //fix this function like the close function - if(internalOpen(true)) - { - emit resumeAfterErrorByRestartAll(); - return true; - } - else - return false; - } - else - { - //fix this function like the close function - if(internalOpen(false)) - { - emit resumeAfterErrorByRestartAtTheLastPosition(); - return true; - } - else - return false; - } -} - -//set the write thread -void ReadThread::setWriteThread(WriteThread * writeThread) -{ - this->writeThread=writeThread; -} - -#ifdef ULTRACOPIER_PLUGIN_DEBUG -//to set the id -void ReadThread::setId(int id) -{ - this->id=id; -} -#endif - -void ReadThread::seekToZeroAndWait() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start"); - stopIt=true; - seekToZero=true; - emit checkIfIsWait(); -} - -void ReadThread::isInWait() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start"); - if(seekToZero) - { - seekToZero=false; - if(file.isOpen()) - seek(0); - else - internalOpen(true); - emit isSeekToZeroAndWait(); - } -} - -bool ReadThread::isReading() -{ - return isInReadLoop; -} - diff --git a/plugins/CopyEngine/Ultracopier-0.3/ReadThread.h b/plugins/CopyEngine/Ultracopier-0.3/ReadThread.h deleted file mode 100644 index 1d1eabc..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/ReadThread.h +++ /dev/null @@ -1,144 +0,0 @@ -/** \file ReadThread.h -\brief Thread changed to open/close and read the source file -\author alpha_one_x86 -\version 0.3 -\date 2011 */ - -#ifndef READTHREAD_H -#define READTHREAD_H - -#include <QThread> -#include <QByteArray> -#include <QSemaphore> -#include <QTimer> -#include <QDateTime> -#include <QFileInfo> -#include <QCryptographicHash> - -#include "WriteThread.h" -#include "Environment.h" -#include "StructEnumDefinition_CopyEngine.h" -#include "AvancedQFile.h" - -/// \brief Thread changed to open/close and read the source file -class ReadThread : public QThread -{ - Q_OBJECT -public: - explicit ReadThread(); - ~ReadThread(); -protected: - void run(); -public: - /// \brief open with the name and copy mode - void open(const QString &name,const CopyMode &mode); - /// \brief return the error string - QString errorString(); - //QByteArray read(qint64 position,qint64 maxSize); - /// \brief stop the copy - void stop(); - /// \brief put the copy in pause - bool pause(); - /// \brief resume the copy - void resume(); - /// \brief get the size of the source file - qint64 size(); - /// \brief get the last good position - qint64 getLastGoodPosition(); - /// \brief start the reading of the source file - void startRead(); - /// \brief set the current max speed in KB/s - int setMaxSpeed(int maxSpeed); - /// \brief set block size in KB - bool setBlockSize(const int blockSize); - /// \brief reopen after an error - void reopen(); - /// \brief set the write thread - void setWriteThread(WriteThread * writeThread); - #ifdef ULTRACOPIER_PLUGIN_DEBUG - /// \brief to set the id - void setId(int id); - /// \brief stat - enum ReadStat - { - Idle=0, - InodeOperation=1, - Read=2, - WaitWritePipe=3, - Checksum=4 - }; - ReadStat stat; - #endif - /// \brief return if it's reading - bool isReading(); - /// \brief executed at regular interval to do a speed throling - void timeOfTheBlockCopyFinished(); - /// \brief do the fake open - void fakeOpen(); - /// \brief do the fake readIsStarted - void fakeReadIsStarted(); - /// \brief do the fake readIsStopped - void fakeReadIsStopped(); - /// do the checksum - void startCheckSum(); -public slots: - /// \brief to reset the copy, and put at the same state when it just open - void seekToZeroAndWait(); - void postOperation(); - /// do the checksum - void checkSum(); -signals: - void error(); - void isInPause(); - void opened(); - void readIsStarted(); - void readIsStopped(); - void closed(); - void isSeekToZeroAndWait(); - void checkIfIsWait(); - void resumeAfterErrorByRestartAll(); - void resumeAfterErrorByRestartAtTheLastPosition(); - void checksumFinish(const QByteArray&); - // internal signals - void internalStartOpen(); - void internalStartChecksum(); - void internalStartReopen(); - void internalStartRead(); - void internalStartClose(); - /// \brief To debug source - void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne); - -private: - QString name; - QString errorString_internal; - AvancedQFile file; - volatile bool stopIt; - CopyMode mode; - qint64 lastGoodPosition; - volatile int blockSize; - volatile int maxSpeed; ///< The max speed in KB/s, 0 for no limit - QSemaphore waitNewClockForSpeed; - volatile int numberOfBlockCopied; ///< Multiple for count the number of block copied - volatile int multiplicatorForBigSpeed; ///< Multiple for count the number of block needed - volatile int MultiForBigSpeed; - WriteThread* writeThread; - int id; - QSemaphore isOpen; - volatile bool putInPause; - volatile bool isInReadLoop; - volatile bool seekToZero; - volatile bool tryStartRead; - qint64 size_at_open; - QDateTime mtime_at_open; - bool fakeMode; - //internal function - bool seek(qint64 position);/// \todo search if is use full -private slots: - bool internalOpen(bool resetLastGoodPosition=true); - bool internalReopen(); - void internalRead(); - void internalClose(bool callByTheDestructor=false); - void isInWait(); -}; - -#endif // READTHREAD_H diff --git a/plugins/CopyEngine/Ultracopier-0.3/RenamingRules.cpp b/plugins/CopyEngine/Ultracopier-0.3/RenamingRules.cpp deleted file mode 100644 index a09f66a..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/RenamingRules.cpp +++ /dev/null @@ -1,85 +0,0 @@ -#include "RenamingRules.h" -#include "ui_RenamingRules.h" - -#include <QMessageBox> - -RenamingRules::RenamingRules(QWidget *parent) : - QDialog(parent), - ui(new Ui::RenamingRules) -{ - ui->setupUi(this); - connectUI(); - setRenamingRules("",""); -} - -RenamingRules::~RenamingRules() -{ - delete ui; -} - -void RenamingRules::on_buttonBox_clicked(QAbstractButton *button) -{ - if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::RejectRole) - reject(); - if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::ResetRole) - { - setRenamingRules("",""); - emit sendNewRenamingRules(firstRenamingRule,otherRenamingRule); - } -} - -void RenamingRules::setRenamingRules(QString firstRenamingRule,QString otherRenamingRule) -{ - disconnectUI(); - this->firstRenamingRule=firstRenamingRule; - this->otherRenamingRule=otherRenamingRule; - if(!firstRenamingRule.isEmpty()) - ui->firstRenamingRule->setText(firstRenamingRule); - else - ui->firstRenamingRule->setText(tr("%1 - copy").arg("%name%")); - if(!otherRenamingRule.isEmpty()) - ui->otherRenamingRule->setText(otherRenamingRule); - else - ui->otherRenamingRule->setText(tr("%1 - copy (%2)").arg("%name%").arg("%number%")); - connectUI(); -} - -void RenamingRules::connectUI() -{ - connect(ui->firstRenamingRule,SIGNAL(editingFinished()),this,SLOT(firstRenamingRule_haveChanged())); - connect(ui->otherRenamingRule,SIGNAL(editingFinished()),this,SLOT(otherRenamingRule_haveChanged())); -} - -void RenamingRules::disconnectUI() -{ - disconnect(ui->firstRenamingRule,SIGNAL(editingFinished()),this,SLOT(firstRenamingRule_haveChanged())); - disconnect(ui->otherRenamingRule,SIGNAL(editingFinished()),this,SLOT(otherRenamingRule_haveChanged())); -} - -void RenamingRules::firstRenamingRule_haveChanged() -{ - QString newValue=ui->firstRenamingRule->text(); - if(newValue==tr("%1 - copy").arg("%name%")) - newValue=""; - if(newValue==firstRenamingRule) - return; - firstRenamingRule=newValue; - emit sendNewRenamingRules(firstRenamingRule,otherRenamingRule); -} - -void RenamingRules::otherRenamingRule_haveChanged() -{ - QString newValue=ui->otherRenamingRule->text(); - if(newValue==tr("%1 - copy (%2)").arg("%name%").arg("%number%")) - newValue=""; - if(newValue==otherRenamingRule) - return; - otherRenamingRule=newValue; - emit sendNewRenamingRules(firstRenamingRule,otherRenamingRule); -} - -void RenamingRules::newLanguageLoaded() -{ - ui->retranslateUi(this); - setRenamingRules(firstRenamingRule,otherRenamingRule); -} diff --git a/plugins/CopyEngine/Ultracopier-0.3/RenamingRules.h b/plugins/CopyEngine/Ultracopier-0.3/RenamingRules.h deleted file mode 100644 index 2fd9580..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/RenamingRules.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef RENAMINGRULES_H -#define RENAMINGRULES_H - -#include <QDialog> -#include <QAbstractButton> - -namespace Ui { -class RenamingRules; -} - -/** Define rules for renaming */ -class RenamingRules : public QDialog -{ - Q_OBJECT -public: - explicit RenamingRules(QWidget *parent = 0); - ~RenamingRules(); - void setRenamingRules(QString firstRenamingRule,QString otherRenamingRule); - void newLanguageLoaded(); -private: - Ui::RenamingRules *ui; - void connectUI(); - void disconnectUI(); - QString firstRenamingRule; - QString otherRenamingRule; -private slots: - void on_buttonBox_clicked(QAbstractButton *button); - void firstRenamingRule_haveChanged(); - void otherRenamingRule_haveChanged(); -signals: - void sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule); -}; - -#endif // RENAMINGRULES_H diff --git a/plugins/CopyEngine/Ultracopier-0.3/RmPath.cpp b/plugins/CopyEngine/Ultracopier-0.3/RmPath.cpp deleted file mode 100644 index a65fb97..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/RmPath.cpp +++ /dev/null @@ -1,127 +0,0 @@ -#include "RmPath.h" - -RmPath::RmPath() -{ - stopIt=false; - waitAction=false; - setObjectName("RmPath"); - moveToThread(this); - start(); -} - -RmPath::~RmPath() -{ - stopIt=true; - quit(); - wait(); -} - -void RmPath::addPath(const QString &path) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+path); - if(stopIt) - return; - emit internalStartAddPath(path); -} - -void RmPath::skip() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - emit internalStartSkip(); -} - -void RmPath::retry() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - emit internalStartRetry(); -} - -void RmPath::run() -{ - connect(this,SIGNAL(internalStartAddPath(QString)),this,SLOT(internalAddPath(QString)),Qt::QueuedConnection); - connect(this,SIGNAL(internalStartDoThisPath()),this,SLOT(internalDoThisPath()),Qt::QueuedConnection); - connect(this,SIGNAL(internalStartSkip()),this,SLOT(internalSkip()),Qt::QueuedConnection); - connect(this,SIGNAL(internalStartRetry()),this,SLOT(internalRetry()),Qt::QueuedConnection); - exec(); -} - -void RmPath::internalDoThisPath() -{ - if(waitAction || pathList.isEmpty()) - return; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+pathList.first()); - if(!rmpath(pathList.first())) - { - if(stopIt) - return; - waitAction=true; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unable to remove the folder: "+pathList.first()); - emit errorOnFolder(pathList.first(),tr("Unable to remove the folder")); - return; - } - pathList.removeFirst(); - emit firstFolderFinish(); - checkIfCanDoTheNext(); -} - -/** remplace QDir::rmpath() because it return false if the folder not exists - and seam bug with parent folder */ -bool RmPath::rmpath(const QDir &dir) -{ - if(!dir.exists()) - return true; - bool allHaveWork=true; - QFileInfoList list = dir.entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System,QDir::DirsFirst); - for (int i = 0; i < list.size(); ++i) - { - QFileInfo fileInfo(list.at(i)); - if(!fileInfo.isDir()) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"found a file: "+fileInfo.fileName()); - allHaveWork=false; - } - else - { - //return the fonction for scan the new folder - if(!rmpath(dir.absolutePath()+'/'+fileInfo.fileName()+'/')) - allHaveWork=false; - } - } - if(!allHaveWork) - return allHaveWork; - allHaveWork=dir.rmdir(dir.absolutePath()); - if(!allHaveWork) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to remove the folder: "+dir.absolutePath()); - return allHaveWork; -} - -void RmPath::internalAddPath(const QString &path) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+path); - pathList << path; - if(!waitAction) - checkIfCanDoTheNext(); -} - -void RmPath::checkIfCanDoTheNext() -{ - if(!waitAction && !stopIt && pathList.size()>0) - emit internalStartDoThisPath(); -} - -void RmPath::internalSkip() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - waitAction=false; - pathList.removeFirst(); - emit firstFolderFinish(); - checkIfCanDoTheNext(); -} - -void RmPath::internalRetry() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - waitAction=false; - checkIfCanDoTheNext(); -} - diff --git a/plugins/CopyEngine/Ultracopier-0.3/RmPath.h b/plugins/CopyEngine/Ultracopier-0.3/RmPath.h deleted file mode 100644 index 5eca5e1..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/RmPath.h +++ /dev/null @@ -1,56 +0,0 @@ -/** \file RmPath.h -\brief Remove the path given as queued rmpath -\author alpha_one_x86 -\version 0.3 -\date 2011 */ - -#ifndef RMPATH_H -#define RMPATH_H - -#include <QThread> -#include <QFileInfo> -#include <QString> -#include <QSemaphore> -#include <QStringList> -#include <QDir> - -#include "Environment.h" - -/// \brief Remove the path given as queued rmpath -class RmPath : public QThread -{ - Q_OBJECT -public: - explicit RmPath(); - ~RmPath(); - /// \brief add new path to remove - void addPath(const QString &path); -signals: - void errorOnFolder(const QFileInfo &,const QString &); - void firstFolderFinish(); - void internalStartAddPath(const QString &path); - void internalStartDoThisPath(); - void internalStartSkip(); - void internalStartRetry(); - void debugInformation(const DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne); -public slots: - void skip(); - void retry(); -private: - void run(); - bool waitAction; - bool stopIt; - bool skipIt; - QStringList pathList; - void checkIfCanDoTheNext(); - QDir dir; - bool rmpath(const QDir &dir); -private slots: - void internalDoThisPath(); - void internalAddPath(const QString &path); - void internalSkip(); - void internalRetry(); -}; - - -#endif // RMPATH_H diff --git a/plugins/CopyEngine/Ultracopier-0.3/StructEnumDefinition_CopyEngine.h b/plugins/CopyEngine/Ultracopier-0.3/StructEnumDefinition_CopyEngine.h deleted file mode 100644 index 90af91b..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/StructEnumDefinition_CopyEngine.h +++ /dev/null @@ -1,90 +0,0 @@ -/** \file StructEnumDefinition_CopyEngine.h -\brief Define the structure and enumeration used in the copy engine -\author alpha_one_x86 -\version 0.3 -\date 2010 */ - -#include <QString> -#include <QRegExp> - -#ifndef STRUCTDEF_COPYENGINE_H -#define STRUCTDEF_COPYENGINE_H - -/// \brief Define action if file exists -enum FileExistsAction -{ - FileExists_NotSet, - FileExists_Cancel, - FileExists_Skip, - FileExists_Overwrite, - FileExists_OverwriteIfNewer, - FileExists_OverwriteIfNotSameModificationDate, - FileExists_Rename -}; - -/// \brief Define action if file error -enum FileErrorAction -{ - FileError_NotSet, - FileError_Cancel, - FileError_Skip, - FileError_Retry, - FileError_PutToEndOfTheList -}; - -/// \brief to have the transfer status -enum TransferStat -{ - TransferStat_Idle=0, - TransferStat_PreOperation=1, - TransferStat_WaitForTheTransfer=2, - TransferStat_Transfer=3, - TransferStat_Checksum=4, - TransferStat_PostTransfer=5, - TransferStat_PostOperation=6 -}; - -/// \brief Define overwrite mode -/*enum OverwriteMode -{ - OverwriteMode_None, - OverwriteMode_Overwrite, - OverwriteMode_OverwriteIfNewer, - OverwriteMode_OverwriteIfNotSameModificationDate -};*/ - -/// \brief Define action if file exists -enum FolderExistsAction -{ - FolderExists_NotSet, - FolderExists_Cancel, - FolderExists_Merge, - FolderExists_Skip, - FolderExists_Rename -}; - -enum SearchType -{ - SearchType_rawText, - SearchType_simpleRegex, - SearchType_perlRegex, -}; - -enum ApplyOn -{ - ApplyOn_file, - ApplyOn_fileAndFolder, - ApplyOn_folder, -}; - -/** to store into different way the filter rules to be exported */ -struct Filters_rules -{ - QString search_text; - SearchType search_type; - ApplyOn apply_on; - bool need_match_all; - QRegExp regex; -}; - -#endif // STRUCTDEF_COPYENGINE_H diff --git a/plugins/CopyEngine/Ultracopier-0.3/TransferThread.cpp b/plugins/CopyEngine/Ultracopier-0.3/TransferThread.cpp deleted file mode 100644 index 7550d8c..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/TransferThread.cpp +++ /dev/null @@ -1,1245 +0,0 @@ -//presume bug linked as multple paralelle inode to resume after "overwrite" -//then do overwrite node function to not re-set the file name - -#include "TransferThread.h" - -#ifdef Q_CC_GNU -//this next header is needed to change file time/date under gcc -#include <utime.h> -#include <time.h> -#include <unistd.h> -#include <sys/stat.h> -#endif - -#ifndef Q_OS_UNIX -#include <windows.h> -#endif - -TransferThread::TransferThread() -{ - start(); - moveToThread(this); - needSkip = false; - transfer_stat = TransferStat_Idle; - stopIt = false; - fileExistsAction = FileExists_NotSet; - alwaysDoFileExistsAction= FileExists_NotSet; - readError = false; - writeError = false; - this->mkpathTransfer = mkpathTransfer; - readThread.setWriteThread(&writeThread); - - connect(&clockForTheCopySpeed, SIGNAL(timeout()), this, SLOT(timeOfTheBlockCopyFinished())); - maxTime=QDateTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1)); -} - -TransferThread::~TransferThread() -{ - exit(); - disconnect(&readThread); - disconnect(&writeThread); - disconnect(this); - wait(); -} - -void TransferThread::run() -{ - //ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start: "+QString::number((qint64)QThread::currentThreadId())); - transfer_stat = TransferStat_Idle; - stopIt = false; - fileExistsAction = FileExists_NotSet; - alwaysDoFileExistsAction= FileExists_NotSet; - //the error push - connect(&readThread,SIGNAL(error()), this, SLOT(getReadError()), Qt::QueuedConnection); - connect(&writeThread,SIGNAL(error()), this, SLOT(getWriteError()), Qt::QueuedConnection); - //the thread change operation - connect(this,SIGNAL(internalStartPreOperation()), this, SLOT(preOperation()), Qt::QueuedConnection); - connect(this,SIGNAL(internalStartPostOperation()), this, SLOT(postOperation()), Qt::QueuedConnection); - //the state change operation - //connect(&readThread,SIGNAL(readIsStopped()), &readThread, SLOT(postOperation()), Qt::QueuedConnection);//commented to do the checksum - connect(&readThread,SIGNAL(opened()), this, SLOT(readIsReady()), Qt::QueuedConnection); - connect(&writeThread,SIGNAL(opened()), this, SLOT(writeIsReady()), Qt::QueuedConnection); - connect(&readThread,SIGNAL(readIsStopped()), this, SLOT(readIsStopped()), Qt::QueuedConnection); - connect(&writeThread,SIGNAL(writeIsStopped()), this, SLOT(writeIsStopped()), Qt::QueuedConnection); - connect(&readThread,SIGNAL(readIsStopped()), &writeThread, SLOT(endIsDetected()), Qt::QueuedConnection); - //connect(&writeThread,SIGNAL(writeIsStopped()), &writeThread, SLOT(postOperation()), Qt::QueuedConnection);//commented to do the checksum - connect(&readThread,SIGNAL(closed()), this, SLOT(readIsClosed()), Qt::QueuedConnection); - connect(&writeThread,SIGNAL(closed()), this, SLOT(writeIsClosed()), Qt::QueuedConnection); - connect(&writeThread,SIGNAL(reopened()), this, SLOT(writeThreadIsReopened()), Qt::QueuedConnection); - connect(&readThread,SIGNAL(checksumFinish(QByteArray)), this, SLOT(readChecksumFinish(QByteArray)), Qt::QueuedConnection); - connect(&writeThread,SIGNAL(checksumFinish(QByteArray)),this, SLOT(writeChecksumFinish(QByteArray)), Qt::QueuedConnection); - //error management - connect(&readThread,SIGNAL(isSeekToZeroAndWait()), this, SLOT(readThreadIsSeekToZeroAndWait()), Qt::QueuedConnection); - connect(&readThread,SIGNAL(resumeAfterErrorByRestartAtTheLastPosition()), this, SLOT(readThreadResumeAfterError()), Qt::QueuedConnection); - connect(&readThread,SIGNAL(resumeAfterErrorByRestartAll()), &writeThread, SLOT(flushAndSeekToZero()), Qt::QueuedConnection); - connect(&writeThread,SIGNAL(flushedAndSeekedToZero()), this, SLOT(readThreadResumeAfterError()), Qt::QueuedConnection); - connect(this,SIGNAL(internalTryStartTheTransfer()), this, SLOT(internalStartTheTransfer()), Qt::QueuedConnection); - - #ifdef ULTRACOPIER_PLUGIN_DEBUG - connect(&readThread,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),Qt::QueuedConnection); - connect(&writeThread,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),Qt::QueuedConnection); - #endif - - exec(); -} - -TransferStat TransferThread::getStat() -{ - return transfer_stat; -} - -void TransferThread::startTheTransfer() -{ - emit internalTryStartTheTransfer(); -} - -void TransferThread::internalStartTheTransfer() -{ - if(transfer_stat==TransferStat_Idle) - { - if(mode!=Move) - { - /// \bug can pass here because in case of direct move on same media, it return to idle stat directly - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] can't start transfert at idle"); - } - return; - } - if(transfer_stat==TransferStat_PostOperation) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] can't start transfert at PostOperation"); - return; - } - if(transfer_stat==TransferStat_Transfer) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] can't start transfert at Transfer"); - return; - } - if(canStartTransfer) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] canStartTransfer is already set to true"); - return; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] check how start the transfer"); - canStartTransfer=true; - if(readIsReadyVariable && writeIsReadyVariable) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start directly the transfer"); - ifCanStartTransfer(); - } - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start the transfer as delayed"); -} - -void TransferThread::setFiles(const QString &source,const qint64 &size,const QString &destination,const CopyMode &mode) -{ - if(transfer_stat!=TransferStat_Idle) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] already used, source: "+source+", destination: "+destination); - return; - } - //to prevent multiple file alocation into ListThread::doNewActions_inode_manipulation() - transfer_stat = TransferStat_PreOperation; - //emit pushStat(stat,transferId); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start, source: "+source+", destination: "+destination); - this->source = source; - this->destination = destination; - this->mode = mode; - this->size = size; - fileExistsAction = FileExists_NotSet; - canStartTransfer = false; - sended_state_preOperationStopped= false; - canBeMovedDirectlyVariable = false; - fileContentError = false; - resetExtraVariable(); - emit internalStartPreOperation(); -} - -void TransferThread::setFileExistsAction(const FileExistsAction &action) -{ - if(transfer_stat!=TransferStat_PreOperation) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] already used, source: "+source+", destination: "+destination); - return; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] action: "+QString::number(action)); - if(action!=FileExists_Rename) - fileExistsAction = action; - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] rename at the wrong part, source: "+source+", destination: "+destination); - if(action==FileExists_Skip) - { - skip(); - return; - } - resetExtraVariable(); - emit internalStartPreOperation(); -} - -void TransferThread::setFileRename(const QString &nameForRename) -{ - if(transfer_stat!=TransferStat_PreOperation) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] already used, source: "+source+", destination: "+destination); - return; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] nameForRename: "+nameForRename); - destinationInfo.setFile(destination); - destination=destinationInfo.absolutePath(); - destination+=QDir::separator()+nameForRename; - destinationInfo.setFile(destination); - fileExistsAction = FileExists_NotSet; - resetExtraVariable(); - emit internalStartPreOperation(); -} - -void TransferThread::setAlwaysFileExistsAction(const FileExistsAction &action) -{ - //ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] action to do always: "+QString::number(action)); - alwaysDoFileExistsAction=action; -} - -void TransferThread::resetExtraVariable() -{ - sended_state_readStopped = false; - sended_state_writeStopped = false; - writeError = false; - readError = false; - readIsReadyVariable = false; - writeIsReadyVariable = false; - readIsFinishVariable = false; - writeIsFinishVariable = false; - readIsClosedVariable = false; - writeIsClosedVariable = false; - needSkip = false; - retry = false; - readIsOpenVariable = false; - writeIsOpenVariable = false; -} - -void TransferThread::preOperation() -{ - if(transfer_stat!=TransferStat_PreOperation) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] already used, source: "+source+", destination: "+destination); - return; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start"); - needRemove=false; - sourceInfo.setFile(source); - destinationInfo.setFile(destination); - if(isSame()) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] is same"+source); - return; - } - if(destinationExists()) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] destination exists: "+source); - return; - } - if(canBeMovedDirectly()) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] need moved directly: "+source); - canBeMovedDirectlyVariable=true; - readThread.fakeOpen(); - writeThread.fakeOpen(); - return; - } - tryOpen(); -} - -void TransferThread::tryOpen() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start source and destination: "+source+" and "+destination); - if(!readIsOpenVariable) - { - readError=false; - readThread.open(source,mode); - } - if(!writeIsOpenVariable) - { - writeError=false; - writeThread.open(destination,size,osBuffer && (!osBufferLimited || (osBufferLimited && size<osBufferLimit))); - } -} - -bool TransferThread::isSame() -{ - //check if source and destination is not the same - if(sourceInfo==destinationInfo) - { - emit fileAlreadyExists(sourceInfo,destinationInfo,true); - return true; - } - return false; -} - -bool TransferThread::destinationExists() -{ - //check if destination exists - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] overwrite: "+QString::number(fileExistsAction)+", always action: "+QString::number(alwaysDoFileExistsAction)); - if(alwaysDoFileExistsAction==FileExists_Overwrite || readError || writeError) - return false; - if(destinationInfo.exists()) - { - if(fileExistsAction==FileExists_NotSet && alwaysDoFileExistsAction==FileExists_Skip) - { - transfer_stat=TransferStat_Idle; - emit postOperationStopped(); - return true; - } - if(alwaysDoFileExistsAction==FileExists_Rename) - { - QString absolutePath=destinationInfo.absolutePath(); - QString fileName=destinationInfo.fileName(); - QString suffix=""; - QString newFileName; - //resolv the suffix - if(fileName.contains(QRegExp("^(.*)(\\.[a-z0-9]+)$"))) - { - suffix=fileName; - suffix.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\2"); - fileName.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\1"); - } - //resolv the new name - int num=1; - do - { - if(num==1) - { - if(firstRenamingRule=="") - newFileName=tr("%1 - copy").arg(fileName); - else - { - newFileName=firstRenamingRule; - newFileName.replace("%name%",fileName); - } - } - else - { - if(otherRenamingRule=="") - newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num); - else - { - newFileName=otherRenamingRule; - newFileName.replace("%name%",fileName); - newFileName.replace("%number%",QString::number(num)); - } - } - destination=absolutePath+QDir::separator()+newFileName+suffix; - destinationInfo.setFile(destination); - num++; - } - while(destinationInfo.exists()); - return false; - } - if(fileExistsAction==FileExists_OverwriteIfNewer || (fileExistsAction==FileExists_NotSet && alwaysDoFileExistsAction==FileExists_OverwriteIfNewer)) - { - if(destinationInfo.lastModified()<sourceInfo.lastModified()) - return false; - else - { - transfer_stat=TransferStat_Idle; - emit postOperationStopped(); - return true; - } - } - if(fileExistsAction==FileExists_OverwriteIfNotSameModificationDate || (fileExistsAction==FileExists_NotSet && alwaysDoFileExistsAction==FileExists_OverwriteIfNotSameModificationDate)) - { - if(destinationInfo.lastModified()!=sourceInfo.lastModified()) - return false; - else - { - transfer_stat=TransferStat_Idle; - emit postOperationStopped(); - return true; - } - } - if(fileExistsAction==FileExists_NotSet) - { - emit fileAlreadyExists(sourceInfo,destinationInfo,false); - return true; - } - } - return false; -} - -void TransferThread::tryMoveDirectly() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start the system move"); - - //move if on same mount point - QFile sourceFile(sourceInfo.absoluteFilePath()); - QFile destinationFile(destinationInfo.absoluteFilePath()); - if(destinationFile.exists() && !destinationFile.remove()) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+destinationFile.fileName()+", error: "+destinationFile.errorString()); - emit errorOnFile(destinationInfo,destinationFile.errorString()); - return; - } - QDir dir(destinationInfo.absolutePath()); - { - mkpathTransfer->acquire(); - if(!dir.exists()) - dir.mkpath(destinationInfo.absolutePath()); - mkpathTransfer->release(); - } - if(!sourceFile.rename(destinationFile.fileName())) - { - if(sourceFile.exists()) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("file not not exists %1: %2, error: %3").arg(sourceFile.fileName()).arg(destinationFile.fileName()).arg(sourceFile.errorString())); - else if(!dir.exists()) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("destination folder not exists %1: %2, error: %3").arg(sourceFile.fileName()).arg(destinationFile.fileName()).arg(sourceFile.errorString())); - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("unable to do real move %1: %2, error: %3").arg(sourceFile.fileName()).arg(destinationFile.fileName()).arg(sourceFile.errorString())); - emit errorOnFile(sourceFile,sourceFile.errorString()); - return; - } - readThread.fakeReadIsStarted(); - writeThread.fakeWriteIsStarted(); - readThread.fakeReadIsStopped(); - writeThread.fakeWriteIsStopped(); -} - -bool TransferThread::canBeMovedDirectly() -{ - //move if on same mount point - #if defined (Q_OS_LINUX) || defined (Q_OS_WIN32) - if(mode!=Move) - return false; - if(mountSysPoint.size()==0) - return false; - if(getDrive(destinationInfo.fileName())==getDrive(sourceInfo.fileName())) - return true; - #endif - return false; -} - -void TransferThread::readIsReady() -{ - if(readIsReadyVariable) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] double event dropped"); - return; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start"); - readIsReadyVariable=true; - readIsOpenVariable=true; - readIsClosedVariable=false; - ifCanStartTransfer(); -} - -void TransferThread::ifCanStartTransfer() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] readIsReadyVariable: "+QString::number(readIsReadyVariable)+", writeIsReadyVariable: "+QString::number(writeIsReadyVariable)); - if(readIsReadyVariable && writeIsReadyVariable) - { - transfer_stat=TransferStat_WaitForTheTransfer; - sended_state_readStopped = false; - sended_state_writeStopped = false; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stat=WaitForTheTransfer"); - if(!sended_state_preOperationStopped) - { - sended_state_preOperationStopped=true; - emit preOperationStopped(); - } - if(canStartTransfer) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stat=Transfer"); - transfer_stat=TransferStat_Transfer; - if(!canBeMovedDirectlyVariable) - { - needRemove=true; - readThread.startRead(); - } - else - tryMoveDirectly(); - emit pushStat(transfer_stat,transferId); - } - //else - //emit pushStat(stat,transferId); - } -} - -void TransferThread::writeIsReady() -{ - if(writeIsReadyVariable) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] double event dropped"); - return; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start"); - writeIsReadyVariable=true; - writeIsOpenVariable=true; - writeIsClosedVariable=false; - ifCanStartTransfer(); -} - - -//set the copy info and options before runing -void TransferThread::setRightTransfer(const bool doRightTransfer) -{ - this->doRightTransfer=doRightTransfer; -} - -//set keep date -void TransferThread::setKeepDate(const bool keepDate) -{ - this->keepDate=keepDate; -} - -//set the current max speed in KB/s -void TransferThread::setMaxSpeed(int maxSpeed) -{ - int interval=readThread.setMaxSpeed(maxSpeed); - writeThread.setMaxSpeed(maxSpeed); - if(maxSpeed>0) - { - clockForTheCopySpeed.setInterval(interval); - if(!clockForTheCopySpeed.isActive())//seam useless !this->isFinished() - clockForTheCopySpeed.start(); - } - else - { - if(clockForTheCopySpeed.isActive()) - clockForTheCopySpeed.stop(); - } -} - -//set block size in KB -bool TransferThread::setBlockSize(const unsigned int blockSize) -{ - this->blockSize=blockSize; - return readThread.setBlockSize(blockSize) && writeThread.setBlockSize(blockSize); -} - -//pause the copy -void TransferThread::pause() -{ - if(transfer_stat==TransferStat_Idle) - return; - readThread.pause(); -} - -//resume the copy -void TransferThread::resume() -{ - if(transfer_stat==TransferStat_Idle) - return; - readThread.resume(); -} - -//stop the current copy -void TransferThread::stop() -{ - stopIt=true; - if(transfer_stat==TransferStat_Idle) - return; - readThread.stop(); - writeThread.stop(); -} - -void TransferThread::readIsFinish() -{ - if(readIsFinishVariable) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] double event dropped"); - return; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start"); - readIsFinishVariable=true; - canStartTransfer=false; - //check here if need start checksuming or not - real_doChecksum=doChecksum && (!checksumOnlyOnError || fileContentError); - if(real_doChecksum) - { - readIsFinishVariable=false; - transfer_stat=TransferStat_Checksum; - sourceChecksum=QByteArray(); - destinationChecksum=QByteArray(); - readThread.startCheckSum(); - } - else - { - transfer_stat=TransferStat_PostTransfer; - readThread.postOperation(); - } - emit pushStat(transfer_stat,transferId); -} - -void TransferThread::writeIsFinish() -{ - if(writeIsFinishVariable) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] double event dropped"); - return; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start"); - writeIsFinishVariable=true; - //check here if need start checksuming or not - if(real_doChecksum) - { - writeIsFinishVariable=false; - transfer_stat=TransferStat_Checksum; - writeThread.startCheckSum(); - } - else - writeThread.postOperation(); -} - -void TransferThread::readChecksumFinish(const QByteArray& checksum) -{ - sourceChecksum=checksum; - compareChecksum(); -} - -void TransferThread::writeChecksumFinish(const QByteArray& checksum) -{ - destinationChecksum=checksum; - compareChecksum(); -} - -void TransferThread::compareChecksum() -{ - if(sourceChecksum.size()==0) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] the checksum of source is missing"); - return; - } - if(destinationChecksum.size()==0) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] the checksum of destination is missing"); - return; - } - if(sourceChecksum==destinationChecksum) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] the checksum match"); - readThread.postOperation(); - writeThread.postOperation(); - transfer_stat=TransferStat_PostTransfer; - emit pushStat(transfer_stat,transferId); - } - else - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] the checksum not match"); - //emit error here, and wait to resume - emit errorOnFile(destinationInfo,tr("The checksums not match")); - } -} - -void TransferThread::readIsClosed() -{ - if(readIsClosedVariable) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] double event dropped"); - return; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start"); - readIsClosedVariable=true; - checkIfAllIsClosed(); -} - -void TransferThread::writeIsClosed() -{ - if(writeIsClosedVariable) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] double event dropped"); - return; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start"); - writeIsClosedVariable=true; - checkIfAllIsClosed(); -} - -bool TransferThread::checkIfAllIsClosed() -{ - if((readError || writeError) && !needSkip) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] resolve error before progress"); - return false; - } - if((!readIsReadyVariable || readIsClosedVariable) && (!writeIsReadyVariable || writeIsClosedVariable)) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] emit internalStartPostOperation() to do the real post operation"); - transfer_stat=TransferStat_PostOperation; - //emit pushStat(stat,transferId); - emit internalStartPostOperation(); - return true; - } - else - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] "+QString("wait self close: readIsReadyVariable: %1, readIsClosedVariable: %2, writeIsReadyVariable: %3, writeIsClosedVariable: %4") - .arg(readIsReadyVariable) - .arg(readIsClosedVariable) - .arg(writeIsReadyVariable) - .arg(writeIsClosedVariable) - ); - return false; - } -} - -/// \todo found way to retry that's -/// \todo the rights copy -void TransferThread::postOperation() -{ - if(transfer_stat!=TransferStat_PostOperation) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] need be in transfer, source: "+source+", destination: "+destination+", stat:"+QString::number(transfer_stat)); - return; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start"); - //all except closing - if((readError || writeError) && !needSkip)//normally useless by checkIfAllIsFinish() - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] resume after error"); - return; - } - - if(!needSkip) - { - if(!doFilePostOperation()) - return; - - //remove source in moving mode - if(mode==Move && !canBeMovedDirectlyVariable) - { - if(QFile::exists(destination)) - { - QFile sourceFile(source); - if(!sourceFile.remove()) - { - emit errorOnFile(sourceInfo,sourceFile.errorString()); - return; - } - } - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] try remove source but destination not exists!"); - } - } - else//do difference skip a file and skip this error case - { - if(needRemove && QFile::exists(destination)) - { - QFile destinationFile(destination); - if(!destinationFile.remove()) - { - //emit errorOnFile(sourceInfo,destinationFile.errorString()); - //return; - } - } - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] try remove destination but not exists!"); - } - transfer_stat=TransferStat_Idle; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] emit postOperationStopped()"); - emit postOperationStopped(); -} - -bool TransferThread::doFilePostOperation() -{ - //do operation needed by copy - if(!canBeMovedDirectlyVariable) - { - //set the time if no write thread used - if(keepDate) - changeFileDateTime(destination,source);//can't do that's after move because after move the source not exist - /* - ignore it, because need correct management, mainly with move - if(!) - { - emit errorOnFile(destinationInfo,tr("Unable to change the date"));//destination.errorString() - return false; - }*/ - } - - if(stopIt) - return false; - - return true; -} - -////////////////////////////////////////////////////////////////// -/////////////////////// Error management ///////////////////////// -////////////////////////////////////////////////////////////////// - -void TransferThread::getWriteError() -{ - if(writeError) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] already in write error!"); - return; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start"); - fileContentError = true; - writeError = true; - writeIsReadyVariable = false; - writeError_source_seeked = false; - writeError_destination_reopened = false; - emit errorOnFile(destinationInfo,writeThread.errorString()); -} - -void TransferThread::getReadError() -{ - if(readError) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] already in read error!"); - return; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start"); - fileContentError = true; - readError = true; - writeIsReadyVariable = false; - readIsReadyVariable = false; - emit errorOnFile(sourceInfo,readThread.errorString()); -} - -//retry after error -void TransferThread::retryAfterError() -{ - //opening error - if(transfer_stat==TransferStat_PreOperation) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] is not idle, source: "+source+", destination: "+destination+", stat: "+QString::number(transfer_stat)); - tryOpen(); - return; - } - //data streaming error - if(transfer_stat!=TransferStat_PostOperation && transfer_stat!=TransferStat_Transfer && transfer_stat!=TransferStat_Checksum) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"["+QString::number(id)+"] is not idle, source: "+source+", destination: "+destination+", stat: "+QString::number(transfer_stat)); - return; - } - if(canBeMovedDirectlyVariable) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] retry the system move"); - tryMoveDirectly(); - return; - } - if(transfer_stat==TransferStat_Checksum) - { - if(writeError) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start and resume the write error"); - writeThread.reopen(); - } - else if(readError) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start and resume the read error"); - readThread.reopen(); - } - else //only checksum difference - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] retry all the transfer"); - canStartTransfer=true; - ifCanStartTransfer(); - } - return; - } - if(writeError) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start and resume the write error"); - readThread.seekToZeroAndWait(); - writeThread.reopen(); - } - else if(readError) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start and resume the read error"); - readThread.reopen(); - } - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] unknow error resume"); -} - -void TransferThread::writeThreadIsReopened() -{ - if(writeError_destination_reopened) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] double event dropped"); - return; - } - writeError_destination_reopened=true; - if(transfer_stat==TransferStat_Checksum) - { - writeThread.startCheckSum(); - return; - } - if(writeError_source_seeked && writeError_destination_reopened) - resumeTransferAfterWriteError(); -} - -void TransferThread::readThreadIsSeekToZeroAndWait() -{ - if(writeError_source_seeked) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] double event dropped"); - return; - } - writeError_source_seeked=true; - if(writeError_source_seeked && writeError_destination_reopened) - resumeTransferAfterWriteError(); -} - -void TransferThread::resumeTransferAfterWriteError() -{ - writeError=false; -/******************************** - if(canStartTransfer) - readThread.startRead(); -useless, because the open destination event -will restart the transfer as normal -*********************************/ -/********************************* -if(!canStartTransfer) - stat=WaitForTheTransfer; -useless because already do at open event -**********************************/ - //if is in wait - if(!canStartTransfer) - emit checkIfItCanBeResumed(); -} - -void TransferThread::readThreadResumeAfterError() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start"); - readError=false; - writeIsReady(); - readIsReady(); -} - -////////////////////////////////////////////////////////////////// -///////////////////////// Normal event /////////////////////////// -////////////////////////////////////////////////////////////////// - -void TransferThread::readIsStopped() -{ - if(!sended_state_readStopped) - { - sended_state_readStopped=true; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] emit readIsStopped()"); - emit readStopped(); - } - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] drop dual read stopped"); - readIsFinish(); -} - -void TransferThread::writeIsStopped() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start"); - if(!sended_state_writeStopped) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] emit writeStopped()"); - sended_state_writeStopped=true; - emit writeStopped(); - } - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] double event dropped"); - writeIsFinish(); -} - -void TransferThread::timeOfTheBlockCopyFinished() -{ - readThread.timeOfTheBlockCopyFinished(); -} - -//get drive of an file or folder -QString TransferThread::getDrive(QString fileOrFolder) -{ - for (int i = 0; i < mountSysPoint.size(); ++i) { - if(fileOrFolder.startsWith(mountSysPoint.at(i))) - return mountSysPoint.at(i); - } - //if unable to locate the right mount point - return ""; -} - -//set drive list, used in getDrive() -void TransferThread::setDrive(QStringList drives) -{ - mountSysPoint=drives; -} - -//fonction to edit the file date time -bool TransferThread::changeFileDateTime(const QString &source,const QString &destination) -{ - /* - if(maxTime>=sourceInfo.lastModified()) - return; - */ - /** Why not do it with Qt? Because it not support setModificationTime(), and get the time with Qt, that's mean use local time where in C is UTC time */ - #ifdef Q_OS_UNIX - #ifdef Q_OS_LINUX - struct stat info; - stat(source.toLatin1().data(),&info); - time_t ctime=info.st_ctim.tv_sec; - time_t actime=info.st_atim.tv_sec; - time_t modtime=info.st_mtim.tv_sec; - //this function avalaible on unix and mingw - utimbuf butime; - butime.actime=actime; - butime.modtime=modtime; - //creation time not exists into unix world - Q_UNUSED(ctime) - return utime(destination.toLatin1().data(),&butime)==0; - #else //mainly for mac - QFileInfo fileInfo(destination); - time_t ctime=fileInfo.created().toTime_t(); - time_t actime=fileInfo.lastRead().toTime_t(); - time_t modtime=fileInfo.lastModified().toTime_t(); - //this function avalaible on unix and mingw - utimbuf butime; - butime.actime=actime; - butime.modtime=modtime; - //creation time not exists into unix world - Q_UNUSED(ctime) - return utime(destination.toLatin1().data(),&butime)==0; - #endif - #else - #ifdef Q_OS_WIN32 - #ifdef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY - struct __stat64 info; - _stat64(source.toLatin1().data(),&info); - time_t ctime=info.st_ctime; - time_t actime=info.st_atime; - time_t modtime=info.st_mtime; - //this function avalaible on unix and mingw - utimbuf butime; - butime.actime=actime; - butime.modtime=modtime; - //creation time not exists into unix world - Q_UNUSED(ctime) - return utime(destination.toLatin1().data(),&butime)==0; - #else - wchar_t filePath[65535]; - source.toWCharArray(filePath); - HANDLE hFileSouce = CreateFile(filePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); - destination.toWCharArray(filePath); - HANDLE hFileDestination = CreateFile(filePath, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); - if(hFileSouce == INVALID_HANDLE_VALUE) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] open failed to read"); - return false; - } - if(hFileDestination == INVALID_HANDLE_VALUE) - { - CloseHandle(hFileSouce); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] open failed to write"); - return false; - } - FILETIME ftCreate, ftAccess, ftWrite; - if(!GetFileTime(hFileSouce, &ftCreate, &ftAccess, &ftWrite)) - { - CloseHandle(hFileSouce); - CloseHandle(hFileDestination); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] unable to get the file time"); - return false; - } - if(!SetFileTime(hFileDestination, &ftCreate, &ftAccess, &ftWrite)) - { - CloseHandle(hFileSouce); - CloseHandle(hFileDestination); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] unable to set the file time"); - return false; - } - CloseHandle(hFileSouce); - CloseHandle(hFileDestination); - return true; - #endif - #else - return false; - #endif - #endif - return false; -} - -//skip the copy -void TransferThread::skip() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start with stat: "+QString::number(transfer_stat)); - switch(transfer_stat) - { - case TransferStat_PreOperation: - case TransferStat_WaitForTheTransfer: - needSkip=true; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] case WaitForTheTransfer or PreOperation, readIsReadyVariable: "+QString::number(readIsReadyVariable)+", readIsClosedVariable: "+QString::number(readIsClosedVariable)+", writeIsReadyVariable: "+QString::number(writeIsReadyVariable)+", writeIsClosedVariable: "+QString::number(writeIsClosedVariable)); - //check if all is source and destination is closed - if(!checkIfAllIsClosed()) - { - if(readIsReadyVariable && !readIsClosedVariable) - readThread.stop(); - if(writeIsReadyVariable && !writeIsClosedVariable) - writeThread.stop(); - } - break; - case TransferStat_Transfer: - needSkip=true; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] case Transfer, readIsReadyVariable: "+QString::number(readIsReadyVariable)+", readIsClosedVariable: "+QString::number(readIsClosedVariable)+", writeIsReadyVariable: "+QString::number(writeIsReadyVariable)+", writeIsClosedVariable: "+QString::number(writeIsClosedVariable)); - if(!checkIfAllIsClosed()) - { - if(readIsReadyVariable && !readIsClosedVariable) - readThread.stop(); - if(writeIsReadyVariable && !writeIsClosedVariable) - writeThread.stop(); - } - break; - case TransferStat_Checksum: - needSkip=true; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] case Transfer, readIsReadyVariable: "+QString::number(readIsReadyVariable)+", readIsClosedVariable: "+QString::number(readIsClosedVariable)+", writeIsReadyVariable: "+QString::number(writeIsReadyVariable)+", writeIsClosedVariable: "+QString::number(writeIsClosedVariable)); - if(!checkIfAllIsClosed()) - { - if(readIsReadyVariable && !readIsClosedVariable) - readThread.stop(); - if(writeIsReadyVariable && !writeIsClosedVariable) - writeThread.stop(); - } - break; - case TransferStat_PostOperation: - //do nothing because here is closing... - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] is already in post op"); - break; - default: - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] can skip in this state!"); - return; - } -} - -//return info about the copied size -qint64 TransferThread::copiedSize() -{ - switch(transfer_stat) - { - case TransferStat_Transfer: - case TransferStat_PostOperation: - return readThread.getLastGoodPosition(); - case TransferStat_Checksum: - return transferSize; - default: - return 0; - } -} - -//retry after error -void TransferThread::putAtBottom() -{ - emit tryPutAtBottom(); -} - -void TransferThread::set_osBufferLimit(unsigned int osBufferLimit) -{ - this->osBufferLimit=osBufferLimit; -} - -#ifdef ULTRACOPIER_PLUGIN_DEBUG -//to set the id -void TransferThread::setId(int id) -{ - this->id=id; - readThread.setId(id); - writeThread.setId(id); -} - -QChar TransferThread::readingLetter() -{ - switch(readThread.stat) - { - case ReadThread::Idle: - return '_'; - break; - case ReadThread::InodeOperation: - return 'I'; - break; - case ReadThread::Read: - return 'R'; - break; - case ReadThread::WaitWritePipe: - return 'W'; - break; - case ReadThread::Checksum: - return 'S'; - break; - default: - return '?'; - } -} - -QChar TransferThread::writingLetter() -{ - switch(writeThread.stat) - { - case WriteThread::Idle: - return '_'; - break; - case WriteThread::InodeOperation: - return 'I'; - break; - case WriteThread::Write: - return 'W'; - break; - case WriteThread::Close: - return 'C'; - break; - case WriteThread::Read: - return 'R'; - break; - case WriteThread::Checksum: - return 'S'; - break; - default: - return '?'; - } -} - -#endif - -void TransferThread::setMkpathTransfer(QSemaphore *mkpathTransfer) -{ - this->mkpathTransfer=mkpathTransfer; - writeThread.setMkpathTransfer(mkpathTransfer); -} - -void TransferThread::set_doChecksum(bool doChecksum) -{ - this->doChecksum=doChecksum; -} - -void TransferThread::set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible) -{ - this->checksumIgnoreIfImpossible=checksumIgnoreIfImpossible; -} - -void TransferThread::set_checksumOnlyOnError(bool checksumOnlyOnError) -{ - this->checksumOnlyOnError=checksumOnlyOnError; -} - -void TransferThread::set_osBuffer(bool osBuffer) -{ - this->osBuffer=osBuffer; -} - -void TransferThread::set_osBufferLimited(bool osBufferLimited) -{ - this->osBufferLimited=osBufferLimited; -} - -//not copied size, because that's count to the checksum, ... -quint64 TransferThread::realByteTransfered() -{ - switch(transfer_stat) - { - case TransferStat_Transfer: - case TransferStat_PostOperation: - case TransferStat_Checksum: - return readThread.getLastGoodPosition(); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] transferSize: "+QString::number(transferSize)); - return transferSize; - default: - return 0; - } -} - -void TransferThread::setRenamingRules(QString firstRenamingRule,QString otherRenamingRule) -{ - this->firstRenamingRule=firstRenamingRule; - this->otherRenamingRule=otherRenamingRule; -} diff --git a/plugins/CopyEngine/Ultracopier-0.3/TransferThread.h b/plugins/CopyEngine/Ultracopier-0.3/TransferThread.h deleted file mode 100644 index c32ccf3..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/TransferThread.h +++ /dev/null @@ -1,218 +0,0 @@ -/** \file TransferThread.h -\brief Thread changed to manage the inode operation, the signals, canceling, pre and post operations -\author alpha_one_x86 -\version 0.3 -\date 2011 */ - -#ifndef TRANSFERTHREAD_H -#define TRANSFERTHREAD_H - -#include <QThread> -#include <QFileInfo> -#include <QString> -#include <QList> -#include <QStringList> -#include <QDateTime> -#include <QDir> - -#include "ReadThread.h" -#include "WriteThread.h" -#include "Environment.h" -#include "StructEnumDefinition_CopyEngine.h" - -/// \brief Thread changed to manage the inode operation, the signals, canceling, pre and post operations -class TransferThread : public QThread -{ - Q_OBJECT -public: - explicit TransferThread(); - ~TransferThread(); - /// \brief get transfer stat - TransferStat getStat(); - /// \brief get drive of an file or folder - QString getDrive(QString fileOrFolder); - /// \brief set drive list, used in getDrive() - void setDrive(QStringList drives); - #ifdef ULTRACOPIER_PLUGIN_DEBUG - /// \brief to set the id - void setId(int id); - /// \brief get the reading letter - QChar readingLetter(); - /// \brief get the writing letter - QChar writingLetter(); - #endif - /// \brief to have semaphore, and try create just one by one - void setMkpathTransfer(QSemaphore *mkpathTransfer); - /// \brief to store the transfer id - quint64 transferId; - /// \brief to store the transfer size - quint64 transferSize; - - void set_doChecksum(bool doChecksum); - void set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible); - void set_checksumOnlyOnError(bool checksumOnlyOnError); - void set_osBuffer(bool osBuffer); - void set_osBufferLimited(bool osBufferLimited); - - //not copied size, because that's count to the checksum, ... - quint64 realByteTransfered(); -protected: - void run(); -signals: - //to send state - void preOperationStopped(); - void checkIfItCanBeResumed(); - //void transferStarted();//not sended (and not used then) - void readStopped(); - void writeStopped(); - void postOperationStopped(); - //get dialog - void fileAlreadyExists(QFileInfo,QFileInfo,bool isSame); - void errorOnFile(QFileInfo,QString); - //internal signal - void internalStartPostOperation(); - void internalStartPreOperation(); - void internalStartResumeAfterErrorAndSeek(); - /// \brief To debug source - void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne); - void tryPutAtBottom(); - //force into the right thread - void internalTryStartTheTransfer(); - /// \brief update the transfer stat - void pushStat(TransferStat,quint64); -public slots: - /// \brief to start the transfer of data - void startTheTransfer(); - /// \brief to set files to transfer - void setFiles(const QString &source,const qint64 &size,const QString &destination,const CopyMode &mode); - /// \brief to set file exists action to do - void setFileExistsAction(const FileExistsAction &action); - /// \brief to set the new name of the destination - void setFileRename(const QString &nameForRename); - /// \brief to start the transfer of data - void setAlwaysFileExistsAction(const FileExistsAction &action); - /// \brief set the copy info and options before runing - void setRightTransfer(const bool doRightTransfer); - /// \brief set keep date - void setKeepDate(const bool keepDate); - /// \brief set the current max speed in KB/s - void setMaxSpeed(int maxSpeed); - /// \brief set block size in KB - bool setBlockSize(const unsigned int blockSize); - /// \brief pause the copy - void pause(); - /// \brief resume the copy - void resume(); - /// \brief stop the copy - void stop(); - /// \brief skip the copy - void skip(); - /// \brief retry after error - void retryAfterError(); - /// \brief return info about the copied size - qint64 copiedSize(); - /// \brief put the current file at bottom - void putAtBottom(); - - void set_osBufferLimit(unsigned int osBufferLimit); - void setRenamingRules(QString firstRenamingRule,QString otherRenamingRule); -private slots: - void preOperation(); - void readIsReady(); - void writeIsReady(); - void readIsFinish(); - void writeIsFinish(); - void readIsClosed(); - void writeIsClosed(); - void postOperation(); - void getWriteError(); - void getReadError(); - void readChecksumFinish(const QByteArray&); - void writeChecksumFinish(const QByteArray&); - void compareChecksum(); - //void syncAfterErrorAndReadFinish(); - void readThreadIsSeekToZeroAndWait(); - void writeThreadIsReopened(); - void readThreadResumeAfterError(); - //to filter the emition of signal - void readIsStopped(); - void writeIsStopped(); - //speed limitation - void timeOfTheBlockCopyFinished(); - //force into the right thread - void internalStartTheTransfer(); -private: - enum MoveReturn - { - MoveReturn_skip=0, - MoveReturn_moved=1, - MoveReturn_error=2 - }; - TransferStat transfer_stat; - ReadThread readThread; - WriteThread writeThread; - QString source; - QString destination; - CopyMode mode; - QTimer clockForTheCopySpeed; ///< For the speed throttling - bool doRightTransfer; - bool keepDate; - bool readIsReadyVariable; - bool writeIsReadyVariable; - bool readIsOpenVariable; - bool writeIsOpenVariable; - bool readIsFinishVariable; - bool writeIsFinishVariable; - bool readIsClosedVariable; - bool writeIsClosedVariable; - bool canBeMovedDirectlyVariable; - QByteArray sourceChecksum,destinationChecksum; - volatile bool stopIt; - volatile bool canStartTransfer; - int blockSize; - bool retry; - QFileInfo sourceInfo; - QFileInfo destinationInfo; - QStringList mountSysPoint; - qint64 size; - FileExistsAction fileExistsAction; - FileExistsAction alwaysDoFileExistsAction; - bool needSkip,needRemove; - QDateTime maxTime; - int id; - QSemaphore *mkpathTransfer; - bool doChecksum,real_doChecksum; - bool checksumIgnoreIfImpossible; - bool checksumOnlyOnError; - bool osBuffer; - bool osBufferLimited; - unsigned int osBufferLimit; - QString firstRenamingRule; - QString otherRenamingRule; - //error management - bool writeError,writeError_source_seeked,writeError_destination_reopened; - bool readError; - bool fileContentError; - //different pre-operation - bool isSame(); - bool destinationExists(); - bool canBeMovedDirectly(); - void tryMoveDirectly(); - void ifCanStartTransfer(); - //fonction to edit the file date time - bool changeFileDateTime(const QString &source,const QString &destination); - void resetExtraVariable(); - //error management function - void resumeTransferAfterWriteError(); - //to send state - bool sended_state_preOperationStopped; - bool sended_state_readStopped; - bool sended_state_writeStopped; - //different post-operation - bool checkIfAllIsClosed(); - bool doFilePostOperation(); - //different pre-operation - void tryOpen(); -}; - -#endif // TRANSFERTHREAD_H diff --git a/plugins/CopyEngine/Ultracopier-0.3/WriteThread.cpp b/plugins/CopyEngine/Ultracopier-0.3/WriteThread.cpp deleted file mode 100644 index 448e8dc..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/WriteThread.cpp +++ /dev/null @@ -1,508 +0,0 @@ -#include "WriteThread.h" - -#include <QDir> - -WriteThread::WriteThread() -{ - stopIt=false; - isOpen.release(); - start(); - moveToThread(this); - setObjectName("write"); - this->mkpathTransfer = mkpathTransfer; - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=Idle; - #endif - CurentCopiedSize=0; - buffer=false; - putInPause=false; - needRemoveTheFile=false; - blockSize=1024*1024; -} - -WriteThread::~WriteThread() -{ - stopIt=true; - needRemoveTheFile=true; - freeBlock.release(); - // useless because stopIt will close all thread, but if thread not runing run it - //endIsDetected(); - emit internalStartClose(); - isOpen.acquire(); - disconnect(this); - quit(); - wait(); -} - -void WriteThread::run() -{ - connect(this,SIGNAL(internalStartOpen()), this,SLOT(internalOpen()), Qt::QueuedConnection); - connect(this,SIGNAL(internalStartReopen()), this,SLOT(internalReopen()), Qt::QueuedConnection); - connect(this,SIGNAL(internalStartWrite()), this,SLOT(internalWrite()), Qt::QueuedConnection); - connect(this,SIGNAL(internalStartClose()), this,SLOT(internalClose()), Qt::QueuedConnection); - connect(this,SIGNAL(internalStartEndOfFile()), this,SLOT(internalEndOfFile()), Qt::QueuedConnection); - connect(this,SIGNAL(internalStartFlushAndSeekToZero()), this,SLOT(internalFlushAndSeekToZero()),Qt::QueuedConnection); - connect(this,SIGNAL(internalStartChecksum()), this,SLOT(checkSum()), Qt::QueuedConnection); - exec(); -} - -bool WriteThread::internalOpen() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] internalOpen destination: "+name); - if(stopIt) - return false; - if(file.isOpen()) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] already open! destination: "+file.fileName()); - return false; - } - //set to LISTBLOCKSIZE - while(freeBlock.available()<ULTRACOPIER_PLUGIN_MAXBUFFERBLOCK) - freeBlock.release(); - if(freeBlock.available()>ULTRACOPIER_PLUGIN_MAXBUFFERBLOCK) - freeBlock.acquire(freeBlock.available()-ULTRACOPIER_PLUGIN_MAXBUFFERBLOCK); - stopIt=false; - CurentCopiedSize=0; - endDetected=false; - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=InodeOperation; - #endif - file.setFileName(name); - //mkpath check if exists and return true if already exists - QFileInfo destinationInfo(file); - QDir destinationFolder; - { - mkpathTransfer->acquire(); - if(!destinationFolder.exists(destinationInfo.absolutePath())) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] "+QString("Try create the path: %1") - .arg(destinationInfo.absolutePath())); - if(!destinationFolder.mkpath(destinationInfo.absolutePath())) - { - if(!destinationFolder.exists(destinationInfo.absolutePath())) - { - /// \todo do real folder error here - errorString_internal="mkpath error on destination"; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Unable create the folder: %1, error: %2") - .arg(destinationInfo.absolutePath()) - .arg(errorString_internal)); - emit error(); - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=Idle; - #endif - return false; - } - } - } - mkpathTransfer->release(); - } - if(stopIt) - return false; - //try open it - QIODevice::OpenMode flags=QIODevice::ReadWrite; - if(!buffer) - flags|=QIODevice::Unbuffered; - if(file.open(flags)) - { - if(stopIt) - return false; - file.seek(0); - if(stopIt) - return false; - file.resize(startSize); - if(stopIt) - return false; - emit opened(); - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=Idle; - #endif - isOpen.acquire(); - needRemoveTheFile=false; - return true; - } - else - { - if(stopIt) - return false; - errorString_internal=file.errorString(); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Unable to open: %1, error: %2").arg(name).arg(errorString_internal)); - emit error(); - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=Idle; - #endif - return false; - } -} - -void WriteThread::open(const QString &name,const quint64 &startSize,const bool &buffer) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] open destination: "+name); - if(stopIt) - return; - fakeMode=false; - this->name=name; - this->startSize=startSize; - this->buffer=buffer; - endDetected=false; - emit internalStartOpen(); -} - -void WriteThread::endIsDetected() -{ - if(endDetected) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] double event dropped"); - return; - } - endDetected=true; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start"); - emit internalStartEndOfFile(); -} - -QString WriteThread::errorString() -{ - return errorString_internal; -} - -bool WriteThread::write(const QByteArray &data) -{ - if(stopIt) - return false; - freeBlock.acquire(); - if(stopIt) - return false; - { - QMutexLocker lock_mutex(&accessList); - theBlockList.append(data); - } - emit internalStartWrite(); - return true; -} - -void WriteThread::stop() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stop()"); - needRemoveTheFile=true; - stopIt=true; - if(isOpen.available()>0) - return; - freeBlock.release(); - // useless because stopIt will close all thread, but if thread not runing run it - endIsDetected(); - //for the stop for skip: void TransferThread::skip() - emit internalStartClose(); -} - -void WriteThread::flushBuffer() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start"); - freeBlock.release(); - freeBlock.acquire(); - { - QMutexLocker lock_mutex(&accessList); - theBlockList.clear(); - } -} - -void WriteThread::internalEndOfFile() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] writeIsStopped"); - emit writeIsStopped(); -} - -void WriteThread::internalWrite() -{ - if(stopIt) - return; - //read one block - if(theBlockList.size()<=0) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] End detected of the file"); - return; - } - else - { - QMutexLocker lock_mutex(&accessList); - blockArray=theBlockList.first(); - theBlockList.removeFirst(); - } - //write one block - freeBlock.release(); - - if(stopIt) - return; - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=Write; - #endif - bytesWriten=file.write(blockArray); - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=Idle; - #endif - //mutex for stream this data - if(CurentCopiedSize==0) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] emit writeIsStarted()"); - emit writeIsStarted(); - } - CurentCopiedSize+=bytesWriten; - if(stopIt) - return; - if(file.error()!=QFile::NoError) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Error in writing: %1 (%2)").arg(file.errorString()).arg(file.error())); - errorString_internal=QString("Error in writing: %1 (%2)").arg(file.errorString()).arg(file.error()); - stopIt=true; - emit error(); - return; - } - if(bytesWriten!=blockArray.size()) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Error in writing, bytesWriten: %1, blockArray.size(): %2").arg(bytesWriten).arg(blockArray.size())); - errorString_internal=QString("Error in writing, bytesWriten: %1, blockArray.size(): %2").arg(bytesWriten).arg(blockArray.size()); - stopIt=true; - emit error(); - return; - } - lastGoodPosition+=bytesWriten; -} - -void WriteThread::postOperation() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start"); - emit internalStartClose(); -} - -void WriteThread::internalClose(bool emitSignal) -{ - /// \note never send signal here, because it's called by the destructor - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=Close; - #endif - if(!fakeMode && file.isOpen()) - { - if(!needRemoveTheFile) - { - if(startSize!=CurentCopiedSize) - file.resize(CurentCopiedSize); - } - file.close(); - if(needRemoveTheFile) - { - if(file.remove()) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] unable to remove the destination file"); - } - needRemoveTheFile=false; - } - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=Idle; - #endif - if(emitSignal) - emit closed(); - - /// \note always the last of this function - if(!fakeMode) - isOpen.release(); -} - -void WriteThread::internalReopen() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start"); - internalClose(false); - flushBuffer(); - stopIt=false; - CurentCopiedSize=0; - if(internalOpen()) - emit reopened(); -} - -void WriteThread::reopen() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] start"); - stopIt=true; - endDetected=false; - emit internalStartReopen(); -} - -#ifdef ULTRACOPIER_PLUGIN_DEBUG -//to set the id -void WriteThread::setId(int id) -{ - this->id=id; -} -#endif - -/// \brief do the fake open -void WriteThread::fakeOpen() -{ - fakeMode=true; - emit opened(); -} - -/// \brief do the fake writeIsStarted -void WriteThread::fakeWriteIsStarted() -{ - emit writeIsStarted(); -} - -/// \brief do the fake writeIsStopped -void WriteThread::fakeWriteIsStopped() -{ - emit writeIsStopped(); -} - -/// do the checksum -void WriteThread::startCheckSum() -{ - emit internalStartChecksum(); -} - -/** \brief set block size -\param block the new block size in KB -\return Return true if succes */ -bool WriteThread::setBlockSize(const int blockSize) -{ - if(blockSize<1 || blockSize>16384) - { - this->blockSize=blockSize*1024; - //set the new max speed because the timer have changed - setMaxSpeed(maxSpeed); - return true; - } - else - return false; -} - -/*! \brief Set the max speed -\param tempMaxSpeed Set the max speed in KB/s, 0 for no limit */ -int WriteThread::setMaxSpeed(const int maxSpeed) -{ - if(this->maxSpeed==0 && maxSpeed==0 && waitNewClockForSpeed.available()>0) - waitNewClockForSpeed.tryAcquire(waitNewClockForSpeed.available()); - this->maxSpeed=maxSpeed; - if(this->maxSpeed>0) - { - int NewInterval,newMultiForBigSpeed=0; - do - { - newMultiForBigSpeed++; - NewInterval=(blockSize*newMultiForBigSpeed)/(this->maxSpeed); - } - while (NewInterval<ULTRACOPIER_PLUGIN_MINTIMERINTERVAL); - if(NewInterval>ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL) - { - NewInterval=ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL; - newMultiForBigSpeed=1; - blockSize=this->maxSpeed*NewInterval; - } - MultiForBigSpeed=newMultiForBigSpeed; - return NewInterval; - } - else - { - waitNewClockForSpeed.release(); - return 0; - } -} - -/// \brief For give timer every X ms -void WriteThread::timeOfTheBlockCopyFinished() -{ - if(waitNewClockForSpeed.available()<ULTRACOPIER_PLUGIN_NUMSEMSPEEDMANAGEMENT) - waitNewClockForSpeed.release(); - //why not just use waitNewClockForSpeed.release() ? -} - -void WriteThread::flushAndSeekToZero() -{ - stopIt=true; - emit internalStartFlushAndSeekToZero(); -} - - -void WriteThread::checkSum() -{ - //QByteArray blockArray; - QCryptographicHash hash(QCryptographicHash::Sha1); - endDetected=false; - lastGoodPosition=0; - file.seek(0); - int sizeReaden=0; - do - { - //read one block - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=Read; - #endif - blockArray=file.read(blockSize); - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=Idle; - #endif - - if(file.error()!=QFile::NoError) - { - errorString_internal=tr("Unable to read the source file: ")+file.errorString()+" ("+QString::number(file.error())+")"; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("file.error()!=QFile::NoError: %1, error: %2").arg(QString::number(file.error())).arg(errorString_internal)); - emit error(); - return; - } - sizeReaden=blockArray.size(); - if(sizeReaden>0) - { - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=Checksum; - #endif - hash.addData(blockArray); - #ifdef ULTRACOPIER_PLUGIN_DEBUG - stat=Idle; - #endif - - if(stopIt) - break; - - lastGoodPosition+=blockArray.size(); - - //wait for limitation speed if stop not query - if(maxSpeed>0) - { - numberOfBlockCopied++; - if(numberOfBlockCopied>=MultiForBigSpeed) - { - numberOfBlockCopied=0; - waitNewClockForSpeed.acquire(); - if(stopIt) - break; - } - } - } - } - while(sizeReaden>0 && !stopIt); - if(lastGoodPosition>file.size()) - { - errorString_internal=tr("File truncated during the read, possible data change"); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"["+QString::number(id)+"] "+QString("Source truncated during the read: %1 (%2)").arg(file.errorString()).arg(QString::number(file.error()))); - emit error(); - return; - } - if(stopIt) - { -/* if(putInPause) - emit isInPause();*/ - stopIt=false; - return; - } - emit checksumFinish(hash.result()); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"["+QString::number(id)+"] stop the read"); -} - -void WriteThread::internalFlushAndSeekToZero() -{ - flushBuffer(); - file.seek(0); - stopIt=false; - emit flushedAndSeekedToZero(); -} - -void WriteThread::setMkpathTransfer(QSemaphore *mkpathTransfer) -{ - this->mkpathTransfer=mkpathTransfer; -} diff --git a/plugins/CopyEngine/Ultracopier-0.3/WriteThread.h b/plugins/CopyEngine/Ultracopier-0.3/WriteThread.h deleted file mode 100644 index 3683c27..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/WriteThread.h +++ /dev/null @@ -1,138 +0,0 @@ -/** \file WriteThread.h -\brief Thread changed to open/close and write the destination file -\author alpha_one_x86 -\version 0.3 -\date 2011 */ - -#ifndef WRITETHREAD_H -#define WRITETHREAD_H - -#include <QThread> -#include <QByteArray> -#include <QString> -#include <QMutex> -#include <QSemaphore> -#include <QCryptographicHash> - -#include "Environment.h" -#include "StructEnumDefinition_CopyEngine.h" -#include "AvancedQFile.h" - -/// \brief Thread changed to open/close and write the destination file -class WriteThread : public QThread -{ - Q_OBJECT -public: - explicit WriteThread(); - ~WriteThread(); - /// \brief to have semaphore to do mkpath one by one - void setMkpathTransfer(QSemaphore *mkpathTransfer); -protected: - void run(); -public: - /// \brief open the destination to open it - void open(const QString &name,const quint64 &startSize,const bool &buffer); - /// \brief to return the error string - QString errorString(); - /// \brief to stop all - void stop(); - /// \brief to write data - bool write(const QByteArray &data); - #ifdef ULTRACOPIER_PLUGIN_DEBUG - /// \brief to set the id - void setId(int id); - /// \brief get the write stat - enum WriteStat - { - Idle=0, - InodeOperation=1, - Write=2, - Close=3, - Read=5, - Checksum=6 - }; - WriteStat stat; - #endif - /// \brief do the fake open - void fakeOpen(); - /// \brief do the fake writeIsStarted - void fakeWriteIsStarted(); - /// \brief do the fake writeIsStopped - void fakeWriteIsStopped(); - /// do the checksum - void startCheckSum(); - /// \brief set the current max speed in KB/s - int setMaxSpeed(int maxSpeed); - /// \brief For give timer every X ms - void timeOfTheBlockCopyFinished(); - /// \brief set block size in KB - bool setBlockSize(const int blockSize); -public slots: - /// \brief start the operation - void postOperation(); - /// \brief flush buffer - void flushBuffer(); - /// \brief set the end is detected - void endIsDetected(); - /// \brief reopen the file - void reopen(); - /// \brief flush and seek to zero - void flushAndSeekToZero(); - /// do the checksum - void checkSum(); -signals: - void error(); - void opened(); - void reopened(); - void writeIsStarted(); - void writeIsStopped(); - void flushedAndSeekedToZero(); - void closed(); - void checksumFinish(const QByteArray&); - //internal signals - void internalStartOpen(); - void internalStartChecksum(); - void internalStartReopen(); - void internalStartWrite(); - void internalStartClose(); - void internalStartEndOfFile(); - void internalStartFlushAndSeekToZero(); - /// \brief To debug source - void debugInformation(const DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne); -private: - QString name; - QString errorString_internal; - AvancedQFile file; - volatile bool stopIt; - volatile int blockSize; - volatile int maxSpeed; ///< The max speed in KB/s, 0 for no limit - QMutex accessList; ///< For use the list - QSemaphore waitNewClockForSpeed; - volatile int numberOfBlockCopied; ///< Multiple for count the number of block copied - volatile int multiplicatorForBigSpeed; ///< Multiple for count the number of block needed - volatile int MultiForBigSpeed; - QSemaphore freeBlock; - QSemaphore isOpen; - volatile bool putInPause; - QList<QByteArray> theBlockList; ///< Store the block list - quint64 CurentCopiedSize; - QByteArray blockArray; ///< temp data for block writing, the data - qint64 bytesWriten; ///< temp data for block writing, the bytes writen - qint64 lastGoodPosition; - int id; - bool endDetected; - quint64 startSize; - QSemaphore *mkpathTransfer; - bool fakeMode; - bool buffer; - bool needRemoveTheFile; -private slots: - bool internalOpen(); - void internalWrite(); - void internalClose(bool emitSignal=true); - void internalReopen(); - void internalEndOfFile(); - void internalFlushAndSeekToZero(); -}; - -#endif // WRITETHREAD_H diff --git a/plugins/CopyEngine/Ultracopier-0.3/copyEngine-collision-and-error.cpp b/plugins/CopyEngine/Ultracopier-0.3/copyEngine-collision-and-error.cpp deleted file mode 100644 index 7ec07c2..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/copyEngine-collision-and-error.cpp +++ /dev/null @@ -1,565 +0,0 @@ -/** \file copyEngine.cpp -\brief Define the copy engine -\author alpha_one_x86 -\version 0.3 -\date 2010 */ - -#include <QtCore> -#include <QFileDialog> -#include <QMessageBox> - -#include "copyEngine.h" -#include "folderExistsDialog.h" - -/// \note Can be call without queue because all call will be serialized -void copyEngine::fileAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread,bool isCalledByShowOneNewDialog) -{ - if(stopIt) - return; - if(thread==NULL) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to locate the thread"); - return; - } - //load the action - if(isSame) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"file is same: "+source.absoluteFilePath()); - tempFileExistsAction=alwaysDoThisActionForFileExists; - if(tempFileExistsAction==FileExists_Overwrite || tempFileExistsAction==FileExists_OverwriteIfNewer || tempFileExistsAction==FileExists_OverwriteIfNotSameModificationDate) - tempFileExistsAction=FileExists_NotSet; - switch(tempFileExistsAction) - { - case FileExists_Skip: - case FileExists_Rename: - thread->setFileExistsAction(tempFileExistsAction); - break; - default: - if(dialogIsOpen) - { - alreadyExistsQueueItem newItem; - newItem.source=source; - newItem.destination=destination; - newItem.isSame=isSame; - newItem.transfer=thread; - newItem.scan=NULL; - alreadyExistsQueue << newItem; - return; - } - dialogIsOpen=true; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"show dialog"); - fileIsSameDialog dialog(interface,source,firstRenamingRule,otherRenamingRule); - emit isInPause(true); - dialog.exec();/// \bug crash when external close - FileExistsAction newAction=dialog.getAction(); - emit isInPause(false); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"close dialog: "+QString::number(newAction)); - if(newAction==FileExists_Cancel) - { - emit cancelAll(); - return; - } - if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileExists) - { - alwaysDoThisActionForFileExists=newAction; - listThread->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists); - switch(newAction) - { - default: - case FileExists_Skip: - emit newCollisionAction("skip"); - break; - case FileExists_Rename: - emit newCollisionAction("rename"); - break; - } - } - if(dialog.getAlways() || newAction!=FileExists_Rename) - thread->setFileExistsAction(newAction); - else - thread->setFileRename(dialog.getNewName()); - dialogIsOpen=false; - if(!isCalledByShowOneNewDialog) - emit queryOneNewDialog(); - return; - break; - } - } - else - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"file already exists: "+source.absoluteFilePath()+", destination: "+destination.absoluteFilePath()); - tempFileExistsAction=alwaysDoThisActionForFileExists; - switch(tempFileExistsAction) - { - case FileExists_Skip: - case FileExists_Rename: - case FileExists_Overwrite: - case FileExists_OverwriteIfNewer: - case FileExists_OverwriteIfNotSameModificationDate: - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"always do this action: "+QString::number(tempFileExistsAction)); - thread->setFileExistsAction(tempFileExistsAction); - break; - default: - if(dialogIsOpen) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("dialog open, put in queue: %1 %2") - .arg(source.absoluteFilePath()) - .arg(destination.absoluteFilePath()) - ); - alreadyExistsQueueItem newItem; - newItem.source=source; - newItem.destination=destination; - newItem.isSame=isSame; - newItem.transfer=thread; - newItem.scan=NULL; - alreadyExistsQueue << newItem; - return; - } - dialogIsOpen=true; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"show dialog"); - fileExistsDialog dialog(interface,source,destination,firstRenamingRule,otherRenamingRule); - emit isInPause(true); - dialog.exec();/// \bug crash when external close - FileExistsAction newAction=dialog.getAction(); - emit isInPause(false); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"close dialog: "+QString::number(newAction)); - if(newAction==FileExists_Cancel) - { - emit cancelAll(); - return; - } - if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileExists) - { - alwaysDoThisActionForFileExists=newAction; - listThread->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists); - switch(newAction) - { - default: - case FileExists_Skip: - emit newCollisionAction("skip"); - break; - case FileExists_Rename: - emit newCollisionAction("rename"); - break; - case FileExists_Overwrite: - emit newCollisionAction("overwrite"); - break; - case FileExists_OverwriteIfNewer: - emit newCollisionAction("overwriteIfNewer"); - break; - case FileExists_OverwriteIfNotSameModificationDate: - emit newCollisionAction("overwriteIfNotSameModificationDate"); - break; - } - } - if(dialog.getAlways() || newAction!=FileExists_Rename) - thread->setFileExistsAction(newAction); - else - thread->setFileRename(dialog.getNewName()); - dialogIsOpen=false; - if(!isCalledByShowOneNewDialog) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"emit queryOneNewDialog()"); - emit queryOneNewDialog(); - } - return; - break; - } - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop"); -} - -/// \note Can be call without queue because all call will be serialized -void copyEngine::errorOnFile(QFileInfo fileInfo,QString errorString,TransferThread * thread,bool isCalledByShowOneNewDialog) -{ - if(stopIt) - return; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"file have error: "+fileInfo.absoluteFilePath()+", error: "+errorString); - if(thread==NULL) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to locate the thread"); - return; - } - //load the action - tempFileErrorAction=alwaysDoThisActionForFileError; - switch(tempFileErrorAction) - { - case FileError_Skip: - thread->skip(); - return; - case FileError_Retry: - thread->retryAfterError(); - return; - case FileError_PutToEndOfTheList: - /// \todo do the read transfer locator and put at the end - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"todo list item not found"); - return; - default: - if(dialogIsOpen) - { - errorQueueItem newItem; - newItem.errorString=errorString; - newItem.inode=fileInfo; - newItem.mkPath=false; - newItem.rmPath=false; - newItem.scan=NULL; - newItem.transfer=thread; - errorQueue << newItem; - return; - } - dialogIsOpen=true; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"show dialog"); - emit error(fileInfo.absoluteFilePath(),fileInfo.size(),fileInfo.lastModified(),errorString); - fileErrorDialog dialog(interface,fileInfo,errorString); - emit isInPause(true); - dialog.exec();/// \bug crash when external close - FileErrorAction newAction=dialog.getAction(); - emit isInPause(false); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"close dialog: "+QString::number(newAction)); - if(newAction==FileError_Cancel) - { - emit cancelAll(); - return; - } - if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError) - { - alwaysDoThisActionForFileError=newAction; - switch(newAction) - { - default: - case FileError_Skip: - emit newErrorAction("skip"); - break; - case FileError_PutToEndOfTheList: - emit newErrorAction("putToEndOfTheList"); - break; - } - } - switch(newAction) - { - case FileError_Skip: - thread->skip(); - break; - case FileError_Retry: - thread->retryAfterError(); - break; - case FileError_PutToEndOfTheList: - thread->putAtBottom(); - /// \todo do the read transfer locator and put at the end - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"todo"); - break; - default: - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"file error action wrong"); - break; - } - dialogIsOpen=false; - if(!isCalledByShowOneNewDialog) - emit queryOneNewDialog(); - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"isCalledByShowOneNewDialog==true then not show other dial"); - return; - break; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop"); -} - -/// \note Can be call without queue because all call will be serialized -void copyEngine::folderAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,scanFileOrFolder * thread,bool isCalledByShowOneNewDialog) -{ - if(stopIt) - return; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"folder already exists: "+source.absoluteFilePath()+", destination: "+destination.absoluteFilePath()); - if(thread==NULL) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to locate the thread"); - return; - } - //load the always action - tempFolderExistsAction=alwaysDoThisActionForFolderExists; - switch(tempFolderExistsAction) - { - case FolderExists_Skip: - case FolderExists_Rename: - case FolderExists_Merge: - thread->setFolderExistsAction(tempFolderExistsAction); - break; - default: - if(dialogIsOpen) - { - alreadyExistsQueueItem newItem; - newItem.source=source; - newItem.destination=destination; - newItem.isSame=isSame; - newItem.transfer=NULL; - newItem.scan=thread; - alreadyExistsQueue << newItem; - return; - } - dialogIsOpen=true; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"show dialog"); - folderExistsDialog dialog(interface,source,isSame,destination,firstRenamingRule,otherRenamingRule); - dialog.exec();/// \bug crash when external close - FolderExistsAction newAction=dialog.getAction(); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"close dialog: "+QString::number(newAction)); - if(newAction==FolderExists_Cancel) - { - emit cancelAll(); - return; - } - if(dialog.getAlways() && newAction!=alwaysDoThisActionForFolderExists) - setComboBoxFolderColision(newAction); - if(!dialog.getAlways() && newAction==FolderExists_Rename) - thread->setFolderExistsAction(newAction,dialog.getNewName()); - else - thread->setFolderExistsAction(newAction); - dialogIsOpen=false; - if(!isCalledByShowOneNewDialog) - emit queryOneNewDialog(); - return; - break; - } -} - -/// \note Can be call without queue because all call will be serialized -/// \todo all this part -void copyEngine::errorOnFolder(QFileInfo fileInfo,QString errorString,scanFileOrFolder * thread,bool isCalledByShowOneNewDialog) -{ - if(stopIt) - return; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"file have error: "+fileInfo.absoluteFilePath()+", error: "+errorString); - if(thread==NULL) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to locate the thread"); - return; - } - //load the always action - tempFileErrorAction=alwaysDoThisActionForFolderError; - switch(tempFileErrorAction) - { - case FileError_Skip: - case FileError_Retry: - case FileError_PutToEndOfTheList: - thread->setFolderErrorAction(tempFileErrorAction); - break; - default: - if(dialogIsOpen) - { - errorQueueItem newItem; - newItem.errorString=errorString; - newItem.inode=fileInfo; - newItem.mkPath=false; - newItem.rmPath=false; - newItem.scan=thread; - newItem.transfer=NULL; - errorQueue << newItem; - return; - } - dialogIsOpen=true; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"show dialog"); - emit error(fileInfo.absoluteFilePath(),fileInfo.size(),fileInfo.lastModified(),errorString); - fileErrorDialog dialog(interface,fileInfo,errorString); - dialog.exec();/// \bug crash when external close - FileErrorAction newAction=dialog.getAction(); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"close dialog: "+QString::number(newAction)); - if(newAction==FileError_Cancel) - { - emit cancelAll(); - return; - } - if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError) - setComboBoxFolderError(newAction); - dialogIsOpen=false; - thread->setFolderErrorAction(newAction); - if(!isCalledByShowOneNewDialog) - emit queryOneNewDialog(); - return; - break; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop"); -} - -// ----------------------------------------------------- - -//mkpath event -void copyEngine::mkPathErrorOnFolder(QFileInfo folder,QString errorString,bool isCalledByShowOneNewDialog) -{ - if(stopIt) - return; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"file have error: "+folder.absoluteFilePath()+", error: "+errorString); - //load the always action - tempFileErrorAction=alwaysDoThisActionForFolderError; - error_index=0; - switch(tempFileErrorAction) - { - case FileError_Skip: - listThread->mkPathQueue.skip(); - return; - case FileError_Retry: - listThread->mkPathQueue.retry(); - return; - default: - if(dialogIsOpen) - { - errorQueueItem newItem; - newItem.errorString=errorString; - newItem.inode=folder; - newItem.mkPath=true; - newItem.rmPath=false; - newItem.scan=NULL; - newItem.transfer=NULL; - errorQueue << newItem; - return; - } - dialogIsOpen=true; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"show dialog"); - emit error(folder.absoluteFilePath(),folder.size(),folder.lastModified(),errorString); - fileErrorDialog dialog(interface,folder,errorString,false); - dialog.exec();/// \bug crash when external close - FileErrorAction newAction=dialog.getAction(); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"close dialog: "+QString::number(newAction)); - if(newAction==FileError_Cancel) - { - emit cancelAll(); - return; - } - if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError) - { - setComboBoxFolderError(newAction); - alwaysDoThisActionForFolderError=newAction; - } - dialogIsOpen=false; - switch(newAction) - { - case FileError_Skip: - listThread->mkPathQueue.skip(); - break; - case FileError_Retry: - listThread->mkPathQueue.retry(); - break; - default: - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unknow switch case: "+QString::number(newAction)); - break; - } - if(!isCalledByShowOneNewDialog) - emit queryOneNewDialog(); - return; - break; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop"); -} - -//rmpath event -void copyEngine::rmPathErrorOnFolder(QFileInfo folder,QString errorString,bool isCalledByShowOneNewDialog) -{ - if(stopIt) - return; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"file have error: "+folder.absoluteFilePath()+", error: "+errorString); - //load the always action - tempFileErrorAction=alwaysDoThisActionForFolderError; - error_index=0; - switch(tempFileErrorAction) - { - case FileError_Skip: - listThread->rmPathQueue.skip(); - return; - case FileError_Retry: - listThread->rmPathQueue.retry(); - return; - default: - if(dialogIsOpen) - { - errorQueueItem newItem; - newItem.errorString=errorString; - newItem.inode=folder; - newItem.mkPath=false; - newItem.rmPath=true; - newItem.scan=NULL; - newItem.transfer=NULL; - errorQueue << newItem; - return; - } - dialogIsOpen=true; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"show dialog"); - emit error(folder.absoluteFilePath(),folder.size(),folder.lastModified(),errorString); - fileErrorDialog dialog(interface,folder,errorString,false); - dialog.exec();/// \bug crash when external close - FileErrorAction newAction=dialog.getAction(); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"close dialog: "+QString::number(newAction)); - if(newAction==FileError_Cancel) - { - emit cancelAll(); - return; - } - if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError) - { - setComboBoxFolderError(newAction); - alwaysDoThisActionForFolderError=newAction; - } - dialogIsOpen=false; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"do the action"); - switch(newAction) - { - case FileError_Skip: - listThread->rmPathQueue.skip(); - break; - case FileError_Retry: - listThread->rmPathQueue.retry(); - break; - default: - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Unknow switch case: "+QString::number(newAction)); - break; - } - if(!isCalledByShowOneNewDialog) - emit queryOneNewDialog(); - return; - break; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"stop"); -} - -//show one new dialog if needed -void copyEngine::showOneNewDialog() -{ - if(stopIt) - return; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"alreadyExistsQueue.size(): "+QString::number(alreadyExistsQueue.size())); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"errorQueue.size(): "+QString::number(errorQueue.size())); - loop_size=alreadyExistsQueue.size(); - while(loop_size>0) - { - if(alreadyExistsQueue.first().transfer!=NULL) - { - fileAlreadyExists(alreadyExistsQueue.first().source, - alreadyExistsQueue.first().destination, - alreadyExistsQueue.first().isSame, - alreadyExistsQueue.first().transfer, - true); - } - else if(alreadyExistsQueue.first().scan!=NULL) - folderAlreadyExists(alreadyExistsQueue.first().source, - alreadyExistsQueue.first().destination, - alreadyExistsQueue.first().isSame, - alreadyExistsQueue.first().scan, - true); - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"bug, no thread actived"); - alreadyExistsQueue.removeFirst(); - loop_size--; - } - loop_size=errorQueue.size(); - while(errorQueue.size()>0) - { - if(errorQueue.first().transfer!=NULL) - errorOnFile(errorQueue.first().inode,errorQueue.first().errorString,errorQueue.first().transfer,true); - else if(errorQueue.first().scan!=NULL) - errorOnFolder(errorQueue.first().inode,errorQueue.first().errorString,errorQueue.first().scan,true); - else if(errorQueue.first().mkPath) - mkPathErrorOnFolder(errorQueue.first().inode,errorQueue.first().errorString,true); - else if(errorQueue.first().rmPath) - rmPathErrorOnFolder(errorQueue.first().inode,errorQueue.first().errorString,true); - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"bug, no thread actived"); - errorQueue.removeFirst(); - loop_size--; - } -} diff --git a/plugins/CopyEngine/Ultracopier-0.3/copyEngine.cpp b/plugins/CopyEngine/Ultracopier-0.3/copyEngine.cpp deleted file mode 100755 index 950cfd3..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/copyEngine.cpp +++ /dev/null @@ -1,796 +0,0 @@ -/** \file copyEngine.cpp -\brief Define the copy engine -\author alpha_one_x86 -\version 0.3 -\date 2010 */ - -#include <QtCore> -#include <QFileDialog> -#include <QMessageBox> - -#include "copyEngine.h" -#include "folderExistsDialog.h" -#include "../../../interface/PluginInterface_CopyEngine.h" - -copyEngine::copyEngine(FacilityInterface * facilityEngine) : - ui(new Ui::options()) -{ - listThread=new ListThread(facilityEngine); - this->facilityEngine=facilityEngine; - filters=NULL; - renamingRules=NULL; - qRegisterMetaType<TransferThread *>("TransferThread *"); - qRegisterMetaType<scanFileOrFolder *>("scanFileOrFolder *"); - qRegisterMetaType<EngineActionInProgress>("EngineActionInProgress"); - qRegisterMetaType<DebugLevel>("DebugLevel"); - qRegisterMetaType<FileExistsAction>("FileExistsAction"); - qRegisterMetaType<FolderExistsAction>("FolderExistsAction"); - qRegisterMetaType<QList<Filters_rules> >("QList<Filters_rules>"); - qRegisterMetaType<QList<int> >("QList<int>"); - qRegisterMetaType<CopyMode>("CopyMode"); - qRegisterMetaType<QList<returnActionOnCopyList> >("QList<returnActionOnCopyList>"); - qRegisterMetaType<QList<ProgressionItem> >("QList<ProgressionItem>"); - - interface = NULL; - tempWidget = NULL; - uiIsInstalled = false; - dialogIsOpen = false; - maxSpeed = 0; - alwaysDoThisActionForFileExists = FileExists_NotSet; - alwaysDoThisActionForFileError = FileError_NotSet; - checkDestinationFolderExists = false; - stopIt = false; - size_for_speed = 0; - forcedMode = false; - - //implement the SingleShot in this class - //timerActionDone.setSingleShot(true); - timerActionDone.setInterval(ULTRACOPIER_PLUGIN_TIME_UPDATE_TRASNFER_LIST); - //timerProgression.setSingleShot(true); - timerProgression.setInterval(ULTRACOPIER_PLUGIN_TIME_UPDATE_PROGRESSION); - -} - -copyEngine::~copyEngine() -{ - /*if(filters!=NULL) - delete filters; - if(renamingRules!=NULL) - delete renamingRules; - destroyed by the widget parent, here the interface - */ - stopIt=true; - delete listThread; - delete ui; -} - -void copyEngine::connectTheSignalsSlots() -{ - #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW - debugDialogWindow.show(); - #endif - if(!connect(listThread,SIGNAL(actionInProgess(EngineActionInProgress)), this,SIGNAL(actionInProgess(EngineActionInProgress)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect actionInProgess()"); - if(!connect(listThread,SIGNAL(actionInProgess(EngineActionInProgress)), this,SLOT(newActionInProgess(EngineActionInProgress)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect actionInProgess() to slot"); - if(!connect(listThread,SIGNAL(newFolderListing(QString)), this,SIGNAL(newFolderListing(QString)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect newFolderListing()"); - if(!connect(listThread,SIGNAL(newCollisionAction(QString)), this,SIGNAL(newCollisionAction(QString)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect newCollisionAction()"); - if(!connect(listThread,SIGNAL(newErrorAction(QString)), this,SIGNAL(newErrorAction(QString)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect newErrorAction()"); - if(!connect(listThread,SIGNAL(isInPause(bool)), this,SIGNAL(isInPause(bool)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect isInPause()"); - if(!connect(listThread,SIGNAL(error(QString,quint64,QDateTime,QString)), this,SIGNAL(error(QString,quint64,QDateTime,QString)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect error()"); - if(!connect(listThread,SIGNAL(rmPath(QString)), this,SIGNAL(rmPath(QString)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect rmPath()"); - if(!connect(listThread,SIGNAL(mkPath(QString)), this,SIGNAL(mkPath(QString)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect mkPath()"); - if(!connect(listThread,SIGNAL(newActionOnList(QList<returnActionOnCopyList>)), this,SIGNAL(newActionOnList(QList<returnActionOnCopyList>)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect newActionOnList()"); - if(!connect(listThread,SIGNAL(pushFileProgression(QList<ProgressionItem>)), this,SIGNAL(pushFileProgression(QList<ProgressionItem>)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect pushFileProgression()"); - if(!connect(listThread,SIGNAL(pushGeneralProgression(quint64,quint64)), this,SIGNAL(pushGeneralProgression(quint64,quint64)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect pushGeneralProgression()"); - if(!connect(listThread,SIGNAL(syncReady()), this,SIGNAL(syncReady()), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect syncReady()"); - if(!connect(listThread,SIGNAL(canBeDeleted()), this,SIGNAL(canBeDeleted()), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect canBeDeleted()"); - #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW - if(!connect(listThread,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect debugInformation()"); - #endif - - if(!connect(listThread,SIGNAL(send_fileAlreadyExists(QFileInfo,QFileInfo,bool,TransferThread *)), this,SLOT(fileAlreadyExists(QFileInfo,QFileInfo,bool,TransferThread *)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_fileAlreadyExists()"); - if(!connect(listThread,SIGNAL(send_errorOnFile(QFileInfo,QString,TransferThread *)), this,SLOT(errorOnFile(QFileInfo,QString,TransferThread *)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_errorOnFile()"); - if(!connect(listThread,SIGNAL(send_folderAlreadyExists(QFileInfo,QFileInfo,bool,scanFileOrFolder *)), this,SLOT(folderAlreadyExists(QFileInfo,QFileInfo,bool,scanFileOrFolder *)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_folderAlreadyExists()"); - if(!connect(listThread,SIGNAL(send_errorOnFolder(QFileInfo,QString,scanFileOrFolder *)), this,SLOT(errorOnFolder(QFileInfo,QString,scanFileOrFolder *)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_errorOnFolder()"); - if(!connect(listThread,SIGNAL(updateTheDebugInfo(QStringList,QStringList,int)), this,SLOT(updateTheDebugInfo(QStringList,QStringList,int)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect updateTheDebugInfo()"); - if(!connect(listThread,SIGNAL(errorTransferList(QString)), this,SLOT(errorTransferList(QString)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect errorTransferList()"); - if(!connect(listThread,SIGNAL(warningTransferList(QString)), this,SLOT(warningTransferList(QString)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect warningTransferList()"); - if(!connect(listThread,SIGNAL(mkPathErrorOnFolder(QFileInfo,QString)), this,SLOT(mkPathErrorOnFolder(QFileInfo,QString)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect mkPathErrorOnFolder()"); - if(!connect(listThread,SIGNAL(rmPathErrorOnFolder(QFileInfo,QString)), this,SLOT(rmPathErrorOnFolder(QFileInfo,QString)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect rmPathErrorOnFolder()"); - if(!connect(listThread,SIGNAL(send_realBytesTransfered(quint64)), this,SLOT(get_realBytesTransfered(quint64)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_realBytesTransfered()"); - - if(!connect(this,SIGNAL(tryCancel()), listThread,SIGNAL(tryCancel()), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect tryCancel()"); - if(!connect(this,SIGNAL(signal_pause()), listThread,SLOT(pause()), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_pause()"); - if(!connect(this,SIGNAL(signal_resume()), listThread,SLOT(resume()), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_resume()"); - if(!connect(this,SIGNAL(signal_skip(quint64)), listThread,SLOT(skip(quint64)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_skip()"); - if(!connect(this,SIGNAL(signal_setCollisionAction(FileExistsAction)), listThread,SLOT(setAlwaysFileExistsAction(FileExistsAction)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_setCollisionAction()"); - if(!connect(this,SIGNAL(signal_setFolderColision(FolderExistsAction)), listThread,SLOT(setFolderColision(FolderExistsAction)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_setFolderColision()"); - if(!connect(this,SIGNAL(signal_removeItems(QList<int>)), listThread,SLOT(removeItems(QList<int>)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_removeItems()"); - if(!connect(this,SIGNAL(signal_moveItemsOnTop(QList<int>)), listThread,SLOT(moveItemsOnTop(QList<int>)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_moveItemsOnTop()"); - if(!connect(this,SIGNAL(signal_moveItemsUp(QList<int>)), listThread,SLOT(moveItemsUp(QList<int>)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_moveItemsUp()"); - if(!connect(this,SIGNAL(signal_moveItemsDown(QList<int>)), listThread,SLOT(moveItemsDown(QList<int>)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_moveItemsDown()"); - if(!connect(this,SIGNAL(signal_moveItemsOnBottom(QList<int>)), listThread,SLOT(moveItemsOnBottom(QList<int>)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_moveItemsOnBottom()"); - if(!connect(this,SIGNAL(signal_exportTransferList(QString)), listThread,SLOT(exportTransferList(QString)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_exportTransferList()"); - if(!connect(this,SIGNAL(signal_importTransferList(QString)), listThread,SLOT(importTransferList(QString)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_importTransferList()"); - if(!connect(this,SIGNAL(signal_forceMode(CopyMode)), listThread,SLOT(forceMode(CopyMode)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect signal_forceMode()"); - if(!connect(this,SIGNAL(send_osBufferLimit(uint)), listThread,SLOT(set_osBufferLimit(uint)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_osBufferLimit()"); - if(!connect(this,SIGNAL(send_setFilters(QList<Filters_rules>,QList<Filters_rules>)),listThread,SLOT(set_setFilters(QList<Filters_rules>,QList<Filters_rules>)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_setFilters()"); - if(!connect(this,SIGNAL(send_sendNewRenamingRules(QString,QString)),listThread,SLOT(set_sendNewRenamingRules(QString,QString)), Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect send_sendNewRenamingRules()"); - if(!connect(&timerActionDone,SIGNAL(timeout()), listThread,SLOT(sendActionDone()))) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect timerActionDone"); - if(!connect(&timerProgression,SIGNAL(timeout()), listThread,SLOT(sendProgression()))) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect timerProgression"); - - if(!connect(this,SIGNAL(queryOneNewDialog()),SLOT(showOneNewDialog()),Qt::QueuedConnection)) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect queryOneNewDialog()"); -} - -#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW -void copyEngine::updateTheDebugInfo(QStringList newList,QStringList newList2,int numberOfInodeOperation) -{ - debugDialogWindow.setTransferThreadList(newList); - debugDialogWindow.setTransferList(newList2); - debugDialogWindow.setInodeUsage(numberOfInodeOperation); -} -#endif - -//to send the options panel -bool copyEngine::getOptionsEngine(QWidget * tempWidget) -{ - this->tempWidget=tempWidget; - connect(tempWidget, SIGNAL(destroyed()), this, SLOT(resetTempWidget())); - ui->setupUi(tempWidget); - //conect the ui widget -/* connect(ui->doRightTransfer, SIGNAL(toggled(bool)), &threadOfTheTransfer, SLOT(setRightTransfer(bool))); - connect(ui->keepDate, SIGNAL(toggled(bool)), &threadOfTheTransfer, SLOT(setKeepDate(bool))); - connect(ui->blockSize, SIGNAL(valueChanged(int)), &threadOfTheTransfer, SLOT(setBlockSize(int)));*/ - connect(ui->autoStart, SIGNAL(toggled(bool)), this, SLOT(setAutoStart(bool))); - connect(ui->checkBoxDestinationFolderExists, SIGNAL(toggled(bool)), this, SLOT(setCheckDestinationFolderExists(bool))); - uiIsInstalled=true; - setRightTransfer(doRightTransfer); - setKeepDate(keepDate); - setSpeedLimitation(maxSpeed); - setBlockSize(blockSize); - setAutoStart(autoStart); - setCheckDestinationFolderExists(checkDestinationFolderExists); - set_doChecksum(doChecksum); - set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible); - set_checksumOnlyOnError(checksumOnlyOnError); - set_osBuffer(osBuffer); - set_osBufferLimited(osBufferLimited); - set_osBufferLimit(osBufferLimit); - return true; -} - -//to have interface widget to do modal dialog -void copyEngine::setInterfacePointer(QWidget * interface) -{ - this->interface=interface; - filters=new Filters(tempWidget); - renamingRules=new RenamingRules(tempWidget); - - if(uiIsInstalled) - { - connect(ui->doRightTransfer, SIGNAL(toggled(bool)), this,SLOT(setRightTransfer(bool))); - connect(ui->keepDate, SIGNAL(toggled(bool)), this,SLOT(setKeepDate(bool))); - connect(ui->blockSize, SIGNAL(valueChanged(int)), this,SLOT(setBlockSize(int))); - connect(ui->autoStart, SIGNAL(toggled(bool)), this,SLOT(setAutoStart(bool))); - connect(ui->doChecksum, SIGNAL(toggled(bool)), this,SLOT(doChecksum_toggled(bool))); - connect(ui->checksumIgnoreIfImpossible, SIGNAL(toggled(bool)), this,SLOT(checksumIgnoreIfImpossible_toggled(bool))); - connect(ui->checksumOnlyOnError, SIGNAL(toggled(bool)), this,SLOT(checksumOnlyOnError_toggled(bool))); - connect(ui->osBuffer, SIGNAL(toggled(bool)), this,SLOT(osBuffer_toggled(bool))); - connect(ui->osBufferLimited, SIGNAL(toggled(bool)), this,SLOT(osBufferLimited_toggled(bool))); - connect(ui->osBufferLimit, SIGNAL(editingFinished()), this,SLOT(osBufferLimit_editingFinished())); - - connect(filters,SIGNAL(sendNewFilters(QStringList,QStringList,QStringList,QStringList)),this,SLOT(sendNewFilters())); - connect(ui->filters,SIGNAL(clicked()),this,SLOT(showFilterDialog())); - - if(!connect(renamingRules,SIGNAL(sendNewRenamingRules(QString,QString)),this,SLOT(sendNewRenamingRules(QString,QString)))) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect sendNewRenamingRules()"); - if(!connect(ui->renamingRules,SIGNAL(clicked()),this,SLOT(showRenamingRules()))) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"unable to connect renamingRules.clicked()"); - } - - filters->setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions); - set_setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions); - - renamingRules->setRenamingRules(firstRenamingRule,otherRenamingRule); - emit send_sendNewRenamingRules(firstRenamingRule,otherRenamingRule); -} - -bool copyEngine::haveSameSource(const QStringList &sources) -{ - return listThread->haveSameSource(sources); -} - -bool copyEngine::haveSameDestination(const QString &destination) -{ - return listThread->haveSameDestination(destination); -} - -bool copyEngine::newCopy(const QStringList &sources) -{ - if(forcedMode && mode!=Copy) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"The engine is forced to move, you can't copy with it"); - QMessageBox::critical(NULL,facilityEngine->translateText("Internal error"),tr("The engine is forced to move, you can't copy with it")); - return false; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - QString destination = QFileDialog::getExistingDirectory(interface,facilityEngine->translateText("Select destination directory"),"",QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); - if(destination.isEmpty() || destination.isNull() || destination=="") - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"Canceled by the user"); - return false; - } - return listThread->newCopy(sources,destination); -} - -bool copyEngine::newCopy(const QStringList &sources,const QString &destination) -{ - if(forcedMode && mode!=Copy) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"The engine is forced to move, you can't copy with it"); - QMessageBox::critical(NULL,facilityEngine->translateText("Internal error"),tr("The engine is forced to move, you can't copy with it")); - return false; - } - return listThread->newCopy(sources,destination); -} - -bool copyEngine::newMove(const QStringList &sources) -{ - if(forcedMode && mode!=Move) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"The engine is forced to copy, you can't move with it"); - QMessageBox::critical(NULL,facilityEngine->translateText("Internal error"),tr("The engine is forced to copy, you can't move with it")); - return false; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - QString destination = QFileDialog::getExistingDirectory(interface,facilityEngine->translateText("Select destination directory"),"",QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); - if(destination.isEmpty() || destination.isNull() || destination=="") - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"Canceled by the user"); - return false; - } - return listThread->newMove(sources,destination); -} - -bool copyEngine::newMove(const QStringList &sources,const QString &destination) -{ - if(forcedMode && mode!=Move) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"The engine is forced to copy, you can't move with it"); - QMessageBox::critical(NULL,facilityEngine->translateText("Internal error"),tr("The engine is forced to copy, you can't move with it")); - return false; - } - return listThread->newMove(sources,destination); -} - -void copyEngine::newTransferList(const QString &file) -{ - emit signal_importTransferList(file); -} - -//because direct access to list thread into the main thread can't be do -quint64 copyEngine::realByteTransfered() -{ - return size_for_speed; -} - -//speed limitation -qint64 copyEngine::getSpeedLimitation() -{ - return listThread->getSpeedLimitation(); -} - -//get collision action -QList<QPair<QString,QString> > copyEngine::getCollisionAction() -{ - QPair<QString,QString> tempItem; - QList<QPair<QString,QString> > list; - tempItem.first=facilityEngine->translateText("Ask");tempItem.second="ask";list << tempItem; - tempItem.first=facilityEngine->translateText("Skip");tempItem.second="skip";list << tempItem; - tempItem.first=facilityEngine->translateText("Overwrite");tempItem.second="overwrite";list << tempItem; - tempItem.first=facilityEngine->translateText("Overwrite if newer");tempItem.second="overwriteIfNewer";list << tempItem; - tempItem.first=facilityEngine->translateText("Overwrite if the last modification dates are different");tempItem.second="overwriteIfNotSameModificationDate";list << tempItem; - tempItem.first=facilityEngine->translateText("Rename");tempItem.second="rename";list << tempItem; - return list; -} - -QList<QPair<QString,QString> > copyEngine::getErrorAction() -{ - QPair<QString,QString> tempItem; - QList<QPair<QString,QString> > list; - tempItem.first=facilityEngine->translateText("Ask");tempItem.second="ask";list << tempItem; - tempItem.first=facilityEngine->translateText("Skip");tempItem.second="skip";list << tempItem; - tempItem.first=facilityEngine->translateText("Put to end of the list");tempItem.second="putToEndOfTheList";list << tempItem; - return list; -} - -void copyEngine::setDrive(const QStringList &drives) -{ - listThread->setDrive(drives); -} - -/** \brief to sync the transfer list - * Used when the interface is changed, useful to minimize the memory size */ -void copyEngine::syncTransferList() -{ - listThread->syncTransferList(); -} - -void copyEngine::set_doChecksum(bool doChecksum) -{ - listThread->set_doChecksum(doChecksum); - if(uiIsInstalled) - ui->doChecksum->setChecked(doChecksum); - this->doChecksum=doChecksum; -} - -void copyEngine::set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible) -{ - listThread->set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible); - if(uiIsInstalled) - ui->checksumIgnoreIfImpossible->setChecked(checksumIgnoreIfImpossible); - this->checksumIgnoreIfImpossible=checksumIgnoreIfImpossible; -} - -void copyEngine::set_checksumOnlyOnError(bool checksumOnlyOnError) -{ - listThread->set_checksumOnlyOnError(checksumOnlyOnError); - if(uiIsInstalled) - ui->checksumOnlyOnError->setChecked(checksumOnlyOnError); - this->checksumOnlyOnError=checksumOnlyOnError; -} - -void copyEngine::set_osBuffer(bool osBuffer) -{ - listThread->set_osBuffer(osBuffer); - if(uiIsInstalled) - ui->osBuffer->setChecked(osBuffer); - this->osBuffer=osBuffer; -} - -void copyEngine::set_osBufferLimited(bool osBufferLimited) -{ - listThread->set_osBufferLimited(osBufferLimited); - if(uiIsInstalled) - ui->osBufferLimited->setChecked(osBufferLimited); - this->osBufferLimited=osBufferLimited; -} - -void copyEngine::set_osBufferLimit(unsigned int osBufferLimit) -{ - emit send_osBufferLimit(osBufferLimit); - if(uiIsInstalled) - ui->osBufferLimit->setValue(osBufferLimit); - this->osBufferLimit=osBufferLimit; -} - -void copyEngine::set_setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions) -{ - if(filters!=NULL) - { - filters->setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions); - emit send_setFilters(filters->getInclude(),filters->getExclude()); - } - this->includeStrings=includeStrings; - this->includeOptions=includeOptions; - this->excludeStrings=excludeStrings; - this->excludeOptions=excludeOptions; -} - -void copyEngine::setRenamingRules(QString firstRenamingRule,QString otherRenamingRule) -{ - sendNewRenamingRules(firstRenamingRule,otherRenamingRule); -} - -bool copyEngine::userAddFolder(const CopyMode &mode) -{ - QString source = QFileDialog::getExistingDirectory(interface,facilityEngine->translateText("Select source directory"),"",QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); - if(source.isEmpty() || source.isNull() || source=="") - return false; - if(mode==Copy) - return newCopy(QStringList() << source); - else - return newMove(QStringList() << source); -} - -bool copyEngine::userAddFile(const CopyMode &mode) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - QStringList sources = QFileDialog::getOpenFileNames( - interface, - facilityEngine->translateText("Select one or more files to open"), - "", - facilityEngine->translateText("All files")+" (*)"); - if(sources.isEmpty()) - return false; - if(mode==Copy) - return newCopy(sources); - else - return newMove(sources); -} - -void copyEngine::pause() -{ - emit signal_pause(); -} - -void copyEngine::resume() -{ - emit signal_resume(); -} - -void copyEngine::skip(const quint64 &id) -{ - emit signal_skip(id); -} - -void copyEngine::cancel() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - stopIt=true; - timerProgression.stop(); - timerActionDone.stop(); - emit tryCancel(); -} - -void copyEngine::removeItems(const QList<int> &ids) -{ - emit signal_removeItems(ids); -} - -void copyEngine::moveItemsOnTop(const QList<int> &ids) -{ - emit signal_moveItemsOnTop(ids); -} - -void copyEngine::moveItemsUp(const QList<int> &ids) -{ - emit signal_moveItemsUp(ids); -} - -void copyEngine::moveItemsDown(const QList<int> &ids) -{ - emit signal_moveItemsDown(ids); -} - -void copyEngine::moveItemsOnBottom(const QList<int> &ids) -{ - emit signal_moveItemsOnBottom(ids); -} - -/** \brief give the forced mode, to export/import transfer list */ -void copyEngine::forceMode(const CopyMode &mode) -{ - if(forcedMode) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Mode forced previously")); - QMessageBox::critical(NULL,facilityEngine->translateText("Internal error"),tr("The mode have been forced previously, it's internal error, please report it")); - return; - } - if(mode==Copy) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Force mode to copy")); - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("Force mode to move")); - this->mode=mode; - forcedMode=true; - emit signal_forceMode(mode); -} - -void copyEngine::exportTransferList() -{ - QString fileName = QFileDialog::getSaveFileName(NULL,facilityEngine->translateText("Save transfer list"),"transfer-list.lst",facilityEngine->translateText("Transfer list")+" (*.lst)"); - if(fileName.isEmpty()) - return; - emit signal_exportTransferList(fileName); -} - -void copyEngine::importTransferList() -{ - QString fileName = QFileDialog::getOpenFileName(NULL,facilityEngine->translateText("Open transfer list"),"transfer-list.lst",facilityEngine->translateText("Transfer list")+" (*.lst)"); - if(fileName.isEmpty()) - return; - emit signal_importTransferList(fileName); -} - -void copyEngine::warningTransferList(const QString &warning) -{ - QMessageBox::warning(interface,facilityEngine->translateText("Error"),warning); -} - -void copyEngine::errorTransferList(const QString &error) -{ - QMessageBox::critical(interface,facilityEngine->translateText("Error"),error); -} - -bool copyEngine::setSpeedLimitation(const qint64 &speedLimitation) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"maxSpeed: "+QString::number(speedLimitation)); - maxSpeed=speedLimitation; - return listThread->setSpeedLimitation(speedLimitation); -} - -void copyEngine::setCollisionAction(const QString &action) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"action: "+action); - if(action=="skip") - alwaysDoThisActionForFileExists=FileExists_Skip; - else if(action=="overwrite") - alwaysDoThisActionForFileExists=FileExists_Overwrite; - else if(action=="overwriteIfNewer") - alwaysDoThisActionForFileExists=FileExists_OverwriteIfNewer; - else if(action=="overwriteIfNotSameModificationDate") - alwaysDoThisActionForFileExists=FileExists_OverwriteIfNotSameModificationDate; - else if(action=="rename") - alwaysDoThisActionForFileExists=FileExists_Rename; - else - alwaysDoThisActionForFileExists=FileExists_NotSet; - emit signal_setCollisionAction(alwaysDoThisActionForFileExists); -} - -void copyEngine::setErrorAction(const QString &action) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"action: "+action); - if(action=="skip") - alwaysDoThisActionForFileError=FileError_Skip; - else if(action=="putToEndOfTheList") - alwaysDoThisActionForFileError=FileError_PutToEndOfTheList; - else - alwaysDoThisActionForFileError=FileError_NotSet; -} - -void copyEngine::setRightTransfer(const bool doRightTransfer) -{ - this->doRightTransfer=doRightTransfer; - if(uiIsInstalled) - ui->doRightTransfer->setChecked(doRightTransfer); - listThread->setRightTransfer(doRightTransfer); -} - -//set keep date -void copyEngine::setKeepDate(const bool keepDate) -{ - this->keepDate=keepDate; - if(uiIsInstalled) - ui->keepDate->setChecked(keepDate); - listThread->setKeepDate(keepDate); -} - -//set block size in KB -void copyEngine::setBlockSize(const int blockSize) -{ - this->blockSize=blockSize; - if(uiIsInstalled) - ui->blockSize->setValue(blockSize); - listThread->setBlockSize(blockSize); -} - -//set auto start -void copyEngine::setAutoStart(const bool autoStart) -{ - this->autoStart=autoStart; - if(uiIsInstalled) - ui->autoStart->setChecked(autoStart); - listThread->setAutoStart(autoStart); -} - -//set check destination folder -void copyEngine::setCheckDestinationFolderExists(const bool checkDestinationFolderExists) -{ - this->checkDestinationFolderExists=checkDestinationFolderExists; - if(uiIsInstalled) - ui->checkBoxDestinationFolderExists->setChecked(checkDestinationFolderExists); - listThread->setCheckDestinationFolderExists(checkDestinationFolderExists); -} - -//reset widget -void copyEngine::resetTempWidget() -{ - tempWidget=NULL; -} - -void copyEngine::on_comboBoxFolderColision_currentIndexChanged(int index) -{ - switch(index) - { - case 0: - setComboBoxFolderColision(FolderExists_NotSet,false); - break; - case 1: - setComboBoxFolderColision(FolderExists_Merge,false); - break; - case 2: - setComboBoxFolderColision(FolderExists_Skip,false); - break; - case 3: - setComboBoxFolderColision(FolderExists_Rename,false); - break; - } -} - -void copyEngine::on_comboBoxFolderError_currentIndexChanged(int index) -{ - switch(index) - { - case 0: - setComboBoxFolderError(FileError_NotSet,false); - break; - case 1: - setComboBoxFolderError(FileError_Skip,false); - break; - } -} - -//set the translate -void copyEngine::newLanguageLoaded() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, retranslate the widget options"); - if(tempWidget!=NULL) - ui->retranslateUi(tempWidget); - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"ui not loaded!"); -} - -void copyEngine::setComboBoxFolderColision(FolderExistsAction action,bool changeComboBox) -{ - alwaysDoThisActionForFolderExists=action; - emit signal_setFolderColision(alwaysDoThisActionForFolderExists); - if(!changeComboBox || !uiIsInstalled) - return; - switch(action) - { - case FolderExists_Merge: - ui->comboBoxFolderColision->setCurrentIndex(1); - break; - case FolderExists_Skip: - ui->comboBoxFolderColision->setCurrentIndex(2); - break; - case FolderExists_Rename: - ui->comboBoxFolderColision->setCurrentIndex(3); - break; - default: - ui->comboBoxFolderColision->setCurrentIndex(0); - break; - } -} - -void copyEngine::setComboBoxFolderError(FileErrorAction action,bool changeComboBox) -{ - alwaysDoThisActionForFileError=action; - if(!changeComboBox || !uiIsInstalled) - return; - switch(action) - { - case FileError_Skip: - ui->comboBoxFolderError->setCurrentIndex(1); - break; - default: - ui->comboBoxFolderError->setCurrentIndex(0); - break; - } -} - -void copyEngine::doChecksum_toggled(bool doChecksum) -{ - listThread->set_doChecksum(doChecksum); -} - -void copyEngine::checksumOnlyOnError_toggled(bool checksumOnlyOnError) -{ - listThread->set_checksumOnlyOnError(checksumOnlyOnError); -} - -void copyEngine::checksumIgnoreIfImpossible_toggled(bool checksumIgnoreIfImpossible) -{ - listThread->set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible); -} - -void copyEngine::osBuffer_toggled(bool osBuffer) -{ - listThread->set_osBuffer(osBuffer); - ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked()); -} - -void copyEngine::osBufferLimited_toggled(bool osBufferLimited) -{ - listThread->set_osBufferLimited(osBufferLimited); - ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked()); -} - -void copyEngine::osBufferLimit_editingFinished() -{ - emit send_osBufferLimit(ui->osBufferLimit->value()); -} - -void copyEngine::showFilterDialog() -{ - if(filters!=NULL) - filters->exec(); -} - -void copyEngine::sendNewFilters() -{ - if(filters!=NULL) - emit send_setFilters(filters->getInclude(),filters->getExclude()); -} - -void copyEngine::sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"new filter"); - this->firstRenamingRule=firstRenamingRule; - this->otherRenamingRule=otherRenamingRule; - emit send_sendNewRenamingRules(firstRenamingRule,otherRenamingRule); -} - -void copyEngine::showRenamingRules() -{ - if(renamingRules==NULL) - { - QMessageBox::critical(NULL,tr("Options error"),tr("Options engine is not loaded, can't access to the filters")); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"options not loaded"); - return; - } - renamingRules->exec(); -} - -void copyEngine::get_realBytesTransfered(quint64 realBytesTransfered) -{ - size_for_speed=realBytesTransfered; -} - -void copyEngine::newActionInProgess(EngineActionInProgress action) -{ - if(action==Idle) - { - timerProgression.stop(); - timerActionDone.stop(); - } - else - { - timerProgression.start(); - timerActionDone.start(); - } -} diff --git a/plugins/CopyEngine/Ultracopier-0.3/copyEngine.h b/plugins/CopyEngine/Ultracopier-0.3/copyEngine.h deleted file mode 100755 index 66b3a4f..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/copyEngine.h +++ /dev/null @@ -1,359 +0,0 @@ -/** \file copyEngine.h -\brief Define the copy engine -\author alpha_one_x86 -\version 0.3 -\date 2010 */ - -#include <QObject> -#include <QList> -#include <QStringList> -#include <QFileInfo> -#include <QFile> -#include <QFileDialog> -#include <QMessageBox> - -#include "../../../interface/PluginInterface_CopyEngine.h" -#include "fileErrorDialog.h" -#include "fileExistsDialog.h" -#include "folderExistsDialog.h" -#include "fileIsSameDialog.h" -#include "ui_options.h" -#include "Environment.h" -#include "ListThread.h" -#include "Filters.h" -#include "RenamingRules.h" - -#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW -#include "debugDialog.h" -#include <QTimer> -#endif - -#ifndef COPY_ENGINE_H -#define COPY_ENGINE_H - -namespace Ui { - class options; -} - -/// \brief the implementation of copy engine plugin, manage directly few stuff, else pass to ListThread class. -class copyEngine : public PluginInterface_CopyEngine -{ - Q_OBJECT -public: - copyEngine(FacilityInterface * facilityEngine); - ~copyEngine(); - void connectTheSignalsSlots(); -private: - ListThread *listThread; - #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW - debugDialog debugDialogWindow; - #endif - QWidget * tempWidget; - Ui::options * ui; - bool uiIsInstalled; - QWidget * interface; - Filters * filters; - RenamingRules * renamingRules; - FacilityInterface * facilityEngine; - int maxSpeed; - bool doRightTransfer; - bool keepDate; - int blockSize; - bool autoStart; - bool checkDestinationFolderExists; - FileExistsAction alwaysDoThisActionForFileExists; - FileErrorAction alwaysDoThisActionForFileError; - FileErrorAction alwaysDoThisActionForFolderError; - FolderExistsAction alwaysDoThisActionForFolderExists; - bool dialogIsOpen; - volatile bool stopIt; - /// \brief error queue - struct errorQueueItem - { - TransferThread * transfer; ///< NULL if send by scan thread - scanFileOrFolder * scan; ///< NULL if send by transfer thread - bool mkPath; - bool rmPath; - QFileInfo inode; - QString errorString; - }; - QList<errorQueueItem> errorQueue; - /// \brief already exists queue - struct alreadyExistsQueueItem - { - TransferThread * transfer; ///< NULL if send by scan thread - scanFileOrFolder * scan; ///< NULL if send by transfer thread - QFileInfo source; - QFileInfo destination; - bool isSame; - }; - QList<alreadyExistsQueueItem> alreadyExistsQueue; - //temp variable - int error_index,loop_size; - FileErrorAction tempFileErrorAction; - FolderExistsAction tempFolderExistsAction; - FileExistsAction tempFileExistsAction; - quint64 size_for_speed;//because direct access to list thread into the main thread can't be do - CopyMode mode; - bool forcedMode; - - bool doChecksum; - bool checksumIgnoreIfImpossible; - bool checksumOnlyOnError; - bool osBuffer; - bool osBufferLimited; - unsigned int osBufferLimit; - QStringList includeStrings,includeOptions,excludeStrings,excludeOptions; - QString firstRenamingRule; - QString otherRenamingRule; - - //send action done timer - QTimer timerActionDone; - //send progression timer - QTimer timerProgression; -private slots: - #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW - void updateTheDebugInfo(QStringList,QStringList,int); - #endif - //dialog message - /// \note Can be call without queue because all call will be serialized - void fileAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,TransferThread * thread,bool isCalledByShowOneNewDialog=false); - /// \note Can be call without queue because all call will be serialized - void errorOnFile(QFileInfo fileInfo,QString errorString,TransferThread * thread,bool isCalledByShowOneNewDialog=false); - /// \note Can be call without queue because all call will be serialized - void folderAlreadyExists(QFileInfo source,QFileInfo destination,bool isSame,scanFileOrFolder * thread,bool isCalledByShowOneNewDialog=false); - /// \note Can be call without queue because all call will be serialized - void errorOnFolder(QFileInfo fileInfo,QString errorString,scanFileOrFolder * thread,bool isCalledByShowOneNewDialog=false); - //mkpath event - void mkPathErrorOnFolder(QFileInfo,QString,bool isCalledByShowOneNewDialog=false); - //rmpath event - void rmPathErrorOnFolder(QFileInfo,QString,bool isCalledByShowOneNewDialog=false); - //show one new dialog if needed - void showOneNewDialog(); - void sendNewFilters(); - - void doChecksum_toggled(bool); - void checksumOnlyOnError_toggled(bool); - void checksumIgnoreIfImpossible_toggled(bool); - void osBuffer_toggled(bool); - void osBufferLimited_toggled(bool); - void osBufferLimit_editingFinished(); - void showFilterDialog(); - void sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule); - void showRenamingRules(); - void get_realBytesTransfered(quint64 realBytesTransfered); - void newActionInProgess(EngineActionInProgress); -public: - /** \brief to send the options panel - * \return return false if have not the options - * \param tempWidget the widget to generate on it the options */ - bool getOptionsEngine(QWidget * tempWidget); - /** \brief to have interface widget to do modal dialog - * \param interface to have the widget of the interface, useful for modal dialog */ - void setInterfacePointer(QWidget * interface); - //return empty if multiple - /** \brief compare the current sources of the copy, with the passed arguments - * \param sources the sources list to compares with the current sources list - * \return true if have same sources, else false (or empty) */ - bool haveSameSource(const QStringList &sources); - /** \brief compare the current destination of the copy, with the passed arguments - * \param destination the destination to compares with the current destination - * \return true if have same destination, else false (or empty) */ - bool haveSameDestination(const QString &destination); - //external soft like file browser have send copy/move list to do - /** \brief send copy without destination, ask the destination - * \param sources the sources list to copy - * \return true if the copy have been accepted */ - bool newCopy(const QStringList &sources); - /** \brief send copy with destination - * \param sources the sources list to copy - * \param destination the destination to copy - * \return true if the copy have been accepted */ - bool newCopy(const QStringList &sources,const QString &destination); - /** \brief send move without destination, ask the destination - * \param sources the sources list to move - * \return true if the move have been accepted */ - bool newMove(const QStringList &sources); - /** \brief send move without destination, ask the destination - * \param sources the sources list to move - * \param destination the destination to move - * \return true if the move have been accepted */ - bool newMove(const QStringList &sources,const QString &destination); - /** \brief send the new transfer list - * \param file the transfer list */ - void newTransferList(const QString &file); - - /** \brief to get byte read, use by Ultracopier for the speed calculation - * real size transfered to right speed calculation */ - quint64 realByteTransfered(); - //speed limitation - /** \brief get the speed limitation - * < -1 if not able, 0 if disabled */ - qint64 getSpeedLimitation(); - //get collision action - /** \brief get the collision action list */ - QList<QPair<QString,QString> > getCollisionAction(); - /** \brief get the collision error list */ - QList<QPair<QString,QString> > getErrorAction(); - - /** \brief to set drives detected - * specific to this copy engine */ - void setDrive(const QStringList &drives); - - /** \brief to sync the transfer list - * Used when the interface is changed, useful to minimize the memory size */ - void syncTransferList(); - - void set_doChecksum(bool doChecksum); - void set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible); - void set_checksumOnlyOnError(bool checksumOnlyOnError); - void set_osBuffer(bool osBuffer); - void set_osBufferLimited(bool osBufferLimited); - void set_osBufferLimit(unsigned int osBufferLimit); - void set_setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions); - void setRenamingRules(QString firstRenamingRule,QString otherRenamingRule); -public slots: - //user ask ask to add folder (add it with interface ask source/destination) - /** \brief add folder called on the interface - * Used by manual adding */ - bool userAddFolder(const CopyMode &mode); - /** \brief add file called on the interface - * Used by manual adding */ - bool userAddFile(const CopyMode &mode); - //action on the copy - /// \brief put the transfer in pause - void pause(); - /// \brief resume the transfer - void resume(); - /** \brief skip one transfer entry - * \param id id of the file to remove */ - void skip(const quint64 &id); - /// \brief cancel all the transfer - void cancel(); - //edit the transfer list - /** \brief remove the selected item - * \param ids ids is the id list of the selected items */ - void removeItems(const QList<int> &ids); - /** \brief move on top of the list the selected item - * \param ids ids is the id list of the selected items */ - void moveItemsOnTop(const QList<int> &ids); - /** \brief move up the list the selected item - * \param ids ids is the id list of the selected items */ - void moveItemsUp(const QList<int> &ids); - /** \brief move down the list the selected item - * \param ids ids is the id list of the selected items */ - void moveItemsDown(const QList<int> &ids); - /** \brief move on bottom of the list the selected item - * \param ids ids is the id list of the selected items */ - void moveItemsOnBottom(const QList<int> &ids); - - /** \brief give the forced mode, to export/import transfer list */ - void forceMode(const CopyMode &mode); - /// \brief export the transfer list into a file - void exportTransferList(); - /// \brief import the transfer list into a file - void importTransferList(); - - /** \brief to set the speed limitation - * -1 if not able, 0 if disabled */ - bool setSpeedLimitation(const qint64 &speedLimitation); - //action - /// \brief to set the collision action - void setCollisionAction(const QString &action); - /// \brief to set the error action - void setErrorAction(const QString &action); - - // specific to this copy engine - - /// \brief set if the rights shoul be keep - void setRightTransfer(const bool doRightTransfer); - /// \brief set keep date - void setKeepDate(const bool keepDate); - /// \brief set block size in KB - void setBlockSize(const int blockSize); - /// \brief set auto start - void setAutoStart(const bool autoStart); - /// \brief set if need check if the destination folder exists - void setCheckDestinationFolderExists(const bool checkDestinationFolderExists); - /// \brief reset widget - void resetTempWidget(); - //autoconnect - void on_comboBoxFolderColision_currentIndexChanged(int index); - void on_comboBoxFolderError_currentIndexChanged(int index); - /// \brief need retranslate the insterface - void newLanguageLoaded(); -private slots: - void setComboBoxFolderColision(FolderExistsAction action,bool changeComboBox=true); - void setComboBoxFolderError(FileErrorAction action,bool changeComboBox=true); - void warningTransferList(const QString &warning); - void errorTransferList(const QString &error); -signals: - //send information about the copy - void actionInProgess(EngineActionInProgress); //should update interface information on this event - - void newActionOnList(const QList<returnActionOnCopyList> &);///very important, need be temporized to group the modification to do and not flood the interface - void syncReady(); - - /** \brief to get the progression for a specific file - * \param id the id of the transfer, id send during population the transfer list - * first = current transfered byte, second = byte to transfer */ - void pushFileProgression(const QList<ProgressionItem> &progressionList); - //get information about the copy - /** \brief to get the general progression - * first = current transfered byte, second = byte to transfer */ - void pushGeneralProgression(const quint64 &,const quint64 &); - - void newFolderListing(const QString &path); - void newCollisionAction(const QString &action); - void newErrorAction(const QString &action); - void isInPause(bool); - - //action on the copy - void signal_pause(); - void signal_resume(); - void signal_skip(const quint64 &id); - - //edit the transfer list - void signal_removeItems(const QList<int> &ids); - void signal_moveItemsOnTop(const QList<int> &ids); - void signal_moveItemsUp(const QList<int> &ids); - void signal_moveItemsDown(const QList<int> &ids); - void signal_moveItemsOnBottom(const QList<int> &ids); - - void signal_forceMode(const CopyMode &mode); - void signal_exportTransferList(const QString &fileName); - void signal_importTransferList(const QString &fileName); - - //action - void signal_setCollisionAction(FileExistsAction alwaysDoThisActionForFileExists); - void signal_setComboBoxFolderColision(FolderExistsAction action); - void signal_setFolderColision(FolderExistsAction action); - - //when the cancel is clicked on copy engine dialog - void cancelAll(); - - //internal cancel - void tryCancel(); - - //when can be deleted - void canBeDeleted(); - - //send error occurred - void error(const QString &path,const quint64 &size,const QDateTime &mtime,const QString &error); - //for the extra logging - void rmPath(const QString &path); - void mkPath(const QString &path); - #ifdef ULTRACOPIER_PLUGIN_DEBUG - /// \brief To debug source - void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne); - #endif - - //other signals - void queryOneNewDialog(); - - void send_osBufferLimit(const unsigned int &osBufferLimit); - void send_setFilters(const QList<Filters_rules> &include,const QList<Filters_rules> &exclude); - void send_sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule); -}; - -#endif // COPY_ENGINE_H diff --git a/plugins/CopyEngine/Ultracopier-0.3/copyEngine.pro b/plugins/CopyEngine/Ultracopier-0.3/copyEngine.pro deleted file mode 100644 index 13ab523..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/copyEngine.pro +++ /dev/null @@ -1,82 +0,0 @@ -TEMPLATE = lib -CONFIG += plugin -HEADERS = copyEngine.h \ - StructEnumDefinition.h \ - scanFileOrFolder.h \ - fileErrorDialog.h \ - fileExistsDialog.h \ - fileIsSameDialog.h \ - factory.h \ - StructEnumDefinition_CopyEngine.h \ - DebugEngineMacro.h \ - Variable.h \ - debugDialog.h \ - TransferThread.h \ - ReadThread.h \ - WriteThread.h \ - RmPath.h \ - MkPath.h \ - folderExistsDialog.h \ - AvancedQFile.h \ - ListThread.h \ - ../../../interface/PluginInterface_CopyEngine.h \ - ../../../interface/OptionInterface.h \ - ../../../interface/FacilityInterface.h \ - Filters.h \ - FilterRules.h \ - RenamingRules.h -SOURCES = copyEngine.cpp \ - scanFileOrFolder.cpp \ - fileErrorDialog.cpp \ - fileExistsDialog.cpp \ - fileIsSameDialog.cpp \ - factory.cpp \ - debugDialog.cpp \ - TransferThread.cpp \ - ReadThread.cpp \ - WriteThread.cpp \ - RmPath.cpp \ - MkPath.cpp \ - folderExistsDialog.cpp \ - AvancedQFile.cpp \ - copyEngine-collision-and-error.cpp \ - ListThread.cpp \ - Filters.cpp \ - FilterRules.cpp \ - RenamingRules.cpp \ - ListThread_InodeAction.cpp -TARGET = $$qtLibraryTarget(copyEngine) -TRANSLATIONS += Languages/fr/translation.ts \ - Languages/ar/translation.ts \ - Languages/zh/translation.ts \ - Languages/es/translation.ts \ - Languages/de/translation.ts \ - Languages/el/translation.ts \ - Languages/it/translation.ts \ - Languages/ja/translation.ts \ - Languages/id/translation.ts \ - Languages/pl/translation.ts \ - Languages/ru/translation.ts \ - Languages/tr/translation.ts \ - Languages/th/translation.ts \ - Languages/hi/translation.ts \ - Languages/nl/translation.ts \ - Languages/no/translation.ts \ - Languages/pt/translation.ts \ - Languages/ko/translation.ts - -FORMS += \ - options.ui \ - fileErrorDialog.ui \ - fileExistsDialog.ui \ - fileIsSameDialog.ui \ - debugDialog.ui \ - folderExistsDialog.ui \ - Filters.ui \ - FilterRules.ui \ - RenamingRules.ui - -OTHER_FILES += informations.xml - -RESOURCES += \ - resources.qrc diff --git a/plugins/CopyEngine/Ultracopier-0.3/debugDialog.cpp b/plugins/CopyEngine/Ultracopier-0.3/debugDialog.cpp deleted file mode 100644 index a03aec0..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/debugDialog.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/** \file debugDialog.cpp -\brief Define the dialog to have debug information -\author alpha_one_x86 -\version 0.3 -\date 2010 */ - -#include "debugDialog.h" -#include "ui_debugDialog.h" - -#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW - -debugDialog::debugDialog(QWidget *parent) : - QWidget(parent), - ui(new Ui::debugDialog) -{ - ui->setupUi(this); -} - -debugDialog::~debugDialog() -{ - delete ui; -} - -void debugDialog::setTransferList(const QStringList &list) -{ - if(list.size()==ui->tranferList->count()) - { - int index=0; - while(index<list.size()) - { - ui->tranferList->item(index)->setText(list.at(index)); - index++; - } - } - else - { - ui->tranferList->clear(); - ui->tranferList->addItems(list); - } -} - -void debugDialog::setActiveTransfer(int activeTransfer) -{ - ui->spinBoxActiveTransfer->setValue(activeTransfer); -} - -void debugDialog::setInodeUsage(int inodeUsage) -{ - ui->spinBoxNumberOfInode->setValue(inodeUsage); -} - -void debugDialog::setTransferThreadList(const QStringList &list) -{ - if(list.size()==ui->transferThreadList->count()) - { - int index=0; - while(index<list.size()) - { - ui->transferThreadList->item(index)->setText(list.at(index)); - index++; - } - } - else - { - ui->transferThreadList->clear(); - ui->transferThreadList->addItems(list); - } -} - -#endif diff --git a/plugins/CopyEngine/Ultracopier-0.3/debugDialog.h b/plugins/CopyEngine/Ultracopier-0.3/debugDialog.h deleted file mode 100644 index 3d48857..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/debugDialog.h +++ /dev/null @@ -1,40 +0,0 @@ -/** \file debugDialog.h -\brief Define the dialog to have debug information -\author alpha_one_x86 -\version 0.3 -\date 2010 */ - -#ifndef DEBUGDAILOG_H -#define DEBUGDAILOG_H - -#include "Environment.h" - -#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW -#include <QWidget> - -namespace Ui { - class debugDialog; -} - -/// \brief class to the dialog to have debug information -class debugDialog : public QWidget -{ - Q_OBJECT -public: - explicit debugDialog(QWidget *parent = 0); - ~debugDialog(); - /// \brief to set the transfer list, limited in result to not slow down the application - void setTransferList(const QStringList &list); - /// \brief show the transfer thread, it show be a thread pool in normal time - void setTransferThreadList(const QStringList &list); - /// \brief show how many transfer is active - void setActiveTransfer(int activeTransfer); - /// \brief show many many inode is manipulated - void setInodeUsage(int inodeUsage); -private: - Ui::debugDialog *ui; -}; - -#endif // ULTRACOPIER_PLUGIN_DEBUG_WINDOW - -#endif // DEBUGDAILOG_H diff --git a/plugins/CopyEngine/Ultracopier-0.3/factory.cpp b/plugins/CopyEngine/Ultracopier-0.3/factory.cpp deleted file mode 100644 index 642a05b..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/factory.cpp +++ /dev/null @@ -1,407 +0,0 @@ -/** \file factory.cpp -\brief Define the factory to create new instance -\author alpha_one_x86 -\version 0.3 -\date 2010 */ - -#include <QtCore> -#include <QFileDialog> - -#include "factory.h" - -Factory::Factory() : - ui(new Ui::options()) -{ - tempWidget=new QWidget(); - ui->setupUi(tempWidget); - errorFound=false; - optionsEngine=NULL; - filters=new Filters(tempWidget); - renamingRules=new RenamingRules(tempWidget); - #if defined (Q_OS_WIN32) - QFileInfoList temp=QDir::drives(); - for (int i = 0; i < temp.size(); ++i) { - mountSysPoint<<temp.at(i).filePath(); - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"mountSysPoint: "+mountSysPoint.join(";")); - #elif defined (Q_OS_LINUX) - connect(&mount,SIGNAL(error(QProcess::ProcessError)), this,SLOT(error(QProcess::ProcessError))); - connect(&mount,SIGNAL(finished(int,QProcess::ExitStatus)), this,SLOT(finished(int,QProcess::ExitStatus))); - connect(&mount,SIGNAL(readyReadStandardOutput()), this,SLOT(readyReadStandardOutput())); - connect(&mount,SIGNAL(readyReadStandardError()), this,SLOT(readyReadStandardError())); - mount.start("mount"); - #endif - connect(ui->doRightTransfer, SIGNAL(toggled(bool)), this,SLOT(setDoRightTransfer(bool))); - connect(ui->keepDate, SIGNAL(toggled(bool)), this,SLOT(setKeepDate(bool))); - connect(ui->blockSize, SIGNAL(valueChanged(int)), this,SLOT(setBlockSize(int))); - connect(ui->autoStart, SIGNAL(toggled(bool)), this,SLOT(setAutoStart(bool))); - connect(ui->doChecksum, SIGNAL(toggled(bool)), this,SLOT(doChecksum_toggled(bool))); - connect(ui->checksumIgnoreIfImpossible, SIGNAL(toggled(bool)), this,SLOT(checksumIgnoreIfImpossible_toggled(bool))); - connect(ui->checksumOnlyOnError, SIGNAL(toggled(bool)), this,SLOT(checksumOnlyOnError_toggled(bool))); - connect(ui->osBuffer, SIGNAL(toggled(bool)), this,SLOT(osBuffer_toggled(bool))); - connect(ui->osBufferLimited, SIGNAL(toggled(bool)), this,SLOT(osBufferLimited_toggled(bool))); - connect(ui->osBufferLimit, SIGNAL(editingFinished()), this,SLOT(osBufferLimit_editingFinished())); - - connect(filters,SIGNAL(sendNewFilters(QStringList,QStringList,QStringList,QStringList)),this,SLOT(sendNewFilters(QStringList,QStringList,QStringList,QStringList))); - connect(ui->filters,SIGNAL(clicked()),this,SLOT(showFilterDialog())); - connect(renamingRules,SIGNAL(sendNewRenamingRules(QString,QString)),this,SLOT(sendNewRenamingRules(QString,QString))); - connect(ui->renamingRules,SIGNAL(clicked()),this,SLOT(showRenamingRules())); - - ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked()); -} - -Factory::~Factory() -{ - delete renamingRules; - delete filters; - delete ui; -} - -PluginInterface_CopyEngine * Factory::getInstance() -{ - copyEngine *realObject=new copyEngine(facilityEngine); - #ifdef ULTRACOPIER_PLUGIN_DEBUG - connect(realObject,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int))); - #endif - realObject->connectTheSignalsSlots(); - realObject->setDrive(mountSysPoint); - PluginInterface_CopyEngine * newTransferEngine=realObject; - connect(this,SIGNAL(reloadLanguage()),newTransferEngine,SLOT(newLanguageLoaded())); - realObject->setRightTransfer( optionsEngine->getOptionValue("doRightTransfer").toBool()); - realObject->setKeepDate( optionsEngine->getOptionValue("keepDate").toBool()); - realObject->setBlockSize( optionsEngine->getOptionValue("blockSize").toInt()); - realObject->setAutoStart( optionsEngine->getOptionValue("autoStart").toBool()); - realObject->on_comboBoxFolderColision_currentIndexChanged(ui->comboBoxFolderColision->currentIndex()); - realObject->on_comboBoxFolderError_currentIndexChanged(ui->comboBoxFolderError->currentIndex()); - realObject->setCheckDestinationFolderExists( optionsEngine->getOptionValue("checkDestinationFolder").toBool()); - - realObject->set_doChecksum(optionsEngine->getOptionValue("doChecksum").toBool()); - realObject->set_checksumIgnoreIfImpossible(optionsEngine->getOptionValue("checksumIgnoreIfImpossible").toBool()); - realObject->set_checksumOnlyOnError(optionsEngine->getOptionValue("checksumOnlyOnError").toBool()); - realObject->set_osBuffer(optionsEngine->getOptionValue("osBuffer").toBool()); - realObject->set_osBufferLimited(optionsEngine->getOptionValue("osBufferLimited").toBool()); - realObject->set_osBufferLimit(optionsEngine->getOptionValue("osBufferLimit").toUInt()); - realObject->set_setFilters(optionsEngine->getOptionValue("includeStrings").toStringList(), - optionsEngine->getOptionValue("includeOptions").toStringList(), - optionsEngine->getOptionValue("excludeStrings").toStringList(), - optionsEngine->getOptionValue("excludeOptions").toStringList() - ); - realObject->setRenamingRules(optionsEngine->getOptionValue("firstRenamingRule").toString(),optionsEngine->getOptionValue("otherRenamingRule").toString()); - return newTransferEngine; -} - -void Factory::setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityInterface,const bool &portableVersion) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, writePath: "+writePath+", pluginPath:"+pluginPath); - this->facilityEngine=facilityInterface; - Q_UNUSED(portableVersion); - #ifndef ULTRACOPIER_PLUGIN_DEBUG - Q_UNUSED(writePath); - Q_UNUSED(pluginPath); - #endif - #if ! defined (Q_CC_GNU) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"Unable to change date time of files, only gcc is supported"); - #endif - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,COMPILERINFO); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"MAX BUFFER BLOCK: "+QString::number(ULTRACOPIER_PLUGIN_MAXBUFFERBLOCK)); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"MIN TIMER INTERVAL: "+QString::number(ULTRACOPIER_PLUGIN_MINTIMERINTERVAL)); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"MAX TIMER INTERVAL: "+QString::number(ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL)); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"NUM SEM SPEED MANAGEMENT: "+QString::number(ULTRACOPIER_PLUGIN_NUMSEMSPEEDMANAGEMENT)); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"MAX PARALLEL INODE OPT: "+QString::number(ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT)); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"MAX PARALLEL TRANFER: "+QString::number(ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER)); - #if defined (ULTRACOPIER_PLUGIN_CHECKLISTTYPE) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"CHECK LIST TYPE set"); - #else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"CHECK LIST TYPE not set"); - #endif - if(options!=NULL) - { - optionsEngine=options; - //load the options - QList<QPair<QString, QVariant> > KeysList; - KeysList.append(qMakePair(QString("doRightTransfer"),QVariant(true))); - KeysList.append(qMakePair(QString("keepDate"),QVariant(true))); - KeysList.append(qMakePair(QString("blockSize"),QVariant(1024)));//1024KB as default - KeysList.append(qMakePair(QString("autoStart"),QVariant(true))); - KeysList.append(qMakePair(QString("folderError"),QVariant(0))); - KeysList.append(qMakePair(QString("folderColision"),QVariant(0))); - KeysList.append(qMakePair(QString("checkDestinationFolder"),QVariant(true))); - KeysList.append(qMakePair(QString("includeStrings"),QVariant(QStringList()))); - KeysList.append(qMakePair(QString("includeOptions"),QVariant(QStringList()))); - KeysList.append(qMakePair(QString("excludeStrings"),QVariant(QStringList()))); - KeysList.append(qMakePair(QString("excludeOptions"),QVariant(QStringList()))); - KeysList.append(qMakePair(QString("doChecksum"),QVariant(true))); - KeysList.append(qMakePair(QString("checksumIgnoreIfImpossible"),QVariant(true))); - KeysList.append(qMakePair(QString("checksumOnlyOnError"),QVariant(true))); - KeysList.append(qMakePair(QString("osBuffer"),QVariant(true))); - KeysList.append(qMakePair(QString("firstRenamingRule"),QVariant(""))); - KeysList.append(qMakePair(QString("otherRenamingRule"),QVariant(""))); - #ifdef Q_OS_WIN32 - KeysList.append(qMakePair(QString("osBufferLimited"),QVariant(true))); - #else - KeysList.append(qMakePair(QString("osBufferLimited"),QVariant(false))); - #endif - KeysList.append(qMakePair(QString("osBufferLimit"),QVariant(512))); - optionsEngine->addOptionGroup(KeysList); - #if ! defined (Q_CC_GNU) - ui->keepDate->setEnabled(false); - ui->keepDate->setToolTip("Not supported with this compiler"); - #endif - ui->doRightTransfer->setChecked(optionsEngine->getOptionValue("doRightTransfer").toBool()); - ui->keepDate->setChecked(optionsEngine->getOptionValue("keepDate").toBool()); - ui->blockSize->setValue(optionsEngine->getOptionValue("blockSize").toUInt()); - ui->autoStart->setChecked(optionsEngine->getOptionValue("autoStart").toBool()); - ui->comboBoxFolderError->setCurrentIndex(optionsEngine->getOptionValue("folderError").toUInt()); - ui->comboBoxFolderColision->setCurrentIndex(optionsEngine->getOptionValue("folderColision").toUInt()); - ui->checkBoxDestinationFolderExists->setChecked(optionsEngine->getOptionValue("checkDestinationFolder").toBool()); - ui->doChecksum->setChecked(optionsEngine->getOptionValue("doChecksum").toBool()); - ui->checksumIgnoreIfImpossible->setChecked(optionsEngine->getOptionValue("checksumIgnoreIfImpossible").toBool()); - ui->checksumOnlyOnError->setChecked(optionsEngine->getOptionValue("checksumOnlyOnError").toBool()); - ui->osBuffer->setChecked(optionsEngine->getOptionValue("osBuffer").toBool()); - ui->osBufferLimited->setChecked(optionsEngine->getOptionValue("osBufferLimited").toBool()); - ui->osBufferLimit->setValue(optionsEngine->getOptionValue("osBufferLimit").toUInt()); - filters->setFilters(optionsEngine->getOptionValue("includeStrings").toStringList(), - optionsEngine->getOptionValue("includeOptions").toStringList(), - optionsEngine->getOptionValue("excludeStrings").toStringList(), - optionsEngine->getOptionValue("excludeOptions").toStringList() - ); - renamingRules->setRenamingRules(optionsEngine->getOptionValue("firstRenamingRule").toString(),optionsEngine->getOptionValue("otherRenamingRule").toString()); - } -} - -QStringList Factory::supportedProtocolsForTheSource() -{ - return QStringList() << "file"; -} - -QStringList Factory::supportedProtocolsForTheDestination() -{ - return QStringList() << "file"; -} - -CopyType Factory::getCopyType() -{ - return FileAndFolder; -} - -TransferListOperation Factory::getTransferListOperation() -{ - return TransferListOperation_ImportExport; -} - -bool Factory::canDoOnlyCopy() -{ - return false; -} - -void Factory::error(QProcess::ProcessError error) -{ - #ifndef ULTRACOPIER_PLUGIN_DEBUG - Q_UNUSED(error) - #endif - errorFound=true; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"have detected error: "+QString::number(error)); -} - -void Factory::finished(int exitCode, QProcess::ExitStatus exitStatus) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"exitCode: "+QString::number(exitCode)+", exitStatus: "+QString::number(exitStatus)); - #ifndef ULTRACOPIER_PLUGIN_DEBUG - Q_UNUSED(exitCode) - Q_UNUSED(exitStatus) - #endif - if(!StandardError.isEmpty()) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"have finished with text on error output: "+StandardError); - else if(errorFound) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"have finished with error and no text"); - { - QStringList tempList=StandardOutput.split(QRegExp("[\n\r]+")); - int index=0; - while(index<tempList.size()) - { - QString newString=tempList.at(index); - newString=newString.remove(QRegExp("^.* on ")); - newString=newString.remove(QRegExp(" type .*$")); - if(!newString.endsWith(QDir::separator())) - newString+=QDir::separator(); - mountSysPoint<<newString; - index++; - } - mountSysPoint.removeDuplicates(); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"mountSysPoint: "+mountSysPoint.join(";")); - } -} - -void Factory::readyReadStandardError() -{ - StandardError+=mount.readAllStandardError(); -} - -void Factory::readyReadStandardOutput() -{ - StandardOutput+=mount.readAllStandardOutput(); -} - -void Factory::resetOptions() -{ -} - -QWidget * Factory::options() -{ - ui->autoStart->setChecked(optionsEngine->getOptionValue("autoStart").toBool()); - return tempWidget; -} - -void Factory::setDoRightTransfer(bool doRightTransfer) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed"); - if(optionsEngine!=NULL) - optionsEngine->setOptionValue("doRightTransfer",doRightTransfer); - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented"); -} - -void Factory::setKeepDate(bool keepDate) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed"); - if(optionsEngine!=NULL) - optionsEngine->setOptionValue("keepDate",keepDate); - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented"); -} - -void Factory::setBlockSize(int blockSize) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed"); - if(optionsEngine!=NULL) - optionsEngine->setOptionValue("blockSize",blockSize); - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented"); -} - -void Factory::setAutoStart(bool autoStart) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed"); - if(optionsEngine!=NULL) - optionsEngine->setOptionValue("autoStart",autoStart); - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented"); -} - -void Factory::newLanguageLoaded() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, retranslate the widget options"); - ui->retranslateUi(tempWidget); - if(optionsEngine!=NULL) - { - filters->newLanguageLoaded(); - renamingRules->newLanguageLoaded(); - } - emit reloadLanguage(); -} - -Q_EXPORT_PLUGIN2(copyEngine, Factory); - -void Factory::doChecksum_toggled(bool doChecksum) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed"); - if(optionsEngine!=NULL) - optionsEngine->setOptionValue("doChecksum",doChecksum); - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented"); -} - -void Factory::checksumOnlyOnError_toggled(bool checksumOnlyOnError) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed"); - if(optionsEngine!=NULL) - optionsEngine->setOptionValue("checksumOnlyOnError",checksumOnlyOnError); - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented"); -} - -void Factory::osBuffer_toggled(bool osBuffer) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed"); - if(optionsEngine!=NULL) - optionsEngine->setOptionValue("osBuffer",osBuffer); - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented"); - ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked()); -} - -void Factory::osBufferLimited_toggled(bool osBufferLimited) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed"); - if(optionsEngine!=NULL) - optionsEngine->setOptionValue("osBufferLimited",osBufferLimited); - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented"); - ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked()); -} - -void Factory::osBufferLimit_editingFinished() -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the spinbox have changed"); - if(optionsEngine!=NULL) - optionsEngine->setOptionValue("osBufferLimit",ui->osBufferLimit->value()); - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented"); -} - -void Factory::showFilterDialog() -{ - if(optionsEngine==NULL) - { - QMessageBox::critical(NULL,tr("Options error"),tr("Options engine is not loaded, can't access to the filters")); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"options not loaded"); - return; - } - filters->exec(); -} - -void Factory::sendNewFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"new filter"); - if(optionsEngine!=NULL) - { - optionsEngine->setOptionValue("includeStrings",includeStrings); - optionsEngine->setOptionValue("includeOptions",includeOptions); - optionsEngine->setOptionValue("excludeStrings",excludeStrings); - optionsEngine->setOptionValue("excludeOptions",excludeOptions); - } - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented"); -} - -void Factory::sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"new filter"); - if(optionsEngine!=NULL) - { - optionsEngine->setOptionValue("firstRenamingRule",firstRenamingRule); - optionsEngine->setOptionValue("otherRenamingRule",otherRenamingRule); - } - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented"); -} - -void Factory::showRenamingRules() -{ - if(optionsEngine==NULL) - { - QMessageBox::critical(NULL,tr("Options error"),tr("Options engine is not loaded, can't access to the filters")); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"options not loaded"); - return; - } - renamingRules->exec(); -} - -void Factory::checksumIgnoreIfImpossible_toggled(bool checksumIgnoreIfImpossible) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed"); - if(optionsEngine!=NULL) - optionsEngine->setOptionValue("checksumIgnoreIfImpossible",checksumIgnoreIfImpossible); - else - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented"); -} diff --git a/plugins/CopyEngine/Ultracopier-0.3/factory.h b/plugins/CopyEngine/Ultracopier-0.3/factory.h deleted file mode 100644 index c5cfa91..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/factory.h +++ /dev/null @@ -1,95 +0,0 @@ -/** \file factory.h -\brief Define the factory to create new instance -\author alpha_one_x86 -\version 0.3 -\date 2010 */ - -#include <QObject> -#include <QList> -#include <QStringList> -#include <QFileInfo> -#include <QProcess> - -#include "../../../interface/PluginInterface_CopyEngine.h" -#include "StructEnumDefinition.h" -#include "ui_options.h" -#include "copyEngine.h" -#include "Environment.h" -#include "Filters.h" -#include "RenamingRules.h" - -#ifndef FACTORY_H -#define FACTORY_H - -namespace Ui { - class options; -} - -/** \brief to generate copy engine instance */ -class Factory : public PluginInterface_CopyEngineFactory -{ - Q_OBJECT - Q_INTERFACES(PluginInterface_CopyEngineFactory) -public: - Factory(); - ~Factory(); - /// \brief to return the instance of the copy engine - PluginInterface_CopyEngine * getInstance(); - /// \brief set the resources, to store options, to have facilityInterface - void setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityInterface,const bool &portableVersion); - //get mode allowed - /// \brief define if can copy file, folder or both - CopyType getCopyType(); - /// \brief to return which kind of transfer list operation is supported - TransferListOperation getTransferListOperation(); - /// \brief define if can only copy, or copy and move - bool canDoOnlyCopy(); - /// \brief to get the supported protocols for the source - QStringList supportedProtocolsForTheSource(); - /// \brief to get the supported protocols for the destination - QStringList supportedProtocolsForTheDestination(); - /// \brief to get the options of the copy engine - QWidget * options(); -private: - Ui::options *ui; - QWidget* tempWidget; - OptionInterface * optionsEngine; - QStringList mountSysPoint; - QProcess mount; - QString StandardError; - QString StandardOutput; - bool errorFound; - FacilityInterface * facilityEngine; - Filters *filters; - RenamingRules *renamingRules; -private slots: - void error(QProcess::ProcessError error); - void finished(int exitCode, QProcess::ExitStatus exitStatus); - void readyReadStandardError(); - void readyReadStandardOutput(); - void setDoRightTransfer(bool doRightTransfer); - void setKeepDate(bool keepDate); - void setBlockSize(int blockSize); - void setAutoStart(bool autoStart); - void showFilterDialog(); - void sendNewFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions); - void doChecksum_toggled(bool); - void checksumOnlyOnError_toggled(bool); - void osBuffer_toggled(bool); - void osBufferLimited_toggled(bool); - void osBufferLimit_editingFinished(); - void checksumIgnoreIfImpossible_toggled(bool); - void sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule); - void showRenamingRules(); -public slots: - void resetOptions(); - void newLanguageLoaded(); -signals: - void reloadLanguage(); - #ifdef ULTRACOPIER_PLUGIN_DEBUG - /// \brief To debug source - void debugInformation(DebugLevel level,QString fonction,QString text,QString file,int ligne); - #endif -}; - -#endif // FACTORY_H diff --git a/plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.cpp b/plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.cpp deleted file mode 100644 index 0d9fa9a..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.cpp +++ /dev/null @@ -1,95 +0,0 @@ -#include "fileErrorDialog.h" -#include "ui_fileErrorDialog.h" - -fileErrorDialog::fileErrorDialog(QWidget *parent,QFileInfo fileInfo,QString errorString,bool havePutAtTheEndButton) : - QDialog(parent), - ui(new Ui::fileErrorDialog) -{ - ui->setupUi(this); - action=FileError_Cancel; - ui->label_error->setText(errorString); - ui->label_content_file_name->setText(fileInfo.fileName()); - if(fileInfo.exists()) - { - ui->label_content_size->setText(QString::number(fileInfo.size())); - QDateTime maxTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1)); - if(maxTime<fileInfo.lastModified()) - { - ui->label_modified->setVisible(true); - ui->label_content_modified->setVisible(true); - ui->label_content_modified->setText(fileInfo.lastModified().toString()); - } - else - { - ui->label_modified->setVisible(false); - ui->label_content_modified->setVisible(false); - } - if(fileInfo.isDir()) - { - this->setWindowTitle(tr("Error on folder")); - ui->label_size->hide(); - ui->label_content_size->hide(); - ui->label_file_name->setText(tr("Folder name")); - } - } - else - { - ui->label_size->hide(); - ui->label_content_size->hide(); - ui->label_modified->hide(); - ui->label_content_modified->hide(); - } - if(!havePutAtTheEndButton) - ui->PutToBottom->hide(); -} - -fileErrorDialog::~fileErrorDialog() -{ - delete ui; -} - -void fileErrorDialog::changeEvent(QEvent *e) -{ - QWidget::changeEvent(e); - switch (e->type()) { - case QEvent::LanguageChange: - ui->retranslateUi(this); - break; - default: - break; - } -} - -void fileErrorDialog::on_PutToBottom_clicked() -{ - action=FileError_PutToEndOfTheList; - this->close(); -} - -void fileErrorDialog::on_Retry_clicked() -{ - action=FileError_Retry; - this->close(); -} - -void fileErrorDialog::on_Skip_clicked() -{ - action=FileError_Skip; - this->close(); -} - -void fileErrorDialog::on_Cancel_clicked() -{ - action=FileError_Cancel; - this->close(); -} - -bool fileErrorDialog::getAlways() -{ - return ui->checkBoxAlways->isChecked(); -} - -FileErrorAction fileErrorDialog::getAction() -{ - return action; -} diff --git a/plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.h b/plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.h deleted file mode 100644 index b14fe87..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.h +++ /dev/null @@ -1,45 +0,0 @@ -/** \file fileErrorDialog.h -\brief Define the dialog error on the file -\author alpha_one_x86 -\version 0.3 -\date 2010 */ - -#include <QDialog> -#include <QWidget> -#include <QString> -#include <QDateTime> -#include <QFileInfo> -#include "Environment.h" - -#ifndef FILEERRORDIALOG_H -#define FILEERRORDIALOG_H - -namespace Ui { - class fileErrorDialog; -} - -/// \brief to show error dialog, and ask what do -class fileErrorDialog : public QDialog -{ - Q_OBJECT -public: - /// \brief create the object and pass all the informations to it - explicit fileErrorDialog(QWidget *parent,QFileInfo fileInfo,QString errorString,bool havePutAtTheEndButton=true); - ~fileErrorDialog(); - /// \brief return the the always checkbox is checked - bool getAlways(); - /// \brief return the action clicked - FileErrorAction getAction(); -protected: - void changeEvent(QEvent *e); -private slots: - void on_PutToBottom_clicked(); - void on_Retry_clicked(); - void on_Skip_clicked(); - void on_Cancel_clicked(); -private: - Ui::fileErrorDialog *ui; - FileErrorAction action; -}; - -#endif // FILEERRORDIALOG_H diff --git a/plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.cpp b/plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.cpp deleted file mode 100644 index 191dd79..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.cpp +++ /dev/null @@ -1,189 +0,0 @@ -#include "fileExistsDialog.h" -#include "ui_fileExistsDialog.h" - -#include <QDebug> - -fileExistsDialog::fileExistsDialog(QWidget *parent,QFileInfo source,QFileInfo destination,QString firstRenamingRule,QString otherRenamingRule) : - QDialog(parent), - ui(new Ui::fileExistsDialog) -{ - ui->setupUi(this); - action=FileExists_Cancel; - destinationInfo=destination; - oldName=destination.fileName(); - ui->lineEditNewName->setText(oldName); - ui->lineEditNewName->setPlaceholderText(oldName); - ui->Overwrite->addAction(ui->actionOverwrite_if_newer); - ui->Overwrite->addAction(ui->actionOverwrite_if_not_same_modification_date); - ui->label_content_source_size->setText(QString::number(source.size())); - ui->label_content_source_modified->setText(source.lastModified().toString()); - ui->label_content_source_file_name->setText(source.fileName()); - ui->label_content_destination_size->setText(QString::number(destination.size())); - ui->label_content_destination_modified->setText(destination.lastModified().toString()); - ui->label_content_destination_file_name->setText(destination.fileName()); - QDateTime maxTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1)); - if(maxTime<source.lastModified()) - { - ui->label_source_modified->setVisible(true); - ui->label_content_source_modified->setVisible(true); - ui->label_content_source_modified->setText(source.lastModified().toString()); - } - else - { - ui->label_source_modified->setVisible(false); - ui->label_content_source_modified->setVisible(false); - } - if(maxTime<destination.lastModified()) - { - ui->label_destination_modified->setVisible(true); - ui->label_content_destination_modified->setVisible(true); - ui->label_content_destination_modified->setText(destination.lastModified().toString()); - } - else - { - ui->label_destination_modified->setVisible(false); - ui->label_content_destination_modified->setVisible(false); - } - this->firstRenamingRule=firstRenamingRule; - this->otherRenamingRule=otherRenamingRule; -} - -fileExistsDialog::~fileExistsDialog() -{ - delete ui; -} - -void fileExistsDialog::changeEvent(QEvent *e) -{ - QWidget::changeEvent(e); - switch (e->type()) { - case QEvent::LanguageChange: - ui->retranslateUi(this); - break; - default: - break; - } -} - -QString fileExistsDialog::getNewName() -{ - if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked()) - qDebug() << "return the old name: "+oldName; - else - qDebug() << "return the new name: "+ui->lineEditNewName->text(); - if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked()) - return oldName; - else - return ui->lineEditNewName->text(); -} - -void fileExistsDialog::on_SuggestNewName_clicked() -{ - QFileInfo destinationInfo=this->destinationInfo; - QString absolutePath=destinationInfo.absolutePath(); - QString fileName=destinationInfo.fileName(); - QString suffix=""; - QString destination; - QString newFileName; - //resolv the suffix - if(fileName.contains(QRegExp("^(.*)(\\.[a-z0-9]+)$"))) - { - suffix=fileName; - suffix.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\2"); - fileName.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\1"); - } - //resolv the new name - int num=1; - do - { - if(num==1) - { - if(firstRenamingRule=="") - newFileName=tr("%1 - copy").arg(fileName); - else - { - newFileName=firstRenamingRule; - newFileName.replace("%name%",fileName); - } - } - else - { - if(otherRenamingRule=="") - newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num); - else - { - newFileName=otherRenamingRule; - newFileName.replace("%name%",fileName); - newFileName.replace("%number%",QString::number(num)); - } - } - destination=absolutePath+QDir::separator()+newFileName+suffix; - destinationInfo.setFile(destination); - num++; - } - while(destinationInfo.exists()); - ui->lineEditNewName->setText(newFileName+suffix); -} - -void fileExistsDialog::on_Rename_clicked() -{ - action=FileExists_Rename; - this->close(); -} - -void fileExistsDialog::on_Overwrite_clicked() -{ - action=FileExists_Overwrite; - this->close(); -} - -void fileExistsDialog::on_Skip_clicked() -{ - action=FileExists_Skip; - this->close(); -} - -void fileExistsDialog::on_Cancel_clicked() -{ - action=FileExists_Cancel; - this->close(); -} - -void fileExistsDialog::on_actionOverwrite_if_newer_triggered() -{ - action=FileExists_OverwriteIfNewer; - this->close(); -} - -void fileExistsDialog::on_actionOverwrite_if_not_same_modification_date_triggered() -{ - action=FileExists_OverwriteIfNotSameModificationDate; - this->close(); -} - -FileExistsAction fileExistsDialog::getAction() -{ - return action; -} - -bool fileExistsDialog::getAlways() -{ - return ui->checkBoxAlways->isChecked(); -} - -void fileExistsDialog::updateRenameButton() -{ - ui->Rename->setEnabled(ui->checkBoxAlways->isChecked() || (oldName!=ui->lineEditNewName->text() && !ui->lineEditNewName->text().isEmpty())); -} - -void fileExistsDialog::on_checkBoxAlways_toggled(bool checked) -{ - Q_UNUSED(checked); - updateRenameButton(); -} - -void fileExistsDialog::on_lineEditNewName_textChanged(const QString &arg1) -{ - Q_UNUSED(arg1); - updateRenameButton(); -} diff --git a/plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.h b/plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.h deleted file mode 100644 index 75af190..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.h +++ /dev/null @@ -1,58 +0,0 @@ -/** \file fileExistsDialog.h -\brief Define the dialog when file already exists -\author alpha_one_x86 -\version 0.3 -\date 2010 */ - -#include <QDialog> -#include <QWidget> -#include <QString> -#include <QDateTime> -#include <QFileInfo> -#include <QDir> -#include "Environment.h" - -#ifndef FILEEXISTSDIALOG_H -#define FILEEXISTSDIALOG_H - -namespace Ui { - class fileExistsDialog; -} - -/// \brief to show file exists dialog, and ask what do -class fileExistsDialog : public QDialog -{ - Q_OBJECT -public: - /// \brief create the object and pass all the informations to it - explicit fileExistsDialog(QWidget *parent,QFileInfo source,QFileInfo destination,QString firstRenamingRule,QString otherRenamingRule); - ~fileExistsDialog(); - /// \brief return the the always checkbox is checked - bool getAlways(); - /// \brief return the action clicked - FileExistsAction getAction(); - /// \brief return the new rename is case in manual renaming - QString getNewName(); -protected: - void changeEvent(QEvent *e); -private slots: - void on_SuggestNewName_clicked(); - void on_Rename_clicked(); - void on_Overwrite_clicked(); - void on_Skip_clicked(); - void on_Cancel_clicked(); - void on_actionOverwrite_if_newer_triggered(); - void on_actionOverwrite_if_not_same_modification_date_triggered(); - void updateRenameButton(); - void on_checkBoxAlways_toggled(bool checked); - void on_lineEditNewName_textChanged(const QString &arg1); -private: - Ui::fileExistsDialog *ui; - FileExistsAction action; - QString oldName; - QFileInfo destinationInfo; - QString firstRenamingRule; - QString otherRenamingRule; -}; - -#endif // FILEEXISTSDIALOG_H diff --git a/plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.cpp b/plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.cpp deleted file mode 100644 index f45b2ea..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.cpp +++ /dev/null @@ -1,156 +0,0 @@ -#include "fileIsSameDialog.h" -#include "ui_fileIsSameDialog.h" - -#include <QDebug> - -fileIsSameDialog::fileIsSameDialog(QWidget *parent,QFileInfo fileInfo,QString firstRenamingRule,QString otherRenamingRule) : - QDialog(parent), - ui(new Ui::fileIsSameDialog) -{ - ui->setupUi(this); - action=FileExists_Cancel; - oldName=fileInfo.fileName(); - destinationInfo=fileInfo; - ui->lineEditNewName->setText(oldName); - ui->lineEditNewName->setPlaceholderText(oldName); - ui->label_content_size->setText(QString::number(fileInfo.size())); - ui->label_content_modified->setText(fileInfo.lastModified().toString()); - ui->label_content_file_name->setText(fileInfo.fileName()); - updateRenameButton(); - QDateTime maxTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1)); - if(maxTime<fileInfo.lastModified()) - { - ui->label_modified->setVisible(true); - ui->label_content_modified->setVisible(true); - ui->label_content_modified->setText(fileInfo.lastModified().toString()); - } - else - { - ui->label_modified->setVisible(false); - ui->label_content_modified->setVisible(false); - } - this->firstRenamingRule=firstRenamingRule; - this->otherRenamingRule=otherRenamingRule; -} - -fileIsSameDialog::~fileIsSameDialog() -{ - delete ui; -} - -void fileIsSameDialog::changeEvent(QEvent *e) -{ - QWidget::changeEvent(e); - switch (e->type()) { - case QEvent::LanguageChange: - ui->retranslateUi(this); - break; - default: - break; - } -} - -QString fileIsSameDialog::getNewName() -{ - if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked()) - qDebug() << "fileIsSameDialog, return the old name: "+oldName; - else - qDebug() << "fileIsSameDialog, return the new name: "+ui->lineEditNewName->text(); - if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked()) - return oldName; - else - return ui->lineEditNewName->text(); -} - -void fileIsSameDialog::on_SuggestNewName_clicked() -{ - QFileInfo destinationInfo=this->destinationInfo; - QString absolutePath=destinationInfo.absolutePath(); - QString fileName=destinationInfo.fileName(); - QString suffix=""; - QString destination; - QString newFileName; - //resolv the suffix - if(fileName.contains(QRegExp("^(.*)(\\.[a-z0-9]+)$"))) - { - suffix=fileName; - suffix.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\2"); - fileName.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\1"); - } - //resolv the new name - int num=1; - do - { - if(num==1) - { - if(firstRenamingRule=="") - newFileName=tr("%1 - copy").arg(fileName); - else - { - newFileName=firstRenamingRule; - newFileName.replace("%name%",fileName); - } - } - else - { - if(otherRenamingRule=="") - newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num); - else - { - newFileName=otherRenamingRule; - newFileName.replace("%name%",fileName); - newFileName.replace("%number%",QString::number(num)); - } - } - destination=absolutePath+QDir::separator()+newFileName+suffix; - destinationInfo.setFile(destination); - num++; - } - while(destinationInfo.exists()); - ui->lineEditNewName->setText(newFileName+suffix); -} - -void fileIsSameDialog::on_Rename_clicked() -{ - action=FileExists_Rename; - this->close(); -} - -void fileIsSameDialog::on_Skip_clicked() -{ - action=FileExists_Skip; - this->close(); -} - -void fileIsSameDialog::on_Cancel_clicked() -{ - action=FileExists_Cancel; - this->close(); -} - -FileExistsAction fileIsSameDialog::getAction() -{ - return action; -} - -bool fileIsSameDialog::getAlways() -{ - return ui->checkBoxAlways->isChecked(); -} - -void fileIsSameDialog::updateRenameButton() -{ - ui->Rename->setEnabled(ui->checkBoxAlways->isChecked() || (oldName!=ui->lineEditNewName->text() && !ui->lineEditNewName->text().isEmpty())); -} - -void fileIsSameDialog::on_lineEditNewName_textChanged(const QString &arg1) -{ - Q_UNUSED(arg1); - updateRenameButton(); -} - -void fileIsSameDialog::on_checkBoxAlways_toggled(bool checked) -{ - Q_UNUSED(checked); - updateRenameButton(); -} diff --git a/plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.h b/plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.h deleted file mode 100644 index fa48755..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.h +++ /dev/null @@ -1,56 +0,0 @@ -/** \file fileIsSameDialog.h -\brief Define the dialog when file is same -\author alpha_one_x86 -\version 0.3 -\date 2010 */ - -#include <QDialog> -#include <QWidget> -#include <QString> -#include <QDateTime> -#include <QFileInfo> -#include <QDir> -#include "Environment.h" - -#ifndef FILEISSAMEDIALOG_H -#define FILEISSAMEDIALOG_H - -namespace Ui { - class fileIsSameDialog; -} - -/// \brief to show file is same dialog, and ask what do -class fileIsSameDialog : public QDialog -{ - Q_OBJECT -public: - /// \brief create the object and pass all the informations to it - explicit fileIsSameDialog(QWidget *parent,QFileInfo fileInfo,QString firstRenamingRule,QString otherRenamingRule); - ~fileIsSameDialog(); - /// \brief return the the always checkbox is checked - bool getAlways(); - /// \brief return the action clicked - FileExistsAction getAction(); - /// \brief return the new rename is case in manual renaming - QString getNewName(); -protected: - void changeEvent(QEvent *e); -private slots: - void on_SuggestNewName_clicked(); - void on_Rename_clicked(); - void on_Skip_clicked(); - void on_Cancel_clicked(); - void updateRenameButton(); - void on_lineEditNewName_textChanged(const QString &arg1); - void on_checkBoxAlways_toggled(bool checked); -private: - Ui::fileIsSameDialog *ui; - FileExistsAction action; - QString oldName; - QFileInfo destinationInfo; - QString firstRenamingRule; - QString otherRenamingRule; - -}; - -#endif // FILEISSAMEDIALOG_H diff --git a/plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.cpp b/plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.cpp deleted file mode 100644 index d951b90..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.cpp +++ /dev/null @@ -1,143 +0,0 @@ -#include "folderExistsDialog.h" -#include "ui_folderExistsDialog.h" - -#include <QMessageBox> - -folderExistsDialog::folderExistsDialog(QWidget *parent,QFileInfo source,bool isSame,QFileInfo destination,QString firstRenamingRule,QString otherRenamingRule) : - QDialog(parent), - ui(new Ui::folderExistsDialog) -{ - ui->setupUi(this); - action=FolderExists_Cancel; - oldName=source.fileName(); - this->destinationInfo=destinationInfo; - ui->lineEditNewName->setText(oldName); - ui->lineEditNewName->setPlaceholderText(oldName); - ui->label_content_source_modified->setText(source.lastModified().toString()); - ui->label_content_source_folder_name->setText(source.fileName()); - if(isSame) - { - ui->label_source->hide(); - ui->label_destination->hide(); - ui->label_destination_modified->hide(); - ui->label_destination_folder_name->hide(); - ui->label_content_destination_modified->hide(); - ui->label_content_destination_folder_name->hide(); - } - else - { - this->setWindowTitle(tr("Folder already exists")); - ui->label_message->hide(); - ui->label_content_destination_modified->setText(destination.lastModified().toString()); - ui->label_content_destination_folder_name->setText(destination.fileName()); - } - this->firstRenamingRule=firstRenamingRule; - this->otherRenamingRule=otherRenamingRule; -} - -folderExistsDialog::~folderExistsDialog() -{ - delete ui; -} - -void folderExistsDialog::changeEvent(QEvent *e) -{ - QDialog::changeEvent(e); - switch (e->type()) { - case QEvent::LanguageChange: - ui->retranslateUi(this); - break; - default: - break; - } -} - -QString folderExistsDialog::getNewName() -{ - if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked()) - return ""; - else - return ui->lineEditNewName->text(); -} - -void folderExistsDialog::on_SuggestNewName_clicked() -{ - QFileInfo destinationInfo=this->destinationInfo; - QString absolutePath=destinationInfo.absolutePath(); - QString fileName=destinationInfo.fileName(); - QString suffix=""; - QString destination; - QString newFileName; - //resolv the suffix - if(fileName.contains(QRegExp("^(.*)(\\.[a-z0-9]+)$"))) - { - suffix=fileName; - suffix.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\2"); - fileName.replace(QRegExp("^(.*)(\\.[a-z0-9]+)$"),"\\1"); - } - //resolv the new name - int num=1; - do - { - if(num==1) - { - if(firstRenamingRule=="") - newFileName=tr("%1 - copy").arg(fileName); - else - { - newFileName=firstRenamingRule; - newFileName.replace("%name%",fileName); - } - } - else - { - if(otherRenamingRule=="") - newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num); - else - { - newFileName=otherRenamingRule; - newFileName.replace("%name%",fileName); - newFileName.replace("%number%",QString::number(num)); - } - } - destination=absolutePath+QDir::separator()+newFileName+suffix; - destinationInfo.setFile(destination); - num++; - } - while(destinationInfo.exists()); - ui->lineEditNewName->setText(newFileName+suffix); -} - -void folderExistsDialog::on_Rename_clicked() -{ - action=FolderExists_Rename; - this->close(); -} - -void folderExistsDialog::on_Skip_clicked() -{ - action=FolderExists_Skip; - this->close(); -} - -void folderExistsDialog::on_Cancel_clicked() -{ - action=FolderExists_Cancel; - this->close(); -} - -FolderExistsAction folderExistsDialog::getAction() -{ - return action; -} - -bool folderExistsDialog::getAlways() -{ - return ui->checkBoxAlways->isChecked(); -} - -void folderExistsDialog::on_Merge_clicked() -{ - action=FolderExists_Merge; - this->close(); -} diff --git a/plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.h b/plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.h deleted file mode 100644 index 6d612f1..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.h +++ /dev/null @@ -1,54 +0,0 @@ -/** \file folderExistsDialog.h -\brief Define the dialog when file exists -\author alpha_one_x86 -\version 0.3 -\date 2010 */ - -#ifndef FOLDERISSAMEDIALOG_H -#define FOLDERISSAMEDIALOG_H - -#include <QDialog> -#include <QFileInfo> -#include <QString> -#include <QDateTime> -#include <QDir> - -#include "Environment.h" - -namespace Ui { - class folderExistsDialog; -} - -/// \brief to show file exists dialog, and ask what do -class folderExistsDialog : public QDialog -{ - Q_OBJECT - -public: - /// \brief create the object and pass all the informations to it - explicit folderExistsDialog(QWidget *parent,QFileInfo source,bool isSame,QFileInfo destination,QString firstRenamingRule,QString otherRenamingRule); - ~folderExistsDialog(); - /// \brief return the the always checkbox is checked - bool getAlways(); - /// \brief return the action clicked - FolderExistsAction getAction(); - /// \brief return the new rename is case in manual renaming - QString getNewName(); -protected: - void changeEvent(QEvent *e); -private slots: - void on_SuggestNewName_clicked(); - void on_Rename_clicked(); - void on_Skip_clicked(); - void on_Cancel_clicked(); - void on_Merge_clicked(); -private: - Ui::folderExistsDialog *ui; - FolderExistsAction action; - QString oldName; - QString firstRenamingRule; - QString otherRenamingRule; - QFileInfo destinationInfo; -}; - -#endif // FOLDERISSAMEDIALOG_H diff --git a/plugins/CopyEngine/Ultracopier-0.3/options.ui b/plugins/CopyEngine/Ultracopier-0.3/options.ui deleted file mode 100644 index 21d4d7f..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/options.ui +++ /dev/null @@ -1,314 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>options</class> - <widget class="QWidget" name="options"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>356</width> - <height>376</height> - </rect> - </property> - <layout class="QGridLayout" name="gridLayout"> - <property name="margin"> - <number>2</number> - </property> - <property name="spacing"> - <number>2</number> - </property> - <item row="0" column="0"> - <widget class="QLabel" name="label"> - <property name="text"> - <string>Transfer the file rights</string> - </property> - </widget> - </item> - <item row="0" column="2"> - <widget class="QCheckBox" name="doRightTransfer"/> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_2"> - <property name="text"> - <string>Keep the file date</string> - </property> - </widget> - </item> - <item row="1" column="2"> - <widget class="QCheckBox" name="keepDate"/> - </item> - <item row="2" column="2"> - <widget class="QSpinBox" name="blockSize"> - <property name="suffix"> - <string>KB</string> - </property> - <property name="minimum"> - <number>1</number> - </property> - <property name="maximum"> - <number>64000</number> - </property> - </widget> - </item> - <item row="3" column="0" colspan="2"> - <widget class="QLabel" name="label_5"> - <property name="text"> - <string>Auto start the transfer</string> - </property> - </widget> - </item> - <item row="3" column="2"> - <widget class="QCheckBox" name="autoStart"/> - </item> - <item row="4" column="0"> - <widget class="QLabel" name="label_6"> - <property name="text"> - <string>When folder error</string> - </property> - </widget> - </item> - <item row="4" column="2"> - <widget class="QComboBox" name="comboBoxFolderError"> - <item> - <property name="text"> - <string>Ask</string> - </property> - </item> - <item> - <property name="text"> - <string>Skip</string> - </property> - </item> - </widget> - </item> - <item row="5" column="0"> - <widget class="QLabel" name="label_7"> - <property name="text"> - <string>When folder collision</string> - </property> - </widget> - </item> - <item row="5" column="2"> - <widget class="QComboBox" name="comboBoxFolderColision"> - <item> - <property name="text"> - <string>Ask</string> - </property> - </item> - <item> - <property name="text"> - <string>Merge</string> - </property> - </item> - <item> - <property name="text"> - <string>Skip</string> - </property> - </item> - <item> - <property name="text"> - <string>Rename</string> - </property> - </item> - </widget> - </item> - <item row="6" column="0" colspan="2"> - <widget class="QLabel" name="label_8"> - <property name="text"> - <string>Check if destination folder exists</string> - </property> - </widget> - </item> - <item row="6" column="2"> - <widget class="QCheckBox" name="checkBoxDestinationFolderExists"/> - </item> - <item row="7" column="0" colspan="3"> - <widget class="QGroupBox" name="groupBox"> - <property name="title"> - <string>Checksum</string> - </property> - <layout class="QGridLayout" name="gridLayout_2"> - <item row="1" column="1"> - <widget class="QCheckBox" name="checksumOnlyOnError"> - <property name="enabled"> - <bool>false</bool> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_9"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="text"> - <string>Only after error</string> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="label_10"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="text"> - <string>Ignore if impossible</string> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="QCheckBox" name="checksumIgnoreIfImpossible"> - <property name="enabled"> - <bool>false</bool> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QCheckBox" name="doChecksum"/> - </item> - <item row="0" column="0"> - <widget class="QLabel" name="label_11"> - <property name="text"> - <string>Do checksum</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item row="8" column="1"> - <widget class="QLabel" name="label_3"> - <property name="text"> - <string>Enable OS buffer</string> - </property> - </widget> - </item> - <item row="8" column="2"> - <widget class="QCheckBox" name="osBuffer"/> - </item> - <item row="9" column="0" colspan="2"> - <widget class="QCheckBox" name="osBufferLimited"> - <property name="text"> - <string>OS buffer only if smaller than</string> - </property> - </widget> - </item> - <item row="9" column="2"> - <widget class="QSpinBox" name="osBufferLimit"> - <property name="suffix"> - <string>KB</string> - </property> - <property name="minimum"> - <number>1</number> - </property> - <property name="maximum"> - <number>2048</number> - </property> - <property name="value"> - <number>512</number> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="label_4"> - <property name="text"> - <string>Block size</string> - </property> - </widget> - </item> - <item row="12" column="1"> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> - <item row="11" column="1"> - <widget class="QPushButton" name="filters"> - <property name="text"> - <string>Filters</string> - </property> - </widget> - </item> - <item row="10" column="1"> - <widget class="QPushButton" name="renamingRules"> - <property name="text"> - <string>Renaming rules</string> - </property> - </widget> - </item> - </layout> - </widget> - <resources/> - <connections> - <connection> - <sender>doChecksum</sender> - <signal>clicked(bool)</signal> - <receiver>label_9</receiver> - <slot>setEnabled(bool)</slot> - <hints> - <hint type="sourcelabel"> - <x>187</x> - <y>212</y> - </hint> - <hint type="destinationlabel"> - <x>100</x> - <y>223</y> - </hint> - </hints> - </connection> - <connection> - <sender>doChecksum</sender> - <signal>clicked(bool)</signal> - <receiver>checksumOnlyOnError</receiver> - <slot>setEnabled(bool)</slot> - <hints> - <hint type="sourcelabel"> - <x>198</x> - <y>212</y> - </hint> - <hint type="destinationlabel"> - <x>190</x> - <y>226</y> - </hint> - </hints> - </connection> - <connection> - <sender>doChecksum</sender> - <signal>clicked(bool)</signal> - <receiver>label_10</receiver> - <slot>setEnabled(bool)</slot> - <hints> - <hint type="sourcelabel"> - <x>245</x> - <y>210</y> - </hint> - <hint type="destinationlabel"> - <x>123</x> - <y>251</y> - </hint> - </hints> - </connection> - <connection> - <sender>doChecksum</sender> - <signal>clicked(bool)</signal> - <receiver>checksumIgnoreIfImpossible</receiver> - <slot>setEnabled(bool)</slot> - <hints> - <hint type="sourcelabel"> - <x>269</x> - <y>209</y> - </hint> - <hint type="destinationlabel"> - <x>213</x> - <y>247</y> - </hint> - </hints> - </connection> - </connections> -</ui> diff --git a/plugins/CopyEngine/Ultracopier-0.3/resources/add.png b/plugins/CopyEngine/Ultracopier-0.3/resources/add.png Binary files differdeleted file mode 100644 index 1e03be9..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/resources/add.png +++ /dev/null diff --git a/plugins/CopyEngine/Ultracopier-0.3/resources/edit.png b/plugins/CopyEngine/Ultracopier-0.3/resources/edit.png Binary files differdeleted file mode 100644 index 8072aea..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/resources/edit.png +++ /dev/null diff --git a/plugins/CopyEngine/Ultracopier-0.3/resources/filter.png b/plugins/CopyEngine/Ultracopier-0.3/resources/filter.png Binary files differdeleted file mode 100644 index 9cabc5a..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/resources/filter.png +++ /dev/null diff --git a/plugins/CopyEngine/Ultracopier-0.3/resources/remove.png b/plugins/CopyEngine/Ultracopier-0.3/resources/remove.png Binary files differdeleted file mode 100644 index 5b4c488..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/resources/remove.png +++ /dev/null diff --git a/plugins/CopyEngine/Ultracopier-0.3/scanFileOrFolder.cpp b/plugins/CopyEngine/Ultracopier-0.3/scanFileOrFolder.cpp deleted file mode 100644 index e40e941..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/scanFileOrFolder.cpp +++ /dev/null @@ -1,460 +0,0 @@ -#include "scanFileOrFolder.h" - -#include <QMessageBox> - -scanFileOrFolder::scanFileOrFolder(CopyMode mode) -{ - stopped = true; - stopIt = false; - this->mode=mode; - setObjectName("ScanFileOrFolder"); - folder_isolation=QRegExp("^(.*/)?([^/]+)/$"); -} - -scanFileOrFolder::~scanFileOrFolder() -{ - stop(); - quit(); - wait(); -} - -bool scanFileOrFolder::isFinished() -{ - return stopped; -} - -void scanFileOrFolder::addToList(const QStringList& sources,const QString& destination) -{ - stopIt=false; - this->sources=parseWildcardSources(sources); - this->destination=destination; - if(sources.size()>1 || QFileInfo(destination).isDir()) - /* Disabled because the separator transformation product bug - * if(!destination.endsWith(QDir::separator())) - this->destination+=QDir::separator();*/ - if(!destination.endsWith("/") && !destination.endsWith("\\")) - this->destination+="/";//put unix separator because it's transformed into that's under windows too - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"addToList("+sources.join(";")+","+destination+")"); -} - - -QStringList scanFileOrFolder::parseWildcardSources(const QStringList &sources) -{ - QRegExp splitFolder("[/\\\\]"); - QStringList returnList; - int index=0; - while(index<sources.size()) - { - if(sources.at(index).contains("*")) - { - QStringList toParse=sources.at(index).split(splitFolder); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("before wildcard parse: %1, toParse: %2, is valid: %3").arg(sources.at(index)).arg(toParse.join(", ")).arg(splitFolder.isValid())); - QList<QStringList> recomposedSource; - recomposedSource << (QStringList() << ""); - while(toParse.size()>0) - { - if(toParse.first().contains('*')) - { - QString toParseFirst=toParse.first(); - if(toParseFirst=="") - toParseFirst+="/"; - QList<QStringList> newRecomposedSource; - QRegExp toResolv=QRegExp(toParseFirst.replace('*',"[^/\\\\]*")); - int index_recomposedSource=0; - while(index_recomposedSource<recomposedSource.size())//parse each url part - { - QFileInfo info(recomposedSource.at(index_recomposedSource).join("/")); - if(info.isDir()) - { - QDir folder(info.absoluteFilePath()); - QFileInfoList fileFile=folder.entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System);//QStringList() << toResolv - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("list the folder: %1, with the wildcard: %2").arg(info.absoluteFilePath()).arg(toResolv.pattern())); - int index_fileList=0; - while(index_fileList<fileFile.size()) - { - if(fileFile.at(index_fileList).fileName().contains(toResolv)) - { - QStringList tempList=recomposedSource.at(index_recomposedSource); - tempList << fileFile.at(index_fileList).fileName(); - newRecomposedSource << tempList; - } - index_fileList++; - } - } - index_recomposedSource++; - } - recomposedSource=newRecomposedSource; - } - else - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("add toParse: %1").arg(toParse.join("/"))); - int index_recomposedSource=0; - while(index_recomposedSource<recomposedSource.size()) - { - recomposedSource[index_recomposedSource] << toParse.first(); - if(!QFileInfo(recomposedSource.at(index_recomposedSource).join("/")).exists()) - recomposedSource.removeAt(index_recomposedSource); - else - index_recomposedSource++; - } - } - toParse.removeFirst(); - } - int index_recomposedSource=0; - while(index_recomposedSource<recomposedSource.size()) - { - returnList<<recomposedSource.at(index_recomposedSource).join("/"); - index_recomposedSource++; - } - } - else - returnList << sources.at(index); - index++; - } - return returnList; -} - -void scanFileOrFolder::setFilters(QList<Filters_rules> include,QList<Filters_rules> exclude) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - QMutexLocker lock(&filtersMutex); - this->include_send=include; - this->exclude_send=exclude; - reloadTheNewFilters=true; - haveFilters=include_send.size()>0 || exclude_send.size()>0; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("haveFilters: %1, include_send.size(): %2, exclude_send.size(): %3").arg(haveFilters).arg(include_send.size()).arg(exclude_send.size())); -} - -//set action if Folder are same or exists -void scanFileOrFolder::setFolderExistsAction(FolderExistsAction action,QString newName) -{ - this->newName=newName; - folderExistsAction=action; - waitOneAction.release(); -} - -//set action if error -void scanFileOrFolder::setFolderErrorAction(FileErrorAction action) -{ - fileErrorAction=action; - waitOneAction.release(); -} - -void scanFileOrFolder::stop() -{ - stopIt=true; - waitOneAction.release(); -} - -void scanFileOrFolder::run() -{ - stopped=false; - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start the listing with destination: "+destination+", mode: "+QString::number(mode)); - QDir destinationFolder(destination); - int sourceIndex=0; - while(sourceIndex<sources.size()) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"size source to list: "+QString::number(sourceIndex)+"/"+QString::number(sources.size())); - if(stopIt) - { - stopped=true; - return; - } - QFileInfo source=sources.at(sourceIndex); - if(source.isDir()) - { - /* Bad way; when you copy c:\source\folder into d:\destination, you wait it create the folder d:\destination\folder - //listFolder(source.absoluteFilePath()+QDir::separator(),destination); - listFolder(source.absoluteFilePath()+"/",destination);//put unix separator because it's transformed into that's under windows too - */ - //put unix separator because it's transformed into that's under windows too - listFolder(source.absolutePath()+"/",destinationFolder.absolutePath()+"/",source.fileName()+"/",source.fileName()+"/"); - } - else - emit fileTransfer(source,destination+source.fileName(),mode); - sourceIndex++; - } - stopped=true; - if(stopIt) - return; - emit finishedTheListing(); -} - -void scanFileOrFolder::listFolder(const QString& source,const QString& destination,const QString& sourceSuffixPath,QString destinationSuffixPath) -{ - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"source: "+source+", destination: "+destination+", sourceSuffixPath: "+sourceSuffixPath+", destinationSuffixPath: "+destinationSuffixPath); - if(stopIt) - return; - QString newSource = source+sourceSuffixPath; - QString finalDest = destination+destinationSuffixPath; - //if is same - if(newSource==finalDest) - { - QDir dirSource(newSource); - emit folderAlreadyExists(dirSource.absolutePath(),finalDest,true); - waitOneAction.acquire(); - switch(folderExistsAction) - { - case FolderExists_Merge: - break; - case FolderExists_Skip: - return; - break; - case FolderExists_Rename: - if(newName=="") - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"pattern: "+folder_isolation.pattern()); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"full: "+destinationSuffixPath); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"prefix: "+prefix); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"suffix: "+suffix); - //resolv the new name - QFileInfo destinationInfo; - int num=1; - do - { - if(num==1) - { - if(firstRenamingRule=="") - destinationSuffixPath=tr("%1 - copy").arg(suffix); - else - { - destinationSuffixPath=firstRenamingRule; - destinationSuffixPath.replace("%name%",suffix); - } - } - else - { - if(otherRenamingRule=="") - destinationSuffixPath=tr("%1 - copy (%2)").arg(suffix).arg(num); - else - { - destinationSuffixPath=otherRenamingRule; - destinationSuffixPath.replace("%name%",suffix); - destinationSuffixPath.replace("%number%",QString::number(num)); - } - } - num++; - destinationInfo.setFile(prefix+destinationSuffixPath); - } - while(destinationInfo.exists()); - } - else - destinationSuffixPath = newName; - destinationSuffixPath+="/"; - finalDest = destination+destinationSuffixPath; - break; - default: - return; - break; - } - } - //check if destination exists - if(checkDestinationExists) - { - QDir finalSource(newSource); - QDir destinationDir(finalDest); - if(destinationDir.exists()) - { - emit folderAlreadyExists(finalSource.absolutePath(),destinationDir.absolutePath(),false); - waitOneAction.acquire(); - switch(folderExistsAction) - { - case FolderExists_Merge: - break; - case FolderExists_Skip: - return; - break; - case FolderExists_Rename: - if(newName=="") - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"pattern: "+folder_isolation.pattern()); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"full: "+destinationSuffixPath); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"prefix: "+prefix); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"suffix: "+suffix); - //resolv the new name - QFileInfo destinationInfo; - int num=1; - do - { - if(num==1) - { - if(firstRenamingRule=="") - destinationSuffixPath=tr("%1 - copy").arg(suffix); - else - { - destinationSuffixPath=firstRenamingRule; - destinationSuffixPath.replace("%name%",suffix); - } - } - else - { - if(otherRenamingRule=="") - destinationSuffixPath=tr("%1 - copy (%2)").arg(suffix).arg(num); - else - { - destinationSuffixPath=otherRenamingRule; - destinationSuffixPath.replace("%name%",suffix); - destinationSuffixPath.replace("%number%",QString::number(num)); - } - } - destinationInfo.setFile(prefix+destinationSuffixPath); - num++; - } - while(destinationInfo.exists()); - } - else - destinationSuffixPath = newName; - destinationSuffixPath+="/"; - finalDest = destination+destinationSuffixPath; - break; - default: - return; - break; - } - } - } - //do source check - QDir finalSource(newSource); - QFileInfo dirInfo(newSource); - //check of source is readable - do - { - fileErrorAction=FileError_NotSet; - if(!dirInfo.isReadable() || !dirInfo.isExecutable() || !dirInfo.exists()) - { - if(!dirInfo.exists()) - emit errorOnFolder(dirInfo,tr("The folder not exists")); - else - emit errorOnFolder(dirInfo,tr("The folder is not readable")); - waitOneAction.acquire(); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"actionNum: "+QString::number(fileErrorAction)); - } - } while(fileErrorAction==FileError_Retry); - /// \todo check here if the folder is not readable or not exists - QFileInfoList entryList=finalSource.entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System,QDir::DirsFirst|QDir::Name|QDir::IgnoreCase);//possible wait time here - int sizeEntryList=entryList.size(); - emit newFolderListing(newSource); - if(sizeEntryList==0) - emit addToMkPath(finalDest); - for (int index=0;index<sizeEntryList;++index) - { - QFileInfo fileInfo=entryList.at(index); - if(stopIt) - return; - if(haveFilters) - { - if(reloadTheNewFilters) - { - QMutexLocker lock(&filtersMutex); - QCoreApplication::processEvents(QEventLoop::AllEvents); - reloadTheNewFilters=false; - this->include=this->include_send; - this->exclude=this->exclude_send; - } - QString fileName=fileInfo.fileName(); - if(fileInfo.isDir()) - { - bool excluded=false,included=(include.size()==0); - int filters_index=0; - while(filters_index<exclude.size()) - { - if(exclude.at(filters_index).apply_on==ApplyOn_folder || exclude.at(filters_index).apply_on==ApplyOn_fileAndFolder) - { - if(fileName.contains(exclude.at(filters_index).regex)) - { - excluded=true; - break; - } - } - filters_index++; - } - if(excluded) - {} - else - { - filters_index=0; - while(filters_index<include.size()) - { - if(include.at(filters_index).apply_on==ApplyOn_folder || include.at(filters_index).apply_on==ApplyOn_fileAndFolder) - { - if(fileName.contains(include.at(filters_index).regex)) - { - included=true; - break; - } - } - filters_index++; - } - if(!included) - {} - else - listFolder(source,destination,sourceSuffixPath+fileInfo.fileName()+"/",destinationSuffixPath+fileName+"/"); - } - } - else - { - bool excluded=false,included=(include.size()==0); - int filters_index=0; - while(filters_index<exclude.size()) - { - if(exclude.at(filters_index).apply_on==ApplyOn_file || exclude.at(filters_index).apply_on==ApplyOn_fileAndFolder) - { - if(fileName.contains(exclude.at(filters_index).regex)) - { - excluded=true; - break; - } - } - filters_index++; - } - if(excluded) - {} - else - { - filters_index=0; - while(filters_index<include.size()) - { - if(include.at(filters_index).apply_on==ApplyOn_file || include.at(filters_index).apply_on==ApplyOn_fileAndFolder) - { - if(fileName.contains(include.at(filters_index).regex)) - { - included=true; - break; - } - } - filters_index++; - } - if(!included) - {} - else - emit fileTransfer(fileInfo.absoluteFilePath(),finalDest+fileName,mode); - } - } - } - else - { - if(fileInfo.isDir())//possible wait time here - //listFolder(source,destination,suffixPath+fileInfo.fileName()+QDir::separator()); - listFolder(source,destination,sourceSuffixPath+fileInfo.fileName()+"/",destinationSuffixPath+fileInfo.fileName()+"/");//put unix separator because it's transformed into that's under windows too - else - emit fileTransfer(fileInfo.absoluteFilePath(),finalDest+fileInfo.fileName(),mode); - } - } - if(mode==Move) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"newSource: "+newSource+", sizeEntryList: "+QString::number(sizeEntryList)); - emit addToRmPath(newSource,sizeEntryList); - } -} - -//set if need check if the destination exists -void scanFileOrFolder::setCheckDestinationFolderExists(const bool checkDestinationFolderExists) -{ - this->checkDestinationExists=checkDestinationFolderExists; -} - -void scanFileOrFolder::setRenamingRules(QString firstRenamingRule,QString otherRenamingRule) -{ - this->firstRenamingRule=firstRenamingRule; - this->otherRenamingRule=otherRenamingRule; -} diff --git a/plugins/CopyEngine/Ultracopier-0.3/scanFileOrFolder.h b/plugins/CopyEngine/Ultracopier-0.3/scanFileOrFolder.h deleted file mode 100644 index 787d8af..0000000 --- a/plugins/CopyEngine/Ultracopier-0.3/scanFileOrFolder.h +++ /dev/null @@ -1,87 +0,0 @@ -/** \file scanFileOrFolder.h -\brief Thread changed to list recursively the folder -\author alpha_one_x86 -\version 0.3 -\date 2011 */ - -#include <QThread> -#include <QStringList> -#include <QString> -#include <QList> -#include <QFileInfo> -#include <QDir> -#include <QSemaphore> -#include <QEventLoop> -#include <QCoreApplication> -#include <QMutexLocker> - -#include "Environment.h" - -#ifndef SCANFILEORFOLDER_H -#define SCANFILEORFOLDER_H - -/// \brief Thread changed to list recursively the folder -class scanFileOrFolder : public QThread -{ - Q_OBJECT -public: - explicit scanFileOrFolder(CopyMode mode); - ~scanFileOrFolder(); - /// \brief to the a folder listing - void stop(); - /// \brief to get if is finished - bool isFinished(); - /// \brief set action if Folder are same or exists - void setFolderExistsAction(FolderExistsAction action,QString newName=""); - /// \brief set action if error - void setFolderErrorAction(FileErrorAction action); - /// \brief set if need check if the destination exists - void setCheckDestinationFolderExists(const bool checkDestinationFolderExists); - void setRenamingRules(QString firstRenamingRule,QString otherRenamingRule); -signals: - void fileTransfer(const QFileInfo &source,const QFileInfo &destination,const CopyMode &mode); - /// \brief To debug source - void debugInformation(const DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne); - void folderAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame); - void errorOnFolder(const QFileInfo &fileInfo,const QString &errorString); - void finishedTheListing(); - - void newFolderListing(const QString &path); - void addToMkPath(const QString& folder); - void addToRmPath(const QString& folder,const int& inodeToRemove); -public slots: - void addToList(const QStringList& sources,const QString& destination); - void setFilters(QList<Filters_rules> include,QList<Filters_rules> exclude); -protected: - void run(); -private: - QStringList sources; - QString destination; - volatile bool stopIt; - void listFolder(const QString& source,const QString& destination,const QString& sourceSuffixPath,QString destinationSuffixPath); - volatile bool stopped; - QSemaphore waitOneAction; - FolderExistsAction folderExistsAction; - FileErrorAction fileErrorAction; - volatile bool checkDestinationExists; - QString newName; - QRegExp folder_isolation; - QString prefix; - QString suffix; - CopyMode mode; - QList<Filters_rules> include,exclude; - QList<Filters_rules> include_send,exclude_send; - bool reloadTheNewFilters; - bool haveFilters; - QMutex filtersMutex; - QString firstRenamingRule; - QString otherRenamingRule; - /** Parse the multiple wildcard source, it allow resolv multiple wildcard with Qt into their path - * The string: /toto/f*a/yy*a/toto.mp3 - * Will give: /toto/f1a/yy*a/toto.mp3, /toto/f2a/yy*a/toto.mp3 - * Will give: /toto/f2a/yy1a/toto.mp3, /toto/f2a/yy2a/toto.mp3 - */ - QStringList parseWildcardSources(const QStringList &sources); -}; - -#endif // SCANFILEORFOLDER_H diff --git a/plugins/CopyEngine/Ultracopier/AvancedQFile.cpp b/plugins/CopyEngine/Ultracopier/AvancedQFile.cpp new file mode 100644 index 0000000..3d867fb --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/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/CopyEngine/Ultracopier/AvancedQFile.h b/plugins/CopyEngine/Ultracopier/AvancedQFile.h new file mode 100644 index 0000000..8c3dc4a --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/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/CopyEngine/Ultracopier-0.3/CompilerInfo.h b/plugins/CopyEngine/Ultracopier/CompilerInfo.h index 84625b9..84625b9 100644 --- a/plugins/CopyEngine/Ultracopier-0.3/CompilerInfo.h +++ b/plugins/CopyEngine/Ultracopier/CompilerInfo.h diff --git a/plugins/CopyEngine/Ultracopier/CopyEngine-collision-and-error.cpp b/plugins/CopyEngine/Ultracopier/CopyEngine-collision-and-error.cpp new file mode 100644 index 0000000..5315c84 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/CopyEngine-collision-and-error.cpp @@ -0,0 +1,567 @@ +/** \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,QString 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,QString errorString,ScanFileOrFolder * thread,ErrorType errorType) +{ + errorOnFolder(fileInfo,errorString,thread,errorType); +} + +//mkpath event +void CopyEngine::mkPathErrorOnFolderSlot(QFileInfo folder,QString 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()); + 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 << 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: "+QString::number(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()+", destination: "+destination.absoluteFilePath()); + 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: "+QString::number(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()) + ); + alreadyExistsQueueItem newItem; + newItem.source=source; + newItem.destination=destination; + newItem.isSame=isSame; + newItem.transfer=thread; + newItem.scan=NULL; + alreadyExistsQueue << 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: "+QString::number(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 QString &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 << newItem; + showOneNewDialog(); + } +} + +void CopyEngine::missingDiskSpace(QList<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: "+QString::number(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,QString errorString,TransferThread * thread,const ErrorType &errorType,bool isCalledByShowOneNewDialog) +{ + if(stopIt) + return; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file have error: "+fileInfo.absoluteFilePath()+", 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 << newItem; + return; + } + dialogIsOpen=true; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog"); + emit error(fileInfo.absoluteFilePath(),fileInfo.size(),fileInfo.lastModified(),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: "+QString::number(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()+", destination: "+destination.absoluteFilePath()); + 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 << 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: "+QString::number(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, QString errorString, ScanFileOrFolder * thread, ErrorType errorType, bool isCalledByShowOneNewDialog) +{ + if(stopIt) + return; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file have error: "+fileInfo.absoluteFilePath()+", 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 << newItem; + return; + } + dialogIsOpen=true; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog"); + emit error(fileInfo.absoluteFilePath(),fileInfo.size(),fileInfo.lastModified(),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: "+QString::number(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,QString errorString,const ErrorType &errorType,bool isCalledByShowOneNewDialog) +{ + if(stopIt) + return; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"file have error: "+folder.absoluteFilePath()+", 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 << newItem; + return; + } + dialogIsOpen=true; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"show dialog"); + emit error(folder.absoluteFilePath(),folder.size(),folder.lastModified(),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: "+QString::number(newAction)); + if(newAction==FileError_Cancel) + { + emit cancelAll(); + return; + } + if(dialog.getAlways() && newAction!=alwaysDoThisActionForFileError) + { + setComboBoxFolderError(newAction); + alwaysDoThisActionForFolderError=newAction; + } + dialogIsOpen=false; + switch(newAction) + { + case FileError_Skip: + listThread->mkPathQueue.skip(); + break; + case FileError_Retry: + listThread->mkPathQueue.retry(); + break; + default: + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unknow switch case: "+QString::number(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(): "+QString::number(alreadyExistsQueue.size())); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"errorQueue.size(): "+QString::number(errorQueue.size())); + int loop_size=alreadyExistsQueue.size(); + while(loop_size>0) + { + if(alreadyExistsQueue.first().transfer!=NULL) + { + fileAlreadyExists(alreadyExistsQueue.first().source, + alreadyExistsQueue.first().destination, + alreadyExistsQueue.first().isSame, + alreadyExistsQueue.first().transfer, + true); + } + else if(alreadyExistsQueue.first().scan!=NULL) + folderAlreadyExists(alreadyExistsQueue.first().source, + alreadyExistsQueue.first().destination, + alreadyExistsQueue.first().isSame, + alreadyExistsQueue.first().scan, + true); + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"bug, no thread actived"); + alreadyExistsQueue.removeFirst(); + loop_size--; + } + loop_size=errorQueue.size(); + while(errorQueue.size()>0 && loop_size>0) + { + if(errorQueue.first().transfer!=NULL) + errorOnFile(errorQueue.first().inode,errorQueue.first().errorString,errorQueue.first().transfer,errorQueue.first().errorType,true); + else if(errorQueue.first().scan!=NULL) + errorOnFolder(errorQueue.first().inode,errorQueue.first().errorString,errorQueue.first().scan,errorQueue.first().errorType,true); + else if(errorQueue.first().mkPath) + mkPathErrorOnFolder(errorQueue.first().inode,errorQueue.first().errorString,errorQueue.first().errorType,true); + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"bug, no thread actived"); + errorQueue.removeFirst(); + loop_size--; + } +} diff --git a/plugins/CopyEngine/Ultracopier/CopyEngine.cpp b/plugins/CopyEngine/Ultracopier/CopyEngine.cpp new file mode 100644 index 0000000..f9e16f4 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/CopyEngine.cpp @@ -0,0 +1,1238 @@ +/** \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_WINDOW + debugDialogWindow.show(); + #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_WINDOW + if(!connect(listThread,&ListThread::debugInformation, this,&CopyEngine::debugInformation, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect debugInformation()"); + #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_WINDOW + if(!connect(listThread,&ListThread::updateTheDebugInfo, this,&CopyEngine::updateTheDebugInfo, Qt::QueuedConnection)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to connect updateTheDebugInfo()"); + #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_WINDOW +void CopyEngine::updateTheDebugInfo(const QStringList &newList, const QStringList &newList2, const int &numberOfInodeOperation) +{ + debugDialogWindow.setTransferThreadList(newList); + debugDialogWindow.setTransferList(newList2); + debugDialogWindow.setInodeUsage(numberOfInodeOperation); +} +#endif + +//to send the options panel +bool CopyEngine::getOptionsEngine(QWidget * tempWidget) +{ + this->tempWidget=tempWidget; + 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: "+QString::number(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 QStringList &sources) +{ + return listThread->haveSameSource(sources); +} + +bool CopyEngine::haveSameDestination(const QString &destination) +{ + return listThread->haveSameDestination(destination); +} + +bool CopyEngine::newCopy(const QStringList &sources) +{ + if(forcedMode && mode!=Ultracopier::Copy) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The engine is forced to move, you can't copy with it"); + QMessageBox::critical(NULL,facilityEngine->translateText(QStringLiteral("Internal error")),tr("The engine is forced to move, you can't copy with it")); + return false; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + QString destination; + if(!defaultDestinationFolder.isEmpty() && QDir(defaultDestinationFolder).exists()) + destination = defaultDestinationFolder; + else + destination = askDestination(); + if(destination.isEmpty()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Canceled by the user"); + return false; + } + return listThread->newCopy(sources,destination); +} + +bool CopyEngine::newCopy(const QStringList &sources,const QString &destination) +{ + if(forcedMode && mode!=Ultracopier::Copy) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The engine is forced to move, you can't copy with it"); + QMessageBox::critical(NULL,facilityEngine->translateText(QStringLiteral("Internal error")),tr("The engine is forced to move, you can't copy with it")); + return false; + } + return listThread->newCopy(sources,destination); +} + +bool CopyEngine::newMove(const QStringList &sources) +{ + if(forcedMode && mode!=Ultracopier::Move) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The engine is forced to copy, you can't move with it"); + QMessageBox::critical(NULL,facilityEngine->translateText(QStringLiteral("Internal error")),tr("The engine is forced to copy, you can't move with it")); + return false; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + QString destination; + if(!ui->defaultDestinationFolder->text().isEmpty() && QDir(ui->defaultDestinationFolder->text()).exists()) + destination = ui->defaultDestinationFolder->text(); + else + destination = askDestination(); + if(destination.isEmpty()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Canceled by the user"); + return false; + } + return listThread->newMove(sources,destination); +} + +bool CopyEngine::newMove(const QStringList &sources,const QString &destination) +{ + if(forcedMode && mode!=Ultracopier::Move) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The engine is forced to copy, you can't move with it"); + QMessageBox::critical(NULL,facilityEngine->translateText(QStringLiteral("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() +{ + QString destination = askDestination(); + if(destination.isEmpty()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Canceled by the user"); + return; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(uiIsInstalled) + ui->defaultDestinationFolder->setText(destination); +} + +QString CopyEngine::askDestination() +{ + QString destination = listThread->getUniqueDestinationFolder(); + if(!destination.isEmpty()) + { + QMessageBox::StandardButton button=QMessageBox::question(interface,tr("Destination"),tr("Use the actual destination \"%1\"?").arg(destination),QMessageBox::Yes | QMessageBox::No,QMessageBox::Yes); + if(button==QMessageBox::Yes) + return destination; + } + destination=QFileDialog::getExistingDirectory(interface,facilityEngine->translateText(QStringLiteral("Select destination directory")),QStringLiteral(""),QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); + return destination; +} + +void CopyEngine::newTransferList(const QString &file) +{ + emit signal_importTransferList(file); +} + +//because direct access to list thread into the main thread can't be do +quint64 CopyEngine::realByteTransfered() +{ + return size_for_speed; +} + +//speed limitation +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(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions) +{ + if(filters!=NULL) + { + filters->setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions); + emit send_setFilters(filters->getInclude(),filters->getExclude()); + } + this->includeStrings=includeStrings; + this->includeOptions=includeOptions; + this->excludeStrings=excludeStrings; + this->excludeOptions=excludeOptions; +} + +void CopyEngine::setRenamingRules(QString firstRenamingRule,QString otherRenamingRule) +{ + sendNewRenamingRules(firstRenamingRule,otherRenamingRule); +} + +bool CopyEngine::userAddFolder(const Ultracopier::CopyMode &mode) +{ + QString source = QFileDialog::getExistingDirectory(interface,facilityEngine->translateText(QStringLiteral("Select source directory")),QStringLiteral(""),QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); + if(source.isEmpty() || source.isNull() || source=="") + return false; + if(mode==Ultracopier::Copy) + return newCopy(QStringList() << source); + else + return newMove(QStringList() << source); +} + +bool CopyEngine::userAddFile(const Ultracopier::CopyMode &mode) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + QStringList sources = QFileDialog::getOpenFileNames( + interface, + facilityEngine->translateText(QStringLiteral("Select one or more files to open")), + QStringLiteral(""), + facilityEngine->translateText(QStringLiteral("All files"))+QStringLiteral(" (*)")); + if(sources.isEmpty()) + return false; + if(mode==Ultracopier::Copy) + return newCopy(sources); + else + return newMove(sources); +} + +void CopyEngine::pause() +{ + emit signal_pause(); +} + +void CopyEngine::resume() +{ + emit signal_resume(); +} + +void CopyEngine::skip(const quint64 &id) +{ + emit signal_skip(id); +} + +void CopyEngine::cancel() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + stopIt=true; + timerProgression.stop(); + timerActionDone.stop(); + emit tryCancel(); +} + +void CopyEngine::removeItems(const QList<int> &ids) +{ + emit signal_removeItems(ids); +} + +void CopyEngine::moveItemsOnTop(const QList<int> &ids) +{ + emit signal_moveItemsOnTop(ids); +} + +void CopyEngine::moveItemsUp(const QList<int> &ids) +{ + emit signal_moveItemsUp(ids); +} + +void CopyEngine::moveItemsDown(const QList<int> &ids) +{ + emit signal_moveItemsDown(ids); +} + +void CopyEngine::moveItemsOnBottom(const QList<int> &ids) +{ + emit signal_moveItemsOnBottom(ids); +} + +/** \brief give the forced mode, to export/import transfer list */ +void CopyEngine::forceMode(const 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,QStringLiteral("Mode forced previously")); + QMessageBox::critical(NULL,facilityEngine->translateText(QStringLiteral("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,QStringLiteral("Force mode to copy")); + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("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() +{ + QString fileName = QFileDialog::getSaveFileName(interface,facilityEngine->translateText(QStringLiteral("Save transfer list")),QStringLiteral("transfer-list.lst"),facilityEngine->translateText(QStringLiteral("Transfer list"))+QStringLiteral(" (*.lst)")); + if(fileName.isEmpty()) + return; + emit signal_exportTransferList(fileName); +} + +void CopyEngine::importTransferList() +{ + QString fileName = QFileDialog::getOpenFileName(interface,facilityEngine->translateText(QStringLiteral("Open transfer list")),QStringLiteral("transfer-list.lst"),facilityEngine->translateText(QStringLiteral("Transfer list"))+QStringLiteral(" (*.lst)")); + if(fileName.isEmpty()) + return; + emit signal_importTransferList(fileName); +} + +void CopyEngine::warningTransferList(const QString &warning) +{ + QMessageBox::warning(interface,facilityEngine->translateText(QStringLiteral("Error")),warning); +} + +void CopyEngine::errorTransferList(const QString &error) +{ + QMessageBox::critical(interface,facilityEngine->translateText(QStringLiteral("Error")),error); +} + +bool CopyEngine::setSpeedLimitation(const qint64 &speedLimitation) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"maxSpeed: "+QString::number(speedLimitation)); + maxSpeed=speedLimitation; + emit send_speedLimitation(speedLimitation); + return true; +} + +void CopyEngine::setFileCollision(int index) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("action index: %1").arg(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,QStringLiteral("action index: %1").arg(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,QStringLiteral("action index: %1").arg(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: "+QString::number(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(QString firstRenamingRule,QString otherRenamingRule) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("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 QString &defaultDestinationFolder) +{ + this->defaultDestinationFolder=defaultDestinationFolder; + if(uiIsInstalled) + ui->defaultDestinationFolder->setText(defaultDestinationFolder); +} + +void CopyEngine::setCopyListOrder(const bool &order) +{ + listThread->setCopyListOrder(order); +} + +void CopyEngine::exportErrorIntoTransferList() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"exportErrorIntoTransferList"); + QString fileName = QFileDialog::getSaveFileName(interface,facilityEngine->translateText(QStringLiteral("Save transfer list")),QStringLiteral("transfer-list.lst"),facilityEngine->translateText(QStringLiteral("Transfer list"))+QStringLiteral(" (*.lst)")); + if(fileName.isEmpty()) + return; + emit signal_exportErrorIntoTransferList(fileName); +} diff --git a/plugins/CopyEngine/Ultracopier/CopyEngine.h b/plugins/CopyEngine/Ultracopier/CopyEngine.h new file mode 100644 index 0000000..d38fd4e --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/CopyEngine.h @@ -0,0 +1,381 @@ +/** \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 <QStringList> +#include <QFileInfo> +#include <QFile> +#include <QFileDialog> +#include <QMessageBox> + +#include "../../../interface/PluginInterface_CopyEngine.h" +#include "FileErrorDialog.h" +#include "FileExistsDialog.h" +#include "FolderExistsDialog.h" +#include "FileIsSameDialog.h" +#include "ui_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_WINDOW + DebugDialog debugDialogWindow; + #endif + QWidget * tempWidget; + Ui::copyEngineOptions * ui; + bool uiIsInstalled; + QWidget * interface; + Filters * filters; + RenamingRules * renamingRules; + FacilityInterface * facilityEngine; + quint32 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; + QString 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; + QString errorString; + ErrorType errorType; + }; + QList<errorQueueItem> errorQueue; + /// \brief already exists queue + struct alreadyExistsQueueItem + { + TransferThread * transfer; ///< NULL if send by scan thread + ScanFileOrFolder * scan; ///< NULL if send by transfer thread + QFileInfo source; + QFileInfo destination; + bool isSame; + }; + QList<alreadyExistsQueueItem> alreadyExistsQueue; + quint64 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; + QStringList includeStrings,includeOptions,excludeStrings,excludeOptions; + QString firstRenamingRule; + QString 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_WINDOW + void updateTheDebugInfo(const QStringList &newList, const QStringList &newList2, const int &numberOfInodeOperation); + #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, QString 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, QString errorString, ScanFileOrFolder * thread, ErrorType errorType); + //mkpath event + void mkPathErrorOnFolderSlot(QFileInfo, QString, 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, QString 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,QString errorString,ScanFileOrFolder * thread, ErrorType errorType,bool isCalledByShowOneNewDialog=false); + //mkpath event + void mkPathErrorOnFolder(QFileInfo, QString, 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(QString firstRenamingRule,QString otherRenamingRule); + void showRenamingRules(); + void get_realBytesTransfered(quint64 realBytesTransfered); + void newActionInProgess(Ultracopier::EngineActionInProgress); + void updatedBlockSize(); + void updateBufferCheckbox(); + void haveNeedPutAtBottom(bool needPutAtBottom, const QFileInfo &fileInfo, const QString &errorString, TransferThread *thread, const ErrorType &errorType); + void missingDiskSpace(QList<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 QStringList &sources); + /** \brief compare the current destination of the copy, with the passed arguments + * \param destination the destination to compares with the current destination + * \return true if have same destination, else false (or empty) */ + bool haveSameDestination(const QString &destination); + //external soft like file browser have send copy/move list to do + /** \brief send copy without destination, ask the destination + * \param sources the sources list to copy + * \return true if the copy have been accepted */ + bool newCopy(const QStringList &sources); + /** \brief send copy with destination + * \param sources the sources list to copy + * \param destination the destination to copy + * \return true if the copy have been accepted */ + bool newCopy(const QStringList &sources,const QString &destination); + /** \brief send move without destination, ask the destination + * \param sources the sources list to move + * \return true if the move have been accepted */ + bool newMove(const QStringList &sources); + /** \brief send move without destination, ask the destination + * \param sources the sources list to move + * \param destination the destination to move + * \return true if the move have been accepted */ + bool newMove(const QStringList &sources,const QString &destination); + /** \brief send the new transfer list + * \param file the transfer list */ + void newTransferList(const QString &file); + + /** \brief to get byte read, use by Ultracopier for the speed calculation + * real size transfered to right speed calculation */ + quint64 realByteTransfered(); + /** \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(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions); + void setRenamingRules(QString firstRenamingRule,QString otherRenamingRule); + #ifdef ULTRACOPIER_PLUGIN_RSYNC + void setRsync(const bool rsync); + #endif + void setCheckDiskSpace(const bool &checkDiskSpace); + void setDefaultDestinationFolder(const QString &defaultDestinationFolder); + void setCopyListOrder(const bool &order); + void defaultDestinationFolderBrowse(); + QString 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 quint64 &id); + /// \brief cancel all the transfer + void cancel(); + //edit the transfer list + /** \brief remove the selected item + * \param ids ids is the id list of the selected items */ + void removeItems(const QList<int> &ids); + /** \brief move on top of the list the selected item + * \param ids ids is the id list of the selected items */ + void moveItemsOnTop(const QList<int> &ids); + /** \brief move up the list the selected item + * \param ids ids is the id list of the selected items */ + void moveItemsUp(const QList<int> &ids); + /** \brief move down the list the selected item + * \param ids ids is the id list of the selected items */ + void moveItemsDown(const QList<int> &ids); + /** \brief move on bottom of the list the selected item + * \param ids ids is the id list of the selected items */ + void moveItemsOnBottom(const QList<int> &ids); + + /** \brief give the forced mode, to export/import transfer list */ + void forceMode(const 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 qint64 &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 QString &warning); + void errorTransferList(const QString &error); +signals: + //action on the copy + void signal_pause() const; + void signal_resume() const; + void signal_skip(const quint64 &id) const; + + //edit the transfer list + void signal_removeItems(const QList<int> &ids) const; + void signal_moveItemsOnTop(const QList<int> &ids) const; + void signal_moveItemsUp(const QList<int> &ids) const; + void signal_moveItemsDown(const QList<int> &ids) const; + void signal_moveItemsOnBottom(const QList<int> &ids) const; + + void signal_forceMode(const Ultracopier::CopyMode &mode) const; + void signal_exportTransferList(const QString &fileName) const; + void signal_importTransferList(const QString &fileName) const; + void signal_exportErrorIntoTransferList(const QString &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 QString &errorString,TransferThread * thread,const ErrorType &errorType) const; + + #ifdef ULTRACOPIER_PLUGIN_DEBUG + /// \brief To debug source + void debugInformation(const Ultracopier::DebugLevel &level,QString fonction,QString text,QString file,int ligne) const; + #endif + + //other signals + void queryOneNewDialog() const; + + void send_speedLimitation(const qint64 &speedLimitation) const; + void send_blockSize(const int &blockSize) const; + void send_osBufferLimit(const unsigned int &osBufferLimit) const; + void send_setFilters(const QList<Filters_rules> &include,const QList<Filters_rules> &exclude) const; + void send_sendNewRenamingRules(QString firstRenamingRule,QString 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/CopyEngine/Ultracopier/CopyEngine.pro b/plugins/CopyEngine/Ultracopier/CopyEngine.pro new file mode 100644 index 0000000..42078af --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/CopyEngine.pro @@ -0,0 +1,101 @@ +CONFIG += c++11 +QMAKE_CXXFLAGS+="-std=c++0x -Wall -Wextra" +mac:QMAKE_CXXFLAGS+="-stdlib=libc++" + +QT += widgets +DEFINES += UNICODE _UNICODE +TEMPLATE = lib +CONFIG += plugin +win32 { + LIBS += -ladvapi32 +} + +HEADERS = \ + ../Ultracopier/StructEnumDefinition.h \ + ../Ultracopier/StructEnumDefinition_CopyEngine.h \ + ../Ultracopier/DebugEngineMacro.h \ + ../Ultracopier/Variable.h \ + ../Ultracopier/TransferThread.h \ + ../Ultracopier/ReadThread.h \ + ../Ultracopier/WriteThread.h \ + ../Ultracopier/MkPath.h \ + ../Ultracopier/AvancedQFile.h \ + ../Ultracopier/ListThread.h \ + ../../../interface/PluginInterface_CopyEngine.h \ + ../../../interface/OptionInterface.h \ + ../../../interface/FacilityInterface.h \ + ../Ultracopier/Filters.h \ + ../Ultracopier/FilterRules.h \ + ../Ultracopier/RenamingRules.h \ + ../Ultracopier/DriveManagement.h \ + ../Ultracopier/CopyEngine.h \ + ../Ultracopier/DebugDialog.h \ + ../Ultracopier/CopyEngineFactory.h \ + ../Ultracopier/FileErrorDialog.h \ + ../Ultracopier/FileExistsDialog.h \ + ../Ultracopier/FileIsSameDialog.h \ + ../Ultracopier/FolderExistsDialog.h \ + ../Ultracopier/ScanFileOrFolder.h \ + ../Ultracopier/DiskSpace.h +SOURCES = \ + ../Ultracopier/TransferThread.cpp \ + ../Ultracopier/ReadThread.cpp \ + ../Ultracopier/WriteThread.cpp \ + ../Ultracopier/MkPath.cpp \ + ../Ultracopier/AvancedQFile.cpp \ + ../Ultracopier/ListThread.cpp \ + ../Ultracopier/Filters.cpp \ + ../Ultracopier/FilterRules.cpp \ + ../Ultracopier/RenamingRules.cpp \ + ../Ultracopier/ListThread_InodeAction.cpp \ + ../Ultracopier/DriveManagement.cpp \ + ../Ultracopier/CopyEngine-collision-and-error.cpp \ + ../Ultracopier/CopyEngine.cpp \ + ../Ultracopier/DebugDialog.cpp \ + ../Ultracopier/CopyEngineFactory.cpp \ + ../Ultracopier/FileErrorDialog.cpp \ + ../Ultracopier/FileExistsDialog.cpp \ + ../Ultracopier/FileIsSameDialog.cpp \ + ../Ultracopier/FolderExistsDialog.cpp \ + ../Ultracopier/ScanFileOrFolder.cpp \ + ../Ultracopier/DiskSpace.cpp +TARGET = $$qtLibraryTarget(copyEngine) +TRANSLATIONS += ../Ultracopier/Languages/ar/translation.ts \ + ../Ultracopier/Languages/de/translation.ts \ + ../Ultracopier/Languages/el/translation.ts \ + ../Ultracopier/Languages/en/translation.ts \ + ../Ultracopier/Languages/es/translation.ts \ + ../Ultracopier/Languages/fr/translation.ts \ + ../Ultracopier/Languages/hi/translation.ts \ + ../Ultracopier/Languages/hu/translation.ts \ + ../Ultracopier/Languages/id/translation.ts \ + ../Ultracopier/Languages/it/translation.ts \ + ../Ultracopier/Languages/ja/translation.ts \ + ../Ultracopier/Languages/ko/translation.ts \ + ../Ultracopier/Languages/nl/translation.ts \ + ../Ultracopier/Languages/no/translation.ts \ + ../Ultracopier/Languages/pl/translation.ts \ + ../Ultracopier/Languages/pt/translation.ts \ + ../Ultracopier/Languages/ru/translation.ts \ + ../Ultracopier/Languages/th/translation.ts \ + ../Ultracopier/Languages/tr/translation.ts \ + ../Ultracopier/Languages/zh/translation.ts + +FORMS += \ + ../Ultracopier/fileErrorDialog.ui \ + ../Ultracopier/fileExistsDialog.ui \ + ../Ultracopier/fileIsSameDialog.ui \ + ../Ultracopier/debugDialog.ui \ + ../Ultracopier/folderExistsDialog.ui \ + ../Ultracopier/Filters.ui \ + ../Ultracopier/FilterRules.ui \ + ../Ultracopier/RenamingRules.ui \ + ../Ultracopier/copyEngineOptions.ui \ + ../Ultracopier/DiskSpace.ui + +OTHER_FILES += informations.xml + +!CONFIG(static) { +RESOURCES += \ + ../Ultracopier/copyEngineResources.qrc +} diff --git a/plugins/CopyEngine/Ultracopier/CopyEngineFactory.cpp b/plugins/CopyEngine/Ultracopier/CopyEngineFactory.cpp new file mode 100644 index 0000000..d4d4bb6 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/CopyEngineFactory.cpp @@ -0,0 +1,692 @@ +/** \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 "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"); + + 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()); + realObject->setCopyListOrder(ui->copyListOrder->isChecked()); + return newTransferEngine; +} + +void CopyEngineFactory::setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityInterface,const bool &portableVersion) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start, writePath: ")+writePath+QStringLiteral(", 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,QStringLiteral("CHECK LIST TYPE set")); + #else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("CHECK LIST TYPE not set")); + #endif + if(options!=NULL) + { + //load the options + QList<QPair<QString, QVariant> > KeysList; + KeysList.append(qMakePair(QStringLiteral("doRightTransfer"),QVariant(true))); + #ifndef Q_OS_LINUX + KeysList.append(qMakePair(QStringLiteral("keepDate"),QVariant(false))); + #else + KeysList.append(qMakePair(QStringLiteral("keepDate"),QVariant(true))); + #endif + KeysList.append(qMakePair(QStringLiteral("blockSize"),QVariant(ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE))); + quint32 sequentialBuffer=ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE*ULTRACOPIER_PLUGIN_DEFAULT_SEQUENTIAL_NUMBER_OF_BLOCK; + quint32 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(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)); + #endif + KeysList.append(qMakePair(QStringLiteral("sequentialBuffer"),QVariant(sequentialBuffer))); + KeysList.append(qMakePair(QStringLiteral("parallelBuffer"),QVariant(parallelBuffer))); + KeysList.append(qMakePair(QStringLiteral("parallelizeIfSmallerThan"),QVariant(128)));//128KB, better for modern hardware: Multiple queue en linux, SSD, ... + KeysList.append(qMakePair(QStringLiteral("autoStart"),QVariant(true))); + #ifdef ULTRACOPIER_PLUGIN_RSYNC + KeysList.append(qMakePair(QStringLiteral("rsync"),QVariant(true))); + #endif + KeysList.append(qMakePair(QStringLiteral("folderError"),QVariant(0))); + KeysList.append(qMakePair(QStringLiteral("folderCollision"),QVariant(0))); + KeysList.append(qMakePair(QStringLiteral("fileError"),QVariant(2))); + KeysList.append(qMakePair(QStringLiteral("fileCollision"),QVariant(0))); + KeysList.append(qMakePair(QStringLiteral("transferAlgorithm"),QVariant(0))); + KeysList.append(qMakePair(QStringLiteral("checkDestinationFolder"),QVariant(true))); + KeysList.append(qMakePair(QStringLiteral("includeStrings"),QVariant(QStringList()))); + KeysList.append(qMakePair(QStringLiteral("includeOptions"),QVariant(QStringList()))); + KeysList.append(qMakePair(QStringLiteral("excludeStrings"),QVariant(QStringList()))); + KeysList.append(qMakePair(QStringLiteral("excludeOptions"),QVariant(QStringList()))); + KeysList.append(qMakePair(QStringLiteral("doChecksum"),QVariant(false))); + KeysList.append(qMakePair(QStringLiteral("checksumIgnoreIfImpossible"),QVariant(true))); + KeysList.append(qMakePair(QStringLiteral("checksumOnlyOnError"),QVariant(true))); + KeysList.append(qMakePair(QStringLiteral("osBuffer"),QVariant(false))); + KeysList.append(qMakePair(QStringLiteral("firstRenamingRule"),QVariant(""))); + KeysList.append(qMakePair(QStringLiteral("otherRenamingRule"),QVariant(""))); + KeysList.append(qMakePair(QStringLiteral("osBufferLimited"),QVariant(false))); + KeysList.append(qMakePair(QStringLiteral("osBufferLimit"),QVariant(512))); + KeysList.append(qMakePair(QStringLiteral("deletePartiallyTransferredFiles"),QVariant(true))); + KeysList.append(qMakePair(QStringLiteral("moveTheWholeFolder"),QVariant(true))); + KeysList.append(qMakePair(QStringLiteral("followTheStrictOrder"),QVariant(false))); + KeysList.append(qMakePair(QStringLiteral("renameTheOriginalDestination"),QVariant(false))); + KeysList.append(qMakePair(QStringLiteral("checkDiskSpace"),QVariant(true))); + KeysList.append(qMakePair(QStringLiteral("defaultDestinationFolder"),QVariant(QString()))); + KeysList.append(qMakePair(QStringLiteral("inodeThreads"),QVariant(1))); + KeysList.append(qMakePair(QStringLiteral("copyListOrder"),QVariant(false))); + options->addOptionGroup(KeysList); + #if ! defined (Q_CC_GNU) + ui->keepDate->setEnabled(false); + ui->keepDate->setToolTip(QStringLiteral("Not supported with this compiler")); + #endif + ui->doRightTransfer->setChecked(options->getOptionValue(QStringLiteral("doRightTransfer")).toBool()); + ui->keepDate->setChecked(options->getOptionValue(QStringLiteral("keepDate")).toBool()); + ui->blockSize->setValue(options->getOptionValue(QStringLiteral("blockSize")).toUInt());//keep before sequentialBuffer and parallelBuffer + ui->autoStart->setChecked(options->getOptionValue(QStringLiteral("autoStart")).toBool()); + #ifdef ULTRACOPIER_PLUGIN_RSYNC + ui->rsync->setChecked(options->getOptionValue(QStringLiteral("rsync")).toBool()); + #else + ui->label_rsync->setVisible(false); + ui->rsync->setVisible(false); + #endif + ui->comboBoxFolderError->setCurrentIndex(options->getOptionValue(QStringLiteral("folderError")).toUInt()); + ui->comboBoxFolderCollision->setCurrentIndex(options->getOptionValue(QStringLiteral("folderCollision")).toUInt()); + ui->comboBoxFileError->setCurrentIndex(options->getOptionValue(QStringLiteral("fileError")).toUInt()); + ui->comboBoxFileCollision->setCurrentIndex(options->getOptionValue(QStringLiteral("fileCollision")).toUInt()); + ui->transferAlgorithm->setCurrentIndex(options->getOptionValue(QStringLiteral("transferAlgorithm")).toUInt()); + ui->checkBoxDestinationFolderExists->setChecked(options->getOptionValue(QStringLiteral("checkDestinationFolder")).toBool()); + ui->parallelizeIfSmallerThan->setValue(options->getOptionValue(QStringLiteral("parallelizeIfSmallerThan")).toUInt()); + ui->sequentialBuffer->setValue(options->getOptionValue(QStringLiteral("sequentialBuffer")).toUInt()); + ui->parallelBuffer->setValue(options->getOptionValue(QStringLiteral("parallelBuffer")).toUInt()); + ui->sequentialBuffer->setSingleStep(ui->blockSize->value()); + ui->parallelBuffer->setSingleStep(ui->blockSize->value()); + ui->deletePartiallyTransferredFiles->setChecked(options->getOptionValue(QStringLiteral("deletePartiallyTransferredFiles")).toBool()); + ui->moveTheWholeFolder->setChecked(options->getOptionValue(QStringLiteral("moveTheWholeFolder")).toBool()); + ui->followTheStrictOrder->setChecked(options->getOptionValue(QStringLiteral("followTheStrictOrder")).toBool()); + ui->inodeThreads->setValue(options->getOptionValue(QStringLiteral("inodeThreads")).toUInt()); + ui->renameTheOriginalDestination->setChecked(options->getOptionValue(QStringLiteral("renameTheOriginalDestination")).toBool()); + ui->checkDiskSpace->setChecked(options->getOptionValue(QStringLiteral("checkDiskSpace")).toBool()); + ui->defaultDestinationFolder->setText(options->getOptionValue(QStringLiteral("defaultDestinationFolder")).toString()); + + ui->doChecksum->setChecked(options->getOptionValue(QStringLiteral("doChecksum")).toBool()); + ui->checksumIgnoreIfImpossible->setChecked(options->getOptionValue(QStringLiteral("checksumIgnoreIfImpossible")).toBool()); + ui->checksumOnlyOnError->setChecked(options->getOptionValue(QStringLiteral("checksumOnlyOnError")).toBool()); + + ui->osBuffer->setChecked(options->getOptionValue(QStringLiteral("osBuffer")).toBool()); + ui->osBufferLimited->setChecked(options->getOptionValue(QStringLiteral("osBufferLimited")).toBool()); + ui->osBufferLimit->setValue(options->getOptionValue(QStringLiteral("osBufferLimit")).toUInt()); + //ui->autoStart->setChecked(options->getOptionValue(QStringLiteral("autoStart")).toBool());//moved from options(), wrong previous place + includeStrings=options->getOptionValue(QStringLiteral("includeStrings")).toStringList(); + includeOptions=options->getOptionValue(QStringLiteral("includeOptions")).toStringList(); + excludeStrings=options->getOptionValue(QStringLiteral("excludeStrings")).toStringList(); + excludeOptions=options->getOptionValue(QStringLiteral("excludeOptions")).toStringList(); + filters->setFilters(includeStrings,includeOptions,excludeStrings,excludeOptions); + firstRenamingRule=options->getOptionValue(QStringLiteral("firstRenamingRule")).toString(); + otherRenamingRule=options->getOptionValue(QStringLiteral("otherRenamingRule")).toString(); + renamingRules->setRenamingRules(firstRenamingRule,otherRenamingRule); + + ui->checksumOnlyOnError->setEnabled(ui->doChecksum->isChecked()); + ui->checksumIgnoreIfImpossible->setEnabled(ui->doChecksum->isChecked()); + ui->copyListOrder->setChecked(options->getOptionValue(QStringLiteral("copyListOrder")).toBool()); + + updateBufferCheckbox(); + optionsEngine=options; + + updatedBlockSize(); + } +} + +QStringList CopyEngineFactory::supportedProtocolsForTheSource() const +{ + return QStringList() << QStringLiteral("file"); +} + +QStringList CopyEngineFactory::supportedProtocolsForTheDestination() const +{ + return QStringList() << QStringLiteral("file"); +} + +Ultracopier::CopyType CopyEngineFactory::getCopyType() +{ + return Ultracopier::FileAndFolder; +} + +Ultracopier::TransferListOperation CopyEngineFactory::getTransferListOperation() +{ + return Ultracopier::TransferListOperation_ImportExport; +} + +bool CopyEngineFactory::canDoOnlyCopy() const +{ + return false; +} + +void CopyEngineFactory::resetOptions() +{ +} + +QWidget * CopyEngineFactory::options() +{ + return tempWidget; +} + +void CopyEngineFactory::setDoRightTransfer(bool doRightTransfer) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue(QStringLiteral("doRightTransfer"),doRightTransfer); +} + +void CopyEngineFactory::setKeepDate(bool keepDate) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue(QStringLiteral("keepDate"),keepDate); +} + +void CopyEngineFactory::setBlockSize(int blockSize) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue(QStringLiteral("blockSize"),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(QStringLiteral("parallelBuffer"),parallelBuffer); + } +} + +void CopyEngineFactory::setSequentialBuffer(int sequentialBuffer) +{ + if(optionsEngine!=NULL) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("the value have changed")); + sequentialBuffer=round((float)sequentialBuffer/(float)ui->blockSize->value())*ui->blockSize->value(); + ui->sequentialBuffer->setValue(sequentialBuffer); + optionsEngine->setOptionValue(QStringLiteral("sequentialBuffer"),sequentialBuffer); + } +} + +void CopyEngineFactory::setParallelizeIfSmallerThan(int parallelizeIfSmallerThan) +{ + if(optionsEngine!=NULL) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + optionsEngine->setOptionValue(QStringLiteral("parallelizeIfSmallerThan"),parallelizeIfSmallerThan); + } +} + +void CopyEngineFactory::setAutoStart(bool autoStart) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue(QStringLiteral("autoStart"),autoStart); +} + +void CopyEngineFactory::setFolderCollision(int index) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue(QStringLiteral("folderCollision"),index); +} + +void CopyEngineFactory::setFolderError(int index) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue(QStringLiteral("folderError"),index); +} + +void CopyEngineFactory::setTransferAlgorithm(int index) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue(QStringLiteral("transferAlgorithm"),index); +} + +void CopyEngineFactory::setCheckDestinationFolder() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue(QStringLiteral("checkDestinationFolder"),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(QStringLiteral("doChecksum"),doChecksum); +} + +void CopyEngineFactory::checksumOnlyOnError_toggled(bool checksumOnlyOnError) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue(QStringLiteral("checksumOnlyOnError"),checksumOnlyOnError); +} + +void CopyEngineFactory::osBuffer_toggled(bool osBuffer) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue(QStringLiteral("osBuffer"),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(QStringLiteral("osBufferLimited"),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(QStringLiteral("osBufferLimit"),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 QStringList &includeStrings,const QStringList &includeOptions,const QStringList &excludeStrings,const QStringList &excludeOptions) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("new filter")); + this->includeStrings=includeStrings; + this->includeOptions=includeOptions; + this->excludeStrings=excludeStrings; + this->excludeOptions=excludeOptions; + if(optionsEngine!=NULL) + { + optionsEngine->setOptionValue(QStringLiteral("includeStrings"),includeStrings); + optionsEngine->setOptionValue(QStringLiteral("includeOptions"),includeOptions); + optionsEngine->setOptionValue(QStringLiteral("excludeStrings"),excludeStrings); + optionsEngine->setOptionValue(QStringLiteral("excludeOptions"),excludeOptions); + } +} + +void CopyEngineFactory::sendNewRenamingRules(const QString &firstRenamingRule,const QString &otherRenamingRule) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"new filter"); + this->firstRenamingRule=firstRenamingRule; + this->otherRenamingRule=otherRenamingRule; + if(optionsEngine!=NULL) + { + optionsEngine->setOptionValue(QStringLiteral("firstRenamingRule"),firstRenamingRule); + optionsEngine->setOptionValue(QStringLiteral("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(QStringLiteral("checksumIgnoreIfImpossible"),checksumIgnoreIfImpossible); +} + +void CopyEngineFactory::setFileCollision(int index) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("action index: %1").arg(index)); + if(optionsEngine==NULL) + return; + switch(index) + { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + optionsEngine->setOptionValue(QStringLiteral("fileCollision"),index); + break; + default: + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error, unknow index, ignored"); + break; + } +} + +void CopyEngineFactory::setFileError(int index) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("action index: %1").arg(index)); + if(optionsEngine==NULL) + return; + switch(index) + { + case 0: + case 1: + case 2: + optionsEngine->setOptionValue(QStringLiteral("fileError"),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(QStringLiteral("deletePartiallyTransferredFiles"),checked); +} + +void CopyEngineFactory::renameTheOriginalDestination(bool checked) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue(QStringLiteral("renameTheOriginalDestination"),checked); +} + +void CopyEngineFactory::checkDiskSpace(bool checked) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue(QStringLiteral("checkDiskSpace"),checked); +} + +void CopyEngineFactory::defaultDestinationFolderBrowse() +{ + QString destination = QFileDialog::getExistingDirectory(ui->defaultDestinationFolder,facilityEngine->translateText(QStringLiteral("Select destination directory")),QStringLiteral(""),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(QStringLiteral("defaultDestinationFolder"),destination); +} + +void CopyEngineFactory::defaultDestinationFolder() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue(QStringLiteral("defaultDestinationFolder"),ui->defaultDestinationFolder->text()); +} + +void CopyEngineFactory::followTheStrictOrder(bool checked) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue(QStringLiteral("followTheStrictOrder"),checked); +} + +void CopyEngineFactory::moveTheWholeFolder(bool checked) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue(QStringLiteral("moveTheWholeFolder"),checked); +} + +void CopyEngineFactory::on_inodeThreads_editingFinished() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the spinbox have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue(QStringLiteral("inodeThreads"),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",rsync); +} +#endif + +void CopyEngineFactory::copyListOrder(bool checked) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"the value have changed"); + if(optionsEngine!=NULL) + optionsEngine->setOptionValue(QStringLiteral("copyListOrder"),checked); +} diff --git a/plugins/CopyEngine/Ultracopier/CopyEngineFactory.h b/plugins/CopyEngine/Ultracopier/CopyEngineFactory.h new file mode 100644 index 0000000..548588f --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/CopyEngineFactory.h @@ -0,0 +1,132 @@ +/** \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 QString &writePath,const QString &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 + QStringList supportedProtocolsForTheSource() const; + /// \brief to get the supported protocols for the destination + QStringList supportedProtocolsForTheDestination() const; + /// \brief to get the options of the copy engine + QWidget * options(); + +private: + Ui::copyEngineOptions *ui; + QWidget* tempWidget; + OptionInterface * optionsEngine; + bool errorFound; + FacilityInterface * facilityEngine; + Filters *filters; + RenamingRules *renamingRules; + QStorageInfo storageInfo; + QTimer lunchInitFunction; + QStringList includeStrings,includeOptions,excludeStrings,excludeOptions; + QString 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 QStringList &includeStrings,const QStringList &includeOptions,const QStringList &excludeStrings,const QStringList &excludeOptions); + void doChecksum_toggled(bool); + void checksumOnlyOnError_toggled(bool); + void osBuffer_toggled(bool); + void osBufferLimited_toggled(bool); + void osBufferLimit_editingFinished(); + void checksumIgnoreIfImpossible_toggled(bool); + void sendNewRenamingRules(const QString &firstRenamingRule, const QString &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/CopyEngine/Ultracopier/DebugDialog.cpp b/plugins/CopyEngine/Ultracopier/DebugDialog.cpp new file mode 100644 index 0000000..a20f054 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/DebugDialog.cpp @@ -0,0 +1,44 @@ +/** \file debugDialog.cpp +\brief Define the dialog to have debug information +\author alpha_one_x86 */ + +#include "DebugDialog.h" +#include "ui_debugDialog.h" + +#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW + +DebugDialog::DebugDialog(QWidget *parent) : + QWidget(parent), + ui(new Ui::debugDialog) +{ + ui->setupUi(this); +} + +DebugDialog::~DebugDialog() +{ + delete ui; +} + +void DebugDialog::setTransferList(const QStringList &list) +{ + ui->tranferList->clear(); + ui->tranferList->addItems(list); +} + +void DebugDialog::setActiveTransfer(const int &activeTransfer) +{ + ui->spinBoxActiveTransfer->setValue(activeTransfer); +} + +void DebugDialog::setInodeUsage(const int &inodeUsage) +{ + ui->spinBoxNumberOfInode->setValue(inodeUsage); +} + +void DebugDialog::setTransferThreadList(const QStringList &list) +{ + ui->transferThreadList->clear(); + ui->transferThreadList->addItems(list); +} + +#endif diff --git a/plugins/CopyEngine/Ultracopier/DebugDialog.h b/plugins/CopyEngine/Ultracopier/DebugDialog.h new file mode 100644 index 0000000..d2b1d6b --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/DebugDialog.h @@ -0,0 +1,39 @@ +/** \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_WINDOW +#include <QWidget> + +namespace Ui { + class debugDialog; +} + +/// \brief class to the dialog to have debug information +class DebugDialog : public QWidget +{ + Q_OBJECT +public: + explicit DebugDialog(QWidget *parent = 0); + ~DebugDialog(); + /// \brief to set the transfer list, limited in result to not slow down the application + void setTransferList(const QStringList &list); + /// \brief show the transfer thread, it show be a thread pool in normal time + void setTransferThreadList(const QStringList &list); + /// \brief show how many transfer is active + void setActiveTransfer(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 // DEBUGDAILOG_H diff --git a/plugins/CopyEngine/Ultracopier-0.3/DebugEngineMacro.h b/plugins/CopyEngine/Ultracopier/DebugEngineMacro.h index ad08d4f..f9b5349 100644 --- a/plugins/CopyEngine/Ultracopier-0.3/DebugEngineMacro.h +++ b/plugins/CopyEngine/Ultracopier/DebugEngineMacro.h @@ -1,12 +1,15 @@ /** \file DebugEngineMacro.h \brief Define the macro for the debug \author alpha_one_x86 -\version 0.3 -\date 2010 */ +\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__) diff --git a/plugins/CopyEngine/Ultracopier/DiskSpace.cpp b/plugins/CopyEngine/Ultracopier/DiskSpace.cpp new file mode 100644 index 0000000..2b8fec7 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/DiskSpace.cpp @@ -0,0 +1,53 @@ +#include "DiskSpace.h" +#include "ui_DiskSpace.h" +#include "StructEnumDefinition_CopyEngine.h" + +DiskSpace::DiskSpace(FacilityInterface * facilityEngine,QList<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(list.at(index).drive) + .arg(facilityEngine->sizeToString(list.at(index).freeSpace)) + .arg(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/CopyEngine/Ultracopier/DiskSpace.h b/plugins/CopyEngine/Ultracopier/DiskSpace.h new file mode 100644 index 0000000..7d52b52 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/DiskSpace.h @@ -0,0 +1,28 @@ +#ifndef DISKSPACE_H +#define DISKSPACE_H + +#include <QDialog> +#include "../../../interface/PluginInterface_CopyEngine.h" +#include "StructEnumDefinition_CopyEngine.h" + +namespace Ui { +class DiskSpace; +} + +class DiskSpace : public QDialog +{ + Q_OBJECT + +public: + explicit DiskSpace(FacilityInterface * facilityEngine,QList<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/CopyEngine/Ultracopier/DiskSpace.ui b/plugins/CopyEngine/Ultracopier/DiskSpace.ui new file mode 100644 index 0000000..10b5c69 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/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/CopyEngine/Ultracopier/DriveManagement.cpp b/plugins/CopyEngine/Ultracopier/DriveManagement.cpp new file mode 100644 index 0000000..221b4e8 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/DriveManagement.cpp @@ -0,0 +1,102 @@ +#include "DriveManagement.h" + +#include <QDir> +#include <QFileInfoList> +#include <QStorageInfo> + +DriveManagement::DriveManagement() +{ + tryUpdate(); + #ifdef Q_OS_WIN32 + reg1=QRegularExpression(QStringLiteral("^(\\\\\\\\|//)[^\\\\\\\\/]+(\\\\|/)[^\\\\\\\\/]+")); + reg2=QRegularExpression(QStringLiteral("^((\\\\\\\\|//)[^\\\\\\\\/]+(\\\\|/)[^\\\\\\\\/]+).*$")); + reg3=QRegularExpression(QStringLiteral("^[a-zA-Z]:[\\\\/]")); + reg4=QRegularExpression(QStringLiteral("^([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 +QString DriveManagement::getDrive(const QString &fileOrFolder) const +{ + const QString &inode=QDir::toNativeSeparators(fileOrFolder); + int size=mountSysPoint.size(); + for (int i = 0; i < size; ++i) { + if(inode.startsWith(mountSysPoint.at(i))) + return QDir::toNativeSeparators(mountSysPoint.at(i)); + } + #ifdef Q_OS_WIN32 + if(fileOrFolder.contains(reg1)) + { + QString returnString=fileOrFolder; + returnString.replace(reg2,QStringLiteral("\\1")); + return returnString; + } + //due to lack of WMI support into mingw, the new drive event is never called, this is a workaround + if(fileOrFolder.contains(reg3)) + { + QString returnString=fileOrFolder; + returnString.replace(reg4,QStringLiteral("\\1")); + return QDir::toNativeSeparators(returnString).toUpper(); + } + #endif + //if unable to locate the right mount point + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("unable to locate the right mount point for: %1, mount point: %2").arg(fileOrFolder).arg(mountSysPoint.join(";"))); + return QString(); +} + +QByteArray DriveManagement::getDriveType(const QString &drive) const +{ + int index=mountSysPoint.indexOf(drive); + if(index!=-1) + return driveType.at(index); + return QByteArray(); +} + +bool DriveManagement::isSameDrive(const QString &file1,const QString &file2) const +{ + if(mountSysPoint.size()==0) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("no mount point found")); + return false; + } + const QString &drive1=getDrive(file1); + if(drive1.isEmpty()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("drive for the file1 not found: %1").arg(file1)); + return false; + } + const QString &drive2=getDrive(file2); + if(drive2.isEmpty()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("drive for the file2 not found: %1").arg(file2)); + return false; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("%1 is egal to %2?").arg(drive1).arg(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 << QDir::toNativeSeparators(mountedVolumesList.at(index).rootPath()); + #ifdef Q_OS_WIN32 + if(mountSysPoint.last()!="A:\\" && mountSysPoint.last()!="A:/" && mountSysPoint.last()!="A:" && mountSysPoint.last()!="A" && + mountSysPoint.last()!="a:\\" && mountSysPoint.last()!="a:/" && mountSysPoint.last()!="a:" && mountSysPoint.last()!="a") + driveType << mountedVolumesList.at(index).fileSystemType(); + else + driveType << QByteArray(); + #else + driveType << mountedVolumesList.at(index).fileSystemType(); + #endif + index++; + } +} diff --git a/plugins/CopyEngine/Ultracopier/DriveManagement.h b/plugins/CopyEngine/Ultracopier/DriveManagement.h new file mode 100644 index 0000000..765a753 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/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 QString &file1,const QString &file2) const; + /// \brief get drive of an file or folder + QString getDrive(const QString &fileOrFolder) const; + QByteArray getDriveType(const QString &drive) const; + void tryUpdate(); +protected: + QStringList mountSysPoint; + QList<QByteArray> driveType; + #ifdef Q_OS_WIN32 + QRegularExpression reg1,reg2,reg3,reg4; + #endif +signals: + /// \brief To debug source + void debugInformation(const Ultracopier::DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne) const; +}; + +#endif // DRIVEMANAGEMENT_H diff --git a/plugins/CopyEngine/Ultracopier-0.3/Environment.h b/plugins/CopyEngine/Ultracopier/Environment.h index 7ac6f16..34db2a2 100644 --- a/plugins/CopyEngine/Ultracopier-0.3/Environment.h +++ b/plugins/CopyEngine/Ultracopier/Environment.h @@ -1,8 +1,7 @@ /** \file Environment.h
\brief Define the environment variable and global function
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#include "Variable.h"
/// \brief The global include
diff --git a/plugins/CopyEngine/Ultracopier/FileErrorDialog.cpp b/plugins/CopyEngine/Ultracopier/FileErrorDialog.cpp new file mode 100644 index 0000000..736cfeb --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/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, QString 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(errorString); + if(fileInfo.exists()) + { + ui->label_content_file_name->setText(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(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/CopyEngine/Ultracopier/FileErrorDialog.h b/plugins/CopyEngine/Ultracopier/FileErrorDialog.h new file mode 100644 index 0000000..09a481e --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/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,QString 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/CopyEngine/Ultracopier/FileExistsDialog.cpp b/plugins/CopyEngine/Ultracopier/FileExistsDialog.cpp new file mode 100644 index 0000000..0e3ca78 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/FileExistsDialog.cpp @@ -0,0 +1,238 @@ +#include "FileExistsDialog.h" +#include "ui_fileExistsDialog.h" +#include "TransferThread.h" + +#include <QRegularExpression> +#include <QFileInfo> +#include <QMessageBox> + +FileExistsDialog::FileExistsDialog(QWidget *parent,QFileInfo source,QFileInfo destination,QString firstRenamingRule,QString 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(oldName); + ui->lineEditNewName->setPlaceholderText(oldName); + ui->Overwrite->addAction(ui->actionOverwrite_if_newer); + ui->Overwrite->addAction(ui->actionOverwrite_if_not_same_modification_date); + ui->label_content_source_size->setText(QString::number(source.size())); + ui->label_content_source_modified->setText(source.lastModified().toString()); + ui->label_content_source_file_name->setText(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(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; + } +} + +QString FileExistsDialog::getNewName() +{ + if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked()) + return oldName; + else + return ui->lineEditNewName->text(); +} + +void FileExistsDialog::on_SuggestNewName_clicked() +{ + QFileInfo destinationInfo=this->destinationInfo; + QString absolutePath=destinationInfo.absolutePath(); + QString fileName=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==QStringLiteral("")) + newFileName=tr("%1 - copy").arg(fileName); + else + { + newFileName=firstRenamingRule; + newFileName.replace("%name%",fileName); + } + } + else + { + if(otherRenamingRule=="") + newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num); + else + { + newFileName=otherRenamingRule; + newFileName.replace(QStringLiteral("%name%"),fileName); + newFileName.replace(QStringLiteral("%number%"),QString::number(num)); + } + } + destination=absolutePath+QDir::separator()+newFileName+suffix; + destinationInfo.setFile(destination); + num++; + } + while(destinationInfo.exists()); + ui->lineEditNewName->setText(newFileName+suffix); +} + +void FileExistsDialog::on_Rename_clicked() +{ + action=FileExists_Rename; + this->close(); +} + +void FileExistsDialog::on_Overwrite_clicked() +{ + action=FileExists_Overwrite; + this->close(); +} + +void FileExistsDialog::on_Skip_clicked() +{ + action=FileExists_Skip; + this->close(); +} + +void FileExistsDialog::on_Cancel_clicked() +{ + action=FileExists_Cancel; + this->close(); +} + +void FileExistsDialog::on_actionOverwrite_if_newer_triggered() +{ + action=FileExists_OverwriteIfNewer; + this->close(); +} + +void FileExistsDialog::on_actionOverwrite_if_not_same_modification_date_triggered() +{ + action=FileExists_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() && !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/CopyEngine/Ultracopier/FileExistsDialog.h b/plugins/CopyEngine/Ultracopier/FileExistsDialog.h new file mode 100644 index 0000000..c637e3b --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/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,QString firstRenamingRule,QString otherRenamingRule); + ~FileExistsDialog(); + /// \brief return the the always checkbox is checked + bool getAlways(); + /// \brief return the action clicked + FileExistsAction getAction(); + /// \brief return the new rename is case in manual renaming + QString getNewName(); +protected: + void changeEvent(QEvent *e); +private slots: + void on_SuggestNewName_clicked(); + void on_Rename_clicked(); + void on_Overwrite_clicked(); + void on_Skip_clicked(); + void on_Cancel_clicked(); + void on_actionOverwrite_if_newer_triggered(); + void on_actionOverwrite_if_not_same_modification_date_triggered(); + void updateRenameButton(); + void on_checkBoxAlways_toggled(bool checked); + void on_lineEditNewName_textChanged(const QString &arg1); + void on_lineEditNewName_returnPressed(); + void on_actionOverwrite_if_older_triggered(); + void on_lineEditNewName_editingFinished(); +private: + Ui::fileExistsDialog *ui; + FileExistsAction action; + QString oldName; + QFileInfo destinationInfo; + QString firstRenamingRule; + QString otherRenamingRule; +}; + +#endif // FILEEXISTSDIALOG_H diff --git a/plugins/CopyEngine/Ultracopier/FileIsSameDialog.cpp b/plugins/CopyEngine/Ultracopier/FileIsSameDialog.cpp new file mode 100644 index 0000000..7f3d565 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/FileIsSameDialog.cpp @@ -0,0 +1,188 @@ +#include "FileIsSameDialog.h" +#include "ui_fileIsSameDialog.h" +#include "TransferThread.h" + +#include <QRegularExpression> +#include <QFileInfo> +#include <QMessageBox> + +FileIsSameDialog::FileIsSameDialog(QWidget *parent,QFileInfo fileInfo,QString firstRenamingRule,QString 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(oldName); + ui->lineEditNewName->setPlaceholderText(oldName); + ui->label_content_size->setText(QString::number(fileInfo.size())); + ui->label_content_modified->setText(fileInfo.lastModified().toString()); + ui->label_content_file_name->setText(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; + } +} + +QString FileIsSameDialog::getNewName() +{ + if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked()) + return oldName; + else + return ui->lineEditNewName->text(); +} + +void FileIsSameDialog::on_SuggestNewName_clicked() +{ + QFileInfo destinationInfo=this->destinationInfo; + QString absolutePath=destinationInfo.absolutePath(); + QString fileName=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=="") + newFileName=tr("%1 - copy").arg(fileName); + else + { + newFileName=firstRenamingRule; + newFileName.replace(QStringLiteral("%name%"),fileName); + } + } + else + { + if(otherRenamingRule=="") + newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num); + else + { + newFileName=otherRenamingRule; + newFileName.replace(QStringLiteral("%name%"),fileName); + newFileName.replace(QStringLiteral("%number%"),QString::number(num)); + } + } + destination=absolutePath+QDir::separator()+newFileName+suffix; + destinationInfo.setFile(destination); + num++; + } + while(destinationInfo.exists()); + ui->lineEditNewName->setText(newFileName+suffix); +} + +void FileIsSameDialog::on_Rename_clicked() +{ + action=FileExists_Rename; + this->close(); +} + +void FileIsSameDialog::on_Skip_clicked() +{ + action=FileExists_Skip; + this->close(); +} + +void FileIsSameDialog::on_Cancel_clicked() +{ + action=FileExists_Cancel; + this->close(); +} + +FileExistsAction FileIsSameDialog::getAction() +{ + return action; +} + +bool FileIsSameDialog::getAlways() +{ + return ui->checkBoxAlways->isChecked(); +} + +void FileIsSameDialog::updateRenameButton() +{ + ui->Rename->setEnabled(ui->checkBoxAlways->isChecked() || (!ui->lineEditNewName->text().contains(QRegularExpression("[/\\\\\\*]")) && oldName!=ui->lineEditNewName->text() && !ui->lineEditNewName->text().isEmpty())); +} + +void FileIsSameDialog::on_lineEditNewName_textChanged(const QString &arg1) +{ + Q_UNUSED(arg1); + updateRenameButton(); +} + +void FileIsSameDialog::on_checkBoxAlways_toggled(bool checked) +{ + Q_UNUSED(checked); + updateRenameButton(); +} + +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/CopyEngine/Ultracopier/FileIsSameDialog.h b/plugins/CopyEngine/Ultracopier/FileIsSameDialog.h new file mode 100644 index 0000000..c9be99c --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/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,QString firstRenamingRule,QString otherRenamingRule); + ~FileIsSameDialog(); + /// \brief return the the always checkbox is checked + bool getAlways(); + /// \brief return the action clicked + FileExistsAction getAction(); + /// \brief return the new rename is case in manual renaming + QString getNewName(); +protected: + void changeEvent(QEvent *e); +private slots: + void on_SuggestNewName_clicked(); + void on_Rename_clicked(); + void on_Skip_clicked(); + void on_Cancel_clicked(); + void updateRenameButton(); + void on_lineEditNewName_textChanged(const QString &arg1); + void on_checkBoxAlways_toggled(bool checked); + void on_lineEditNewName_returnPressed(); + void on_lineEditNewName_editingFinished(); +private: + Ui::fileIsSameDialog *ui; + FileExistsAction action; + QString oldName; + QFileInfo destinationInfo; + QString firstRenamingRule; + QString otherRenamingRule; + +}; + +#endif // FILEISSAMEDIALOG_H diff --git a/plugins/CopyEngine/Ultracopier/FilterRules.cpp b/plugins/CopyEngine/Ultracopier/FilterRules.cpp new file mode 100644 index 0000000..5d1827e --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/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; +} + +QString FilterRules::get_search_text() +{ + return ui->search->text(); +} + +SearchType FilterRules::get_search_type() +{ + switch(ui->search_type->currentIndex()) + { + case 0: + return SearchType_rawText; + case 1: + return SearchType_simpleRegex; + case 2: + return SearchType_perlRegex; + } + return SearchType_simpleRegex; +} + +ApplyOn FilterRules::get_apply_on() +{ + switch(ui->apply_on->currentIndex()) + { + case 0: + return ApplyOn_file; + case 1: + return ApplyOn_fileAndFolder; + case 2: + return ApplyOn_folder; + } + return ApplyOn_fileAndFolder; +} + +bool FilterRules::get_need_match_all() +{ + return ui->need_match_all->isChecked(); +} + +void FilterRules::set_search_text(QString search_text) +{ + ui->search->setText(search_text); +} + +void FilterRules::set_search_type(SearchType search_type) +{ + switch(search_type) + { + case SearchType_rawText: + ui->search_type->setCurrentIndex(0); + break; + case SearchType_simpleRegex: + ui->search_type->setCurrentIndex(1); + break; + case SearchType_perlRegex: + ui->search_type->setCurrentIndex(2); + break; + } +} + +void FilterRules::set_apply_on(ApplyOn apply_on) +{ + switch(apply_on) + { + case ApplyOn_file: + ui->apply_on->setCurrentIndex(0); + break; + case ApplyOn_fileAndFolder: + ui->apply_on->setCurrentIndex(1); + break; + case ApplyOn_folder: + ui->apply_on->setCurrentIndex(2); + break; + } +} + +void FilterRules::set_need_match_all(bool need_match_all) +{ + ui->need_match_all->setChecked(need_match_all); +} + +void FilterRules::on_search_textChanged(const QString &arg1) +{ + Q_UNUSED(arg1); + updateChecking(); +} + +void FilterRules::updateChecking() +{ + 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 QString &arg1) +{ + Q_UNUSED(arg1); + updateChecking(); +} + +void FilterRules::on_matched_clicked() +{ + updateChecking(); +} + +void FilterRules::on_search_type_currentIndexChanged(int index) +{ + Q_UNUSED(index); + updateChecking(); +} + +void FilterRules::on_need_match_all_clicked() +{ + updateChecking(); +} + +void FilterRules::on_buttonBox_clicked(QAbstractButton *button) +{ + if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::RejectRole) + reject(); + else + { + haveBeenValided=true; + accept(); + } +} diff --git a/plugins/CopyEngine/Ultracopier-0.3/FilterRules.h b/plugins/CopyEngine/Ultracopier/FilterRules.h index f06f0cb..f06f0cb 100644 --- a/plugins/CopyEngine/Ultracopier-0.3/FilterRules.h +++ b/plugins/CopyEngine/Ultracopier/FilterRules.h diff --git a/plugins/CopyEngine/Ultracopier-0.3/FilterRules.ui b/plugins/CopyEngine/Ultracopier/FilterRules.ui index fad35cd..a4006fe 100644 --- a/plugins/CopyEngine/Ultracopier-0.3/FilterRules.ui +++ b/plugins/CopyEngine/Ultracopier/FilterRules.ui @@ -17,8 +17,8 @@ <string>Filters dialog</string> </property> <property name="windowIcon"> - <iconset resource="resources.qrc"> - <normaloff>:/resources/filter.png</normaloff>:/resources/filter.png</iconset> + <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"> @@ -92,7 +92,7 @@ <item row="3" column="0" colspan="2"> <widget class="QCheckBox" name="need_match_all"> <property name="text"> - <string>All string need match</string> + <string>Whole string must match</string> </property> </widget> </item> @@ -122,7 +122,7 @@ <item row="2" column="0" colspan="2"> <widget class="QCheckBox" name="matched"> <property name="text"> - <string>The test string match with the regex</string> + <string>The test string matches with the regex</string> </property> </widget> </item> @@ -156,7 +156,7 @@ </layout> </widget> <resources> - <include location="resources.qrc"/> + <include location="copyEngineResources.qrc"/> </resources> <connections/> </ui> diff --git a/plugins/CopyEngine/Ultracopier/Filters.cpp b/plugins/CopyEngine/Ultracopier/Filters.cpp new file mode 100644 index 0000000..3bb81d1 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/Filters.cpp @@ -0,0 +1,457 @@ +#include "Filters.h" +#include "ui_Filters.h" + +#include <QRegularExpression> + +Filters::Filters(QWidget *parent) : + QDialog(parent), + ui(new Ui::Filters) +{ + ui->setupUi(this); +} + +Filters::~Filters() +{ + delete ui; +} + +void Filters::setFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions) +{ + if(includeStrings.size()!=includeOptions.size() || excludeStrings.size()!=excludeOptions.size()) + return; + Filters_rules new_item; + + include.clear(); + int index=0; + while(index<includeStrings.size()) + { + new_item.search_text=includeStrings.at(index); + QStringList options=includeOptions.at(index).split(QStringLiteral(";")); + new_item.need_match_all=false; + new_item.search_type=SearchType_rawText; + new_item.apply_on=ApplyOn_fileAndFolder; + + if(options.contains(QStringLiteral("SearchType_simpleRegex"))) + new_item.search_type=SearchType_simpleRegex; + if(options.contains(QStringLiteral("SearchType_perlRegex"))) + new_item.search_type=SearchType_perlRegex; + if(options.contains(QStringLiteral("ApplyOn_file"))) + new_item.apply_on=ApplyOn_file; + if(options.contains(QStringLiteral("ApplyOn_folder"))) + new_item.apply_on=ApplyOn_folder; + if(options.contains(QStringLiteral("need_match_all"))) + new_item.need_match_all=true; + + if(convertToRegex(new_item)) + include << new_item; + + index++; + } + + exclude.clear(); + index=0; + while(index<excludeStrings.size()) + { + new_item.search_text=excludeStrings.at(index); + QStringList options=excludeOptions.at(index).split(QStringLiteral(";")); + new_item.need_match_all=false; + new_item.search_type=SearchType_rawText; + new_item.apply_on=ApplyOn_fileAndFolder; + + if(options.contains(QStringLiteral("SearchType_simpleRegex"))) + new_item.search_type=SearchType_simpleRegex; + if(options.contains(QStringLiteral("SearchType_perlRegex"))) + new_item.search_type=SearchType_perlRegex; + if(options.contains(QStringLiteral("ApplyOn_file"))) + new_item.apply_on=ApplyOn_file; + if(options.contains(QStringLiteral("ApplyOn_folder"))) + new_item.apply_on=ApplyOn_folder; + if(options.contains(QStringLiteral("need_match_all"))) + new_item.need_match_all=true; + + if(convertToRegex(new_item)) + exclude << new_item; + + index++; + } + + reShowAll(); +} + +void Filters::reShowAll() +{ + ui->inclusion->clear(); + int index=0; + while(index<include.size()) + { + QString entryShow=include.at(index).search_text+QStringLiteral(" ("); + QStringList optionsToShow; + switch(include.at(index).search_type) + { + case SearchType_rawText: + optionsToShow << tr("Raw text"); + break; + case SearchType_simpleRegex: + optionsToShow << tr("Simplified regex"); + break; + case SearchType_perlRegex: + optionsToShow << tr("Perl's regex"); + break; + default: + break; + } + switch(include.at(index).apply_on) + { + case ApplyOn_file: + optionsToShow << tr("Only on file"); + break; + case ApplyOn_folder: + optionsToShow << tr("Only on folder"); + break; + default: + break; + } + if(include.at(index).need_match_all) + optionsToShow << tr("Full match"); + entryShow+=optionsToShow.join(QStringLiteral(",")); + entryShow+=")"; + ui->inclusion->addItem(new QListWidgetItem(entryShow)); + index++; + } + ui->exclusion->clear(); + index=0; + while(index<exclude.size()) + { + QString entryShow=exclude.at(index).search_text+QStringLiteral(" ("); + QStringList optionsToShow; + switch(exclude.at(index).search_type) + { + case SearchType_rawText: + optionsToShow << tr("Raw text"); + break; + case SearchType_simpleRegex: + optionsToShow << tr("Simplified regex"); + break; + case SearchType_perlRegex: + optionsToShow << tr("Perl's regex"); + break; + default: + break; + } + switch(exclude.at(index).apply_on) + { + case ApplyOn_file: + optionsToShow << tr("Only on file"); + break; + case ApplyOn_folder: + optionsToShow << tr("Only on folder"); + break; + default: + break; + } + if(exclude.at(index).need_match_all) + optionsToShow << tr("Full match"); + entryShow+=optionsToShow.join(QStringLiteral(",")); + entryShow+=")"; + ui->exclusion->addItem(new QListWidgetItem(entryShow)); + index++; + } +} + +QList<Filters_rules> Filters::getInclude() const +{ + return include; +} + +QList<Filters_rules> Filters::getExclude() const +{ + return exclude; +} + +void Filters::newLanguageLoaded() +{ + ui->retranslateUi(this); + reShowAll(); +} + +void Filters::updateFilters() +{ + QStringList includeStrings,includeOptions,excludeStrings,excludeOptions; + int index=0; + while(index<include.size()) + { + includeStrings<<include.at(index).search_text; + QStringList optionsToShow; + + switch(include.at(index).search_type) + { + case SearchType_rawText: + optionsToShow << QStringLiteral("SearchType_rawText"); + break; + case SearchType_simpleRegex: + optionsToShow << QStringLiteral("SearchType_simpleRegex"); + break; + case SearchType_perlRegex: + optionsToShow << QStringLiteral("SearchType_perlRegex"); + break; + default: + break; + } + switch(include.at(index).apply_on) + { + case ApplyOn_file: + optionsToShow << QStringLiteral("ApplyOn_file"); + break; + case ApplyOn_fileAndFolder: + optionsToShow << QStringLiteral("ApplyOn_fileAndFolder"); + break; + case ApplyOn_folder: + optionsToShow << QStringLiteral("ApplyOn_folder"); + break; + default: + break; + } + if(include.at(index).need_match_all) + optionsToShow << tr("Full match"); + includeOptions<<optionsToShow.join(QStringLiteral(";")); + index++; + } + index=0; + while(index<exclude.size()) + { + excludeStrings<<exclude.at(index).search_text; + QStringList optionsToShow; + + switch(exclude.at(index).search_type) + { + case SearchType_rawText: + optionsToShow << QStringLiteral("SearchType_rawText"); + break; + case SearchType_simpleRegex: + optionsToShow << QStringLiteral("SearchType_simpleRegex"); + break; + case SearchType_perlRegex: + optionsToShow << QStringLiteral("SearchType_perlRegex"); + break; + default: + break; + } + switch(exclude.at(index).apply_on) + { + case ApplyOn_file: + optionsToShow << QStringLiteral("ApplyOn_file"); + break; + case ApplyOn_fileAndFolder: + optionsToShow << QStringLiteral("ApplyOn_fileAndFolder"); + break; + case ApplyOn_folder: + optionsToShow << QStringLiteral("ApplyOn_folder"); + break; + default: + break; + } + if(exclude.at(index).need_match_all) + optionsToShow << tr("Full match"); + excludeOptions<<optionsToShow.join(QStringLiteral(";")); + index++; + } + emit sendNewFilters(includeStrings,includeOptions,excludeStrings,excludeOptions); + emit haveNewFilters(); +} + +bool Filters::convertToRegex(Filters_rules &item) +{ + bool isValid=!item.search_text.isEmpty(); + if(isValid) + { + QRegularExpression regex; + QString tempString; + if(item.search_type==SearchType_rawText) + { + tempString=QRegularExpression::escape(item.search_text); + if(tempString.contains('/') || tempString.contains('\\')) + isValid=false; + } + else if(item.search_type==SearchType_simpleRegex) + { + tempString=QRegularExpression::escape(item.search_text); + tempString.replace(QStringLiteral("\\*"),QStringLiteral("[^\\\\/]*")); + } + else if(item.search_type==SearchType_perlRegex) + { + tempString=item.search_text; + if(tempString.startsWith('^') && tempString.endsWith('$')) + { + item.need_match_all=true; + tempString.remove(QRegularExpression("^\\^")); + tempString.remove(QRegularExpression("\\$$")); + item.search_text=tempString; + } + } + if(isValid) + { + if(item.need_match_all==true) + tempString=QStringLiteral("^")+tempString+QStringLiteral("$"); + regex=QRegularExpression(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.removeAt(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.removeAt(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 << 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 << 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.removeAt(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.removeAt(index); + editedEntry=true; + } + } + index++; + } + if(editedEntry) + { + reShowAll(); + updateFilters(); + } +} diff --git a/plugins/CopyEngine/Ultracopier/Filters.h b/plugins/CopyEngine/Ultracopier/Filters.h new file mode 100644 index 0000000..337f8cb --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/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(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions); + void reShowAll(); + QList<Filters_rules> getInclude() const; + QList<Filters_rules> getExclude() const; + void newLanguageLoaded(); +private: + Ui::Filters *ui; + QList<Filters_rules> include; + QList<Filters_rules> exclude; + void updateFilters(); + bool convertToRegex(Filters_rules &item); +signals: + void sendNewFilters(const QStringList &includeStrings,const QStringList &includeOptions,const QStringList &excludeStrings,const QStringList &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/CopyEngine/Ultracopier-0.3/Filters.ui b/plugins/CopyEngine/Ultracopier/Filters.ui index db8577c..33822af 100644 --- a/plugins/CopyEngine/Ultracopier-0.3/Filters.ui +++ b/plugins/CopyEngine/Ultracopier/Filters.ui @@ -15,7 +15,7 @@ </property> <property name="windowIcon"> <iconset resource="resources.qrc"> - <normaloff>:/resources/filter.png</normaloff>:/resources/filter.png</iconset> + <normaloff>:/CopyEngine/Ultracopier/resources/filter.png</normaloff>:/CopyEngine/Ultracopier/resources/filter.png</iconset> </property> <layout class="QVBoxLayout" name="verticalLayout"> <property name="spacing"> @@ -27,7 +27,7 @@ <item> <widget class="QGroupBox" name="groupBox"> <property name="title"> - <string>Exclusion filter</string> + <string>Exclusion filters</string> </property> <layout class="QHBoxLayout" name="horizontalLayout_2"> <property name="spacing"> @@ -49,7 +49,7 @@ <widget class="QToolButton" name="add_exclusion"> <property name="icon"> <iconset resource="resources.qrc"> - <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset> + <normaloff>:/CopyEngine/Ultracopier/resources/add.png</normaloff>:/CopyEngine/Ultracopier/resources/add.png</iconset> </property> </widget> </item> @@ -57,7 +57,7 @@ <widget class="QToolButton" name="edit_exclusion"> <property name="icon"> <iconset resource="resources.qrc"> - <normaloff>:/resources/edit.png</normaloff>:/resources/edit.png</iconset> + <normaloff>:/CopyEngine/Ultracopier/resources/edit.png</normaloff>:/CopyEngine/Ultracopier/resources/edit.png</iconset> </property> </widget> </item> @@ -65,7 +65,7 @@ <widget class="QToolButton" name="remove_exclusion"> <property name="icon"> <iconset resource="resources.qrc"> - <normaloff>:/resources/remove.png</normaloff>:/resources/remove.png</iconset> + <normaloff>:/CopyEngine/Ultracopier/resources/remove.png</normaloff>:/CopyEngine/Ultracopier/resources/remove.png</iconset> </property> </widget> </item> @@ -90,7 +90,7 @@ <item> <widget class="QGroupBox" name="groupBox_2"> <property name="title"> - <string>Inclusion filter</string> + <string>Inclusion filters</string> </property> <layout class="QVBoxLayout" name="verticalLayout_4"> <property name="spacing"> @@ -121,7 +121,7 @@ <widget class="QToolButton" name="add_inclusion"> <property name="icon"> <iconset resource="resources.qrc"> - <normaloff>:/resources/add.png</normaloff>:/resources/add.png</iconset> + <normaloff>:/CopyEngine/Ultracopier/resources/add.png</normaloff>:/CopyEngine/Ultracopier/resources/add.png</iconset> </property> </widget> </item> @@ -129,7 +129,7 @@ <widget class="QToolButton" name="edit_inclusion"> <property name="icon"> <iconset resource="resources.qrc"> - <normaloff>:/resources/edit.png</normaloff>:/resources/edit.png</iconset> + <normaloff>:/CopyEngine/Ultracopier/resources/edit.png</normaloff>:/CopyEngine/Ultracopier/resources/edit.png</iconset> </property> </widget> </item> @@ -137,7 +137,7 @@ <widget class="QToolButton" name="remove_inclusion"> <property name="icon"> <iconset resource="resources.qrc"> - <normaloff>:/resources/remove.png</normaloff>:/resources/remove.png</iconset> + <normaloff>:/CopyEngine/Ultracopier/resources/remove.png</normaloff>:/CopyEngine/Ultracopier/resources/remove.png</iconset> </property> </widget> </item> diff --git a/plugins/CopyEngine/Ultracopier/FolderExistsDialog.cpp b/plugins/CopyEngine/Ultracopier/FolderExistsDialog.cpp new file mode 100644 index 0000000..ac1e74e --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/FolderExistsDialog.cpp @@ -0,0 +1,199 @@ +#include "FolderExistsDialog.h" +#include "ui_folderExistsDialog.h" +#include "TransferThread.h" + +#include <QMessageBox> +#include <QFileInfo> +#include <QMessageBox> + +FolderExistsDialog::FolderExistsDialog(QWidget *parent,QFileInfo source,bool isSame,QFileInfo destination,QString firstRenamingRule,QString 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(oldName); + ui->lineEditNewName->setPlaceholderText(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; + } +} + +QString FolderExistsDialog::getNewName() +{ + if(oldName==ui->lineEditNewName->text() || ui->checkBoxAlways->isChecked()) + return ""; + else + return ui->lineEditNewName->text(); +} + +void FolderExistsDialog::on_SuggestNewName_clicked() +{ + QFileInfo destinationInfo=this->destinationInfo; + QString absolutePath=destinationInfo.absolutePath(); + QString fileName=TransferThread::resolvedName(destinationInfo); + QString suffix=QStringLiteral(""); + 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.isEmpty()) + newFileName=tr("%1 - copy").arg(fileName); + else + { + newFileName=firstRenamingRule; + newFileName.replace(QStringLiteral("%name%"),fileName); + } + } + else + { + if(otherRenamingRule.isEmpty()) + newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num); + else + { + newFileName=otherRenamingRule; + newFileName.replace(QStringLiteral("%name%"),fileName); + newFileName.replace(QStringLiteral("%number%"),QString::number(num)); + } + } + destination=absolutePath+QDir::separator()+newFileName+suffix; + destinationInfo.setFile(destination); + num++; + } + while(destinationInfo.exists()); + ui->lineEditNewName->setText(newFileName+suffix); +} + +void FolderExistsDialog::on_Rename_clicked() +{ + action=FolderExists_Rename; + this->close(); +} + +void FolderExistsDialog::on_Skip_clicked() +{ + action=FolderExists_Skip; + this->close(); +} + +void FolderExistsDialog::on_Cancel_clicked() +{ + action=FolderExists_Cancel; + this->close(); +} + +FolderExistsAction FolderExistsDialog::getAction() +{ + return action; +} + +bool FolderExistsDialog::getAlways() +{ + return ui->checkBoxAlways->isChecked(); +} + +void FolderExistsDialog::on_Merge_clicked() +{ + action=FolderExists_Merge; + this->close(); +} + +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 QString &arg1) +{ + Q_UNUSED(arg1); + updateRenameButton(); +} + +void FolderExistsDialog::updateRenameButton() +{ + ui->Rename->setEnabled(ui->checkBoxAlways->isChecked() || (!ui->lineEditNewName->text().contains(QRegularExpression("[/\\\\\\*]")) && oldName!=ui->lineEditNewName->text() && !ui->lineEditNewName->text().isEmpty())); +} diff --git a/plugins/CopyEngine/Ultracopier/FolderExistsDialog.h b/plugins/CopyEngine/Ultracopier/FolderExistsDialog.h new file mode 100644 index 0000000..c043f65 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/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,QString firstRenamingRule,QString otherRenamingRule); + ~FolderExistsDialog(); + /// \brief return the the always checkbox is checked + bool getAlways(); + /// \brief return the action clicked + FolderExistsAction getAction(); + /// \brief return the new rename is case in manual renaming + QString getNewName(); +protected: + void changeEvent(QEvent *e); +private slots: + void 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 QString &arg1); +private: + Ui::folderExistsDialog *ui; + FolderExistsAction action; + QString oldName; + QString firstRenamingRule; + QString otherRenamingRule; + QFileInfo destinationInfo; +}; + +#endif // FOLDERISSAMEDIALOG_H diff --git a/plugins/CopyEngine/Ultracopier/Languages/ar/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/ar/translation.ts new file mode 100644 index 0000000..3362659 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/Languages/ar/translation.ts @@ -0,0 +1,1289 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<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="429"/> + <location filename="../../CopyEngine.cpp" line="451"/> + <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="462"/> + <location filename="../../CopyEngine.cpp" line="484"/> + <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="508"/> + <source>Destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="508"/> + <source>Use the actual destination "%1"?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="717"/> + <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="1047"/> + <location filename="../../CopyEngine.cpp" line="1050"/> + <location filename="../../CopyEngine.cpp" line="1055"/> + <location filename="../../CopyEngine.cpp" line="1059"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1048"/> + <location filename="../../CopyEngine.cpp" line="1052"/> + <location filename="../../CopyEngine.cpp" line="1056"/> + <location filename="../../CopyEngine.cpp" line="1060"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1051"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1053"/> + <location filename="../../CopyEngine.cpp" line="1065"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1057"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1061"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1062"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1063"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1064"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1067"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1068"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1069"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <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="412"/> + <location filename="../../CopyEngineFactory.cpp" line="415"/> + <location filename="../../CopyEngineFactory.cpp" line="420"/> + <location filename="../../CopyEngineFactory.cpp" line="424"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="413"/> + <location filename="../../CopyEngineFactory.cpp" line="417"/> + <location filename="../../CopyEngineFactory.cpp" line="421"/> + <location filename="../../CopyEngineFactory.cpp" line="425"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="416"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="418"/> + <location filename="../../CopyEngineFactory.cpp" line="430"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="422"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="426"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="427"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="428"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="429"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="432"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="433"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="434"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <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="131"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="141"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FileIsSameDialog</name> + <message> + <location filename="../../FileIsSameDialog.cpp" line="105"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="115"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <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="92"/> + <location filename="../../Filters.cpp" line="130"/> + <source>Raw text</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="95"/> + <location filename="../../Filters.cpp" line="133"/> + <source>Simplified regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="98"/> + <location filename="../../Filters.cpp" line="136"/> + <source>Perl's regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="106"/> + <location filename="../../Filters.cpp" line="144"/> + <source>Only on file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="109"/> + <location filename="../../Filters.cpp" line="147"/> + <source>Only on folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="115"/> + <location filename="../../Filters.cpp" line="153"/> + <location filename="../../Filters.cpp" line="215"/> + <location filename="../../Filters.cpp" line="254"/> + <source>Full match</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FolderExistsDialog</name> + <message> + <location filename="../../FolderExistsDialog.cpp" line="51"/> + <source>Folder already exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="116"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="126"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ListThread</name> + <message> + <location filename="../../ListThread.cpp" line="1447"/> + <location filename="../../ListThread.cpp" line="2369"/> + <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="1454"/> + <location filename="../../ListThread.cpp" line="2376"/> + <source>Unable to save the transfer list: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1470"/> + <source>Problem reading file, or file-size is 0</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1477"/> + <source>Wrong header: "%1"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1486"/> + <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="1495"/> + <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="1501"/> + <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="1557"/> + <source>Some errors have been found during the line parsing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1565"/> + <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="232"/> + <source>Unable to move the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="93"/> + <location filename="../../MkPath.cpp" line="275"/> + <source>Unable to remove</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ReadThread</name> + <message> + <location filename="../../ReadThread.cpp" line="55"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="184"/> + <source>Internal error reading the source file:block size out of range</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="192"/> + <location filename="../../ReadThread.cpp" line="408"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="233"/> + <location filename="../../ReadThread.cpp" line="456"/> + <source>File truncated during the read, possible data change</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>RenamingRules</name> + <message> + <location filename="../../RenamingRules.ui" line="26"/> + <source>First renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="32"/> + <source>%name% - copy</source> + <extracomment>%name% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="39"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> + <extracomment> should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="49"/> + <source>Second renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="55"/> + <source>%name% - copy (%number%)</source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="62"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="39"/> + <location filename="../../RenamingRules.cpp" line="62"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="43"/> + <location filename="../../RenamingRules.cpp" line="73"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="14"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ScanFileOrFolder</name> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="265"/> + <source>Blacklisted folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="327"/> + <location filename="../../ScanFileOrFolder.cpp" line="393"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="337"/> + <location filename="../../ScanFileOrFolder.cpp" line="403"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="441"/> + <source>This is not a folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="443"/> + <source>The folder does exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="445"/> + <source>The folder is not readable</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="456"/> + <source>Problem with name encoding</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TransferThread</name> + <message> + <location filename="../../TransferThread.cpp" line="235"/> + <location filename="../../TransferThread.cpp" line="663"/> + <location filename="../../TransferThread.cpp" line="735"/> + <location filename="../../TransferThread.cpp" line="1303"/> + <source>File not found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="336"/> + <location filename="../../TransferThread.cpp" line="353"/> + <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="408"/> + <location filename="../../TransferThread.cpp" line="431"/> + <source>Internal error: Already opening</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="572"/> + <source>Drive %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="574"/> + <source>Unknown folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="578"/> + <source>root</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="631"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="641"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="701"/> + <location filename="../../TransferThread.cpp" line="816"/> + <source>The source file doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="741"/> + <location filename="../../TransferThread.cpp" line="828"/> + <source>Unable to do the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="777"/> + <source>The source doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="822"/> + <source>Another file exists at same place</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1124"/> + <source>The checksums do not match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1213"/> + <source>Internal error: The destination is not closed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1227"/> + <source>Internal error: The size transfered doesn't match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1238"/> + <source>Internal error: The buffer is not empty</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1303"/> + <location filename="../../TransferThread.cpp" line="1321"/> + <location filename="../../TransferThread.cpp" line="1336"/> + <source>Unable to change the date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="219"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>WriteThread</name> + <message> + <location filename="../../WriteThread.cpp" line="80"/> + <source>Path resolution error (Empty path)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="268"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="671"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="696"/> + <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="35"/> + <source>Transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="44"/> + <source>Move the whole folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="51"/> + <source>Transfer the file rights</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="61"/> + <source>Keep the file date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="74"/> + <source>Autostart the transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="81"/> + <location filename="../../copyEngineOptions.ui" line="101"/> + <source>Less performance if checked</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="104"/> + <source>Follow the strict order</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="130"/> + <source>Error and collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="136"/> + <source>When folder error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="146"/> + <source>When file error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="172"/> + <source>When file collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="232"/> + <source>When folder collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="263"/> + <source>Check if destination folder exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="270"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="290"/> + <source>Delete partially transferred files</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="303"/> + <source>Rename the original destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="334"/> + <source>Control</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="340"/> + <source>Checksum</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="349"/> + <source>Only after error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="356"/> + <source>Ignore if impossible</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="373"/> + <source>Verify checksums</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="405"/> + <source>Performance</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="411"/> + <source>Parallel buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="418"/> + <location filename="../../copyEngineOptions.ui" line="431"/> + <location filename="../../copyEngineOptions.ui" line="444"/> + <location filename="../../copyEngineOptions.ui" line="481"/> + <location filename="../../copyEngineOptions.ui" line="550"/> + <source>KB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="460"/> + <source>Block size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="467"/> + <source>Sequential buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="474"/> + <source>Enable OS buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="497"/> + <source>OS buffer only if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="504"/> + <source>Transfer algorithm</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="543"/> + <source>Parallelize if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="573"/> + <source>Inode threads</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="580"/> + <location filename="../../copyEngineOptions.ui" line="590"/> + <source>More cpu, but better organisation on the disk</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="593"/> + <source>Order the list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="609"/> + <source>Misc</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="615"/> + <source>Check the disk space</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="625"/> + <source>Use this folder when destination is not set</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="637"/> + <source>Browse</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="659"/> + <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/CopyEngine/Ultracopier/Languages/de/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/de/translation.ts new file mode 100644 index 0000000..2952152 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/Languages/de/translation.ts @@ -0,0 +1,1294 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="de" sourcelanguage="en"> +<context> + <name>AvancedQFile</name> + <message> + <location filename="../../AvancedQFile.cpp" line="26"/> + <location filename="../../AvancedQFile.cpp" line="57"/> + <location filename="../../AvancedQFile.cpp" line="88"/> + <source>Not supported on this platform</source> + <translation>Auf dieser Plattform nicht unterstĆ¼tzt</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="40"/> + <source>Last modified date is wrong</source> + <translation>Datum der letzten Ćnderung ist falsch</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="71"/> + <source>Last access date is wrong</source> + <translatorcomment> </translatorcomment> + <translation>Datum des letzten Zugriffs 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="429"/> + <location filename="../../CopyEngine.cpp" line="451"/> + <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="462"/> + <location filename="../../CopyEngine.cpp" line="484"/> + <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="508"/> + <source>Destination</source> + <translation>Ziel</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="508"/> + <source>Use the actual destination "%1"?</source> + <translation>Aktuelles Ziel: "%1" benutzen?</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="717"/> + <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="1047"/> + <location filename="../../CopyEngine.cpp" line="1050"/> + <location filename="../../CopyEngine.cpp" line="1055"/> + <location filename="../../CopyEngine.cpp" line="1059"/> + <source>Ask</source> + <translation>Fragen</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1048"/> + <location filename="../../CopyEngine.cpp" line="1052"/> + <location filename="../../CopyEngine.cpp" line="1056"/> + <location filename="../../CopyEngine.cpp" line="1060"/> + <source>Skip</source> + <translation>Ćberspringen</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1051"/> + <source>Merge</source> + <translation>Fusionieren</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1053"/> + <location filename="../../CopyEngine.cpp" line="1065"/> + <source>Rename</source> + <translation>Umbenennen</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1057"/> + <source>Put at the end</source> + <translation>Ans Ende verschieben</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1061"/> + <source>Overwrite</source> + <translation>Ćberschreiben</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1062"/> + <source>Overwrite if different</source> + <translation>Ćberschreiben, falls verschieden</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1063"/> + <source>Overwrite if newer</source> + <translation>Ćberschreiben, falls neuer</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1064"/> + <source>Overwrite if older</source> + <translation>Ćberschreiben, falls Ƥlter</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1067"/> + <source>Automatic</source> + <translation>Automatisch</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1068"/> + <source>Sequential</source> + <translation>Sequentiell</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1069"/> + <source>Parallel</source> + <translation>Parallel</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <source>Options error</source> + <translation>Fehlerhafte Optionen</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <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="412"/> + <location filename="../../CopyEngineFactory.cpp" line="415"/> + <location filename="../../CopyEngineFactory.cpp" line="420"/> + <location filename="../../CopyEngineFactory.cpp" line="424"/> + <source>Ask</source> + <translation>Fragen</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="413"/> + <location filename="../../CopyEngineFactory.cpp" line="417"/> + <location filename="../../CopyEngineFactory.cpp" line="421"/> + <location filename="../../CopyEngineFactory.cpp" line="425"/> + <source>Skip</source> + <translation>Ćberspringen</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="416"/> + <source>Merge</source> + <translation>Fusionieren</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="418"/> + <location filename="../../CopyEngineFactory.cpp" line="430"/> + <source>Rename</source> + <translation>Umbenennen</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="422"/> + <source>Put at the end</source> + <translation>Ans Ende verschieben</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="426"/> + <source>Overwrite</source> + <translation>Ćberschreiben</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="427"/> + <source>Overwrite if different</source> + <translation>Ćberschreiben, falls verschieden</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="428"/> + <source>Overwrite if newer</source> + <translation>Ćberschreiben, falls neuer</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="429"/> + <source>Overwrite if older</source> + <translation>Ćberschreiben, falls Ƥlter</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="432"/> + <source>Automatic</source> + <translation>Automatisch</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="433"/> + <source>Sequential</source> + <translation>Sequentiell</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="434"/> + <source>Parallel</source> + <translation>Parallel</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <source>Options error</source> + <translation>Fehlerhafte Optionen</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <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="524"/> + <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="131"/> + <source>%1 - copy</source> + <translation>%1 - Kopie</translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="141"/> + <source>%1 - copy (%2)</source> + <translation>%1 - Kopie (%2)</translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Error</source> + <translation>Fehler</translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <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="105"/> + <source>%1 - copy</source> + <translation>%1 - kopieren</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="115"/> + <source>%1 - copy (%2)</source> + <translation>%1 - kopieren (%2)</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <source>Error</source> + <translation>Fehler</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <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Ćungs-Filter</translation> + </message> + <message> + <location filename="../../Filters.ui" line="93"/> + <source>Inclusion filters</source> + <translation>EinschlieĆungs-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="92"/> + <location filename="../../Filters.cpp" line="130"/> + <source>Raw text</source> + <translation>Roh-Text</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="95"/> + <location filename="../../Filters.cpp" line="133"/> + <source>Simplified regex</source> + <translation>Vereinfachte RegEx</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="98"/> + <location filename="../../Filters.cpp" line="136"/> + <source>Perl's regex</source> + <translation>Perls RegEx</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="106"/> + <location filename="../../Filters.cpp" line="144"/> + <source>Only on file</source> + <translation>Nur auf Datei</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="109"/> + <location filename="../../Filters.cpp" line="147"/> + <source>Only on folder</source> + <translation>Nur auf Ordner</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="115"/> + <location filename="../../Filters.cpp" line="153"/> + <location filename="../../Filters.cpp" line="215"/> + <location filename="../../Filters.cpp" line="254"/> + <source>Full match</source> + <translation>Volle Ćbereinstimmung</translation> + </message> +</context> +<context> + <name>FolderExistsDialog</name> + <message> + <location filename="../../FolderExistsDialog.cpp" line="51"/> + <source>Folder already exists</source> + <translation>Ordner existiert bereits</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="116"/> + <source>%1 - copy</source> + <translation>%1 - Kopie</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="126"/> + <source>%1 - copy (%2)</source> + <translation>%1 - Kopie (%2)</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Error</source> + <translation>Fehler</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <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="1447"/> + <location filename="../../ListThread.cpp" line="2369"/> + <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="1454"/> + <location filename="../../ListThread.cpp" line="2376"/> + <source>Unable to save the transfer list: %1</source> + <translation>Konnte die Transferliste: %1 nicht speichern</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1470"/> + <source>Problem reading file, or file-size is 0</source> + <translation>Lesefehler, oder DateigrƶĆe=0</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1477"/> + <source>Wrong header: "%1"</source> + <translation>Falscher Header: "%1"</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1486"/> + <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="1495"/> + <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="1501"/> + <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="1557"/> + <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="1565"/> + <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="232"/> + <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="275"/> + <source>Unable to remove</source> + <translation>Kann nicht lƶschen</translation> + </message> +</context> +<context> + <name>ReadThread</name> + <message> + <location filename="../../ReadThread.cpp" line="55"/> + <source>Internal error, please report it!</source> + <translation>Interner Fehler - Bitte bei mir melden!</translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="184"/> + <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="192"/> + <location filename="../../ReadThread.cpp" line="408"/> + <source>Unable to read the source file: </source> + <translation>Die Quelldatei kann nicht gelesen werden: </translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="233"/> + <location filename="../../ReadThread.cpp" line="456"/> + <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="26"/> + <source>First renaming</source> + <translation>Erste Umbenennung</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="32"/> + <source>%name% - copy</source> + <extracomment>%name% should not be translated</extracomment> + <translation>%name% - Kopie</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="39"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> + <extracomment> should not be translated</extracomment> + <translation><html><head/><body><p>Variablen: <span style=" font-weight:600;">%name%</span> fĆ¼r den ursprĆ¼nglichen Dateinamen</p></body></html></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="49"/> + <source>Second renaming</source> + <translation>Zweite Umbenennung</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="55"/> + <source>%name% - copy (%number%)</source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation>%name% - Kopie (%number%)</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="62"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</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 ursprĆ¼nglichen Dateinamen</p><p><span style=" font-weight:600;">%number%</span> fĆ¼r die zusƤtzliche Zahl</p></body></html></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="39"/> + <location filename="../../RenamingRules.cpp" line="62"/> + <source>%1 - copy</source> + <translation>%1 - Kopie</translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="43"/> + <location filename="../../RenamingRules.cpp" line="73"/> + <source>%1 - copy (%2)</source> + <translation>%1 - Kopie (%2)</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="14"/> + <source>Renaming rules</source> + <translation>Umbennungsregeln</translation> + </message> +</context> +<context> + <name>ScanFileOrFolder</name> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="265"/> + <source>Blacklisted folder</source> + <translation>Ordner der schwarzen Liste</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="327"/> + <location filename="../../ScanFileOrFolder.cpp" line="393"/> + <source>%1 - copy</source> + <translation>%1 - Kopie</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="337"/> + <location filename="../../ScanFileOrFolder.cpp" line="403"/> + <source>%1 - copy (%2)</source> + <translation>%1 - Kopie (%2)</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="441"/> + <source>This is not a folder</source> + <translation>Dies ist kein Ordner</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="443"/> + <source>The folder does exists</source> + <translation>Ordner existiert bereits</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="445"/> + <source>The folder is not readable</source> + <translation>Der Ordner kann nicht gelesen werden</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="456"/> + <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="235"/> + <location filename="../../TransferThread.cpp" line="663"/> + <location filename="../../TransferThread.cpp" line="735"/> + <location filename="../../TransferThread.cpp" line="1303"/> + <source>File not found</source> + <translation>Datei nicht gefunden</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="336"/> + <location filename="../../TransferThread.cpp" line="353"/> + <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="408"/> + <location filename="../../TransferThread.cpp" line="431"/> + <source>Internal error: Already opening</source> + <translation type="unfinished">Interner Fehler: Bereits geƶffnet</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="572"/> + <source>Drive %1</source> + <translation type="unfinished">Laufwerk %1</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="574"/> + <source>Unknown folder</source> + <translation type="unfinished">Unbekannter Ordner</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="578"/> + <source>root</source> + <translation type="unfinished">Stammverzeichnis</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="631"/> + <source>%1 - copy</source> + <translation type="unfinished">%1 - Kopie</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="641"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished">%1 - Kopie (%2)</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="777"/> + <source>The source doesn't exist</source> + <translation type="unfinished">Quelle existiert nicht</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1303"/> + <location filename="../../TransferThread.cpp" line="1321"/> + <location filename="../../TransferThread.cpp" line="1336"/> + <source>Unable to change the date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="701"/> + <location filename="../../TransferThread.cpp" line="816"/> + <source>The source file doesn't exist</source> + <translation type="unfinished">Quelldatei existiert nicht</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1124"/> + <source>The checksums do not match</source> + <translation type="unfinished">PrĆ¼fsummen sind verschieden</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1227"/> + <source>Internal error: The size transfered doesn't match</source> + <translation type="unfinished">Interner Fehler: Ubertragene GrƶĆe ungleich</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="741"/> + <location filename="../../TransferThread.cpp" line="828"/> + <source>Unable to do the folder</source> + <translation type="unfinished">Ordner kann nicht erstellt werden</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="219"/> + <source>Try rename with using special characters</source> + <translation>Versuche Umbenennung mit Sonderzeichen</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="822"/> + <source>Another file exists at same place</source> + <translation type="unfinished">Andere Datei befindet sich am selben Ort</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1213"/> + <source>Internal error: The destination is not closed</source> + <translation type="unfinished">Interner Fehler: Ziel ist nicht geschlossen</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1238"/> + <source>Internal error: The buffer is not empty</source> + <translation type="unfinished">Interner Fehler: Puffer ist nicht leer</translation> + </message> +</context> +<context> + <name>WriteThread</name> + <message> + <location filename="../../WriteThread.cpp" line="80"/> + <source>Path resolution error (Empty path)</source> + <translation>Pfad-Auflƶsungsfehler (leerer Pfad)</translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="268"/> + <source>Internal error, please report it!</source> + <translation>Interner Fehler - Bitte bei mir melden!</translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="671"/> + <source>Unable to read the source file: </source> + <translation>Quelldatei kann nicht gelesen werden: </translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="696"/> + <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="35"/> + <source>Transfer</source> + <translation>Ćbertragung</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="44"/> + <source>Move the whole folder</source> + <translation>Verschiebe den ganzen Ordner</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="51"/> + <source>Transfer the file rights</source> + <translation>Ćbertrage die Dateirechte</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="61"/> + <source>Keep the file date</source> + <translation>Datum der Dateien beibehalten</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="74"/> + <source>Autostart the transfer</source> + <translation>Ćbertragung automatisch starten</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="81"/> + <location filename="../../copyEngineOptions.ui" line="101"/> + <source>Less performance if checked</source> + <translation>Leistung drosseln</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="104"/> + <source>Follow the strict order</source> + <translation>Genau nach Reihenfolge</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="130"/> + <source>Error and collision</source> + <translation>Fehler und Kollision</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="136"/> + <source>When folder error</source> + <translation>Bei Ordnerfehlern:</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="146"/> + <source>When file error</source> + <translation>Bei Dateifehlern:</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="172"/> + <source>When file collision</source> + <translation>Bei Dateikollisionen:</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="232"/> + <source>When folder collision</source> + <translation>Bei Ordnerkollisionen:</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="263"/> + <source>Check if destination folder exists</source> + <translation>PrĆ¼fen ob Zielordner vorhanden ist</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="270"/> + <source>Renaming rules</source> + <translation>Umbennungsregeln</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="290"/> + <source>Delete partially transferred files</source> + <translation>UnvollstƤndig Ć¼bertragene Dateien lƶschen</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="303"/> + <source>Rename the original destination</source> + <translation>Original-Ziel umbenennen</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="334"/> + <source>Control</source> + <translation>ĆberprĆ¼fung</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="340"/> + <source>Checksum</source> + <translation>PrĆ¼fsumme</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="349"/> + <source>Only after error</source> + <translation>Nur nach einem Fehler</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="356"/> + <source>Ignore if impossible</source> + <translation>Ignorieren falls unmƶglich</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="373"/> + <source>Verify checksums</source> + <translation>PrĆ¼fsummen vergleichen</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="405"/> + <source>Performance</source> + <translation>Leistung</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="411"/> + <source>Parallel buffer</source> + <translation>Paralleler Puffer</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="418"/> + <location filename="../../copyEngineOptions.ui" line="431"/> + <location filename="../../copyEngineOptions.ui" line="444"/> + <location filename="../../copyEngineOptions.ui" line="481"/> + <location filename="../../copyEngineOptions.ui" line="550"/> + <source>KB</source> + <translation>KB</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="460"/> + <source>Block size</source> + <translation>BlockgrƶĆe</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="467"/> + <source>Sequential buffer</source> + <translation>Sequentieller Puffer</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="474"/> + <source>Enable OS buffer</source> + <translation>OS-Puffer aktivieren</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="497"/> + <source>OS buffer only if smaller than</source> + <translation>OS-Puffer nur verwenden, wenn kleiner als</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="504"/> + <source>Transfer algorithm</source> + <translation>Ćbertragungs-Algorithmus</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="543"/> + <source>Parallelize if smaller than</source> + <translation>Parallelisieren wenn kleiner als</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="573"/> + <source>Inode threads</source> + <translation>Inode Threads</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="580"/> + <location filename="../../copyEngineOptions.ui" line="590"/> + <source>More cpu, but better organisation on the disk</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="593"/> + <source>Order the list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="609"/> + <source>Misc</source> + <translation>Verschiedenes</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="615"/> + <source>Check the disk space</source> + <translation>Auf freien Speicherplatz Ć¼berprĆ¼fen</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="625"/> + <source>Use this folder when destination is not set</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Use this folder when destination is empty</source> + <translation type="obsolete">Benutze diesen Ordner wenn Ziel nicht benannt</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="637"/> + <source>Browse</source> + <translation>WƤhlen</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="659"/> + <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>Fusionieren</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/CopyEngine/Ultracopier/Languages/el/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/el/translation.ts new file mode 100644 index 0000000..3362659 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/Languages/el/translation.ts @@ -0,0 +1,1289 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<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="429"/> + <location filename="../../CopyEngine.cpp" line="451"/> + <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="462"/> + <location filename="../../CopyEngine.cpp" line="484"/> + <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="508"/> + <source>Destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="508"/> + <source>Use the actual destination "%1"?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="717"/> + <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="1047"/> + <location filename="../../CopyEngine.cpp" line="1050"/> + <location filename="../../CopyEngine.cpp" line="1055"/> + <location filename="../../CopyEngine.cpp" line="1059"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1048"/> + <location filename="../../CopyEngine.cpp" line="1052"/> + <location filename="../../CopyEngine.cpp" line="1056"/> + <location filename="../../CopyEngine.cpp" line="1060"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1051"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1053"/> + <location filename="../../CopyEngine.cpp" line="1065"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1057"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1061"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1062"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1063"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1064"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1067"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1068"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1069"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <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="412"/> + <location filename="../../CopyEngineFactory.cpp" line="415"/> + <location filename="../../CopyEngineFactory.cpp" line="420"/> + <location filename="../../CopyEngineFactory.cpp" line="424"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="413"/> + <location filename="../../CopyEngineFactory.cpp" line="417"/> + <location filename="../../CopyEngineFactory.cpp" line="421"/> + <location filename="../../CopyEngineFactory.cpp" line="425"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="416"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="418"/> + <location filename="../../CopyEngineFactory.cpp" line="430"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="422"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="426"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="427"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="428"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="429"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="432"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="433"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="434"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <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="131"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="141"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FileIsSameDialog</name> + <message> + <location filename="../../FileIsSameDialog.cpp" line="105"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="115"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <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="92"/> + <location filename="../../Filters.cpp" line="130"/> + <source>Raw text</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="95"/> + <location filename="../../Filters.cpp" line="133"/> + <source>Simplified regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="98"/> + <location filename="../../Filters.cpp" line="136"/> + <source>Perl's regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="106"/> + <location filename="../../Filters.cpp" line="144"/> + <source>Only on file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="109"/> + <location filename="../../Filters.cpp" line="147"/> + <source>Only on folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="115"/> + <location filename="../../Filters.cpp" line="153"/> + <location filename="../../Filters.cpp" line="215"/> + <location filename="../../Filters.cpp" line="254"/> + <source>Full match</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FolderExistsDialog</name> + <message> + <location filename="../../FolderExistsDialog.cpp" line="51"/> + <source>Folder already exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="116"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="126"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ListThread</name> + <message> + <location filename="../../ListThread.cpp" line="1447"/> + <location filename="../../ListThread.cpp" line="2369"/> + <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="1454"/> + <location filename="../../ListThread.cpp" line="2376"/> + <source>Unable to save the transfer list: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1470"/> + <source>Problem reading file, or file-size is 0</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1477"/> + <source>Wrong header: "%1"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1486"/> + <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="1495"/> + <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="1501"/> + <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="1557"/> + <source>Some errors have been found during the line parsing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1565"/> + <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="232"/> + <source>Unable to move the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="93"/> + <location filename="../../MkPath.cpp" line="275"/> + <source>Unable to remove</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ReadThread</name> + <message> + <location filename="../../ReadThread.cpp" line="55"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="184"/> + <source>Internal error reading the source file:block size out of range</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="192"/> + <location filename="../../ReadThread.cpp" line="408"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="233"/> + <location filename="../../ReadThread.cpp" line="456"/> + <source>File truncated during the read, possible data change</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>RenamingRules</name> + <message> + <location filename="../../RenamingRules.ui" line="26"/> + <source>First renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="32"/> + <source>%name% - copy</source> + <extracomment>%name% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="39"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> + <extracomment> should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="49"/> + <source>Second renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="55"/> + <source>%name% - copy (%number%)</source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="62"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="39"/> + <location filename="../../RenamingRules.cpp" line="62"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="43"/> + <location filename="../../RenamingRules.cpp" line="73"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="14"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ScanFileOrFolder</name> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="265"/> + <source>Blacklisted folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="327"/> + <location filename="../../ScanFileOrFolder.cpp" line="393"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="337"/> + <location filename="../../ScanFileOrFolder.cpp" line="403"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="441"/> + <source>This is not a folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="443"/> + <source>The folder does exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="445"/> + <source>The folder is not readable</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="456"/> + <source>Problem with name encoding</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TransferThread</name> + <message> + <location filename="../../TransferThread.cpp" line="235"/> + <location filename="../../TransferThread.cpp" line="663"/> + <location filename="../../TransferThread.cpp" line="735"/> + <location filename="../../TransferThread.cpp" line="1303"/> + <source>File not found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="336"/> + <location filename="../../TransferThread.cpp" line="353"/> + <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="408"/> + <location filename="../../TransferThread.cpp" line="431"/> + <source>Internal error: Already opening</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="572"/> + <source>Drive %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="574"/> + <source>Unknown folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="578"/> + <source>root</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="631"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="641"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="701"/> + <location filename="../../TransferThread.cpp" line="816"/> + <source>The source file doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="741"/> + <location filename="../../TransferThread.cpp" line="828"/> + <source>Unable to do the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="777"/> + <source>The source doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="822"/> + <source>Another file exists at same place</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1124"/> + <source>The checksums do not match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1213"/> + <source>Internal error: The destination is not closed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1227"/> + <source>Internal error: The size transfered doesn't match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1238"/> + <source>Internal error: The buffer is not empty</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1303"/> + <location filename="../../TransferThread.cpp" line="1321"/> + <location filename="../../TransferThread.cpp" line="1336"/> + <source>Unable to change the date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="219"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>WriteThread</name> + <message> + <location filename="../../WriteThread.cpp" line="80"/> + <source>Path resolution error (Empty path)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="268"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="671"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="696"/> + <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="35"/> + <source>Transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="44"/> + <source>Move the whole folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="51"/> + <source>Transfer the file rights</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="61"/> + <source>Keep the file date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="74"/> + <source>Autostart the transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="81"/> + <location filename="../../copyEngineOptions.ui" line="101"/> + <source>Less performance if checked</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="104"/> + <source>Follow the strict order</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="130"/> + <source>Error and collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="136"/> + <source>When folder error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="146"/> + <source>When file error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="172"/> + <source>When file collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="232"/> + <source>When folder collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="263"/> + <source>Check if destination folder exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="270"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="290"/> + <source>Delete partially transferred files</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="303"/> + <source>Rename the original destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="334"/> + <source>Control</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="340"/> + <source>Checksum</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="349"/> + <source>Only after error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="356"/> + <source>Ignore if impossible</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="373"/> + <source>Verify checksums</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="405"/> + <source>Performance</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="411"/> + <source>Parallel buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="418"/> + <location filename="../../copyEngineOptions.ui" line="431"/> + <location filename="../../copyEngineOptions.ui" line="444"/> + <location filename="../../copyEngineOptions.ui" line="481"/> + <location filename="../../copyEngineOptions.ui" line="550"/> + <source>KB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="460"/> + <source>Block size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="467"/> + <source>Sequential buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="474"/> + <source>Enable OS buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="497"/> + <source>OS buffer only if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="504"/> + <source>Transfer algorithm</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="543"/> + <source>Parallelize if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="573"/> + <source>Inode threads</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="580"/> + <location filename="../../copyEngineOptions.ui" line="590"/> + <source>More cpu, but better organisation on the disk</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="593"/> + <source>Order the list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="609"/> + <source>Misc</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="615"/> + <source>Check the disk space</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="625"/> + <source>Use this folder when destination is not set</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="637"/> + <source>Browse</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="659"/> + <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/CopyEngine/Ultracopier/Languages/en/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/en/translation.ts new file mode 100644 index 0000000..a6b1027 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/Languages/en/translation.ts @@ -0,0 +1,1289 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" 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="429"/> + <location filename="../../CopyEngine.cpp" line="451"/> + <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="462"/> + <location filename="../../CopyEngine.cpp" line="484"/> + <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="508"/> + <source>Destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="508"/> + <source>Use the actual destination "%1"?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="717"/> + <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="1047"/> + <location filename="../../CopyEngine.cpp" line="1050"/> + <location filename="../../CopyEngine.cpp" line="1055"/> + <location filename="../../CopyEngine.cpp" line="1059"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1048"/> + <location filename="../../CopyEngine.cpp" line="1052"/> + <location filename="../../CopyEngine.cpp" line="1056"/> + <location filename="../../CopyEngine.cpp" line="1060"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1051"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1053"/> + <location filename="../../CopyEngine.cpp" line="1065"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1057"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1061"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1062"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1063"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1064"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1067"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1068"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1069"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <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="412"/> + <location filename="../../CopyEngineFactory.cpp" line="415"/> + <location filename="../../CopyEngineFactory.cpp" line="420"/> + <location filename="../../CopyEngineFactory.cpp" line="424"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="413"/> + <location filename="../../CopyEngineFactory.cpp" line="417"/> + <location filename="../../CopyEngineFactory.cpp" line="421"/> + <location filename="../../CopyEngineFactory.cpp" line="425"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="416"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="418"/> + <location filename="../../CopyEngineFactory.cpp" line="430"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="422"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="426"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="427"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="428"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="429"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="432"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="433"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="434"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <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="131"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="141"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FileIsSameDialog</name> + <message> + <location filename="../../FileIsSameDialog.cpp" line="105"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="115"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <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="92"/> + <location filename="../../Filters.cpp" line="130"/> + <source>Raw text</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="95"/> + <location filename="../../Filters.cpp" line="133"/> + <source>Simplified regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="98"/> + <location filename="../../Filters.cpp" line="136"/> + <source>Perl's regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="106"/> + <location filename="../../Filters.cpp" line="144"/> + <source>Only on file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="109"/> + <location filename="../../Filters.cpp" line="147"/> + <source>Only on folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="115"/> + <location filename="../../Filters.cpp" line="153"/> + <location filename="../../Filters.cpp" line="215"/> + <location filename="../../Filters.cpp" line="254"/> + <source>Full match</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FolderExistsDialog</name> + <message> + <location filename="../../FolderExistsDialog.cpp" line="51"/> + <source>Folder already exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="116"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="126"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ListThread</name> + <message> + <location filename="../../ListThread.cpp" line="1447"/> + <location filename="../../ListThread.cpp" line="2369"/> + <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="1454"/> + <location filename="../../ListThread.cpp" line="2376"/> + <source>Unable to save the transfer list: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1470"/> + <source>Problem reading file, or file-size is 0</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1477"/> + <source>Wrong header: "%1"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1486"/> + <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="1495"/> + <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="1501"/> + <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="1557"/> + <source>Some errors have been found during the line parsing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1565"/> + <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="232"/> + <source>Unable to move the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="93"/> + <location filename="../../MkPath.cpp" line="275"/> + <source>Unable to remove</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ReadThread</name> + <message> + <location filename="../../ReadThread.cpp" line="55"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="184"/> + <source>Internal error reading the source file:block size out of range</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="192"/> + <location filename="../../ReadThread.cpp" line="408"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="233"/> + <location filename="../../ReadThread.cpp" line="456"/> + <source>File truncated during the read, possible data change</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>RenamingRules</name> + <message> + <location filename="../../RenamingRules.ui" line="14"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="26"/> + <source>First renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="32"/> + <source>%name% - copy</source> + <extracomment>%name% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="39"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> + <extracomment> should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="49"/> + <source>Second renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="55"/> + <source>%name% - copy (%number%)</source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="62"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="39"/> + <location filename="../../RenamingRules.cpp" line="62"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="43"/> + <location filename="../../RenamingRules.cpp" line="73"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ScanFileOrFolder</name> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="265"/> + <source>Blacklisted folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="327"/> + <location filename="../../ScanFileOrFolder.cpp" line="393"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="337"/> + <location filename="../../ScanFileOrFolder.cpp" line="403"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="441"/> + <source>This is not a folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="443"/> + <source>The folder does exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="445"/> + <source>The folder is not readable</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="456"/> + <source>Problem with name encoding</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TransferThread</name> + <message> + <location filename="../../TransferThread.cpp" line="235"/> + <location filename="../../TransferThread.cpp" line="663"/> + <location filename="../../TransferThread.cpp" line="735"/> + <location filename="../../TransferThread.cpp" line="1303"/> + <source>File not found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="336"/> + <location filename="../../TransferThread.cpp" line="353"/> + <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="408"/> + <location filename="../../TransferThread.cpp" line="431"/> + <source>Internal error: Already opening</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="572"/> + <source>Drive %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="574"/> + <source>Unknown folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="578"/> + <source>root</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="631"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="641"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="701"/> + <location filename="../../TransferThread.cpp" line="816"/> + <source>The source file doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="741"/> + <location filename="../../TransferThread.cpp" line="828"/> + <source>Unable to do the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="777"/> + <source>The source doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="822"/> + <source>Another file exists at same place</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1124"/> + <source>The checksums do not match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1213"/> + <source>Internal error: The destination is not closed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1227"/> + <source>Internal error: The size transfered doesn't match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1238"/> + <source>Internal error: The buffer is not empty</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1303"/> + <location filename="../../TransferThread.cpp" line="1321"/> + <location filename="../../TransferThread.cpp" line="1336"/> + <source>Unable to change the date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="219"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>WriteThread</name> + <message> + <location filename="../../WriteThread.cpp" line="80"/> + <source>Path resolution error (Empty path)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="268"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="671"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="696"/> + <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="35"/> + <source>Transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="44"/> + <source>Move the whole folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="51"/> + <source>Transfer the file rights</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="61"/> + <source>Keep the file date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="74"/> + <source>Autostart the transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="81"/> + <location filename="../../copyEngineOptions.ui" line="101"/> + <source>Less performance if checked</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="104"/> + <source>Follow the strict order</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="130"/> + <source>Error and collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="136"/> + <source>When folder error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="146"/> + <source>When file error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="172"/> + <source>When file collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="232"/> + <source>When folder collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="263"/> + <source>Check if destination folder exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="270"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="290"/> + <source>Delete partially transferred files</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="303"/> + <source>Rename the original destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="334"/> + <source>Control</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="340"/> + <source>Checksum</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="349"/> + <source>Only after error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="356"/> + <source>Ignore if impossible</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="373"/> + <source>Verify checksums</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="405"/> + <source>Performance</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="411"/> + <source>Parallel buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="418"/> + <location filename="../../copyEngineOptions.ui" line="431"/> + <location filename="../../copyEngineOptions.ui" line="444"/> + <location filename="../../copyEngineOptions.ui" line="481"/> + <location filename="../../copyEngineOptions.ui" line="550"/> + <source>KB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="460"/> + <source>Block size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="467"/> + <source>Sequential buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="474"/> + <source>Enable OS buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="497"/> + <source>OS buffer only if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="504"/> + <source>Transfer algorithm</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="543"/> + <source>Parallelize if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="573"/> + <source>Inode threads</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="580"/> + <location filename="../../copyEngineOptions.ui" line="590"/> + <source>More cpu, but better organisation on the disk</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="593"/> + <source>Order the list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="609"/> + <source>Misc</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="615"/> + <source>Check the disk space</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="625"/> + <source>Use this folder when destination is not set</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="637"/> + <source>Browse</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="659"/> + <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/CopyEngine/Ultracopier/Languages/es/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/es/translation.ts new file mode 100644 index 0000000..d2a294f --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/Languages/es/translation.ts @@ -0,0 +1,1305 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="es" sourcelanguage="en"> +<context> + <name>AvancedQFile</name> + <message> + <location filename="../../AvancedQFile.cpp" line="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="429"/> + <location filename="../../CopyEngine.cpp" line="451"/> + <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="462"/> + <location filename="../../CopyEngine.cpp" line="484"/> + <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="508"/> + <source>Destination</source> + <translation>Destino</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="508"/> + <source>Use the actual destination "%1"?</source> + <translation>Utilice el destino "%1" actual?</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="717"/> + <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="1047"/> + <location filename="../../CopyEngine.cpp" line="1050"/> + <location filename="../../CopyEngine.cpp" line="1055"/> + <location filename="../../CopyEngine.cpp" line="1059"/> + <source>Ask</source> + <translation>Pedir</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1048"/> + <location filename="../../CopyEngine.cpp" line="1052"/> + <location filename="../../CopyEngine.cpp" line="1056"/> + <location filename="../../CopyEngine.cpp" line="1060"/> + <source>Skip</source> + <translation>Omitir</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1051"/> + <source>Merge</source> + <translation>Unir</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1053"/> + <location filename="../../CopyEngine.cpp" line="1065"/> + <source>Rename</source> + <translation>Cambiar el nombre</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1057"/> + <source>Put at the end</source> + <translation>Ponga al final</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1061"/> + <source>Overwrite</source> + <translation>Sobrescribir</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1062"/> + <source>Overwrite if different</source> + <translation>Sobrescribir si es diferente</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1063"/> + <source>Overwrite if newer</source> + <translation>Sobrescribir si nuevo</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1064"/> + <source>Overwrite if older</source> + <translation>Sobrescribir si es mayor</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1067"/> + <source>Automatic</source> + <translation>AutomĆ”tico</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1068"/> + <source>Sequential</source> + <translation>Secuencial</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1069"/> + <source>Parallel</source> + <translation>Paralelo</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <source>Options error</source> + <translation>error Opciones</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <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="412"/> + <location filename="../../CopyEngineFactory.cpp" line="415"/> + <location filename="../../CopyEngineFactory.cpp" line="420"/> + <location filename="../../CopyEngineFactory.cpp" line="424"/> + <source>Ask</source> + <translation>Pedir</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="413"/> + <location filename="../../CopyEngineFactory.cpp" line="417"/> + <location filename="../../CopyEngineFactory.cpp" line="421"/> + <location filename="../../CopyEngineFactory.cpp" line="425"/> + <source>Skip</source> + <translation>Omitir</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="416"/> + <source>Merge</source> + <translation>Unir</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="418"/> + <location filename="../../CopyEngineFactory.cpp" line="430"/> + <source>Rename</source> + <translation>Cambiar el nombre</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="422"/> + <source>Put at the end</source> + <translation>Ponga al final</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="426"/> + <source>Overwrite</source> + <translation>Sobrescribir</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="427"/> + <source>Overwrite if different</source> + <translation>Sobrescribir si es diferente</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="428"/> + <source>Overwrite if newer</source> + <translation>Sobrescribir si nuevo</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="429"/> + <source>Overwrite if older</source> + <translation>Sobrescribir si es mayor</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="432"/> + <source>Automatic</source> + <translation>AutomĆ”tico</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="433"/> + <source>Sequential</source> + <translation>Secuencial</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="434"/> + <source>Parallel</source> + <translation>Paralelo</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <source>Options error</source> + <translation>error Opciones</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <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="524"/> + <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="131"/> + <source>%1 - copy</source> + <translation>%1 - copia</translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="141"/> + <source>%1 - copy (%2)</source> + <translation>%1 - copia (%2)</translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Error</source> + <translation>Error</translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <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="105"/> + <source>%1 - copy</source> + <translation>%1 - copia</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="115"/> + <source>%1 - copy (%2)</source> + <translation>%1 - copia (%2)</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <source>Error</source> + <translation>Error</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <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="92"/> + <location filename="../../Filters.cpp" line="130"/> + <source>Raw text</source> + <translation>texto Fuente</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="95"/> + <location filename="../../Filters.cpp" line="133"/> + <source>Simplified regex</source> + <translation>Simplificado regex</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="98"/> + <location filename="../../Filters.cpp" line="136"/> + <source>Perl's regex</source> + <translation>Perl's regex</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="106"/> + <location filename="../../Filters.cpp" line="144"/> + <source>Only on file</source> + <translation>SĆ³lo en el archivo</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="109"/> + <location filename="../../Filters.cpp" line="147"/> + <source>Only on folder</source> + <translation>SĆ³lo en la carpeta</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="115"/> + <location filename="../../Filters.cpp" line="153"/> + <location filename="../../Filters.cpp" line="215"/> + <location filename="../../Filters.cpp" line="254"/> + <source>Full match</source> + <translation>Partido completo</translation> + </message> +</context> +<context> + <name>FolderExistsDialog</name> + <message> + <location filename="../../FolderExistsDialog.cpp" line="51"/> + <source>Folder already exists</source> + <translation>Carpeta ya existe</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="116"/> + <source>%1 - copy</source> + <translation>%1 - copia</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="126"/> + <source>%1 - copy (%2)</source> + <translation>%1 - copia (%2)</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Error</source> + <translation>Error</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <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="1447"/> + <location filename="../../ListThread.cpp" line="2369"/> + <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="1454"/> + <location filename="../../ListThread.cpp" line="2376"/> + <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="1470"/> + <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="1477"/> + <source>Wrong header: "%1"</source> + <translation>Encabezado incorrecto: "%1"</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1486"/> + <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="1495"/> + <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="1501"/> + <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="1557"/> + <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="1565"/> + <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> + <source>Unable to get time</source> + <translation type="obsolete">No es posible obtener el tiempo</translation> + </message> + <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="232"/> + <source>Unable to move the folder</source> + <translation>No se puede mover la carpeta</translation> + </message> + <message> + <source>Unable to set the access-right</source> + <translation type="obsolete">No se puede establecer el acceso a la derecha</translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="93"/> + <location filename="../../MkPath.cpp" line="275"/> + <source>Unable to remove</source> + <translation>No se puede eliminar</translation> + </message> +</context> +<context> + <name>ReadThread</name> + <message> + <location filename="../../ReadThread.cpp" line="55"/> + <source>Internal error, please report it!</source> + <translation>Error interno, por favor informe de ello!</translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="184"/> + <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="192"/> + <location filename="../../ReadThread.cpp" line="408"/> + <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="233"/> + <location filename="../../ReadThread.cpp" line="456"/> + <source>File truncated during the read, possible data change</source> + <translation>Archivo truncada durante el cambio de lectura, los datos posibles</translation> + </message> +</context> +<context> + <name>RenamingRules</name> + <message> + <location filename="../../RenamingRules.ui" line="26"/> + <source>First renaming</source> + <translation>En primer lugar el cambio de nombre</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="32"/> + <source>%name% - copy</source> + <extracomment>%name% should not be translated</extracomment> + <translation>%name% - copia</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="39"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> + <extracomment> should not be translated</extracomment> + <translation><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> para el nombre del archivo original</p></body></html></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="49"/> + <source>Second renaming</source> + <translation>En segundo lugar el cambio de nombre</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="55"/> + <source>%name% - copy (%number%)</source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation>%name% - copia (%number%)</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="62"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> para el nombre del archivo original</p><p><span style=" font-weight:600;">%number%</span> para el nĆŗmero adicional</p></body></html></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="39"/> + <location filename="../../RenamingRules.cpp" line="62"/> + <source>%1 - copy</source> + <translation>%1 - copia</translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="43"/> + <location filename="../../RenamingRules.cpp" line="73"/> + <source>%1 - copy (%2)</source> + <translation>%1 - copia (%2)</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="14"/> + <source>Renaming rules</source> + <translation>Reglas de Cambio de nombre</translation> + </message> +</context> +<context> + <name>ScanFileOrFolder</name> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="265"/> + <source>Blacklisted folder</source> + <translation>Carpeta de la lista negra</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="327"/> + <location filename="../../ScanFileOrFolder.cpp" line="393"/> + <source>%1 - copy</source> + <translation>%1 - copia</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="337"/> + <location filename="../../ScanFileOrFolder.cpp" line="403"/> + <source>%1 - copy (%2)</source> + <translation>%1 - copia (%2)</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="441"/> + <source>This is not a folder</source> + <translation>Esto no es una carpeta</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="443"/> + <source>The folder does exists</source> + <translation>La carpeta no existe</translation> + </message> + <message> + <source>The folder not exists</source> + <translation type="obsolete">La carpeta no existe</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="445"/> + <source>The folder is not readable</source> + <translation>La carpeta no se puede leer</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="456"/> + <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="235"/> + <location filename="../../TransferThread.cpp" line="663"/> + <location filename="../../TransferThread.cpp" line="735"/> + <location filename="../../TransferThread.cpp" line="1303"/> + <source>File not found</source> + <translation>Archivo no encontrado</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="336"/> + <location filename="../../TransferThread.cpp" line="353"/> + <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="408"/> + <location filename="../../TransferThread.cpp" line="431"/> + <source>Internal error: Already opening</source> + <translation type="unfinished">Error interno: Ya la apertura</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="572"/> + <source>Drive %1</source> + <translation type="unfinished">Drive %1</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="574"/> + <source>Unknown folder</source> + <translation type="unfinished">Desconocido carpeta</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="578"/> + <source>root</source> + <translation type="unfinished">raĆz</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="631"/> + <source>%1 - copy</source> + <translation type="unfinished">%1 - copia</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="641"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished">%1 - copia (%2)</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="777"/> + <source>The source doesn't exist</source> + <translation type="unfinished">La fuente no existe</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1303"/> + <location filename="../../TransferThread.cpp" line="1321"/> + <location filename="../../TransferThread.cpp" line="1336"/> + <source>Unable to change the date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="701"/> + <location filename="../../TransferThread.cpp" line="816"/> + <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="1124"/> + <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="1227"/> + <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="741"/> + <location filename="../../TransferThread.cpp" line="828"/> + <source>Unable to do the folder</source> + <translation type="unfinished">Incapaz de hacer la carpeta</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="219"/> + <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="822"/> + <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="1213"/> + <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="1238"/> + <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="80"/> + <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="268"/> + <source>Internal error, please report it!</source> + <translation>Error interno, por favor informe de ello!</translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="671"/> + <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="696"/> + <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="35"/> + <source>Transfer</source> + <translation>Transferencia</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="44"/> + <source>Move the whole folder</source> + <translation>Mueva la carpeta completa</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="51"/> + <source>Transfer the file rights</source> + <translation>Transferencia de los derechos de archivo</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="61"/> + <source>Keep the file date</source> + <translation>Mantener la fecha de archivo</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="74"/> + <source>Autostart the transfer</source> + <translation>Inicio automĆ”tico de la transferencia</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="81"/> + <location filename="../../copyEngineOptions.ui" line="101"/> + <source>Less performance if checked</source> + <translation>Si comprueba Menos rendimiento</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="104"/> + <source>Follow the strict order</source> + <translation>Siga el orden estricto</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="130"/> + <source>Error and collision</source> + <translation>Error y de la colisiĆ³n</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="136"/> + <source>When folder error</source> + <translation>Cuando el error carpeta</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="146"/> + <source>When file error</source> + <translation>Cuando archivo error</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="172"/> + <source>When file collision</source> + <translation>Cuando archivo colisiĆ³n</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="232"/> + <source>When folder collision</source> + <translation>Cuando la colisiĆ³n carpeta</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="263"/> + <source>Check if destination folder exists</source> + <translation>Compruebe si existe la carpeta de destino</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="270"/> + <source>Renaming rules</source> + <translation>Reglas de Cambio de nombre</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="290"/> + <source>Delete partially transferred files</source> + <translation>Eliminar archivos parcialmente transferidos</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="303"/> + <source>Rename the original destination</source> + <translation>Cambie el nombre del destino original</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="334"/> + <source>Control</source> + <translation>Controlar</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="340"/> + <source>Checksum</source> + <translation>Suma de comprobaciĆ³n</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="349"/> + <source>Only after error</source> + <translation>SĆ³lo despuĆ©s de un error</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="356"/> + <source>Ignore if impossible</source> + <translation>No haga caso si no es posible</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="373"/> + <source>Verify checksums</source> + <translation>Verifique checksums</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="405"/> + <source>Performance</source> + <translation>Rendimiento</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="411"/> + <source>Parallel buffer</source> + <translation>BĆŗfer paralelo</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="418"/> + <location filename="../../copyEngineOptions.ui" line="431"/> + <location filename="../../copyEngineOptions.ui" line="444"/> + <location filename="../../copyEngineOptions.ui" line="481"/> + <location filename="../../copyEngineOptions.ui" line="550"/> + <source>KB</source> + <translation>KB</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="460"/> + <source>Block size</source> + <translation>TamaƱo del bloque</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="467"/> + <source>Sequential buffer</source> + <translation>TampĆ³n secuencial</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="474"/> + <source>Enable OS buffer</source> + <translation>Habilitar el OS de amortiguaciĆ³n</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="497"/> + <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="504"/> + <source>Transfer algorithm</source> + <translation>Algoritmo de transferencia</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="543"/> + <source>Parallelize if smaller than</source> + <translation>Paralelice si mĆ”s pequeƱo que</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="573"/> + <source>Inode threads</source> + <translation>Temas inodo</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="580"/> + <location filename="../../copyEngineOptions.ui" line="590"/> + <source>More cpu, but better organisation on the disk</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="593"/> + <source>Order the list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="609"/> + <source>Misc</source> + <translation>Misc</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="615"/> + <source>Check the disk space</source> + <translation>Compruebe el espacio en disco</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="625"/> + <source>Use this folder when destination is not set</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Use this folder when destination is empty</source> + <translation type="obsolete">Utilice esta carpeta al destino estĆ” vacĆa</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="637"/> + <source>Browse</source> + <translation>Busque</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="659"/> + <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/CopyEngine/Ultracopier/Languages/fr/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/fr/translation.ts new file mode 100644 index 0000000..8ed7524 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/Languages/fr/translation.ts @@ -0,0 +1,1338 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="fr" sourcelanguage="en"> +<context> + <name>AvancedQFile</name> + <message> + <location filename="../../AvancedQFile.cpp" line="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="429"/> + <location filename="../../CopyEngine.cpp" line="451"/> + <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="462"/> + <location filename="../../CopyEngine.cpp" line="484"/> + <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="508"/> + <source>Destination</source> + <translation>Destination</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="508"/> + <source>Use the actual destination "%1"?</source> + <translation>Utiliser la destination actuelle "%1"?</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="717"/> + <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="1047"/> + <location filename="../../CopyEngine.cpp" line="1050"/> + <location filename="../../CopyEngine.cpp" line="1055"/> + <location filename="../../CopyEngine.cpp" line="1059"/> + <source>Ask</source> + <translation>Demander</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1048"/> + <location filename="../../CopyEngine.cpp" line="1052"/> + <location filename="../../CopyEngine.cpp" line="1056"/> + <location filename="../../CopyEngine.cpp" line="1060"/> + <source>Skip</source> + <translation>Passer</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1051"/> + <source>Merge</source> + <translation>Fusionner</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1053"/> + <location filename="../../CopyEngine.cpp" line="1065"/> + <source>Rename</source> + <translation>Renommer</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1057"/> + <source>Put at the end</source> + <translation>Mettre Ć la fin</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1061"/> + <source>Overwrite</source> + <translation>Ćcraser</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1062"/> + <source>Overwrite if different</source> + <translation>Ćcraser si diffĆ©rent</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1063"/> + <source>Overwrite if newer</source> + <translation>Ćcraser si plus rĆ©cent</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1064"/> + <source>Overwrite if older</source> + <translation>Ćcraser si plus vieux</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1067"/> + <source>Automatic</source> + <translation>Automatique</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1068"/> + <source>Sequential</source> + <translation>SĆ©quentiel</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1069"/> + <source>Parallel</source> + <translation>ParallĆØle</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <source>Options error</source> + <translation>Erreur d'options</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <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="412"/> + <location filename="../../CopyEngineFactory.cpp" line="415"/> + <location filename="../../CopyEngineFactory.cpp" line="420"/> + <location filename="../../CopyEngineFactory.cpp" line="424"/> + <source>Ask</source> + <translation>Demander</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="413"/> + <location filename="../../CopyEngineFactory.cpp" line="417"/> + <location filename="../../CopyEngineFactory.cpp" line="421"/> + <location filename="../../CopyEngineFactory.cpp" line="425"/> + <source>Skip</source> + <translation>Passer</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="416"/> + <source>Merge</source> + <translation>Fusionner</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="418"/> + <location filename="../../CopyEngineFactory.cpp" line="430"/> + <source>Rename</source> + <translation>Renommer</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="422"/> + <source>Put at the end</source> + <translation>Mettre Ć la fin</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="426"/> + <source>Overwrite</source> + <translation>Ćcraser</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="427"/> + <source>Overwrite if different</source> + <translation>Ćcraser si diffĆ©rent</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="428"/> + <source>Overwrite if newer</source> + <translation>Ćcraser si plus rĆ©cent</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="429"/> + <source>Overwrite if older</source> + <translation>Ćcraser si plus vieux</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="432"/> + <source>Automatic</source> + <translation>Automatique</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="433"/> + <source>Sequential</source> + <translation>SĆ©quentiel</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="434"/> + <source>Parallel</source> + <translation>ParallĆØle</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <source>Options error</source> + <translation>Erreur d'options</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <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="524"/> + <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="131"/> + <source>%1 - copy</source> + <translation>%1 - copie</translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="141"/> + <source>%1 - copy (%2)</source> + <translation>%1 - copie (%2)</translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Error</source> + <translation>Erreur</translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Try rename with using special characters</source> + <translation>Essaie de renommage avec caratĆ©res interdits</translation> + </message> + <message> + <source>Try rename with unauthorized characters</source> + <translation type="obsolete">Essaie de renommage avec caratĆ©res interdits</translation> + </message> +</context> +<context> + <name>FileIsSameDialog</name> + <message> + <location filename="../../FileIsSameDialog.cpp" line="105"/> + <source>%1 - copy</source> + <translation>%1 - copie</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="115"/> + <source>%1 - copy (%2)</source> + <translation>%1 - copie (%2)</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <source>Error</source> + <translation>Erreur</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <source>Try rename with using special characters</source> + <translation>Essaie de renommage avec caratĆ©res interdits</translation> + </message> + <message> + <source>Try rename with unauthorized characters</source> + <translation type="obsolete">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="92"/> + <location filename="../../Filters.cpp" line="130"/> + <source>Raw text</source> + <translation>Texte brute</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="95"/> + <location filename="../../Filters.cpp" line="133"/> + <source>Simplified regex</source> + <translation>Regex simplifiĆ©</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="98"/> + <location filename="../../Filters.cpp" line="136"/> + <source>Perl's regex</source> + <translation>Regex perl</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="106"/> + <location filename="../../Filters.cpp" line="144"/> + <source>Only on file</source> + <translation>Appliquer sur fichier</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="109"/> + <location filename="../../Filters.cpp" line="147"/> + <source>Only on folder</source> + <translation>Appliquer sur dossier</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="115"/> + <location filename="../../Filters.cpp" line="153"/> + <location filename="../../Filters.cpp" line="215"/> + <location filename="../../Filters.cpp" line="254"/> + <source>Full match</source> + <translation>Correspondance totale</translation> + </message> +</context> +<context> + <name>FolderExistsDialog</name> + <message> + <location filename="../../FolderExistsDialog.cpp" line="51"/> + <source>Folder already exists</source> + <translation>Dossier dĆ©jĆ existant</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="116"/> + <source>%1 - copy</source> + <translation>%1 - copie</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="126"/> + <source>%1 - copy (%2)</source> + <translation>%1 - copie (%2)</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Error</source> + <translation>Erreur</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Try rename with using special characters</source> + <translation>Essaie de renommage avec caratĆ©res interdits</translation> + </message> + <message> + <source>Try rename with unauthorized characters</source> + <translation type="obsolete">Essaie de renommage avec caratĆ©res interdits</translation> + </message> + <message> + <source>Try rename with unauthorized charateres</source> + <translation type="obsolete">Tentative de renommage de des caratĆ©res non autorisĆ©s</translation> + </message> +</context> +<context> + <name>ListThread</name> + <message> + <location filename="../../ListThread.cpp" line="1447"/> + <location filename="../../ListThread.cpp" line="2369"/> + <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="1454"/> + <location filename="../../ListThread.cpp" line="2376"/> + <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="1470"/> + <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="1477"/> + <source>Wrong header: "%1"</source> + <translation>Mauvais en-tĆŖte: "%1"</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1486"/> + <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="1495"/> + <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="1501"/> + <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="1557"/> + <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="1565"/> + <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> + <source>Unable to get time</source> + <translation type="obsolete">Impossible d'obtenir l'heure</translation> + </message> + <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="232"/> + <source>Unable to move the folder</source> + <translation>Impossible de dĆ©placer le dossier</translation> + </message> + <message> + <source>Unable to set time</source> + <translation type="obsolete">Impossible de dĆ©finir l'heure</translation> + </message> + <message> + <source>Unable to set the access-right</source> + <translation type="obsolete">Impossible de dĆ©finir les droits d'accĆ©s</translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="93"/> + <location filename="../../MkPath.cpp" line="275"/> + <source>Unable to remove</source> + <translation>Impossible de supprimer</translation> + </message> +</context> +<context> + <name>ReadThread</name> + <message> + <location filename="../../ReadThread.cpp" line="55"/> + <source>Internal error, please report it!</source> + <translation>Erreur interne, merci de la reporter!</translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="184"/> + <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="192"/> + <location filename="../../ReadThread.cpp" line="408"/> + <source>Unable to read the source file: </source> + <translation>Impossible de lire le fichier source: </translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="233"/> + <location filename="../../ReadThread.cpp" line="456"/> + <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="26"/> + <source>First renaming</source> + <translation>Premier renommage</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="32"/> + <source>%name% - copy</source> + <extracomment>%name% should not be translated</extracomment> + <translatorcomment>variables need never be translated</translatorcomment> + <translation>%name% - copie</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="39"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> + <extracomment> should not be translated</extracomment> + <translatorcomment>variables need never be translated</translatorcomment> + <translation><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> pour le nom originel</p></body></html></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="49"/> + <source>Second renaming</source> + <translation>Second renommage</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="55"/> + <source>%name% - copy (%number%)</source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translatorcomment>variables need never be translated</translatorcomment> + <translation>%name% - copie (%number%)</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="62"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translatorcomment>variables need never be translated</translatorcomment> + <translation><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> pour le nom originel</p><p><span style=" font-weight:600;">%number%</span> pour le nombre extra</p></body></html></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="39"/> + <location filename="../../RenamingRules.cpp" line="62"/> + <source>%1 - copy</source> + <translation>%1 - copie</translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="43"/> + <location filename="../../RenamingRules.cpp" line="73"/> + <source>%1 - copy (%2)</source> + <translation>%1 - copie (%2)</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="14"/> + <source>Renaming rules</source> + <translation>RĆØgles de renommage</translation> + </message> +</context> +<context> + <name>ScanFileOrFolder</name> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="265"/> + <source>Blacklisted folder</source> + <translation>Dossier banis</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="327"/> + <location filename="../../ScanFileOrFolder.cpp" line="393"/> + <source>%1 - copy</source> + <translation>%1 - copie</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="337"/> + <location filename="../../ScanFileOrFolder.cpp" line="403"/> + <source>%1 - copy (%2)</source> + <translation>%1 - copie (%2)</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="441"/> + <source>This is not a folder</source> + <translation>N'est pas un dossier</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="443"/> + <source>The folder does exists</source> + <translation>Le rĆ©pertoire n'existe pas</translation> + </message> + <message> + <source>The folder not exists</source> + <translation type="obsolete">Le rĆ©pertoire n'existe pas</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="445"/> + <source>The folder is not readable</source> + <translation>Le rĆ©pertoire n'est pas lisible</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="456"/> + <source>Problem with name encoding</source> + <translation>ProblĆ©m d'encodage</translation> + </message> +</context> +<context> + <name>TransferThread</name> + <message> + <location filename="../../TransferThread.cpp" line="235"/> + <location filename="../../TransferThread.cpp" line="663"/> + <location filename="../../TransferThread.cpp" line="735"/> + <location filename="../../TransferThread.cpp" line="1303"/> + <source>File not found</source> + <translation>Fichier non trouvĆ©</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="572"/> + <source>Drive %1</source> + <translation>Lecteur %1</translation> + </message> + <message> + <source>Try rename with unauthorized characters</source> + <translation type="obsolete">Essaie de renommage avec caratĆ©res interdits</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="574"/> + <source>Unknown folder</source> + <translation>Dossier inconnu</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="578"/> + <source>root</source> + <translation>racine</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="631"/> + <source>%1 - copy</source> + <translation>%1 - copie</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="641"/> + <source>%1 - copy (%2)</source> + <translation>%1 - copie (%2)</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="777"/> + <source>The source doesn't exist</source> + <translation>La source n'existe pas</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="701"/> + <location filename="../../TransferThread.cpp" line="816"/> + <source>The source file doesn't exist</source> + <translation>Le fichier source n'existe pas</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1124"/> + <source>The checksums do not match</source> + <translation>Les sommes de controle ne correspondent pas</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1227"/> + <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="741"/> + <location filename="../../TransferThread.cpp" line="828"/> + <source>Unable to do the folder</source> + <translation>Impossible de crĆ©er le dossier</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="219"/> + <source>Try rename with using special characters</source> + <translation>Essaie de renommage avec caratĆ©res interdits</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="336"/> + <location filename="../../TransferThread.cpp" line="353"/> + <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Ć©sactivĆ© le transfert de celui-ci</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="408"/> + <location filename="../../TransferThread.cpp" line="431"/> + <source>Internal error: Already opening</source> + <translation>Erreur interne: DĆ©jĆ ouvert</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="822"/> + <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="1213"/> + <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="1238"/> + <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="1303"/> + <location filename="../../TransferThread.cpp" line="1321"/> + <location filename="../../TransferThread.cpp" line="1336"/> + <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="80"/> + <source>Path resolution error (Empty path)</source> + <translation>Erreur de rĆ©solution de chemain (chemain vide)</translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="268"/> + <source>Internal error, please report it!</source> + <translation>Erreur interne, merci de la reporter!</translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="671"/> + <source>Unable to read the source file: </source> + <translation>Impossible de lire le fichier source: </translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="696"/> + <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="35"/> + <source>Transfer</source> + <translation>Transfert</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="44"/> + <source>Move the whole folder</source> + <translation>DĆ©placer le dossier complet</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="51"/> + <source>Transfer the file rights</source> + <translation>TransfĆ©rer les droits des fichiers</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="61"/> + <source>Keep the file date</source> + <translation>Garder la date du fichier</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="74"/> + <source>Autostart the transfer</source> + <translation>DĆ©marrer automatiquement le transfert</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="81"/> + <location filename="../../copyEngineOptions.ui" line="101"/> + <source>Less performance if checked</source> + <translation>Moins de performance si cochĆ©</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="104"/> + <source>Follow the strict order</source> + <translation>Suivre l'ordre strict</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="130"/> + <source>Error and collision</source> + <translation>Erreur et collision</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="136"/> + <source>When folder error</source> + <translation>En cas d'erreur de rĆ©pertoire</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="146"/> + <source>When file error</source> + <translation>En cas d'erreur de fichier</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="172"/> + <source>When file collision</source> + <translation>En cas de collision de fichier</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="232"/> + <source>When folder collision</source> + <translation>Lors d'une collision de dossier</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="263"/> + <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="270"/> + <source>Renaming rules</source> + <translation>RĆØgles de renommage</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="290"/> + <source>Delete partially transferred files</source> + <translation>Supprimer les transferts partiels</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="303"/> + <source>Rename the original destination</source> + <translation>Renommer la destination originale</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="334"/> + <source>Control</source> + <translation>Controle</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="340"/> + <source>Checksum</source> + <translation>Somme de contrĆ“le</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="349"/> + <source>Only after error</source> + <translation>Seulement aprĆØs erreur</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="356"/> + <source>Ignore if impossible</source> + <translation>Ignorer si impossible</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="373"/> + <source>Verify checksums</source> + <translation>VĆ©rifier les sommes de contrĆ“les</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="405"/> + <source>Performance</source> + <translation>Performance</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="411"/> + <source>Parallel buffer</source> + <translation>Buffer parallĆ©le</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="418"/> + <location filename="../../copyEngineOptions.ui" line="431"/> + <location filename="../../copyEngineOptions.ui" line="444"/> + <location filename="../../copyEngineOptions.ui" line="481"/> + <location filename="../../copyEngineOptions.ui" line="550"/> + <source>KB</source> + <translation>Ko</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="460"/> + <source>Block size</source> + <translation>Taille de bloc</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="467"/> + <source>Sequential buffer</source> + <translation>Buffer sĆ©quentiel</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="474"/> + <source>Enable OS buffer</source> + <translation>Activer le tampon de l'OS</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="497"/> + <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="504"/> + <source>Transfer algorithm</source> + <translation>Algorithme de transfert</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="543"/> + <source>Parallelize if smaller than</source> + <translation>ParallĆØlise si plus petit que</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="573"/> + <source>Inode threads</source> + <translation>Thread d'inode</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="580"/> + <location filename="../../copyEngineOptions.ui" line="590"/> + <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="593"/> + <source>Order the list</source> + <translation>Ordonner la liste</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="609"/> + <source>Misc</source> + <translation>Divers</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="615"/> + <source>Check the disk space</source> + <translation>VĆ©rifier l'espace disque</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="625"/> + <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> + <source>Use this folder when destination is empty</source> + <translation type="obsolete">Utiliser ce dossier quand la destination est vide</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="637"/> + <source>Browse</source> + <translation>Parcourir</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="659"/> + <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> + <message> + <location filename="../../fileErrorDialog.ui" line="193"/> + <source>Try in with elevated privileges</source> + <translation>Essayer avec des privilĆ©ges suppĆ©rieurs</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="200"/> + <source>Put to bottom</source> + <translation>Mettre Ć la fin</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="207"/> + <source>Retry</source> + <translation>RĆ©essayer</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="214"/> + <source>&Skip</source> + <translation>&Passer</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="221"/> + <source>&Cancel</source> + <translation>&Annuler</translation> + </message> +</context> +<context> + <name>fileExistsDialog</name> + <message> + <location filename="../../fileExistsDialog.ui" line="14"/> + <source>The file exists</source> + <translation>Le fichier existe</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="34"/> + <source>Source</source> + <translation>Source</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="50"/> + <source>Destination</source> + <translation>Destination</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="82"/> + <location filename="../../fileExistsDialog.ui" line="170"/> + <source>Size</source> + <translation>Taille</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="99"/> + <location filename="../../fileExistsDialog.ui" line="187"/> + <source>Modified</source> + <translation>ModifiĆ©</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="116"/> + <location filename="../../fileExistsDialog.ui" line="204"/> + <source>File name</source> + <translation>Nom de fichier</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="133"/> + <location filename="../../fileExistsDialog.ui" line="221"/> + <source>Folder</source> + <translation>Dossier</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="277"/> + <source>Suggest new &name</source> + <translation>SuggĆ©rer un &nouveau nom</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="288"/> + <source>&Always perform this action</source> + <translation>&Toujours faire cette action</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="346"/> + <location filename="../../fileExistsDialog.ui" line="349"/> + <source>Overwrite if modification date differs</source> + <translation>Ćcraser si les dates diffĆ©res</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="308"/> + <source>&Rename</source> + <translation>&Renommer</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="315"/> + <source>&Overwrite</source> + <translation>&Ćcraser</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="325"/> + <source>&Skip</source> + <translation>&Passer</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="332"/> + <source>&Cancel</source> + <translation>&Annuler</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="341"/> + <source>Overwrite if newer</source> + <translation>Ćcraser si plus rĆ©cent</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="354"/> + <location filename="../../fileExistsDialog.ui" line="357"/> + <source>Overwrite if older</source> + <translation>Ćcraser si plus vieux</translation> + </message> +</context> +<context> + <name>fileIsSameDialog</name> + <message> + <location filename="../../fileIsSameDialog.ui" line="40"/> + <source>Size</source> + <translation>Taille</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="110"/> + <source>Modified</source> + <translation>ModifiĆ©</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="70"/> + <source>File name</source> + <translation>Nom de fichier</translation> + </message> + <message> + <source>The source and destination is identical</source> + <translation type="obsolete">La source et la destination sont identique</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="14"/> + <source>The source and destination are same</source> + <translation>La source et la destination sont identique</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="90"/> + <source>Folder</source> + <translation>Dossier</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="159"/> + <source>Suggest new &name</source> + <translation>SuggĆ©rer un &nouveau nom</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="170"/> + <source>&Always perform this action</source> + <translation>&Toujours faire cette action</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="190"/> + <source>&Rename</source> + <translation>&Renommer</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="197"/> + <source>&Skip</source> + <translation>&Passer</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="204"/> + <source>&Cancel</source> + <translation>&Annuler</translation> + </message> +</context> +<context> + <name>folderExistsDialog</name> + <message> + <location filename="../../folderExistsDialog.ui" line="34"/> + <source>Source</source> + <translation>Source</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="50"/> + <source>Destination</source> + <translation>Destination</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="14"/> + <source>The source and destination is identical</source> + <translation>La source et la destination sont identique</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="82"/> + <location filename="../../folderExistsDialog.ui" line="150"/> + <source>Modified</source> + <translation>ModifiĆ©</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="99"/> + <location filename="../../folderExistsDialog.ui" line="160"/> + <source>Folder name</source> + <translation>Nom de rĆ©pertoire</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="116"/> + <location filename="../../folderExistsDialog.ui" line="184"/> + <source>Folder</source> + <translation>Dossier</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="227"/> + <source>Suggest new &name</source> + <translation>SuggĆ©rer un &nouveau nom</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="238"/> + <source>&Always perform this action</source> + <translation>&Toujours faire cette action</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="245"/> + <source>&Rename</source> + <translation>&Renommer</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="252"/> + <source>Merge</source> + <translation>Fusionner</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="259"/> + <source>Skip</source> + <translation>Passer</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="266"/> + <source>&Cancel</source> + <translation>&Annuler</translation> + </message> +</context> +</TS> diff --git a/plugins/CopyEngine/Ultracopier/Languages/hi/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/hi/translation.ts new file mode 100644 index 0000000..3362659 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/Languages/hi/translation.ts @@ -0,0 +1,1289 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<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="429"/> + <location filename="../../CopyEngine.cpp" line="451"/> + <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="462"/> + <location filename="../../CopyEngine.cpp" line="484"/> + <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="508"/> + <source>Destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="508"/> + <source>Use the actual destination "%1"?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="717"/> + <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="1047"/> + <location filename="../../CopyEngine.cpp" line="1050"/> + <location filename="../../CopyEngine.cpp" line="1055"/> + <location filename="../../CopyEngine.cpp" line="1059"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1048"/> + <location filename="../../CopyEngine.cpp" line="1052"/> + <location filename="../../CopyEngine.cpp" line="1056"/> + <location filename="../../CopyEngine.cpp" line="1060"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1051"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1053"/> + <location filename="../../CopyEngine.cpp" line="1065"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1057"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1061"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1062"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1063"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1064"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1067"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1068"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1069"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <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="412"/> + <location filename="../../CopyEngineFactory.cpp" line="415"/> + <location filename="../../CopyEngineFactory.cpp" line="420"/> + <location filename="../../CopyEngineFactory.cpp" line="424"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="413"/> + <location filename="../../CopyEngineFactory.cpp" line="417"/> + <location filename="../../CopyEngineFactory.cpp" line="421"/> + <location filename="../../CopyEngineFactory.cpp" line="425"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="416"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="418"/> + <location filename="../../CopyEngineFactory.cpp" line="430"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="422"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="426"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="427"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="428"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="429"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="432"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="433"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="434"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <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="131"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="141"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FileIsSameDialog</name> + <message> + <location filename="../../FileIsSameDialog.cpp" line="105"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="115"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <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="92"/> + <location filename="../../Filters.cpp" line="130"/> + <source>Raw text</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="95"/> + <location filename="../../Filters.cpp" line="133"/> + <source>Simplified regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="98"/> + <location filename="../../Filters.cpp" line="136"/> + <source>Perl's regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="106"/> + <location filename="../../Filters.cpp" line="144"/> + <source>Only on file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="109"/> + <location filename="../../Filters.cpp" line="147"/> + <source>Only on folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="115"/> + <location filename="../../Filters.cpp" line="153"/> + <location filename="../../Filters.cpp" line="215"/> + <location filename="../../Filters.cpp" line="254"/> + <source>Full match</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FolderExistsDialog</name> + <message> + <location filename="../../FolderExistsDialog.cpp" line="51"/> + <source>Folder already exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="116"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="126"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ListThread</name> + <message> + <location filename="../../ListThread.cpp" line="1447"/> + <location filename="../../ListThread.cpp" line="2369"/> + <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="1454"/> + <location filename="../../ListThread.cpp" line="2376"/> + <source>Unable to save the transfer list: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1470"/> + <source>Problem reading file, or file-size is 0</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1477"/> + <source>Wrong header: "%1"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1486"/> + <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="1495"/> + <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="1501"/> + <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="1557"/> + <source>Some errors have been found during the line parsing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1565"/> + <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="232"/> + <source>Unable to move the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="93"/> + <location filename="../../MkPath.cpp" line="275"/> + <source>Unable to remove</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ReadThread</name> + <message> + <location filename="../../ReadThread.cpp" line="55"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="184"/> + <source>Internal error reading the source file:block size out of range</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="192"/> + <location filename="../../ReadThread.cpp" line="408"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="233"/> + <location filename="../../ReadThread.cpp" line="456"/> + <source>File truncated during the read, possible data change</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>RenamingRules</name> + <message> + <location filename="../../RenamingRules.ui" line="26"/> + <source>First renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="32"/> + <source>%name% - copy</source> + <extracomment>%name% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="39"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> + <extracomment> should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="49"/> + <source>Second renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="55"/> + <source>%name% - copy (%number%)</source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="62"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="39"/> + <location filename="../../RenamingRules.cpp" line="62"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="43"/> + <location filename="../../RenamingRules.cpp" line="73"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="14"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ScanFileOrFolder</name> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="265"/> + <source>Blacklisted folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="327"/> + <location filename="../../ScanFileOrFolder.cpp" line="393"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="337"/> + <location filename="../../ScanFileOrFolder.cpp" line="403"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="441"/> + <source>This is not a folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="443"/> + <source>The folder does exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="445"/> + <source>The folder is not readable</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="456"/> + <source>Problem with name encoding</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TransferThread</name> + <message> + <location filename="../../TransferThread.cpp" line="235"/> + <location filename="../../TransferThread.cpp" line="663"/> + <location filename="../../TransferThread.cpp" line="735"/> + <location filename="../../TransferThread.cpp" line="1303"/> + <source>File not found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="336"/> + <location filename="../../TransferThread.cpp" line="353"/> + <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="408"/> + <location filename="../../TransferThread.cpp" line="431"/> + <source>Internal error: Already opening</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="572"/> + <source>Drive %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="574"/> + <source>Unknown folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="578"/> + <source>root</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="631"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="641"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="701"/> + <location filename="../../TransferThread.cpp" line="816"/> + <source>The source file doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="741"/> + <location filename="../../TransferThread.cpp" line="828"/> + <source>Unable to do the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="777"/> + <source>The source doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="822"/> + <source>Another file exists at same place</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1124"/> + <source>The checksums do not match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1213"/> + <source>Internal error: The destination is not closed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1227"/> + <source>Internal error: The size transfered doesn't match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1238"/> + <source>Internal error: The buffer is not empty</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1303"/> + <location filename="../../TransferThread.cpp" line="1321"/> + <location filename="../../TransferThread.cpp" line="1336"/> + <source>Unable to change the date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="219"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>WriteThread</name> + <message> + <location filename="../../WriteThread.cpp" line="80"/> + <source>Path resolution error (Empty path)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="268"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="671"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="696"/> + <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="35"/> + <source>Transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="44"/> + <source>Move the whole folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="51"/> + <source>Transfer the file rights</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="61"/> + <source>Keep the file date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="74"/> + <source>Autostart the transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="81"/> + <location filename="../../copyEngineOptions.ui" line="101"/> + <source>Less performance if checked</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="104"/> + <source>Follow the strict order</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="130"/> + <source>Error and collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="136"/> + <source>When folder error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="146"/> + <source>When file error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="172"/> + <source>When file collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="232"/> + <source>When folder collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="263"/> + <source>Check if destination folder exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="270"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="290"/> + <source>Delete partially transferred files</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="303"/> + <source>Rename the original destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="334"/> + <source>Control</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="340"/> + <source>Checksum</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="349"/> + <source>Only after error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="356"/> + <source>Ignore if impossible</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="373"/> + <source>Verify checksums</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="405"/> + <source>Performance</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="411"/> + <source>Parallel buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="418"/> + <location filename="../../copyEngineOptions.ui" line="431"/> + <location filename="../../copyEngineOptions.ui" line="444"/> + <location filename="../../copyEngineOptions.ui" line="481"/> + <location filename="../../copyEngineOptions.ui" line="550"/> + <source>KB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="460"/> + <source>Block size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="467"/> + <source>Sequential buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="474"/> + <source>Enable OS buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="497"/> + <source>OS buffer only if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="504"/> + <source>Transfer algorithm</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="543"/> + <source>Parallelize if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="573"/> + <source>Inode threads</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="580"/> + <location filename="../../copyEngineOptions.ui" line="590"/> + <source>More cpu, but better organisation on the disk</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="593"/> + <source>Order the list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="609"/> + <source>Misc</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="615"/> + <source>Check the disk space</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="625"/> + <source>Use this folder when destination is not set</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="637"/> + <source>Browse</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="659"/> + <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/CopyEngine/Ultracopier/Languages/hu/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/hu/translation.ts new file mode 100644 index 0000000..beff862 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/Languages/hu/translation.ts @@ -0,0 +1,1297 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="hu"> +<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>Nem tĆ”mogatott ezen a platformon</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="40"/> + <source>Last modified date is wrong</source> + <translation>A mĆ³dosĆtĆ”s utolsĆ³ dĆ”tuma hibĆ”s</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="71"/> + <source>Last access date is wrong</source> + <translation>A hozzĆ”fĆ©rĆ©s utolsĆ³ dĆ”tuma hibĆ”sa</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="121"/> + <source>Unknown error: %1</source> + <translation>Ismeretlen hiba: %1</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="133"/> + <source>Path conversion error</source> + <translation>Ćtvonal konvertĆ”lĆ”si hiba</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="187"/> + <source>Unknown error</source> + <translation>Ismeretlen hiba</translation> + </message> +</context> +<context> + <name>CopyEngine</name> + <message> + <location filename="../../CopyEngine.cpp" line="429"/> + <location filename="../../CopyEngine.cpp" line="451"/> + <source>The engine is forced to move, you can't copy with it</source> + <translation>A motort mozgatĆ”sra kĆ©nyszerĆtik, nem mĆ”solhatsz vele</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="462"/> + <location filename="../../CopyEngine.cpp" line="484"/> + <source>The engine is forced to copy, you can't move with it</source> + <translation>A motort mĆ”solĆ”sra kĆ©nyszerĆtik, nem mozgathatsz vele</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="508"/> + <source>Destination</source> + <translation>CĆ©l</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="508"/> + <source>Use the actual destination "%1"?</source> + <translation>HasznĆ”lja a jelenlegi cĆ©lt: "%1"?</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="717"/> + <source>The mode has been forced previously. This is an internal error, please report it</source> + <translation>Ezt a mĆ³dot mĆ”r korĆ”bban kĆ©nyszerĆtettĆ©k. BelsÅ hiba tƶrtĆ©nt, kĆ©rlek jelentsd be</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1047"/> + <location filename="../../CopyEngine.cpp" line="1050"/> + <location filename="../../CopyEngine.cpp" line="1055"/> + <location filename="../../CopyEngine.cpp" line="1059"/> + <source>Ask</source> + <translation>KĆ©rdezzen rĆ”</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1048"/> + <location filename="../../CopyEngine.cpp" line="1052"/> + <location filename="../../CopyEngine.cpp" line="1056"/> + <location filename="../../CopyEngine.cpp" line="1060"/> + <source>Skip</source> + <translation>Kihagy</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1051"/> + <source>Merge</source> + <translation>Ćsszeolvaszt</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1053"/> + <location filename="../../CopyEngine.cpp" line="1065"/> + <source>Rename</source> + <translation>Nevezze Ć”t</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1057"/> + <source>Put at the end</source> + <translation>Helyezze a vĆ©gĆ©re</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1061"/> + <source>Overwrite</source> + <translation>FelĆ¼lĆr</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1062"/> + <source>Overwrite if different</source> + <translation>FelĆ¼lĆr, ha kĆ¼lƶnbƶzik</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1063"/> + <source>Overwrite if newer</source> + <translation>FelĆ¼lĆr, ha Ćŗjabb</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1064"/> + <source>Overwrite if older</source> + <translation>FelĆ¼lĆr, ha rĆ©gebbi</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1067"/> + <source>Automatic</source> + <translation>Automatikus</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1068"/> + <source>Sequential</source> + <translation>SzekvenciĆ”lis</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1069"/> + <source>Parallel</source> + <translation>PĆ”rhuzamos</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <source>Options error</source> + <translation>BeĆ”llĆtĆ”si hiba</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation>A beĆ”llĆtĆ”si motor nincs betƶltve. A szűrÅk elĆ©rĆ©se nem lehetsĆ©ges</translation> + </message> +</context> +<context> + <name>CopyEngineFactory</name> + <message> + <location filename="../../CopyEngineFactory.cpp" line="412"/> + <location filename="../../CopyEngineFactory.cpp" line="415"/> + <location filename="../../CopyEngineFactory.cpp" line="420"/> + <location filename="../../CopyEngineFactory.cpp" line="424"/> + <source>Ask</source> + <translation>KĆ©rdezzen rĆ”</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="413"/> + <location filename="../../CopyEngineFactory.cpp" line="417"/> + <location filename="../../CopyEngineFactory.cpp" line="421"/> + <location filename="../../CopyEngineFactory.cpp" line="425"/> + <source>Skip</source> + <translation>Kihagy</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="416"/> + <source>Merge</source> + <translation>Ćsszeolvaszt</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="418"/> + <location filename="../../CopyEngineFactory.cpp" line="430"/> + <source>Rename</source> + <translation>Nevezze Ć”t</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="422"/> + <source>Put at the end</source> + <translation>Helyezze a vĆ©gĆ©re</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="426"/> + <source>Overwrite</source> + <translation>FelĆ¼lĆr</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="427"/> + <source>Overwrite if different</source> + <translation>FelĆ¼lĆr, ha kĆ¼lƶnbƶzik</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="428"/> + <source>Overwrite if newer</source> + <translation>FelĆ¼lĆr, ha Ćŗjabb</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="429"/> + <source>Overwrite if older</source> + <translation>FelĆ¼lĆr, ha rĆ©gebbi</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="432"/> + <source>Automatic</source> + <translation>Automatikus</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="433"/> + <source>Sequential</source> + <translation>SzekvenciĆ”lis</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="434"/> + <source>Parallel</source> + <translation>PĆ”rhuzamos</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <source>Options error</source> + <translation>BeĆ”llĆtĆ”si hiba</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation>A beĆ”llĆtĆ”si motor nincs betƶltve. A szűrÅk elĆ©rĆ©se nem lehetsĆ©ges</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <source>Options engine is not loaded, can't access to the filters</source> + <translation>A beĆ”llĆtĆ”si motor nincs betƶltve, a szűrÅk elĆ©rĆ©se nem lehetsĆ©ges</translation> + </message> +</context> +<context> + <name>DiskSpace</name> + <message> + <location filename="../../DiskSpace.ui" line="14"/> + <source>Disk space</source> + <translation>LemezterĆ¼let</translation> + </message> + <message> + <location filename="../../DiskSpace.ui" line="24"/> + <source>You need more space on this drive to finish this transfer</source> + <translation>Tƶbb szabad helyre van szĆ¼ksĆ©ged ezen a lemezen az Ć”tvitel befejezĆ©sĆ©hez</translation> + </message> + <message> + <location filename="../../DiskSpace.ui" line="49"/> + <source>Continue</source> + <translation>FolytatĆ”s</translation> + </message> + <message> + <location filename="../../DiskSpace.ui" line="56"/> + <source>Cancel</source> + <translation>MĆ©gse</translation> + </message> + <message> + <location filename="../../DiskSpace.cpp" line="23"/> + <source>Drives %1 have %2 available but need %3</source> + <translation>%1 meghajtĆ³n %2 hely van, de %3 szĆ¼ksĆ©ges</translation> + </message> +</context> +<context> + <name>FileErrorDialog</name> + <message> + <location filename="../../FileErrorDialog.cpp" line="54"/> + <source>Error on folder</source> + <translation>Hiba a mappĆ”val</translation> + </message> + <message> + <location filename="../../FileErrorDialog.cpp" line="57"/> + <source>Folder name</source> + <translation>Mappa neve</translation> + </message> +</context> +<context> + <name>FileExistsDialog</name> + <message> + <location filename="../../FileExistsDialog.cpp" line="131"/> + <source>%1 - copy</source> + <translation>%1 - mĆ”solĆ”s</translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="141"/> + <source>%1 - copy (%2)</source> + <translation>%1 - mĆ”solĆ”s (%2)</translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Error</source> + <translation>Hiba</translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Try rename with using special characters</source> + <translation>ĆtnevezĆ©s speciĆ”lis karakterek hasznĆ”latĆ”val</translation> + </message> +</context> +<context> + <name>FileIsSameDialog</name> + <message> + <location filename="../../FileIsSameDialog.cpp" line="105"/> + <source>%1 - copy</source> + <translation>%1 - mĆ”solĆ”s</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="115"/> + <source>%1 - copy (%2)</source> + <translation>%1 - mĆ”solĆ”s (%2)</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <source>Error</source> + <translation>Hiba</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <source>Try rename with using special characters</source> + <translation>ĆtnevezĆ©s speciĆ”lis karakterek hasznĆ”latĆ”val</translation> + </message> +</context> +<context> + <name>FilterRules</name> + <message> + <location filename="../../FilterRules.ui" line="17"/> + <source>Filters dialog</source> + <translation>SzűrÅk Ć¼zenet</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="33"/> + <source>Search:</source> + <translation>KeresĆ©s:</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="43"/> + <source>Search type:</source> + <translation>KeresĆ©s tĆpusa:</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="51"/> + <source>Raw text</source> + <translation>Nyers szƶveg</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="56"/> + <source>Simplified regex</source> + <translation>EgyszerűsĆtett regex</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="61"/> + <source>Perl's regex</source> + <translation>Perl regex</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="69"/> + <source>Apply on:</source> + <translation>AlkalmazĆ”s ezen:</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="77"/> + <source>File</source> + <translation>FĆ”jl</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="82"/> + <source>Folder</source> + <translation>Mappa</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="87"/> + <source>File and folder</source> + <translation>FĆ”jl Ć©s mappa</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="95"/> + <source>Whole string must match</source> + <translation>A teljes szƶvegnek egyeznie kell</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="125"/> + <source>The test string matches with the regex</source> + <translation>A tesztszƶveg megegyezik a regexszel</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="102"/> + <source>Checking</source> + <translation>EllenÅrzĆ©s</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="108"/> + <source>The regex is valid</source> + <translation>A regex Ć©rvĆ©nyes</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="115"/> + <source>Test string:</source> + <translation>PrĆ³baszƶveg:</translation> + </message> +</context> +<context> + <name>Filters</name> + <message> + <location filename="../../Filters.ui" line="14"/> + <source>Filters</source> + <translation>SzűrÅk</translation> + </message> + <message> + <location filename="../../Filters.ui" line="30"/> + <source>Exclusion filters</source> + <translation>KizĆ”rĆ³ szűrÅk</translation> + </message> + <message> + <location filename="../../Filters.ui" line="93"/> + <source>Inclusion filters</source> + <translation>HasznĆ”lt szűrÅk</translation> + </message> + <message> + <location filename="../../Filters.ui" line="105"/> + <source>None = Include all</source> + <translation>Nincs = Mindet hasznĆ”l</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="92"/> + <location filename="../../Filters.cpp" line="130"/> + <source>Raw text</source> + <translation>Nyers szƶveg</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="95"/> + <location filename="../../Filters.cpp" line="133"/> + <source>Simplified regex</source> + <translation>EgyszerűsĆtett regex</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="98"/> + <location filename="../../Filters.cpp" line="136"/> + <source>Perl's regex</source> + <translation>Perl regex</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="106"/> + <location filename="../../Filters.cpp" line="144"/> + <source>Only on file</source> + <translation>Csak fĆ”jlon</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="109"/> + <location filename="../../Filters.cpp" line="147"/> + <source>Only on folder</source> + <translation>Csak mappĆ”n</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="115"/> + <location filename="../../Filters.cpp" line="153"/> + <location filename="../../Filters.cpp" line="215"/> + <location filename="../../Filters.cpp" line="254"/> + <source>Full match</source> + <translation>Teljes egyezĆ©s</translation> + </message> +</context> +<context> + <name>FolderExistsDialog</name> + <message> + <location filename="../../FolderExistsDialog.cpp" line="51"/> + <source>Folder already exists</source> + <translation>Mappa mĆ”r lĆ©tezik</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="116"/> + <source>%1 - copy</source> + <translation>%1 - mĆ”solĆ”s</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="126"/> + <source>%1 - copy (%2)</source> + <translation>%1 - mĆ”solĆ”s (%2)</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Error</source> + <translation>Hiba</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Try rename with using special characters</source> + <translation>ĆtnevezĆ©s speciĆ”lis karakterek hasznĆ”latĆ”val</translation> + </message> +</context> +<context> + <name>ListThread</name> + <message> + <location filename="../../ListThread.cpp" line="1447"/> + <location filename="../../ListThread.cpp" line="2369"/> + <source>Unable do to move or copy item into wrong forced mode: %1</source> + <translation>Elem mĆ”solĆ”sa vagy mozgatĆ”s nem lehetsĆ©ges a hibĆ”s kĆ©nyszerĆtett mĆ³dban: %1</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1454"/> + <location filename="../../ListThread.cpp" line="2376"/> + <source>Unable to save the transfer list: %1</source> + <translation>Ćtviteli lista mentĆ©se nem lehetsĆ©ges: %1</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1470"/> + <source>Problem reading file, or file-size is 0</source> + <translation>Hiba a fĆ”jl olvasĆ”sĆ”nĆ”l vagy a fĆ”lmĆ©ret 0</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1477"/> + <source>Wrong header: "%1"</source> + <translation>HibĆ”s fejlĆ©c: "%1"</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1486"/> + <source>The transfer list is in mixed mode, but this instance is not in this mode</source> + <translation>Az Ć”tviteli lista kevert mĆ³dban van, de ez a pĆ©ldĆ”ny nincs</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1495"/> + <source>The transfer list is in copy mode, but this instance is not in this mode</source> + <translation>Az Ć”tviteli lista mĆ”solĆ”s mĆ³dban van, de ez a pĆ©ldĆ”ny nincs</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1501"/> + <source>The transfer list is in move mode, but this instance is not in this mode</source> + <translation>Az Ć”tviteli lista mozgatĆ”s mĆ³dban van, de ez a pĆ©ldĆ”ny nincs</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1557"/> + <source>Some errors have been found during the line parsing</source> + <translation>NĆ©hĆ”ny hiba tƶrtĆ©nt a sorelemzĆ©s sorĆ”n</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1565"/> + <source>Unable to open the transfer list: %1</source> + <translation>Az Ć”tviteli lista megnyitĆ”sa nem lehetsĆ©ges: %1</translation> + </message> +</context> +<context> + <name>MkPath</name> + <message> + <location filename="../../MkPath.cpp" line="142"/> + <source>Unable to create the folder</source> + <translation>Mappa lĆ©trehozĆ”sa nem lehetsĆ©ges</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="232"/> + <source>Unable to move the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unable to set the access-right</source> + <translation type="obsolete">Jogok beĆ”llĆtĆ”sa nem lehetsĆ©ges</translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="93"/> + <location filename="../../MkPath.cpp" line="275"/> + <source>Unable to remove</source> + <translation>EltĆ”volĆtĆ”s nem lehetsĆ©ges</translation> + </message> +</context> +<context> + <name>ReadThread</name> + <message> + <location filename="../../ReadThread.cpp" line="55"/> + <source>Internal error, please report it!</source> + <translation>BelsÅ hiba, kĆ©rlek jelentsd!</translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="184"/> + <source>Internal error reading the source file:block size out of range</source> + <translation>BelsÅ hiba tƶrtĆ©nt a forrĆ”sfĆ”jl olvasĆ”sakor: a blokkmĆ©ret tartomĆ”nyon kĆvĆ¼li</translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="192"/> + <location filename="../../ReadThread.cpp" line="408"/> + <source>Unable to read the source file: </source> + <translation>A forrĆ”sfĆ”jl olvasĆ”sa nem lehetsĆ©ges:</translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="233"/> + <location filename="../../ReadThread.cpp" line="456"/> + <source>File truncated during the read, possible data change</source> + <translation>A fĆ”jl olvasĆ”s sorĆ”n megcsonkult, valĆ³szĆnűleg adatvĆ”ltozĆ”s miatt</translation> + </message> +</context> +<context> + <name>RenamingRules</name> + <message> + <location filename="../../RenamingRules.ui" line="14"/> + <source>Renaming rules</source> + <translation>ĆtnevezĆ©si szabĆ”lyok</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="26"/> + <source>First renaming</source> + <translation>ElsÅ Ć”tnevezĆ©s</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="32"/> + <source>%name% - copy</source> + <extracomment>%name% should not be translated</extracomment> + <translation>%name% - mĆ”solĆ”s</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="39"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> + <extracomment> should not be translated</extracomment> + <translation><html><head/><body><p>VĆ”ltozĆ³k: <span style=" font-weight:600;">%name%</span> az eredeti fĆ”jlnĆ©vhez</p></body></html></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="49"/> + <source>Second renaming</source> + <translation>MĆ”sodik Ć”tnevezĆ©s</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="55"/> + <source>%name% - copy (%number%)</source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation>%name% - mĆ”solĆ”s (%number%)</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="62"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation><html><head/><body><p>VĆ”ltozĆ³k: <span style=" font-weight:600;">%name%</span> az eredeti fĆ”jlnĆ©vhez</p><p><span style=" font-weight:600;">%number%</span> az extra szĆ”mhoz</p></body></html></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="39"/> + <location filename="../../RenamingRules.cpp" line="62"/> + <source>%1 - copy</source> + <translation>%1 - mĆ”solĆ”s</translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="43"/> + <location filename="../../RenamingRules.cpp" line="73"/> + <source>%1 - copy (%2)</source> + <translation>%1 - mĆ”solĆ”s (%2)</translation> + </message> +</context> +<context> + <name>ScanFileOrFolder</name> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="265"/> + <source>Blacklisted folder</source> + <translation>FeketelistĆ”s mappa</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="327"/> + <location filename="../../ScanFileOrFolder.cpp" line="393"/> + <source>%1 - copy</source> + <translation>%1 - mĆ”solĆ”s</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="337"/> + <location filename="../../ScanFileOrFolder.cpp" line="403"/> + <source>%1 - copy (%2)</source> + <translation>%1 - mĆ”solĆ”s (%2)</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="441"/> + <source>This is not a folder</source> + <translation>Ez nem mappa</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="443"/> + <source>The folder does exists</source> + <translation>A mappa lĆ©tezik</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="445"/> + <source>The folder is not readable</source> + <translation>A mappa nem olvashatĆ³</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="456"/> + <source>Problem with name encoding</source> + <translation>ProblĆ©ma a nĆ©vkĆ³dolĆ”ssal</translation> + </message> +</context> +<context> + <name>TransferThread</name> + <message> + <location filename="../../TransferThread.cpp" line="235"/> + <location filename="../../TransferThread.cpp" line="663"/> + <location filename="../../TransferThread.cpp" line="735"/> + <location filename="../../TransferThread.cpp" line="1303"/> + <source>File not found</source> + <translation>FĆ”jl nem talĆ”lhatĆ³</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="572"/> + <source>Drive %1</source> + <translation type="unfinished">%1 meghajtĆ³</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="574"/> + <source>Unknown folder</source> + <translation type="unfinished">Ismeretlen mappa</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="578"/> + <source>root</source> + <translation type="unfinished">gyƶkĆ©r</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="631"/> + <source>%1 - copy</source> + <translation type="unfinished">%1 - mĆ”solĆ”s</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="641"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished">%1 - mĆ”solĆ”s (%2)</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="777"/> + <source>The source doesn't exist</source> + <translation type="unfinished">A forrĆ”s nem lĆ©tezik</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="741"/> + <location filename="../../TransferThread.cpp" line="828"/> + <source>Unable to do the folder</source> + <translation type="unfinished">Mappaművelet nem lehetsĆ©ges</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="219"/> + <source>Try rename with using special characters</source> + <translation>ĆtnevezĆ©s speciĆ”lis karakterek hasznĆ”latĆ”val</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="336"/> + <location filename="../../TransferThread.cpp" line="353"/> + <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="408"/> + <location filename="../../TransferThread.cpp" line="431"/> + <source>Internal error: Already opening</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="701"/> + <location filename="../../TransferThread.cpp" line="816"/> + <source>The source file doesn't exist</source> + <translation type="unfinished">A forrĆ”sfĆ”jl nem lĆ©tezik</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="822"/> + <source>Another file exists at same place</source> + <translation type="unfinished">Egy mĆ”sik fĆ”jl lĆ©tezik ugyanazon a helyen</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1124"/> + <source>The checksums do not match</source> + <translation type="unfinished">A checksumok nem egyeznek meg</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1213"/> + <source>Internal error: The destination is not closed</source> + <translation type="unfinished">BelsÅ hiba: a cĆ©l nincs bezĆ”rva</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1227"/> + <source>Internal error: The size transfered doesn't match</source> + <translation type="unfinished">BelsÅ hiba: az Ć”tvitt mĆ©ret nem egyezik meg</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1238"/> + <source>Internal error: The buffer is not empty</source> + <translation type="unfinished">BelsÅ hiba: a puffer nem Ć¼res</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1303"/> + <location filename="../../TransferThread.cpp" line="1321"/> + <location filename="../../TransferThread.cpp" line="1336"/> + <source>Unable to change the date</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>WriteThread</name> + <message> + <location filename="../../WriteThread.cpp" line="80"/> + <source>Path resolution error (Empty path)</source> + <translation>Ćtvonal feloldĆ”si hiba (Ćres Ćŗtvonal)</translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="268"/> + <source>Internal error, please report it!</source> + <translation>BelsÅ hiba, kĆ©rlek jelentsd!</translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="671"/> + <source>Unable to read the source file: </source> + <translation>A forrĆ”sfĆ”jl olvasĆ”sa nem lehetsĆ©ges:</translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="696"/> + <source>File truncated during read, possible data change</source> + <translation>FĆ”jl megsĆ©rĆ¼lt az olvasĆ”s kƶzben, valĆ³szĆnűleg adatvĆ”ltozĆ”s</translation> + </message> +</context> +<context> + <name>copyEngineOptions</name> + <message> + <location filename="../../copyEngineOptions.ui" line="35"/> + <source>Transfer</source> + <translation>Ćtvitel</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="44"/> + <source>Move the whole folder</source> + <translation>Mozgassa Ć”t az egĆ©sz mappĆ”t</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="51"/> + <source>Transfer the file rights</source> + <translation>FĆ”jljogok Ć”tadĆ”sa</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="61"/> + <source>Keep the file date</source> + <translation>FĆ”jl dĆ”tumĆ”nak megtartĆ”sa</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="74"/> + <source>Autostart the transfer</source> + <translation>Ćtvitel automatikus indĆtĆ”sa</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="81"/> + <location filename="../../copyEngineOptions.ui" line="101"/> + <source>Less performance if checked</source> + <translation>Kisebb teljesĆtmĆ©ny, ha be van jelƶlve</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="104"/> + <source>Follow the strict order</source> + <translation>Kƶvesse a szigorĆŗ sorrendet</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="130"/> + <source>Error and collision</source> + <translation>Hiba Ć©s Ć¼tkƶzĆ©s</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="136"/> + <source>When folder error</source> + <translation>Mappa hiba esetĆ©n</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="146"/> + <source>When file error</source> + <translation>FĆ”jl hiba esetĆ©n</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="172"/> + <source>When file collision</source> + <translation>FĆ”jl Ć¼tkƶzĆ©s esetĆ©n</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="232"/> + <source>When folder collision</source> + <translation>Mappa Ć¼tkƶzĆ©s esetĆ©n</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="263"/> + <source>Check if destination folder exists</source> + <translation>CĆ©lmappa lĆ©tezĆ©sĆ©nek ellenÅrzĆ©se</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="270"/> + <source>Renaming rules</source> + <translation>ĆtnevezĆ©si szabĆ”lyok</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="290"/> + <source>Delete partially transferred files</source> + <translation>RĆ©szben Ć”tvitt fĆ”jlok tƶrlĆ©se</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="303"/> + <source>Rename the original destination</source> + <translation>Eredeti cĆ©l Ć”tnevezĆ©se</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="334"/> + <source>Control</source> + <translation>IrĆ”nyĆtĆ”s</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="340"/> + <source>Checksum</source> + <translation>Checksum</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="349"/> + <source>Only after error</source> + <translation>Csak hiba utĆ”n</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="356"/> + <source>Ignore if impossible</source> + <translation>Hagyja ki, ha nem lehetsĆ©ges</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="373"/> + <source>Verify checksums</source> + <translation>Checksumok ellenÅrzĆ©se</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="405"/> + <source>Performance</source> + <translation>TeljesĆtmĆ©ny</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="411"/> + <source>Parallel buffer</source> + <translation>PĆ”rhuzamos puffer</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="418"/> + <location filename="../../copyEngineOptions.ui" line="431"/> + <location filename="../../copyEngineOptions.ui" line="444"/> + <location filename="../../copyEngineOptions.ui" line="481"/> + <location filename="../../copyEngineOptions.ui" line="550"/> + <source>KB</source> + <translation>KB</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="460"/> + <source>Block size</source> + <translation>BlokkmĆ©ret</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="467"/> + <source>Sequential buffer</source> + <translation>SzekvenciĆ”lis puffer</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="474"/> + <source>Enable OS buffer</source> + <translation>OS puffer engedĆ©lyezĆ©se</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="497"/> + <source>OS buffer only if smaller than</source> + <translation>OS buffer csak akkor, ha kisebb mint</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="504"/> + <source>Transfer algorithm</source> + <translation>Ćtviteli algoritmus</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="543"/> + <source>Parallelize if smaller than</source> + <translation>PĆ”rhuzamosĆtĆ”s, ha kisebb mint</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="573"/> + <source>Inode threads</source> + <translation>Inode szĆ”lak</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="580"/> + <location filename="../../copyEngineOptions.ui" line="590"/> + <source>More cpu, but better organisation on the disk</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="593"/> + <source>Order the list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="609"/> + <source>Misc</source> + <translation>EgyĆ©b</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="615"/> + <source>Check the disk space</source> + <translation>LemezterĆ¼let ellenÅrzĆ©se</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="625"/> + <source>Use this folder when destination is not set</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Use this folder when destination is empty</source> + <translation type="obsolete">HasznĆ”lja ezt a mappĆ”t, ha a cĆ©l Ć¼res</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="637"/> + <source>Browse</source> + <translation>TallĆ³zĆ”s</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="659"/> + <source>Filters</source> + <translation>SzűrÅk</translation> + </message> +</context> +<context> + <name>fileErrorDialog</name> + <message> + <location filename="../../fileErrorDialog.ui" line="14"/> + <source>Error with file</source> + <translation>Hiba a fĆ”jllal</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="20"/> + <source>Error</source> + <translation>Hiba</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="59"/> + <source>Size</source> + <translation>MĆ©ret</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="76"/> + <source>Modified</source> + <translation>MĆ³dosĆtva</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="93"/> + <source>File name</source> + <translation>FĆ”jlnĆ©v</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="110"/> + <source>Destination</source> + <translation>CĆ©l</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="127"/> + <source>Folder</source> + <translation>Mappa</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="173"/> + <source>&Always perform this action</source> + <translation>&Mindig hajtsa vĆ©gre ezt a műveletet</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="193"/> + <source>Try in with elevated privileges</source> + <translation>PrĆ³bĆ”lja meg emelt jogosultsĆ”ggal</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="200"/> + <source>Put to bottom</source> + <translation>Tegye legalulra</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="207"/> + <source>Retry</source> + <translation>Ćjra</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="214"/> + <source>&Skip</source> + <translation>&Kihagy</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="221"/> + <source>&Cancel</source> + <translation>M&Ć©gse</translation> + </message> +</context> +<context> + <name>fileExistsDialog</name> + <message> + <location filename="../../fileExistsDialog.ui" line="14"/> + <source>The file exists</source> + <translation>A fĆ”jl lĆ©tezik</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="34"/> + <source>Source</source> + <translation>ForrĆ”s</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="50"/> + <source>Destination</source> + <translation>CĆ©l</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="82"/> + <location filename="../../fileExistsDialog.ui" line="170"/> + <source>Size</source> + <translation>MĆ©ret</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="99"/> + <location filename="../../fileExistsDialog.ui" line="187"/> + <source>Modified</source> + <translation>MĆ³dosĆtva</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="116"/> + <location filename="../../fileExistsDialog.ui" line="204"/> + <source>File name</source> + <translation>FĆ”jlnĆ©v</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="133"/> + <location filename="../../fileExistsDialog.ui" line="221"/> + <source>Folder</source> + <translation>Mappa</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="277"/> + <source>Suggest new &name</source> + <translation>Ćj &nĆ©v ajĆ”nlĆ”sa</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="288"/> + <source>&Always perform this action</source> + <translation>&Mindig hajtsa vĆ©gre ezt a műveletet</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="346"/> + <location filename="../../fileExistsDialog.ui" line="349"/> + <source>Overwrite if modification date differs</source> + <translation>FelĆ¼lĆr, ha a mĆ³dosĆtĆ”s dĆ”tuma kĆ¼lƶnbƶzik</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="354"/> + <location filename="../../fileExistsDialog.ui" line="357"/> + <source>Overwrite if older</source> + <translation>FelĆ¼lĆr, ha rĆ©gebbi</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="308"/> + <source>&Rename</source> + <translation>&Ćtnevez</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="315"/> + <source>&Overwrite</source> + <translation>&FelĆ¼lĆr</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="325"/> + <source>&Skip</source> + <translation>&Kihagy</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="332"/> + <source>&Cancel</source> + <translation>&MĆ©gse</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="341"/> + <source>Overwrite if newer</source> + <translation>FelĆ¼lĆr, ha Ćŗjabb</translation> + </message> +</context> +<context> + <name>fileIsSameDialog</name> + <message> + <location filename="../../fileIsSameDialog.ui" line="40"/> + <source>Size</source> + <translation>MĆ©ret</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="110"/> + <source>Modified</source> + <translation>MĆ³dosĆtva</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="70"/> + <source>File name</source> + <translation>FĆ”jlnĆ©v</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="14"/> + <source>The source and destination are same</source> + <translation>A forrĆ”s Ć©s a cĆ©l megegyezik</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="90"/> + <source>Folder</source> + <translation>Mappa</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="159"/> + <source>Suggest new &name</source> + <translation>Ćj &nĆ©v javasolĆ”sa</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="170"/> + <source>&Always perform this action</source> + <translation>&Mindig hajtsa vĆ©gre ezt a műveletet</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="190"/> + <source>&Rename</source> + <translation>&Ćtnevez</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="197"/> + <source>&Skip</source> + <translation>&Kihagy</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="204"/> + <source>&Cancel</source> + <translation>M&Ć©gse</translation> + </message> +</context> +<context> + <name>folderExistsDialog</name> + <message> + <location filename="../../folderExistsDialog.ui" line="34"/> + <source>Source</source> + <translation>ForrĆ”s</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="50"/> + <source>Destination</source> + <translation>CĆ©l</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="82"/> + <location filename="../../folderExistsDialog.ui" line="150"/> + <source>Modified</source> + <translation>MĆ³dosĆtva</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="99"/> + <location filename="../../folderExistsDialog.ui" line="160"/> + <source>Folder name</source> + <translation>Mappa neve</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="227"/> + <source>Suggest new &name</source> + <translation>Ćj &nĆ©v javasolĆ”sa</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="14"/> + <source>The source and destination is identical</source> + <translation>A forrĆ”s Ć©s a cĆ©l megegyezik</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="116"/> + <location filename="../../folderExistsDialog.ui" line="184"/> + <source>Folder</source> + <translation>Mappa</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="238"/> + <source>&Always perform this action</source> + <translation>&Mindig hajtsa vĆ©gre ezt a műveletet</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="245"/> + <source>&Rename</source> + <translation>&Ćtnevez</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="252"/> + <source>Merge</source> + <translation>Ćsszeolvaszt</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="259"/> + <source>Skip</source> + <translation>Kihagy</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="266"/> + <source>&Cancel</source> + <translation>M&Ć©gse</translation> + </message> +</context> +</TS> diff --git a/plugins/CopyEngine/Ultracopier/Languages/id/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/id/translation.ts new file mode 100644 index 0000000..3362659 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/Languages/id/translation.ts @@ -0,0 +1,1289 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<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="429"/> + <location filename="../../CopyEngine.cpp" line="451"/> + <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="462"/> + <location filename="../../CopyEngine.cpp" line="484"/> + <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="508"/> + <source>Destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="508"/> + <source>Use the actual destination "%1"?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="717"/> + <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="1047"/> + <location filename="../../CopyEngine.cpp" line="1050"/> + <location filename="../../CopyEngine.cpp" line="1055"/> + <location filename="../../CopyEngine.cpp" line="1059"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1048"/> + <location filename="../../CopyEngine.cpp" line="1052"/> + <location filename="../../CopyEngine.cpp" line="1056"/> + <location filename="../../CopyEngine.cpp" line="1060"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1051"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1053"/> + <location filename="../../CopyEngine.cpp" line="1065"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1057"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1061"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1062"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1063"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1064"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1067"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1068"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1069"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <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="412"/> + <location filename="../../CopyEngineFactory.cpp" line="415"/> + <location filename="../../CopyEngineFactory.cpp" line="420"/> + <location filename="../../CopyEngineFactory.cpp" line="424"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="413"/> + <location filename="../../CopyEngineFactory.cpp" line="417"/> + <location filename="../../CopyEngineFactory.cpp" line="421"/> + <location filename="../../CopyEngineFactory.cpp" line="425"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="416"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="418"/> + <location filename="../../CopyEngineFactory.cpp" line="430"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="422"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="426"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="427"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="428"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="429"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="432"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="433"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="434"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <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="131"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="141"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FileIsSameDialog</name> + <message> + <location filename="../../FileIsSameDialog.cpp" line="105"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="115"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <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="92"/> + <location filename="../../Filters.cpp" line="130"/> + <source>Raw text</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="95"/> + <location filename="../../Filters.cpp" line="133"/> + <source>Simplified regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="98"/> + <location filename="../../Filters.cpp" line="136"/> + <source>Perl's regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="106"/> + <location filename="../../Filters.cpp" line="144"/> + <source>Only on file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="109"/> + <location filename="../../Filters.cpp" line="147"/> + <source>Only on folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="115"/> + <location filename="../../Filters.cpp" line="153"/> + <location filename="../../Filters.cpp" line="215"/> + <location filename="../../Filters.cpp" line="254"/> + <source>Full match</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FolderExistsDialog</name> + <message> + <location filename="../../FolderExistsDialog.cpp" line="51"/> + <source>Folder already exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="116"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="126"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ListThread</name> + <message> + <location filename="../../ListThread.cpp" line="1447"/> + <location filename="../../ListThread.cpp" line="2369"/> + <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="1454"/> + <location filename="../../ListThread.cpp" line="2376"/> + <source>Unable to save the transfer list: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1470"/> + <source>Problem reading file, or file-size is 0</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1477"/> + <source>Wrong header: "%1"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1486"/> + <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="1495"/> + <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="1501"/> + <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="1557"/> + <source>Some errors have been found during the line parsing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1565"/> + <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="232"/> + <source>Unable to move the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="93"/> + <location filename="../../MkPath.cpp" line="275"/> + <source>Unable to remove</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ReadThread</name> + <message> + <location filename="../../ReadThread.cpp" line="55"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="184"/> + <source>Internal error reading the source file:block size out of range</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="192"/> + <location filename="../../ReadThread.cpp" line="408"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="233"/> + <location filename="../../ReadThread.cpp" line="456"/> + <source>File truncated during the read, possible data change</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>RenamingRules</name> + <message> + <location filename="../../RenamingRules.ui" line="26"/> + <source>First renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="32"/> + <source>%name% - copy</source> + <extracomment>%name% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="39"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> + <extracomment> should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="49"/> + <source>Second renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="55"/> + <source>%name% - copy (%number%)</source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="62"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="39"/> + <location filename="../../RenamingRules.cpp" line="62"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="43"/> + <location filename="../../RenamingRules.cpp" line="73"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="14"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ScanFileOrFolder</name> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="265"/> + <source>Blacklisted folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="327"/> + <location filename="../../ScanFileOrFolder.cpp" line="393"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="337"/> + <location filename="../../ScanFileOrFolder.cpp" line="403"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="441"/> + <source>This is not a folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="443"/> + <source>The folder does exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="445"/> + <source>The folder is not readable</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="456"/> + <source>Problem with name encoding</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TransferThread</name> + <message> + <location filename="../../TransferThread.cpp" line="235"/> + <location filename="../../TransferThread.cpp" line="663"/> + <location filename="../../TransferThread.cpp" line="735"/> + <location filename="../../TransferThread.cpp" line="1303"/> + <source>File not found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="336"/> + <location filename="../../TransferThread.cpp" line="353"/> + <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="408"/> + <location filename="../../TransferThread.cpp" line="431"/> + <source>Internal error: Already opening</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="572"/> + <source>Drive %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="574"/> + <source>Unknown folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="578"/> + <source>root</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="631"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="641"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="701"/> + <location filename="../../TransferThread.cpp" line="816"/> + <source>The source file doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="741"/> + <location filename="../../TransferThread.cpp" line="828"/> + <source>Unable to do the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="777"/> + <source>The source doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="822"/> + <source>Another file exists at same place</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1124"/> + <source>The checksums do not match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1213"/> + <source>Internal error: The destination is not closed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1227"/> + <source>Internal error: The size transfered doesn't match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1238"/> + <source>Internal error: The buffer is not empty</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1303"/> + <location filename="../../TransferThread.cpp" line="1321"/> + <location filename="../../TransferThread.cpp" line="1336"/> + <source>Unable to change the date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="219"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>WriteThread</name> + <message> + <location filename="../../WriteThread.cpp" line="80"/> + <source>Path resolution error (Empty path)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="268"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="671"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="696"/> + <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="35"/> + <source>Transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="44"/> + <source>Move the whole folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="51"/> + <source>Transfer the file rights</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="61"/> + <source>Keep the file date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="74"/> + <source>Autostart the transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="81"/> + <location filename="../../copyEngineOptions.ui" line="101"/> + <source>Less performance if checked</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="104"/> + <source>Follow the strict order</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="130"/> + <source>Error and collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="136"/> + <source>When folder error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="146"/> + <source>When file error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="172"/> + <source>When file collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="232"/> + <source>When folder collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="263"/> + <source>Check if destination folder exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="270"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="290"/> + <source>Delete partially transferred files</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="303"/> + <source>Rename the original destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="334"/> + <source>Control</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="340"/> + <source>Checksum</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="349"/> + <source>Only after error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="356"/> + <source>Ignore if impossible</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="373"/> + <source>Verify checksums</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="405"/> + <source>Performance</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="411"/> + <source>Parallel buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="418"/> + <location filename="../../copyEngineOptions.ui" line="431"/> + <location filename="../../copyEngineOptions.ui" line="444"/> + <location filename="../../copyEngineOptions.ui" line="481"/> + <location filename="../../copyEngineOptions.ui" line="550"/> + <source>KB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="460"/> + <source>Block size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="467"/> + <source>Sequential buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="474"/> + <source>Enable OS buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="497"/> + <source>OS buffer only if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="504"/> + <source>Transfer algorithm</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="543"/> + <source>Parallelize if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="573"/> + <source>Inode threads</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="580"/> + <location filename="../../copyEngineOptions.ui" line="590"/> + <source>More cpu, but better organisation on the disk</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="593"/> + <source>Order the list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="609"/> + <source>Misc</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="615"/> + <source>Check the disk space</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="625"/> + <source>Use this folder when destination is not set</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="637"/> + <source>Browse</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="659"/> + <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/CopyEngine/Ultracopier/Languages/it/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/it/translation.ts new file mode 100644 index 0000000..0bbc22f --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/Languages/it/translation.ts @@ -0,0 +1,1319 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="it" sourcelanguage="en"> +<context> + <name>AvancedQFile</name> + <message> + <location filename="../../AvancedQFile.cpp" line="26"/> + <location filename="../../AvancedQFile.cpp" line="57"/> + <location filename="../../AvancedQFile.cpp" line="88"/> + <source>Not supported on this platform</source> + <translation>Non supportato su questa piattaforma</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="40"/> + <source>Last modified date is wrong</source> + <translation>La data dell'ultima modifica ĆØ errata</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="71"/> + <source>Last access date is wrong</source> + <translation>La data dell'ultimo accesso ĆØ errata</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>Percorso dell'errore di conversione</translation> + </message> +</context> +<context> + <name>CopyEngine</name> + <message> + <location filename="../../CopyEngine.cpp" line="429"/> + <location filename="../../CopyEngine.cpp" line="451"/> + <source>The engine is forced to move, you can't copy with it</source> + <translation>Impossibile copiare, il motore per la copia forzerĆ lo spostamento</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="462"/> + <location filename="../../CopyEngine.cpp" line="484"/> + <source>The engine is forced to copy, you can't move with it</source> + <translation>Impossibile effettuare lo spostamento, il motore per la copia forzerĆ la copia</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="508"/> + <source>Destination</source> + <translation type="unfinished">Cartella di destinazione</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="508"/> + <source>Use the actual destination "%1"?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="717"/> + <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="1047"/> + <location filename="../../CopyEngine.cpp" line="1050"/> + <location filename="../../CopyEngine.cpp" line="1055"/> + <location filename="../../CopyEngine.cpp" line="1059"/> + <source>Ask</source> + <translation>Chiedi</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1048"/> + <location filename="../../CopyEngine.cpp" line="1052"/> + <location filename="../../CopyEngine.cpp" line="1056"/> + <location filename="../../CopyEngine.cpp" line="1060"/> + <source>Skip</source> + <translation>Salta</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1051"/> + <source>Merge</source> + <translation>Unisci</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1053"/> + <location filename="../../CopyEngine.cpp" line="1065"/> + <source>Rename</source> + <translation>Rinomina</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1057"/> + <source>Put at the end</source> + <translation>Metti in coda</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1061"/> + <source>Overwrite</source> + <translation>Sovrascrivi</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1062"/> + <source>Overwrite if different</source> + <translation>Sovrascrivi se differente</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1063"/> + <source>Overwrite if newer</source> + <translation>Sovrascrivi se piĆ¹ recente</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1064"/> + <source>Overwrite if older</source> + <translation>Sovrascrivi se meno recente</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1067"/> + <source>Automatic</source> + <translation>Automatico</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1068"/> + <source>Sequential</source> + <translation>Sequenziale</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1069"/> + <source>Parallel</source> + <translation>Parallelo</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <source>Options error</source> + <translation>Opzioni di errore</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <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="412"/> + <location filename="../../CopyEngineFactory.cpp" line="415"/> + <location filename="../../CopyEngineFactory.cpp" line="420"/> + <location filename="../../CopyEngineFactory.cpp" line="424"/> + <source>Ask</source> + <translation>Chiedi</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="413"/> + <location filename="../../CopyEngineFactory.cpp" line="417"/> + <location filename="../../CopyEngineFactory.cpp" line="421"/> + <location filename="../../CopyEngineFactory.cpp" line="425"/> + <source>Skip</source> + <translation>Salta</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="416"/> + <source>Merge</source> + <translation>Unisci</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="418"/> + <location filename="../../CopyEngineFactory.cpp" line="430"/> + <source>Rename</source> + <translation>Rinomina</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="422"/> + <source>Put at the end</source> + <translation>Metti in coda</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="426"/> + <source>Overwrite</source> + <translation>Sovrascrivi</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="427"/> + <source>Overwrite if different</source> + <translation>Sovrascrivi se differente</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="428"/> + <source>Overwrite if newer</source> + <translation>Sovrascrivi se piĆ¹ recente</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="429"/> + <source>Overwrite if older</source> + <translation>Sovrascrivi se meno recente</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="432"/> + <source>Automatic</source> + <translation>Automatico</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="433"/> + <source>Sequential</source> + <translation>Sequenziale</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="434"/> + <source>Parallel</source> + <translation>Parallelo</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <source>Options error</source> + <translation>Opzioni di errore</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <source>Options engine is not loaded, can't access to the filters</source> + <translation>Le opzioni del motore per la copia non vengono caricate, impossibile accedere ai filtri</translation> + </message> +</context> +<context> + <name>DiskSpace</name> + <message> + <location filename="../../DiskSpace.ui" line="14"/> + <source>Disk space</source> + <translation>Spazio su disco</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>Continua</translation> + </message> + <message> + <location filename="../../DiskSpace.ui" line="56"/> + <source>Cancel</source> + <translation>Annulla</translation> + </message> + <message> + <location filename="../../DiskSpace.cpp" line="23"/> + <source>Drives %1 have %2 available but need %3</source> + <translation>L'unitĆ %1 ha %2 disponibili, ma necessita di %3</translation> + </message> +</context> +<context> + <name>FileErrorDialog</name> + <message> + <location filename="../../FileErrorDialog.cpp" line="54"/> + <source>Error on folder</source> + <translation>Errore nella cartella</translation> + </message> + <message> + <location filename="../../FileErrorDialog.cpp" line="57"/> + <source>Folder name</source> + <translation>Nome della cartella</translation> + </message> +</context> +<context> + <name>FileExistsDialog</name> + <message> + <location filename="../../FileExistsDialog.cpp" line="131"/> + <source>%1 - copy</source> + <translation>%1 - copia</translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="141"/> + <source>%1 - copy (%2)</source> + <translation>%1 - copia (%2)</translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Error</source> + <translation>Errore</translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FileIsSameDialog</name> + <message> + <location filename="../../FileIsSameDialog.cpp" line="105"/> + <source>%1 - copy</source> + <translation>%1 - copia</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="115"/> + <source>%1 - copy (%2)</source> + <translation>%1 - copia (%2)</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <source>Error</source> + <translation>Errore</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <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>Cerca:</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="43"/> + <source>Search type:</source> + <translation>Tipo di ricerca:</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="51"/> + <source>Raw text</source> + <translation>Testo raw</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="56"/> + <source>Simplified regex</source> + <translation>Regex semplificato</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="61"/> + <source>Perl's regex</source> + <translation>Regex in Perl</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="69"/> + <source>Apply on:</source> + <translation>Applicare su:</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="77"/> + <source>File</source> + <translation>File</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="82"/> + <source>Folder</source> + <translation>Cartelle</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="87"/> + <source>File and folder</source> + <translation>File e cartelle</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="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>Verifica</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="115"/> + <source>Test string:</source> + <translation>Stringa di verifica:</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="17"/> + <source>Filters dialog</source> + <translation>Finestra dei filtri</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>La regex ĆØ valida</translation> + </message> +</context> +<context> + <name>Filters</name> + <message> + <location filename="../../Filters.ui" line="14"/> + <source>Filters</source> + <translation>Filtri</translation> + </message> + <message> + <location filename="../../Filters.ui" line="30"/> + <source>Exclusion filters</source> + <translation>Filtri di esclusione</translation> + </message> + <message> + <location filename="../../Filters.ui" line="93"/> + <source>Inclusion filters</source> + <translatorcomment>o filtri per l'inserimento?</translatorcomment> + <translation>Filtri di inclusione</translation> + </message> + <message> + <location filename="../../Filters.ui" line="105"/> + <source>None = Include all</source> + <translatorcomment>o Nessuno = Includi tutti oppure Nessuno = Inserisci tutti oppure bisogna lasiare none?</translatorcomment> + <translation>Nessuno = Tutti inclusi</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="92"/> + <location filename="../../Filters.cpp" line="130"/> + <source>Raw text</source> + <translation>Testo raw</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="95"/> + <location filename="../../Filters.cpp" line="133"/> + <source>Simplified regex</source> + <translation>Regex semplificato</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="98"/> + <location filename="../../Filters.cpp" line="136"/> + <source>Perl's regex</source> + <translation>Regex in Perl</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="106"/> + <location filename="../../Filters.cpp" line="144"/> + <source>Only on file</source> + <translation>Solo su file</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="109"/> + <location filename="../../Filters.cpp" line="147"/> + <source>Only on folder</source> + <translatorcomment>o cartella al singolare?</translatorcomment> + <translation>Solo su cartelle</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="115"/> + <location filename="../../Filters.cpp" line="153"/> + <location filename="../../Filters.cpp" line="215"/> + <location filename="../../Filters.cpp" line="254"/> + <source>Full match</source> + <translation>Corrispondenza completa</translation> + </message> +</context> +<context> + <name>FolderExistsDialog</name> + <message> + <location filename="../../FolderExistsDialog.cpp" line="51"/> + <source>Folder already exists</source> + <translation>Cartella giĆ presente</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="116"/> + <source>%1 - copy</source> + <translation>%1 - copia</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="126"/> + <source>%1 - copy (%2)</source> + <translation>%1 - copia (%2)</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Error</source> + <translation>Errore</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Try rename with unauthorized charateres</source> + <translation type="obsolete">Provare a rinominare con caratteri non consentiti</translation> + </message> +</context> +<context> + <name>ListThread</name> + <message> + <location filename="../../ListThread.cpp" line="1447"/> + <location filename="../../ListThread.cpp" line="2369"/> + <source>Unable do to move or copy item into wrong forced mode: %1</source> + <translation>Impossibile spostare o copiare elementi in modalitĆ forzata anomala: %1</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1454"/> + <location filename="../../ListThread.cpp" line="2376"/> + <source>Unable to save the transfer list: %1</source> + <translation>Impossibile salvare la lista dei trasferimenti: %1</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1470"/> + <source>Problem reading file, or file-size is 0</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1477"/> + <source>Wrong header: "%1"</source> + <translatorcomment>Header si riferisce all'intestazione?</translatorcomment> + <translation>Intestazione sbagliata: "%1"</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1486"/> + <source>The transfer list is in mixed mode, but this instance is not in this mode</source> + <translation>La lista dei trasferimenti ĆØ in modalitĆ mista, ma questa istanza non ĆØ in questa modalitĆ </translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1495"/> + <source>The transfer list is in copy mode, but this instance is not in this mode</source> + <translation>La lista dei trasferimenti ĆØ in modalitĆ di copia, ma questa istanza non ĆØ in questa modalitĆ </translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1501"/> + <source>The transfer list is in move mode, but this instance is not in this mode</source> + <translation>La lista dei trasferimenti ĆØ in modalitĆ di spostamento, ma questa istanza non ĆØ in questa modalitĆ </translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1557"/> + <source>Some errors have been found during the line parsing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1565"/> + <source>Unable to open the transfer list: %1</source> + <translation>Impossibile aprire la lista dei trasferimenti: %1</translation> + </message> +</context> +<context> + <name>MkPath</name> + <message> + <source>Unable to get time</source> + <translation type="obsolete">Impossibile ottenere l'ora</translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="142"/> + <source>Unable to create the folder</source> + <translation>Impossibile creare la cartella</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="232"/> + <source>Unable to move the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unable to set time</source> + <translation type="obsolete">Impossibile impostare l'ora</translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="93"/> + <location filename="../../MkPath.cpp" line="275"/> + <source>Unable to remove</source> + <translation>Impossibile eliminare</translation> + </message> +</context> +<context> + <name>ReadThread</name> + <message> + <location filename="../../ReadThread.cpp" line="55"/> + <source>Internal error, please report it!</source> + <translation>Errore interno, pregasi di segnalarlo!</translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="184"/> + <source>Internal error reading the source file:block size out of range</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="192"/> + <location filename="../../ReadThread.cpp" line="408"/> + <source>Unable to read the source file: </source> + <translation>Impossibile leggere il file di origine: </translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="233"/> + <location filename="../../ReadThread.cpp" line="456"/> + <source>File truncated during the read, possible data change</source> + <translation>File troncato durante la lettura, possibili variazioni di dati</translation> + </message> +</context> +<context> + <name>RenamingRules</name> + <message> + <location filename="../../RenamingRules.ui" line="26"/> + <source>First renaming</source> + <translatorcomment>o Prima ridenominazione?</translatorcomment> + <translation>Prima rinomina</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="32"/> + <source>%name% - copy</source> + <extracomment>%name% should not be translated</extracomment> + <translatorcomment>%name% non dovrĆ essere tradotto</translatorcomment> + <translation>Copia di %name%</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="39"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> + <extracomment> should not be translated</extracomment> + <translatorcomment>o per il nome originale del file</translatorcomment> + <translation><html><head/><body><p>variabili: <span style=" font-weight:600;">%name%</span> per il nome del file di origine</p></body></html></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="49"/> + <source>Second renaming</source> + <translatorcomment>o Seconda ridenominazione?</translatorcomment> + <translation>Seconda rinomina</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="55"/> + <source>%name% - copy (%number%)</source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translatorcomment>%name% e %number% non dovranno essere tradotti</translatorcomment> + <translation>Copia di %name% (%number%)</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="62"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translatorcomment>%name% e %number% non dovranno essere tradotti</translatorcomment> + <translation><html><head/><body><p>variabili: <span style=" font-weight:600;">%name%</span> per il nome del file di origine</p><p><span style=" font-weight:600;">%number%</span> per il numero progressivo</p></body></html></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="39"/> + <location filename="../../RenamingRules.cpp" line="62"/> + <source>%1 - copy</source> + <translation>%1 - copia</translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="43"/> + <location filename="../../RenamingRules.cpp" line="73"/> + <source>%1 - copy (%2)</source> + <translation>%1 - copia (%2)</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="14"/> + <source>Renaming rules</source> + <translation>Regole di rinomina</translation> + </message> +</context> +<context> + <name>ScanFileOrFolder</name> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="265"/> + <source>Blacklisted folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="327"/> + <location filename="../../ScanFileOrFolder.cpp" line="393"/> + <source>%1 - copy</source> + <translation>%1 - copia</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="337"/> + <location filename="../../ScanFileOrFolder.cpp" line="403"/> + <source>%1 - copy (%2)</source> + <translation>%1 - copia (%2)</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="441"/> + <source>This is not a folder</source> + <translation>Questa non ĆØ una cartella</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="443"/> + <source>The folder does exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The folder not exists</source> + <translation type="obsolete">La cartella non esiste</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="445"/> + <source>The folder is not readable</source> + <translation>La cartella non ĆØ leggibile</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="456"/> + <source>Problem with name encoding</source> + <translation>Problema con la codifica del nome</translation> + </message> +</context> +<context> + <name>TransferThread</name> + <message> + <location filename="../../TransferThread.cpp" line="235"/> + <location filename="../../TransferThread.cpp" line="663"/> + <location filename="../../TransferThread.cpp" line="735"/> + <location filename="../../TransferThread.cpp" line="1303"/> + <source>File not found</source> + <translation>File non trovato</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="336"/> + <location filename="../../TransferThread.cpp" line="353"/> + <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="408"/> + <location filename="../../TransferThread.cpp" line="431"/> + <source>Internal error: Already opening</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="572"/> + <source>Drive %1</source> + <translation type="unfinished">UnitĆ %1</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="574"/> + <source>Unknown folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="578"/> + <source>root</source> + <translation type="unfinished">root</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="631"/> + <source>%1 - copy</source> + <translation type="unfinished">%1 - copia</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="641"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished">%1 - copia (%2)</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="701"/> + <location filename="../../TransferThread.cpp" line="816"/> + <source>The source file doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="741"/> + <location filename="../../TransferThread.cpp" line="828"/> + <source>Unable to do the folder</source> + <translation type="unfinished">Impossibile creare la cartella</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="219"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="777"/> + <source>The source doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="822"/> + <source>Another file exists at same place</source> + <translation type="unfinished">Nello stesso percorso ĆØ presente un altro file</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1124"/> + <source>The checksums do not match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1213"/> + <source>Internal error: The destination is not closed</source> + <translation type="unfinished">Errore interno: la cartella di destinazione non ĆØ chiusa</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1227"/> + <source>Internal error: The size transfered doesn't match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1238"/> + <source>Internal error: The buffer is not empty</source> + <translation type="unfinished">Errore interno: il buffer non ĆØ vuoto</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1303"/> + <location filename="../../TransferThread.cpp" line="1321"/> + <location filename="../../TransferThread.cpp" line="1336"/> + <source>Unable to change the date</source> + <translation type="unfinished">Impossibile cambiare la data</translation> + </message> +</context> +<context> + <name>WriteThread</name> + <message> + <location filename="../../WriteThread.cpp" line="80"/> + <source>Path resolution error (Empty path)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="268"/> + <source>Internal error, please report it!</source> + <translation>Errore interno, pregasi di segnalarlo!</translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="671"/> + <source>Unable to read the source file: </source> + <translation>Impossibile leggere il file di origine: </translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="696"/> + <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="35"/> + <source>Transfer</source> + <translation>Trasferisci</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="44"/> + <source>Move the whole folder</source> + <translation>Spostare l'intera cartella</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="51"/> + <source>Transfer the file rights</source> + <translation>Trasferire le autorizzazioni dei file</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="61"/> + <source>Keep the file date</source> + <translation>Mantenere la data del file</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="74"/> + <source>Autostart the transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="81"/> + <location filename="../../copyEngineOptions.ui" line="101"/> + <source>Less performance if checked</source> + <translation>Se selezionato si avranno prestazioni ridotte</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="104"/> + <source>Follow the strict order</source> + <translation>Seguire rigorosamente l'ordine</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="130"/> + <source>Error and collision</source> + <translation>Errori di coincidenze</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="136"/> + <source>When folder error</source> + <translation>Quando si verifica un errore nelle cartelle</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="146"/> + <source>When file error</source> + <translation>Quando si verifica un errore nei file</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="172"/> + <source>When file collision</source> + <translation>Quando i file coincidono</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="232"/> + <source>When folder collision</source> + <translation>Quando le cartelle coincidono</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="263"/> + <source>Check if destination folder exists</source> + <translation>Controllare se la cartella di destinazione esiste</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="270"/> + <source>Renaming rules</source> + <translation>Regole di rinomina</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="290"/> + <source>Delete partially transferred files</source> + <translation>Eliminare i file parzialmente trasferiti</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="303"/> + <source>Rename the original destination</source> + <translation>Rinominare la destinazione all'origine</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="334"/> + <source>Control</source> + <translation>Controllare</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="340"/> + <source>Checksum</source> + <translation>Codice di controllo (Checksum)</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="349"/> + <source>Only after error</source> + <translation>Solo dopo l'errore</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="356"/> + <source>Ignore if impossible</source> + <translation>Ignora se non corrisponde</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="373"/> + <source>Verify checksums</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="405"/> + <source>Performance</source> + <translation>Prestazioni</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="411"/> + <source>Parallel buffer</source> + <translation>Buffer parallelo</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="418"/> + <location filename="../../copyEngineOptions.ui" line="431"/> + <location filename="../../copyEngineOptions.ui" line="444"/> + <location filename="../../copyEngineOptions.ui" line="481"/> + <location filename="../../copyEngineOptions.ui" line="550"/> + <source>KB</source> + <translation>KB</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="460"/> + <source>Block size</source> + <translation>Dimensione del blocco</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="467"/> + <source>Sequential buffer</source> + <translation>Buffer sequenziale</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="474"/> + <source>Enable OS buffer</source> + <translation>Attivare il buffer del sistema operativo</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="497"/> + <source>OS buffer only if smaller than</source> + <translation>Buffer del sistema operativo solo se inferiore a</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="504"/> + <source>Transfer algorithm</source> + <translation>Algoritmo di trasferimento </translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="543"/> + <source>Parallelize if smaller than</source> + <translation>Affiancare se inferiore a</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="573"/> + <source>Inode threads</source> + <translation>Inode threads</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="580"/> + <location filename="../../copyEngineOptions.ui" line="590"/> + <source>More cpu, but better organisation on the disk</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="593"/> + <source>Order the list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="609"/> + <source>Misc</source> + <translation>Varie</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="615"/> + <source>Check the disk space</source> + <translation>Controllare lo spazio su disco</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="625"/> + <source>Use this folder when destination is not set</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Use this folder when destination is empty</source> + <translation type="obsolete">Usare questa cartella quando la cartella di destinazione ĆØ vuota</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="637"/> + <source>Browse</source> + <translation>Sfoglia</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="659"/> + <source>Filters</source> + <translation>Filtri</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>Errore</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="59"/> + <source>Size</source> + <translation>Dimensione</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="76"/> + <source>Modified</source> + <translation>Modificato</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="93"/> + <source>File name</source> + <translation>Nome del file</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="110"/> + <source>Destination</source> + <translation>Cartella di destinazione</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="127"/> + <source>Folder</source> + <translation>Cartelle</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>Mettere in coda</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="207"/> + <source>Retry</source> + <translation>Riprova</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="214"/> + <source>&Skip</source> + <translation>&Salta</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="221"/> + <source>&Cancel</source> + <translation>&Annulla</translation> + </message> +</context> +<context> + <name>fileExistsDialog</name> + <message> + <location filename="../../fileExistsDialog.ui" line="14"/> + <source>The file exists</source> + <translation>Il file ĆØ giĆ presente</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="34"/> + <source>Source</source> + <translation>Cartella di origine</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="50"/> + <source>Destination</source> + <translation>Cartella di destinazione</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="82"/> + <location filename="../../fileExistsDialog.ui" line="170"/> + <source>Size</source> + <translation>Dimensione</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="99"/> + <location filename="../../fileExistsDialog.ui" line="187"/> + <source>Modified</source> + <translation>Modificato</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="116"/> + <location filename="../../fileExistsDialog.ui" line="204"/> + <source>File name</source> + <translation>Nome del file</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="133"/> + <location filename="../../fileExistsDialog.ui" line="221"/> + <source>Folder</source> + <translation>Cartelle</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="277"/> + <source>Suggest new &name</source> + <translation>Suggerisci un nuovo &nome</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>&Rinomina</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="315"/> + <source>&Overwrite</source> + <translation>&Sovrascrivi</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="325"/> + <source>&Skip</source> + <translation>&Salta</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="332"/> + <source>&Cancel</source> + <translation>&Annulla</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="341"/> + <source>Overwrite if newer</source> + <translation>Sovrascrivi se piĆ¹ recente</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="354"/> + <location filename="../../fileExistsDialog.ui" line="357"/> + <source>Overwrite if older</source> + <translation>Sovrascrivi se meno recente</translation> + </message> +</context> +<context> + <name>fileIsSameDialog</name> + <message> + <location filename="../../fileIsSameDialog.ui" line="40"/> + <source>Size</source> + <translation>Dimensione</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="110"/> + <source>Modified</source> + <translation>Modificato</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="70"/> + <source>File name</source> + <translation>Nome del file</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>Cartelle</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="159"/> + <source>Suggest new &name</source> + <translation>Suggerisci nuovo &nome</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>&Rinomina</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="197"/> + <source>&Skip</source> + <translation>&Salta</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="204"/> + <source>&Cancel</source> + <translation>&Annulla</translation> + </message> +</context> +<context> + <name>folderExistsDialog</name> + <message> + <location filename="../../folderExistsDialog.ui" line="34"/> + <source>Source</source> + <translation>Cartella di origine</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="50"/> + <source>Destination</source> + <translation>Cartella di destinazione</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>Modificato</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="99"/> + <location filename="../../folderExistsDialog.ui" line="160"/> + <source>Folder name</source> + <translation>Nome della cartella</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="116"/> + <location filename="../../folderExistsDialog.ui" line="184"/> + <source>Folder</source> + <translation>Cartelle</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="227"/> + <source>Suggest new &name</source> + <translation>Suggerisci nuovo &nome</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>&Rinomina</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="252"/> + <source>Merge</source> + <translation>Unisci</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="259"/> + <source>Skip</source> + <translation>Salta</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="266"/> + <source>&Cancel</source> + <translation>&Annulla</translation> + </message> +</context> +</TS> diff --git a/plugins/CopyEngine/Ultracopier/Languages/ja/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/ja/translation.ts new file mode 100644 index 0000000..25bb8d3 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/Languages/ja/translation.ts @@ -0,0 +1,1289 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<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="429"/> + <location filename="../../CopyEngine.cpp" line="451"/> + <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="462"/> + <location filename="../../CopyEngine.cpp" line="484"/> + <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="508"/> + <source>Destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="508"/> + <source>Use the actual destination "%1"?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="717"/> + <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="1047"/> + <location filename="../../CopyEngine.cpp" line="1050"/> + <location filename="../../CopyEngine.cpp" line="1055"/> + <location filename="../../CopyEngine.cpp" line="1059"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1048"/> + <location filename="../../CopyEngine.cpp" line="1052"/> + <location filename="../../CopyEngine.cpp" line="1056"/> + <location filename="../../CopyEngine.cpp" line="1060"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1051"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1053"/> + <location filename="../../CopyEngine.cpp" line="1065"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1057"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1061"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1062"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1063"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1064"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1067"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1068"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1069"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <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="412"/> + <location filename="../../CopyEngineFactory.cpp" line="415"/> + <location filename="../../CopyEngineFactory.cpp" line="420"/> + <location filename="../../CopyEngineFactory.cpp" line="424"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="413"/> + <location filename="../../CopyEngineFactory.cpp" line="417"/> + <location filename="../../CopyEngineFactory.cpp" line="421"/> + <location filename="../../CopyEngineFactory.cpp" line="425"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="416"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="418"/> + <location filename="../../CopyEngineFactory.cpp" line="430"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="422"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="426"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="427"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="428"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="429"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="432"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="433"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="434"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <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="131"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="141"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FileIsSameDialog</name> + <message> + <location filename="../../FileIsSameDialog.cpp" line="105"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="115"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <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="92"/> + <location filename="../../Filters.cpp" line="130"/> + <source>Raw text</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="95"/> + <location filename="../../Filters.cpp" line="133"/> + <source>Simplified regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="98"/> + <location filename="../../Filters.cpp" line="136"/> + <source>Perl's regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="106"/> + <location filename="../../Filters.cpp" line="144"/> + <source>Only on file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="109"/> + <location filename="../../Filters.cpp" line="147"/> + <source>Only on folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="115"/> + <location filename="../../Filters.cpp" line="153"/> + <location filename="../../Filters.cpp" line="215"/> + <location filename="../../Filters.cpp" line="254"/> + <source>Full match</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FolderExistsDialog</name> + <message> + <location filename="../../FolderExistsDialog.cpp" line="51"/> + <source>Folder already exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="116"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="126"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ListThread</name> + <message> + <location filename="../../ListThread.cpp" line="1447"/> + <location filename="../../ListThread.cpp" line="2369"/> + <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="1454"/> + <location filename="../../ListThread.cpp" line="2376"/> + <source>Unable to save the transfer list: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1470"/> + <source>Problem reading file, or file-size is 0</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1477"/> + <source>Wrong header: "%1"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1486"/> + <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="1495"/> + <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="1501"/> + <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="1557"/> + <source>Some errors have been found during the line parsing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1565"/> + <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="232"/> + <source>Unable to move the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="93"/> + <location filename="../../MkPath.cpp" line="275"/> + <source>Unable to remove</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ReadThread</name> + <message> + <location filename="../../ReadThread.cpp" line="55"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="184"/> + <source>Internal error reading the source file:block size out of range</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="192"/> + <location filename="../../ReadThread.cpp" line="408"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="233"/> + <location filename="../../ReadThread.cpp" line="456"/> + <source>File truncated during the read, possible data change</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>RenamingRules</name> + <message> + <location filename="../../RenamingRules.ui" line="14"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="26"/> + <source>First renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="32"/> + <source>%name% - copy</source> + <extracomment>%name% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="39"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> + <extracomment> should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="49"/> + <source>Second renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="55"/> + <source>%name% - copy (%number%)</source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="62"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="39"/> + <location filename="../../RenamingRules.cpp" line="62"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="43"/> + <location filename="../../RenamingRules.cpp" line="73"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ScanFileOrFolder</name> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="265"/> + <source>Blacklisted folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="327"/> + <location filename="../../ScanFileOrFolder.cpp" line="393"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="337"/> + <location filename="../../ScanFileOrFolder.cpp" line="403"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="441"/> + <source>This is not a folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="443"/> + <source>The folder does exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="445"/> + <source>The folder is not readable</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="456"/> + <source>Problem with name encoding</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TransferThread</name> + <message> + <location filename="../../TransferThread.cpp" line="235"/> + <location filename="../../TransferThread.cpp" line="663"/> + <location filename="../../TransferThread.cpp" line="735"/> + <location filename="../../TransferThread.cpp" line="1303"/> + <source>File not found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="336"/> + <location filename="../../TransferThread.cpp" line="353"/> + <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="408"/> + <location filename="../../TransferThread.cpp" line="431"/> + <source>Internal error: Already opening</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="572"/> + <source>Drive %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="574"/> + <source>Unknown folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="578"/> + <source>root</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="631"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="641"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="701"/> + <location filename="../../TransferThread.cpp" line="816"/> + <source>The source file doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="741"/> + <location filename="../../TransferThread.cpp" line="828"/> + <source>Unable to do the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="777"/> + <source>The source doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="822"/> + <source>Another file exists at same place</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1124"/> + <source>The checksums do not match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1213"/> + <source>Internal error: The destination is not closed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1227"/> + <source>Internal error: The size transfered doesn't match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1238"/> + <source>Internal error: The buffer is not empty</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1303"/> + <location filename="../../TransferThread.cpp" line="1321"/> + <location filename="../../TransferThread.cpp" line="1336"/> + <source>Unable to change the date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="219"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>WriteThread</name> + <message> + <location filename="../../WriteThread.cpp" line="80"/> + <source>Path resolution error (Empty path)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="268"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="671"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="696"/> + <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="35"/> + <source>Transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="44"/> + <source>Move the whole folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="51"/> + <source>Transfer the file rights</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="61"/> + <source>Keep the file date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="74"/> + <source>Autostart the transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="81"/> + <location filename="../../copyEngineOptions.ui" line="101"/> + <source>Less performance if checked</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="104"/> + <source>Follow the strict order</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="130"/> + <source>Error and collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="136"/> + <source>When folder error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="146"/> + <source>When file error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="172"/> + <source>When file collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="232"/> + <source>When folder collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="263"/> + <source>Check if destination folder exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="270"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="290"/> + <source>Delete partially transferred files</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="303"/> + <source>Rename the original destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="334"/> + <source>Control</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="340"/> + <source>Checksum</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="349"/> + <source>Only after error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="356"/> + <source>Ignore if impossible</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="373"/> + <source>Verify checksums</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="405"/> + <source>Performance</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="411"/> + <source>Parallel buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="418"/> + <location filename="../../copyEngineOptions.ui" line="431"/> + <location filename="../../copyEngineOptions.ui" line="444"/> + <location filename="../../copyEngineOptions.ui" line="481"/> + <location filename="../../copyEngineOptions.ui" line="550"/> + <source>KB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="460"/> + <source>Block size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="467"/> + <source>Sequential buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="474"/> + <source>Enable OS buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="497"/> + <source>OS buffer only if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="504"/> + <source>Transfer algorithm</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="543"/> + <source>Parallelize if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="573"/> + <source>Inode threads</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="580"/> + <location filename="../../copyEngineOptions.ui" line="590"/> + <source>More cpu, but better organisation on the disk</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="593"/> + <source>Order the list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="609"/> + <source>Misc</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="615"/> + <source>Check the disk space</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="625"/> + <source>Use this folder when destination is not set</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="637"/> + <source>Browse</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="659"/> + <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/CopyEngine/Ultracopier/Languages/ko/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/ko/translation.ts new file mode 100644 index 0000000..deeeead --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/Languages/ko/translation.ts @@ -0,0 +1,1293 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="ko_KR"> +<context> + <name>AvancedQFile</name> + <message> + <location filename="../../AvancedQFile.cpp" line="26"/> + <location filename="../../AvancedQFile.cpp" line="57"/> + <location filename="../../AvancedQFile.cpp" line="88"/> + <source>Not supported on this platform</source> + <translation>ģ“ ķė«ķ¼ģģ ģ§ģėģ§ ģģµėė¤</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="40"/> + <source>Last modified date is wrong</source> + <translation>ė§ģ§ė§ ģģ ė ģ§ź° ģėŖ»ėģģµėė¤</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="71"/> + <source>Last access date is wrong</source> + <translation>ė§ģ§ė§ ģģøģ¤ ė ģ§ź° ģėŖ»ėģģµėė¤</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="429"/> + <location filename="../../CopyEngine.cpp" line="451"/> + <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="462"/> + <location filename="../../CopyEngine.cpp" line="484"/> + <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="508"/> + <source>Destination</source> + <translation type="unfinished">ėģ</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="508"/> + <source>Use the actual destination "%1"?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="717"/> + <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="1047"/> + <location filename="../../CopyEngine.cpp" line="1050"/> + <location filename="../../CopyEngine.cpp" line="1055"/> + <location filename="../../CopyEngine.cpp" line="1059"/> + <source>Ask</source> + <translation type="unfinished">ķģø</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1048"/> + <location filename="../../CopyEngine.cpp" line="1052"/> + <location filename="../../CopyEngine.cpp" line="1056"/> + <location filename="../../CopyEngine.cpp" line="1060"/> + <source>Skip</source> + <translation type="unfinished">ź±“ėė°źø°</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1051"/> + <source>Merge</source> + <translation type="unfinished">ķ©ģ¹źø°</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1053"/> + <location filename="../../CopyEngine.cpp" line="1065"/> + <source>Rename</source> + <translation type="unfinished">ģ“ė¦ ė°ź¾øźø°</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1057"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1061"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1062"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1063"/> + <source>Overwrite if newer</source> + <translation type="unfinished">ė ģµģ ģ“ė©“ ė®ģ“ģģ°źø°</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1064"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1067"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1068"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1069"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <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="412"/> + <location filename="../../CopyEngineFactory.cpp" line="415"/> + <location filename="../../CopyEngineFactory.cpp" line="420"/> + <location filename="../../CopyEngineFactory.cpp" line="424"/> + <source>Ask</source> + <translation type="unfinished">ķģø</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="413"/> + <location filename="../../CopyEngineFactory.cpp" line="417"/> + <location filename="../../CopyEngineFactory.cpp" line="421"/> + <location filename="../../CopyEngineFactory.cpp" line="425"/> + <source>Skip</source> + <translation type="unfinished">ź±“ėė°źø°</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="416"/> + <source>Merge</source> + <translation type="unfinished">ķ©ģ¹źø°</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="418"/> + <location filename="../../CopyEngineFactory.cpp" line="430"/> + <source>Rename</source> + <translation type="unfinished">ģ“ė¦ ė°ź¾øźø°</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="422"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="426"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="427"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="428"/> + <source>Overwrite if newer</source> + <translation type="unfinished">ė ģµģ ģ“ė©“ ė®ģ“ģģ°źø°</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="429"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="432"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="433"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="434"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <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="131"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="141"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Error</source> + <translation type="unfinished">ģ¤ė„</translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FileIsSameDialog</name> + <message> + <location filename="../../FileIsSameDialog.cpp" line="105"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="115"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <source>Error</source> + <translation type="unfinished">ģ¤ė„</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <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="92"/> + <location filename="../../Filters.cpp" line="130"/> + <source>Raw text</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="95"/> + <location filename="../../Filters.cpp" line="133"/> + <source>Simplified regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="98"/> + <location filename="../../Filters.cpp" line="136"/> + <source>Perl's regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="106"/> + <location filename="../../Filters.cpp" line="144"/> + <source>Only on file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="109"/> + <location filename="../../Filters.cpp" line="147"/> + <source>Only on folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="115"/> + <location filename="../../Filters.cpp" line="153"/> + <location filename="../../Filters.cpp" line="215"/> + <location filename="../../Filters.cpp" line="254"/> + <source>Full match</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FolderExistsDialog</name> + <message> + <location filename="../../FolderExistsDialog.cpp" line="51"/> + <source>Folder already exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="116"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="126"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Error</source> + <translation type="unfinished">ģ¤ė„</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ListThread</name> + <message> + <location filename="../../ListThread.cpp" line="1447"/> + <location filename="../../ListThread.cpp" line="2369"/> + <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="1454"/> + <location filename="../../ListThread.cpp" line="2376"/> + <source>Unable to save the transfer list: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1470"/> + <source>Problem reading file, or file-size is 0</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1477"/> + <source>Wrong header: "%1"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1486"/> + <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="1495"/> + <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="1501"/> + <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="1557"/> + <source>Some errors have been found during the line parsing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1565"/> + <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>ķ“ėė„¼ ģģ±ķ ģ ģģµėė¤</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="232"/> + <source>Unable to move the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="93"/> + <location filename="../../MkPath.cpp" line="275"/> + <source>Unable to remove</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ReadThread</name> + <message> + <location filename="../../ReadThread.cpp" line="55"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="184"/> + <source>Internal error reading the source file:block size out of range</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="192"/> + <location filename="../../ReadThread.cpp" line="408"/> + <source>Unable to read the source file: </source> + <translation>ģė³ø ķģ¼ ģ½źø° ė¶ź°:</translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="233"/> + <location filename="../../ReadThread.cpp" line="456"/> + <source>File truncated during the read, possible data change</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>RenamingRules</name> + <message> + <location filename="../../RenamingRules.ui" line="14"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="26"/> + <source>First renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="32"/> + <source>%name% - copy</source> + <extracomment>%name% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="39"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> + <extracomment> should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="49"/> + <source>Second renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="55"/> + <source>%name% - copy (%number%)</source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="62"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="39"/> + <location filename="../../RenamingRules.cpp" line="62"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="43"/> + <location filename="../../RenamingRules.cpp" line="73"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ScanFileOrFolder</name> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="265"/> + <source>Blacklisted folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="327"/> + <location filename="../../ScanFileOrFolder.cpp" line="393"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="337"/> + <location filename="../../ScanFileOrFolder.cpp" line="403"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="441"/> + <source>This is not a folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="443"/> + <source>The folder does exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The folder not exists</source> + <translation type="obsolete">ķ“ėź° ģ”“ģ¬ķģ§ ģģµėė¤</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="445"/> + <source>The folder is not readable</source> + <translation type="unfinished">ķ“ėė„¼ ģ½ģ ģ ģģµėė¤</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="456"/> + <source>Problem with name encoding</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TransferThread</name> + <message> + <location filename="../../TransferThread.cpp" line="235"/> + <location filename="../../TransferThread.cpp" line="663"/> + <location filename="../../TransferThread.cpp" line="735"/> + <location filename="../../TransferThread.cpp" line="1303"/> + <source>File not found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="336"/> + <location filename="../../TransferThread.cpp" line="353"/> + <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="408"/> + <location filename="../../TransferThread.cpp" line="431"/> + <source>Internal error: Already opening</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="572"/> + <source>Drive %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="574"/> + <source>Unknown folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="578"/> + <source>root</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="631"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="641"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="701"/> + <location filename="../../TransferThread.cpp" line="816"/> + <source>The source file doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="741"/> + <location filename="../../TransferThread.cpp" line="828"/> + <source>Unable to do the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="777"/> + <source>The source doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="822"/> + <source>Another file exists at same place</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1124"/> + <source>The checksums do not match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1213"/> + <source>Internal error: The destination is not closed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1227"/> + <source>Internal error: The size transfered doesn't match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1238"/> + <source>Internal error: The buffer is not empty</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1303"/> + <location filename="../../TransferThread.cpp" line="1321"/> + <location filename="../../TransferThread.cpp" line="1336"/> + <source>Unable to change the date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="219"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>WriteThread</name> + <message> + <location filename="../../WriteThread.cpp" line="80"/> + <source>Path resolution error (Empty path)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="268"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="671"/> + <source>Unable to read the source file: </source> + <translation type="unfinished">ģė³ø ķģ¼ ģ½źø° ė¶ź°:</translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="696"/> + <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="35"/> + <source>Transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="44"/> + <source>Move the whole folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="51"/> + <source>Transfer the file rights</source> + <translation type="unfinished">ķģ¼ ź¶ķ ģ ģ”</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="61"/> + <source>Keep the file date</source> + <translation type="unfinished">ķģ¼ ė ģ§ ė³“ģ”“</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="74"/> + <source>Autostart the transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="81"/> + <location filename="../../copyEngineOptions.ui" line="101"/> + <source>Less performance if checked</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="104"/> + <source>Follow the strict order</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="130"/> + <source>Error and collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="136"/> + <source>When folder error</source> + <translation type="unfinished">ķ“ė ģ¤ė„ģ</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="146"/> + <source>When file error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="172"/> + <source>When file collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="232"/> + <source>When folder collision</source> + <translation type="unfinished">ķ“ė ģ¶©ėģ</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="263"/> + <source>Check if destination folder exists</source> + <translation type="unfinished">ėģ ķ“ė ģ”“ģ¬ģ ķģø</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="270"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="290"/> + <source>Delete partially transferred files</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="303"/> + <source>Rename the original destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="334"/> + <source>Control</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="340"/> + <source>Checksum</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="349"/> + <source>Only after error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="356"/> + <source>Ignore if impossible</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="373"/> + <source>Verify checksums</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="405"/> + <source>Performance</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="411"/> + <source>Parallel buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="418"/> + <location filename="../../copyEngineOptions.ui" line="431"/> + <location filename="../../copyEngineOptions.ui" line="444"/> + <location filename="../../copyEngineOptions.ui" line="481"/> + <location filename="../../copyEngineOptions.ui" line="550"/> + <source>KB</source> + <translation type="unfinished">KB</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="460"/> + <source>Block size</source> + <translation type="unfinished">ėøė ķ¬źø°</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="467"/> + <source>Sequential buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="474"/> + <source>Enable OS buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="497"/> + <source>OS buffer only if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="504"/> + <source>Transfer algorithm</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="543"/> + <source>Parallelize if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="573"/> + <source>Inode threads</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="580"/> + <location filename="../../copyEngineOptions.ui" line="590"/> + <source>More cpu, but better organisation on the disk</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="593"/> + <source>Order the list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="609"/> + <source>Misc</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="615"/> + <source>Check the disk space</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="625"/> + <source>Use this folder when destination is not set</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="637"/> + <source>Browse</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="659"/> + <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>ģ¤ė„</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="59"/> + <source>Size</source> + <translation>ķ¬źø°</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="76"/> + <source>Modified</source> + <translation>ģģ ė ģ§</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="93"/> + <source>File name</source> + <translation>ķģ¼ ģ“ė¦</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>ģėģ ėźø°</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="207"/> + <source>Retry</source> + <translation>ģ¬ģė</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="214"/> + <source>&Skip</source> + <translation>&ź±“ėė°źø°</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="221"/> + <source>&Cancel</source> + <translation>&ģ·Øģ</translation> + </message> +</context> +<context> + <name>fileExistsDialog</name> + <message> + <location filename="../../fileExistsDialog.ui" line="14"/> + <source>The file exists</source> + <translation>ķģ¼ģ“ ģ”“ģ¬ķ©ėė¤</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="34"/> + <source>Source</source> + <translation>ģė³ø</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="50"/> + <source>Destination</source> + <translation>ėģ</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="82"/> + <location filename="../../fileExistsDialog.ui" line="170"/> + <source>Size</source> + <translation>ķ¬źø°</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="99"/> + <location filename="../../fileExistsDialog.ui" line="187"/> + <source>Modified</source> + <translation>ģģ ė ģ§</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="116"/> + <location filename="../../fileExistsDialog.ui" line="204"/> + <source>File name</source> + <translation>ķģ¼ ģ“ė¦</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>ģ &ģ“ė¦ ģ ģ</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>&ģ“ė¦ ė°ź¾øźø°</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="315"/> + <source>&Overwrite</source> + <translation>&ė®ģ“ģģ°źø°</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="325"/> + <source>&Skip</source> + <translation>&ź±“ėė°źø°</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="332"/> + <source>&Cancel</source> + <translation>&ģ·Øģ</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="341"/> + <source>Overwrite if newer</source> + <translation>ė ģµģ ģ“ė©“ ė®ģ“ģģ°źø°</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>ķ¬źø°</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="110"/> + <source>Modified</source> + <translation>ģģ ė ģ§</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="70"/> + <source>File name</source> + <translation>ķģ¼ ģ“ė¦</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>ģ &ģ“ė¦ ģ ģ</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>&ģ“ė¦ ė°ź¾øźø°</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="197"/> + <source>&Skip</source> + <translation>&ź±“ėė°źø°</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="204"/> + <source>&Cancel</source> + <translation>&ģ·Øģ</translation> + </message> +</context> +<context> + <name>folderExistsDialog</name> + <message> + <location filename="../../folderExistsDialog.ui" line="34"/> + <source>Source</source> + <translation>ģė³ø</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="50"/> + <source>Destination</source> + <translation>ėģ</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="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>ģģ ė ģ§</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="99"/> + <location filename="../../folderExistsDialog.ui" line="160"/> + <source>Folder name</source> + <translation>ķ“ė ģ“ė¦</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>ģ &ģ“ė¦ ģ ģ</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>&ģ“ė¦ ė°ź¾øźø°</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="252"/> + <source>Merge</source> + <translation>ķ©ģ¹źø°</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="259"/> + <source>Skip</source> + <translation>ź±“ėė°źø°</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="266"/> + <source>&Cancel</source> + <translation>&ģ·Øģ</translation> + </message> +</context> +</TS> diff --git a/plugins/CopyEngine/Ultracopier/Languages/nl/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/nl/translation.ts new file mode 100644 index 0000000..3362659 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/Languages/nl/translation.ts @@ -0,0 +1,1289 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<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="429"/> + <location filename="../../CopyEngine.cpp" line="451"/> + <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="462"/> + <location filename="../../CopyEngine.cpp" line="484"/> + <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="508"/> + <source>Destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="508"/> + <source>Use the actual destination "%1"?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="717"/> + <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="1047"/> + <location filename="../../CopyEngine.cpp" line="1050"/> + <location filename="../../CopyEngine.cpp" line="1055"/> + <location filename="../../CopyEngine.cpp" line="1059"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1048"/> + <location filename="../../CopyEngine.cpp" line="1052"/> + <location filename="../../CopyEngine.cpp" line="1056"/> + <location filename="../../CopyEngine.cpp" line="1060"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1051"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1053"/> + <location filename="../../CopyEngine.cpp" line="1065"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1057"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1061"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1062"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1063"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1064"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1067"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1068"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1069"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <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="412"/> + <location filename="../../CopyEngineFactory.cpp" line="415"/> + <location filename="../../CopyEngineFactory.cpp" line="420"/> + <location filename="../../CopyEngineFactory.cpp" line="424"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="413"/> + <location filename="../../CopyEngineFactory.cpp" line="417"/> + <location filename="../../CopyEngineFactory.cpp" line="421"/> + <location filename="../../CopyEngineFactory.cpp" line="425"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="416"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="418"/> + <location filename="../../CopyEngineFactory.cpp" line="430"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="422"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="426"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="427"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="428"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="429"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="432"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="433"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="434"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <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="131"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="141"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FileIsSameDialog</name> + <message> + <location filename="../../FileIsSameDialog.cpp" line="105"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="115"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <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="92"/> + <location filename="../../Filters.cpp" line="130"/> + <source>Raw text</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="95"/> + <location filename="../../Filters.cpp" line="133"/> + <source>Simplified regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="98"/> + <location filename="../../Filters.cpp" line="136"/> + <source>Perl's regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="106"/> + <location filename="../../Filters.cpp" line="144"/> + <source>Only on file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="109"/> + <location filename="../../Filters.cpp" line="147"/> + <source>Only on folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="115"/> + <location filename="../../Filters.cpp" line="153"/> + <location filename="../../Filters.cpp" line="215"/> + <location filename="../../Filters.cpp" line="254"/> + <source>Full match</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FolderExistsDialog</name> + <message> + <location filename="../../FolderExistsDialog.cpp" line="51"/> + <source>Folder already exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="116"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="126"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ListThread</name> + <message> + <location filename="../../ListThread.cpp" line="1447"/> + <location filename="../../ListThread.cpp" line="2369"/> + <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="1454"/> + <location filename="../../ListThread.cpp" line="2376"/> + <source>Unable to save the transfer list: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1470"/> + <source>Problem reading file, or file-size is 0</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1477"/> + <source>Wrong header: "%1"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1486"/> + <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="1495"/> + <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="1501"/> + <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="1557"/> + <source>Some errors have been found during the line parsing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1565"/> + <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="232"/> + <source>Unable to move the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="93"/> + <location filename="../../MkPath.cpp" line="275"/> + <source>Unable to remove</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ReadThread</name> + <message> + <location filename="../../ReadThread.cpp" line="55"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="184"/> + <source>Internal error reading the source file:block size out of range</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="192"/> + <location filename="../../ReadThread.cpp" line="408"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="233"/> + <location filename="../../ReadThread.cpp" line="456"/> + <source>File truncated during the read, possible data change</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>RenamingRules</name> + <message> + <location filename="../../RenamingRules.ui" line="26"/> + <source>First renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="32"/> + <source>%name% - copy</source> + <extracomment>%name% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="39"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> + <extracomment> should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="49"/> + <source>Second renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="55"/> + <source>%name% - copy (%number%)</source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="62"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="39"/> + <location filename="../../RenamingRules.cpp" line="62"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="43"/> + <location filename="../../RenamingRules.cpp" line="73"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="14"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ScanFileOrFolder</name> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="265"/> + <source>Blacklisted folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="327"/> + <location filename="../../ScanFileOrFolder.cpp" line="393"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="337"/> + <location filename="../../ScanFileOrFolder.cpp" line="403"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="441"/> + <source>This is not a folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="443"/> + <source>The folder does exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="445"/> + <source>The folder is not readable</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="456"/> + <source>Problem with name encoding</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TransferThread</name> + <message> + <location filename="../../TransferThread.cpp" line="235"/> + <location filename="../../TransferThread.cpp" line="663"/> + <location filename="../../TransferThread.cpp" line="735"/> + <location filename="../../TransferThread.cpp" line="1303"/> + <source>File not found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="336"/> + <location filename="../../TransferThread.cpp" line="353"/> + <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="408"/> + <location filename="../../TransferThread.cpp" line="431"/> + <source>Internal error: Already opening</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="572"/> + <source>Drive %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="574"/> + <source>Unknown folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="578"/> + <source>root</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="631"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="641"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="701"/> + <location filename="../../TransferThread.cpp" line="816"/> + <source>The source file doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="741"/> + <location filename="../../TransferThread.cpp" line="828"/> + <source>Unable to do the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="777"/> + <source>The source doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="822"/> + <source>Another file exists at same place</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1124"/> + <source>The checksums do not match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1213"/> + <source>Internal error: The destination is not closed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1227"/> + <source>Internal error: The size transfered doesn't match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1238"/> + <source>Internal error: The buffer is not empty</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1303"/> + <location filename="../../TransferThread.cpp" line="1321"/> + <location filename="../../TransferThread.cpp" line="1336"/> + <source>Unable to change the date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="219"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>WriteThread</name> + <message> + <location filename="../../WriteThread.cpp" line="80"/> + <source>Path resolution error (Empty path)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="268"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="671"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="696"/> + <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="35"/> + <source>Transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="44"/> + <source>Move the whole folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="51"/> + <source>Transfer the file rights</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="61"/> + <source>Keep the file date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="74"/> + <source>Autostart the transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="81"/> + <location filename="../../copyEngineOptions.ui" line="101"/> + <source>Less performance if checked</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="104"/> + <source>Follow the strict order</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="130"/> + <source>Error and collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="136"/> + <source>When folder error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="146"/> + <source>When file error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="172"/> + <source>When file collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="232"/> + <source>When folder collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="263"/> + <source>Check if destination folder exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="270"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="290"/> + <source>Delete partially transferred files</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="303"/> + <source>Rename the original destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="334"/> + <source>Control</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="340"/> + <source>Checksum</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="349"/> + <source>Only after error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="356"/> + <source>Ignore if impossible</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="373"/> + <source>Verify checksums</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="405"/> + <source>Performance</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="411"/> + <source>Parallel buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="418"/> + <location filename="../../copyEngineOptions.ui" line="431"/> + <location filename="../../copyEngineOptions.ui" line="444"/> + <location filename="../../copyEngineOptions.ui" line="481"/> + <location filename="../../copyEngineOptions.ui" line="550"/> + <source>KB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="460"/> + <source>Block size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="467"/> + <source>Sequential buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="474"/> + <source>Enable OS buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="497"/> + <source>OS buffer only if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="504"/> + <source>Transfer algorithm</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="543"/> + <source>Parallelize if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="573"/> + <source>Inode threads</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="580"/> + <location filename="../../copyEngineOptions.ui" line="590"/> + <source>More cpu, but better organisation on the disk</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="593"/> + <source>Order the list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="609"/> + <source>Misc</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="615"/> + <source>Check the disk space</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="625"/> + <source>Use this folder when destination is not set</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="637"/> + <source>Browse</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="659"/> + <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/CopyEngine/Ultracopier/Languages/no/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/no/translation.ts new file mode 100644 index 0000000..3362659 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/Languages/no/translation.ts @@ -0,0 +1,1289 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<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="429"/> + <location filename="../../CopyEngine.cpp" line="451"/> + <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="462"/> + <location filename="../../CopyEngine.cpp" line="484"/> + <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="508"/> + <source>Destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="508"/> + <source>Use the actual destination "%1"?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="717"/> + <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="1047"/> + <location filename="../../CopyEngine.cpp" line="1050"/> + <location filename="../../CopyEngine.cpp" line="1055"/> + <location filename="../../CopyEngine.cpp" line="1059"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1048"/> + <location filename="../../CopyEngine.cpp" line="1052"/> + <location filename="../../CopyEngine.cpp" line="1056"/> + <location filename="../../CopyEngine.cpp" line="1060"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1051"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1053"/> + <location filename="../../CopyEngine.cpp" line="1065"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1057"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1061"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1062"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1063"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1064"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1067"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1068"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1069"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <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="412"/> + <location filename="../../CopyEngineFactory.cpp" line="415"/> + <location filename="../../CopyEngineFactory.cpp" line="420"/> + <location filename="../../CopyEngineFactory.cpp" line="424"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="413"/> + <location filename="../../CopyEngineFactory.cpp" line="417"/> + <location filename="../../CopyEngineFactory.cpp" line="421"/> + <location filename="../../CopyEngineFactory.cpp" line="425"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="416"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="418"/> + <location filename="../../CopyEngineFactory.cpp" line="430"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="422"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="426"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="427"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="428"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="429"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="432"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="433"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="434"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <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="131"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="141"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FileIsSameDialog</name> + <message> + <location filename="../../FileIsSameDialog.cpp" line="105"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="115"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <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="92"/> + <location filename="../../Filters.cpp" line="130"/> + <source>Raw text</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="95"/> + <location filename="../../Filters.cpp" line="133"/> + <source>Simplified regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="98"/> + <location filename="../../Filters.cpp" line="136"/> + <source>Perl's regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="106"/> + <location filename="../../Filters.cpp" line="144"/> + <source>Only on file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="109"/> + <location filename="../../Filters.cpp" line="147"/> + <source>Only on folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="115"/> + <location filename="../../Filters.cpp" line="153"/> + <location filename="../../Filters.cpp" line="215"/> + <location filename="../../Filters.cpp" line="254"/> + <source>Full match</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FolderExistsDialog</name> + <message> + <location filename="../../FolderExistsDialog.cpp" line="51"/> + <source>Folder already exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="116"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="126"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ListThread</name> + <message> + <location filename="../../ListThread.cpp" line="1447"/> + <location filename="../../ListThread.cpp" line="2369"/> + <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="1454"/> + <location filename="../../ListThread.cpp" line="2376"/> + <source>Unable to save the transfer list: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1470"/> + <source>Problem reading file, or file-size is 0</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1477"/> + <source>Wrong header: "%1"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1486"/> + <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="1495"/> + <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="1501"/> + <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="1557"/> + <source>Some errors have been found during the line parsing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1565"/> + <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="232"/> + <source>Unable to move the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="93"/> + <location filename="../../MkPath.cpp" line="275"/> + <source>Unable to remove</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ReadThread</name> + <message> + <location filename="../../ReadThread.cpp" line="55"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="184"/> + <source>Internal error reading the source file:block size out of range</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="192"/> + <location filename="../../ReadThread.cpp" line="408"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="233"/> + <location filename="../../ReadThread.cpp" line="456"/> + <source>File truncated during the read, possible data change</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>RenamingRules</name> + <message> + <location filename="../../RenamingRules.ui" line="26"/> + <source>First renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="32"/> + <source>%name% - copy</source> + <extracomment>%name% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="39"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> + <extracomment> should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="49"/> + <source>Second renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="55"/> + <source>%name% - copy (%number%)</source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="62"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="39"/> + <location filename="../../RenamingRules.cpp" line="62"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="43"/> + <location filename="../../RenamingRules.cpp" line="73"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="14"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ScanFileOrFolder</name> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="265"/> + <source>Blacklisted folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="327"/> + <location filename="../../ScanFileOrFolder.cpp" line="393"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="337"/> + <location filename="../../ScanFileOrFolder.cpp" line="403"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="441"/> + <source>This is not a folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="443"/> + <source>The folder does exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="445"/> + <source>The folder is not readable</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="456"/> + <source>Problem with name encoding</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TransferThread</name> + <message> + <location filename="../../TransferThread.cpp" line="235"/> + <location filename="../../TransferThread.cpp" line="663"/> + <location filename="../../TransferThread.cpp" line="735"/> + <location filename="../../TransferThread.cpp" line="1303"/> + <source>File not found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="336"/> + <location filename="../../TransferThread.cpp" line="353"/> + <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="408"/> + <location filename="../../TransferThread.cpp" line="431"/> + <source>Internal error: Already opening</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="572"/> + <source>Drive %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="574"/> + <source>Unknown folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="578"/> + <source>root</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="631"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="641"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="701"/> + <location filename="../../TransferThread.cpp" line="816"/> + <source>The source file doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="741"/> + <location filename="../../TransferThread.cpp" line="828"/> + <source>Unable to do the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="777"/> + <source>The source doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="822"/> + <source>Another file exists at same place</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1124"/> + <source>The checksums do not match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1213"/> + <source>Internal error: The destination is not closed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1227"/> + <source>Internal error: The size transfered doesn't match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1238"/> + <source>Internal error: The buffer is not empty</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1303"/> + <location filename="../../TransferThread.cpp" line="1321"/> + <location filename="../../TransferThread.cpp" line="1336"/> + <source>Unable to change the date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="219"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>WriteThread</name> + <message> + <location filename="../../WriteThread.cpp" line="80"/> + <source>Path resolution error (Empty path)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="268"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="671"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="696"/> + <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="35"/> + <source>Transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="44"/> + <source>Move the whole folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="51"/> + <source>Transfer the file rights</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="61"/> + <source>Keep the file date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="74"/> + <source>Autostart the transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="81"/> + <location filename="../../copyEngineOptions.ui" line="101"/> + <source>Less performance if checked</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="104"/> + <source>Follow the strict order</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="130"/> + <source>Error and collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="136"/> + <source>When folder error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="146"/> + <source>When file error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="172"/> + <source>When file collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="232"/> + <source>When folder collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="263"/> + <source>Check if destination folder exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="270"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="290"/> + <source>Delete partially transferred files</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="303"/> + <source>Rename the original destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="334"/> + <source>Control</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="340"/> + <source>Checksum</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="349"/> + <source>Only after error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="356"/> + <source>Ignore if impossible</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="373"/> + <source>Verify checksums</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="405"/> + <source>Performance</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="411"/> + <source>Parallel buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="418"/> + <location filename="../../copyEngineOptions.ui" line="431"/> + <location filename="../../copyEngineOptions.ui" line="444"/> + <location filename="../../copyEngineOptions.ui" line="481"/> + <location filename="../../copyEngineOptions.ui" line="550"/> + <source>KB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="460"/> + <source>Block size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="467"/> + <source>Sequential buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="474"/> + <source>Enable OS buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="497"/> + <source>OS buffer only if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="504"/> + <source>Transfer algorithm</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="543"/> + <source>Parallelize if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="573"/> + <source>Inode threads</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="580"/> + <location filename="../../copyEngineOptions.ui" line="590"/> + <source>More cpu, but better organisation on the disk</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="593"/> + <source>Order the list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="609"/> + <source>Misc</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="615"/> + <source>Check the disk space</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="625"/> + <source>Use this folder when destination is not set</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="637"/> + <source>Browse</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="659"/> + <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/CopyEngine/Ultracopier/Languages/pl/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/pl/translation.ts new file mode 100644 index 0000000..3362659 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/Languages/pl/translation.ts @@ -0,0 +1,1289 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<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="429"/> + <location filename="../../CopyEngine.cpp" line="451"/> + <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="462"/> + <location filename="../../CopyEngine.cpp" line="484"/> + <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="508"/> + <source>Destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="508"/> + <source>Use the actual destination "%1"?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="717"/> + <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="1047"/> + <location filename="../../CopyEngine.cpp" line="1050"/> + <location filename="../../CopyEngine.cpp" line="1055"/> + <location filename="../../CopyEngine.cpp" line="1059"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1048"/> + <location filename="../../CopyEngine.cpp" line="1052"/> + <location filename="../../CopyEngine.cpp" line="1056"/> + <location filename="../../CopyEngine.cpp" line="1060"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1051"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1053"/> + <location filename="../../CopyEngine.cpp" line="1065"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1057"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1061"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1062"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1063"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1064"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1067"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1068"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1069"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <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="412"/> + <location filename="../../CopyEngineFactory.cpp" line="415"/> + <location filename="../../CopyEngineFactory.cpp" line="420"/> + <location filename="../../CopyEngineFactory.cpp" line="424"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="413"/> + <location filename="../../CopyEngineFactory.cpp" line="417"/> + <location filename="../../CopyEngineFactory.cpp" line="421"/> + <location filename="../../CopyEngineFactory.cpp" line="425"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="416"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="418"/> + <location filename="../../CopyEngineFactory.cpp" line="430"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="422"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="426"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="427"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="428"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="429"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="432"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="433"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="434"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <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="131"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="141"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FileIsSameDialog</name> + <message> + <location filename="../../FileIsSameDialog.cpp" line="105"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="115"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <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="92"/> + <location filename="../../Filters.cpp" line="130"/> + <source>Raw text</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="95"/> + <location filename="../../Filters.cpp" line="133"/> + <source>Simplified regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="98"/> + <location filename="../../Filters.cpp" line="136"/> + <source>Perl's regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="106"/> + <location filename="../../Filters.cpp" line="144"/> + <source>Only on file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="109"/> + <location filename="../../Filters.cpp" line="147"/> + <source>Only on folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="115"/> + <location filename="../../Filters.cpp" line="153"/> + <location filename="../../Filters.cpp" line="215"/> + <location filename="../../Filters.cpp" line="254"/> + <source>Full match</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FolderExistsDialog</name> + <message> + <location filename="../../FolderExistsDialog.cpp" line="51"/> + <source>Folder already exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="116"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="126"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ListThread</name> + <message> + <location filename="../../ListThread.cpp" line="1447"/> + <location filename="../../ListThread.cpp" line="2369"/> + <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="1454"/> + <location filename="../../ListThread.cpp" line="2376"/> + <source>Unable to save the transfer list: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1470"/> + <source>Problem reading file, or file-size is 0</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1477"/> + <source>Wrong header: "%1"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1486"/> + <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="1495"/> + <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="1501"/> + <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="1557"/> + <source>Some errors have been found during the line parsing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1565"/> + <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="232"/> + <source>Unable to move the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="93"/> + <location filename="../../MkPath.cpp" line="275"/> + <source>Unable to remove</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ReadThread</name> + <message> + <location filename="../../ReadThread.cpp" line="55"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="184"/> + <source>Internal error reading the source file:block size out of range</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="192"/> + <location filename="../../ReadThread.cpp" line="408"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="233"/> + <location filename="../../ReadThread.cpp" line="456"/> + <source>File truncated during the read, possible data change</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>RenamingRules</name> + <message> + <location filename="../../RenamingRules.ui" line="26"/> + <source>First renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="32"/> + <source>%name% - copy</source> + <extracomment>%name% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="39"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> + <extracomment> should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="49"/> + <source>Second renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="55"/> + <source>%name% - copy (%number%)</source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="62"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="39"/> + <location filename="../../RenamingRules.cpp" line="62"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="43"/> + <location filename="../../RenamingRules.cpp" line="73"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="14"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ScanFileOrFolder</name> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="265"/> + <source>Blacklisted folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="327"/> + <location filename="../../ScanFileOrFolder.cpp" line="393"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="337"/> + <location filename="../../ScanFileOrFolder.cpp" line="403"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="441"/> + <source>This is not a folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="443"/> + <source>The folder does exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="445"/> + <source>The folder is not readable</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="456"/> + <source>Problem with name encoding</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TransferThread</name> + <message> + <location filename="../../TransferThread.cpp" line="235"/> + <location filename="../../TransferThread.cpp" line="663"/> + <location filename="../../TransferThread.cpp" line="735"/> + <location filename="../../TransferThread.cpp" line="1303"/> + <source>File not found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="336"/> + <location filename="../../TransferThread.cpp" line="353"/> + <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="408"/> + <location filename="../../TransferThread.cpp" line="431"/> + <source>Internal error: Already opening</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="572"/> + <source>Drive %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="574"/> + <source>Unknown folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="578"/> + <source>root</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="631"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="641"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="701"/> + <location filename="../../TransferThread.cpp" line="816"/> + <source>The source file doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="741"/> + <location filename="../../TransferThread.cpp" line="828"/> + <source>Unable to do the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="777"/> + <source>The source doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="822"/> + <source>Another file exists at same place</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1124"/> + <source>The checksums do not match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1213"/> + <source>Internal error: The destination is not closed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1227"/> + <source>Internal error: The size transfered doesn't match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1238"/> + <source>Internal error: The buffer is not empty</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1303"/> + <location filename="../../TransferThread.cpp" line="1321"/> + <location filename="../../TransferThread.cpp" line="1336"/> + <source>Unable to change the date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="219"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>WriteThread</name> + <message> + <location filename="../../WriteThread.cpp" line="80"/> + <source>Path resolution error (Empty path)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="268"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="671"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="696"/> + <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="35"/> + <source>Transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="44"/> + <source>Move the whole folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="51"/> + <source>Transfer the file rights</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="61"/> + <source>Keep the file date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="74"/> + <source>Autostart the transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="81"/> + <location filename="../../copyEngineOptions.ui" line="101"/> + <source>Less performance if checked</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="104"/> + <source>Follow the strict order</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="130"/> + <source>Error and collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="136"/> + <source>When folder error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="146"/> + <source>When file error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="172"/> + <source>When file collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="232"/> + <source>When folder collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="263"/> + <source>Check if destination folder exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="270"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="290"/> + <source>Delete partially transferred files</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="303"/> + <source>Rename the original destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="334"/> + <source>Control</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="340"/> + <source>Checksum</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="349"/> + <source>Only after error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="356"/> + <source>Ignore if impossible</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="373"/> + <source>Verify checksums</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="405"/> + <source>Performance</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="411"/> + <source>Parallel buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="418"/> + <location filename="../../copyEngineOptions.ui" line="431"/> + <location filename="../../copyEngineOptions.ui" line="444"/> + <location filename="../../copyEngineOptions.ui" line="481"/> + <location filename="../../copyEngineOptions.ui" line="550"/> + <source>KB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="460"/> + <source>Block size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="467"/> + <source>Sequential buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="474"/> + <source>Enable OS buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="497"/> + <source>OS buffer only if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="504"/> + <source>Transfer algorithm</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="543"/> + <source>Parallelize if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="573"/> + <source>Inode threads</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="580"/> + <location filename="../../copyEngineOptions.ui" line="590"/> + <source>More cpu, but better organisation on the disk</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="593"/> + <source>Order the list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="609"/> + <source>Misc</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="615"/> + <source>Check the disk space</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="625"/> + <source>Use this folder when destination is not set</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="637"/> + <source>Browse</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="659"/> + <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/CopyEngine/Ultracopier/Languages/pt/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/pt/translation.ts new file mode 100644 index 0000000..3362659 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/Languages/pt/translation.ts @@ -0,0 +1,1289 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<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="429"/> + <location filename="../../CopyEngine.cpp" line="451"/> + <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="462"/> + <location filename="../../CopyEngine.cpp" line="484"/> + <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="508"/> + <source>Destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="508"/> + <source>Use the actual destination "%1"?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="717"/> + <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="1047"/> + <location filename="../../CopyEngine.cpp" line="1050"/> + <location filename="../../CopyEngine.cpp" line="1055"/> + <location filename="../../CopyEngine.cpp" line="1059"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1048"/> + <location filename="../../CopyEngine.cpp" line="1052"/> + <location filename="../../CopyEngine.cpp" line="1056"/> + <location filename="../../CopyEngine.cpp" line="1060"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1051"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1053"/> + <location filename="../../CopyEngine.cpp" line="1065"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1057"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1061"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1062"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1063"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1064"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1067"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1068"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1069"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <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="412"/> + <location filename="../../CopyEngineFactory.cpp" line="415"/> + <location filename="../../CopyEngineFactory.cpp" line="420"/> + <location filename="../../CopyEngineFactory.cpp" line="424"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="413"/> + <location filename="../../CopyEngineFactory.cpp" line="417"/> + <location filename="../../CopyEngineFactory.cpp" line="421"/> + <location filename="../../CopyEngineFactory.cpp" line="425"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="416"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="418"/> + <location filename="../../CopyEngineFactory.cpp" line="430"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="422"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="426"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="427"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="428"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="429"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="432"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="433"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="434"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <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="131"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="141"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FileIsSameDialog</name> + <message> + <location filename="../../FileIsSameDialog.cpp" line="105"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="115"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <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="92"/> + <location filename="../../Filters.cpp" line="130"/> + <source>Raw text</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="95"/> + <location filename="../../Filters.cpp" line="133"/> + <source>Simplified regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="98"/> + <location filename="../../Filters.cpp" line="136"/> + <source>Perl's regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="106"/> + <location filename="../../Filters.cpp" line="144"/> + <source>Only on file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="109"/> + <location filename="../../Filters.cpp" line="147"/> + <source>Only on folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="115"/> + <location filename="../../Filters.cpp" line="153"/> + <location filename="../../Filters.cpp" line="215"/> + <location filename="../../Filters.cpp" line="254"/> + <source>Full match</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FolderExistsDialog</name> + <message> + <location filename="../../FolderExistsDialog.cpp" line="51"/> + <source>Folder already exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="116"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="126"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ListThread</name> + <message> + <location filename="../../ListThread.cpp" line="1447"/> + <location filename="../../ListThread.cpp" line="2369"/> + <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="1454"/> + <location filename="../../ListThread.cpp" line="2376"/> + <source>Unable to save the transfer list: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1470"/> + <source>Problem reading file, or file-size is 0</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1477"/> + <source>Wrong header: "%1"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1486"/> + <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="1495"/> + <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="1501"/> + <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="1557"/> + <source>Some errors have been found during the line parsing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1565"/> + <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="232"/> + <source>Unable to move the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="93"/> + <location filename="../../MkPath.cpp" line="275"/> + <source>Unable to remove</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ReadThread</name> + <message> + <location filename="../../ReadThread.cpp" line="55"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="184"/> + <source>Internal error reading the source file:block size out of range</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="192"/> + <location filename="../../ReadThread.cpp" line="408"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="233"/> + <location filename="../../ReadThread.cpp" line="456"/> + <source>File truncated during the read, possible data change</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>RenamingRules</name> + <message> + <location filename="../../RenamingRules.ui" line="26"/> + <source>First renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="32"/> + <source>%name% - copy</source> + <extracomment>%name% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="39"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> + <extracomment> should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="49"/> + <source>Second renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="55"/> + <source>%name% - copy (%number%)</source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="62"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="39"/> + <location filename="../../RenamingRules.cpp" line="62"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="43"/> + <location filename="../../RenamingRules.cpp" line="73"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="14"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ScanFileOrFolder</name> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="265"/> + <source>Blacklisted folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="327"/> + <location filename="../../ScanFileOrFolder.cpp" line="393"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="337"/> + <location filename="../../ScanFileOrFolder.cpp" line="403"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="441"/> + <source>This is not a folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="443"/> + <source>The folder does exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="445"/> + <source>The folder is not readable</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="456"/> + <source>Problem with name encoding</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TransferThread</name> + <message> + <location filename="../../TransferThread.cpp" line="235"/> + <location filename="../../TransferThread.cpp" line="663"/> + <location filename="../../TransferThread.cpp" line="735"/> + <location filename="../../TransferThread.cpp" line="1303"/> + <source>File not found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="336"/> + <location filename="../../TransferThread.cpp" line="353"/> + <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="408"/> + <location filename="../../TransferThread.cpp" line="431"/> + <source>Internal error: Already opening</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="572"/> + <source>Drive %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="574"/> + <source>Unknown folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="578"/> + <source>root</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="631"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="641"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="701"/> + <location filename="../../TransferThread.cpp" line="816"/> + <source>The source file doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="741"/> + <location filename="../../TransferThread.cpp" line="828"/> + <source>Unable to do the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="777"/> + <source>The source doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="822"/> + <source>Another file exists at same place</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1124"/> + <source>The checksums do not match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1213"/> + <source>Internal error: The destination is not closed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1227"/> + <source>Internal error: The size transfered doesn't match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1238"/> + <source>Internal error: The buffer is not empty</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1303"/> + <location filename="../../TransferThread.cpp" line="1321"/> + <location filename="../../TransferThread.cpp" line="1336"/> + <source>Unable to change the date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="219"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>WriteThread</name> + <message> + <location filename="../../WriteThread.cpp" line="80"/> + <source>Path resolution error (Empty path)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="268"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="671"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="696"/> + <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="35"/> + <source>Transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="44"/> + <source>Move the whole folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="51"/> + <source>Transfer the file rights</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="61"/> + <source>Keep the file date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="74"/> + <source>Autostart the transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="81"/> + <location filename="../../copyEngineOptions.ui" line="101"/> + <source>Less performance if checked</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="104"/> + <source>Follow the strict order</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="130"/> + <source>Error and collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="136"/> + <source>When folder error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="146"/> + <source>When file error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="172"/> + <source>When file collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="232"/> + <source>When folder collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="263"/> + <source>Check if destination folder exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="270"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="290"/> + <source>Delete partially transferred files</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="303"/> + <source>Rename the original destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="334"/> + <source>Control</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="340"/> + <source>Checksum</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="349"/> + <source>Only after error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="356"/> + <source>Ignore if impossible</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="373"/> + <source>Verify checksums</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="405"/> + <source>Performance</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="411"/> + <source>Parallel buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="418"/> + <location filename="../../copyEngineOptions.ui" line="431"/> + <location filename="../../copyEngineOptions.ui" line="444"/> + <location filename="../../copyEngineOptions.ui" line="481"/> + <location filename="../../copyEngineOptions.ui" line="550"/> + <source>KB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="460"/> + <source>Block size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="467"/> + <source>Sequential buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="474"/> + <source>Enable OS buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="497"/> + <source>OS buffer only if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="504"/> + <source>Transfer algorithm</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="543"/> + <source>Parallelize if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="573"/> + <source>Inode threads</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="580"/> + <location filename="../../copyEngineOptions.ui" line="590"/> + <source>More cpu, but better organisation on the disk</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="593"/> + <source>Order the list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="609"/> + <source>Misc</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="615"/> + <source>Check the disk space</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="625"/> + <source>Use this folder when destination is not set</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="637"/> + <source>Browse</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="659"/> + <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/CopyEngine/Ultracopier/Languages/ru/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/ru/translation.ts new file mode 100644 index 0000000..f53fff3 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/Languages/ru/translation.ts @@ -0,0 +1,1293 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="ru" sourcelanguage="en"> +<context> + <name>AvancedQFile</name> + <message> + <location filename="../../AvancedQFile.cpp" line="26"/> + <location filename="../../AvancedQFile.cpp" line="57"/> + <location filename="../../AvancedQFile.cpp" line="88"/> + <source>Not supported on this platform</source> + <translation>ŠŠµ ŠæŠ¾Š“Š“ŠµŃŠ¶ŠøŠ²Š°ŠµŃŃŃ Š½Š° ŃŃŠ¾Š¹ ŠæŠ»Š°ŃŃŠ¾ŃŠ¼Šµ</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="40"/> + <source>Last modified date is wrong</source> + <translation>ŠŠ°ŃŠ° Š¾Š±Š½Š¾Š²Š»ŠµŠ½ŠøŃ Š½ŠµŠæŃŠ°Š²ŠøŠ»ŃŠ½Š¾</translation> + </message> + <message> + <location filename="../../AvancedQFile.cpp" line="71"/> + <source>Last access date is wrong</source> + <translation>ŠŠ°ŃŠ° ŠæŠ¾ŃŠ»ŠµŠ“Š½ŠµŠ³Š¾ Š“Š¾ŃŃŃŠæŠ° Š½Šµ ŃŠ°Šŗ</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="429"/> + <location filename="../../CopyEngine.cpp" line="451"/> + <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="462"/> + <location filename="../../CopyEngine.cpp" line="484"/> + <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="508"/> + <source>Destination</source> + <translation type="unfinished">Š½Š°Š·Š½Š°ŃŠµŠ½ŠøŠµ</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="508"/> + <source>Use the actual destination "%1"?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="717"/> + <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="1047"/> + <location filename="../../CopyEngine.cpp" line="1050"/> + <location filename="../../CopyEngine.cpp" line="1055"/> + <location filename="../../CopyEngine.cpp" line="1059"/> + <source>Ask</source> + <translation type="unfinished">ŠæŃŠ¾ŃŠøŃŃ</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1048"/> + <location filename="../../CopyEngine.cpp" line="1052"/> + <location filename="../../CopyEngine.cpp" line="1056"/> + <location filename="../../CopyEngine.cpp" line="1060"/> + <source>Skip</source> + <translation type="unfinished">ŠæŃŠ¾ŠæŃŃŠŗŠ°ŃŃ</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1051"/> + <source>Merge</source> + <translation type="unfinished">ŃŠ»ŠøŃŠ½ŠøŠµ</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1053"/> + <location filename="../../CopyEngine.cpp" line="1065"/> + <source>Rename</source> + <translation type="unfinished">ŠæŠµŃŠµŠøŠ¼ŠµŠ½Š¾Š²Š°ŃŃ</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1057"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1061"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1062"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1063"/> + <source>Overwrite if newer</source> + <translation type="unfinished">ŠŠ°Š¼ŠµŠ½ŠøŃŃ, ŠµŃŠ»Šø Š½Š¾Š²ŠµŠµ</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1064"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1067"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1068"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1069"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <source>Options error</source> + <translation type="unfinished">ŠŠæŃŠøŠø Š¾ŃŠøŠ±ŠŗŠµ</translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <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="412"/> + <location filename="../../CopyEngineFactory.cpp" line="415"/> + <location filename="../../CopyEngineFactory.cpp" line="420"/> + <location filename="../../CopyEngineFactory.cpp" line="424"/> + <source>Ask</source> + <translation type="unfinished">ŠæŃŠ¾ŃŠøŃŃ</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="413"/> + <location filename="../../CopyEngineFactory.cpp" line="417"/> + <location filename="../../CopyEngineFactory.cpp" line="421"/> + <location filename="../../CopyEngineFactory.cpp" line="425"/> + <source>Skip</source> + <translation type="unfinished">ŠæŃŠ¾ŠæŃŃŠŗŠ°ŃŃ</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="416"/> + <source>Merge</source> + <translation type="unfinished">ŃŠ»ŠøŃŠ½ŠøŠµ</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="418"/> + <location filename="../../CopyEngineFactory.cpp" line="430"/> + <source>Rename</source> + <translation type="unfinished">ŠæŠµŃŠµŠøŠ¼ŠµŠ½Š¾Š²Š°ŃŃ</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="422"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="426"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="427"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="428"/> + <source>Overwrite if newer</source> + <translation type="unfinished">ŠŠ°Š¼ŠµŠ½ŠøŃŃ, ŠµŃŠ»Šø Š½Š¾Š²ŠµŠµ</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="429"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="432"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="433"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="434"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <source>Options error</source> + <translation type="unfinished">ŠŠæŃŠøŠø Š¾ŃŠøŠ±ŠŗŠµ</translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <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="131"/> + <source>%1 - copy</source> + <translation type="unfinished">%1 - ŠŗŠ¾ŠæŠøŃ</translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="141"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished">%1 - ŠŗŠ¾ŠæŠøŃ (%2)</translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Error</source> + <translation type="unfinished">Š¾ŃŠøŠ±ŠŗŠ°</translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FileIsSameDialog</name> + <message> + <location filename="../../FileIsSameDialog.cpp" line="105"/> + <source>%1 - copy</source> + <translation type="unfinished">%1 - ŠŗŠ¾ŠæŠøŃ</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="115"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished">%1 - ŠŗŠ¾ŠæŠøŃ (%2)</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <source>Error</source> + <translation type="unfinished">Š¾ŃŠøŠ±ŠŗŠ°</translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <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>ŠŠ¾ŠøŃŠŗ ŠæŠ¾ ŃŠ°Š¹ŃŃ:</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="43"/> + <source>Search type:</source> + <translation>Š¢ŠøŠæ ŠæŠ¾ŠøŃŠŗŠ°:</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="51"/> + <source>Raw text</source> + <translation>Š”ŃŃŠ¾Š¹ ŃŠµŠŗŃŃ</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="56"/> + <source>Simplified regex</source> + <translation>ŃŠæŃŠ¾ŃŠµŠ½Š½ŃŠ¹ regex</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="61"/> + <source>Perl's regex</source> + <translation>Perl's regex</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="69"/> + <source>Apply on:</source> + <translation>ŠŠ°Š½ŠµŃŠøŃŠµ Š½Š°:</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="77"/> + <source>File</source> + <translation>ŃŠ°Š¹Š»</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="82"/> + <source>Folder</source> + <translation>ŠæŠ°ŠæŠŗŠ°</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="87"/> + <source>File and folder</source> + <translation>Š¤Š°Š¹Š»Š¾Š² Šø ŠæŠ°ŠæŠ¾Šŗ</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="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>ŠŗŠ¾Š½ŃŃŠ¾Š»Ń</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="115"/> + <source>Test string:</source> + <translation>ŠŃŠæŃŃŠ°Š½ŠøŠµ ŃŃŃŠ¾ŠŗŠø:</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="17"/> + <source>Filters dialog</source> + <translation>Š¤ŠøŠ»ŃŃŃŃ Š“ŠøŠ°Š»Š¾Š³Š¾Š²Š¾Š³Š¾</translation> + </message> + <message> + <location filename="../../FilterRules.ui" line="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>Š ŠµŠ³ŃŠ»ŃŃŠ½Š¾Šµ Š“ŠµŠ¹ŃŃŠ²ŃŠµŃ</translation> + </message> +</context> +<context> + <name>Filters</name> + <message> + <location filename="../../Filters.ui" line="14"/> + <source>Filters</source> + <translation>Š¤ŠøŠ»ŃŃŃŃ</translation> + </message> + <message> + <location filename="../../Filters.ui" line="30"/> + <source>Exclusion 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>ŠŠø = ŠŠŗŠ»ŃŃŠøŃŃ Š²ŃŠµ</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="92"/> + <location filename="../../Filters.cpp" line="130"/> + <source>Raw text</source> + <translation>Š”ŃŃŠ¾Š¹ ŃŠµŠŗŃŃ</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="95"/> + <location filename="../../Filters.cpp" line="133"/> + <source>Simplified regex</source> + <translation>Š£ŠæŃŠ¾ŃŠµŠ½Š½Š°Ń ŃŠµŠ³ŃŠ»ŃŃŠ½ŃŃ
Š²ŃŃŠ°Š¶ŠµŠ½ŠøŠ¹</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="98"/> + <location filename="../../Filters.cpp" line="136"/> + <source>Perl's regex</source> + <translation>Perl's regex</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="106"/> + <location filename="../../Filters.cpp" line="144"/> + <source>Only on file</source> + <translation>Š¢Š¾Š»ŃŠŗŠ¾ Š½Š° ŃŠ°Š¹Š»</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="109"/> + <location filename="../../Filters.cpp" line="147"/> + <source>Only on folder</source> + <translation>Š¢Š¾Š»ŃŠŗŠ¾ Š½Š° ŠæŠ°ŠæŠŗŃ</translation> + </message> + <message> + <location filename="../../Filters.cpp" line="115"/> + <location filename="../../Filters.cpp" line="153"/> + <location filename="../../Filters.cpp" line="215"/> + <location filename="../../Filters.cpp" line="254"/> + <source>Full match</source> + <translation>ŠŠ¾Š»Š½ŃŠ¹ Š¼Š°ŃŃ</translation> + </message> +</context> +<context> + <name>FolderExistsDialog</name> + <message> + <location filename="../../FolderExistsDialog.cpp" line="51"/> + <source>Folder already exists</source> + <translation type="unfinished">ŠŠ°ŠæŠŗŠ° ŃŠ¶Šµ ŃŃŃŠµŃŃŠ²ŃŠµŃ</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="116"/> + <source>%1 - copy</source> + <translation type="unfinished">%1 - ŠŗŠ¾ŠæŠøŃ</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="126"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished">%1 - ŠŗŠ¾ŠæŠøŃ (%2)</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Error</source> + <translation type="unfinished">Š¾ŃŠøŠ±ŠŗŠ°</translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ListThread</name> + <message> + <location filename="../../ListThread.cpp" line="1447"/> + <location filename="../../ListThread.cpp" line="2369"/> + <source>Unable do to move or copy item into wrong forced mode: %1</source> + <translation>ŠŠµŠ²Š¾Š·Š¼Š¾Š¶Š½Š¾ ŃŠ“ŠµŠ»Š°ŃŃ, ŃŃŠ¾Š±Ń ŃŠŗŠ¾ŠæŠøŃŠ¾Š²Š°ŃŃ ŠøŠ»Šø ŠæŠµŃŠµŠ¼ŠµŃŃŠøŃŃ ŃŠ»ŠµŠ¼ŠµŠ½Ń Š² Š½ŠµŠæŃŠ°Š²ŠøŠ»ŃŠ½Š¾Š¼ ŃŠ¾ŃŃŠøŃŠ¾Š²Š°Š½Š½Š¾Š¼ ŃŠµŠ¶ŠøŠ¼Šµ: %1</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1454"/> + <location filename="../../ListThread.cpp" line="2376"/> + <source>Unable to save the transfer list: %1</source> + <translation>ŠŠµŠ²Š¾Š·Š¼Š¾Š¶Š½Š¾ ŃŠ¾Ń
ŃŠ°Š½ŠøŃŃ ŃŃŠ°Š½ŃŃŠµŃ: %1</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1470"/> + <source>Problem reading file, or file-size is 0</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1477"/> + <source>Wrong header: "%1"</source> + <translation>ŠŠµŠæŃŠ°Š²ŠøŠ»ŃŠ½ŃŠ¹ Š·Š°Š³Š¾Š»Š¾Š²Š¾Šŗ: "%1"</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1486"/> + <source>The transfer list is in mixed mode, but this instance is not in this mode</source> + <translation>Š¢ŃŠ°Š½ŃŃŠµŃ Š² ŃŠ¼ŠµŃŠ°Š½Š½Š¾Š¼ ŃŠµŠ¶ŠøŠ¼Šµ, Š½Š¾ ŃŃŠ¾Ń ŃŠŗŠ·ŠµŠ¼ŠæŠ»ŃŃ Š½Šµ Š² ŃŃŠ¾Š¼ ŃŠµŠ¶ŠøŠ¼Šµ</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1495"/> + <source>The transfer list is in copy mode, but this instance is not in this mode</source> + <translation>ŠŠµŃŠµŠ“Š°ŃŠ° ŃŠæŠøŃŠŗŠ° Š² ŃŠµŠ¶ŠøŠ¼Šµ ŠŗŠ¾ŠæŠøŃŠ¾Š²Š°Š½ŠøŃ, Š½Š¾ ŃŃŠ¾Ń ŃŠŗŠ·ŠµŠ¼ŠæŠ»ŃŃ Š½Šµ Š² ŃŃŠ¾Š¼ ŃŠµŠ¶ŠøŠ¼Šµ</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1501"/> + <source>The transfer list is in move mode, but this instance is not in this mode</source> + <translation>Š¢ŃŠ°Š½ŃŃŠµŃ Š² ŃŠµŠ¶ŠøŠ¼ ŠæŠµŃŠµŠ¼ŠµŃŠµŠ½ŠøŃ, Š½Š¾ ŃŃŠ¾Ń ŃŠŗŠ·ŠµŠ¼ŠæŠ»ŃŃ Š½Šµ Š² ŃŃŠ¾Š¼ ŃŠµŠ¶ŠøŠ¼Šµ</translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1557"/> + <source>Some errors have been found during the line parsing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1565"/> + <source>Unable to open the transfer list: %1</source> + <translation>ŠŠµ ŃŠ“Š°ŠµŃŃŃ Š¾ŃŠŗŃŃŃŃ ŃŃŠ°Š½ŃŃŠµŃ: %1</translation> + </message> +</context> +<context> + <name>MkPath</name> + <message> + <location filename="../../MkPath.cpp" line="142"/> + <source>Unable to create the folder</source> + <translation>ŠŠµŠ²Š¾Š·Š¼Š¾Š¶Š½Š¾ ŃŠ¾Š·Š“Š°ŃŃ ŠæŠ°ŠæŠŗŃ</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="232"/> + <source>Unable to move the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="93"/> + <location filename="../../MkPath.cpp" line="275"/> + <source>Unable to remove</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ReadThread</name> + <message> + <location filename="../../ReadThread.cpp" line="55"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="184"/> + <source>Internal error reading the source file:block size out of range</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="192"/> + <location filename="../../ReadThread.cpp" line="408"/> + <source>Unable to read the source file: </source> + <translation>ŠŠµŠ²Š¾Š·Š¼Š¾Š¶Š½Š¾ ŠæŃŠ¾ŃŠøŃŠ°ŃŃ ŠøŃŃ
Š¾Š“Š½ŃŠ¹ ŃŠ°Š¹Š»: </translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="233"/> + <location filename="../../ReadThread.cpp" line="456"/> + <source>File truncated during the read, possible data change</source> + <translation>Š¤Š°Š¹Š» ŃŃŠµŃŠµŠ½Ń Š²Š¾ Š²ŃŠµŠ¼Ń ŃŃŠµŠ½ŠøŃ, Š²Š¾Š·Š¼Š¾Š¶Š½Š¾ŃŃŃ ŠøŠ·Š¼ŠµŠ½ŠµŠ½ŠøŃ Š“Š°Š½Š½ŃŃ
</translation> + </message> +</context> +<context> + <name>RenamingRules</name> + <message> + <location filename="../../RenamingRules.ui" line="26"/> + <source>First renaming</source> + <translation>ŠŠµŃŠ²Š¾Šµ ŠæŠµŃŠµŠøŠ¼ŠµŠ½Š¾Š²Š°Š½ŠøŠµ</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="32"/> + <source>%name% - copy</source> + <extracomment>%name% should not be translated</extracomment> + <translation>%name% - ŠŗŠ¾ŠæŠøŃ</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="39"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> + <extracomment> should not be translated</extracomment> + <translation><html><head/><body><p>ŠŠµŃŠµŠ¼ŠµŠ½Š½ŃŠµ: <span style=" font-weight:600;">%name%</span> ŠæŠ¾ Š¾ŃŠøŠ³ŠøŠ½Š°Š»ŃŠ½Š¾Š¼Ń Š½Š°Š·Š²Š°Š½ŠøŃ ŃŠ°Š¹Š»Š°</p></body></html></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="49"/> + <source>Second renaming</source> + <translation>ŠŃŠ¾ŃŠ¾Šµ ŠæŠµŃŠµŠøŠ¼ŠµŠ½Š¾Š²Š°Š½ŠøŠµ</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="55"/> + <source>%name% - copy (%number%)</source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation>%name% - ŠŗŠ¾ŠæŠøŃ (%number%)</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="62"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation><html><head/><body><p>ŠŠµŃŠµŠ¼ŠµŠ½Š½ŃŠµ: <span style=" font-weight:600;">%name%</span> ŠæŠ¾ Š¾ŃŠøŠ³ŠøŠ½Š°Š»ŃŠ½Š¾Š¼Ń Š½Š°Š·Š²Š°Š½ŠøŃ ŃŠ°Š¹Š»Š°</p><p><span style=" font-weight:600;">%number%</span> Š·Š° Š“Š¾ŠæŠ¾Š»Š½ŠøŃŠµŠ»ŃŠ½ŃŠ¹ Š½Š¾Š¼ŠµŃ</p></body></html></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="39"/> + <location filename="../../RenamingRules.cpp" line="62"/> + <source>%1 - copy</source> + <translation>%1 - ŠŗŠ¾ŠæŠøŃ</translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="43"/> + <location filename="../../RenamingRules.cpp" line="73"/> + <source>%1 - copy (%2)</source> + <translation>%1 - ŠŗŠ¾ŠæŠøŃ (%2)</translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="14"/> + <source>Renaming rules</source> + <translation>ŠŠµŃŠµŠøŠ¼ŠµŠ½Š¾Š²Š°Š½ŠøŠµ ŠæŃŠ°Š²ŠøŠ»Š°</translation> + </message> +</context> +<context> + <name>ScanFileOrFolder</name> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="265"/> + <source>Blacklisted folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="327"/> + <location filename="../../ScanFileOrFolder.cpp" line="393"/> + <source>%1 - copy</source> + <translation type="unfinished">%1 - ŠŗŠ¾ŠæŠøŃ</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="337"/> + <location filename="../../ScanFileOrFolder.cpp" line="403"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished">%1 - ŠŗŠ¾ŠæŠøŃ (%2)</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="441"/> + <source>This is not a folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="443"/> + <source>The folder does exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The folder not exists</source> + <translation type="obsolete">ŠŠ°ŠæŠŗŠ° Š½Šµ ŃŃŃŠµŃŃŠ²ŃŠµŃ</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="445"/> + <source>The folder is not readable</source> + <translation type="unfinished">ŠŠ°ŠæŠŗŠø Š½Šµ ŃŠøŃŠ°ŠµŃŃŃ</translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="456"/> + <source>Problem with name encoding</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TransferThread</name> + <message> + <location filename="../../TransferThread.cpp" line="235"/> + <location filename="../../TransferThread.cpp" line="663"/> + <location filename="../../TransferThread.cpp" line="735"/> + <location filename="../../TransferThread.cpp" line="1303"/> + <source>File not found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="336"/> + <location filename="../../TransferThread.cpp" line="353"/> + <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="408"/> + <location filename="../../TransferThread.cpp" line="431"/> + <source>Internal error: Already opening</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="572"/> + <source>Drive %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="574"/> + <source>Unknown folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="578"/> + <source>root</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="631"/> + <source>%1 - copy</source> + <translation type="unfinished">%1 - ŠŗŠ¾ŠæŠøŃ</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="641"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished">%1 - ŠŗŠ¾ŠæŠøŃ (%2)</translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="701"/> + <location filename="../../TransferThread.cpp" line="816"/> + <source>The source file doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="741"/> + <location filename="../../TransferThread.cpp" line="828"/> + <source>Unable to do the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="777"/> + <source>The source doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="822"/> + <source>Another file exists at same place</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1124"/> + <source>The checksums do not match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1213"/> + <source>Internal error: The destination is not closed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1227"/> + <source>Internal error: The size transfered doesn't match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1238"/> + <source>Internal error: The buffer is not empty</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1303"/> + <location filename="../../TransferThread.cpp" line="1321"/> + <location filename="../../TransferThread.cpp" line="1336"/> + <source>Unable to change the date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="219"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>WriteThread</name> + <message> + <location filename="../../WriteThread.cpp" line="80"/> + <source>Path resolution error (Empty path)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="268"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="671"/> + <source>Unable to read the source file: </source> + <translation>ŠŠµŠ²Š¾Š·Š¼Š¾Š¶Š½Š¾ ŠæŃŠ¾ŃŠøŃŠ°ŃŃ ŠøŃŃ
Š¾Š“Š½ŃŠ¹ ŃŠ°Š¹Š»: </translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="696"/> + <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="35"/> + <source>Transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="44"/> + <source>Move the whole folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="51"/> + <source>Transfer the file rights</source> + <translation type="unfinished">ŠŠµŃŠµŠ“Š°ŃŠ° ŃŠ°Š¹Š»Š¾Š² ŠæŃŠ°Š²</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="61"/> + <source>Keep the file date</source> + <translation type="unfinished">ŠŠµŃŠ¶ŠøŃŠµ Š“Š°ŃŃ ŃŠ°Š¹Š»Š°</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="74"/> + <source>Autostart the transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="81"/> + <location filename="../../copyEngineOptions.ui" line="101"/> + <source>Less performance if checked</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="104"/> + <source>Follow the strict order</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="130"/> + <source>Error and collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="136"/> + <source>When folder error</source> + <translation type="unfinished">ŠŠ¾Š³Š“Š° ŠæŠ°ŠæŠŗŠ° Š¾ŃŠøŠ±ŠŗŠ°</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="146"/> + <source>When file error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="172"/> + <source>When file collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="232"/> + <source>When folder collision</source> + <translation type="unfinished">ŠŠ¾Š³Š“Š° ŠæŠ°ŠæŠŗŠ° ŃŃŠ¾Š»ŠŗŠ½Š¾Š²ŠµŠ½ŠøŃ</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="263"/> + <source>Check if destination folder exists</source> + <translation type="unfinished">Š£Š±ŠµŠ“ŠøŃŠµŃŃ, ŃŃŠ¾ ŠæŠ°ŠæŠŗŠ° ŃŃŃŠµŃŃŠ²ŃŠµŃ</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="270"/> + <source>Renaming rules</source> + <translation type="unfinished">ŠŠµŃŠµŠøŠ¼ŠµŠ½Š¾Š²Š°Š½ŠøŠµ ŠæŃŠ°Š²ŠøŠ»Š°</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="290"/> + <source>Delete partially transferred files</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="303"/> + <source>Rename the original destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="334"/> + <source>Control</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="340"/> + <source>Checksum</source> + <translation type="unfinished">ŠŠ¾Š½ŃŃŠ¾Š»ŃŠ½Š°Ń</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="349"/> + <source>Only after error</source> + <translation type="unfinished">Š¢Š¾Š»ŃŠŗŠ¾ ŠæŠ¾ŃŠ»Šµ ŃŠ¾Š³Š¾, ŠŗŠ°Šŗ Š¾ŃŠøŠ±ŠŗŠ°</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="356"/> + <source>Ignore if impossible</source> + <translation type="unfinished">ŠŠ³Š½Š¾ŃŠøŃŠ¾Š²Š°ŃŃ, ŠµŃŠ»Šø Š½ŠµŠ²Š¾Š·Š¼Š¾Š¶Š½Š¾</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="373"/> + <source>Verify checksums</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="405"/> + <source>Performance</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="411"/> + <source>Parallel buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="418"/> + <location filename="../../copyEngineOptions.ui" line="431"/> + <location filename="../../copyEngineOptions.ui" line="444"/> + <location filename="../../copyEngineOptions.ui" line="481"/> + <location filename="../../copyEngineOptions.ui" line="550"/> + <source>KB</source> + <translation type="unfinished">KB</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="460"/> + <source>Block size</source> + <translation type="unfinished">ŃŠ°Š·Š¼ŠµŃ Š±Š»Š¾ŠŗŠ°</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="467"/> + <source>Sequential buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="474"/> + <source>Enable OS buffer</source> + <translation type="unfinished">ŠŠŗŠ»ŃŃŠøŃŃ OS Š±ŃŃŠµŃ</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="497"/> + <source>OS buffer only if smaller than</source> + <translation type="unfinished">ŠŠ” Š±ŃŃŠµŃ, ŃŠ¾Š»ŃŠŗŠ¾ ŠµŃŠ»Šø Š¼ŠµŠ½ŃŃŠµ</translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="504"/> + <source>Transfer algorithm</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="543"/> + <source>Parallelize if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="573"/> + <source>Inode threads</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="580"/> + <location filename="../../copyEngineOptions.ui" line="590"/> + <source>More cpu, but better organisation on the disk</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="593"/> + <source>Order the list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="609"/> + <source>Misc</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="615"/> + <source>Check the disk space</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="625"/> + <source>Use this folder when destination is not set</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="637"/> + <source>Browse</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="659"/> + <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>Š¾ŃŠøŠ±ŠŗŠ°</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="59"/> + <source>Size</source> + <translation>ŃŠ°Š·Š¼ŠµŃ</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="76"/> + <source>Modified</source> + <translation>Š¼Š¾Š“ŠøŃŠøŃŠøŃŠ¾Š²Š°Š½Š½ŃŠ¹</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="93"/> + <source>File name</source> + <translation>ŠøŠ¼Ń ŃŠ°Š¹Š»Š°</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>ŠŠ¾Š»Š¾Š¶ŠøŃŃ Š² Š½ŠøŠ¶Š½ŠµŠ¹</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="207"/> + <source>Retry</source> + <translation>ŠŠ¾Š²ŃŠ¾ŃŠøŃŃ</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="214"/> + <source>&Skip</source> + <translation>ŠæŃŠ¾ŠæŃŃŠŗŠ°ŃŃ</translation> + </message> + <message> + <location filename="../../fileErrorDialog.ui" line="221"/> + <source>&Cancel</source> + <translation>Š¾ŃŠ¼ŠµŠ½ŠøŃŃ</translation> + </message> +</context> +<context> + <name>fileExistsDialog</name> + <message> + <location filename="../../fileExistsDialog.ui" line="14"/> + <source>The file exists</source> + <translation>Š¤Š°Š¹Š» ŃŃŃŠµŃŃŠ²ŃŠµŃ</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="34"/> + <source>Source</source> + <translation>ŠøŃŃŠ¾ŃŠ½ŠøŠŗ</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="50"/> + <source>Destination</source> + <translation>Š½Š°Š·Š½Š°ŃŠµŠ½ŠøŠµ</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="82"/> + <location filename="../../fileExistsDialog.ui" line="170"/> + <source>Size</source> + <translation>ŃŠ°Š·Š¼ŠµŃ</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="99"/> + <location filename="../../fileExistsDialog.ui" line="187"/> + <source>Modified</source> + <translation>Š¼Š¾Š“ŠøŃŠøŃŠøŃŠ¾Š²Š°Š½Š½ŃŠ¹</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="116"/> + <location filename="../../fileExistsDialog.ui" line="204"/> + <source>File name</source> + <translation>ŠøŠ¼Ń ŃŠ°Š¹Š»Š°</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>ŠŃŠµŠ“Š»Š¾Š¶ŠøŃŃ Š½Š¾Š²Š¾Šµ ŠøŠ¼Ń</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>ŠæŠµŃŠµŠøŠ¼ŠµŠ½Š¾Š²Š°ŃŃ</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="315"/> + <source>&Overwrite</source> + <translation>ŠæŠµŃŠµŠæŠøŃŃŠ²Š°ŃŃ</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="325"/> + <source>&Skip</source> + <translation>ŠæŃŠ¾ŠæŃŃŠŗŠ°ŃŃ</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="332"/> + <source>&Cancel</source> + <translation>Š¾ŃŠ¼ŠµŠ½ŠøŃŃ</translation> + </message> + <message> + <location filename="../../fileExistsDialog.ui" line="341"/> + <source>Overwrite if newer</source> + <translation>ŠŠ°Š¼ŠµŠ½ŠøŃŃ, ŠµŃŠ»Šø Š½Š¾Š²ŠµŠµ</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>ŃŠ°Š·Š¼ŠµŃ</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="110"/> + <source>Modified</source> + <translation>Š¼Š¾Š“ŠøŃŠøŃŠøŃŠ¾Š²Š°Š½Š½ŃŠ¹</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="70"/> + <source>File name</source> + <translation>ŠøŠ¼Ń ŃŠ°Š¹Š»Š°</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>ŠŃŠµŠ“Š»Š¾Š¶ŠøŃŃ Š½Š¾Š²Š¾Šµ ŠøŠ¼Ń</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>ŠæŠµŃŠµŠøŠ¼ŠµŠ½Š¾Š²Š°ŃŃ</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="197"/> + <source>&Skip</source> + <translation>ŠæŃŠ¾ŠæŃŃŠŗŠ°ŃŃ</translation> + </message> + <message> + <location filename="../../fileIsSameDialog.ui" line="204"/> + <source>&Cancel</source> + <translation>Š¾ŃŠ¼ŠµŠ½ŠøŃŃ</translation> + </message> +</context> +<context> + <name>folderExistsDialog</name> + <message> + <location filename="../../folderExistsDialog.ui" line="34"/> + <source>Source</source> + <translation>ŠøŃŃŠ¾ŃŠ½ŠøŠŗ</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="50"/> + <source>Destination</source> + <translation>Š½Š°Š·Š½Š°ŃŠµŠ½ŠøŠµ</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="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>Š¼Š¾Š“ŠøŃŠøŃŠøŃŠ¾Š²Š°Š½Š½ŃŠ¹</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="99"/> + <location filename="../../folderExistsDialog.ui" line="160"/> + <source>Folder name</source> + <translation>ŠøŠ¼Ń ŠæŠ°ŠæŠŗŠø</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>ŠŃŠµŠ“Š»Š¾Š¶ŠøŃŃ Š½Š¾Š²Š¾Šµ ŠøŠ¼Ń</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>ŠæŠµŃŠµŠøŠ¼ŠµŠ½Š¾Š²Š°ŃŃ</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="252"/> + <source>Merge</source> + <translation>ŃŠ»ŠøŃŠ½ŠøŠµ</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="259"/> + <source>Skip</source> + <translation>ŠæŃŠ¾ŠæŃŃŠŗŠ°ŃŃ</translation> + </message> + <message> + <location filename="../../folderExistsDialog.ui" line="266"/> + <source>&Cancel</source> + <translation>Š¾ŃŠ¼ŠµŠ½ŠøŃŃ</translation> + </message> +</context> +</TS> diff --git a/plugins/CopyEngine/Ultracopier/Languages/th/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/th/translation.ts new file mode 100644 index 0000000..3362659 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/Languages/th/translation.ts @@ -0,0 +1,1289 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<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="429"/> + <location filename="../../CopyEngine.cpp" line="451"/> + <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="462"/> + <location filename="../../CopyEngine.cpp" line="484"/> + <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="508"/> + <source>Destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="508"/> + <source>Use the actual destination "%1"?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="717"/> + <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="1047"/> + <location filename="../../CopyEngine.cpp" line="1050"/> + <location filename="../../CopyEngine.cpp" line="1055"/> + <location filename="../../CopyEngine.cpp" line="1059"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1048"/> + <location filename="../../CopyEngine.cpp" line="1052"/> + <location filename="../../CopyEngine.cpp" line="1056"/> + <location filename="../../CopyEngine.cpp" line="1060"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1051"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1053"/> + <location filename="../../CopyEngine.cpp" line="1065"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1057"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1061"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1062"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1063"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1064"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1067"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1068"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1069"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <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="412"/> + <location filename="../../CopyEngineFactory.cpp" line="415"/> + <location filename="../../CopyEngineFactory.cpp" line="420"/> + <location filename="../../CopyEngineFactory.cpp" line="424"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="413"/> + <location filename="../../CopyEngineFactory.cpp" line="417"/> + <location filename="../../CopyEngineFactory.cpp" line="421"/> + <location filename="../../CopyEngineFactory.cpp" line="425"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="416"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="418"/> + <location filename="../../CopyEngineFactory.cpp" line="430"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="422"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="426"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="427"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="428"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="429"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="432"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="433"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="434"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <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="131"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="141"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FileIsSameDialog</name> + <message> + <location filename="../../FileIsSameDialog.cpp" line="105"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="115"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <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="92"/> + <location filename="../../Filters.cpp" line="130"/> + <source>Raw text</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="95"/> + <location filename="../../Filters.cpp" line="133"/> + <source>Simplified regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="98"/> + <location filename="../../Filters.cpp" line="136"/> + <source>Perl's regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="106"/> + <location filename="../../Filters.cpp" line="144"/> + <source>Only on file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="109"/> + <location filename="../../Filters.cpp" line="147"/> + <source>Only on folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="115"/> + <location filename="../../Filters.cpp" line="153"/> + <location filename="../../Filters.cpp" line="215"/> + <location filename="../../Filters.cpp" line="254"/> + <source>Full match</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FolderExistsDialog</name> + <message> + <location filename="../../FolderExistsDialog.cpp" line="51"/> + <source>Folder already exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="116"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="126"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ListThread</name> + <message> + <location filename="../../ListThread.cpp" line="1447"/> + <location filename="../../ListThread.cpp" line="2369"/> + <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="1454"/> + <location filename="../../ListThread.cpp" line="2376"/> + <source>Unable to save the transfer list: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1470"/> + <source>Problem reading file, or file-size is 0</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1477"/> + <source>Wrong header: "%1"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1486"/> + <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="1495"/> + <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="1501"/> + <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="1557"/> + <source>Some errors have been found during the line parsing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1565"/> + <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="232"/> + <source>Unable to move the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="93"/> + <location filename="../../MkPath.cpp" line="275"/> + <source>Unable to remove</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ReadThread</name> + <message> + <location filename="../../ReadThread.cpp" line="55"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="184"/> + <source>Internal error reading the source file:block size out of range</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="192"/> + <location filename="../../ReadThread.cpp" line="408"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="233"/> + <location filename="../../ReadThread.cpp" line="456"/> + <source>File truncated during the read, possible data change</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>RenamingRules</name> + <message> + <location filename="../../RenamingRules.ui" line="26"/> + <source>First renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="32"/> + <source>%name% - copy</source> + <extracomment>%name% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="39"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> + <extracomment> should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="49"/> + <source>Second renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="55"/> + <source>%name% - copy (%number%)</source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="62"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="39"/> + <location filename="../../RenamingRules.cpp" line="62"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="43"/> + <location filename="../../RenamingRules.cpp" line="73"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="14"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ScanFileOrFolder</name> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="265"/> + <source>Blacklisted folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="327"/> + <location filename="../../ScanFileOrFolder.cpp" line="393"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="337"/> + <location filename="../../ScanFileOrFolder.cpp" line="403"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="441"/> + <source>This is not a folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="443"/> + <source>The folder does exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="445"/> + <source>The folder is not readable</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="456"/> + <source>Problem with name encoding</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TransferThread</name> + <message> + <location filename="../../TransferThread.cpp" line="235"/> + <location filename="../../TransferThread.cpp" line="663"/> + <location filename="../../TransferThread.cpp" line="735"/> + <location filename="../../TransferThread.cpp" line="1303"/> + <source>File not found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="336"/> + <location filename="../../TransferThread.cpp" line="353"/> + <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="408"/> + <location filename="../../TransferThread.cpp" line="431"/> + <source>Internal error: Already opening</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="572"/> + <source>Drive %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="574"/> + <source>Unknown folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="578"/> + <source>root</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="631"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="641"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="701"/> + <location filename="../../TransferThread.cpp" line="816"/> + <source>The source file doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="741"/> + <location filename="../../TransferThread.cpp" line="828"/> + <source>Unable to do the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="777"/> + <source>The source doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="822"/> + <source>Another file exists at same place</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1124"/> + <source>The checksums do not match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1213"/> + <source>Internal error: The destination is not closed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1227"/> + <source>Internal error: The size transfered doesn't match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1238"/> + <source>Internal error: The buffer is not empty</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1303"/> + <location filename="../../TransferThread.cpp" line="1321"/> + <location filename="../../TransferThread.cpp" line="1336"/> + <source>Unable to change the date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="219"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>WriteThread</name> + <message> + <location filename="../../WriteThread.cpp" line="80"/> + <source>Path resolution error (Empty path)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="268"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="671"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="696"/> + <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="35"/> + <source>Transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="44"/> + <source>Move the whole folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="51"/> + <source>Transfer the file rights</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="61"/> + <source>Keep the file date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="74"/> + <source>Autostart the transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="81"/> + <location filename="../../copyEngineOptions.ui" line="101"/> + <source>Less performance if checked</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="104"/> + <source>Follow the strict order</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="130"/> + <source>Error and collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="136"/> + <source>When folder error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="146"/> + <source>When file error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="172"/> + <source>When file collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="232"/> + <source>When folder collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="263"/> + <source>Check if destination folder exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="270"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="290"/> + <source>Delete partially transferred files</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="303"/> + <source>Rename the original destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="334"/> + <source>Control</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="340"/> + <source>Checksum</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="349"/> + <source>Only after error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="356"/> + <source>Ignore if impossible</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="373"/> + <source>Verify checksums</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="405"/> + <source>Performance</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="411"/> + <source>Parallel buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="418"/> + <location filename="../../copyEngineOptions.ui" line="431"/> + <location filename="../../copyEngineOptions.ui" line="444"/> + <location filename="../../copyEngineOptions.ui" line="481"/> + <location filename="../../copyEngineOptions.ui" line="550"/> + <source>KB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="460"/> + <source>Block size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="467"/> + <source>Sequential buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="474"/> + <source>Enable OS buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="497"/> + <source>OS buffer only if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="504"/> + <source>Transfer algorithm</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="543"/> + <source>Parallelize if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="573"/> + <source>Inode threads</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="580"/> + <location filename="../../copyEngineOptions.ui" line="590"/> + <source>More cpu, but better organisation on the disk</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="593"/> + <source>Order the list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="609"/> + <source>Misc</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="615"/> + <source>Check the disk space</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="625"/> + <source>Use this folder when destination is not set</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="637"/> + <source>Browse</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="659"/> + <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/CopyEngine/Ultracopier/Languages/tr/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/tr/translation.ts new file mode 100644 index 0000000..3362659 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/Languages/tr/translation.ts @@ -0,0 +1,1289 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<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="429"/> + <location filename="../../CopyEngine.cpp" line="451"/> + <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="462"/> + <location filename="../../CopyEngine.cpp" line="484"/> + <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="508"/> + <source>Destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="508"/> + <source>Use the actual destination "%1"?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="717"/> + <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="1047"/> + <location filename="../../CopyEngine.cpp" line="1050"/> + <location filename="../../CopyEngine.cpp" line="1055"/> + <location filename="../../CopyEngine.cpp" line="1059"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1048"/> + <location filename="../../CopyEngine.cpp" line="1052"/> + <location filename="../../CopyEngine.cpp" line="1056"/> + <location filename="../../CopyEngine.cpp" line="1060"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1051"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1053"/> + <location filename="../../CopyEngine.cpp" line="1065"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1057"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1061"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1062"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1063"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1064"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1067"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1068"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1069"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <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="412"/> + <location filename="../../CopyEngineFactory.cpp" line="415"/> + <location filename="../../CopyEngineFactory.cpp" line="420"/> + <location filename="../../CopyEngineFactory.cpp" line="424"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="413"/> + <location filename="../../CopyEngineFactory.cpp" line="417"/> + <location filename="../../CopyEngineFactory.cpp" line="421"/> + <location filename="../../CopyEngineFactory.cpp" line="425"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="416"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="418"/> + <location filename="../../CopyEngineFactory.cpp" line="430"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="422"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="426"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="427"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="428"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="429"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="432"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="433"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="434"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <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="131"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="141"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FileIsSameDialog</name> + <message> + <location filename="../../FileIsSameDialog.cpp" line="105"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="115"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <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="92"/> + <location filename="../../Filters.cpp" line="130"/> + <source>Raw text</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="95"/> + <location filename="../../Filters.cpp" line="133"/> + <source>Simplified regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="98"/> + <location filename="../../Filters.cpp" line="136"/> + <source>Perl's regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="106"/> + <location filename="../../Filters.cpp" line="144"/> + <source>Only on file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="109"/> + <location filename="../../Filters.cpp" line="147"/> + <source>Only on folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="115"/> + <location filename="../../Filters.cpp" line="153"/> + <location filename="../../Filters.cpp" line="215"/> + <location filename="../../Filters.cpp" line="254"/> + <source>Full match</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FolderExistsDialog</name> + <message> + <location filename="../../FolderExistsDialog.cpp" line="51"/> + <source>Folder already exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="116"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="126"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ListThread</name> + <message> + <location filename="../../ListThread.cpp" line="1447"/> + <location filename="../../ListThread.cpp" line="2369"/> + <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="1454"/> + <location filename="../../ListThread.cpp" line="2376"/> + <source>Unable to save the transfer list: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1470"/> + <source>Problem reading file, or file-size is 0</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1477"/> + <source>Wrong header: "%1"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1486"/> + <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="1495"/> + <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="1501"/> + <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="1557"/> + <source>Some errors have been found during the line parsing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1565"/> + <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="232"/> + <source>Unable to move the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="93"/> + <location filename="../../MkPath.cpp" line="275"/> + <source>Unable to remove</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ReadThread</name> + <message> + <location filename="../../ReadThread.cpp" line="55"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="184"/> + <source>Internal error reading the source file:block size out of range</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="192"/> + <location filename="../../ReadThread.cpp" line="408"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="233"/> + <location filename="../../ReadThread.cpp" line="456"/> + <source>File truncated during the read, possible data change</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>RenamingRules</name> + <message> + <location filename="../../RenamingRules.ui" line="26"/> + <source>First renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="32"/> + <source>%name% - copy</source> + <extracomment>%name% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="39"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> + <extracomment> should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="49"/> + <source>Second renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="55"/> + <source>%name% - copy (%number%)</source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="62"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="39"/> + <location filename="../../RenamingRules.cpp" line="62"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="43"/> + <location filename="../../RenamingRules.cpp" line="73"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="14"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ScanFileOrFolder</name> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="265"/> + <source>Blacklisted folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="327"/> + <location filename="../../ScanFileOrFolder.cpp" line="393"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="337"/> + <location filename="../../ScanFileOrFolder.cpp" line="403"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="441"/> + <source>This is not a folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="443"/> + <source>The folder does exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="445"/> + <source>The folder is not readable</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="456"/> + <source>Problem with name encoding</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TransferThread</name> + <message> + <location filename="../../TransferThread.cpp" line="235"/> + <location filename="../../TransferThread.cpp" line="663"/> + <location filename="../../TransferThread.cpp" line="735"/> + <location filename="../../TransferThread.cpp" line="1303"/> + <source>File not found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="336"/> + <location filename="../../TransferThread.cpp" line="353"/> + <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="408"/> + <location filename="../../TransferThread.cpp" line="431"/> + <source>Internal error: Already opening</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="572"/> + <source>Drive %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="574"/> + <source>Unknown folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="578"/> + <source>root</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="631"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="641"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="701"/> + <location filename="../../TransferThread.cpp" line="816"/> + <source>The source file doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="741"/> + <location filename="../../TransferThread.cpp" line="828"/> + <source>Unable to do the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="777"/> + <source>The source doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="822"/> + <source>Another file exists at same place</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1124"/> + <source>The checksums do not match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1213"/> + <source>Internal error: The destination is not closed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1227"/> + <source>Internal error: The size transfered doesn't match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1238"/> + <source>Internal error: The buffer is not empty</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1303"/> + <location filename="../../TransferThread.cpp" line="1321"/> + <location filename="../../TransferThread.cpp" line="1336"/> + <source>Unable to change the date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="219"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>WriteThread</name> + <message> + <location filename="../../WriteThread.cpp" line="80"/> + <source>Path resolution error (Empty path)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="268"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="671"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="696"/> + <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="35"/> + <source>Transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="44"/> + <source>Move the whole folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="51"/> + <source>Transfer the file rights</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="61"/> + <source>Keep the file date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="74"/> + <source>Autostart the transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="81"/> + <location filename="../../copyEngineOptions.ui" line="101"/> + <source>Less performance if checked</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="104"/> + <source>Follow the strict order</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="130"/> + <source>Error and collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="136"/> + <source>When folder error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="146"/> + <source>When file error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="172"/> + <source>When file collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="232"/> + <source>When folder collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="263"/> + <source>Check if destination folder exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="270"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="290"/> + <source>Delete partially transferred files</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="303"/> + <source>Rename the original destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="334"/> + <source>Control</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="340"/> + <source>Checksum</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="349"/> + <source>Only after error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="356"/> + <source>Ignore if impossible</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="373"/> + <source>Verify checksums</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="405"/> + <source>Performance</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="411"/> + <source>Parallel buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="418"/> + <location filename="../../copyEngineOptions.ui" line="431"/> + <location filename="../../copyEngineOptions.ui" line="444"/> + <location filename="../../copyEngineOptions.ui" line="481"/> + <location filename="../../copyEngineOptions.ui" line="550"/> + <source>KB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="460"/> + <source>Block size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="467"/> + <source>Sequential buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="474"/> + <source>Enable OS buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="497"/> + <source>OS buffer only if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="504"/> + <source>Transfer algorithm</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="543"/> + <source>Parallelize if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="573"/> + <source>Inode threads</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="580"/> + <location filename="../../copyEngineOptions.ui" line="590"/> + <source>More cpu, but better organisation on the disk</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="593"/> + <source>Order the list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="609"/> + <source>Misc</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="615"/> + <source>Check the disk space</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="625"/> + <source>Use this folder when destination is not set</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="637"/> + <source>Browse</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="659"/> + <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/CopyEngine/Ultracopier/Languages/zh/translation.ts b/plugins/CopyEngine/Ultracopier/Languages/zh/translation.ts new file mode 100644 index 0000000..25bb8d3 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/Languages/zh/translation.ts @@ -0,0 +1,1289 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0"> +<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="429"/> + <location filename="../../CopyEngine.cpp" line="451"/> + <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="462"/> + <location filename="../../CopyEngine.cpp" line="484"/> + <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="508"/> + <source>Destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="508"/> + <source>Use the actual destination "%1"?</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="717"/> + <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="1047"/> + <location filename="../../CopyEngine.cpp" line="1050"/> + <location filename="../../CopyEngine.cpp" line="1055"/> + <location filename="../../CopyEngine.cpp" line="1059"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1048"/> + <location filename="../../CopyEngine.cpp" line="1052"/> + <location filename="../../CopyEngine.cpp" line="1056"/> + <location filename="../../CopyEngine.cpp" line="1060"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1051"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1053"/> + <location filename="../../CopyEngine.cpp" line="1065"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1057"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1061"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1062"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1063"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1064"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1067"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1068"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1069"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngine.cpp" line="1170"/> + <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="412"/> + <location filename="../../CopyEngineFactory.cpp" line="415"/> + <location filename="../../CopyEngineFactory.cpp" line="420"/> + <location filename="../../CopyEngineFactory.cpp" line="424"/> + <source>Ask</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="413"/> + <location filename="../../CopyEngineFactory.cpp" line="417"/> + <location filename="../../CopyEngineFactory.cpp" line="421"/> + <location filename="../../CopyEngineFactory.cpp" line="425"/> + <source>Skip</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="416"/> + <source>Merge</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="418"/> + <location filename="../../CopyEngineFactory.cpp" line="430"/> + <source>Rename</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="422"/> + <source>Put at the end</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="426"/> + <source>Overwrite</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="427"/> + <source>Overwrite if different</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="428"/> + <source>Overwrite if newer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="429"/> + <source>Overwrite if older</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="432"/> + <source>Automatic</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="433"/> + <source>Sequential</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="434"/> + <source>Parallel</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <source>Options error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="485"/> + <source>Options engine is not loaded. Unable to access the filters</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../CopyEngineFactory.cpp" line="524"/> + <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="131"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="141"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileExistsDialog.cpp" line="226"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FileIsSameDialog</name> + <message> + <location filename="../../FileIsSameDialog.cpp" line="105"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="115"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FileIsSameDialog.cpp" line="182"/> + <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="92"/> + <location filename="../../Filters.cpp" line="130"/> + <source>Raw text</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="95"/> + <location filename="../../Filters.cpp" line="133"/> + <source>Simplified regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="98"/> + <location filename="../../Filters.cpp" line="136"/> + <source>Perl's regex</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="106"/> + <location filename="../../Filters.cpp" line="144"/> + <source>Only on file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="109"/> + <location filename="../../Filters.cpp" line="147"/> + <source>Only on folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../Filters.cpp" line="115"/> + <location filename="../../Filters.cpp" line="153"/> + <location filename="../../Filters.cpp" line="215"/> + <location filename="../../Filters.cpp" line="254"/> + <source>Full match</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>FolderExistsDialog</name> + <message> + <location filename="../../FolderExistsDialog.cpp" line="51"/> + <source>Folder already exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="116"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="126"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../FolderExistsDialog.cpp" line="187"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ListThread</name> + <message> + <location filename="../../ListThread.cpp" line="1447"/> + <location filename="../../ListThread.cpp" line="2369"/> + <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="1454"/> + <location filename="../../ListThread.cpp" line="2376"/> + <source>Unable to save the transfer list: %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1470"/> + <source>Problem reading file, or file-size is 0</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1477"/> + <source>Wrong header: "%1"</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1486"/> + <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="1495"/> + <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="1501"/> + <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="1557"/> + <source>Some errors have been found during the line parsing</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ListThread.cpp" line="1565"/> + <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="232"/> + <source>Unable to move the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../MkPath.cpp" line="93"/> + <location filename="../../MkPath.cpp" line="275"/> + <source>Unable to remove</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ReadThread</name> + <message> + <location filename="../../ReadThread.cpp" line="55"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="184"/> + <source>Internal error reading the source file:block size out of range</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="192"/> + <location filename="../../ReadThread.cpp" line="408"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ReadThread.cpp" line="233"/> + <location filename="../../ReadThread.cpp" line="456"/> + <source>File truncated during the read, possible data change</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>RenamingRules</name> + <message> + <location filename="../../RenamingRules.ui" line="14"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="26"/> + <source>First renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="32"/> + <source>%name% - copy</source> + <extracomment>%name% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="39"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p></body></html></source> + <extracomment> should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="49"/> + <source>Second renaming</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="55"/> + <source>%name% - copy (%number%)</source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.ui" line="62"/> + <source><html><head/><body><p>Variables: <span style=" font-weight:600;">%name%</span> for the original file name</p><p><span style=" font-weight:600;">%number%</span> for the extra number</p></body></html></source> + <extracomment>%name%, %number% should not be translated</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="39"/> + <location filename="../../RenamingRules.cpp" line="62"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../RenamingRules.cpp" line="43"/> + <location filename="../../RenamingRules.cpp" line="73"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>ScanFileOrFolder</name> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="265"/> + <source>Blacklisted folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="327"/> + <location filename="../../ScanFileOrFolder.cpp" line="393"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="337"/> + <location filename="../../ScanFileOrFolder.cpp" line="403"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="441"/> + <source>This is not a folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="443"/> + <source>The folder does exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="445"/> + <source>The folder is not readable</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../ScanFileOrFolder.cpp" line="456"/> + <source>Problem with name encoding</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>TransferThread</name> + <message> + <location filename="../../TransferThread.cpp" line="235"/> + <location filename="../../TransferThread.cpp" line="663"/> + <location filename="../../TransferThread.cpp" line="735"/> + <location filename="../../TransferThread.cpp" line="1303"/> + <source>File not found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="336"/> + <location filename="../../TransferThread.cpp" line="353"/> + <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="408"/> + <location filename="../../TransferThread.cpp" line="431"/> + <source>Internal error: Already opening</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="572"/> + <source>Drive %1</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="574"/> + <source>Unknown folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="578"/> + <source>root</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="631"/> + <source>%1 - copy</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="641"/> + <source>%1 - copy (%2)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="701"/> + <location filename="../../TransferThread.cpp" line="816"/> + <source>The source file doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="741"/> + <location filename="../../TransferThread.cpp" line="828"/> + <source>Unable to do the folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="777"/> + <source>The source doesn't exist</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="822"/> + <source>Another file exists at same place</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1124"/> + <source>The checksums do not match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1213"/> + <source>Internal error: The destination is not closed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1227"/> + <source>Internal error: The size transfered doesn't match</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1238"/> + <source>Internal error: The buffer is not empty</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="1303"/> + <location filename="../../TransferThread.cpp" line="1321"/> + <location filename="../../TransferThread.cpp" line="1336"/> + <source>Unable to change the date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../TransferThread.cpp" line="219"/> + <source>Try rename with using special characters</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>WriteThread</name> + <message> + <location filename="../../WriteThread.cpp" line="80"/> + <source>Path resolution error (Empty path)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="268"/> + <source>Internal error, please report it!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="671"/> + <source>Unable to read the source file: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../WriteThread.cpp" line="696"/> + <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="35"/> + <source>Transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="44"/> + <source>Move the whole folder</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="51"/> + <source>Transfer the file rights</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="61"/> + <source>Keep the file date</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="74"/> + <source>Autostart the transfer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="81"/> + <location filename="../../copyEngineOptions.ui" line="101"/> + <source>Less performance if checked</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="104"/> + <source>Follow the strict order</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="130"/> + <source>Error and collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="136"/> + <source>When folder error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="146"/> + <source>When file error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="172"/> + <source>When file collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="232"/> + <source>When folder collision</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="263"/> + <source>Check if destination folder exists</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="270"/> + <source>Renaming rules</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="290"/> + <source>Delete partially transferred files</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="303"/> + <source>Rename the original destination</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="334"/> + <source>Control</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="340"/> + <source>Checksum</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="349"/> + <source>Only after error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="356"/> + <source>Ignore if impossible</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="373"/> + <source>Verify checksums</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="405"/> + <source>Performance</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="411"/> + <source>Parallel buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="418"/> + <location filename="../../copyEngineOptions.ui" line="431"/> + <location filename="../../copyEngineOptions.ui" line="444"/> + <location filename="../../copyEngineOptions.ui" line="481"/> + <location filename="../../copyEngineOptions.ui" line="550"/> + <source>KB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="460"/> + <source>Block size</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="467"/> + <source>Sequential buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="474"/> + <source>Enable OS buffer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="497"/> + <source>OS buffer only if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="504"/> + <source>Transfer algorithm</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="543"/> + <source>Parallelize if smaller than</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="573"/> + <source>Inode threads</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="580"/> + <location filename="../../copyEngineOptions.ui" line="590"/> + <source>More cpu, but better organisation on the disk</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="593"/> + <source>Order the list</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="609"/> + <source>Misc</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="615"/> + <source>Check the disk space</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="625"/> + <source>Use this folder when destination is not set</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="637"/> + <source>Browse</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../copyEngineOptions.ui" line="659"/> + <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/CopyEngine/Ultracopier/ListThread.cpp b/plugins/CopyEngine/Ultracopier/ListThread.cpp new file mode 100644 index 0000000..48e06db --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/ListThread.cpp @@ -0,0 +1,2379 @@ +#include "ListThread.h" +#include <QStorageInfo> +#include <QMutexLocker> + +ListThread::ListThread(FacilityInterface * facilityInterface) +{ + moveToThread(this); + start(HighPriority); + this->facilityInterface = facilityInterface; + putInPause = false; + sourceDriveMultiple = false; + destinationDriveMultiple = false; + destinationFolderMultiple = false; + stopIt = false; + bytesToTransfer = 0; + bytesTransfered = 0; + idIncrementNumber = 1; + actualRealByteTransfered = 0; + numberOfTransferIntoToDoList = 0; + numberOfInodeOperation = 0; + putAtBottom = 0; + maxSpeed = 0; + inodeThreads = 1; + renameTheOriginalDestination = false; + doRightTransfer = false; + #ifdef ULTRACOPIER_PLUGIN_RSYNC + rsync = false; + #endif + keepDate = false; + checkDiskSpace = true; + blockSize = ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE*1024; + sequentialBuffer = ULTRACOPIER_PLUGIN_DEFAULT_SEQUENTIAL_NUMBER_OF_BLOCK; + parallelBuffer = ULTRACOPIER_PLUGIN_DEFAULT_PARALLEL_NUMBER_OF_BLOCK; + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + blockSizeAfterSpeedLimitation = blockSize; + #endif + osBufferLimit = 512; + alwaysDoThisActionForFileExists = FileExists_NotSet; + doChecksum = false; + checksumIgnoreIfImpossible = true; + checksumOnlyOnError = true; + osBuffer = false; + osBufferLimited = false; + forcedMode = false; + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + clockForTheCopySpeed = NULL; + multiForBigSpeed = 0; + #endif + + #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW + connect(&timerUpdateDebugDialog,&QTimer::timeout,this,&ListThread::timedUpdateDebugDialog); + timerUpdateDebugDialog.start(ULTRACOPIER_PLUGIN_DEBUG_WINDOW_TIMER); + #endif + connect(this, &ListThread::tryCancel, this,&ListThread::cancel, Qt::QueuedConnection); + connect(this, &ListThread::askNewTransferThread, this,&ListThread::createTransferThread, Qt::QueuedConnection); + connect(&mkPathQueue, &MkPath::firstFolderFinish, this,&ListThread::mkPathFirstFolderFinish, Qt::QueuedConnection); + connect(&mkPathQueue, &MkPath::errorOnFolder, this,&ListThread::mkPathErrorOnFolder, Qt::QueuedConnection); + connect(this, &ListThread::send_syncTransferList, this,&ListThread::syncTransferList_internal, Qt::QueuedConnection); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + connect(&mkPathQueue, &MkPath::debugInformation, this,&ListThread::debugInformation, Qt::QueuedConnection); + connect(&driveManagement,&DriveManagement::debugInformation, this,&ListThread::debugInformation, Qt::QueuedConnection); + #endif // ULTRACOPIER_PLUGIN_DEBUG + + emit askNewTransferThread(); + mkpathTransfer.release(); +} + +ListThread::~ListThread() +{ + emit tryCancel(); + waitCancel.acquire(); + quit(); + wait(); +} + +//transfer is finished +void ListThread::transferInodeIsClosed() +{ + numberOfInodeOperation--; + #ifdef ULTRACOPIER_PLUGIN_DEBUG_SCHEDULER + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("numberOfInodeOperation: %1").arg(numberOfInodeOperation)); + #endif + TransferThread *temp_transfer_thread=qobject_cast<TransferThread *>(QObject::sender()); + if(temp_transfer_thread==NULL) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("transfer thread not located!")); + return; + } + bool isFound=false; + #ifdef ULTRACOPIER_PLUGIN_DEBUG + int countLocalParse=0; + #endif + if(temp_transfer_thread->getStat()!=TransferStat_Idle) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("transfer thread not idle!")); + return; + } + int int_for_internal_loop=0; + const int &loop_size=actionToDoListTransfer.size(); + while(int_for_internal_loop<loop_size) + { + if(actionToDoListTransfer.at(int_for_internal_loop).id==temp_transfer_thread->transferId) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[%1] have finish, put at idle; for id: %2").arg(int_for_internal_loop).arg(temp_transfer_thread->transferId)); + Ultracopier::ReturnActionOnCopyList newAction; + newAction.type=Ultracopier::RemoveItem; + newAction.userAction.moveAt=0; + newAction.addAction=actionToDoTransferToItemOfCopyList(actionToDoListTransfer.at(int_for_internal_loop)); + newAction.userAction.position=int_for_internal_loop; + actionDone << newAction; + /// \todo check if item is at the right thread + actionToDoListTransfer.removeAt(int_for_internal_loop); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("actionToDoListTransfer.size(): %1, actionToDoListInode: %2, actionToDoListInode_afterTheTransfer: %3").arg(actionToDoListTransfer.size()).arg(actionToDoListInode.size()).arg(actionToDoListInode_afterTheTransfer.size())); + if(actionToDoListTransfer.isEmpty() && actionToDoListInode.isEmpty() && actionToDoListInode_afterTheTransfer.isEmpty()) + updateTheStatus(); + + //add the current size of file, to general size because it's finish + copiedSize=temp_transfer_thread->copiedSize(); + if(copiedSize>(qint64)temp_transfer_thread->transferSize) + { + oversize=copiedSize-temp_transfer_thread->transferSize; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("add oversize of: %1").arg(oversize)); + bytesToTransfer+=oversize; + bytesTransfered+=oversize; + } + bytesTransfered+=temp_transfer_thread->transferSize; + + if(temp_transfer_thread->haveStartTime) + { + timeToTransfer << QPair<quint64,quint32>(temp_transfer_thread->transferSize,temp_transfer_thread->startTransferTime.elapsed()); + temp_transfer_thread->haveStartTime=false; + } + temp_transfer_thread->transferId=0; + temp_transfer_thread->transferSize=0; + #ifdef ULTRACOPIER_PLUGIN_DEBUG + countLocalParse++; + #endif + isFound=true; + if(actionToDoListTransfer.isEmpty()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"actionToDoListTransfer==0"); + actionToDoListInode << actionToDoListInode_afterTheTransfer; + actionToDoListInode_afterTheTransfer.clear(); + doNewActions_inode_manipulation(); + } + break; + } + int_for_internal_loop++; + } + if(isFound) + deleteTransferThread(); + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("unable to found item into the todo list, id: %1, index: %2").arg(temp_transfer_thread->transferId).arg(int_for_internal_loop)); + temp_transfer_thread->transferId=0; + temp_transfer_thread->transferSize=0; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("countLocalParse: %1, actionToDoList.size(): %2").arg(countLocalParse).arg(actionToDoListTransfer.size())); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + if(countLocalParse!=1) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("countLocalParse != 1")); + #endif + doNewActions_inode_manipulation(); +} + +/** \brief put the current file at bottom in case of error +\note ONLY IN CASE OF ERROR */ +void ListThread::transferPutAtBottom() +{ + TransferThread *transfer=qobject_cast<TransferThread *>(QObject::sender()); + if(transfer==NULL) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("transfer thread not located!")); + return; + } + bool isFound=false; + #ifdef ULTRACOPIER_PLUGIN_DEBUG + int countLocalParse=0; + #endif + int indexAction=0; + while(indexAction<actionToDoListTransfer.size()) + { + if(actionToDoListTransfer.at(indexAction).id==transfer->transferId) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Put at the end: %1").arg(transfer->transferId)); + //push for interface at the end + Ultracopier::ReturnActionOnCopyList newAction; + newAction.type=Ultracopier::MoveItem; + newAction.addAction.id=transfer->transferId; + newAction.userAction.position=actionToDoListTransfer.size()-1; + actionDone << newAction; + //do the wait stat + actionToDoListTransfer[indexAction].isRunning=false; + //move at the end + actionToDoListTransfer.move(indexAction,actionToDoListTransfer.size()-1); + //reset the thread list stat + transfer->transferId=0; + transfer->transferSize=0; + #ifdef ULTRACOPIER_PLUGIN_DEBUG + countLocalParse++; + #endif + isFound=true; + break; + } + indexAction++; + } + if(!isFound) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("unable to found item into the todo list, id: %1, index: %2").arg(transfer->transferId)); + transfer->transferId=0; + transfer->transferSize=0; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("countLocalParse: %1").arg(countLocalParse)); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + if(countLocalParse!=1) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("countLocalParse != 1")); + #endif + transfer->skip(); +} + +//set the copy info and options before runing +void ListThread::setRightTransfer(const bool doRightTransfer) +{ + mkPathQueue.setRightTransfer(doRightTransfer); + this->doRightTransfer=doRightTransfer; + int index=0; + int loop_sub_size_transfer_thread_search=transferThreadList.size(); + while(index<loop_sub_size_transfer_thread_search) + { + transferThreadList.at(index)->setRightTransfer(doRightTransfer); + index++; + } +} + +//set keep date +void ListThread::setKeepDate(const bool keepDate) +{ + mkPathQueue.setKeepDate(keepDate); + this->keepDate=keepDate; + int index=0; + int loop_sub_size_transfer_thread_search=transferThreadList.size(); + while(index<loop_sub_size_transfer_thread_search) + { + transferThreadList.at(index)->setKeepDate(keepDate); + index++; + } +} + +//set block size in KB +void ListThread::setBlockSize(const int blockSize) +{ + this->blockSize=blockSize*1024; + int index=0; + int loop_sub_size_transfer_thread_search=transferThreadList.size(); + while(index<loop_sub_size_transfer_thread_search) + { + transferThreadList.at(index)->setBlockSize(this->blockSize); + index++; + } + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + setSpeedLimitation(maxSpeed); + #endif +} + +//set auto start +void ListThread::setAutoStart(const bool autoStart) +{ + this->autoStart=autoStart; +} + +#ifdef ULTRACOPIER_PLUGIN_RSYNC +/// \brief set rsync +void ListThread::setRsync(const bool rsync) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"set rsync: "+QString::number(rsync)); + this->rsync=rsync; + int index=0; + int loop_sub_size_transfer_thread_search=transferThreadList.size(); + while(index<loop_sub_size_transfer_thread_search) + { + transferThreadList.at(index)->setRsync(rsync); + index++; + } + for(int i=0;i<scanFileOrFolderThreadsPool.size();i++) + scanFileOrFolderThreadsPool.at(i)->setRsync(rsync); +} +#endif + +//set check destination folder +void ListThread::setCheckDestinationFolderExists(const bool checkDestinationFolderExists) +{ + this->checkDestinationFolderExists=checkDestinationFolderExists; + for(int i=0;i<scanFileOrFolderThreadsPool.size();i++) + scanFileOrFolderThreadsPool.at(i)->setCheckDestinationFolderExists(checkDestinationFolderExists && alwaysDoThisActionForFolderExists!=FolderExists_Merge); +} + +void ListThread::fileTransfer(const QFileInfo &sourceFileInfo,const QFileInfo &destinationFileInfo,const Ultracopier::CopyMode &mode) +{ + if(stopIt) + return; + addToTransfer(sourceFileInfo,destinationFileInfo,mode); +} + +// -> add thread safe, by Qt::BlockingQueuedConnection +bool ListThread::haveSameSource(const QStringList &sources) +{ + if(stopIt) + return false; + if(sourceDriveMultiple) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"sourceDriveMultiple"); + return false; + } + if(sourceDrive.isEmpty()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"sourceDrive.isEmpty()"); + return true; + } + int index=0; + while(index<sources.size()) + { + if(driveManagement.getDrive(sources.at(index))!=sourceDrive) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"sources.at(index))!=sourceDrive"); + return false; + } + index++; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"seam have same source"); + return true; +} + +// -> add thread safe, by Qt::BlockingQueuedConnection +bool ListThread::haveSameDestination(const QString &destination) +{ + if(stopIt) + return false; + if(destinationDriveMultiple) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"destinationDriveMultiple"); + return false; + } + if(destinationDrive.isEmpty()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"destinationDrive.isEmpty()"); + return true; + } + if(driveManagement.getDrive(destination)!=destinationDrive) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"destination!=destinationDrive"); + return false; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"seam have same destination"); + return true; +} + +/// \return empty if multiple or no destination +QString ListThread::getUniqueDestinationFolder() const +{ + if(stopIt) + return QString(); + if(destinationFolderMultiple) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"destinationDriveMultiple"); + return QString(); + } + return destinationFolder; +} + +ScanFileOrFolder * ListThread::newScanThread(Ultracopier::CopyMode mode) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start with: ")+QString::number(mode)); + + //create new thread because is auto-detroyed + scanFileOrFolderThreadsPool << new ScanFileOrFolder(mode); + connect(scanFileOrFolderThreadsPool.last(),&ScanFileOrFolder::finishedTheListing, this,&ListThread::scanThreadHaveFinishSlot, Qt::QueuedConnection); + connect(scanFileOrFolderThreadsPool.last(),&ScanFileOrFolder::fileTransfer, this,&ListThread::fileTransfer, Qt::QueuedConnection); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + connect(scanFileOrFolderThreadsPool.last(),&ScanFileOrFolder::debugInformation, this,&ListThread::debugInformation, Qt::QueuedConnection); + #endif + connect(scanFileOrFolderThreadsPool.last(),&ScanFileOrFolder::newFolderListing, this,&ListThread::newFolderListing); + connect(scanFileOrFolderThreadsPool.last(),&ScanFileOrFolder::addToMovePath, this,&ListThread::addToMovePath, Qt::QueuedConnection); + connect(scanFileOrFolderThreadsPool.last(),&ScanFileOrFolder::addToRealMove, this,&ListThread::addToRealMove, Qt::QueuedConnection); + connect(scanFileOrFolderThreadsPool.last(),&ScanFileOrFolder::addToMkPath, this,&ListThread::addToMkPath, Qt::QueuedConnection); + #ifdef ULTRACOPIER_PLUGIN_RSYNC + connect(scanFileOrFolderThreadsPool.last(),&ScanFileOrFolder::addToRmForRsync, this,&ListThread::addToRmForRsync, Qt::QueuedConnection); + #endif + + connect(scanFileOrFolderThreadsPool.last(),&ScanFileOrFolder::errorOnFolder, this,&ListThread::errorOnFolder, Qt::QueuedConnection); + connect(scanFileOrFolderThreadsPool.last(),&ScanFileOrFolder::folderAlreadyExists, this,&ListThread::folderAlreadyExists, Qt::QueuedConnection); + + connect(this,&ListThread::send_updateMount, scanFileOrFolderThreadsPool.last(),&ScanFileOrFolder::set_updateMount, Qt::QueuedConnection); + + scanFileOrFolderThreadsPool.last()->setFilters(include,exclude); + scanFileOrFolderThreadsPool.last()->setCheckDestinationFolderExists(checkDestinationFolderExists && alwaysDoThisActionForFolderExists!=FolderExists_Merge); + scanFileOrFolderThreadsPool.last()->setMoveTheWholeFolder(moveTheWholeFolder); + #ifdef ULTRACOPIER_PLUGIN_RSYNC + scanFileOrFolderThreadsPool.last()->setRsync(rsync); + #endif + if(scanFileOrFolderThreadsPool.size()==1) + updateTheStatus(); + scanFileOrFolderThreadsPool.last()->setRenamingRules(firstRenamingRule,otherRenamingRule); + return scanFileOrFolderThreadsPool.last(); +} + +void ListThread::scanThreadHaveFinishSlot() +{ + scanThreadHaveFinish(); +} + +void ListThread::scanThreadHaveFinish(bool skipFirstRemove) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("listing thread have finish, skipFirstRemove: ")+QString::number(skipFirstRemove)); + if(!skipFirstRemove) + { + ScanFileOrFolder * senderThread = qobject_cast<ScanFileOrFolder *>(QObject::sender()); + if(senderThread==NULL) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"sender pointer null (plugin copy engine)"); + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start the next thread, scanFileOrFolderThreadsPool.size(): ")+QString::number(scanFileOrFolderThreadsPool.size())); + delete senderThread; + scanFileOrFolderThreadsPool.removeOne(senderThread); + if(scanFileOrFolderThreadsPool.isEmpty()) + updateTheStatus(); + } + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start the next thread, scanFileOrFolderThreadsPool.size(): ")+QString::number(scanFileOrFolderThreadsPool.size())); + if(scanFileOrFolderThreadsPool.size()>0) + { + //then start the next listing threads + if(scanFileOrFolderThreadsPool.first()->isFinished()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"Start listing thread"); + scanFileOrFolderThreadsPool.first()->start(); + } + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"The listing thread is already running"); + } + else + autoStartAndCheckSpace(); +} + +void ListThread::autoStartAndCheckSpace() +{ + if(needMoreSpace()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Need more space"); + return; + } + autoStartIfNeeded(); +} + +void ListThread::autoStartIfNeeded() +{ + if(autoStart) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Auto start the copy"); + startGeneralTransfer(); + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"Put the copy engine in pause"); + putInPause=true; + emit isInPause(true); + } +} + +void ListThread::startGeneralTransfer() +{ + doNewActions_inode_manipulation(); +} + +// -> add thread safe, by Qt::BlockingQueuedConnection +bool ListThread::newCopy(const QStringList &sources,const QString &destination) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start: ")+sources.join(";")+QStringLiteral(", destination: ")+destination); + ScanFileOrFolder * scanFileOrFolderThread = newScanThread(Ultracopier::Copy); + if(scanFileOrFolderThread==NULL) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to get new thread"); + return false; + } + scanFileOrFolderThread->addToList(sources,destination); + scanThreadHaveFinish(true); + detectDrivesOfCurrentTransfer(sources,destination); + return true; +} + +// -> add thread safe, by Qt::BlockingQueuedConnection +bool ListThread::newMove(const QStringList &sources,const QString &destination) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + ScanFileOrFolder * scanFileOrFolderThread = newScanThread(Ultracopier::Move); + if(scanFileOrFolderThread==NULL) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to get new thread"); + return false; + } + scanFileOrFolderThread->addToList(sources,destination); + scanThreadHaveFinish(true); + detectDrivesOfCurrentTransfer(sources,destination); + return true; +} + +void ListThread::detectDrivesOfCurrentTransfer(const QStringList &sources,const QString &destination) +{ + /* code to detect volume/mount point to group by windows */ + if(!sourceDriveMultiple) + { + int index=0; + while(index<sources.size()) + { + const QString &tempDrive=driveManagement.getDrive(sources.at(index)); + //if have not already source, set the source + if(sourceDrive.isEmpty()) + sourceDrive=tempDrive; + //if have previous source and the news source is not the same + if(sourceDrive!=tempDrive) + { + sourceDriveMultiple=true; + break; + } + index++; + } + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("source informations, sourceDrive: %1, sourceDriveMultiple: %2").arg(sourceDrive).arg(sourceDriveMultiple)); + if(!destinationDriveMultiple) + { + const QString &tempDrive=driveManagement.getDrive(destination); + //if have not already destination, set the destination + if(destinationDrive.isEmpty()) + destinationDrive=tempDrive; + //if have previous destination and the news destination is not the same + if(destinationDrive!=tempDrive) + destinationDriveMultiple=true; + } + if(!destinationFolderMultiple) + { + //if have not already destination, set the destination + if(destinationFolder.isEmpty()) + destinationFolder=destination; + //if have previous destination and the news destination is not the same + if(destinationFolder!=destination) + destinationFolderMultiple=true; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("destination informations, destinationDrive: %1, destinationDriveMultiple: %2").arg(destinationDrive).arg(destinationDriveMultiple)); +} + +void ListThread::setCollisionAction(const FileExistsAction &alwaysDoThisActionForFileExists) +{ + this->alwaysDoThisActionForFileExists=alwaysDoThisActionForFileExists; + int index=0; + int loop_sub_size_transfer_thread_search=transferThreadList.size(); + while(index<loop_sub_size_transfer_thread_search) + { + transferThreadList.at(index)->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists); + index++; + } +} + +/** \brief to sync the transfer list + * Used when the interface is changed, useful to minimize the memory size */ +void ListThread::syncTransferList() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + emit send_syncTransferList(); +} + +//set the folder local collision +void ListThread::setFolderCollision(const FolderExistsAction &alwaysDoThisActionForFolderExists) +{ + this->alwaysDoThisActionForFolderExists=alwaysDoThisActionForFolderExists; +} + +bool ListThread::getReturnBoolToCopyEngine() const +{ + return returnBoolToCopyEngine; +} + +QPair<quint64,quint64> ListThread::getReturnPairQuint64ToCopyEngine() const +{ + return returnPairQuint64ToCopyEngine; +} + +Ultracopier::ItemOfCopyList ListThread::getReturnItemOfCopyListToCopyEngine() const +{ + return returnItemOfCopyListToCopyEngine; +} + +void ListThread::set_doChecksum(bool doChecksum) +{ + this->doChecksum=doChecksum; + int index=0; + int loop_sub_size_transfer_thread_search=transferThreadList.size(); + while(index<loop_sub_size_transfer_thread_search) + { + transferThreadList.at(index)->set_doChecksum(doChecksum); + index++; + } +} + +void ListThread::set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible) +{ + this->checksumIgnoreIfImpossible=checksumIgnoreIfImpossible; + int index=0; + int loop_sub_size_transfer_thread_search=transferThreadList.size(); + while(index<loop_sub_size_transfer_thread_search) + { + transferThreadList.at(index)->set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible); + index++; + } +} + +void ListThread::set_checksumOnlyOnError(bool checksumOnlyOnError) +{ + this->checksumOnlyOnError=checksumOnlyOnError; + int index=0; + int loop_sub_size_transfer_thread_search=transferThreadList.size(); + while(index<loop_sub_size_transfer_thread_search) + { + transferThreadList.at(index)->set_checksumOnlyOnError(checksumOnlyOnError); + index++; + } +} + +void ListThread::set_osBuffer(bool osBuffer) +{ + this->osBuffer=osBuffer; + int index=0; + int loop_sub_size_transfer_thread_search=transferThreadList.size(); + while(index<loop_sub_size_transfer_thread_search) + { + transferThreadList.at(index)->set_osBuffer(osBuffer); + index++; + } +} + +void ListThread::set_osBufferLimited(bool osBufferLimited) +{ + this->osBufferLimited=osBufferLimited; + int index=0; + int loop_sub_size_transfer_thread_search=transferThreadList.size(); + while(index<loop_sub_size_transfer_thread_search) + { + transferThreadList.at(index)->set_osBufferLimited(osBufferLimited); + index++; + } +} + +void ListThread::realByteTransfered() +{ + quint64 totalRealByteTransfered=0; + int index=0; + int loop_sub_size_transfer_thread_search=transferThreadList.size(); + while(index<loop_sub_size_transfer_thread_search) + { + totalRealByteTransfered+=transferThreadList.at(index)->realByteTransfered(); + index++; + } + emit send_realBytesTransfered(totalRealByteTransfered); +} + +void ListThread::pause() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + if(putInPause) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Seam already in pause!"); + return; + } + putInPause=true; + int index=0; + int loop_sub_size_transfer_thread_search=transferThreadList.size(); + while(index<loop_sub_size_transfer_thread_search) + { + transferThreadList.at(index)->pause(); + index++; + } + emit isInPause(true); +} + +void ListThread::resume() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + if(!putInPause) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Seam already resumed!"); + return; + } + putInPause=false; + startGeneralTransfer(); + doNewActions_start_transfer(); + int index=0; + int loop_sub_size_transfer_thread_search=transferThreadList.size(); + while(index<loop_sub_size_transfer_thread_search) + { + transferThreadList.at(index)->resume(); + index++; + } + emit isInPause(false); +} + +void ListThread::skip(const quint64 &id) +{ + skipInternal(id); +} + +bool ListThread::skipInternal(const quint64 &id) +{ + int index=0; + int loop_sub_size_transfer_thread_search=transferThreadList.size(); + while(index<loop_sub_size_transfer_thread_search) + { + if(transferThreadList.at(index)->transferId==id) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("skip one transfer: %1").arg(id)); + transferThreadList.at(index)->skip(); + return true; + } + index++; + } + int int_for_internal_loop=0; + const int &loop_size=actionToDoListTransfer.size(); + while(int_for_internal_loop<loop_size) + { + if(actionToDoListTransfer.at(int_for_internal_loop).id==id) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[%1] remove at not running, for id: %2").arg(int_for_internal_loop).arg(id)); + Ultracopier::ReturnActionOnCopyList newAction; + newAction.type=Ultracopier::RemoveItem; + newAction.userAction.moveAt=1; + newAction.addAction=actionToDoTransferToItemOfCopyList(actionToDoListTransfer.at(int_for_internal_loop)); + newAction.userAction.position=int_for_internal_loop; + actionDone << newAction; + actionToDoListTransfer.removeAt(int_for_internal_loop); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("actionToDoListTransfer.size(): %1, actionToDoListInode: %2, actionToDoListInode_afterTheTransfer: %3").arg(actionToDoListTransfer.size()).arg(actionToDoListInode.size()).arg(actionToDoListInode_afterTheTransfer.size())); + if(actionToDoListTransfer.isEmpty() && actionToDoListInode.isEmpty() && actionToDoListInode_afterTheTransfer.isEmpty()) + updateTheStatus(); + return true; + } + int_for_internal_loop++; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("skip transfer not found: %1").arg(id)); + return false; +} + +//executed in this thread +void ListThread::cancel() +{ + if(stopIt) + { + waitCancel.release(); + return; + } + stopIt=true; + int index=0; + int loop_size=transferThreadList.size(); + while(index<loop_size) + { + transferThreadList.at(index)->stop(); + index++; + } + index=0; + loop_size=scanFileOrFolderThreadsPool.size(); + while(index<loop_size) + { + scanFileOrFolderThreadsPool.at(index)->stop(); + delete scanFileOrFolderThreadsPool.at(index);//->deleteLayer(); + scanFileOrFolderThreadsPool[index]=NULL; + index++; + } + scanFileOrFolderThreadsPool.clear(); + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + if(clockForTheCopySpeed!=NULL) + { + clockForTheCopySpeed->stop(); + delete clockForTheCopySpeed; + clockForTheCopySpeed=NULL; + } + #endif + checkIfReadyToCancel(); +} + +void ListThread::checkIfReadyToCancel() +{ + if(!stopIt) + return; + int index=0; + int loop_size=transferThreadList.size(); + while(index<loop_size) + { + if(transferThreadList.at(index)!=NULL) + { + if(transferThreadList.at(index)->transferId!=0) + return; + delete transferThreadList.at(index);//->deleteLayer(); + transferThreadList[index]=NULL; + transferThreadList.removeAt(index); + loop_size=transferThreadList.size(); + index--; + } + index++; + } + actionToDoListTransfer.clear(); + actionToDoListInode.clear(); + actionToDoListInode_afterTheTransfer.clear(); + actionDone.clear(); + progressionList.clear(); + returnListItemOfCopyListToCopyEngine.clear(); + quit(); + waitCancel.release(); + emit canBeDeleted(); +} + +//speedLimitation in KB/s +bool ListThread::setSpeedLimitation(const qint64 &speedLimitation) +{ + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("maxSpeed in KB/s: ")+QString::number(speedLimitation)); + + if(speedLimitation>1024*1024) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"speedLimitation out of range"); + return false; + } + maxSpeed=speedLimitation; + + multiForBigSpeed=0; + if(maxSpeed>0) + { + blockSizeAfterSpeedLimitation=blockSize; + + //try resolv the interval + int newInterval;//in ms + do + { + multiForBigSpeed++; + //at max speed, is out of range for int, it's why quint64 is used + newInterval=(((quint64)blockSize*(quint64)multiForBigSpeed*1000/* *1000 because interval is into ms, not s*/)/((quint64)maxSpeed*(quint64)1024)); + if(newInterval<0) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"calculated newInterval wrong"); + return false; + } + } + while(newInterval<ULTRACOPIER_PLUGIN_MINTIMERINTERVAL); + + if(newInterval<=0) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"calculated newInterval wrong"); + return false; + } + //wait time too big, then shrink the block size and set interval to max size + if(newInterval>ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"wait time too big, then shrink the block size and set interval to max size"); + newInterval=ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL; + multiForBigSpeed=1; + blockSizeAfterSpeedLimitation=(this->maxSpeed*1024*newInterval)/1000; + + if(blockSizeAfterSpeedLimitation<10) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"calculated block size wrong"); + return false; + } + + //set the new block size into the thread + const int &loop_size=transferThreadList.size(); + int int_for_loop=0; + while(int_for_loop<loop_size) + { + if(!transferThreadList.at(int_for_loop)->setBlockSize(blockSizeAfterSpeedLimitation)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to set the block size"); + int_for_loop++; + } + } + + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("fixed speed with new block size and new interval in BlockSize: %1, multiForBigSpeed: %2, newInterval: %3, maxSpeed: %4") + .arg(blockSizeAfterSpeedLimitation) + .arg(multiForBigSpeed) + .arg(newInterval) + .arg(maxSpeed) + ); + + clockForTheCopySpeed->setInterval(newInterval); + if(clockForTheCopySpeed!=NULL) + clockForTheCopySpeed->start(); + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"clockForTheCopySpeed == NULL at this point"); + } + else + { + if(clockForTheCopySpeed!=NULL) + clockForTheCopySpeed->stop(); + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"clockForTheCopySpeed == NULL at this point"); + int int_for_loop=0; + const int &loop_size=transferThreadList.size(); + while(int_for_loop<loop_size) + { + transferThreadList.at(int_for_loop)->setBlockSize(blockSize); + int_for_loop++; + } + } + int int_for_loop=0; + const int &loop_size=transferThreadList.size(); + while(int_for_loop<loop_size) + { + transferThreadList.at(int_for_loop)->setMultiForBigSpeed(multiForBigSpeed); + int_for_loop++; + } + + return true; + #else + Q_UNUSED(speedLimitation); + return false; + #endif +} + +void ListThread::updateTheStatus() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + sendActionDone(); + bool updateTheStatus_listing=scanFileOrFolderThreadsPool.size()>0; + bool updateTheStatus_copying=actionToDoListTransfer.size()>0 || actionToDoListInode.size()>0 || actionToDoListInode_afterTheTransfer.size()>0; + Ultracopier::EngineActionInProgress updateTheStatus_action_in_progress; + if(updateTheStatus_copying && updateTheStatus_listing) + updateTheStatus_action_in_progress=Ultracopier::CopyingAndListing; + else if(updateTheStatus_listing) + updateTheStatus_action_in_progress=Ultracopier::Listing; + else if(updateTheStatus_copying) + updateTheStatus_action_in_progress=Ultracopier::Copying; + else + updateTheStatus_action_in_progress=Ultracopier::Idle; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("emit actionInProgess(")+QString::number(updateTheStatus_action_in_progress)+QStringLiteral(")")); + emit actionInProgess(updateTheStatus_action_in_progress); +} + +//set data local to the thread +void ListThread::setAlwaysFileExistsAction(const FileExistsAction &alwaysDoThisActionForFileExists) +{ + this->alwaysDoThisActionForFileExists=alwaysDoThisActionForFileExists; + int int_for_loop=0; + const int &loop_size=transferThreadList.size(); + while(int_for_loop<loop_size) + { + transferThreadList.at(int_for_loop)->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists); + int_for_loop++; + } +} + +//mk path to do +quint64 ListThread::addToMkPath(const QFileInfo& source,const QFileInfo& destination, const int& inode) +{ + if(stopIt) + return 0; + if(inode!=0 && (!keepDate && !doRightTransfer)) + return 0; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("source: %1, destination: %2").arg(source.absoluteFilePath()).arg(destination.absoluteFilePath())); + ActionToDoInode temp; + temp.type = ActionType_MkPath; + temp.id = generateIdNumber(); + temp.source = source; + temp.destination= destination; + temp.isRunning = false; + actionToDoListInode << temp; + return temp.id; +} + +//add rm path to do +void ListThread::addToMovePath(const QFileInfo& source, const QFileInfo &destination, const int& inodeToRemove) +{ + if(stopIt) + return; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("source: %1, destination: %2, inodeToRemove: %3").arg(source.absoluteFilePath()).arg(destination.absoluteFilePath()).arg(inodeToRemove)); + ActionToDoInode temp; + temp.type = ActionType_MovePath; + temp.id = generateIdNumber(); + temp.size = inodeToRemove; + temp.source = source; + temp.destination= destination; + temp.isRunning = false; + actionToDoListInode << temp; +} + +void ListThread::addToRealMove(const QFileInfo& source,const QFileInfo& destination) +{ + if(stopIt) + return; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("source: %1, destination: %2").arg(source.absoluteFilePath()).arg(destination.absoluteFilePath())); + ActionToDoInode temp; + temp.type = ActionType_RealMove; + temp.id = generateIdNumber(); + temp.size = 0; + temp.source = source; + temp.destination= destination; + temp.isRunning = false; + actionToDoListInode << temp; +} + +#ifdef ULTRACOPIER_PLUGIN_RSYNC +//rsync rm +void ListThread::addToRmForRsync(const QFileInfo& destination) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"inode: "+destination.absoluteFilePath()); + ActionToDoInode temp; + temp.type = ActionType_RmSync; + temp.id = generateIdNumber(); + temp.destination= destination; + temp.isRunning = false; + actionToDoListInode << temp; +} +#endif + +//send action done +void ListThread::sendActionDone() +{ + if(!actionDone.isEmpty()) + { + emit newActionOnList(actionDone); + actionDone.clear(); + } + if(!timeToTransfer.isEmpty()) + { + emit doneTime(timeToTransfer); + timeToTransfer.clear(); + } +} + +//send progression +void ListThread::sendProgression() +{ + if(actionToDoListTransfer.isEmpty()) + return; + oversize=0; + currentProgression=0; + int int_for_loop=0; + const int &loop_size=transferThreadList.size(); + while(int_for_loop<loop_size) + { + TransferThread * temp_transfer_thread=transferThreadList.at(int_for_loop); + switch(temp_transfer_thread->getStat()) + { + case TransferStat_Transfer: + case TransferStat_PostTransfer: + case TransferStat_Checksum: + case TransferStat_PostOperation: + { + copiedSize=temp_transfer_thread->copiedSize(); + + //for the general progression + currentProgression+=copiedSize; + + //the oversize (when the file is bigger after/during the copy then what was during the listing) + if(copiedSize>(qint64)temp_transfer_thread->transferSize) + localOverSize=copiedSize-temp_transfer_thread->transferSize; + else + localOverSize=0; + + //the current size copied + totalSize=temp_transfer_thread->transferSize+localOverSize; + QPair<quint64,quint64> progression=temp_transfer_thread->progression(); + tempItem.currentRead=progression.first; + tempItem.currentWrite=progression.second; + tempItem.id=temp_transfer_thread->transferId; + tempItem.total=totalSize; + progressionList << tempItem; + + //add the oversize to the general progression + oversize+=localOverSize; + } + break; + default: + break; + } + int_for_loop++; + } + emit pushFileProgression(progressionList); + progressionList.clear(); + emit pushGeneralProgression(bytesTransfered+currentProgression,bytesToTransfer+oversize); + realByteTransfered(); +} + +//send the progression, after full reset of the interface (then all is empty) +void ListThread::syncTransferList_internal() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + emit syncReady(); + actionDone.clear(); + //do list operation + TransferThread *transferThread; + const int &loop_size=actionToDoListTransfer.size(); + int loop_sub_size=transferThreadList.size(); + //this loop to have at max inodeThreads*inodeThreads, not inodeThreads*transferThreadList.size() + int int_for_internal_loop; + for(int int_for_loop=0; int_for_loop<loop_size; ++int_for_loop) { + const ActionToDoTransfer &item=actionToDoListTransfer.at(int_for_loop); + Ultracopier::ReturnActionOnCopyList newAction; + newAction.type = Ultracopier::PreOperation; + newAction.addAction.id = item.id; + newAction.addAction.sourceFullPath = item.source.absoluteFilePath(); + newAction.addAction.sourceFileName = item.source.fileName(); + newAction.addAction.destinationFullPath = item.destination.absoluteFilePath(); + newAction.addAction.destinationFileName = item.destination.fileName(); + newAction.addAction.size = item.size; + newAction.addAction.mode = item.mode; + actionDone << newAction; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("id: %1, size: %2, name: %3, size2: %4").arg(item.id).arg(item.size).arg(item.source.absoluteFilePath()).arg(newAction.addAction.size)); + if(item.isRunning) + { + for(int_for_internal_loop=0; int_for_internal_loop<loop_sub_size; ++int_for_internal_loop) { + transferThread=transferThreadList.at(int_for_internal_loop); + Ultracopier::ReturnActionOnCopyList newAction; + newAction.type = Ultracopier::PreOperation; + newAction.addAction.id = item.id; + newAction.addAction.sourceFullPath = item.source.absoluteFilePath(); + newAction.addAction.sourceFileName = item.source.fileName(); + newAction.addAction.destinationFullPath = item.destination.absoluteFilePath(); + newAction.addAction.destinationFileName = item.destination.fileName(); + newAction.addAction.size = item.size; + newAction.addAction.mode = item.mode; + actionDone << newAction; + if(transferThread->getStat()!=TransferStat_PreOperation) + { + Ultracopier::ReturnActionOnCopyList newAction; + switch(transferThread->getStat()) + { + case TransferStat_Transfer: + newAction.type=Ultracopier::Transfer; + break; + /*case TransferStat_PostTransfer: + newAction.type=Ultracopier::PostOperation; + break;*/ + case TransferStat_PostOperation: + newAction.type=Ultracopier::PostOperation; + break; + default: + break; + } + newAction.addAction.id = item.id; + actionDone << newAction; + } + } + } + } +} + +//add file transfer to do +quint64 ListThread::addToTransfer(const QFileInfo& source,const QFileInfo& destination,const Ultracopier::CopyMode& mode) +{ + if(stopIt) + return 0; + //add to transfer list + numberOfTransferIntoToDoList++; + quint64 size=0; + if(!source.isSymLink()) + size=source.size(); + const QString &drive=driveManagement.getDrive(destination.absoluteFilePath()); + if(drive.isEmpty()) + abort(); + if(mode!=Ultracopier::Move || drive!=driveManagement.getDrive(source.absoluteFilePath())) + { + if(requiredSpace.contains(drive)) + { + requiredSpace[drive]+=size; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("space needed add: %1, space needed: %2, on: %3").arg(size).arg(requiredSpace.value(drive)).arg(drive)); + } + else + { + requiredSpace[drive]=size; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("set space %1 needed, on: %2").arg(size).arg(drive)); + } + } + bytesToTransfer+= size; + ActionToDoTransfer temp; + temp.id = generateIdNumber(); + temp.size = size; + temp.source = source; + temp.destination= destination; + temp.mode = mode; + temp.isRunning = false; + actionToDoListTransfer << temp; + //push the new transfer to interface + Ultracopier::ReturnActionOnCopyList newAction; + newAction.type = Ultracopier::AddingItem; + newAction.addAction=actionToDoTransferToItemOfCopyList(temp); + actionDone << newAction; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("source: %1, destination: %2, add entry: %3, size: %4, size2: %5, isSymLink: %6").arg(source.absoluteFilePath()).arg(destination.absoluteFilePath()).arg(temp.id).arg(temp.size).arg(size).arg(source.isSymLink())); + return temp.id; +} + +Ultracopier::ItemOfCopyList ListThread::actionToDoTransferToItemOfCopyList(const ListThread::ActionToDoTransfer &actionToDoTransfer) +{ + Ultracopier::ItemOfCopyList itemOfCopyList; + itemOfCopyList.id = actionToDoTransfer.id; + itemOfCopyList.sourceFullPath = actionToDoTransfer.source.absoluteFilePath(); + itemOfCopyList.sourceFileName = actionToDoTransfer.source.fileName(); + itemOfCopyList.destinationFullPath = actionToDoTransfer.destination.absoluteFilePath(); + itemOfCopyList.destinationFileName = actionToDoTransfer.destination.fileName(); + itemOfCopyList.size = actionToDoTransfer.size; + itemOfCopyList.mode = actionToDoTransfer.mode; + return itemOfCopyList; +} + +//generate id number +quint64 ListThread::generateIdNumber() +{ + idIncrementNumber++; + if(idIncrementNumber>(((quint64)1024*1024)*1024*1024*2)) + idIncrementNumber=0; + return idIncrementNumber; +} + +//warning the first entry is accessible will copy +void ListThread::removeItems(const QList<int> &ids) +{ + for(int i=0;i<ids.size();i++) + skipInternal(ids.at(i)); +} + +//put on top +void ListThread::moveItemsOnTop(QList<int> ids) +{ + if(actionToDoListTransfer.size()<=1) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"list size is empty"); + return; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + //do list operation + int indexToMove=0; + const int &loop_size=actionToDoListTransfer.size(); + for (int i=0; i<loop_size; ++i) { + if(ids.contains(actionToDoListTransfer.at(i).id)) + { + ids.removeOne(actionToDoListTransfer.at(i).id); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("move item ")+QString::number(i)+QStringLiteral(" to ")+QString::number(indexToMove)); + Ultracopier::ReturnActionOnCopyList newAction; + newAction.type=Ultracopier::MoveItem; + newAction.addAction.id=actionToDoListTransfer.at(i).id; + newAction.userAction.moveAt=indexToMove; + newAction.userAction.position=i; + actionDone << newAction; + actionToDoListTransfer.move(i,indexToMove); + indexToMove++; + if(ids.isEmpty()) + return; + } + } + sendActionDone(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop"); +} + +//move up +void ListThread::moveItemsUp(QList<int> ids) +{ + if(actionToDoListTransfer.size()<=1) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"list size is empty"); + return; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + //do list operation + int lastGoodPositionReal=0; + bool haveGoodPosition=false; + const int &loop_size=actionToDoListTransfer.size(); + for (int i=0; i<loop_size; ++i) { + if(ids.contains(actionToDoListTransfer.at(i).id)) + { + if(haveGoodPosition) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("move item ")+QString::number(i)+QStringLiteral(" to ")+QString::number(i-1)); + Ultracopier::ReturnActionOnCopyList newAction; + newAction.type=Ultracopier::MoveItem; + newAction.addAction.id=actionToDoListTransfer.at(i).id; + newAction.userAction.moveAt=lastGoodPositionReal; + newAction.userAction.position=i; + actionDone << newAction; + actionToDoListTransfer.swap(i,lastGoodPositionReal); + } + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Try move up false, item ")+QString::number(i)); + ids.removeOne(actionToDoListTransfer.at(i).id); + if(ids.isEmpty()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop with return"); + return; + } + } + else + { + lastGoodPositionReal=i; + haveGoodPosition=true; + } + } + sendActionDone(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop"); +} + +//move down +void ListThread::moveItemsDown(QList<int> ids) +{ + if(actionToDoListTransfer.size()<=1) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"list size is empty"); + return; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + //do list operation + int lastGoodPositionReal=0; + bool haveGoodPosition=false; + for (int i=actionToDoListTransfer.size()-1; i>=0; --i) { + if(ids.contains(actionToDoListTransfer.at(i).id)) + { + if(haveGoodPosition) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("move item ")+QString::number(i)+QStringLiteral(" to ")+QString::number(i+1)); + Ultracopier::ReturnActionOnCopyList newAction; + newAction.type=Ultracopier::MoveItem; + newAction.addAction.id=actionToDoListTransfer.at(i).id; + newAction.userAction.moveAt=lastGoodPositionReal; + newAction.userAction.position=i; + actionDone << newAction; + actionToDoListTransfer.swap(i,lastGoodPositionReal); + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Try move up false, item ")+QString::number(i)); + } + ids.removeOne(actionToDoListTransfer.at(i).id); + if(ids.isEmpty()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop with return"); + return; + } + } + else + { + lastGoodPositionReal=i; + haveGoodPosition=true; + } + } + sendActionDone(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop"); +} + +//put on bottom +void ListThread::moveItemsOnBottom(QList<int> ids) +{ + if(actionToDoListTransfer.size()<=1) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"list size is empty"); + return; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + //do list operation + int lastGoodPositionReal=actionToDoListTransfer.size()-1; + for (int i=lastGoodPositionReal; i>=0; --i) { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Check action on item ")+QString::number(i)); + if(ids.contains(actionToDoListTransfer.at(i).id)) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("move item ")+QString::number(i)+QStringLiteral(" to ")+QString::number(lastGoodPositionReal)); + ids.removeOne(actionToDoListTransfer.at(i).id); + Ultracopier::ReturnActionOnCopyList newAction; + newAction.type=Ultracopier::MoveItem; + newAction.addAction.id=actionToDoListTransfer.at(i).id; + newAction.userAction.moveAt=lastGoodPositionReal; + newAction.userAction.position=i; + actionDone << newAction; + actionToDoListTransfer.move(i,lastGoodPositionReal); + lastGoodPositionReal--; + if(ids.isEmpty()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop with return"); + return; + } + } + } + sendActionDone(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"stop"); +} + +/** \brief give the forced mode, to export/import transfer list */ +void ListThread::forceMode(const Ultracopier::CopyMode &mode) +{ + #ifdef ULTRACOPIER_PLUGIN_RSYNC + if(mode==Ultracopier::Move) + setRsync(false); + #endif + if(mode==Ultracopier::Copy) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Force mode to copy")); + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("Force mode to move")); + this->mode=mode; + forcedMode=true; +} + +void ListThread::exportTransferList(const QString &fileName) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + QFile transferFile(fileName); + if(transferFile.open(QIODevice::WriteOnly|QIODevice::Truncate)) + { + transferFile.write(QStringLiteral("Ultracopier;Transfer-list;").toUtf8()); + if(!forcedMode) + transferFile.write(QStringLiteral("Transfer;").toUtf8()); + else + { + if(mode==Ultracopier::Copy) + transferFile.write(QStringLiteral("Copy;").toUtf8()); + else + transferFile.write(QStringLiteral("Move;").toUtf8()); + } + transferFile.write(QStringLiteral("Ultracopier\n").toUtf8()); + bool haveError=false; + int size=actionToDoListTransfer.size(); + for (int index=0;index<size;++index) { + if(actionToDoListTransfer.at(index).mode==Ultracopier::Copy) + { + if(!forcedMode || mode==Ultracopier::Copy) + { + if(forcedMode) + transferFile.write(QStringLiteral("%1;%2\n").arg(actionToDoListTransfer.at(index).source.absoluteFilePath()).arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()).toUtf8()); + else + transferFile.write(QStringLiteral("Copy;%1;%2\n").arg(actionToDoListTransfer.at(index).source.absoluteFilePath()).arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()).toUtf8()); + } + else + haveError=true; + } + else if(actionToDoListTransfer.at(index).mode==Ultracopier::Move) + { + if(!forcedMode || mode==Ultracopier::Move) + { + if(forcedMode) + transferFile.write(QStringLiteral("%1;%2\n").arg(actionToDoListTransfer.at(index).source.absoluteFilePath()).arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()).toUtf8()); + else + transferFile.write(QStringLiteral("Move;%1;%2\n").arg(actionToDoListTransfer.at(index).source.absoluteFilePath()).arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()).toUtf8()); + } + else + haveError=true; + } + } + if(haveError) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Unable do to move or copy item into wrong forced mode: %1").arg(transferFile.errorString())); + emit errorTransferList(tr("Unable do to move or copy item into wrong forced mode: %1").arg(transferFile.errorString())); + } + transferFile.close(); + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Unable to save the transfer list: %1").arg(transferFile.errorString())); + emit errorTransferList(tr("Unable to save the transfer list: %1").arg(transferFile.errorString())); + return; + } +} + +void ListThread::importTransferList(const QString &fileName) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + QFile transferFile(fileName); + if(transferFile.open(QIODevice::ReadOnly)) + { + QString content; + QByteArray data=transferFile.readLine(64); + if(data.size()<=0) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Problem reading file, or file-size is 0")); + emit errorTransferList(tr("Problem reading file, or file-size is 0")); + return; + } + content=QString::fromUtf8(data); + if(content!="Ultracopier;Transfer-list;Transfer;Ultracopier\n" && content!="Ultracopier;Transfer-list;Copy;Ultracopier\n" && content!="Ultracopier;Transfer-list;Move;Ultracopier\n") + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Wrong header: \"%1\"").arg(content)); + emit errorTransferList(tr("Wrong header: \"%1\"").arg(content)); + return; + } + bool transferListMixedMode=false; + if(content=="Ultracopier;Transfer-list;Transfer;Ultracopier\n") + { + if(forcedMode) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("The transfer list is in mixed mode, but this instance is not")); + emit errorTransferList(tr("The transfer list is in mixed mode, but this instance is not in this mode")); + return; + } + else + transferListMixedMode=true; + } + if(content=="Ultracopier;Transfer-list;Copy;Ultracopier\n" && (forcedMode && mode==Ultracopier::Move)) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("The transfer list is in copy mode, but this instance is not: forcedMode: %1, mode: %2").arg(forcedMode).arg(mode)); + emit errorTransferList(tr("The transfer list is in copy mode, but this instance is not in this mode")); + return; + } + if(content=="Ultracopier;Transfer-list;Move;Ultracopier\n" && (forcedMode && mode==Ultracopier::Copy)) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("The transfer list is in move mode, but this instance is not: forcedMode: %1, mode: %2").arg(forcedMode).arg(mode)); + emit errorTransferList(tr("The transfer list is in move mode, but this instance is not in this mode")); + return; + } + + bool updateTheStatus_copying=actionToDoListTransfer.size()>0 || actionToDoListInode.size()>0 || actionToDoListInode_afterTheTransfer.size()>0; + Ultracopier::EngineActionInProgress updateTheStatus_action_in_progress; + if(updateTheStatus_copying) + updateTheStatus_action_in_progress=Ultracopier::CopyingAndListing; + else + updateTheStatus_action_in_progress=Ultracopier::Listing; + emit actionInProgess(updateTheStatus_action_in_progress); + + bool errorFound=false; + QRegularExpression correctLine; + if(transferListMixedMode) + correctLine=QRegularExpression(QStringLiteral("^(Copy|Move);[^;]+;[^;]+[\n\r]*$")); + else + correctLine=QRegularExpression(QStringLiteral("^[^;]+;[^;]+[\n\r]*$")); + QStringList args; + Ultracopier::CopyMode tempMode; + do + { + data=transferFile.readLine(65535*2); + if(data.size()>0) + { + content=QString::fromUtf8(data); + //do the import here + if(content.contains(correctLine)) + { + content.remove(QStringLiteral("\n")); + args=content.split(QStringLiteral(";")); + if(forcedMode) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("New data to import in forced mode: %2,%3").arg(args.at(0)).arg(args.at(1))); + addToTransfer(QFileInfo(args.at(0)),QFileInfo(args.at(1)),mode); + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("New data to import: %1,%2,%3").arg(args.at(0)).arg(args.at(1)).arg(args.at(2))); + if(args.at(0)==QStringLiteral("Copy")) + tempMode=Ultracopier::Copy; + else + tempMode=Ultracopier::Move; + addToTransfer(QFileInfo(args.at(1)),QFileInfo(args.at(2)),tempMode); + } + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Wrong line syntax: %1").arg(content)); + errorFound=true; + } + } + } + while(data.size()>0); + transferFile.close(); + if(errorFound) + emit warningTransferList(tr("Some errors have been found during the line parsing")); + + updateTheStatus();//->sendActionDone(); into this + autoStartAndCheckSpace(); + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Unable to open the transfer list: %1").arg(transferFile.errorString())); + emit errorTransferList(tr("Unable to open the transfer list: %1").arg(transferFile.errorString())); + return; + } +} + +int ListThread::getNumberOfTranferRuning() const +{ + int numberOfTranferRuning=0; + const int &loop_size=transferThreadList.size(); + //lunch the transfer in WaitForTheTransfer + int int_for_loop=0; + while(int_for_loop<loop_size) + { + if(transferThreadList.at(int_for_loop)->getStat()==TransferStat_Transfer && transferThreadList.at(int_for_loop)->transferId!=0 && transferThreadList.at(int_for_loop)->transferSize>=parallelizeIfSmallerThan) + numberOfTranferRuning++; + int_for_loop++; + } + return numberOfTranferRuning; +} + +//return +bool ListThread::needMoreSpace() const +{ + if(!checkDiskSpace) + return false; + QList<Diskspace> diskspace_list; + QHashIterator<QString,quint64> i(requiredSpace); + while (i.hasNext()) { + i.next(); + #ifdef Q_OS_WIN32 + if(i.key()!="A:\\" && i.key()!="A:/" && i.key()!="A:" && i.key()!="A" && i.key()!="a:\\" && i.key()!="a:/" && i.key()!="a:" && i.key()!="a") + { + #endif + QStorageInfo storageInfo(i.key()); + storageInfo.refresh(); + const qint64 &availableSpace=storageInfo.bytesAvailable(); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + const qint64 &bytesFree=storageInfo.bytesFree(); + #endif + + if(availableSpace<0 || + //workaround for all 0 value in case of bug from Qt + (availableSpace==0 && storageInfo.bytesTotal()==0) + ) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("availableSpace: %1, space needed: %2, on: %3, bytesFree: %4").arg(availableSpace).arg(i.value()).arg(i.key()).arg(bytesFree)); + } + else if(i.value()>(quint64)availableSpace) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("availableSpace: %1, space needed: %2, on: %3, bytesFree: %4").arg(availableSpace).arg(i.value()).arg(i.key()).arg(bytesFree)); + #ifdef Q_OS_WIN32 + //if(i.key().contains(QRegularExpression("^[a-zA-Z]:[\\\\/]"))) + if(i.key().contains(QRegularExpression("^[a-zA-Z]:"))) + #endif + { + Diskspace diskspace; + diskspace.drive=i.key(); + diskspace.freeSpace=availableSpace; + diskspace.requiredSpace=i.value(); + diskspace_list << diskspace; + } + #ifdef Q_OS_WIN32 + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("not local drive")); + #endif + } + #ifdef Q_OS_WIN32 + } + #endif + } + if(!diskspace_list.isEmpty()) + emit missingDiskSpace(diskspace_list); + return ! diskspace_list.isEmpty(); +} + +//do new actions +void ListThread::doNewActions_start_transfer() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("actionToDoListTransfer.size(): %1, numberOfTranferRuning: %2").arg(actionToDoListTransfer.size()).arg(getNumberOfTranferRuning())); + if(stopIt || putInPause) + return; + int numberOfTranferRuning=getNumberOfTranferRuning(); + const int &loop_size=transferThreadList.size(); + //lunch the transfer in WaitForTheTransfer + int int_for_loop=0; + while(int_for_loop<loop_size) + { + if(transferThreadList.at(int_for_loop)->getStat()==TransferStat_WaitForTheTransfer) + { + if(transferThreadList.at(int_for_loop)->transferSize>=parallelizeIfSmallerThan) + { + if(numberOfTranferRuning<ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER) + { + transferThreadList.at(int_for_loop)->startTheTransfer(); + numberOfTranferRuning++; + } + } + else + transferThreadList.at(int_for_loop)->startTheTransfer(); + } + int_for_loop++; + } + int_for_loop=0; + while(int_for_loop<loop_size) + { + if(transferThreadList.at(int_for_loop)->getStat()==TransferStat_PreOperation) + { + if(transferThreadList.at(int_for_loop)->transferSize>=parallelizeIfSmallerThan) + { + if(numberOfTranferRuning<ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER) + { + transferThreadList.at(int_for_loop)->startTheTransfer(); + numberOfTranferRuning++; + } + } + else + transferThreadList.at(int_for_loop)->startTheTransfer(); + } + int_for_loop++; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("numberOfTranferRuning: ")+QString::number(numberOfTranferRuning)); +} + +/** \brief lunch the pre-op or inode op + 1) locate the next next item to do into the both list + 1a) optimisation posible on the mkpath/rmpath + 2) determine what need be lunched + 3) lunch it, rerun the 2) + */ +void ListThread::doNewActions_inode_manipulation() +{ + #ifdef ULTRACOPIER_PLUGIN_DEBUG_SCHEDULER + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("actionToDoList.size(): %1").arg(actionToDoListTransfer.size())); + #endif + if(stopIt) + checkIfReadyToCancel(); + if(stopIt || putInPause) + return; + #ifdef ULTRACOPIER_PLUGIN_DEBUG_SCHEDULER + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + #endif + //lunch the pre-op or inode op + TransferThread *currentTransferThread; + int int_for_loop=0; + int int_for_internal_loop=0; + int int_for_transfer_thread_search=0; + actionToDoListTransfer_count=actionToDoListTransfer.size(); + actionToDoListInode_count=actionToDoListInode.size(); + int loop_sub_size_transfer_thread_search=transferThreadList.size(); + //search the next transfer action to do + while(int_for_loop<actionToDoListTransfer_count) + { + if(!actionToDoListTransfer.at(int_for_loop).isRunning) + { + //search the next inode action to do + while(int_for_internal_loop<actionToDoListInode_count) + { + if(!actionToDoListInode.at(int_for_internal_loop).isRunning) + { + if(actionToDoListTransfer.at(int_for_loop).id<actionToDoListInode.at(int_for_internal_loop).id) + { + //do the tranfer action in the next code + break; + } + else + { + //do the inode action + #include "ListThread_InodeAction.cpp" + } + } + int_for_internal_loop++; + } + ActionToDoTransfer& currentActionToDoTransfer=actionToDoListTransfer[int_for_loop]; + //do the tranfer action + while(int_for_transfer_thread_search<loop_sub_size_transfer_thread_search) + { + /** + transferThreadList.at(int_for_transfer_thread_search)->transferId==0) /!\ important! + Because the other thread can have call doNewAction before than this thread have the finish event parsed! + I this case it lose all data + */ + currentTransferThread=transferThreadList.at(int_for_transfer_thread_search); + if(currentTransferThread->getStat()==TransferStat_Idle && currentTransferThread->transferId==0) // /!\ important! + { + QString drive=driveManagement.getDrive(actionToDoListTransfer.at(int_for_internal_loop).destination.absoluteFilePath()); + if(requiredSpace.contains(drive) && (actionToDoListTransfer.at(int_for_internal_loop).mode!=Ultracopier::Move || drive!=driveManagement.getDrive(actionToDoListTransfer.at(int_for_internal_loop).source.absoluteFilePath()))) + { + requiredSpace[drive]-=actionToDoListTransfer.at(int_for_internal_loop).size; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("space needed removed: %1, space needed: %2, on: %3").arg(actionToDoListTransfer.at(int_for_internal_loop).size).arg(requiredSpace.value(drive)).arg(drive)); + } + currentTransferThread->transferId=currentActionToDoTransfer.id; + currentTransferThread->transferSize=currentActionToDoTransfer.size; + if(!currentTransferThread->setFiles( + currentActionToDoTransfer.source, + currentActionToDoTransfer.size, + currentActionToDoTransfer.destination, + currentActionToDoTransfer.mode + )) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[%1] id: %2 is idle, but seam busy at set name: %3").arg(int_for_loop).arg(currentTransferThread->transferId).arg(currentActionToDoTransfer.destination.absoluteFilePath())); + break; + } + currentActionToDoTransfer.isRunning=true; + + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[%1] id: %2 is idle, use it for %3").arg(int_for_loop).arg(currentTransferThread->transferId).arg(currentActionToDoTransfer.destination.absoluteFilePath())); + + /// \note wrong position? Else write why it's here + Ultracopier::ReturnActionOnCopyList newAction; + newAction.type = Ultracopier::PreOperation; + newAction.addAction.id = currentActionToDoTransfer.id; + newAction.addAction.sourceFullPath = currentActionToDoTransfer.source.absoluteFilePath(); + newAction.addAction.sourceFileName = currentActionToDoTransfer.source.fileName(); + newAction.addAction.destinationFullPath = currentActionToDoTransfer.destination.absoluteFilePath(); + newAction.addAction.destinationFileName = currentActionToDoTransfer.destination.fileName(); + newAction.addAction.size = currentActionToDoTransfer.size; + newAction.addAction.mode = currentActionToDoTransfer.mode; + actionDone << newAction; + int_for_transfer_thread_search++; + numberOfInodeOperation++; + #ifdef ULTRACOPIER_PLUGIN_DEBUG_SCHEDULER + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("numberOfInodeOperation: %1").arg(numberOfInodeOperation)); + #endif + break; + } + int_for_transfer_thread_search++; + } + if(int_for_internal_loop==loop_sub_size_transfer_thread_search) + { + /// \note Can be normal when all thread is not initialized + #ifdef ULTRACOPIER_PLUGIN_DEBUG_SCHEDULER + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"unable to found free thread to do the transfer"); + #endif + break; + } + #ifdef ULTRACOPIER_PLUGIN_DEBUG_SCHEDULER + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("numberOfInodeOperation: %1").arg(numberOfInodeOperation)); + #endif + if(numberOfInodeOperation>=inodeThreads) + break; + if(followTheStrictOrder) + break; + } + int_for_loop++; + } + //search the next inode action to do + int_for_internal_loop=0; + while(int_for_internal_loop<actionToDoListInode_count) + { + if(!actionToDoListInode.at(int_for_internal_loop).isRunning) + { + //do the inode action + #include "ListThread_InodeAction.cpp" + } + int_for_internal_loop++; + } + //error checking + if(actionToDoListInode_count>inodeThreads) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("The index have been detected as out of max range: %1>%2").arg(actionToDoListInode_count).arg(inodeThreads)); + return; + } +} + +//restart transfer if it can +void ListThread::restartTransferIfItCan() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + TransferThread *transfer=qobject_cast<TransferThread *>(QObject::sender()); + if(transfer==NULL) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("transfer thread not located!")); + return; + } + int numberOfTranferRuning=getNumberOfTranferRuning(); + if(numberOfTranferRuning<ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER && transfer->getStat()==TransferStat_WaitForTheTransfer) + transfer->startTheTransfer(); + doNewActions_start_transfer(); +} + +/// \brief update the transfer stat +void ListThread::newTransferStat(const TransferStat &stat,const quint64 &id) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("TransferStat: %1").arg(stat)); + Ultracopier::ReturnActionOnCopyList newAction; + switch(stat) + { + case TransferStat_Idle: + return; + break; + case TransferStat_PreOperation: + return; + break; + case TransferStat_WaitForTheTransfer: + return; + break; + case TransferStat_Transfer: + newAction.type=Ultracopier::Transfer; + break; + case TransferStat_PostTransfer: + case TransferStat_PostOperation: + newAction.type=Ultracopier::PostOperation; + break; + case TransferStat_Checksum: + newAction.type=Ultracopier::CustomOperation; + break; + default: + return; + break; + } + newAction.addAction.id = id; + actionDone << newAction; +} + +void ListThread::set_osBufferLimit(const unsigned int &osBufferLimit) +{ + this->osBufferLimit=osBufferLimit; + int index=0; + int loop_sub_size_transfer_thread_search=transferThreadList.size(); + while(index<loop_sub_size_transfer_thread_search) + { + transferThreadList.at(index)->set_osBufferLimit(osBufferLimit); + index++; + } +} + +void ListThread::set_setFilters(const QList<Filters_rules> &include,const QList<Filters_rules> &exclude) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("include.size(): %1, exclude.size(): %2").arg(include.size()).arg(exclude.size())); + this->include=include; + this->exclude=exclude; + int index=0; + while(index<scanFileOrFolderThreadsPool.size()) + { + scanFileOrFolderThreadsPool.at(index)->setFilters(include,exclude); + index++; + } +} + +void ListThread::set_sendNewRenamingRules(const QString &firstRenamingRule,const QString &otherRenamingRule) +{ + this->firstRenamingRule=firstRenamingRule; + this->otherRenamingRule=otherRenamingRule; + emit send_sendNewRenamingRules(firstRenamingRule,otherRenamingRule); +} + +void ListThread::set_updateMount() +{ + driveManagement.tryUpdate(); + emit send_updateMount(); +} + +void ListThread::mkPathFirstFolderFinish() +{ + int int_for_loop=0; + const int &loop_size=actionToDoListInode.size(); + while(int_for_loop<loop_size) + { + if(actionToDoListInode.at(int_for_loop).isRunning) + { + if(actionToDoListInode.at(int_for_loop).type==ActionType_MkPath) + { + //to send to the log + emit mkPath(actionToDoListInode.at(int_for_loop).destination.absoluteFilePath()); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("stop mkpath: %1").arg(actionToDoListInode.at(int_for_loop).destination.absoluteFilePath())); + actionToDoListInode.removeAt(int_for_loop); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("actionToDoListTransfer.size(): %1, actionToDoListInode: %2, actionToDoListInode_afterTheTransfer: %3").arg(actionToDoListTransfer.size()).arg(actionToDoListInode.size()).arg(actionToDoListInode_afterTheTransfer.size())); + if(actionToDoListTransfer.isEmpty() && actionToDoListInode.isEmpty() && actionToDoListInode_afterTheTransfer.isEmpty()) + updateTheStatus(); + numberOfInodeOperation--; + #ifdef ULTRACOPIER_PLUGIN_DEBUG_SCHEDULER + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("numberOfInodeOperation: %1").arg(numberOfInodeOperation)); + #endif + doNewActions_inode_manipulation(); + return; + } + if(actionToDoListInode.at(int_for_loop).type==ActionType_MovePath || actionToDoListInode.at(int_for_loop).type==ActionType_RealMove + #ifdef ULTRACOPIER_PLUGIN_RSYNC + || actionToDoListInode.at(int_for_loop).type==ActionType_RmSync + #endif + ) + { + //to send to the log + #ifdef ULTRACOPIER_PLUGIN_RSYNC + if(actionToDoListInode.at(int_for_loop).type!=ActionType_RmSync) + emit mkPath(actionToDoListInode.at(int_for_loop).destination.absoluteFilePath()); + #else + emit mkPath(actionToDoListInode.at(int_for_loop).destination.absoluteFilePath()); + #endif + emit rmPath(actionToDoListInode.at(int_for_loop).source.absoluteFilePath()); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("stop mkpath: %1").arg(actionToDoListInode.at(int_for_loop).destination.absoluteFilePath())); + actionToDoListInode.removeAt(int_for_loop); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("actionToDoListTransfer.size(): %1, actionToDoListInode: %2, actionToDoListInode_afterTheTransfer: %3").arg(actionToDoListTransfer.size()).arg(actionToDoListInode.size()).arg(actionToDoListInode_afterTheTransfer.size())); + if(actionToDoListTransfer.isEmpty() && actionToDoListInode.isEmpty() && actionToDoListInode_afterTheTransfer.isEmpty()) + updateTheStatus(); + numberOfInodeOperation--; + #ifdef ULTRACOPIER_PLUGIN_DEBUG_SCHEDULER + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("numberOfInodeOperation: %1").arg(numberOfInodeOperation)); + #endif + doNewActions_inode_manipulation(); + return; + } + + } + int_for_loop++; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"unable to found item into the todo list"); +} + +#ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW + +void ListThread::timedUpdateDebugDialog() +{ + QStringList newList; + int index=0; + int loop_sub_size_transfer_thread_search=transferThreadList.size(); + while(index<loop_sub_size_transfer_thread_search) + { + QString stat; + switch(transferThreadList.at(index)->getStat()) + { + case TransferStat_Idle: + stat="Idle"; + break; + case TransferStat_PreOperation: + stat="PreOperation"; + break; + case TransferStat_WaitForTheTransfer: + stat="WaitForTheTransfer"; + break; + case TransferStat_Transfer: + stat="Transfer"; + break; + case TransferStat_PostOperation: + stat="PostOperation"; + break; + case TransferStat_PostTransfer: + stat="PostTransfer"; + break; + case TransferStat_Checksum: + stat="Checksum"; + break; + default: + stat=QStringLiteral("??? (%1)").arg(transferThreadList.at(index)->getStat()); + break; + } + newList << QStringLiteral("%1) (%3,%4) %2") + .arg(index) + .arg(stat) + .arg(transferThreadList.at(index)->readingLetter()) + .arg(transferThreadList.at(index)->writingLetter()); + index++; + } + QStringList newList2; + index=0; + const int &loop_size=actionToDoListTransfer.size(); + while(index<loop_size) + { + newList2 << QStringLiteral("%1 %2 %3") + .arg(actionToDoListTransfer.at(index).source.absoluteFilePath()) + .arg(actionToDoListTransfer.at(index).size) + .arg(actionToDoListTransfer.at(index).destination.absoluteFilePath()); + if(index>((inodeThreads+ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER)*2+1)) + { + newList2 << QStringLiteral("..."); + break; + } + index++; + } + emit updateTheDebugInfo(newList,newList2,numberOfInodeOperation); +} + +#endif + +/// \note Can be call without queue because all call will be serialized +void ListThread::fileAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame) +{ + emit send_fileAlreadyExists(source,destination,isSame,qobject_cast<TransferThread *>(sender())); +} + +/// \note Can be call without queue because all call will be serialized +void ListThread::errorOnFile(const QFileInfo &fileInfo, const QString &errorString, const ErrorType &errorType) +{ + TransferThread * transferThread=qobject_cast<TransferThread *>(sender()); + if(transferThread==NULL) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"Thread locating error"); + return; + } + ErrorLogEntry errorLogEntry; + errorLogEntry.source=transferThread->getSourceInode(); + errorLogEntry.destination=transferThread->getDestinationInode(); + errorLogEntry.mode=transferThread->getMode(); + errorLogEntry.error=errorString; + errorLog << errorLogEntry; + emit errorToRetry(transferThread->getSourcePath(),transferThread->getDestinationPath(),errorString); + emit send_errorOnFile(fileInfo,errorString,transferThread,errorType); +} + +/// \note Can be call without queue because all call will be serialized +void ListThread::folderAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame) +{ + emit send_folderAlreadyExists(source,destination,isSame,qobject_cast<ScanFileOrFolder *>(sender())); +} + +/// \note Can be call without queue because all call will be serialized +/// \todo all this part +void ListThread::errorOnFolder(const QFileInfo &fileInfo,const QString &errorString,const ErrorType &errorType) +{ + emit send_errorOnFolder(fileInfo,errorString,qobject_cast<ScanFileOrFolder *>(sender()),errorType); +} + +//to run the thread +void ListThread::run() +{ + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + clockForTheCopySpeed=new QTimer(); + #endif + + exec(); +} + +void ListThread::getNeedPutAtBottom(const QFileInfo &fileInfo, const QString &errorString, TransferThread *thread, const ErrorType &errorType) +{ + if(actionToDoListTransfer.empty()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"can't try put at bottom if empty"); + this->alwaysDoThisActionForFileExists=FileExists_NotSet; + putAtBottom=0; + emit haveNeedPutAtBottom(false,fileInfo,errorString,thread,errorType); + return; + } + bool needPutAtBottom=(putAtBottom<(quint32)actionToDoListTransfer.size()); + if(!needPutAtBottom) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"Reset put at bottom"); + this->alwaysDoThisActionForFileExists=FileExists_NotSet; + putAtBottom=0; + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"Put at bottom for later try"); + thread->putAtBottom(); + putAtBottom++; + return; + } + emit haveNeedPutAtBottom(needPutAtBottom,fileInfo,errorString,thread,errorType); +} + +/// \to create transfer thread +void ListThread::createTransferThread() +{ + if(stopIt) + return; + if(transferThreadList.size()>=inodeThreads) + return; + transferThreadList << new TransferThread(); + TransferThread * last=transferThreadList.last(); + last->transferId=0; + last->transferSize=0; + last->setRightTransfer(doRightTransfer); + last->setKeepDate(keepDate); + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + if(!last->setBlockSize(blockSizeAfterSpeedLimitation)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unable to set the block size: ")+QString::number(blockSizeAfterSpeedLimitation)); + #else + if(!last->setBlockSize(blockSize)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unable to set the block size: ")+QString::number(blockSize)); + #endif + if(!last->setSequentialBuffer(sequentialBuffer)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unable to set the sequentialBuffer: ")+QString::number(sequentialBuffer)); + if(!last->setBlockSize(parallelBuffer)) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unable to set the parallelBuffer: ")+QString::number(parallelBuffer)); + last->setAlwaysFileExistsAction(alwaysDoThisActionForFileExists); + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + last->setMultiForBigSpeed(multiForBigSpeed); + #endif + last->set_doChecksum(doChecksum); + last->set_checksumIgnoreIfImpossible(checksumIgnoreIfImpossible); + last->set_checksumOnlyOnError(checksumOnlyOnError); + last->set_osBuffer(osBuffer); + last->set_osBufferLimited(osBufferLimited); + last->set_osBufferLimit(osBufferLimit); + last->setDeletePartiallyTransferredFiles(deletePartiallyTransferredFiles); + #ifdef ULTRACOPIER_PLUGIN_RSYNC + last->setRsync(rsync); + #endif + + #ifdef ULTRACOPIER_PLUGIN_DEBUG + connect(last,&TransferThread::debugInformation, this,&ListThread::debugInformation, Qt::QueuedConnection); + #endif // ULTRACOPIER_PLUGIN_DEBUG + connect(last,&TransferThread::errorOnFile, this,&ListThread::errorOnFile, Qt::QueuedConnection); + connect(last,&TransferThread::fileAlreadyExists, this,&ListThread::fileAlreadyExists, Qt::QueuedConnection); + connect(last,&TransferThread::tryPutAtBottom, this,&ListThread::transferPutAtBottom, Qt::QueuedConnection); + connect(last,&TransferThread::readStopped, this,&ListThread::doNewActions_start_transfer, Qt::QueuedConnection); + connect(last,&TransferThread::preOperationStopped, this,&ListThread::doNewActions_start_transfer, Qt::QueuedConnection); + connect(last,&TransferThread::postOperationStopped, this,&ListThread::transferInodeIsClosed, Qt::QueuedConnection); + connect(last,&TransferThread::checkIfItCanBeResumed, this,&ListThread::restartTransferIfItCan, Qt::QueuedConnection); + connect(last,&TransferThread::pushStat, this,&ListThread::newTransferStat, Qt::QueuedConnection); + + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + //speed limitation + connect(clockForTheCopySpeed, &QTimer::timeout, last, &TransferThread::timeOfTheBlockCopyFinished, Qt::QueuedConnection); + #endif + + connect(this,&ListThread::send_sendNewRenamingRules, last,&TransferThread::setRenamingRules, Qt::QueuedConnection); + + connect(this,&ListThread::send_setTransferAlgorithm, last,&TransferThread::setTransferAlgorithm, Qt::QueuedConnection); + connect(this,&ListThread::send_parallelBuffer, last,&TransferThread::setParallelBuffer, Qt::QueuedConnection); + connect(this,&ListThread::send_sequentialBuffer, last,&TransferThread::setSequentialBuffer, Qt::QueuedConnection); + connect(this,&ListThread::send_updateMount, last,&TransferThread::set_updateMount, Qt::QueuedConnection); + + last->start(); + last->setObjectName(QStringLiteral("transfer %1").arg(transferThreadList.size()-1)); + last->setMkpathTransfer(&mkpathTransfer); + last->setRenamingRules(firstRenamingRule,otherRenamingRule); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + last->setId(transferThreadList.size()-1); + #endif + if(transferThreadList.size()>=inodeThreads) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("create the last of the ")+QString::number(inodeThreads)+QStringLiteral(" transferThread")); + return; + } + if(stopIt) + return; + doNewActions_inode_manipulation(); + emit askNewTransferThread(); +} + +void ListThread::deleteTransferThread() +{ + int loop_size=transferThreadList.size(); + if(loop_size>inodeThreads) + { + int index=0; + while(index<loop_size && loop_size>inodeThreads) + { + if(transferThreadList.at(index)->getStat()==TransferStat_Idle && transferThreadList.at(index)->transferId==0) + { + transferThreadList.at(index)->stop(); + delete transferThreadList.at(index);//->deleteLayer(); + transferThreadList[index]=NULL; + transferThreadList.removeAt(index); + loop_size--; + } + else + index++; + } + if(loop_size==inodeThreads) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("inodeThreads is lowered to the right value: ")+QString::number(inodeThreads)); + } +} + +void ListThread::setTransferAlgorithm(const TransferAlgorithm &transferAlgorithm) +{ + if(transferAlgorithm==TransferAlgorithm_Sequential) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("transferAlgorithm==TransferAlgorithm_Sequential")); + else if(transferAlgorithm==TransferAlgorithm_Automatic) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("transferAlgorithm==TransferAlgorithm_Automatic")); + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("transferAlgorithm==TransferAlgorithm_Parallel")); + emit send_setTransferAlgorithm(transferAlgorithm); +} + +void ListThread::setParallelBuffer(int parallelBuffer) +{ + if(parallelBuffer<1 || parallelBuffer>ULTRACOPIER_PLUGIN_MAX_PARALLEL_NUMBER_OF_BLOCK) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("wrong number of block: ")+QString::number(parallelBuffer)); + return; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("in number of block: ")+QString::number(parallelBuffer)); + this->parallelBuffer=parallelBuffer; + emit send_parallelBuffer(parallelBuffer); +} + +void ListThread::setSequentialBuffer(int sequentialBuffer) +{ + if(sequentialBuffer<1 || sequentialBuffer>ULTRACOPIER_PLUGIN_MAX_SEQUENTIAL_NUMBER_OF_BLOCK) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("wrong number of block: ")+QString::number(sequentialBuffer)); + return; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("in number of block: ")+QString::number(sequentialBuffer)); + this->sequentialBuffer=sequentialBuffer; + emit send_sequentialBuffer(sequentialBuffer); +} + +void ListThread::setParallelizeIfSmallerThan(const unsigned int ¶llelizeIfSmallerThan) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("parallelizeIfSmallerThan in Bytes: ")+QString::number(parallelizeIfSmallerThan)); + this->parallelizeIfSmallerThan=parallelizeIfSmallerThan; +} + +void ListThread::setMoveTheWholeFolder(const bool &moveTheWholeFolder) +{ + for(int i=0;i<scanFileOrFolderThreadsPool.size();i++) + scanFileOrFolderThreadsPool.at(i)->setMoveTheWholeFolder(moveTheWholeFolder); + this->moveTheWholeFolder=moveTheWholeFolder; +} + +void ListThread::setFollowTheStrictOrder(const bool &followTheStrictOrder) +{ + this->followTheStrictOrder=followTheStrictOrder; +} + +void ListThread::setDeletePartiallyTransferredFiles(const bool &deletePartiallyTransferredFiles) +{ + this->deletePartiallyTransferredFiles=deletePartiallyTransferredFiles; + int index=0; + int loop_sub_size_transfer_thread_search=transferThreadList.size(); + while(index<loop_sub_size_transfer_thread_search) + { + transferThreadList.at(index)->setDeletePartiallyTransferredFiles(deletePartiallyTransferredFiles); + index++; + } +} + +void ListThread::setInodeThreads(const int &inodeThreads) +{ + if(inodeThreads<1 || inodeThreads>32) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("inodeThreads is out of ranges: ")+QString::number(inodeThreads)); + return; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("inodeThreads: ")+QString::number(inodeThreads)); + this->inodeThreads=inodeThreads; + createTransferThread(); + deleteTransferThread(); +} + +void ListThread::setRenameTheOriginalDestination(const bool &renameTheOriginalDestination) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("renameTheOriginalDestination: ")+QString::number(renameTheOriginalDestination)); + this->renameTheOriginalDestination=renameTheOriginalDestination; + int index=0; + int loop_sub_size_transfer_thread_search=transferThreadList.size(); + while(index<loop_sub_size_transfer_thread_search) + { + transferThreadList.at(index)->setRenameTheOriginalDestination(renameTheOriginalDestination); + index++; + } +} + +void ListThread::setCheckDiskSpace(const bool &checkDiskSpace) +{ + this->checkDiskSpace=checkDiskSpace; +} + +void ListThread::setCopyListOrder(const bool &order) +{ + this->copyListOrder=order; + for(int i=0;i<scanFileOrFolderThreadsPool.size();i++) + scanFileOrFolderThreadsPool.at(i)->setCopyListOrder(this->copyListOrder); +} + +void ListThread::exportErrorIntoTransferList(const QString &fileName) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + QFile transferFile(fileName); + if(transferFile.open(QIODevice::WriteOnly|QIODevice::Truncate)) + { + transferFile.write(QStringLiteral("Ultracopier;Transfer-list;").toUtf8()); + if(!forcedMode) + transferFile.write(QStringLiteral("Transfer;").toUtf8()); + else + { + if(mode==Ultracopier::Copy) + transferFile.write(QStringLiteral("Copy;").toUtf8()); + else + transferFile.write(QStringLiteral("Move;").toUtf8()); + } + transferFile.write(QStringLiteral("Ultracopier\n").toUtf8()); + bool haveError=false; + int size=errorLog.size(); + for (int index=0;index<size;++index) { + if(errorLog.at(index).mode==Ultracopier::Copy) + { + if(!forcedMode || mode==Ultracopier::Copy) + { + if(forcedMode) + transferFile.write(QStringLiteral("%1;%2\n").arg(errorLog.at(index).source.absoluteFilePath()).arg(errorLog.at(index).destination.absoluteFilePath()).toUtf8()); + else + transferFile.write(QStringLiteral("Copy;%1;%2\n").arg(errorLog.at(index).source.absoluteFilePath()).arg(errorLog.at(index).destination.absoluteFilePath()).toUtf8()); + } + else + haveError=true; + } + else if(errorLog.at(index).mode==Ultracopier::Move) + { + if(!forcedMode || mode==Ultracopier::Move) + { + if(forcedMode) + transferFile.write(QStringLiteral("%1;%2\n").arg(errorLog.at(index).source.absoluteFilePath()).arg(errorLog.at(index).destination.absoluteFilePath()).toUtf8()); + else + transferFile.write(QStringLiteral("Move;%1;%2\n").arg(errorLog.at(index).source.absoluteFilePath()).arg(errorLog.at(index).destination.absoluteFilePath()).toUtf8()); + } + else + haveError=true; + } + } + if(haveError) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Unable do to move or copy item into wrong forced mode: %1").arg(transferFile.errorString())); + emit errorTransferList(tr("Unable do to move or copy item into wrong forced mode: %1").arg(transferFile.errorString())); + } + transferFile.close(); + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Unable to save the transfer list: %1").arg(transferFile.errorString())); + emit errorTransferList(tr("Unable to save the transfer list: %1").arg(transferFile.errorString())); + return; + } +} diff --git a/plugins/CopyEngine/Ultracopier/ListThread.h b/plugins/CopyEngine/Ultracopier/ListThread.h new file mode 100644 index 0000000..a778604 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/ListThread.h @@ -0,0 +1,431 @@ +/** \file ListThread.h +\brief Define the list thread, and management to the action to do +\author alpha_one_x86 +\licence GPL3, see the file COPYING */ + +#ifndef LISTTHREAD_H +#define LISTTHREAD_H + +#include <QThread> +#include <QObject> +#include <QList> +#include <QStringList> +#include <QFileInfo> +#include <QSemaphore> +#include <QTextStream> +#include <QFile> +#include <QTimer> + +#include "../../../interface/PluginInterface_CopyEngine.h" +#include "ScanFileOrFolder.h" +#include "TransferThread.h" +#include "MkPath.h" +#include "Environment.h" +#include "DriveManagement.h" + +/// \brief Define the list thread, and management to the action to do +class ListThread : public QThread +{ + Q_OBJECT +public: + explicit ListThread(FacilityInterface * facilityInterface); + ~ListThread(); + + //duplication copy detection + /** \brief compare the current sources of the copy, with the passed arguments + * \param sources the sources list to compares with the current sources list + * \return true if have same sources, else false (or empty) */ + bool haveSameSource(const QStringList &sources); + /** \brief compare the current destination of the copy, with the passed arguments + * \param destination the destination to compares with the current destination + * \return true if have same destination, else false (or empty) */ + bool haveSameDestination(const QString &destination); + /// \return empty if multiple or no destination + QString getUniqueDestinationFolder() const; + //external soft like file browser have send copy/move list to do + /** \brief send copy with destination + * \param sources the sources list to copy + * \param destination the destination to copy + * \return true if the copy have been accepted */ + bool newCopy(const QStringList &sources,const QString &destination); + /** \brief send move without destination, ask the destination + * \param sources the sources list to move + * \param destination the destination to move + * \return true if the move have been accepted */ + bool newMove(const QStringList &sources,const QString &destination); + /** \brief to set drives detected + * specific to this copy engine */ + /// \brief to set the collision action + void setCollisionAction(const FileExistsAction &alwaysDoThisActionForFileExists); + /** \brief to sync the transfer list + * Used when the interface is changed, useful to minimize the memory size */ + void syncTransferList(); + /// \brief to store one action to do + struct ActionToDoTransfer + { + quint64 id; + qint64 size;///< Used to set: used in case of transfer or remainingInode for drop folder + QFileInfo source;///< Used to set: source for transfer, folder to create, folder to drop + QFileInfo destination; + Ultracopier::CopyMode mode; + bool isRunning;///< store if the action si running + //TransferThread * transfer; // -> see transferThreadList + }; + QList<ActionToDoTransfer> actionToDoListTransfer; + /// \brief to store one action to do + struct ActionToDoInode + { + ActionType type;///< \see ActionType + quint64 id; + qint64 size;///< Used to set: used in case of transfer or remainingInode for drop folder + QFileInfo source;///< Keep to copy the right/date, to remove (for move) + QFileInfo destination;///< Used to set: folder to create, folder to drop + bool isRunning;///< store if the action si running + }; + QList<ActionToDoInode> actionToDoListInode; + QList<ActionToDoInode> actionToDoListInode_afterTheTransfer; + int numberOfInodeOperation; + struct ErrorLogEntry + { + QFileInfo source; + QFileInfo destination; + QString error; + Ultracopier::CopyMode mode; + }; + QList<ErrorLogEntry> errorLog; + //dir operation thread queue + MkPath mkPathQueue; + //to get the return value from copyEngine + bool getReturnBoolToCopyEngine() const; + QPair<quint64,quint64> getReturnPairQuint64ToCopyEngine() const; + Ultracopier::ItemOfCopyList getReturnItemOfCopyListToCopyEngine() const; + + 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 autoStartIfNeeded(); +public slots: + //action on the copy + /// \brief put the transfer in pause + void pause(); + /// \brief resume the transfer + void resume(); + /** \brief skip one transfer entry + * \param id id of the file to remove */ + void skip(const quint64 &id); + /** \brief skip as interanl one transfer entry + * \param id id of the file to remove */ + bool skipInternal(const quint64 &id); + /// \brief cancel all the transfer + void cancel(); + //edit the transfer list + /** \brief remove the selected item + * \param ids ids is the id list of the selected items */ + void removeItems(const QList<int> &ids); + /** \brief move on top of the list the selected item + * \param ids ids is the id list of the selected items */ + void moveItemsOnTop(QList<int> ids); + /** \brief move up the list the selected item + * \param ids ids is the id list of the selected items */ + void moveItemsUp(QList<int> ids); + /** \brief move down the list the selected item + * \param ids ids is the id list of the selected items */ + void moveItemsDown(QList<int> ids); + /** \brief move on bottom of the list the selected item + * \param ids ids is the id list of the selected items */ + void moveItemsOnBottom(QList<int> ids); + + /** \brief give the forced mode, to export/import transfer list */ + void forceMode(const Ultracopier::CopyMode &mode); + /// \brief export the transfer list into a file + void exportTransferList(const QString &fileName); + /// \brief import the transfer list into a file + void importTransferList(const QString &fileName); + + /// \brief set the folder local collision + void setFolderCollision(const FolderExistsAction &alwaysDoThisActionForFolderExists); + /** \brief to set the speed limitation + * -1 if not able, 0 if disabled */ + bool setSpeedLimitation(const qint64 &speedLimitation); + /// \brief set the copy info and options before runing + void setRightTransfer(const bool doRightTransfer); + /// \brief set keep date + void setKeepDate(const bool keepDate); + /// \brief set block size in KB + void setBlockSize(const int blockSize); + /// \brief set auto start + void setAutoStart(const bool autoStart); + #ifdef ULTRACOPIER_PLUGIN_RSYNC + /// \brief set rsync + void setRsync(const bool rsync); + #endif + /// \brief set check destination folder + void setCheckDestinationFolderExists(const bool checkDestinationFolderExists); + /// \brief set data local to the thread + void setAlwaysFileExistsAction(const FileExistsAction &alwaysDoThisActionForFileExists); + /// \brief do new actions, start transfer + void doNewActions_start_transfer(); + /** \brief lunch the pre-op or inode op + 1) locate the next next item to do into the both list + 1a) optimisation posible on the mkpath/rmpath + 2) determine what need be lunched + 3) lunch it, rerun the 2) + */ + void doNewActions_inode_manipulation(); + /// \brief restart transfer if it can + void restartTransferIfItCan(); + void getNeedPutAtBottom(const QFileInfo &fileInfo, const QString &errorString, TransferThread *thread,const ErrorType &errorType); + + /// \brief update the transfer stat + void newTransferStat(const TransferStat &stat,const quint64 &id); + + void set_osBufferLimit(const unsigned int &osBufferLimit); + void set_setFilters(const QList<Filters_rules> &include,const QList<Filters_rules> &exclude); + void set_sendNewRenamingRules(const QString &firstRenamingRule,const QString &otherRenamingRule); + void set_updateMount(); + + //send action done + void sendActionDone(); + //send progression + void sendProgression(); + + void setTransferAlgorithm(const TransferAlgorithm &transferAlgorithm); + void setParallelBuffer(int parallelBuffer); + void setSequentialBuffer(int sequentialBuffer); + void setParallelizeIfSmallerThan(const unsigned int ¶llelizeIfSmallerThan); + 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 setCheckDiskSpace(const bool &checkDiskSpace); + void setCopyListOrder(const bool &order); + void exportErrorIntoTransferList(const QString &fileName); +private: + QSemaphore mkpathTransfer; + QString sourceDrive; + bool sourceDriveMultiple; + QString destinationDrive; + QString destinationFolder; + bool destinationDriveMultiple; + bool destinationFolderMultiple; + DriveManagement driveManagement; + + bool stopIt; + QList<ScanFileOrFolder *> scanFileOrFolderThreadsPool; + int numberOfTransferIntoToDoList; + QList<TransferThread *> transferThreadList; + ScanFileOrFolder * newScanThread(Ultracopier::CopyMode mode); + quint64 bytesToTransfer; + quint64 bytesTransfered; + bool autoStart; + #ifdef ULTRACOPIER_PLUGIN_RSYNC + bool rsync; + #endif + bool putInPause; + QList<Ultracopier::ReturnActionOnCopyList> actionDone;///< to action to send to the interface + quint64 idIncrementNumber;///< to store the last id returned + qint64 actualRealByteTransfered; + int maxSpeed;///< in KB/s, assume as 0KB/s as default like every where + FolderExistsAction alwaysDoThisActionForFolderExists; + bool checkDestinationFolderExists; + bool doChecksum; + bool checksumIgnoreIfImpossible; + bool checksumOnlyOnError; + bool osBuffer; + bool osBufferLimited; + unsigned int parallelizeIfSmallerThan; + bool moveTheWholeFolder; + bool followTheStrictOrder; + bool deletePartiallyTransferredFiles; + int sequentialBuffer; + int parallelBuffer; + int inodeThreads; + bool renameTheOriginalDestination; + bool checkDiskSpace; + bool copyListOrder; + QHash<QString,quint64> requiredSpace; + QList<QPair<quint64,quint32> > timeToTransfer; + unsigned int putAtBottom; + unsigned int osBufferLimit; + QList<Filters_rules> include,exclude; + Ultracopier::CopyMode mode; + bool forcedMode; + QString firstRenamingRule; + QString otherRenamingRule; + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + int multiForBigSpeed; + #endif + /* here to prevent: + QObject::killTimer: timers cannot be stopped from another thread + QObject::startTimer: timers cannot be started from another thread */ + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + QTimer *clockForTheCopySpeed; ///< For the speed throttling + #endif + + inline static Ultracopier::ItemOfCopyList actionToDoTransferToItemOfCopyList(const ActionToDoTransfer &actionToDoTransfer); + //add file transfer to do + quint64 addToTransfer(const QFileInfo& source,const QFileInfo& destination,const Ultracopier::CopyMode& mode); + //generate id number + quint64 generateIdNumber(); + //warning the first entry is accessible will copy + bool removeSingleItem(const quint64 &id); + //put on top + bool moveOnTopItem(const quint64 &id); + //move up + bool moveUpItem(const quint64 &id); + //move down + bool moveDownItem(const quint64 &id); + //put on bottom + bool moveOnBottomItem(const quint64 &id); + //general transfer + void startGeneralTransfer(); + //debug windows if needed + #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW + QTimer timerUpdateDebugDialog; + #endif + void detectDrivesOfCurrentTransfer(const QStringList &sources,const QString &destination); + FacilityInterface * facilityInterface; + QSemaphore waitConstructor,waitCancel; + int actionToDoListTransfer_count,actionToDoListInode_count; + bool doTransfer,doInode; + qint64 oversize;//used as temp variable + qint64 currentProgression; + qint64 copiedSize,totalSize,localOverSize; + QList<Ultracopier::ProgressionItem> progressionList; + //memory variable for transfer thread creation + bool doRightTransfer; + bool keepDate; + int blockSize;//in Bytes + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + int blockSizeAfterSpeedLimitation;//in Bytes + #endif + QStringList drives; + FileExistsAction alwaysDoThisActionForFileExists; + //to return value to the copyEngine + bool returnBoolToCopyEngine; + QPair<quint64,quint64> returnPairQuint64ToCopyEngine; + QList<Ultracopier::ItemOfCopyList> returnListItemOfCopyListToCopyEngine; + Ultracopier::ItemOfCopyList returnItemOfCopyListToCopyEngine; + Ultracopier::ProgressionItem tempItem; + + void realByteTransfered(); + int getNumberOfTranferRuning() const; + bool needMoreSpace() const; +private slots: + void scanThreadHaveFinishSlot(); + void scanThreadHaveFinish(bool skipFirstRemove=false); + void autoStartAndCheckSpace(); + void updateTheStatus(); + void fileTransfer(const QFileInfo &sourceFileInfo,const QFileInfo &destinationFileInfo,const Ultracopier::CopyMode &mode); + //mkpath event + void mkPathFirstFolderFinish(); + /** \brief put the current file at bottom in case of error + \note ONLY IN CASE OF ERROR */ + void transferPutAtBottom(); + //transfer is finished + void transferInodeIsClosed(); + //debug windows if needed + #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW + void timedUpdateDebugDialog(); + #endif + //dialog message + /// \note Can be call without queue because all call will be serialized + void fileAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame); + /// \note Can be call without queue because all call will be serialized + void errorOnFile(const QFileInfo &fileInfo,const QString &errorString, const ErrorType &errorType); + /// \note Can be call without queue because all call will be serialized + void folderAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame); + /// \note Can be call without queue because all call will be serialized + void errorOnFolder(const QFileInfo &fileInfo, const QString &errorString, const ErrorType &errorType); + //to run the thread + void run(); + /// \to create transfer thread + void createTransferThread(); + void deleteTransferThread(); + //mk path to do + quint64 addToMkPath(const QFileInfo& source, const QFileInfo& destination, const int &inode); + //add rm path to do + void addToMovePath(const QFileInfo& source,const QFileInfo& destination, const int& inodeToRemove); + //add to real move + void addToRealMove(const QFileInfo& source,const QFileInfo& destination); + #ifdef ULTRACOPIER_PLUGIN_RSYNC + //rsync rm + void addToRmForRsync(const QFileInfo& destination); + #endif + //send the progression, after full reset of the interface (then all is empty) + void syncTransferList_internal(); + + void checkIfReadyToCancel(); +signals: + //send information about the copy + void actionInProgess(const Ultracopier::EngineActionInProgress &) const; //should update interface information on this event + + void newActionOnList(const QList<Ultracopier::ReturnActionOnCopyList> &) const;///very important, need be temporized to group the modification to do and not flood the interface + void syncReady() const; + void doneTime(const QList<QPair<quint64,quint32> >&) const; + + /** \brief to get the progression for a specific file + * \param id the id of the transfer, id send during population the transfer list + * first = current transfered byte, second = byte to transfer */ + void pushFileProgression(const QList<Ultracopier::ProgressionItem> &progressionList) const; + //get information about the copy + /** \brief to get the general progression + * first = current transfered byte, second = byte to transfer */ + void pushGeneralProgression(const quint64 &,const quint64 &) const; + + void newFolderListing(const QString &path) const; + void isInPause(const bool &) const; + + //when can be deleted + void canBeDeleted() const; + void haveNeedPutAtBottom(bool needPutAtBottom,const QFileInfo &fileInfo,const QString &errorString,TransferThread * thread,const ErrorType &errorType) const; + + //send error occurred + void error(const QString &path,const quint64 &size,const QDateTime &mtime,const QString &error) const; + void errorToRetry(const QString &source,const QString &destination,const QString &error) const; + //for the extra logging + void rmPath(const QString &path) const; + void mkPath(const QString &path) const; + /// \brief To debug source + #ifdef ULTRACOPIER_PLUGIN_DEBUG + void debugInformation(const Ultracopier::DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne) const; + #endif + #ifdef ULTRACOPIER_PLUGIN_DEBUG_WINDOW + void updateTheDebugInfo(const QStringList &,const QStringList&,const int &) const; + #endif + + //other signal + /// \note Can be call without queue because all call will be serialized + void send_fileAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame,TransferThread * thread) const; + /// \note Can be call without queue because all call will be serialized + void send_errorOnFile(const QFileInfo &fileInfo,const QString &errorString,TransferThread * thread, const ErrorType &errorType) const; + /// \note Can be call without queue because all call will be serialized + void send_folderAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame,ScanFileOrFolder * thread) const; + /// \note Can be call without queue because all call will be serialized + void send_errorOnFolder(const QFileInfo &fileInfo,const QString &errorString,ScanFileOrFolder * thread, const ErrorType &errorType) const; + //send the progression + void send_syncTransferList() const; + //mkpath error event + void mkPathErrorOnFolder(const QFileInfo &fileInfo,const QString &errorString,const ErrorType &errorType) const; + //to close + void tryCancel() const; + //to ask new transfer thread + void askNewTransferThread() const; + + void warningTransferList(const QString &warning) const; + void errorTransferList(const QString &error) const; + void send_sendNewRenamingRules(const QString &firstRenamingRule,const QString &otherRenamingRule) const; + void send_realBytesTransfered(const quint64 &) const; + + void send_setTransferAlgorithm(TransferAlgorithm transferAlgorithm) const; + void send_parallelBuffer(const int ¶llelBuffer) const; + void send_sequentialBuffer(const int &sequentialBuffer) const; + void send_parallelizeIfSmallerThan(const int ¶llelizeIfSmallerThan) const; + void send_updateMount(); + void missingDiskSpace(QList<Diskspace> list) const; +}; + +#endif // LISTTHREAD_H diff --git a/plugins/CopyEngine/Ultracopier/ListThread_InodeAction.cpp b/plugins/CopyEngine/Ultracopier/ListThread_InodeAction.cpp new file mode 100644 index 0000000..b47fbdf --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/ListThread_InodeAction.cpp @@ -0,0 +1,64 @@ +/** \file ListThread_InodeAction.cpp +\brief To be included into ListThread.cpp, to optimize and prevent code duplication +\see ListThread.cpp */ + +#ifdef LISTTHREAD_H + +//do the inode action +ActionToDoInode& currentActionToDoInode=actionToDoListInode[int_for_internal_loop]; +switch(currentActionToDoInode.type) +{ + case ActionType_RealMove: + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("launch real move, source: %1, destination: %2").arg(currentActionToDoInode.source.absoluteFilePath()).arg(currentActionToDoInode.destination.absoluteFilePath())); + mkPathQueue.addPath(currentActionToDoInode.source.absoluteFilePath(),currentActionToDoInode.destination.absoluteFilePath(),currentActionToDoInode.type); + currentActionToDoInode.isRunning=true; + numberOfInodeOperation++; + if(numberOfInodeOperation>=inodeThreads) + return; + break; + case ActionType_MkPath: + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("launch mkpath, source: %1, destination: %2").arg(currentActionToDoInode.source.absoluteFilePath()).arg(currentActionToDoInode.destination.absoluteFilePath())); + mkPathQueue.addPath(currentActionToDoInode.source.absoluteFilePath(),currentActionToDoInode.destination.absoluteFilePath(),currentActionToDoInode.type); + currentActionToDoInode.isRunning=true; + numberOfInodeOperation++; + if(numberOfInodeOperation>=inodeThreads) + return; + break; + #ifdef ULTRACOPIER_PLUGIN_RSYNC + case ActionType_RmSync: + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QString("launch rmsync, destination: %1").arg(currentActionToDoInode.destination.absoluteFilePath())); + mkPathQueue.addPath(currentActionToDoInode.destination.absoluteFilePath(),currentActionToDoInode.destination.absoluteFilePath(),currentActionToDoInode.type); + currentActionToDoInode.isRunning=true; + numberOfInodeOperation++; + if(numberOfInodeOperation>=inodeThreads) + return; + break; + #endif + case ActionType_MovePath: + //then empty (no file), can try remove it + if(currentActionToDoInode.size==0 || actionToDoListTransfer.isEmpty())//don't put afterTheTransfer because actionToDoListInode_afterTheTransfer -> already afterTheTransfer + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("launch rmpath: %1").arg(currentActionToDoInode.source.absoluteFilePath())); + mkPathQueue.addPath(currentActionToDoInode.source.absoluteFilePath(),currentActionToDoInode.destination.absoluteFilePath(),currentActionToDoInode.type); + currentActionToDoInode.isRunning=true; + numberOfInodeOperation++; + if(numberOfInodeOperation>=inodeThreads) + return; + } + else //have do the destination, put the remove to after + { + currentActionToDoInode.size=0; + actionToDoListInode_afterTheTransfer << currentActionToDoInode; + actionToDoListInode.removeAt(int_for_internal_loop); + int_for_internal_loop--; + actionToDoListInode_count--; + if(numberOfInodeOperation>=inodeThreads) + return; + } + break; + default: + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Wrong type at inode action")); + return; +} + +#endif diff --git a/plugins/CopyEngine/Ultracopier/MkPath.cpp b/plugins/CopyEngine/Ultracopier/MkPath.cpp new file mode 100644 index 0000000..15c423f --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/MkPath.cpp @@ -0,0 +1,516 @@ +#include "MkPath.h" + +#ifdef Q_OS_WIN32 + #ifndef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY + #ifndef NOMINMAX + #define NOMINMAX + #endif + #include <windows.h> + #endif +#endif + +QString MkPath::text_slash=QLatin1Literal("/"); + +MkPath::MkPath() +{ + stopIt=false; + waitAction=false; + doRightTransfer=false; + maxTime=QDateTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1)); + setObjectName("MkPath"); + moveToThread(this); + start(); + #ifdef Q_OS_WIN32 + #ifndef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY + regRead=QRegularExpression(QStringLiteral("^[a-z]:")); + #endif + #endif +} + +MkPath::~MkPath() +{ + stopIt=true; + quit(); + wait(); +} + +void MkPath::addPath(const QFileInfo& source, const QFileInfo& destination, const ActionType &actionType) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("source: %1, destination: %2").arg(source.absoluteFilePath()).arg(destination.absoluteFilePath())); + if(stopIt) + return; + emit internalStartAddPath(source,destination,actionType); +} + +void MkPath::skip() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + emit internalStartSkip(); +} + +void MkPath::retry() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + emit internalStartRetry(); +} + +void MkPath::run() +{ + connect(this,&MkPath::internalStartAddPath, this,&MkPath::internalAddPath,Qt::QueuedConnection); + connect(this,&MkPath::internalStartDoThisPath, this,&MkPath::internalDoThisPath,Qt::QueuedConnection); + connect(this,&MkPath::internalStartSkip, this,&MkPath::internalSkip,Qt::QueuedConnection); + connect(this,&MkPath::internalStartRetry, this,&MkPath::internalRetry,Qt::QueuedConnection); + exec(); +} + +void MkPath::internalDoThisPath() +{ + if(waitAction || pathList.isEmpty()) + return; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("source: %1, destination: %2, move: %3").arg(pathList.first().source.absoluteFilePath()).arg(pathList.first().destination.absoluteFilePath()).arg(pathList.first().actionType)); + #ifdef ULTRACOPIER_PLUGIN_RSYNC + if(pathList.first().actionType==ActionType_RmSync) + { + if(pathList.first().destination.isFile()) + { + QFile removedFile(pathList.first().destination.absoluteFilePath()); + if(!removedFile.remove()) + { + if(stopIt) + return; + waitAction=true; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to remove the inode: "+pathList.first().destination.absoluteFilePath()+", error: "+removedFile.errorString()); + emit errorOnFolder(pathList.first().destination,removedFile.errorString()); + return; + } + } + else if(!rmpath(pathList.first().destination.absoluteFilePath())) + { + if(stopIt) + return; + waitAction=true; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to remove the inode: "+pathList.first().destination.absoluteFilePath()); + emit errorOnFolder(pathList.first().destination,tr("Unable to remove")); + return; + } + pathList.removeFirst(); + emit firstFolderFinish(); + checkIfCanDoTheNext(); + return; + } + #endif + doTheDateTransfer=false; + if(keepDate) + { + if(!pathList.first().source.exists()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"the sources not exists: "+pathList.first().source.absoluteFilePath()); + doTheDateTransfer=false; + } + else if(maxTime>=pathList.first().source.lastModified()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"the sources is older to copy the time: "+pathList.first().source.absoluteFilePath()+": "+maxTime.toString("dd.MM.yyyy hh:mm:ss.zzz")+">="+pathList.first().source.lastModified().toString("dd.MM.yyyy hh:mm:ss.zzz")); + doTheDateTransfer=false; + } + else + { + doTheDateTransfer=readFileDateTime(pathList.first().source); + /*if(!doTheDateTransfer) + { + if(stopIt) + return; + waitAction=true; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to get source folder time: "+pathList.first().source.absoluteFilePath()); + emit errorOnFolder(pathList.first().source,tr("Unable to get time")); + return; + }*/ + } + } + if(dir.exists(pathList.first().destination.absoluteFilePath()) && pathList.first().actionType==ActionType_RealMove) + pathList.first().actionType=ActionType_MovePath; + if(pathList.first().actionType!=ActionType_RealMove) + { + if(!dir.exists(pathList.first().destination.absoluteFilePath())) + if(!dir.mkpath(pathList.first().destination.absoluteFilePath())) + { + if(!dir.exists(pathList.first().destination.absoluteFilePath())) + { + if(stopIt) + return; + waitAction=true; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to make the folder: "+pathList.first().destination.absoluteFilePath()); + emit errorOnFolder(pathList.first().destination,tr("Unable to create the folder")); + return; + } + } + } + else + { + if(!pathList.first().source.exists()) + { + if(stopIt) + return; + waitAction=true; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The source folder don't exists: "+pathList.first().source.absoluteFilePath()); + emit errorOnFolder(pathList.first().destination,tr("The source folder don't exists")); + return; + } + if(!pathList.first().source.isDir())//it's really an error? + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"The source is not a folder: "+pathList.first().source.absoluteFilePath()); + /*if(stopIt) + return; + waitAction=true; + emit errorOnFolder(pathList.first().destination,tr("The source is not a folder")); + return;*/ + } + if(pathList.first().destination.absoluteFilePath().startsWith(pathList.first().source.absoluteFilePath()+text_slash)) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"move into it self: "+pathList.first().destination.absoluteFilePath()); + int random=rand(); + QFileInfo tempFolder=pathList.first().source.absolutePath()+text_slash+QString::number(random); + while(tempFolder.exists()) + { + random=rand(); + tempFolder=pathList.first().source.absolutePath()+text_slash+QString::number(random); + } + if(!dir.rename(pathList.first().source.absoluteFilePath(),tempFolder.absoluteFilePath())) + { + if(stopIt) + return; + waitAction=true; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to temporary rename the folder: "+pathList.first().destination.absoluteFilePath()); + emit errorOnFolder(pathList.first().destination,tr("Unable to temporary rename the folder")); + return; + } + /* http://doc.qt.io/qt-5/qdir.html#rename + * On most file systems, rename() fails only if oldName does not exist, or if a file with the new name already exists. + if(!dir.mkpath(pathList.first().destination.absolutePath())) + { + if(!dir.exists(pathList.first().destination.absolutePath())) + { + if(stopIt) + return; + waitAction=true; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to make the folder: "+pathList.first().destination.absoluteFilePath()); + emit errorOnFolder(pathList.first().destination,tr("Unable to create the folder")); + return; + } + }*/ + if(!dir.rename(tempFolder.absoluteFilePath(),pathList.first().destination.absoluteFilePath())) + { + if(stopIt) + return; + waitAction=true; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to do the final real move the folder: "+pathList.first().destination.absoluteFilePath()); + emit errorOnFolder(pathList.first().destination,tr("Unable to do the final real move the folder")); + return; + } + } + else + { + /* http://doc.qt.io/qt-5/qdir.html#rename + * On most file systems, rename() fails only if oldName does not exist, or if a file with the new name already exists. + if(!dir.mkpath(pathList.first().destination.absolutePath())) + { + if(!dir.exists(pathList.first().destination.absolutePath())) + { + if(stopIt) + return; + waitAction=true; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to make the folder: "+pathList.first().destination.absoluteFilePath()); + emit errorOnFolder(pathList.first().destination,tr("Unable to create the folder")); + return; + } + }*/ + if(!dir.rename(pathList.first().source.absoluteFilePath(),pathList.first().destination.absoluteFilePath())) + { + if(stopIt) + return; + waitAction=true; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to make the folder: from: "+pathList.first().source.absoluteFilePath()+", soruce exists: "+QString::number(QDir(pathList.first().source.absoluteFilePath()).exists())+", to: "+pathList.first().destination.absoluteFilePath()+", destination exist: "+QString::number(QDir(pathList.first().destination.absoluteFilePath()).exists())); + emit errorOnFolder(pathList.first().destination,tr("Unable to move the folder")); + return; + } + } + } + if(doTheDateTransfer) + if(!writeFileDateTime(pathList.first().destination)) + { + if(!pathList.first().destination.exists()) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to set destination folder time (not exists): "+pathList.first().destination.absoluteFilePath()); + else if(!pathList.first().destination.isDir()) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to set destination folder time (not a dir): "+pathList.first().destination.absoluteFilePath()); + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to set destination folder time: "+pathList.first().destination.absoluteFilePath()); + /*if(stopIt) + return; + waitAction=true; + + emit errorOnFolder(pathList.first().source,tr("Unable to set time")); + return;*/ + } + if(doRightTransfer && pathList.first().actionType!=ActionType_RealMove) + { + QFile source(pathList.first().source.absoluteFilePath()); + QFile destination(pathList.first().destination.absoluteFilePath()); + if(!destination.setPermissions(source.permissions())) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to set the right: "+pathList.first().destination.absoluteFilePath()); + /*if(stopIt) + return; + waitAction=true; + emit errorOnFolder(pathList.first().source,tr("Unable to set the access-right")); + return;*/ + } + } + if(pathList.first().actionType==ActionType_MovePath) + { + if(!rmpath(pathList.first().source.absoluteFilePath())) + { + if(stopIt) + return; + waitAction=true; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Unable to remove the source folder: "+pathList.first().destination.absoluteFilePath()); + emit errorOnFolder(pathList.first().source,tr("Unable to remove")); + return; + } + } + pathList.removeFirst(); + emit firstFolderFinish(); + checkIfCanDoTheNext(); +} + +void MkPath::internalAddPath(const QFileInfo& source, const QFileInfo& destination, const ActionType &actionType) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("source: %1, destination: %2").arg(source.absoluteFilePath()).arg(destination.absoluteFilePath())); + Item tempPath; + tempPath.source=source; + tempPath.destination=destination; + tempPath.actionType=actionType; + pathList << tempPath; + if(!waitAction) + checkIfCanDoTheNext(); +} + +void MkPath::checkIfCanDoTheNext() +{ + if(!waitAction && !stopIt && pathList.size()>0) + emit internalStartDoThisPath(); +} + +void MkPath::internalSkip() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + waitAction=false; + pathList.removeFirst(); + emit firstFolderFinish(); + checkIfCanDoTheNext(); +} + +void MkPath::internalRetry() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + waitAction=false; + checkIfCanDoTheNext(); +} + +void MkPath::setRightTransfer(const bool doRightTransfer) +{ + this->doRightTransfer=doRightTransfer; +} + +void MkPath::setKeepDate(const bool keepDate) +{ + this->keepDate=keepDate; +} + +bool MkPath::rmpath(const QDir &dir + #ifdef ULTRACOPIER_PLUGIN_RSYNC + ,const bool &toSync + #endif + ) +{ + if(!dir.exists()) + return true; + bool allHaveWork=true; + QFileInfoList list = dir.entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System,QDir::DirsFirst); + for (int i = 0; i < list.size(); ++i) + { + QFileInfo fileInfo(list.at(i)); + if(!fileInfo.isDir()) + { + #ifdef ULTRACOPIER_PLUGIN_RSYNC + if(toSync) + { + QFile file(fileInfo.absoluteFilePath()); + if(!file.remove()) + { + if(toSync) + { + QFile file(fileInfo.absoluteFilePath()); + if(!file.remove()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to remove a file: "+fileInfo.absoluteFilePath()+", due to: "+file.errorString()); + allHaveWork=false; + } + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"found a file: "+fileInfo.fileName()); + allHaveWork=false; + } + } + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"found a file: "+fileInfo.fileName()); + allHaveWork=false; + } + #else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"found a file: "+fileInfo.fileName()); + allHaveWork=false; + #endif + } + else + { + //return the fonction for scan the new folder + if(!rmpath(dir.absolutePath()+'/'+fileInfo.fileName()+'/')) + allHaveWork=false; + } + } + if(!allHaveWork) + return false; + allHaveWork=dir.rmdir(dir.absolutePath()); + if(!allHaveWork) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to remove the folder: "+dir.absolutePath()); + return allHaveWork; +} + +//fonction to edit the file date time +bool MkPath::readFileDateTime(const QFileInfo &source) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"readFileDateTime("+source.absoluteFilePath()+")"); + /** Why not do it with Qt? Because it not support setModificationTime(), and get the time with Qt, that's mean use local time where in C is UTC time */ + #ifdef Q_OS_UNIX + #ifdef Q_OS_LINUX + struct stat info; + if(stat(source.absoluteFilePath().toLatin1().data(),&info)!=0) + return false; + time_t ctime=info.st_ctim.tv_sec; + time_t actime=info.st_atim.tv_sec; + time_t modtime=info.st_mtim.tv_sec; + //this function avalaible on unix and mingw + butime.actime=actime; + butime.modtime=modtime; + Q_UNUSED(ctime); + return true; + #else //mainly for mac + QFileInfo fileInfo(source); + time_t ctime=fileInfo.created().toTime_t(); + time_t actime=fileInfo.lastRead().toTime_t(); + time_t modtime=fileInfo.lastModified().toTime_t(); + //this function avalaible on unix and mingw + utimbuf butime; + butime.actime=actime; + butime.modtime=modtime; + Q_UNUSED(ctime); + return true; + #endif + #else + #ifdef Q_OS_WIN32 + #ifdef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY + struct stat info; + if(stat(source.toLatin1().data(),&info)!=0) + return false; + time_t ctime=info.st_ctim.tv_sec; + time_t actime=info.st_atim.tv_sec; + time_t modtime=info.st_mtim.tv_sec; + //this function avalaible on unix and mingw + butime.actime=actime; + butime.modtime=modtime; + Q_UNUSED(ctime); + return true; + #else + wchar_t filePath[65535]; + if(source.absoluteFilePath().contains(regRead)) + filePath[QDir::toNativeSeparators(QStringLiteral("\\\\?\\")+source.absoluteFilePath()).toWCharArray(filePath)]=L'\0'; + else + filePath[QDir::toNativeSeparators(source.absoluteFilePath()).toWCharArray(filePath)]=L'\0'; + HANDLE hFileSouce = CreateFileW(filePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY | FILE_FLAG_BACKUP_SEMANTICS, NULL); + if(hFileSouce == INVALID_HANDLE_VALUE) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"open failed to read: "+QString::fromWCharArray(filePath)+", error: "+QString::number(GetLastError())); + return false; + } + FILETIME ftCreate, ftAccess, ftWrite; + if(!GetFileTime(hFileSouce, &ftCreate, &ftAccess, &ftWrite)) + { + CloseHandle(hFileSouce); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to get the file time"); + return false; + } + this->ftCreateL=ftCreate.dwLowDateTime; + this->ftCreateH=ftCreate.dwHighDateTime; + this->ftAccessL=ftAccess.dwLowDateTime; + this->ftAccessH=ftAccess.dwHighDateTime; + this->ftWriteL=ftWrite.dwLowDateTime; + this->ftWriteH=ftWrite.dwHighDateTime; + CloseHandle(hFileSouce); + return true; + #endif + #else + return false; + #endif + #endif + return false; +} + +bool MkPath::writeFileDateTime(const QFileInfo &destination) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"writeFileDateTime("+destination.absoluteFilePath()+")"); + /** Why not do it with Qt? Because it not support setModificationTime(), and get the time with Qt, that's mean use local time where in C is UTC time */ + #ifdef Q_OS_UNIX + #ifdef Q_OS_LINUX + return utime(destination.absoluteFilePath().toLatin1().data(),&butime)==0; + #else //mainly for mac + return utime(destination.absoluteFilePath().toLatin1().data(),&butime)==0; + #endif + #else + #ifdef Q_OS_WIN32 + #ifdef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY + return utime(destination.toLatin1().data(),&butime)==0; + #else + wchar_t filePath[65535]; + if(destination.absoluteFilePath().contains(regRead)) + filePath[QDir::toNativeSeparators(QStringLiteral("\\\\?\\")+destination.absoluteFilePath()).toWCharArray(filePath)]=L'\0'; + else + filePath[QDir::toNativeSeparators(destination.absoluteFilePath()).toWCharArray(filePath)]=L'\0'; + HANDLE hFileDestination = CreateFileW(filePath, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); + if(hFileDestination == INVALID_HANDLE_VALUE) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"open failed to write: "+QString::fromWCharArray(filePath)+", error: "+QString::number(GetLastError())); + return false; + } + FILETIME ftCreate, ftAccess, ftWrite; + ftCreate.dwLowDateTime=this->ftCreateL; + ftCreate.dwHighDateTime=this->ftCreateH; + ftAccess.dwLowDateTime=this->ftAccessL; + ftAccess.dwHighDateTime=this->ftAccessH; + ftWrite.dwLowDateTime=this->ftWriteL; + ftWrite.dwHighDateTime=this->ftWriteH; + if(!SetFileTime(hFileDestination, &ftCreate, &ftAccess, &ftWrite)) + { + CloseHandle(hFileDestination); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to set the file time"); + return false; + } + CloseHandle(hFileDestination); + return true; + #endif + #else + return false; + #endif + #endif + return false; +} diff --git a/plugins/CopyEngine/Ultracopier/MkPath.h b/plugins/CopyEngine/Ultracopier/MkPath.h new file mode 100644 index 0000000..9182462 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/MkPath.h @@ -0,0 +1,106 @@ +/** \file MkPath.h +\brief Make the path given as queued mkpath +\author alpha_one_x86 +\licence GPL3, see the file COPYING */ + +#ifndef MKPATH_H +#define MKPATH_H + +#include <QThread> +#include <QFileInfo> +#include <QString> +#include <QSemaphore> +#include <QStringList> +#include <QDir> +#include <QDateTime> + +#include "Environment.h" + +#ifdef Q_OS_UNIX + #include <utime.h> + #include <time.h> + #include <unistd.h> + #include <sys/stat.h> +#else + #ifdef Q_OS_WIN32 + #ifdef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY + #include <utime.h> + #include <time.h> + #include <unistd.h> + #include <sys/stat.h> + #endif + #endif +#endif + +/// \brief Make the path given as queued mkpath +class MkPath : public QThread +{ + Q_OBJECT +public: + explicit MkPath(); + ~MkPath(); + /// \brief add path to make + void addPath(const QFileInfo& source,const QFileInfo& destination,const ActionType &actionType); + void setRightTransfer(const bool doRightTransfer); + void setKeepDate(const bool keepDate); +signals: + void errorOnFolder(const QFileInfo &,const QString &,const ErrorType &errorType=ErrorType_FolderWithRety) const; + void firstFolderFinish(); + void internalStartAddPath(const QFileInfo& source,const QFileInfo& destination, const ActionType &actionType) const; + void internalStartDoThisPath() const; + void internalStartSkip() const; + void internalStartRetry() const; + void debugInformation(const Ultracopier::DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne) const; +public slots: + /// \brief skip after creation error + void skip(); + /// \brief retry after creation error + void retry(); +private: + void run(); + bool waitAction; + bool stopIt; + bool skipIt; + QDateTime maxTime; + struct Item + { + QFileInfo source; + QFileInfo destination; + ActionType actionType; + }; + QList<Item> pathList; + void checkIfCanDoTheNext(); + QDir dir; + bool doRightTransfer; + bool keepDate; + bool doTheDateTransfer; + #ifdef Q_OS_UNIX + utimbuf butime; + #else + #ifdef Q_OS_WIN32 + #ifdef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY + utimbuf butime; + #else + quint32 ftCreateL, ftAccessL, ftWriteL; + quint32 ftCreateH, ftAccessH, ftWriteH; + QRegularExpression regRead; + #endif + #endif + #endif + //fonction to edit the file date time + bool readFileDateTime(const QFileInfo &source); + bool writeFileDateTime(const QFileInfo &destination); + static QString text_slash; +private slots: + void internalDoThisPath(); + void internalAddPath(const QFileInfo& source, const QFileInfo& destination,const ActionType &actionType); + void internalSkip(); + void internalRetry(); + bool rmpath(const QDir &dir + #ifdef ULTRACOPIER_PLUGIN_RSYNC + , const bool &toSync=false + #endif + ); +}; + +#endif // MKPATH_H diff --git a/plugins/CopyEngine/Ultracopier/ReadThread.cpp b/plugins/CopyEngine/Ultracopier/ReadThread.cpp new file mode 100644 index 0000000..37c83f4 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/ReadThread.cpp @@ -0,0 +1,687 @@ +#include "ReadThread.h" + +ReadThread::ReadThread() +{ + start(); + moveToThread(this); + stopIt=false; + putInPause=false; + blockSize=ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE*1024; + setObjectName(QStringLiteral("read")); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=Idle; + #endif + isInReadLoop=false; + tryStartRead=false; + lastGoodPosition=0; + isOpen.release(); +} + +ReadThread::~ReadThread() +{ + stopIt=true; + //disconnect(this);//-> do into ~TransferThread() + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + waitNewClockForSpeed.release(); + #endif + pauseMutex.release(); + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + waitNewClockForSpeed.release(); + #endif + pauseMutex.release(); + //if(isOpen.available()<=0) + emit internalStartClose(); + isOpen.acquire(); + exit(); + wait(); +} + +void ReadThread::run() +{ + connect(this,&ReadThread::internalStartOpen, this,&ReadThread::internalOpenSlot, Qt::QueuedConnection); + connect(this,&ReadThread::internalStartReopen, this,&ReadThread::internalReopen, Qt::QueuedConnection); + connect(this,&ReadThread::internalStartRead, this,&ReadThread::internalRead, Qt::QueuedConnection); + connect(this,&ReadThread::internalStartClose, this,&ReadThread::internalCloseSlot, Qt::QueuedConnection); + connect(this,&ReadThread::checkIfIsWait, this,&ReadThread::isInWait, Qt::QueuedConnection); + connect(this,&ReadThread::internalStartChecksum, this,&ReadThread::checkSum, Qt::QueuedConnection); + exec(); +} + +void ReadThread::open(const QFileInfo &file, const Ultracopier::CopyMode &mode) +{ + if(!isRunning()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] the thread not running to open destination: ")+file.absoluteFilePath()); + errorString_internal=tr("Internal error, please report it!"); + emit error(); + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] open source: ")+file.absoluteFilePath()); + if(this->file.isOpen()) + { + if(file.absoluteFilePath()==this->file.fileName()) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] Try reopen already opened same file: ")+file.absoluteFilePath()); + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] previous file is already open: ")+file.absoluteFilePath()); + emit internalStartClose(); + isOpen.acquire(); + isOpen.release(); + } + if(isInReadLoop) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] previous file is already readding: ")+file.absoluteFilePath()); + return; + } + if(tryStartRead) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] previous file is already try read: ")+file.absoluteFilePath()); + return; + } + stopIt=false; + fakeMode=false; + lastGoodPosition=0; + this->file.setFileName(file.absoluteFilePath()); + this->mode=mode; + emit internalStartOpen(); +} + +QString ReadThread::errorString() const +{ + return errorString_internal; +} + +void ReadThread::stop() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stop()")); + stopIt=true; + pauseMutex.release(); + pauseMutex.release(); + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + waitNewClockForSpeed.release(); + #endif + if(isOpen.available()<=0) + emit internalStartClose(); +} + +void ReadThread::pause() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] try put read thread in pause")); + if(stopIt) + return; + pauseMutex.tryAcquire(pauseMutex.available()); + putInPause=true; +} + +void ReadThread::resume() +{ + if(putInPause) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start")); + putInPause=false; + stopIt=false; + } + else + return; + if(!file.isOpen()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] file is not open")); + return; + } + pauseMutex.release(); +} + +bool ReadThread::seek(const qint64 &position) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start with: ")+QString::number(position)); + if(position>file.size()) + return false; + return file.seek(position); +} + +qint64 ReadThread::size() const +{ + return file.size(); +} + +void ReadThread::postOperation() +{ + emit internalStartClose(); +} + +void ReadThread::checkSum() +{ + QByteArray blockArray; + QCryptographicHash hash(QCryptographicHash::Sha1); + isInReadLoop=true; + lastGoodPosition=0; + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + numberOfBlockCopied=0; + #endif + seek(0); + int sizeReaden=0; + do + { + //read one block + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=Read; + #endif + if(putInPause) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("[")+QString::number(id)+QStringLiteral("] read put in pause")); + if(stopIt) + return; + pauseMutex.acquire(); + if(stopIt) + return; + } + blockArray=file.read(blockSize); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=Idle; + #endif + + //can be smaller than min block size to do correct speed limitation + if(blockArray.size()>ULTRACOPIER_PLUGIN_MAX_BLOCK_SIZE*1024) + { + errorString_internal=tr("Internal error reading the source file:block size out of range"); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Internal error reading the source file:block size out of range")); + emit error(); + isInReadLoop=false; + return; + } + if(file.error()!=QFile::NoError) + { + errorString_internal=tr("Unable to read the source file: ")+file.errorString()+QStringLiteral(" (")+QString::number(file.error())+QStringLiteral(")"); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("file.error()!=QFile::NoError: %1, error: %2").arg(QString::number(file.error())).arg(errorString_internal)); + emit error(); + isInReadLoop=false; + return; + } + sizeReaden=blockArray.size(); + if(sizeReaden>0) + { + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=Checksum; + #endif + hash.addData(blockArray); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=Idle; + #endif + + if(stopIt) + break; + + lastGoodPosition+=blockArray.size(); + + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + //wait for limitation speed if stop not query + if(multiForBigSpeed>0) + { + numberOfBlockCopied++; + if(numberOfBlockCopied>=multiForBigSpeed) + { + numberOfBlockCopied=0; + waitNewClockForSpeed.acquire(); + if(stopIt) + break; + } + } + #endif + } + } + while(sizeReaden>0 && !stopIt); + if(lastGoodPosition>file.size()) + { + errorString_internal=tr("File truncated during the read, possible data change"); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Source truncated during the read: %1 (%2)").arg(file.errorString()).arg(QString::number(file.error()))); + emit error(); + isInReadLoop=false; + return; + } + isInReadLoop=false; + if(stopIt) + { + stopIt=false; + return; + } + emit checksumFinish(hash.result()); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stop the read")); +} + +bool ReadThread::internalOpenSlot() +{ + return internalOpen(); +} + +bool ReadThread::internalOpen(bool resetLastGoodPosition) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] internalOpen source: ")+file.fileName()+QStringLiteral(", open in write because move: ")+QString::number(mode==Ultracopier::Move)); + if(stopIt) + { + emit closed(); + return false; + } + putInPause=false; + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=InodeOperation; + #endif + if(file.isOpen()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] this file is already open: ")+file.fileName()); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=Idle; + #endif + emit closed(); + return false; + } + QIODevice::OpenMode openMode=QIODevice::ReadOnly; + /*can have permision to remove but not write + * if(mode==Ultracopier::Move) + openMode=QIODevice::ReadWrite;*/ + seekToZero=false; + if(file.open(openMode)) + { + if(stopIt) + { + file.close(); + emit closed(); + return false; + } + pauseMutex.tryAcquire(pauseMutex.available()); + if(stopIt) + { + file.close(); + emit closed(); + return false; + } + size_at_open=file.size(); + mtime_at_open=QFileInfo(file).lastModified(); + putInPause=false; + if(resetLastGoodPosition) + lastGoodPosition=0; + if(!seek(lastGoodPosition)) + { + file.close(); + errorString_internal=file.errorString(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to seek after open: %1, error: %2").arg(file.fileName()).arg(errorString_internal)); + emit error(); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=Idle; + #endif + return false; + } + isOpen.acquire(); + emit opened(); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=Idle; + #endif + return true; + } + else + { + errorString_internal=file.errorString(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to open: %1, error: %2").arg(file.fileName()).arg(errorString_internal)); + emit error(); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=Idle; + #endif + return false; + } +} + +void ReadThread::internalRead() +{ + isInReadLoop=true; + tryStartRead=false; + if(stopIt) + { + if(seekToZero && file.isOpen()) + { + stopIt=false; + lastGoodPosition=0; + file.seek(0); + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stopIt == true, then quit")); + isInReadLoop=false; + internalClose(); + return; + } + } + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=InodeOperation; + #endif + int sizeReaden=0; + if(!file.isOpen()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] is not open!")); + isInReadLoop=false; + return; + } + QByteArray blockArray; + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + numberOfBlockCopied=0; + #endif + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start the copy")); + emit readIsStarted(); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=Idle; + #endif + if(stopIt) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stopIt == true, then quit")); + isInReadLoop=false; + internalClose(); + return; + } + do + { + //read one block + if(putInPause) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("[")+QString::number(id)+QStringLiteral("] read put in pause")); + if(stopIt) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stopIt == true, then quit")); + isInReadLoop=false; + internalClose(); + return; + } + pauseMutex.acquire(); + if(stopIt) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stopIt == true, then quit")); + isInReadLoop=false; + internalClose(); + return; + } + } + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=Read; + #endif + blockArray=file.read(blockSize); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=Idle; + #endif + + if(file.error()!=QFile::NoError) + { + errorString_internal=tr("Unable to read the source file: ")+file.errorString()+QStringLiteral(" (")+QString::number(file.error())+QStringLiteral(")"); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("file.error()!=QFile::NoError: %1, error: %2").arg(QString::number(file.error())).arg(errorString_internal)); + isInReadLoop=false; + emit error(); + return; + } + sizeReaden=blockArray.size(); + if(sizeReaden>0) + { + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=WaitWritePipe; + #endif + if(!writeThread->write(blockArray))//speed limitation here + { + if(!stopIt) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stopped because the write is stopped: ")+QString::number(lastGoodPosition)); + stopIt=true; + } + } + + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=Idle; + #endif + + if(stopIt) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stopIt == true, then quit")); + isInReadLoop=false; + internalClose();//need re-open the destination and then the source + return; + } + lastGoodPosition+=blockArray.size(); + } + /* + if(lastGoodPosition>16*1024) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Test error in reading: %1 (%2)").arg(file.errorString()).arg(file.error())); + errorString_internal=QStringLiteral("Test error in reading: %1 (%2)").arg(file.errorString()).arg(file.error()); + isInReadLoop=false; + emit error(); + return; + } + */ + } + while(sizeReaden>0 && !stopIt); + if(lastGoodPosition>file.size()) + { + errorString_internal=tr("File truncated during the read, possible data change"); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Source truncated during the read: %1 (%2)").arg(file.errorString()).arg(QString::number(file.error()))); + isInReadLoop=false; + emit error(); + return; + } + isInReadLoop=false; + if(stopIt) + { + stopIt=false; + return; + } + emit readIsStopped();//will product by signal connection writeThread->endIsDetected(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stop the read")); +} + +void ReadThread::startRead() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start")); + if(tryStartRead) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] already in try start")); + return; + } + if(isInReadLoop) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] double event dropped")); + else + { + tryStartRead=true; + emit internalStartRead(); + } +} + +void ReadThread::internalCloseSlot() +{ + internalClose(); +} + +void ReadThread::internalClose(bool callByTheDestructor) +{ + /// \note never send signal here, because it's called by the destructor + //ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start")); + bool closeTheFile=false; + if(!fakeMode) + { + if(file.isOpen()) + { + closeTheFile=true; + file.close(); + isInReadLoop=false; + } + } + if(!callByTheDestructor) + emit closed(); + + /// \note always the last of this function + if(closeTheFile) + isOpen.release(); +} + +/** \brief set block size +\param block the new block size in B +\return Return true if succes */ +bool ReadThread::setBlockSize(const int blockSize) +{ + //can be smaller than min block size to do correct speed limitation + if(blockSize>1 && blockSize<ULTRACOPIER_PLUGIN_MAX_BLOCK_SIZE*1024) + { + this->blockSize=blockSize; + //set the new max speed because the timer have changed + return true; + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("block size out of range: ")+QString::number(blockSize)); + return false; + } +} + +#ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT +/*! \brief Set the max speed +\param tempMaxSpeed Set the max speed in KB/s, 0 for no limit */ +void ReadThread::setMultiForBigSpeed(const int &multiForBigSpeed) +{ + this->multiForBigSpeed=multiForBigSpeed; + waitNewClockForSpeed.release(); +} + +/// \brief For give timer every X ms +void ReadThread::timeOfTheBlockCopyFinished() +{ + /* this is the old way to limit the speed, it product blocking + *if(waitNewClockForSpeed.available()<ULTRACOPIER_PLUGIN_NUMSEMSPEEDMANAGEMENT) + waitNewClockForSpeed.release();*/ + + //try this new way: + /* only if speed limited, else will accumulate waitNewClockForSpeed + * Disabled because: Stop call of this method when no speed limit + if(this->maxSpeed>0)*/ + if(waitNewClockForSpeed.available()<=1) + waitNewClockForSpeed.release(); +} +#endif + +/// \brief do the fake open +void ReadThread::fakeOpen() +{ + fakeMode=true; + emit opened(); +} + +/// \brief do the fake writeIsStarted +void ReadThread::fakeReadIsStarted() +{ + emit readIsStarted(); +} + +/// \brief do the fake writeIsStopped +void ReadThread::fakeReadIsStopped() +{ + emit readIsStopped(); +} + +/// do the checksum +void ReadThread::startCheckSum() +{ + emit internalStartChecksum(); +} + +qint64 ReadThread::getLastGoodPosition() const +{ + /*if(lastGoodPosition>file.size()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] Bug, the lastGoodPosition is greater than the file size!")); + return file.size(); + } + else*/ + return lastGoodPosition; +} + +//reopen after an error +void ReadThread::reopen() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start")); + if(isInReadLoop) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] try reopen where read is not finish")); + return; + } + stopIt=true; + emit internalStartReopen(); +} + +bool ReadThread::internalReopen() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start")); + stopIt=false; + if(file.isOpen()) + { + file.close(); + isOpen.release(); + } + if(size_at_open!=file.size() && mtime_at_open!=QFileInfo(file).lastModified()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] source file have changed since the last open, restart all")); + //fix this function like the close function + if(internalOpen(true)) + { + emit resumeAfterErrorByRestartAll(); + return true; + } + else + return false; + } + else + { + //fix this function like the close function + if(internalOpen(false)) + { + emit resumeAfterErrorByRestartAtTheLastPosition(); + return true; + } + else + return false; + } +} + +//set the write thread +void ReadThread::setWriteThread(WriteThread * writeThread) +{ + this->writeThread=writeThread; +} + +#ifdef ULTRACOPIER_PLUGIN_DEBUG +//to set the id +void ReadThread::setId(int id) +{ + this->id=id; +} +#endif + +void ReadThread::seekToZeroAndWait() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start")); + stopIt=true; + seekToZero=true; + emit checkIfIsWait(); +} + +void ReadThread::isInWait() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start")); + if(seekToZero) + { + stopIt=false; + seekToZero=false; + if(file.isOpen()) + { + lastGoodPosition=0; + seek(0); + } + else + internalOpen(true); + emit isSeekToZeroAndWait(); + } +} + +bool ReadThread::isReading() const +{ + return isInReadLoop; +} + diff --git a/plugins/CopyEngine/Ultracopier/ReadThread.h b/plugins/CopyEngine/Ultracopier/ReadThread.h new file mode 100644 index 0000000..f00ae79 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/ReadThread.h @@ -0,0 +1,147 @@ +/** \file ReadThread.h +\brief Thread changed to open/close and read the source file +\author alpha_one_x86 +\licence GPL3, see the file COPYING */ + +#ifndef READTHREAD_H +#define READTHREAD_H + +#include <QThread> +#include <QByteArray> +#include <QSemaphore> +#include <QDateTime> +#include <QFileInfo> +#include <QCryptographicHash> + +#include "WriteThread.h" +#include "Environment.h" +#include "StructEnumDefinition_CopyEngine.h" +#include "AvancedQFile.h" + +/// \brief Thread changed to open/close and read the source file +class ReadThread : public QThread +{ + Q_OBJECT +public: + explicit ReadThread(); + ~ReadThread(); +protected: + void run(); +public: + /// \brief open with the name and copy mode + void open(const QFileInfo &file, const Ultracopier::CopyMode &mode); + /// \brief return the error string + QString errorString() const; + //QByteArray read(qint64 position,qint64 maxSize); + /// \brief stop the copy + void stop(); + /// \brief put the copy in pause + void pause(); + /// \brief resume the copy + void resume(); + /// \brief get the size of the source file + qint64 size() const; + /// \brief get the last good position + qint64 getLastGoodPosition() const; + /// \brief start the reading of the source file + void startRead(); + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + /// \brief set the current max speed in KB/s + void setMultiForBigSpeed(const int &multiForBigSpeed); + #endif + /// \brief set block size in KB + bool setBlockSize(const int blockSize); + /// \brief reopen after an error + void reopen(); + /// \brief set the write thread + void setWriteThread(WriteThread * writeThread); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + /// \brief to set the id + void setId(int id); + /// \brief stat + enum ReadStat + { + Idle=0, + InodeOperation=1, + Read=2, + WaitWritePipe=3, + Checksum=4 + }; + ReadStat stat; + #endif + /// \brief return if it's reading + bool isReading() const; + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + /// \brief executed at regular interval to do a speed throling + void timeOfTheBlockCopyFinished(); + #endif + /// \brief do the fake open + void fakeOpen(); + /// \brief do the fake readIsStarted + void fakeReadIsStarted(); + /// \brief do the fake readIsStopped + void fakeReadIsStopped(); + /// do the checksum + void startCheckSum(); +public slots: + /// \brief to reset the copy, and put at the same state when it just open + void seekToZeroAndWait(); + void postOperation(); + /// do the checksum + void checkSum(); +signals: + void error() const; + void opened() const; + void readIsStarted() const; + void readIsStopped() const; + void closed() const; + void isSeekToZeroAndWait() const; + void checkIfIsWait() const; + void resumeAfterErrorByRestartAll() const; + void resumeAfterErrorByRestartAtTheLastPosition() const; + void checksumFinish(const QByteArray&) const; + // internal signals + void internalStartOpen() const; + void internalStartChecksum() const; + void internalStartReopen() const; + void internalStartRead() const; + void internalStartClose() const; + /// \brief To debug source + void debugInformation(const Ultracopier::DebugLevel &level,QString fonction,QString text,QString file,int ligne) const; + +private: + QString errorString_internal; + AvancedQFile file; + volatile bool stopIt; + Ultracopier::CopyMode mode; + qint64 lastGoodPosition; + volatile int blockSize;//in Bytes + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + QSemaphore waitNewClockForSpeed; + volatile int numberOfBlockCopied; ///< Multiple for count the number of block copied + volatile int multiForBigSpeed; ///< Multiple for count the number of block needed + #endif + WriteThread* writeThread; + int id; + QSemaphore isOpen; + QSemaphore pauseMutex; + volatile bool putInPause; + volatile bool isInReadLoop; + volatile bool seekToZero; + volatile bool tryStartRead; + qint64 size_at_open; + QDateTime mtime_at_open; + bool fakeMode; + //internal function + bool seek(const qint64 &position);/// \todo search if is use full +private slots: + bool internalOpen(bool resetLastGoodPosition=true); + bool internalOpenSlot(); + bool internalReopen(); + void internalRead(); + void internalClose(bool callByTheDestructor=false); + void internalCloseSlot(); + void isInWait(); +}; + +#endif // READTHREAD_H diff --git a/plugins/CopyEngine/Ultracopier/RenamingRules.cpp b/plugins/CopyEngine/Ultracopier/RenamingRules.cpp new file mode 100644 index 0000000..848d7fb --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/RenamingRules.cpp @@ -0,0 +1,85 @@ +#include "RenamingRules.h" +#include "ui_RenamingRules.h" + +#include <QMessageBox> + +RenamingRules::RenamingRules(QWidget *parent) : + QDialog(parent), + ui(new Ui::RenamingRules) +{ + ui->setupUi(this); + connectUI(); + setRenamingRules(QStringLiteral(""),QStringLiteral("")); +} + +RenamingRules::~RenamingRules() +{ + delete ui; +} + +void RenamingRules::on_buttonBox_clicked(QAbstractButton *button) +{ + if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::RejectRole) + reject(); + if(ui->buttonBox->buttonRole(button)==QDialogButtonBox::ResetRole) + { + setRenamingRules(QStringLiteral(""),QStringLiteral("")); + emit sendNewRenamingRules(firstRenamingRule,otherRenamingRule); + } +} + +void RenamingRules::setRenamingRules(QString firstRenamingRule,QString otherRenamingRule) +{ + disconnectUI(); + this->firstRenamingRule=firstRenamingRule; + this->otherRenamingRule=otherRenamingRule; + if(!firstRenamingRule.isEmpty()) + ui->firstRenamingRule->setText(firstRenamingRule); + else + ui->firstRenamingRule->setText(tr("%1 - copy").arg(QStringLiteral("%name%"))); + if(!otherRenamingRule.isEmpty()) + ui->otherRenamingRule->setText(otherRenamingRule); + else + ui->otherRenamingRule->setText(tr("%1 - copy (%2)").arg(QStringLiteral("%name%")).arg(QStringLiteral("%number%"))); + connectUI(); +} + +void RenamingRules::connectUI() +{ + connect(ui->firstRenamingRule,&QLineEdit::editingFinished,this,&RenamingRules::firstRenamingRule_haveChanged); + connect(ui->otherRenamingRule,&QLineEdit::editingFinished,this,&RenamingRules::otherRenamingRule_haveChanged); +} + +void RenamingRules::disconnectUI() +{ + disconnect(ui->firstRenamingRule,&QLineEdit::editingFinished,this,&RenamingRules::firstRenamingRule_haveChanged); + disconnect(ui->otherRenamingRule,&QLineEdit::editingFinished,this,&RenamingRules::otherRenamingRule_haveChanged); +} + +void RenamingRules::firstRenamingRule_haveChanged() +{ + QString newValue=ui->firstRenamingRule->text(); + if(newValue==tr("%1 - copy").arg(QStringLiteral("%name%"))) + newValue=QStringLiteral(""); + if(newValue==firstRenamingRule) + return; + firstRenamingRule=newValue; + emit sendNewRenamingRules(firstRenamingRule,otherRenamingRule); +} + +void RenamingRules::otherRenamingRule_haveChanged() +{ + QString newValue=ui->otherRenamingRule->text(); + if(newValue==tr("%1 - copy (%2)").arg(QStringLiteral("%name%")).arg(QStringLiteral("%number%"))) + newValue=QStringLiteral(""); + if(newValue==otherRenamingRule) + return; + otherRenamingRule=newValue; + emit sendNewRenamingRules(firstRenamingRule,otherRenamingRule); +} + +void RenamingRules::newLanguageLoaded() +{ + ui->retranslateUi(this); + setRenamingRules(firstRenamingRule,otherRenamingRule); +} diff --git a/plugins/CopyEngine/Ultracopier/RenamingRules.h b/plugins/CopyEngine/Ultracopier/RenamingRules.h new file mode 100644 index 0000000..c802cef --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/RenamingRules.h @@ -0,0 +1,34 @@ +#ifndef RENAMINGRULES_H +#define RENAMINGRULES_H + +#include <QDialog> +#include <QAbstractButton> + +namespace Ui { +class RenamingRules; +} + +/** Define rules for renaming */ +class RenamingRules : public QDialog +{ + Q_OBJECT +public: + explicit RenamingRules(QWidget *parent = 0); + ~RenamingRules(); + void setRenamingRules(QString firstRenamingRule,QString otherRenamingRule); + void newLanguageLoaded(); +private: + Ui::RenamingRules *ui; + void connectUI(); + void disconnectUI(); + QString firstRenamingRule; + QString otherRenamingRule; +private slots: + void on_buttonBox_clicked(QAbstractButton *button); + void firstRenamingRule_haveChanged(); + void otherRenamingRule_haveChanged(); +signals: + void sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule) const; +}; + +#endif // RENAMINGRULES_H diff --git a/plugins/CopyEngine/Ultracopier-0.3/RenamingRules.ui b/plugins/CopyEngine/Ultracopier/RenamingRules.ui index 9e84f4b..9e84f4b 100644 --- a/plugins/CopyEngine/Ultracopier-0.3/RenamingRules.ui +++ b/plugins/CopyEngine/Ultracopier/RenamingRules.ui diff --git a/plugins/CopyEngine/Ultracopier/ScanFileOrFolder.cpp b/plugins/CopyEngine/Ultracopier/ScanFileOrFolder.cpp new file mode 100644 index 0000000..9c35050 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/ScanFileOrFolder.cpp @@ -0,0 +1,677 @@ +#include "ScanFileOrFolder.h" +#include "TransferThread.h" +#include <QtGlobal> +#include <QDateTime> + +#ifdef Q_OS_WIN32 + #ifndef NOMINMAX + #define NOMINMAX + #endif + #include <windows.h> +#endif + +QString ScanFileOrFolder::text_slash=QLatin1Literal("/"); +QString ScanFileOrFolder::text_antislash=QLatin1Literal("\\"); +QString ScanFileOrFolder::text_dot=QLatin1Literal("."); + +ScanFileOrFolder::ScanFileOrFolder(const Ultracopier::CopyMode &mode) +{ + #ifdef ULTRACOPIER_PLUGIN_RSYNC + rsync = false; + #endif + moveTheWholeFolder = true; + stopped = true; + stopIt = false; + this->mode = mode; + folder_isolation = QRegularExpression(QStringLiteral("^(.*/)?([^/]+)/$")); + setObjectName(QStringLiteral("ScanFileOrFolder")); + #ifdef Q_OS_WIN32 + QString userName; + DWORD size=255; + WCHAR * userNameW=new WCHAR[size]; + if(GetUserNameW(userNameW,&size)) + { + userName=QString::fromWCharArray(userNameW,size-1); + blackList << QFileInfo(QStringLiteral("C:/Users/%1/AppData/Roaming/").arg(userName)).absoluteFilePath(); + } + delete userNameW; + #endif +} + +ScanFileOrFolder::~ScanFileOrFolder() +{ + stop(); + quit(); + wait(); +} + +bool ScanFileOrFolder::isFinished() const +{ + return stopped; +} + +void ScanFileOrFolder::addToList(const QStringList& sources,const QString& destination) +{ + stopIt=false; + this->sources=parseWildcardSources(sources); + this->destination=destination; + QFileInfo destinationInfo(this->destination); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("check symblink: %1").arg(destinationInfo.absoluteFilePath())); + while(destinationInfo.isSymLink()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("resolv destination to: %1").arg(destinationInfo.symLinkTarget())); + if(QFileInfo(destinationInfo.symLinkTarget()).isAbsolute()) + this->destination=destinationInfo.symLinkTarget(); + else + this->destination=destinationInfo.absolutePath()+text_slash+destinationInfo.symLinkTarget(); + destinationInfo.setFile(this->destination); + } + if(sources.size()>1 || QFileInfo(destination).isDir()) + /* Disabled because the separator transformation product bug + * if(!destination.endsWith(QDir::separator())) + this->destination+=QDir::separator();*/ + if(!destination.endsWith(text_slash) && !destination.endsWith(text_antislash)) + this->destination+=text_slash;//put unix separator because it's transformed into that's under windows too + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"addToList("+sources.join(";")+","+this->destination+")"); +} + + +QStringList ScanFileOrFolder::parseWildcardSources(const QStringList &sources) const +{ + QRegularExpression splitFolder(QStringLiteral("[/\\\\]")); + QStringList returnList; + int index=0; + while(index<sources.size()) + { + if(sources.at(index).contains(QStringLiteral("*"))) + { + QStringList toParse=sources.at(index).split(splitFolder); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("before wildcard parse: %1, toParse: %2, is valid: %3").arg(sources.at(index)).arg(toParse.join(", ")).arg(splitFolder.isValid())); + QList<QStringList> recomposedSource; + recomposedSource << (QStringList() << QStringLiteral("")); + while(toParse.size()>0) + { + if(toParse.first().contains('*')) + { + QString toParseFirst=toParse.first(); + if(toParseFirst.isEmpty()) + toParseFirst=text_slash; + QList<QStringList> newRecomposedSource; + QRegularExpression toResolv=QRegularExpression(toParseFirst.replace('*',QStringLiteral("[^/\\\\]*"))); + int index_recomposedSource=0; + while(index_recomposedSource<recomposedSource.size())//parse each url part + { + QFileInfo info(recomposedSource.at(index_recomposedSource).join(text_slash)); + if(info.isDir() && !info.isSymLink()) + { + QDir folder(info.absoluteFilePath()); + QFileInfoList fileFile=folder.entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System);//QStringList() << toResolv + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("list the folder: %1, with the wildcard: %2").arg(info.absoluteFilePath()).arg(toResolv.pattern())); + int index_fileList=0; + while(index_fileList<fileFile.size()) + { + if(fileFile.at(index_fileList).fileName().contains(toResolv)) + { + QStringList tempList=recomposedSource.at(index_recomposedSource); + tempList << fileFile.at(index_fileList).fileName(); + newRecomposedSource << tempList; + } + index_fileList++; + } + } + index_recomposedSource++; + } + recomposedSource=newRecomposedSource; + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("add toParse: %1").arg(toParse.join(text_slash))); + int index_recomposedSource=0; + while(index_recomposedSource<recomposedSource.size()) + { + recomposedSource[index_recomposedSource] << toParse.first(); + if(!QFileInfo(recomposedSource.at(index_recomposedSource).join(text_slash)).exists()) + recomposedSource.removeAt(index_recomposedSource); + else + index_recomposedSource++; + } + } + toParse.removeFirst(); + } + int index_recomposedSource=0; + while(index_recomposedSource<recomposedSource.size()) + { + returnList<<recomposedSource.at(index_recomposedSource).join(text_slash); + index_recomposedSource++; + } + } + else + returnList << sources.at(index); + index++; + } + return returnList; +} + +void ScanFileOrFolder::setFilters(const QList<Filters_rules> &include, const QList<Filters_rules> &exclude) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + QMutexLocker lock(&filtersMutex); + this->include_send=include; + this->exclude_send=exclude; + reloadTheNewFilters=true; + haveFilters=include_send.size()>0 || exclude_send.size()>0; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("haveFilters: %1, include_send.size(): %2, exclude_send.size(): %3").arg(haveFilters).arg(include_send.size()).arg(exclude_send.size())); +} + +//set action if Folder are same or exists +void ScanFileOrFolder::setFolderExistsAction(const FolderExistsAction &action, const QString &newName) +{ + this->newName=newName; + folderExistsAction=action; + waitOneAction.release(); +} + +//set action if error +void ScanFileOrFolder::setFolderErrorAction(const FileErrorAction &action) +{ + fileErrorAction=action; + waitOneAction.release(); +} + +void ScanFileOrFolder::stop() +{ + stopIt=true; + waitOneAction.release(); +} + +void ScanFileOrFolder::run() +{ + stopped=false; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start the listing with destination: "+destination+", mode: "+QString::number(mode)); + destination=resolvDestination(destination).absoluteFilePath(); + if(stopIt) + { + stopped=true; + return; + } + if(fileErrorAction==FileError_Skip) + { + stopped=true; + return; + } + int sourceIndex=0; + while(sourceIndex<sources.size()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"size source to list: "+QString::number(sourceIndex)+text_slash+QString::number(sources.size())); + if(stopIt) + { + stopped=true; + return; + } + QFileInfo source=sources.at(sourceIndex); + if(source.isDir() && !source.isSymLink()) + { + /* Bad way; when you copy c:\source\folder into d:\destination, you wait it create the folder d:\destination\folder + //listFolder(source.absoluteFilePath()+QDir::separator(),destination); + listFolder(source.absoluteFilePath()+text_slash,destination);//put unix separator because it's transformed into that's under windows too + */ + //put unix separator because it's transformed into that's under windows too + QString tempString=QFileInfo(destination).absoluteFilePath(); + if(!tempString.endsWith(text_slash) && !tempString.endsWith(text_antislash)) + tempString+=text_slash; + tempString+=TransferThread::resolvedName(source); + if(moveTheWholeFolder && mode==Ultracopier::Move && !QFileInfo(tempString).exists() && driveManagement.isSameDrive(source.absoluteFilePath(),tempString)) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("tempString: %1 move and not exists").arg(tempString)); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("do real move: %1 to %2").arg(source.absoluteFilePath()).arg(tempString)); + emit addToRealMove(source.absoluteFilePath(),tempString); + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("tempString: %1 normal listing, blacklist size: %2").arg(tempString).arg(blackList.size())); + listFolder(source.absoluteFilePath(),tempString); + } + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("source: %1 is file or symblink").arg(source.absoluteFilePath())); + emit fileTransfer(source,destination+text_slash+source.fileName(),mode); + } + sourceIndex++; + } + stopped=true; + if(stopIt) + return; + emit finishedTheListing(); +} + +QFileInfo ScanFileOrFolder::resolvDestination(const QFileInfo &destination) +{ + QFileInfo newDestination=destination; + while(newDestination.isSymLink()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("resolv destination to: %1").arg(newDestination.symLinkTarget())); + if(QFileInfo(newDestination.symLinkTarget()).isAbsolute()) + newDestination.setFile(newDestination.symLinkTarget()); + else + newDestination.setFile(newDestination.absolutePath()+text_slash+newDestination.symLinkTarget()); + } + do + { + fileErrorAction=FileError_NotSet; + if(isBlackListed(destination)) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("isBlackListed: %1").arg(destination.absoluteFilePath())); + emit errorOnFolder(destination,tr("Blacklisted folder"),ErrorType_Folder); + waitOneAction.acquire(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"actionNum: "+QString::number(fileErrorAction)); + } + } while(fileErrorAction==FileError_Retry || fileErrorAction==FileError_PutToEndOfTheList); + return newDestination; +} + +bool ScanFileOrFolder::isBlackListed(const QFileInfo &destination) +{ + int index=0; + int size=blackList.size(); + while(index<size) + { + if(destination.absoluteFilePath().startsWith(blackList.at(index))) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("%1 start with: %2").arg(destination.absoluteFilePath()).arg(blackList.at(index))); + return true; + } + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("%1 not start with: %2").arg(destination.absoluteFilePath()).arg(blackList.at(index))); + index++; + } + return false; +} + +void ScanFileOrFolder::listFolder(QFileInfo source,QFileInfo destination) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("source: %1 (%2), destination: %3 (%4)").arg(source.absoluteFilePath()).arg(source.isSymLink()).arg(destination.absoluteFilePath()).arg(destination.isSymLink())); + if(stopIt) + return; + destination=resolvDestination(destination); + if(stopIt) + return; + if(fileErrorAction==FileError_Skip) + return; + //if is same + if(source.absoluteFilePath()==destination.absoluteFilePath()) + { + emit folderAlreadyExists(source,destination,true); + waitOneAction.acquire(); + QString destinationSuffixPath; + switch(folderExistsAction) + { + case FolderExists_Merge: + break; + case FolderExists_Skip: + return; + break; + case FolderExists_Rename: + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"destination before rename: "+destination.absoluteFilePath()); + if(newName.isEmpty()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"pattern: "+folder_isolation.pattern()); + //resolv the new name + destinationSuffixPath=destination.baseName(); + int num=1; + do + { + if(num==1) + { + if(firstRenamingRule.isEmpty()) + destinationSuffixPath=tr("%1 - copy").arg(destination.baseName()); + else + { + destinationSuffixPath=firstRenamingRule; + destinationSuffixPath.replace(QStringLiteral("%name%"),destination.baseName()); + } + } + else + { + if(otherRenamingRule.isEmpty()) + destinationSuffixPath=tr("%1 - copy (%2)").arg(destination.baseName()).arg(num); + else + { + destinationSuffixPath=otherRenamingRule; + destinationSuffixPath.replace(QStringLiteral("%name%"),destination.baseName()); + destinationSuffixPath.replace(QStringLiteral("%number%"),QString::number(num)); + } + } + num++; + if(destination.completeSuffix().isEmpty()) + destination.setFile(destination.absolutePath()+text_slash+destinationSuffixPath); + else + destination.setFile(destination.absolutePath()+text_slash+destinationSuffixPath+text_dot+destination.completeSuffix()); + } + while(destination.exists()); + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"use new name: "+newName); + destinationSuffixPath = newName; + } + destination.setFile(destination.absolutePath()+text_slash+destinationSuffixPath); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"destination after rename: "+destination.absoluteFilePath()); + break; + default: + return; + break; + } + } + //check if destination exists + if(checkDestinationExists) + { + if(destination.exists()) + { + emit folderAlreadyExists(source,destination,false); + waitOneAction.acquire(); + QString destinationSuffixPath; + switch(folderExistsAction) + { + case FolderExists_Merge: + break; + case FolderExists_Skip: + return; + break; + case FolderExists_Rename: + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"destination before rename: "+destination.absoluteFilePath()); + if(newName.isEmpty()) + { + //resolv the new name + QFileInfo destinationInfo; + int num=1; + do + { + if(num==1) + { + if(firstRenamingRule.isEmpty()) + destinationSuffixPath=tr("%1 - copy").arg(destination.baseName()); + else + { + destinationSuffixPath=firstRenamingRule; + destinationSuffixPath.replace(QStringLiteral("%name%"),destination.baseName()); + } + } + else + { + if(otherRenamingRule.isEmpty()) + destinationSuffixPath=tr("%1 - copy (%2)").arg(destination.baseName()).arg(num); + else + { + destinationSuffixPath=otherRenamingRule; + destinationSuffixPath.replace(QStringLiteral("%name%"),destination.baseName()); + destinationSuffixPath.replace(QStringLiteral("%number%"),QString::number(num)); + } + } + destinationInfo.setFile(destinationInfo.absolutePath()+text_slash+destinationSuffixPath); + num++; + } + while(destinationInfo.exists()); + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"use new name: "+newName); + destinationSuffixPath = newName; + } + if(destination.completeSuffix().isEmpty()) + destination.setFile(destination.absolutePath()+text_slash+destinationSuffixPath); + else + destination.setFile(destination.absolutePath()+text_slash+destinationSuffixPath+QStringLiteral(".")+destination.completeSuffix()); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"destination after rename: "+destination.absoluteFilePath()); + break; + default: + return; + break; + } + } + } + //do source check + //check of source is readable + do + { + fileErrorAction=FileError_NotSet; + if(!source.isReadable() || !source.isExecutable() || !source.exists() || !source.isDir()) + { + if(!source.isDir()) + emit errorOnFolder(source,tr("This is not a folder")); + else if(!source.exists()) + emit errorOnFolder(source,tr("The folder does exists")); + else + emit errorOnFolder(source,tr("The folder is not readable")); + waitOneAction.acquire(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"actionNum: "+QString::number(fileErrorAction)); + } + } while(fileErrorAction==FileError_Retry); + do + { + QDir tempDir(source.absoluteFilePath()); + fileErrorAction=FileError_NotSet; + if(!tempDir.isReadable() || !tempDir.exists()) + { + emit errorOnFolder(source,tr("Problem with name encoding")); + waitOneAction.acquire(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"actionNum: "+QString::number(fileErrorAction)); + } + } while(fileErrorAction==FileError_Retry); + if(stopIt) + return; + /// \todo check here if the folder is not readable or not exists + QFileInfoList entryList; + if(copyListOrder) + entryList=QDir(source.absoluteFilePath()).entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System,QDir::DirsFirst|QDir::Name|QDir::IgnoreCase);//possible wait time here + else + entryList=QDir(source.absoluteFilePath()).entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System);//possible wait time here + if(stopIt) + return; + int sizeEntryList=entryList.size(); + emit newFolderListing(source.absoluteFilePath()); + if(mode!=Ultracopier::Move) + emit addToMkPath(source,destination,sizeEntryList); + for (int index=0;index<sizeEntryList;++index) + { + QFileInfo fileInfo=entryList.at(index); + if(stopIt) + return; + if(haveFilters) + { + if(reloadTheNewFilters) + { + QMutexLocker lock(&filtersMutex); + QCoreApplication::processEvents(QEventLoop::AllEvents); + reloadTheNewFilters=false; + this->include=this->include_send; + this->exclude=this->exclude_send; + } + QString fileName=fileInfo.fileName(); + if(fileInfo.isDir() && !fileInfo.isSymLink()) + { + bool excluded=false,included=(include.size()==0); + int filters_index=0; + while(filters_index<exclude.size()) + { + if(exclude.at(filters_index).apply_on==ApplyOn_folder || exclude.at(filters_index).apply_on==ApplyOn_fileAndFolder) + { + if(fileName.contains(exclude.at(filters_index).regex)) + { + excluded=true; + break; + } + } + filters_index++; + } + if(excluded) + {} + else + { + filters_index=0; + while(filters_index<include.size()) + { + if(include.at(filters_index).apply_on==ApplyOn_folder || include.at(filters_index).apply_on==ApplyOn_fileAndFolder) + { + if(fileName.contains(include.at(filters_index).regex)) + { + included=true; + break; + } + } + filters_index++; + } + if(!included) + {} + else + listFolder(fileInfo,destination.absoluteFilePath()+text_slash+fileInfo.fileName()); + } + } + else + { + bool excluded=false,included=(include.size()==0); + int filters_index=0; + while(filters_index<exclude.size()) + { + if(exclude.at(filters_index).apply_on==ApplyOn_file || exclude.at(filters_index).apply_on==ApplyOn_fileAndFolder) + { + if(fileName.contains(exclude.at(filters_index).regex)) + { + excluded=true; + break; + } + } + filters_index++; + } + if(excluded) + {} + else + { + filters_index=0; + while(filters_index<include.size()) + { + if(include.at(filters_index).apply_on==ApplyOn_file || include.at(filters_index).apply_on==ApplyOn_fileAndFolder) + { + if(fileName.contains(include.at(filters_index).regex)) + { + included=true; + break; + } + } + filters_index++; + } + if(!included) + {} + else + #ifndef ULTRACOPIER_PLUGIN_RSYNC + emit fileTransfer(fileInfo,destination.absoluteFilePath()+text_slash+fileInfo.fileName(),mode); + #else + { + bool sendToTransfer=false; + if(!rsync) + sendToTransfer=true; + else if(!QFile::exists(destination.absoluteFilePath()+"/"+fileInfo.fileName())) + sendToTransfer=true; + else if(fileInfo.lastModified()!=QFileInfo(destination.absoluteFilePath()+"/"+fileInfo.fileName()).lastModified()) + sendToTransfer=true; + if(sendToTransfer) + emit fileTransfer(fileInfo.absoluteFilePath(),destination.absoluteFilePath()+"/"+fileInfo.fileName(),mode); + } + #endif + } + } + } + else + { + if(fileInfo.isDir() && !fileInfo.isSymLink())//possible wait time here + //listFolder(source,destination,suffixPath+fileInfo.fileName()+QDir::separator()); + listFolder(fileInfo,destination.absoluteFilePath()+text_slash+fileInfo.fileName());//put unix separator because it's transformed into that's under windows too + else + #ifndef ULTRACOPIER_PLUGIN_RSYNC + emit fileTransfer(fileInfo,destination.absoluteFilePath()+text_slash+fileInfo.fileName(),mode); + #else + { + bool sendToTransfer=false; + if(!rsync) + sendToTransfer=true; + else if(!QFile::exists(destination.absoluteFilePath()+"/"+fileInfo.fileName())) + sendToTransfer=true; + else if(fileInfo.lastModified()!=QFileInfo(destination.absoluteFilePath()+"/"+fileInfo.fileName()).lastModified()) + sendToTransfer=true; + if(sendToTransfer) + emit fileTransfer(fileInfo.absoluteFilePath(),destination.absoluteFilePath()+"/"+fileInfo.fileName(),mode); + } + #endif + } + } + #ifdef ULTRACOPIER_PLUGIN_RSYNC + if(rsync) + { + //check the reverse path here + QFileInfoList entryListDestination; + if(copyListOrder) + entryListDestination=QDir(destination.absoluteFilePath()).entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System,QDir::DirsFirst|QDir::Name|QDir::IgnoreCase);//possible wait time here + else + entryListDestination=QDir(destination.absoluteFilePath()).entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System);//possible wait time here + int sizeEntryListDestination=entryListDestination.size(); + int index=0; + for (int indexDestination=0;indexDestination<sizeEntryListDestination;++indexDestination) + { + index=0; + while(index<sizeEntryList) + { + if(entryListDestination.at(indexDestination).fileName()==entryList.at(index).fileName()) + break; + index++; + } + if(index==sizeEntryList) + { + //then not found, need be remove + emit addToRmForRsync(entryListDestination.at(indexDestination)); + } + } + return; + } + #endif + if(mode==Ultracopier::Move) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"source: "+source.absoluteFilePath()+", sizeEntryList: "+QString::number(sizeEntryList)); + emit addToMovePath(source,destination,sizeEntryList); + } +} + +//set if need check if the destination exists +void ScanFileOrFolder::setCheckDestinationFolderExists(const bool checkDestinationFolderExists) +{ + this->checkDestinationExists=checkDestinationFolderExists; +} + +void ScanFileOrFolder::setRenamingRules(const QString &firstRenamingRule, const QString &otherRenamingRule) +{ + this->firstRenamingRule=firstRenamingRule; + this->otherRenamingRule=otherRenamingRule; +} + +void ScanFileOrFolder::setMoveTheWholeFolder(const bool &moveTheWholeFolder) +{ + this->moveTheWholeFolder=moveTheWholeFolder; +} + +void ScanFileOrFolder::setCopyListOrder(const bool &order) +{ + this->copyListOrder=order; +} + +#ifdef ULTRACOPIER_PLUGIN_RSYNC +/// \brief set rsync +void ScanFileOrFolder::setRsync(const bool rsync) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"set rsync: "+QString::number(rsync)); + this->rsync=rsync; +} +#endif + +void ScanFileOrFolder::set_updateMount() +{ + driveManagement.tryUpdate(); +} diff --git a/plugins/CopyEngine/Ultracopier/ScanFileOrFolder.h b/plugins/CopyEngine/Ultracopier/ScanFileOrFolder.h new file mode 100644 index 0000000..e9e59ce --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/ScanFileOrFolder.h @@ -0,0 +1,108 @@ +/** \file scanFileOrFolder.h +\brief Thread changed to list recursively the folder +\author alpha_one_x86 +\licence GPL3, see the file COPYING */ + +#include <QThread> +#include <QStringList> +#include <QString> +#include <QList> +#include <QFileInfo> +#include <QDir> +#include <QSemaphore> +#include <QEventLoop> +#include <QCoreApplication> +#include <QMutexLocker> + +#include "Environment.h" +#include "DriveManagement.h" + +#ifndef SCANFILEORFOLDER_H +#define SCANFILEORFOLDER_H + +/// \brief Thread changed to list recursively the folder +class ScanFileOrFolder : public QThread +{ + Q_OBJECT +public: + explicit ScanFileOrFolder(const Ultracopier::CopyMode &mode); + ~ScanFileOrFolder(); + /// \brief to the a folder listing + void stop(); + /// \brief to get if is finished + bool isFinished() const; + /// \brief set action if Folder are same or exists + void setFolderExistsAction(const FolderExistsAction &action,const QString &newName=""); + /// \brief set action if error + void setFolderErrorAction(const FileErrorAction &action); + /// \brief set if need check if the destination exists + void setCheckDestinationFolderExists(const bool checkDestinationFolderExists); + void setRenamingRules(const QString &firstRenamingRule,const QString &otherRenamingRule); + void setMoveTheWholeFolder(const bool &moveTheWholeFolder); + #ifdef ULTRACOPIER_PLUGIN_RSYNC + void setRsync(const bool rsync); + #endif +signals: + void fileTransfer(const QFileInfo &source,const QFileInfo &destination,const Ultracopier::CopyMode &mode) const; + /// \brief To debug source + void debugInformation(const Ultracopier::DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne) const; + void folderAlreadyExists(const QFileInfo &source,const QFileInfo &destination,const bool &isSame) const; + void errorOnFolder(const QFileInfo &fileInfo,const QString &errorString,const ErrorType &errorType=ErrorType_FolderWithRety) const; + void finishedTheListing() const; + + void newFolderListing(const QString &path) const; + void addToMkPath(const QFileInfo& source,const QFileInfo& destination, const int& inode) const; + void addToMovePath(const QFileInfo& source,const QFileInfo& destination, const int& inodeToRemove) const; + void addToRealMove(const QFileInfo& source,const QFileInfo& destination) const; + #ifdef ULTRACOPIER_PLUGIN_RSYNC + void addToRmForRsync(const QFileInfo& destination) const; + #endif +public slots: + void addToList(const QStringList& sources,const QString& destination); + void setFilters(const QList<Filters_rules> &include,const QList<Filters_rules> &exclude); + void setCopyListOrder(const bool &order); + void set_updateMount(); +protected: + void run(); +private: + DriveManagement driveManagement; + bool moveTheWholeFolder; + QStringList sources; + QString destination; + volatile bool stopIt; + void listFolder(QFileInfo source, QFileInfo destination); + bool isBlackListed(const QFileInfo &destination); + QFileInfo resolvDestination(const QFileInfo &destination); + volatile bool stopped; + QSemaphore waitOneAction; + FolderExistsAction folderExistsAction; + FileErrorAction fileErrorAction; + volatile bool checkDestinationExists; + QString newName; + bool copyListOrder; + QRegularExpression folder_isolation; + #ifdef ULTRACOPIER_PLUGIN_RSYNC + bool rsync; + #endif + Ultracopier::CopyMode mode; + QList<Filters_rules> include,exclude; + QList<Filters_rules> include_send,exclude_send; + bool reloadTheNewFilters; + bool haveFilters; + QMutex filtersMutex; + QString firstRenamingRule; + QString otherRenamingRule; + QStringList blackList; + /** Parse the multiple wildcard source, it allow resolv multiple wildcard with Qt into their path + * The string: /toto/f*a/yy*a/toto.mp3 + * Will give: /toto/f1a/yy*a/toto.mp3, /toto/f2a/yy*a/toto.mp3 + * Will give: /toto/f2a/yy1a/toto.mp3, /toto/f2a/yy2a/toto.mp3 + */ + QStringList parseWildcardSources(const QStringList &sources) const; + + static QString text_slash; + static QString text_antislash; + static QString text_dot; +}; + +#endif // SCANFILEORFOLDER_H diff --git a/plugins/CopyEngine/Ultracopier-0.3/StructEnumDefinition.h b/plugins/CopyEngine/Ultracopier/StructEnumDefinition.h index c1758f4..c1758f4 100644 --- a/plugins/CopyEngine/Ultracopier-0.3/StructEnumDefinition.h +++ b/plugins/CopyEngine/Ultracopier/StructEnumDefinition.h diff --git a/plugins/CopyEngine/Ultracopier/StructEnumDefinition_CopyEngine.h b/plugins/CopyEngine/Ultracopier/StructEnumDefinition_CopyEngine.h new file mode 100644 index 0000000..0b23c29 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/StructEnumDefinition_CopyEngine.h @@ -0,0 +1,124 @@ +/** \file StructEnumDefinition_CopyEngine.h +\brief Define the structure and enumeration used in the copy engine +\author alpha_one_x86 +\licence GPL3, see the file COPYING */ + +#include <QString> +#include <QRegularExpression> + +#ifndef STRUCTDEF_COPYENGINE_H +#define STRUCTDEF_COPYENGINE_H + +/// \brief Define action if file exists +enum FileExistsAction +{ + FileExists_NotSet=0, + FileExists_Cancel=1, + FileExists_Skip=2, + FileExists_Overwrite=3, + FileExists_OverwriteIfNotSame=4, + FileExists_OverwriteIfNewer=5, + FileExists_OverwriteIfOlder=6, + FileExists_Rename=7 +}; + +/// \brief Define action if file error +enum FileErrorAction +{ + FileError_NotSet=1, + FileError_Cancel=2, + FileError_Skip=3, + FileError_Retry=4, + FileError_PutToEndOfTheList=5 +}; + +enum TransferAlgorithm +{ + TransferAlgorithm_Automatic=0, + TransferAlgorithm_Sequential=1, + TransferAlgorithm_Parallel=2 +}; + +/// \brief to have the transfer status +enum TransferStat +{ + TransferStat_Idle=0, + TransferStat_PreOperation=1, + TransferStat_WaitForTheTransfer=2, + TransferStat_Transfer=3, + TransferStat_Checksum=4, + TransferStat_PostTransfer=5, + TransferStat_PostOperation=6 +}; + +/// \brief Define overwrite mode +/*enum OverwriteMode +{ + OverwriteMode_None, + OverwriteMode_Overwrite, + OverwriteMode_OverwriteIfNewer, + OverwriteMode_OverwriteIfNotSameModificationDate +};*/ + +/// \brief Define action if file exists +enum FolderExistsAction +{ + FolderExists_NotSet=0, + FolderExists_Cancel=1, + FolderExists_Merge=2, + FolderExists_Skip=3, + FolderExists_Rename=4 +}; + +enum ErrorType +{ + ErrorType_Normal=0, + ErrorType_Folder=1, + ErrorType_FolderWithRety=2, + ErrorType_Rights=3 +}; + +enum SearchType +{ + SearchType_rawText=0, + SearchType_simpleRegex=1, + SearchType_perlRegex=2 +}; + +enum ApplyOn +{ + ApplyOn_file=0, + ApplyOn_fileAndFolder=1, + ApplyOn_folder=2 +}; + +/** to store into different way the filter rules to be exported */ +struct Filters_rules +{ + QString search_text; + SearchType search_type; + ApplyOn apply_on; + bool need_match_all; + QRegularExpression regex; +}; + +/// \brief get action type +enum ActionType +{ + ActionType_MkPath=1, + ActionType_MovePath=2, + ActionType_RealMove=3 + #ifdef ULTRACOPIER_PLUGIN_RSYNC + , + ActionType_RmSync=4 + #endif +}; + +struct Diskspace +{ + QString drive; + quint64 requiredSpace; + quint64 freeSpace; +}; + +#endif // STRUCTDEF_COPYENGINE_H diff --git a/plugins/CopyEngine/Ultracopier/TransferThread.cpp b/plugins/CopyEngine/Ultracopier/TransferThread.cpp new file mode 100644 index 0000000..1ae0a9d --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/TransferThread.cpp @@ -0,0 +1,2081 @@ +//presume bug linked as multple paralelle inode to resume after "overwrite" +//then do overwrite node function to not re-set the file name + +#include "TransferThread.h" +#ifdef Q_OS_WIN32 +#include <windows.h> +#endif + +#ifdef Q_OS_WIN32 + #ifndef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY + #ifndef NOMINMAX + #define NOMINMAX + #endif + #include <windows.h> + #endif +#endif + +TransferThread::TransferThread() : + haveStartTime (false), + transfer_stat (TransferStat_Idle), + doRightTransfer (false), + #ifdef ULTRACOPIER_PLUGIN_RSYNC + rsync (false), + #endif + stopIt (false), + fileExistsAction (FileExists_NotSet), + alwaysDoFileExistsAction (FileExists_NotSet), + needSkip (false), + needRemove (false), + deletePartiallyTransferredFiles (true), + writeError (false), + readError (false), + renameTheOriginalDestination (false) +{ + start(); + moveToThread(this); + readThread.setWriteThread(&writeThread); + source.setCaching(false); + destination.setCaching(false); + renameRegex=QRegularExpression(QStringLiteral("^(.*)(\\.[a-z0-9]+)$")); + #ifdef Q_OS_WIN32 + #ifndef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY + regRead=QRegularExpression(QStringLiteral("^[a-z]:")); + #endif + #endif + + minTime=QDateTime(QDate(ULTRACOPIER_PLUGIN_MINIMALYEAR,1,1)); +} + +TransferThread::~TransferThread() +{ + stopIt=true; + readThread.exit(); + readThread.wait(); + writeThread.exit(); + writeThread.wait(); + exit(); + //else cash without this disconnect + //disconnect(&readThread); + //disconnect(&writeThread); + wait(); +} + +void TransferThread::run() +{ + //ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start: ")+QString::number((qint64)QThread::currentThreadId()))); + transfer_stat = TransferStat_Idle; + stopIt = false; + fileExistsAction = FileExists_NotSet; + alwaysDoFileExistsAction= FileExists_NotSet; + //the error push + connect(&readThread,&ReadThread::error, this, &TransferThread::getReadError, Qt::QueuedConnection); + connect(&writeThread,&WriteThread::error, this, &TransferThread::getWriteError, Qt::QueuedConnection); + //the thread change operation + connect(this,&TransferThread::internalStartPreOperation, this, &TransferThread::preOperation, Qt::QueuedConnection); + connect(this,&TransferThread::internalStartPostOperation, this, &TransferThread::postOperation, Qt::QueuedConnection); + //the state change operation + connect(&readThread,&ReadThread::opened, this, &TransferThread::readIsReady, Qt::QueuedConnection); + connect(&writeThread,&WriteThread::opened, this, &TransferThread::writeIsReady, Qt::QueuedConnection); + connect(&readThread,&ReadThread::readIsStopped, this, &TransferThread::readIsStopped, Qt::QueuedConnection); + connect(&writeThread,&WriteThread::writeIsStopped, this, &TransferThread::writeIsStopped, Qt::QueuedConnection); + connect(&readThread,&ReadThread::readIsStopped, &writeThread, &WriteThread::endIsDetected, Qt::QueuedConnection); + connect(&readThread,&ReadThread::closed, this, &TransferThread::readIsClosed, Qt::QueuedConnection); + connect(&writeThread,&WriteThread::closed, this, &TransferThread::writeIsClosed, Qt::QueuedConnection); + connect(&writeThread,&WriteThread::reopened, this, &TransferThread::writeThreadIsReopened, Qt::QueuedConnection); + connect(&readThread,&ReadThread::checksumFinish, this, &TransferThread::readChecksumFinish, Qt::QueuedConnection); + connect(&writeThread,&WriteThread::checksumFinish, this, &TransferThread::writeChecksumFinish, Qt::QueuedConnection); + //error management + connect(&readThread,&ReadThread::isSeekToZeroAndWait, this, &TransferThread::readThreadIsSeekToZeroAndWait, Qt::QueuedConnection); + connect(&readThread,&ReadThread::resumeAfterErrorByRestartAtTheLastPosition,this, &TransferThread::readThreadResumeAfterError, Qt::QueuedConnection); + connect(&readThread,&ReadThread::resumeAfterErrorByRestartAll,&writeThread, &WriteThread::flushAndSeekToZero, Qt::QueuedConnection); + connect(&writeThread,&WriteThread::flushedAndSeekedToZero, this, &TransferThread::readThreadResumeAfterError, Qt::QueuedConnection); + connect(this,&TransferThread::internalTryStartTheTransfer, this, &TransferThread::internalStartTheTransfer, Qt::QueuedConnection); + + #ifdef ULTRACOPIER_PLUGIN_DEBUG + connect(&readThread,&ReadThread::debugInformation, this, &TransferThread::debugInformation, Qt::QueuedConnection); + connect(&writeThread,&WriteThread::debugInformation, this, &TransferThread::debugInformation, Qt::QueuedConnection); + connect(&driveManagement,&DriveManagement::debugInformation,this, &TransferThread::debugInformation, Qt::QueuedConnection); + #endif + + exec(); +} + +TransferStat TransferThread::getStat() const +{ + return transfer_stat; +} + +void TransferThread::startTheTransfer() +{ + emit internalTryStartTheTransfer(); +} + +void TransferThread::internalStartTheTransfer() +{ + if(transfer_stat==TransferStat_Idle) + { + if(mode!=Ultracopier::Move) + { + /// \bug can pass here because in case of direct move on same media, it return to idle stat directly + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] can't start transfert at idle")); + } + return; + } + if(transfer_stat==TransferStat_PostOperation) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] can't start transfert at PostOperation")); + return; + } + if(transfer_stat==TransferStat_Transfer) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] can't start transfert at Transfer")); + return; + } + if(canStartTransfer) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] canStartTransfer is already set to true")); + return; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] check how start the transfer")); + canStartTransfer=true; + if(readIsReadyVariable && writeIsReadyVariable) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start directly the transfer")); + ifCanStartTransfer(); + } + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start the transfer as delayed")); +} + +bool TransferThread::setFiles(const QFileInfo& source,const qint64 &size,const QFileInfo& destination,const Ultracopier::CopyMode &mode) +{ + if(transfer_stat!=TransferStat_Idle) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] already used, source: ")+source.absoluteFilePath()+QStringLiteral(", destination: ")+destination.absoluteFilePath()); + return false; + } + //to prevent multiple file alocation into ListThread::doNewActions_inode_manipulation() + transfer_stat = TransferStat_PreOperation; + //emit pushStat(stat,transferId); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start, source: ")+source.absoluteFilePath()+QStringLiteral(", destination: ")+destination.absoluteFilePath()); + this->source = source; + this->destination = destination; + this->mode = mode; + this->size = size; + stopIt = false; + fileExistsAction = FileExists_NotSet; + canStartTransfer = false; + sended_state_preOperationStopped= false; + canBeMovedDirectlyVariable = false; + canBeCopiedDirectlyVariable = false; + fileContentError = false; + real_doChecksum = false; + writeError = false; + writeError_source_seeked = false; + writeError_destination_reopened = false; + readError = false; + fileContentError = false; + resetExtraVariable(); + emit internalStartPreOperation(); + return true; +} + +void TransferThread::setFileExistsAction(const FileExistsAction &action) +{ + if(transfer_stat!=TransferStat_PreOperation) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] already used, source: ")+source.absoluteFilePath()+QStringLiteral(", destination: ")+destination.absoluteFilePath()); + return; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] action: ")+QString::number(action)); + if(action!=FileExists_Rename) + fileExistsAction = action; + else + { + //always rename pass here + fileExistsAction = action; + alwaysDoFileExistsAction=action; + } + if(action==FileExists_Skip) + { + skip(); + return; + } + resetExtraVariable(); + emit internalStartPreOperation(); +} + +void TransferThread::setFileRename(const QString &nameForRename) +{ + if(transfer_stat!=TransferStat_PreOperation) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] already used, source: ")+source.absoluteFilePath()+QStringLiteral(", destination: ")+destination.absoluteFilePath()); + return; + } + if(nameForRename.contains(QRegularExpression(QStringLiteral("[/\\\\\\*]")))) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] can't use this kind of name, internal error")); + emit errorOnFile(destination,tr("Try rename with using special characters")); + return; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] nameForRename: ")+nameForRename); + if(!renameTheOriginalDestination) + destination.setFile(destination.absolutePath()+QDir::separator()+nameForRename); + else + { + QString tempDestination=destination.absoluteFilePath(); + QFile destinationFile(tempDestination); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("rename %1: to: %2").arg(destination.absoluteFilePath()).arg(destination.absolutePath()+QDir::separator()+nameForRename)); + if(!destinationFile.rename(destination.absolutePath()+QDir::separator()+nameForRename)) + { + if(!destinationFile.exists()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("source not exists %1: destination: %2, error: %3").arg(destinationFile.fileName()).arg(destinationFile.fileName()).arg(destinationFile.errorString())); + emit errorOnFile(destinationFile,tr("File not found")); + return; + } + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("unable to do real move %1: %2, error: %3").arg(destinationFile.fileName()).arg(destinationFile.fileName()).arg(destinationFile.errorString())); + emit errorOnFile(destinationFile,destinationFile.errorString()); + return; + } + if(source.absoluteFilePath()==destination.absoluteFilePath()) + source.setFile(destination.absolutePath()+QDir::separator()+nameForRename); + destination.setFile(tempDestination); + destination.refresh(); + } + fileExistsAction = FileExists_NotSet; + resetExtraVariable(); + emit internalStartPreOperation(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("destination is: %1").arg(destination.absoluteFilePath())); +} + +void TransferThread::setAlwaysFileExistsAction(const FileExistsAction &action) +{ + //ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] action to do always: ")+QString::number(action))); + alwaysDoFileExistsAction=action; +} + +void TransferThread::resetExtraVariable() +{ + sended_state_preOperationStopped=false; + sended_state_readStopped = false; + sended_state_writeStopped = false; + writeError = false; + readError = false; + readIsReadyVariable = false; + writeIsReadyVariable = false; + readIsFinishVariable = false; + writeIsFinishVariable = false; + readIsClosedVariable = false; + writeIsClosedVariable = false; + needRemove = false; + needSkip = false; + retry = false; + readIsOpenVariable = false; + writeIsOpenVariable = false; + readIsOpeningVariable = false; + writeIsOpeningVariable = false; +} + +void TransferThread::preOperation() +{ + if(transfer_stat!=TransferStat_PreOperation) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] already used, source: ")+source.absoluteFilePath()+QStringLiteral(", destination: ")+destination.absoluteFilePath()); + return; + } + haveStartTime=true; + startTransferTime.restart(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start: source: ")+source.absoluteFilePath()+QStringLiteral(", destination: ")+destination.absoluteFilePath()); + needRemove=false; + if(isSame()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] is same ")+source.absoluteFilePath()+QStringLiteral(" than ")+destination.absoluteFilePath()); + return; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] after is same")); + /*Why this code? + if(readError) + { + readError=false; + return; + }*/ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] before destination exists")); + if(destinationExists()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] destination exists: ")+destination.absoluteFilePath()); + return; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] after destination exists")); + /*Why this code? + if(readError) + { + readError=false; + return; + }*/ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] before keep date")); + #ifdef Q_OS_WIN32 + doTheDateTransfer=!source.isSymLink(); + #else + doTheDateTransfer=true; + #endif + if(doTheDateTransfer) + { + if(source.lastModified()<minTime) + { + if(/*true when the destination have been remove but not the symlink:*/source.isSymLink()) + doTheDateTransfer=false; + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("the sources is older to copy the time: ")+source.absoluteFilePath()+QStringLiteral(": ")+minTime.toString(QStringLiteral("dd.MM.yyyy hh:mm:ss.zzz"))+QStringLiteral(">=")+source.lastModified().toString(QStringLiteral("dd.MM.yyyy hh:mm:ss.zzz"))); + doTheDateTransfer=false; + if(keepDate) + { + emit errorOnFile(source,tr("Wrong modification date or unable to get it, you can disable time transfer to do it")); + return; + } + } + } + else + { + doTheDateTransfer=readFileDateTime(source); + #ifdef Q_OS_MAC + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] read the source time: ")+QString::number(butime.modtime)); + #endif + if(!doTheDateTransfer) + { + //will have the real error at source open + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] unable to read the source time: ")+source.absoluteFilePath()); + if(keepDate) + { + emit errorOnFile(source,tr("Wrong modification date or unable to get it, you can disable time transfer to do it")); + return; + } + } + } + } + if(canBeMovedDirectly()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("need moved directly: %1 to %2").arg(source.absoluteFilePath()).arg(destination.absoluteFilePath())); + canBeMovedDirectlyVariable=true; + readThread.fakeOpen(); + writeThread.fakeOpen(); + return; + } + if(canBeCopiedDirectly()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("need copied directly: %1 to %2").arg(source.absoluteFilePath()).arg(destination.absoluteFilePath())); + canBeCopiedDirectlyVariable=true; + readThread.fakeOpen(); + writeThread.fakeOpen(); + return; + } + tryOpen(); +} + +void TransferThread::tryOpen() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start source and destination: ")+source.absoluteFilePath()+QStringLiteral(" and ")+destination.absoluteFilePath()); + TransferAlgorithm transferAlgorithm=this->transferAlgorithm; + if(transferAlgorithm==TransferAlgorithm_Automatic) + { + #ifdef Q_OS_LINUX + if(driveManagement.isSameDrive(destination.absoluteFilePath(),source.absoluteFilePath())) + { + const QByteArray &type=driveManagement.getDriveType(driveManagement.getDrive(source.absoluteFilePath())); + if(type=="nfs" || type=="smb") + transferAlgorithm=TransferAlgorithm_Parallel; + else + transferAlgorithm=TransferAlgorithm_Sequential; + } + else + #endif + transferAlgorithm=TransferAlgorithm_Parallel; + } + if(!readIsOpenVariable) + { + if(!readIsOpeningVariable) + { + readError=false; + readThread.open(source.absoluteFilePath(),mode); + readIsOpeningVariable=true; + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("readIsOpeningVariable is true when try open")); + emit errorOnFile(source,tr("Internal error: Already opening")); + readError=true; + return; + } + } + if(!writeIsOpenVariable) + { + if(!writeIsOpeningVariable) + { + if(transferAlgorithm==TransferAlgorithm_Sequential) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] transferAlgorithm==TransferAlgorithm_Sequential")); + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] transferAlgorithm==TransferAlgorithm_Parallel")); + writeError=false; + if(transferAlgorithm==TransferAlgorithm_Sequential) + writeThread.open(destination.absoluteFilePath(),size,osBuffer && (!osBufferLimited || (osBufferLimited && size<osBufferLimit)),sequentialBuffer,true); + else + writeThread.open(destination.absoluteFilePath(),size,osBuffer && (!osBufferLimited || (osBufferLimited && size<osBufferLimit)),parallelBuffer,false); + writeIsOpeningVariable=true; + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("writeIsOpeningVariable is true when try open")); + emit errorOnFile(destination,tr("Internal error: Already opening")); + writeError=true; + return; + } + } +} + +bool TransferThread::isSame() +{ + //check if source and destination is not the same + //source.absoluteFilePath()==destination.absoluteFilePath() not work is source don't exists + if(source.absoluteFilePath()==destination.absoluteFilePath()) + { + #ifdef ULTRACOPIER_PLUGIN_DEBUG + if(!source.exists()) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start source: ")+source.absoluteFilePath()+QStringLiteral(" not exists")); + if(!source.isSymLink()) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start source: ")+source.absoluteFilePath()+QStringLiteral(" isSymLink")); + if(!destination.isSymLink()) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start source: ")+destination.absoluteFilePath()+QStringLiteral(" isSymLink")); + #endif + if(fileExistsAction==FileExists_NotSet && alwaysDoFileExistsAction==FileExists_Skip) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] is same but skip")); + transfer_stat=TransferStat_Idle; + emit postOperationStopped(); + //quit + return true; + } + if(checkAlwaysRename()) + return false; + emit fileAlreadyExists(source,destination,true); + return true; + } + return false; +} + +bool TransferThread::destinationExists() +{ + //check if destination exists + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("overwrite: %1, alwaysDoFileExistsAction: %2, readError: %3, writeError: %4") + .arg(fileExistsAction) + .arg(alwaysDoFileExistsAction) + .arg(readError) + .arg(writeError) + ); + if(alwaysDoFileExistsAction==FileExists_Overwrite || readError || writeError + #ifdef ULTRACOPIER_PLUGIN_RSYNC + || rsync + #endif + ) + return false; + bool destinationExists; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] time to first FS access")); + destination.refresh(); + destinationExists=destination.exists(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] finish first FS access")); + if(destinationExists) + { + if(fileExistsAction==FileExists_NotSet && alwaysDoFileExistsAction==FileExists_Skip) + { + transfer_stat=TransferStat_Idle; + emit postOperationStopped(); + //quit + return true; + } + if(checkAlwaysRename()) + return false; + if(source.exists()) + { + if(fileExistsAction==FileExists_OverwriteIfNewer || (fileExistsAction==FileExists_NotSet && alwaysDoFileExistsAction==FileExists_OverwriteIfNewer)) + { + if(destination.lastModified()<source.lastModified()) + return false; + else + { + transfer_stat=TransferStat_Idle; + emit postOperationStopped(); + return true; + } + } + if(fileExistsAction==FileExists_OverwriteIfOlder || (fileExistsAction==FileExists_NotSet && alwaysDoFileExistsAction==FileExists_OverwriteIfOlder)) + { + if(destination.lastModified()>source.lastModified()) + return false; + else + { + transfer_stat=TransferStat_Idle; + emit postOperationStopped(); + return true; + } + } + if(fileExistsAction==FileExists_OverwriteIfNotSame || (fileExistsAction==FileExists_NotSet && alwaysDoFileExistsAction==FileExists_OverwriteIfNotSame)) + { + if(destination.lastModified()!=source.lastModified() || destination.size()!=source.size()) + return false; + else + { + transfer_stat=TransferStat_Idle; + emit postOperationStopped(); + return true; + } + } + } + else + { + if(fileExistsAction!=FileExists_NotSet) + { + transfer_stat=TransferStat_Idle; + emit postOperationStopped(); + return true; + } + } + if(fileExistsAction==FileExists_NotSet) + { + emit fileAlreadyExists(source,destination,false); + return true; + } + } + return false; +} + +QString TransferThread::resolvedName(const QFileInfo &inode) +{ + QString fileName=inode.fileName(); + if(fileName.isEmpty()) + { + QDir absoluteDir=inode.absoluteDir(); + fileName=absoluteDir.dirName(); + if(fileName.isEmpty()) + { + fileName=absoluteDir.cdUp(); + fileName=absoluteDir.dirName(); + } + } + #ifdef Q_OS_WIN32 + if(fileName.isEmpty()) + { + fileName=inode.absolutePath(); + fileName.replace(QRegularExpression(QStringLiteral("^([a-zA-Z]+):.*$")),QStringLiteral("\\1")); + if(inode.absolutePath().contains(QRegularExpression(QStringLiteral("^[a-zA-Z]+:[/\\\\]?$")))) + fileName=tr("Drive %1").arg(fileName); + else + fileName=tr("Unknown folder"); + } + #else + if(fileName.isEmpty()) + fileName=tr("root"); + #endif + return fileName; +} + +QString TransferThread::getSourcePath() const +{ + return source.absoluteFilePath(); +} + +QString TransferThread::getDestinationPath() const +{ + return destination.absoluteFilePath(); +} + +QFileInfo TransferThread::getSourceInode() const +{ + return source; +} + +QFileInfo TransferThread::getDestinationInode() const +{ + return destination; +} + +Ultracopier::CopyMode TransferThread::getMode() const +{ + return mode; +} + +//return true if has been renamed +bool TransferThread::checkAlwaysRename() +{ + if(alwaysDoFileExistsAction==FileExists_Rename) + { + QFileInfo newDestination=destination; + QString fileName=resolvedName(newDestination); + QString suffix=QStringLiteral(""); + QString newFileName; + //resolv the suffix + if(fileName.contains(renameRegex)) + { + suffix=fileName; + suffix.replace(renameRegex,QStringLiteral("\\2")); + fileName.replace(renameRegex,QStringLiteral("\\1")); + } + //resolv the new name + int num=1; + do + { + if(num==1) + { + if(firstRenamingRule.isEmpty()) + newFileName=tr("%1 - copy").arg(fileName); + else + { + newFileName=firstRenamingRule; + newFileName.replace(QStringLiteral("%name%"),fileName); + } + } + else + { + if(otherRenamingRule.isEmpty()) + newFileName=tr("%1 - copy (%2)").arg(fileName).arg(num); + else + { + newFileName=otherRenamingRule; + newFileName.replace(QStringLiteral("%name%"),fileName); + newFileName.replace(QStringLiteral("%number%"),QString::number(num)); + } + } + newDestination.setFile(newDestination.absolutePath()+QDir::separator()+newFileName+suffix); + num++; + } + while(newDestination.exists()); + if(!renameTheOriginalDestination) + destination=newDestination; + else + { + QFile destinationFile(destination.absoluteFilePath()); + if(!destinationFile.rename(newDestination.absoluteFilePath())) + { + if(!destinationFile.exists()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("source not exists %1: destination: %2, error: %3").arg(destinationFile.fileName()).arg(destinationFile.fileName()).arg(destinationFile.errorString())); + emit errorOnFile(destinationFile,tr("File not found")); + readError=true; + return true; + } + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("unable to do real move %1: %2, error: %3").arg(destinationFile.fileName()).arg(destinationFile.fileName()).arg(destinationFile.errorString())); + readError=true; + emit errorOnFile(destinationFile,destinationFile.errorString()); + return true; + } + } + return true; + } + return false; +} + +void TransferThread::tryMoveDirectly() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("need moved directly: %1 to %2").arg(source.absoluteFilePath()).arg(destination.absoluteFilePath())); + + sended_state_readStopped = false; + sended_state_writeStopped = false; + writeError = false; + readError = false; + readIsFinishVariable = false; + writeIsFinishVariable = false; + readIsClosedVariable = false; + writeIsClosedVariable = false; + //move if on same mount point + QFile sourceFile(source.absoluteFilePath()); + QFile destinationFile(destination.absoluteFilePath()); + #ifndef Q_OS_WIN32 + if(destinationFile.exists() || destination.isSymLink()) + { + if(!sourceFile.exists() && !source.isSymLink()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+destinationFile.fileName()+QStringLiteral(", source not exists")); + readError=true; + emit errorOnFile(destination,tr("The source file doesn't exist")); + return; + } + else if(!destinationFile.remove()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+destinationFile.fileName()+QStringLiteral(", error: ")+destinationFile.errorString()); + readError=true; + emit errorOnFile(destination,destinationFile.errorString()); + return; + } + } + #endif + QDir dir(destination.absolutePath()); + { + mkpathTransfer->acquire(); + if(!dir.exists()) + dir.mkpath(destination.absolutePath()); + mkpathTransfer->release(); + } + #ifdef Q_OS_WIN32 + //if(!sourceFile.copy(destinationFile.fileName())) + if(MoveFileEx( + reinterpret_cast<const wchar_t*>(sourceFile.fileName().utf16()), + reinterpret_cast<const wchar_t*>(destinationFile.fileName().utf16()), + MOVEFILE_COPY_ALLOWED|MOVEFILE_REPLACE_EXISTING + )==0) + #else + if(!sourceFile.rename(destinationFile.fileName())) + #endif + { + readError=true; + if(!sourceFile.exists() && !source.isSymLink()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("source not exists %1: destination: %2, error: %3").arg(sourceFile.fileName()).arg(destinationFile.fileName()).arg(sourceFile.errorString())); + emit errorOnFile(sourceFile,tr("File not found")); + return; + } + else if(!dir.exists()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("destination folder not exists %1: %2, error: %3").arg(sourceFile.fileName()).arg(destinationFile.fileName()).arg(sourceFile.errorString())); + emit errorOnFile(destination.absolutePath(),tr("Unable to do the folder")); + return; + } + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("unable to do real move %1: %2, error: %3").arg(sourceFile.fileName()).arg(destinationFile.fileName()).arg(sourceFile.errorString())); + emit errorOnFile(sourceFile,sourceFile.errorString()); + return; + } + readThread.fakeReadIsStarted(); + writeThread.fakeWriteIsStarted(); + readThread.fakeReadIsStopped(); + writeThread.fakeWriteIsStopped(); +} + +void TransferThread::tryCopyDirectly() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("need copied directly: %1 to %2").arg(source.absoluteFilePath()).arg(destination.absoluteFilePath())); + + sended_state_readStopped = false; + sended_state_writeStopped = false; + writeError = false; + readError = false; + readIsFinishVariable = false; + writeIsFinishVariable = false; + readIsClosedVariable = false; + writeIsClosedVariable = false; + //move if on same mount point + QFile sourceFile(source.absoluteFilePath()); + QFile destinationFile(destination.absoluteFilePath()); + #ifndef Q_OS_WIN32 + if(destinationFile.exists() || destination.isSymLink()) + { + if(!sourceFile.exists() && !source.isSymLink()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+destinationFile.fileName()+QStringLiteral(", source not exists")); + readError=true; + emit errorOnFile(destination,tr("The source doesn't exist")); + return; + } + else if(!destinationFile.remove()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+destinationFile.fileName()+QStringLiteral(", error: ")+destinationFile.errorString()); + readError=true; + emit errorOnFile(destination,destinationFile.errorString()); + return; + } + } + #endif + QDir dir(destination.absolutePath()); + { + mkpathTransfer->acquire(); + if(!dir.exists()) + dir.mkpath(destination.absolutePath()); + mkpathTransfer->release(); + } + /** on windows, symLink is normal file, can be copied + * on unix not, should be created **/ + #ifdef Q_OS_WIN32 + //if(!sourceFile.copy(destinationFile.fileName())) + if(CopyFileEx( + reinterpret_cast<const wchar_t*>(sourceFile.fileName().utf16()), + reinterpret_cast<const wchar_t*>(destinationFile.fileName().utf16()), + NULL, + NULL, + FALSE, + 0 + )==0) + #else + if(!QFile::link(sourceFile.symLinkTarget(),destinationFile.fileName())) + #endif + { + readError=true; + if(!sourceFile.exists() && !source.isSymLink()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("source not exists %1 -> %4: %2, error: %3").arg(sourceFile.fileName()).arg(destinationFile.fileName()).arg(sourceFile.errorString()).arg(sourceFile.symLinkTarget())); + emit errorOnFile(sourceFile,tr("The source file doesn't exist")); + return; + } + else if(destinationFile.exists() || destination.isSymLink()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("destination already exists %1 -> %4: %2, error: %3").arg(sourceFile.fileName()).arg(destinationFile.fileName()).arg(sourceFile.errorString()).arg(sourceFile.symLinkTarget())); + emit errorOnFile(sourceFile,tr("Another file exists at same place")); + return; + } + else if(!dir.exists()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("destination folder not exists %1 -> %4: %2, error: %3").arg(sourceFile.fileName()).arg(destinationFile.fileName()).arg(sourceFile.errorString()).arg(sourceFile.symLinkTarget())); + emit errorOnFile(sourceFile,tr("Unable to do the folder")); + return; + } + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("unable to do sym link copy %1 -> %4: %2, error: %3").arg(sourceFile.fileName()).arg(destinationFile.fileName()).arg(sourceFile.errorString()).arg(sourceFile.symLinkTarget())); + emit errorOnFile(sourceFile,sourceFile.errorString()); + return; + } + readThread.fakeReadIsStarted(); + writeThread.fakeWriteIsStarted(); + readThread.fakeReadIsStopped(); + writeThread.fakeWriteIsStopped(); +} + +bool TransferThread::canBeMovedDirectly() const +{ + if(mode!=Ultracopier::Move) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("mode!=Ultracopier::Move")); + return false; + } + return source.isSymLink() || driveManagement.isSameDrive(destination.absoluteFilePath(),source.absoluteFilePath()); +} + +bool TransferThread::canBeCopiedDirectly() const +{ + return source.isSymLink(); +} + +void TransferThread::readIsReady() +{ + if(readIsReadyVariable) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] double event dropped")); + return; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start")); + readIsReadyVariable=true; + readIsOpenVariable=true; + readIsClosedVariable=false; + readIsOpeningVariable=false; + ifCanStartTransfer(); +} + +void TransferThread::ifCanStartTransfer() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] readIsReadyVariable: ")+QString::number(readIsReadyVariable)+QStringLiteral(", writeIsReadyVariable: ")+QString::number(writeIsReadyVariable)); + if(readIsReadyVariable && writeIsReadyVariable) + { + transfer_stat=TransferStat_WaitForTheTransfer; + sended_state_readStopped = false; + sended_state_writeStopped = false; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stat=WaitForTheTransfer")); + if(!sended_state_preOperationStopped) + { + sended_state_preOperationStopped=true; + emit preOperationStopped(); + } + if(canStartTransfer) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stat=Transfer, ")+QStringLiteral("canBeMovedDirectlyVariable: %1, canBeCopiedDirectlyVariable: %2").arg(canBeMovedDirectlyVariable).arg(canBeCopiedDirectlyVariable)); + transfer_stat=TransferStat_Transfer; + if(canBeMovedDirectlyVariable) + tryMoveDirectly(); + else if(canBeCopiedDirectlyVariable) + tryCopyDirectly(); + else + { + needRemove=deletePartiallyTransferredFiles; + readThread.startRead(); + } + emit pushStat(transfer_stat,transferId); + } + //else + //emit pushStat(stat,transferId); + } +} + +void TransferThread::writeIsReady() +{ + if(writeIsReadyVariable) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] double event dropped")); + return; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start")); + writeIsReadyVariable=true; + writeIsOpenVariable=true; + writeIsClosedVariable=false; + writeIsOpeningVariable=false; + ifCanStartTransfer(); +} + + +//set the copy info and options before runing +void TransferThread::setRightTransfer(const bool doRightTransfer) +{ + this->doRightTransfer=doRightTransfer; +} + +//set keep date +void TransferThread::setKeepDate(const bool keepDate) +{ + this->keepDate=keepDate; +} + +#ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT +//set the current max speed in KB/s +void TransferThread::setMultiForBigSpeed(const int &multiForBigSpeed) +{ + readThread.setMultiForBigSpeed(multiForBigSpeed); + writeThread.setMultiForBigSpeed(multiForBigSpeed); +} +#endif + +//set block size in Bytes +bool TransferThread::setBlockSize(const unsigned int blockSize) +{ + bool read=readThread.setBlockSize(blockSize); + bool write=writeThread.setBlockSize(blockSize); + return (read && write); +} + +//pause the copy +void TransferThread::pause() +{ + //only pause/resume during the transfer of file data + //from transfer_stat!=TransferStat_Idle because it resume at wrong order + if(transfer_stat!=TransferStat_Transfer && transfer_stat!=TransferStat_PostTransfer && transfer_stat!=TransferStat_Checksum) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] wrong stat to put in pause")); + return; + } + haveStartTime=false; + readThread.pause(); + writeThread.pause(); +} + +//resume the copy +void TransferThread::resume() +{ + //only pause/resume during the transfer of file data + //from transfer_stat!=TransferStat_Idle because it resume at wrong order + if(transfer_stat!=TransferStat_Transfer && transfer_stat!=TransferStat_PostTransfer && transfer_stat!=TransferStat_Checksum) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] wrong stat to put in pause")); + return; + } + readThread.resume(); + writeThread.resume(); +} + +//stop the current copy +void TransferThread::stop() +{ + stopIt=true; + haveStartTime=false; + if(transfer_stat==TransferStat_Idle) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("transfer_stat==TransferStat_Idle")); + return; + } + if(remainSourceOpen()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("remainSourceOpen()")); + readThread.stop(); + } + if(remainDestinationOpen()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("remainDestinationOpen()")); + writeThread.stop(); + } + if(!remainFileOpen()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("transfer_stat==TransferStat_Idle")); + if(needRemove && source.absoluteFilePath()!=destination.absoluteFilePath()) + { + if(source.exists()) + QFile(destination.absoluteFilePath()).remove(); + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] try destroy the destination when the source don't exists")); + } + transfer_stat=TransferStat_PostOperation; + emit internalStartPostOperation(); + } + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("transfer_stat==%1 && remainFileOpen()").arg(transfer_stat)); +} + +bool TransferThread::remainFileOpen() const +{ + return remainSourceOpen() || remainDestinationOpen(); +} + +bool TransferThread::remainSourceOpen() const +{ + return (readIsOpenVariable || readIsOpeningVariable) && !readIsClosedVariable; +} + +bool TransferThread::remainDestinationOpen() const +{ + return (writeIsOpenVariable || writeIsOpeningVariable) && !writeIsClosedVariable; +} + +void TransferThread::readIsFinish() +{ + if(readIsFinishVariable) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] double event dropped")); + return; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start")); + readIsFinishVariable=true; + canStartTransfer=false; + //check here if need start checksuming or not + real_doChecksum=doChecksum && (!checksumOnlyOnError || fileContentError) && (!canBeMovedDirectlyVariable && !canBeCopiedDirectlyVariable); + if(real_doChecksum) + { + readIsFinishVariable=false; + transfer_stat=TransferStat_Checksum; + sourceChecksum=QByteArray(); + destinationChecksum=QByteArray(); + readThread.startCheckSum(); + } + else + { + transfer_stat=TransferStat_PostTransfer; + if(!needSkip || (canBeCopiedDirectlyVariable || canBeMovedDirectlyVariable))//if skip, stop call, then readIsClosed() already call + readThread.postOperation(); + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] in skip, don't start postOperation")); + } + emit pushStat(transfer_stat,transferId); +} + +void TransferThread::writeIsFinish() +{ + if(writeIsFinishVariable) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] double event dropped")); + return; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start")); + writeIsFinishVariable=true; + //check here if need start checksuming or not + if(real_doChecksum) + { + writeIsFinishVariable=false; + transfer_stat=TransferStat_Checksum; + writeThread.startCheckSum(); + } + else + { + if(!needSkip || (canBeCopiedDirectlyVariable || canBeMovedDirectlyVariable))//if skip, stop call, then writeIsClosed() already call + writeThread.postOperation(); + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] in skip, don't start postOperation")); + } +} + +void TransferThread::readChecksumFinish(const QByteArray& checksum) +{ + sourceChecksum=checksum; + compareChecksum(); +} + +void TransferThread::writeChecksumFinish(const QByteArray& checksum) +{ + destinationChecksum=checksum; + compareChecksum(); +} + +void TransferThread::compareChecksum() +{ + if(sourceChecksum.size()==0) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] the checksum of source is missing")); + return; + } + if(destinationChecksum.size()==0) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] the checksum of destination is missing")); + return; + } + if(sourceChecksum==destinationChecksum) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] the checksum match")); + readThread.postOperation(); + writeThread.postOperation(); + transfer_stat=TransferStat_PostTransfer; + emit pushStat(transfer_stat,transferId); + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] the checksum not match")); + //emit error here, and wait to resume + emit errorOnFile(destination,tr("The checksums do not match")); + } +} + +void TransferThread::readIsClosed() +{ + if(readIsClosedVariable) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] double event dropped")); + return; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start")); + readIsClosedVariable=true; + readIsOpeningVariable=false; + checkIfAllIsClosedAndDoOperations(); +} + +void TransferThread::writeIsClosed() +{ + if(writeIsClosedVariable) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] double event dropped")); + return; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start")); + writeIsClosedVariable=true; + writeIsOpeningVariable=false; + if(stopIt && needRemove && source.absoluteFilePath()!=destination.absoluteFilePath()) + { + if(source.exists()) + QFile(destination.absoluteFilePath()).remove(); + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] try destroy the destination when the source don't exists")); + } + checkIfAllIsClosedAndDoOperations(); +} + +// return true if all is closed, and do some operations, don't use into condition to check if is closed! +bool TransferThread::checkIfAllIsClosedAndDoOperations() +{ + if((readError || writeError) && !needSkip && !stopIt) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] resolve error before progress")); + return false; + } + if(!remainFileOpen()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] emit internalStartPostOperation() to do the real post operation")); + transfer_stat=TransferStat_PostOperation; + //emit pushStat(stat,transferId); + emit internalStartPostOperation(); + return true; + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("wait self close: readIsReadyVariable: %1, readIsClosedVariable: %2, writeIsReadyVariable: %3, writeIsClosedVariable: %4") + .arg(readIsReadyVariable) + .arg(readIsClosedVariable) + .arg(writeIsReadyVariable) + .arg(writeIsClosedVariable) + ); + return false; + } +} + +/// \todo found way to retry that's +/// \todo the rights copy +void TransferThread::postOperation() +{ + if(transfer_stat!=TransferStat_PostOperation) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] need be in transfer, source: ")+source.absoluteFilePath()+QStringLiteral(", destination: ")+destination.absoluteFilePath()+QStringLiteral(", stat:")+QString::number(transfer_stat)); + return; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start")); + //all except closing + if((readError || writeError) && !needSkip && !stopIt)//normally useless by checkIfAllIsFinish() + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] resume after error")); + return; + } + + if(!needSkip && !stopIt) + { + if(!canBeCopiedDirectlyVariable && !canBeMovedDirectlyVariable) + { + if(writeIsOpenVariable && !writeIsClosedVariable) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] can't pass in post operation if write is not closed")); + emit errorOnFile(destination,tr("Internal error: The destination is not closed")); + needSkip=false; + if(deletePartiallyTransferredFiles) + needRemove=true; + writeError=true; + return; + } + if(readThread.getLastGoodPosition()!=writeThread.getLastGoodPosition()) + { + writeThread.flushBuffer(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] readThread.getLastGoodPosition(%1)!=writeThread.getLastGoodPosition(%2)") + .arg(readThread.getLastGoodPosition()) + .arg(writeThread.getLastGoodPosition()) + ); + emit errorOnFile(destination,tr("Internal error: The size transfered doesn't match")); + needSkip=false; + if(deletePartiallyTransferredFiles) + needRemove=true; + writeError=true; + return; + } + if(!writeThread.bufferIsEmpty()) + { + writeThread.flushBuffer(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] buffer is not empty")); + emit errorOnFile(destination,tr("Internal error: The buffer is not empty")); + needSkip=false; + if(deletePartiallyTransferredFiles) + needRemove=true; + writeError=true; + return; + } + } + + if(!doFilePostOperation()) + return; + + //remove source in moving mode + if(mode==Ultracopier::Move && !canBeMovedDirectlyVariable) + { + if(destination.exists() && destination.isFile()) + { + QFile sourceFile(source.absoluteFilePath()); + if(!sourceFile.remove()) + { + needSkip=false; + emit errorOnFile(source,sourceFile.errorString()); + return; + } + } + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] try remove source but destination not exists!")); + } + } + else//do difference skip a file and skip this error case + { + if(needRemove && destination.exists() && source.exists() && source.absoluteFilePath()!=destination.absoluteFilePath() && destination.isFile()) + { + QFile destinationFile(destination.absoluteFilePath()); + if(!destinationFile.remove()) + { + //emit errorOnFile(source,destinationFile.errorString()); + //return; + } + } + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] try remove destination but not exists!")); + } + source.setFile(QStringLiteral("")); + destination.setFile(QStringLiteral("")); + //don't need remove because have correctly finish (it's not in: have started) + needRemove=false; + needSkip=false; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] emit postOperationStopped()")); + transfer_stat=TransferStat_Idle; + emit postOperationStopped(); +} + +bool TransferThread::doFilePostOperation() +{ + //do operation needed by copy + //set the time if no write thread used + + destination.refresh(); + if(!destination.exists() && !destination.isSymLink()) + { + if(!stopIt) + if(/*true when the destination have been remove but not the symlink:*/!source.isSymLink()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to change the date: File not found")); + emit errorOnFile(destination,tr("Unable to change the date")+QStringLiteral(": ")+tr("File not found")); + return false; + } + } + else + { + if(doTheDateTransfer) + { + if(!writeFileDateTime(destination)) + { + if(!destination.isFile()) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to change the date (is not a file)")); + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to change the date")); + /* error with virtual folder under windows */ + #ifndef Q_OS_WIN32 + if(keepDate) + { + emit errorOnFile(destination,tr("Unable to change the date")); + return false; + } + #endif + } + else + { + #ifndef Q_OS_WIN32 + destination.refresh(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] read the destination time: ")+destination.lastModified().toString()); + if(destination.lastModified()<minTime) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] read the destination time lower than min time: ")+destination.lastModified().toString()); + if(keepDate) + { + emit errorOnFile(destination,tr("Unable to change the date")); + return false; + } + } + #endif + } + } + if(doRightTransfer) + { + QFile sourceFile(source.absoluteFilePath()); + QFile destinationFile(destination.absoluteFilePath()); + if(!destinationFile.setPermissions(sourceFile.permissions())) + { + if(sourceFile.error()!=QFile::NoError) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to get the source file permission")); + //emit errorOnFile(destination,tr("Unable to get the source file permission")); + //return false; + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to set the destination file permission")); + //emit errorOnFile(destination,tr("Unable to set the destination file permission")); + //return false; + } + } + } + } + if(stopIt) + return false; + + return true; +} + +////////////////////////////////////////////////////////////////// +/////////////////////// Error management ///////////////////////// +////////////////////////////////////////////////////////////////// + +void TransferThread::getWriteError() +{ + if(writeError) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] already in write error!")); + return; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start")); + fileContentError = true; + writeError = true; + writeIsReadyVariable = false; + writeError_source_seeked = false; + writeError_destination_reopened = false; + writeIsOpeningVariable=false; + if(!readError)//already display error for the read + emit errorOnFile(destination,writeThread.errorString()); +} + +void TransferThread::getReadError() +{ + if(readError) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] already in read error!")); + return; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start")); + fileContentError = true; + readError = true; + //writeIsReadyVariable = false;//wrong because write can be ready here + readIsReadyVariable = false; + readIsOpeningVariable=false; + if(!writeError)//already display error for the write + emit errorOnFile(source,readThread.errorString()); +} + +//retry after error +void TransferThread::retryAfterError() +{ + /// \warning skip the resetExtraVariable(); to be more exact and resolv some bug + if(transfer_stat==TransferStat_Idle) + { + if(transferId==0) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] seam have bug, source: ")+source.absoluteFilePath()+QStringLiteral(", destination: ")+destination.absoluteFilePath()); + return; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] restart all, source: ")+source.absoluteFilePath()+QStringLiteral(", destination: ")+destination.absoluteFilePath()); + readError=false; + //writeError=false; + emit internalStartPreOperation(); + return; + } + //opening error + if(transfer_stat==TransferStat_PreOperation) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] is not idle, source: ")+source.absoluteFilePath()+QStringLiteral(", destination: ")+destination.absoluteFilePath()+QStringLiteral(", stat: ")+QString::number(transfer_stat)); + readError=false; + //writeError=false; + emit internalStartPreOperation(); + //tryOpen();-> recheck all, because can be an error into isSame(), rename(), ... + return; + } + //data streaming error + if(transfer_stat!=TransferStat_PostOperation && transfer_stat!=TransferStat_Transfer && transfer_stat!=TransferStat_PostTransfer && transfer_stat!=TransferStat_Checksum) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] is not in right stat, source: ")+source.absoluteFilePath()+QStringLiteral(", destination: ")+destination.absoluteFilePath()+QStringLiteral(", stat: ")+QString::number(transfer_stat)); + return; + } + if(transfer_stat==TransferStat_PostOperation) + { + if(readError || writeError) + { + readError=false; + //writeError=false; + resumeTransferAfterWriteError(); + writeThread.flushBuffer(); + transfer_stat=TransferStat_PreOperation; + emit internalStartPreOperation(); + return; + } + emit internalStartPostOperation(); + return; + } + if(canBeMovedDirectlyVariable) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] retry the system move")); + tryMoveDirectly(); + return; + } + if(canBeCopiedDirectlyVariable) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] retry the copy directly")); + tryCopyDirectly(); + return; + } + if(transfer_stat==TransferStat_Checksum) + { + if(writeError) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start and resume the write error")); + writeThread.reopen(); + } + else if(readError) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start and resume the read error")); + readThread.reopen(); + } + else //only checksum difference + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] retry all the transfer")); + canStartTransfer=true; + ifCanStartTransfer(); + } + return; + } + //can have error on source and destination at the same time + if(writeError) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start and resume the write error: ")+QString::number(readError)); + if(readError) + readThread.reopen(); + else + { + readIsClosedVariable=false; + readThread.seekToZeroAndWait(); + } + writeThread.reopen(); + } + if(readError) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start and resume the read error")); + readThread.reopen(); + } + if(!writeError && !readError) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] unknow error resume")); +} + +void TransferThread::writeThreadIsReopened() +{ + if(writeError_destination_reopened) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] double event dropped")); + return; + } + writeError_destination_reopened=true; + if(transfer_stat==TransferStat_Checksum) + { + writeThread.startCheckSum(); + return; + } + if(writeError_source_seeked && writeError_destination_reopened) + resumeTransferAfterWriteError(); +} + +void TransferThread::readThreadIsSeekToZeroAndWait() +{ + if(writeError_source_seeked) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] double event dropped")); + return; + } + writeError_source_seeked=true; + if(writeError_source_seeked && writeError_destination_reopened) + resumeTransferAfterWriteError(); +} + +void TransferThread::resumeTransferAfterWriteError() +{ + writeError=false; +/******************************** + if(canStartTransfer) + readThread.startRead(); +useless, because the open destination event +will restart the transfer as normal +*********************************/ +/********************************* +if(!canStartTransfer) + stat=WaitForTheTransfer; +useless because already do at open event +**********************************/ + //if is in wait + if(!canStartTransfer) + emit checkIfItCanBeResumed(); +} + +void TransferThread::readThreadResumeAfterError() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start")); + readError=false; + writeIsReady(); + readIsReady(); +} + +////////////////////////////////////////////////////////////////// +///////////////////////// Normal event /////////////////////////// +////////////////////////////////////////////////////////////////// + +void TransferThread::readIsStopped() +{ + if(!sended_state_readStopped) + { + sended_state_readStopped=true; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] emit readIsStopped()")); + emit readStopped(); + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] drop dual read stopped")); + return; + } + readIsFinish(); +} + +void TransferThread::writeIsStopped() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start")); + if(!sended_state_writeStopped) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] emit writeStopped()")); + sended_state_writeStopped=true; + emit writeStopped(); + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] double event dropped")); + return; + } + writeIsFinish(); +} + +#ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT +void TransferThread::timeOfTheBlockCopyFinished() +{ + readThread.timeOfTheBlockCopyFinished(); + writeThread.timeOfTheBlockCopyFinished(); +} +#endif + +bool TransferThread::setParallelBuffer(const int ¶llelBuffer) +{ + if(parallelBuffer<1 || parallelBuffer>ULTRACOPIER_PLUGIN_MAX_PARALLEL_NUMBER_OF_BLOCK) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] wrong parallelBuffer: ")+QString::number(parallelBuffer)); + return false; + } + else + { + this->parallelBuffer=parallelBuffer; + return true; + } +} + +bool TransferThread::setSequentialBuffer(const int &sequentialBuffer) +{ + if(sequentialBuffer<1 || sequentialBuffer>ULTRACOPIER_PLUGIN_MAX_SEQUENTIAL_NUMBER_OF_BLOCK) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] wrong sequentialBuffer: ")+QString::number(sequentialBuffer)); + return false; + } + else + { + this->sequentialBuffer=sequentialBuffer; + return true; + } +} + +void TransferThread::setTransferAlgorithm(const TransferAlgorithm &transferAlgorithm) +{ + this->transferAlgorithm=transferAlgorithm; + if(transferAlgorithm==TransferAlgorithm_Sequential) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("]transferAlgorithm==TransferAlgorithm_Sequential")); + else if(transferAlgorithm==TransferAlgorithm_Automatic) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("]transferAlgorithm==TransferAlgorithm_Automatic")); + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("]transferAlgorithm==TransferAlgorithm_Parallel")); +} + +//fonction to edit the file date time +bool TransferThread::readFileDateTime(const QFileInfo &source) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] readFileDateTime(")+source.absoluteFilePath()+QStringLiteral(")")); + if(source.lastModified()<minTime) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] the sources is older to copy the time: ")+source.absoluteFilePath()+QStringLiteral(": ")+source.lastModified().toString()); + return false; + } + /** Why not do it with Qt? Because it not support setModificationTime(), and get the time with Qt, that's mean use local time where in C is UTC time */ + #ifdef Q_OS_UNIX + #ifdef Q_OS_LINUX + struct stat info; + if(stat(source.absoluteFilePath().toLatin1().data(),&info)!=0) + return false; + time_t ctime=info.st_ctim.tv_sec; + time_t actime=info.st_atim.tv_sec; + time_t modtime=info.st_mtim.tv_sec; + //this function avalaible on unix and mingw + butime.actime=actime; + butime.modtime=modtime; + Q_UNUSED(ctime); + return true; + #else //mainly for mac + time_t ctime=source.created().toTime_t(); + time_t actime=source.lastRead().toTime_t(); + time_t modtime=source.lastModified().toTime_t(); + //this function avalaible on unix and mingw + utimbuf butime; + butime.actime=actime; + butime.modtime=modtime; + Q_UNUSED(ctime); + return true; + #endif + #else + #ifdef Q_OS_WIN32 + #ifdef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY + struct stat info; + if(stat(source.toLatin1().data(),&info)!=0) + return false; + time_t ctime=info.st_ctim.tv_sec; + time_t actime=info.st_atim.tv_sec; + time_t modtime=info.st_mtim.tv_sec; + //this function avalaible on unix and mingw + butime.actime=actime; + butime.modtime=modtime; + Q_UNUSED(ctime); + return true; + #else + wchar_t filePath[65535]; + if(source.absoluteFilePath().contains(regRead)) + filePath[QDir::toNativeSeparators(QStringLiteral("\\\\?\\")+source.absoluteFilePath()).toWCharArray(filePath)]=L'\0'; + else + filePath[QDir::toNativeSeparators(source.absoluteFilePath()).toWCharArray(filePath)]=L'\0'; + HANDLE hFileSouce = CreateFileW(filePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL); + if(hFileSouce == INVALID_HANDLE_VALUE) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] open failed to read: ")+QString::fromWCharArray(filePath)+QStringLiteral(", error: ")+QString::number(GetLastError())); + return false; + } + FILETIME ftCreate, ftAccess, ftWrite; + if(!GetFileTime(hFileSouce, &ftCreate, &ftAccess, &ftWrite)) + { + CloseHandle(hFileSouce); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] unable to get the file time")); + return false; + } + this->ftCreateL=ftCreate.dwLowDateTime; + this->ftCreateH=ftCreate.dwHighDateTime; + this->ftAccessL=ftAccess.dwLowDateTime; + this->ftAccessH=ftAccess.dwHighDateTime; + this->ftWriteL=ftWrite.dwLowDateTime; + this->ftWriteH=ftWrite.dwHighDateTime; + CloseHandle(hFileSouce); + return true; + #endif + #else + return false; + #endif + #endif + return false; +} + +bool TransferThread::writeFileDateTime(const QFileInfo &destination) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] writeFileDateTime(")+destination.absoluteFilePath()+QStringLiteral(")")); + /** Why not do it with Qt? Because it not support setModificationTime(), and get the time with Qt, that's mean use local time where in C is UTC time */ + #ifdef Q_OS_UNIX + #ifdef Q_OS_LINUX + return utime(destination.absoluteFilePath().toLatin1().data(),&butime)==0; + #else //mainly for mac + return utime(destination.absoluteFilePath().toLatin1().data(),&butime)==0; + #endif + #else + #ifdef Q_OS_WIN32 + #ifdef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY + return utime(destination.toLatin1().data(),&butime)==0; + #else + wchar_t filePath[65535]; + if(destination.absoluteFilePath().contains(regRead)) + filePath[QDir::toNativeSeparators(QStringLiteral("\\\\?\\")+destination.absoluteFilePath()).toWCharArray(filePath)]=L'\0'; + else + filePath[QDir::toNativeSeparators(destination.absoluteFilePath()).toWCharArray(filePath)]=L'\0'; + HANDLE hFileDestination = CreateFileW(filePath, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); + if(hFileDestination == INVALID_HANDLE_VALUE) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] open failed to write: ")+QString::fromWCharArray(filePath)+QStringLiteral(", error: ")+QString::number(GetLastError())); + return false; + } + FILETIME ftCreate, ftAccess, ftWrite; + ftCreate.dwLowDateTime=this->ftCreateL; + ftCreate.dwHighDateTime=this->ftCreateH; + ftAccess.dwLowDateTime=this->ftAccessL; + ftAccess.dwHighDateTime=this->ftAccessH; + ftWrite.dwLowDateTime=this->ftWriteL; + ftWrite.dwHighDateTime=this->ftWriteH; + if(!SetFileTime(hFileDestination, &ftCreate, &ftAccess, &ftWrite)) + { + CloseHandle(hFileDestination); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] unable to set the file time")); + return false; + } + CloseHandle(hFileDestination); + return true; + #endif + #else + return false; + #endif + #endif + return false; +} + +//skip the copy +void TransferThread::skip() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start with stat: ")+QString::number(transfer_stat)); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] readIsOpeningVariable: ")+QString::number(readIsOpeningVariable)+QStringLiteral(", readIsOpenVariable: ")+QString::number(readIsOpenVariable)+QStringLiteral(", readIsReadyVariable: ")+QString::number(readIsReadyVariable)+QStringLiteral(", readIsFinishVariable: ")+QString::number(readIsFinishVariable)+QStringLiteral(", readIsClosedVariable: ")+QString::number(readIsClosedVariable)); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] writeIsOpeningVariable: ")+QString::number(writeIsOpeningVariable)+QStringLiteral(", writeIsOpenVariable: ")+QString::number(writeIsOpenVariable)+QStringLiteral(", writeIsReadyVariable: ")+QString::number(writeIsReadyVariable)+QStringLiteral(", writeIsFinishVariable: ")+QString::number(writeIsFinishVariable)+QStringLiteral(", writeIsClosedVariable: ")+QString::number(writeIsClosedVariable)); + switch(transfer_stat) + { + case TransferStat_WaitForTheTransfer: + //needRemove=true;never put that's here, can product destruction of the file + case TransferStat_PreOperation: + if(needSkip) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] skip already in progress")); + return; + } + needSkip=true; + //check if all is source and destination is closed + if(remainFileOpen()) + { + if(remainSourceOpen()) + readThread.stop(); + if(remainDestinationOpen()) + writeThread.stop(); + } + else // wait nothing, just quit + { + transfer_stat=TransferStat_PostOperation; + emit internalStartPostOperation(); + } + break; + case TransferStat_Transfer: + case TransferStat_PostTransfer: + if(needSkip) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] skip already in progress")); + return; + } + //needRemove=true;never put that's here, can product destruction of the file + needSkip=true; + if(canBeMovedDirectlyVariable || canBeCopiedDirectlyVariable) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] Do the direct FS fake close, canBeMovedDirectlyVariable: ")+QString::number(canBeMovedDirectlyVariable)+QStringLiteral(", canBeCopiedDirectlyVariable: ")+QString::number(canBeCopiedDirectlyVariable)); + readThread.fakeReadIsStarted(); + writeThread.fakeWriteIsStarted(); + readThread.fakeReadIsStopped(); + writeThread.fakeWriteIsStopped(); + return; + } + writeThread.flushBuffer(); + if(remainFileOpen()) + { + if(remainSourceOpen()) + readThread.stop(); + if(remainDestinationOpen()) + writeThread.stop(); + } + else // wait nothing, just quit + { + transfer_stat=TransferStat_PostOperation; + emit internalStartPostOperation(); + } + break; + case TransferStat_Checksum: + if(needSkip) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] skip already in progress")); + return; + } + //needRemove=true;never put that's here, can product destruction of the file + needSkip=true; + if(remainFileOpen()) + { + if(remainSourceOpen()) + readThread.stop(); + if(remainDestinationOpen()) + writeThread.stop(); + } + else // wait nothing, just quit + { + transfer_stat=TransferStat_PostOperation; + emit internalStartPostOperation(); + } + break; + case TransferStat_PostOperation: + if(needSkip) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] skip already in progress")); + return; + } + //needRemove=true;never put that's here, can product destruction of the file + needSkip=true; + writeThread.flushBuffer(); + emit internalStartPostOperation(); + break; + default: + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] can skip in this state: ")+QString::number(transfer_stat)); + return; + } +} + +//return info about the copied size +qint64 TransferThread::copiedSize() +{ + switch(transfer_stat) + { + case TransferStat_Transfer: + case TransferStat_PostOperation: + case TransferStat_PostTransfer: + return (readThread.getLastGoodPosition()+writeThread.getLastGoodPosition())/2; + case TransferStat_Checksum: + return transferSize; + default: + return 0; + } +} + +//retry after error +void TransferThread::putAtBottom() +{ + emit tryPutAtBottom(); +} + +#ifdef ULTRACOPIER_PLUGIN_RSYNC +/// \brief set rsync +void TransferThread::setRsync(const bool rsync) +{ + this->rsync=rsync; +} +#endif + +void TransferThread::set_osBufferLimit(const unsigned int &osBufferLimit) +{ + this->osBufferLimit=osBufferLimit; +} + +#ifdef ULTRACOPIER_PLUGIN_DEBUG +//to set the id +void TransferThread::setId(int id) +{ + this->id=id; + readThread.setId(id); + writeThread.setId(id); +} + +QChar TransferThread::readingLetter() const +{ + switch(readThread.stat) + { + case ReadThread::Idle: + return '_'; + break; + case ReadThread::InodeOperation: + return 'I'; + break; + case ReadThread::Read: + return 'R'; + break; + case ReadThread::WaitWritePipe: + return 'W'; + break; + case ReadThread::Checksum: + return 'S'; + break; + default: + return '?'; + } +} + +QChar TransferThread::writingLetter() const +{ + switch(writeThread.stat) + { + case WriteThread::Idle: + return '_'; + break; + case WriteThread::InodeOperation: + return 'I'; + break; + case WriteThread::Write: + return 'W'; + break; + case WriteThread::Close: + return 'C'; + break; + case WriteThread::Read: + return 'R'; + break; + case WriteThread::Checksum: + return 'S'; + break; + default: + return '?'; + } +} + +#endif + +void TransferThread::setMkpathTransfer(QSemaphore *mkpathTransfer) +{ + this->mkpathTransfer=mkpathTransfer; + writeThread.setMkpathTransfer(mkpathTransfer); +} + +void TransferThread::set_doChecksum(bool doChecksum) +{ + this->doChecksum=doChecksum; +} + +void TransferThread::set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible) +{ + this->checksumIgnoreIfImpossible=checksumIgnoreIfImpossible; +} + +void TransferThread::set_checksumOnlyOnError(bool checksumOnlyOnError) +{ + this->checksumOnlyOnError=checksumOnlyOnError; +} + +void TransferThread::set_osBuffer(bool osBuffer) +{ + this->osBuffer=osBuffer; +} + +void TransferThread::set_osBufferLimited(bool osBufferLimited) +{ + this->osBufferLimited=osBufferLimited; +} + +//not copied size, because that's count to the checksum, ... +quint64 TransferThread::realByteTransfered() const +{ + switch(transfer_stat) + { + case TransferStat_Transfer: + case TransferStat_Checksum: + return (readThread.getLastGoodPosition()+writeThread.getLastGoodPosition())/2; + case TransferStat_PostTransfer: + return (readThread.getLastGoodPosition()+writeThread.getLastGoodPosition())/2; + case TransferStat_PostOperation: + return transferSize; + default: + return 0; + } +} + +//first is read, second is write +QPair<quint64,quint64> TransferThread::progression() const +{ + QPair<quint64,quint64> returnVar; + switch(transfer_stat) + { + case TransferStat_Transfer: + returnVar.first=readThread.getLastGoodPosition(); + returnVar.second=writeThread.getLastGoodPosition(); + /*if(returnVar.first<returnVar.second) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] read is smaller than write"));*/ + break; + case TransferStat_Checksum: + returnVar.first=readThread.getLastGoodPosition(); + returnVar.second=writeThread.getLastGoodPosition(); + break; + case TransferStat_PostTransfer: + returnVar.first=transferSize; + returnVar.second=writeThread.getLastGoodPosition(); + /*if(returnVar.first<returnVar.second) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] read is smaller than write"));*/ + break; + case TransferStat_PostOperation: + returnVar.first=transferSize; + returnVar.second=transferSize; + break; + default: + returnVar.first=0; + returnVar.second=0; + } + return returnVar; +} + +void TransferThread::setRenamingRules(const QString &firstRenamingRule,const QString &otherRenamingRule) +{ + this->firstRenamingRule=firstRenamingRule; + this->otherRenamingRule=otherRenamingRule; +} + +void TransferThread::setDeletePartiallyTransferredFiles(const bool &deletePartiallyTransferredFiles) +{ + this->deletePartiallyTransferredFiles=deletePartiallyTransferredFiles; +} + +void TransferThread::setRenameTheOriginalDestination(const bool &renameTheOriginalDestination) +{ + this->renameTheOriginalDestination=renameTheOriginalDestination; +} + +void TransferThread::set_updateMount() +{ + driveManagement.tryUpdate(); +} diff --git a/plugins/CopyEngine/Ultracopier/TransferThread.h b/plugins/CopyEngine/Ultracopier/TransferThread.h new file mode 100644 index 0000000..051375e --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/TransferThread.h @@ -0,0 +1,288 @@ +/** \file TransferThread.h +\brief Thread changed to manage the inode operation, the signals, canceling, pre and post operations +\author alpha_one_x86 +\licence GPL3, see the file COPYING */ + +#ifndef TRANSFERTHREAD_H +#define TRANSFERTHREAD_H + +#include <QThread> +#include <QFileInfo> +#include <QString> +#include <QList> +#include <QStringList> +#include <QDateTime> +#include <QDir> +#include <QPair> + +#ifdef Q_OS_UNIX + #include <utime.h> + #include <time.h> + #include <unistd.h> + #include <sys/stat.h> +#else + #ifdef Q_OS_WIN32 + #ifdef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY + #include <utime.h> + #include <time.h> + #include <unistd.h> + #include <sys/stat.h> + #endif + #endif +#endif + +#include "ReadThread.h" +#include "WriteThread.h" +#include "Environment.h" +#include "DriveManagement.h" +#include "StructEnumDefinition_CopyEngine.h" + +/// \brief Thread changed to manage the inode operation, the signals, canceling, pre and post operations +class TransferThread : public QThread +{ + Q_OBJECT +public: + explicit TransferThread(); + ~TransferThread(); + /// \brief get transfer stat + TransferStat getStat() const; + #ifdef ULTRACOPIER_PLUGIN_DEBUG + /// \brief to set the id + void setId(int id); + /// \brief get the reading letter + QChar readingLetter() const; + /// \brief get the writing letter + QChar writingLetter() const; + #endif + /// \brief to have semaphore, and try create just one by one + void setMkpathTransfer(QSemaphore *mkpathTransfer); + /// \brief to store the transfer id + quint64 transferId; + /// \brief to store the transfer size + quint64 transferSize; + bool haveStartTime; + QTime startTransferTime; + + void set_doChecksum(bool doChecksum); + void set_checksumIgnoreIfImpossible(bool checksumIgnoreIfImpossible); + void set_checksumOnlyOnError(bool checksumOnlyOnError); + void set_osBuffer(bool osBuffer); + void set_osBufferLimited(bool osBufferLimited); + + //not copied size, because that's count to the checksum, ... + quint64 realByteTransfered() const; + QPair<quint64,quint64> progression() const; + static QString resolvedName(const QFileInfo &inode); + QString getSourcePath() const; + QString getDestinationPath() const; + QFileInfo getSourceInode() const; + QFileInfo getDestinationInode() const; + Ultracopier::CopyMode getMode() const; +protected: + void run(); +signals: + //to send state + void preOperationStopped() const; + void checkIfItCanBeResumed() const; + //void transferStarted();//not sended (and not used then) + void readStopped() const; + void writeStopped() const; + void postOperationStopped() const; + //get dialog + void fileAlreadyExists(const QFileInfo &info,const QFileInfo &info2,const bool &isSame) const; + void errorOnFile(const QFileInfo &info,const QString &string,const ErrorType &errorType=ErrorType_Normal) const; + //internal signal + void internalStartPostOperation() const; + void internalStartPreOperation() const; + void internalStartResumeAfterErrorAndSeek() const; + /// \brief To debug source + void debugInformation(const Ultracopier::DebugLevel &level,QString fonction,QString text,QString file,int ligne) const; + void tryPutAtBottom() const; + //force into the right thread + void internalTryStartTheTransfer() const; + /// \brief update the transfer stat + void pushStat(const TransferStat &stat,const quint64 &pos) const; +public slots: + /// \brief to start the transfer of data + void startTheTransfer(); + /// \brief to set files to transfer + bool setFiles(const QFileInfo& source,const qint64 &size,const QFileInfo& destination,const Ultracopier::CopyMode &mode); + /// \brief to set file exists action to do + void setFileExistsAction(const FileExistsAction &action); + /// \brief to set the new name of the destination + void setFileRename(const QString &nameForRename); + /// \brief to start the transfer of data + void setAlwaysFileExistsAction(const FileExistsAction &action); + /// \brief set the copy info and options before runing + void setRightTransfer(const bool doRightTransfer); + /// \brief set keep date + void setKeepDate(const bool keepDate); + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + /// \brief set the current max speed in KB/s + void setMultiForBigSpeed(const int &maxSpeed); + #endif + /// \brief set block size in KB + bool setBlockSize(const unsigned int blockSize); + /// \brief pause the copy + void pause(); + /// \brief resume the copy + void resume(); + /// \brief stop the copy + void stop(); + /// \brief skip the copy + void skip(); + /// \brief retry after error + void retryAfterError(); + /// \brief return info about the copied size + qint64 copiedSize(); + /// \brief put the current file at bottom + void putAtBottom(); + + #ifdef ULTRACOPIER_PLUGIN_RSYNC + void setRsync(const bool rsync); + #endif + + void set_osBufferLimit(const unsigned int &osBufferLimit); + void setRenamingRules(const QString &firstRenamingRule,const QString &otherRenamingRule); + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + //speed limitation + void timeOfTheBlockCopyFinished(); + #endif + + bool setParallelBuffer(const int ¶llelBuffer); + bool setSequentialBuffer(const int &sequentialBuffer); + void setTransferAlgorithm(const TransferAlgorithm &transferAlgorithm); + void setDeletePartiallyTransferredFiles(const bool &deletePartiallyTransferredFiles); + void setRenameTheOriginalDestination(const bool &renameTheOriginalDestination); + void set_updateMount(); +private slots: + void preOperation(); + void readIsReady(); + void writeIsReady(); + void readIsFinish(); + void writeIsFinish(); + void readIsClosed(); + void writeIsClosed(); + void postOperation(); + void getWriteError(); + void getReadError(); + void readChecksumFinish(const QByteArray&); + void writeChecksumFinish(const QByteArray&); + void compareChecksum(); + //void syncAfterErrorAndReadFinish(); + void readThreadIsSeekToZeroAndWait(); + void writeThreadIsReopened(); + void readThreadResumeAfterError(); + //to filter the emition of signal + void readIsStopped(); + void writeIsStopped(); + //force into the right thread + void internalStartTheTransfer(); +private: + enum MoveReturn + { + MoveReturn_skip=0, + MoveReturn_moved=1, + MoveReturn_error=2 + }; + TransferStat transfer_stat; + ReadThread readThread; + WriteThread writeThread; + /*QString source; + QString destination;*/ + Ultracopier::CopyMode mode; + bool doRightTransfer; + #ifdef ULTRACOPIER_PLUGIN_RSYNC + bool rsync; + #endif + bool keepDate; + //ready = open + ready to operation (no error to resolv) + bool readIsReadyVariable; + bool writeIsReadyVariable; + //can be open but with error + bool readIsOpeningVariable;//after call open() and before the end of internalOpen(), mostly to prevent internal error by open() when another is running + bool writeIsOpeningVariable;//after call open() and before the end of internalOpen(), mostly to prevent internal error by open() when another is running + bool readIsOpenVariable; + bool writeIsOpenVariable; + bool readIsFinishVariable; + bool writeIsFinishVariable; + bool readIsClosedVariable; + bool writeIsClosedVariable; + bool canBeMovedDirectlyVariable,canBeCopiedDirectlyVariable; + DriveManagement driveManagement; + QByteArray sourceChecksum,destinationChecksum; + volatile bool stopIt; + volatile bool canStartTransfer; + bool retry; + QFileInfo source; + QFileInfo destination; + qint64 size; + FileExistsAction fileExistsAction; + FileExistsAction alwaysDoFileExistsAction; + bool needSkip,needRemove; + QDateTime minTime; + int id; + QSemaphore *mkpathTransfer; + bool doChecksum,real_doChecksum; + bool checksumIgnoreIfImpossible; + bool checksumOnlyOnError; + bool deletePartiallyTransferredFiles; + bool osBuffer; + bool osBufferLimited; + unsigned int osBufferLimit; + QString firstRenamingRule; + QString otherRenamingRule; + //error management + bool writeError,writeError_source_seeked,writeError_destination_reopened; + bool readError; + bool renameTheOriginalDestination; + bool fileContentError; + bool doTheDateTransfer; + int parallelBuffer; + int sequentialBuffer; + int parallelizeIfSmallerThan; + QRegularExpression renameRegex; + TransferAlgorithm transferAlgorithm; + #ifdef Q_OS_UNIX + utimbuf butime; + #else + #ifdef Q_OS_WIN32 + #ifdef ULTRACOPIER_PLUGIN_SET_TIME_UNIX_WAY + utimbuf butime; + #else + quint32 ftCreateL, ftAccessL, ftWriteL; + quint32 ftCreateH, ftAccessH, ftWriteH; + QRegularExpression regRead; + #endif + #endif + #endif + //different pre-operation + bool isSame(); + bool destinationExists(); + bool checkAlwaysRename();///< return true if has been renamed + bool canBeMovedDirectly() const; + bool canBeCopiedDirectly() const; + void tryMoveDirectly(); + void tryCopyDirectly(); + void ifCanStartTransfer(); + //fonction to edit the file date time + bool readFileDateTime(const QFileInfo &source); + bool writeFileDateTime(const QFileInfo &destination); + void resetExtraVariable(); + //error management function + void resumeTransferAfterWriteError(); + //to send state + bool sended_state_preOperationStopped; + bool sended_state_readStopped; + bool sended_state_writeStopped; + //different post-operation + bool checkIfAllIsClosedAndDoOperations();// return true if all is closed, and do some operations, don't use into condition to check if is closed! + bool doFilePostOperation(); + //different pre-operation + void tryOpen(); + bool remainFileOpen() const; + bool remainSourceOpen() const; + bool remainDestinationOpen() const; +}; + +#endif // TRANSFERTHREAD_H diff --git a/plugins/CopyEngine/Ultracopier-0.3/Variable.h b/plugins/CopyEngine/Ultracopier/Variable.h index f39b8a6..0fd1a3c 100644 --- a/plugins/CopyEngine/Ultracopier-0.3/Variable.h +++ b/plugins/CopyEngine/Ultracopier/Variable.h @@ -1,31 +1,39 @@ /** \file Variable.h
\brief Define the environment variable
\author alpha_one_x86
-\version 0.3
-\date 2010 */
+\licence GPL3, see the file COPYING */
#ifndef VARIABLE_H
#define VARIABLE_H
//Un-comment this next line to put ultracopier plugin in debug mode
#define ULTRACOPIER_PLUGIN_DEBUG
+//#define ULTRACOPIER_PLUGIN_DEBUG_SCHEDULER
#define ULTRACOPIER_PLUGIN_DEBUG_WINDOW
#define ULTRACOPIER_PLUGIN_DEBUG_WINDOW_TIMER 150
-#define ULTRACOPIER_PLUGIN_MAXBUFFERBLOCK 64
#define ULTRACOPIER_PLUGIN_MINTIMERINTERVAL 50
#define ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL 100
#define ULTRACOPIER_PLUGIN_NUMSEMSPEEDMANAGEMENT 2
-#define ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT 64
#define ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER 1
-#define ULTRACOPIER_PLUGIN_MINIMALYEAR 1990
+#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
diff --git a/plugins/CopyEngine/Ultracopier/WriteThread.cpp b/plugins/CopyEngine/Ultracopier/WriteThread.cpp new file mode 100644 index 0000000..42b3551 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/WriteThread.cpp @@ -0,0 +1,967 @@ +#include "WriteThread.h" + +#include <QDir> + +QMultiHash<QString,WriteThread *> WriteThread::writeFileList; +QMutex WriteThread::writeFileListMutex; + +WriteThread::WriteThread() +{ + deletePartiallyTransferredFiles = true; + lastGoodPosition = 0; + stopIt = false; + isOpen.release(); + moveToThread(this); + setObjectName(QStringLiteral("write")); + //this->mkpathTransfer = mkpathTransfer; + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat = Idle; + #endif + numberOfBlock = ULTRACOPIER_PLUGIN_DEFAULT_PARALLEL_NUMBER_OF_BLOCK; + buffer = false; + putInPause = false; + needRemoveTheFile = false; + blockSize = ULTRACOPIER_PLUGIN_DEFAULT_BLOCK_SIZE*1024; + start(); +} + +WriteThread::~WriteThread() +{ + stopIt=true; + needRemoveTheFile=true; + pauseMutex.release(); + writeFull.release(); + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + waitNewClockForSpeed.release(); + waitNewClockForSpeed2.release(); + #endif + writeFull.release(); + pauseMutex.release(); + // useless because stopIt will close all thread, but if thread not runing run it + //endIsDetected(); + emit internalStartClose(); + isOpen.acquire(); + if(!file.fileName().isEmpty()) + resumeNotStarted(); + //disconnect(this);//-> do into ~TransferThread() + quit(); + wait(); +} + +void WriteThread::run() +{ + connect(this,&WriteThread::internalStartOpen, this,&WriteThread::internalOpen, Qt::QueuedConnection); + connect(this,&WriteThread::internalStartReopen, this,&WriteThread::internalReopen, Qt::QueuedConnection); + connect(this,&WriteThread::internalStartWrite, this,&WriteThread::internalWrite, Qt::QueuedConnection); + connect(this,&WriteThread::internalStartClose, this,&WriteThread::internalCloseSlot, Qt::QueuedConnection); + connect(this,&WriteThread::internalStartEndOfFile, this,&WriteThread::internalEndOfFile, Qt::QueuedConnection); + connect(this,&WriteThread::internalStartFlushAndSeekToZero, this,&WriteThread::internalFlushAndSeekToZero, Qt::QueuedConnection); + connect(this,&WriteThread::internalStartChecksum, this,&WriteThread::checkSum, Qt::QueuedConnection); + exec(); +} + +bool WriteThread::internalOpen() +{ + //do a bug + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] internalOpen destination: ")+file.fileName()); + if(stopIt) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] close because stopIt is at true")); + emit closed(); + return false; + } + if(file.isOpen()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] already open! destination: ")+file.fileName()); + return false; + } + if(file.fileName().isEmpty()) + { + errorString_internal=tr("Path resolution error (Empty path)"); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to open: %1, error: %2").arg(file.fileName()).arg(errorString_internal)); + emit error(); + return false; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] before the mutex")); + //set to LISTBLOCKSIZE + if(sequential) + { + while(writeFull.available()<1) + writeFull.release(); + if(writeFull.available()>1) + writeFull.acquire(writeFull.available()-1); + } + else + { + while(writeFull.available()<numberOfBlock) + writeFull.release(); + if(writeFull.available()>numberOfBlock) + writeFull.acquire(writeFull.available()-numberOfBlock); + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] after the mutex")); + stopIt=false; + endDetected=false; + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=InodeOperation; + #endif + //mkpath check if exists and return true if already exists + QFileInfo destinationInfo(file); + QDir destinationFolder; + { + mkpathTransfer->acquire(); + if(!destinationFolder.exists(destinationInfo.absolutePath())) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Try create the path: %1") + .arg(destinationInfo.absolutePath())); + if(!destinationFolder.mkpath(destinationInfo.absolutePath())) + { + if(!destinationFolder.exists(destinationInfo.absolutePath())) + { + /// \todo do real folder error here + errorString_internal="mkpath error on destination"; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable create the folder: %1, error: %2") + .arg(destinationInfo.absolutePath()) + .arg(errorString_internal)); + emit error(); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=Idle; + #endif + mkpathTransfer->release(); + return false; + } + } + } + mkpathTransfer->release(); + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] after the mkpath")); + if(stopIt) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] close because stopIt is at true")); + emit closed(); + return false; + } + //try open it + QIODevice::OpenMode flags=QIODevice::ReadWrite; + if(!buffer) + flags|=QIODevice::Unbuffered; + { + QMutexLocker lock_mutex(&writeFileListMutex); + if(writeFileList.count(file.fileName(),this)==0) + { + writeFileList.insert(file.fileName(),this); + if(writeFileList.count(file.fileName())>1) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] in waiting because same file is found")); + return false; + } + } + } + bool fileWasExists=file.exists(); + if(file.open(flags)) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] after the open")); + { + QMutexLocker lock_mutex(&accessList); + if(!theBlockList.isEmpty()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("General file corruption detected")); + stopIt=true; + file.close(); + resumeNotStarted(); + file.setFileName(QStringLiteral("")); + return false; + } + } + pauseMutex.tryAcquire(pauseMutex.available()); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] after the pause mutex")); + if(stopIt) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] close because stopIt is at true")); + file.close(); + resumeNotStarted(); + file.setFileName(QStringLiteral("")); + emit closed(); + return false; + } + if(!file.seek(0)) + { + file.close(); + resumeNotStarted(); + file.setFileName(QStringLiteral("")); + errorString_internal=file.errorString(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to seek after open: %1, error: %2").arg(file.fileName()).arg(errorString_internal)); + emit error(); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=Idle; + #endif + return false; + } + if(stopIt) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] close because stopIt is at true")); + file.close(); + resumeNotStarted(); + file.setFileName(QStringLiteral("")); + emit closed(); + return false; + } + if(!file.resize(startSize)) + { + file.close(); + resumeNotStarted(); + file.setFileName(QStringLiteral("")); + errorString_internal=file.errorString(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to resize to %1 after open: %2, error: %3").arg(startSize).arg(file.fileName()).arg(errorString_internal)); + emit error(); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=Idle; + #endif + return false; + } + if(stopIt) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] close because stopIt is at true")); + file.close(); + resumeNotStarted(); + file.setFileName(QStringLiteral("")); + emit closed(); + return false; + } + isOpen.acquire(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] emit opened()")); + emit opened(); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=Idle; + #endif + needRemoveTheFile=false; + postOperationRequested=false; + return true; + } + else + { + if(!fileWasExists && file.exists()) + if(!file.remove()) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] file created but can't be removed")); + if(stopIt) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] close because stopIt is at true")); + resumeNotStarted(); + file.setFileName(QStringLiteral("")); + emit closed(); + return false; + } + errorString_internal=file.errorString(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to open: %1, error: %2").arg(file.fileName()).arg(errorString_internal)); + emit error(); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=Idle; + #endif + return false; + } +} + +void WriteThread::open(const QFileInfo &file,const quint64 &startSize,const bool &buffer,const int &numberOfBlock,const bool &sequential) +{ + if(!isRunning()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] the thread not running to open destination: ")+file.absoluteFilePath()+QStringLiteral(", numberOfBlock: ")+QString::number(numberOfBlock)); + errorString_internal=tr("Internal error, please report it!"); + emit error(); + return; + } + if(this->file.isOpen()) + { + if(file.absoluteFilePath()==this->file.fileName()) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] Try reopen already opened same file: ")+file.absoluteFilePath()); + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] previous file is already open: ")+file.absoluteFilePath()); + emit internalStartClose(); + isOpen.acquire(); + isOpen.release(); + } + if(numberOfBlock<1 || (numberOfBlock>ULTRACOPIER_PLUGIN_MAX_PARALLEL_NUMBER_OF_BLOCK && numberOfBlock>ULTRACOPIER_PLUGIN_MAX_SEQUENTIAL_NUMBER_OF_BLOCK)) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] numberOfBlock wrong, set to default")); + this->numberOfBlock=ULTRACOPIER_PLUGIN_DEFAULT_PARALLEL_NUMBER_OF_BLOCK; + } + else + this->numberOfBlock=numberOfBlock; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("open destination: %1, sequential: %2").arg(file.absoluteFilePath()).arg(sequential)); + stopIt=false; + fakeMode=false; + lastGoodPosition=0; + this->file.setFileName(file.absoluteFilePath()); + this->startSize=startSize; + this->buffer=buffer; + this->sequential=sequential; + endDetected=false; + writeFullBlocked=false; + emit internalStartOpen(); + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + numberOfBlockCopied=0; + #endif +} + +void WriteThread::endIsDetected() +{ + if(endDetected) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] double event dropped")); + return; + } + endDetected=true; + pauseMutex.release(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start")); + emit internalStartEndOfFile(); +} + +QString WriteThread::errorString() const +{ + return errorString_internal; +} + +void WriteThread::stop() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stop()")); + needRemoveTheFile=true; + stopIt=true; + if(isOpen.available()>0) + return; + writeFull.release(); + pauseMutex.release(); + pauseMutex.release(); + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + waitNewClockForSpeed.release(); + waitNewClockForSpeed2.release(); + #endif + // useless because stopIt will close all thread, but if thread not runing run it + endIsDetected(); + //for the stop for skip: void TransferThread::skip() + emit internalStartClose(); +} + +void WriteThread::flushBuffer() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start")); + writeFull.release(); + writeFull.acquire(); + pauseMutex.release(); + { + QMutexLocker lock_mutex(&accessList); + theBlockList.clear(); + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stop")); +} + +/// \brief buffer is empty +bool WriteThread::bufferIsEmpty() +{ + bool returnVal; + { + QMutexLocker lock_mutex(&accessList); + returnVal=theBlockList.isEmpty(); + } + return returnVal; +} + +void WriteThread::internalEndOfFile() +{ + if(!bufferIsEmpty()) + { + if(sequential) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start the write")); + emit internalStartWrite(); + } + else + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] buffer is not empty!")); + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] writeIsStopped")); + emit writeIsStopped(); + } +} + +#ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT +/*! \brief Set the max speed +\param tempMaxSpeed Set the max speed in KB/s, 0 for no limit */ +void WriteThread::setMultiForBigSpeed(const int &multiForBigSpeed) +{ + this->multiForBigSpeed=multiForBigSpeed; + waitNewClockForSpeed.release(); + waitNewClockForSpeed2.release(); +} + +/// \brief For give timer every X ms +void WriteThread::timeOfTheBlockCopyFinished() +{ + /* this is the old way to limit the speed, it product blocking + *if(waitNewClockForSpeed.available()<ULTRACOPIER_PLUGIN_NUMSEMSPEEDMANAGEMENT) + waitNewClockForSpeed.release();*/ + + //try this new way: + /* only if speed limited, else will accumulate waitNewClockForSpeed + * Disabled because: Stop call of this method when no speed limit + if(this->maxSpeed>0)*/ + if(waitNewClockForSpeed.available()<=1) + waitNewClockForSpeed.release(); + if(waitNewClockForSpeed2.available()<=1) + waitNewClockForSpeed2.release(); +} +#endif + +void WriteThread::resumeNotStarted() +{ + QMutexLocker lock_mutex(&writeFileListMutex); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + if(!writeFileList.contains(file.fileName())) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] file: \"")+file.fileName()+QStringLiteral("\" for similar inode is not located into the list of ")+writeFileList.size()+QStringLiteral(" items!")); + #endif + writeFileList.remove(file.fileName(),this); + if(writeFileList.contains(file.fileName())) + { + QList<WriteThread *> writeList=writeFileList.values(file.fileName()); + if(!writeList.isEmpty()) + writeList.first()->reemitStartOpen(); + return; + } +} + +void WriteThread::pause() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] try put read thread in pause")); + pauseMutex.tryAcquire(pauseMutex.available()); + putInPause=true; + return; +} + +void WriteThread::resume() +{ + if(putInPause) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start")); + putInPause=false; + stopIt=false; + } + else + return; + if(!file.isOpen()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] file is not open")); + return; + } + pauseMutex.release(); +} + +void WriteThread::reemitStartOpen() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start")); + emit internalStartOpen(); +} + +void WriteThread::postOperation() +{ + if(postOperationRequested) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,QStringLiteral("[")+QString::number(id)+QStringLiteral("] double event dropped")); + return; + } + postOperationRequested=true; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start")); + emit internalStartClose(); +} + +void WriteThread::internalCloseSlot() +{ + internalClose(); +} + +void WriteThread::internalClose(bool emitSignal) +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] close for file: ")+file.fileName()); + /// \note never send signal here, because it's called by the destructor + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=Close; + #endif + bool emit_closed=false; + if(!fakeMode) + { + if(file.isOpen()) + { + if(!needRemoveTheFile) + { + if(startSize!=lastGoodPosition) + if(!file.resize(lastGoodPosition)) + { + if(emitSignal) + { + errorString_internal=file.errorString(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to seek after open: %1, error: %2").arg(file.fileName()).arg(errorString_internal)); + emit error(); + } + else + needRemoveTheFile=true; + } + } + file.close(); + if(needRemoveTheFile || stopIt) + { + if(deletePartiallyTransferredFiles) + { + if(!file.remove()) + if(emitSignal) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] unable to remove the destination file")); + } + } + //here and not after, because the transferThread don't need try close if not open + if(emitSignal) + emit_closed=true; + } + } + else + { + //here and not after, because the transferThread don't need try close if not open + + if(emitSignal) + emit_closed=true; + } + needRemoveTheFile=false; + resumeNotStarted(); + //warning: file.setFileName(""); need be after resumeNotStarted() + file.setFileName(QStringLiteral("")); + if(emit_closed) + emit closed(); + + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=Idle; + #endif + + /// \note always the last of this function + if(!fakeMode) + isOpen.release(); +} + +void WriteThread::internalReopen() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start")); + QString tempFile=file.fileName(); + internalClose(false); + flushBuffer(); + stopIt=false; + lastGoodPosition=0; + file.setFileName(tempFile); + if(internalOpen()) + emit reopened(); +} + +void WriteThread::reopen() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] start")); + stopIt=true; + endDetected=false; + emit internalStartReopen(); +} + +#ifdef ULTRACOPIER_PLUGIN_DEBUG +//to set the id +void WriteThread::setId(int id) +{ + this->id=id; +} +#endif + +/// \brief do the fake open +void WriteThread::fakeOpen() +{ + fakeMode=true; + postOperationRequested=false; + emit opened(); +} + +/// \brief do the fake writeIsStarted +void WriteThread::fakeWriteIsStarted() +{ + emit writeIsStarted(); +} + +/// \brief do the fake writeIsStopped +void WriteThread::fakeWriteIsStopped() +{ + emit writeIsStopped(); +} + +/// do the checksum +void WriteThread::startCheckSum() +{ + emit internalStartChecksum(); +} + +/** \brief set block size +\param block the new block size in B +\return Return true if succes */ +bool WriteThread::setBlockSize(const int blockSize) +{ + //can be smaller than min block size to do correct speed limitation + if(blockSize>1 && blockSize<ULTRACOPIER_PLUGIN_MAX_BLOCK_SIZE*1024) + { + this->blockSize=blockSize; + return true; + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("block size out of range: ")+QString::number(blockSize)); + return false; + } +} + +/// \brief get the last good position +qint64 WriteThread::getLastGoodPosition() const +{ + return lastGoodPosition; +} + +void WriteThread::flushAndSeekToZero() +{ + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("flushAndSeekToZero: ")+QString::number(blockSize)); + stopIt=true; + emit internalStartFlushAndSeekToZero(); +} + + +void WriteThread::checkSum() +{ + //QByteArray blockArray; + QCryptographicHash hash(QCryptographicHash::Sha1); + endDetected=false; + lastGoodPosition=0; + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + numberOfBlockCopied=0; + #endif + if(!file.seek(0)) + { + errorString_internal=file.errorString(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to seek after open: %1, error: %2").arg(file.fileName()).arg(errorString_internal)); + emit error(); + return; + } + int sizeReaden=0; + do + { + if(putInPause) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("[")+QString::number(id)+QStringLiteral("] write put in pause")); + if(stopIt) + return; + pauseMutex.acquire(); + if(stopIt) + return; + } + //read one block + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=Read; + #endif + blockArray=file.read(blockSize); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=Idle; + #endif + + if(file.error()!=QFile::NoError) + { + errorString_internal=tr("Unable to read the source file: ")+file.errorString()+QStringLiteral(" (")+QString::number(file.error())+QStringLiteral(")"); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("file.error()!=QFile::NoError: %1, error: %2").arg(QString::number(file.error())).arg(errorString_internal)); + emit error(); + return; + } + sizeReaden=blockArray.size(); + if(sizeReaden>0) + { + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=Checksum; + #endif + hash.addData(blockArray); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=Idle; + #endif + + if(stopIt) + break; + + lastGoodPosition+=blockArray.size(); + } + } + while(sizeReaden>0 && !stopIt); + if(lastGoodPosition>(quint64)file.size()) + { + errorString_internal=tr("File truncated during read, possible data change"); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Source truncated during the read: %1 (%2)").arg(file.errorString()).arg(QString::number(file.error()))); + emit error(); + return; + } + if(stopIt) + { +/* if(putInPause) + emit isInPause();*/ + stopIt=false; + return; + } + emit checksumFinish(hash.result()); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stop the read")); +} + +void WriteThread::internalFlushAndSeekToZero() +{ + flushBuffer(); + if(!file.seek(0)) + { + errorString_internal=file.errorString(); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Unable to seek after open: %1, error: %2").arg(file.fileName()).arg(errorString_internal)); + emit error(); + return; + } + stopIt=false; + emit flushedAndSeekedToZero(); +} + +void WriteThread::setMkpathTransfer(QSemaphore *mkpathTransfer) +{ + this->mkpathTransfer=mkpathTransfer; +} + +void WriteThread::setDeletePartiallyTransferredFiles(const bool &deletePartiallyTransferredFiles) +{ + this->deletePartiallyTransferredFiles=deletePartiallyTransferredFiles; +} + +bool WriteThread::write(const QByteArray &data) +{ + if(stopIt) + return false; + bool atMax; + if(sequential) + { + if(stopIt) + return false; + { + QMutexLocker lock_mutex(&accessList); + theBlockList.append(data); + atMax=(theBlockList.size()>=numberOfBlock); + } + if(atMax) + emit internalStartWrite(); + } + else + { + if(stopIt) + return false; + { + QMutexLocker lock_mutex(&accessList); + theBlockList.append(data); + atMax=(theBlockList.size()>=numberOfBlock); + } + emit internalStartWrite(); + } + if(atMax) + { + writeFullBlocked=true; + writeFull.acquire(); + writeFullBlocked=false; + } + if(stopIt) + return false; + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + //wait for limitation speed if stop not query + if(multiForBigSpeed>0) + { + if(sequential) + { + numberOfBlockCopied++; + if(numberOfBlockCopied>=(multiForBigSpeed*2)) + { + numberOfBlockCopied=0; + waitNewClockForSpeed.acquire(); + } + } + else + { + numberOfBlockCopied2++; + if(numberOfBlockCopied2>=multiForBigSpeed) + { + numberOfBlockCopied2=0; + waitNewClockForSpeed2.acquire(); + } + } + } + #endif + if(stopIt) + return false; + return true; +} + +void WriteThread::internalWrite() +{ + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + if(sequential) + { + multiForBigSpeed=0; + QMutexLocker lock_mutex(&accessList); + if(theBlockList.size()<numberOfBlock && !endDetected) + return; + } + #endif + bool haveBlock; + do + { + if(putInPause) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("[")+QString::number(id)+QStringLiteral("] write put in pause")); + if(stopIt) + return; + pauseMutex.acquire(); + if(stopIt) + return; + } + if(stopIt) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] stopIt")); + return; + } + if(stopIt) + return; + //read one block + { + QMutexLocker lock_mutex(&accessList); + if(theBlockList.isEmpty()) + haveBlock=false; + else + { + blockArray=theBlockList.first(); + if(multiForBigSpeed>0) + { + if(blockArray.size()==blockSize) + { + theBlockList.removeFirst(); + //if remove one block + if(!sequential) + writeFull.release(); + } + else + { + blockArray.clear(); + while(blockArray.size()!=blockSize) + { + //if larger + if(theBlockList.first().size()>blockSize) + { + blockArray+=theBlockList.first().mid(0,blockSize); + theBlockList.first().remove(0,blockSize); + if(!sequential) + { + //do write in loop to finish the actual block + emit internalStartWrite(); + } + break; + } + //if smaller + else + { + blockArray+=theBlockList.first(); + theBlockList.removeFirst(); + //if remove one block + if(!sequential) + writeFull.release(); + if(theBlockList.isEmpty()) + break; + } + } + } + //haveBlock=!blockArray.isEmpty(); + } + else + { + theBlockList.removeFirst(); + //if remove one block + if(!sequential) + writeFull.release(); + } + haveBlock=true; + } + } + if(stopIt) + return; + if(!haveBlock) + { + if(sequential) + { + if(endDetected) + internalEndOfFile(); + else + writeFull.release(); + return; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] End detected of the file")); + return; + } + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + //wait for limitation speed if stop not query + if(multiForBigSpeed>0) + { + numberOfBlockCopied++; + if(sequential || (!sequential && writeFullBlocked)) + { + if(numberOfBlockCopied>=(multiForBigSpeed*2)) + { + numberOfBlockCopied=0; + waitNewClockForSpeed.acquire(); + if(stopIt) + break; + } + } + else + { + if(numberOfBlockCopied>=multiForBigSpeed) + { + numberOfBlockCopied=0; + waitNewClockForSpeed.acquire(); + if(stopIt) + break; + } + } + } + #endif + if(stopIt) + return; + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=Write; + #endif + bytesWriten=file.write(blockArray); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + stat=Idle; + #endif + //mutex for stream this data + if(lastGoodPosition==0) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("[")+QString::number(id)+QStringLiteral("] emit writeIsStarted()")); + emit writeIsStarted(); + } + if(stopIt) + return; + if(file.error()!=QFile::NoError) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Error in writing: %1 (%2)").arg(file.errorString()).arg(file.error())); + errorString_internal=QStringLiteral("Error in writing: %1 (%2)").arg(file.errorString()).arg(file.error()); + stopIt=true; + emit error(); + return; + } + if(bytesWriten!=blockArray.size()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("[")+QString::number(id)+QStringLiteral("] ")+QStringLiteral("Error in writing, bytesWriten: %1, blockArray.size(): %2").arg(bytesWriten).arg(blockArray.size())); + errorString_internal=QStringLiteral("Error in writing, bytesWriten: %1, blockArray.size(): %2").arg(bytesWriten).arg(blockArray.size()); + stopIt=true; + emit error(); + return; + } + lastGoodPosition+=bytesWriten; + } while(sequential); +} diff --git a/plugins/CopyEngine/Ultracopier/WriteThread.h b/plugins/CopyEngine/Ultracopier/WriteThread.h new file mode 100644 index 0000000..e540552 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/WriteThread.h @@ -0,0 +1,160 @@ +/** \file WriteThread.h +\brief Thread changed to open/close and write the destination file +\author alpha_one_x86 +\licence GPL3, see the file COPYING */ + +#ifndef WRITETHREAD_H +#define WRITETHREAD_H + +#include <QThread> +#include <QByteArray> +#include <QString> +#include <QMutex> +#include <QSemaphore> +#include <QCryptographicHash> + +#include "Environment.h" +#include "StructEnumDefinition_CopyEngine.h" +#include "AvancedQFile.h" + +/// \brief Thread changed to open/close and write the destination file +class WriteThread : public QThread +{ + Q_OBJECT +public: + explicit WriteThread(); + ~WriteThread(); + /// \brief to have semaphore to do mkpath one by one + void setMkpathTransfer(QSemaphore *mkpathTransfer); +protected: + void run(); +public: + /// \brief open the destination to open it + void open(const QFileInfo &file,const quint64 &startSize,const bool &buffer,const int &numberOfBlock,const bool &sequential); + /// \brief to return the error string + QString errorString() const; + /// \brief to stop all + void stop(); + /// \brief to write data + bool write(const QByteArray &data); + #ifdef ULTRACOPIER_PLUGIN_DEBUG + /// \brief to set the id + void setId(int id); + /// \brief get the write stat + enum WriteStat + { + Idle=0, + InodeOperation=1, + Write=2, + Close=3, + Read=5, + Checksum=6 + }; + WriteStat stat; + #endif + /// \brief do the fake open + void fakeOpen(); + /// \brief do the fake writeIsStarted + void fakeWriteIsStarted(); + /// \brief do the fake writeIsStopped + void fakeWriteIsStopped(); + /// do the checksum + void startCheckSum(); + /// \brief set block size in KB + bool setBlockSize(const int blockSize); + /// \brief get the last good position + qint64 getLastGoodPosition() const; + /// \brief buffer is empty + bool bufferIsEmpty(); + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + /// \brief set the current max speed in KB/s + void setMultiForBigSpeed(const int &multiForBigSpeed); + #endif + void pause(); + void resume(); + void reemitStartOpen(); +public slots: + /// \brief start the operation + void postOperation(); + /// \brief flush buffer + void flushBuffer(); + /// \brief set the end is detected + void endIsDetected(); + /// \brief reopen the file + void reopen(); + /// \brief flush and seek to zero + void flushAndSeekToZero(); + /// do the checksum + void checkSum(); + void setDeletePartiallyTransferredFiles(const bool &deletePartiallyTransferredFiles); + /// \brief executed at regular interval to do a speed throling + void timeOfTheBlockCopyFinished(); + + void resumeNotStarted(); +signals: + void error() const; + void opened() const; + void reopened() const; + void writeIsStarted() const; + void writeIsStopped() const; + void flushedAndSeekedToZero() const; + void closed() const; + void checksumFinish(const QByteArray&) const; + //internal signals + void internalStartOpen() const; + void internalStartChecksum() const; + void internalStartReopen() const; + void internalStartWrite() const; + void internalStartClose() const; + void internalStartEndOfFile() const; + void internalStartFlushAndSeekToZero() const; + /// \brief To debug source + void debugInformation(const Ultracopier::DebugLevel &level,const QString &fonction,const QString &text,const QString &file,const int &ligne) const; +private: + QString errorString_internal; + AvancedQFile file; + volatile bool stopIt; + volatile bool postOperationRequested; + volatile int blockSize;//only used in checksum + int numberOfBlock; + QMutex accessList; ///< For use the list + static QMultiHash<QString,WriteThread *> writeFileList; + static QMutex writeFileListMutex; + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + QSemaphore waitNewClockForSpeed,waitNewClockForSpeed2; + volatile int numberOfBlockCopied,numberOfBlockCopied2; ///< Multiple for count the number of block copied + volatile int multiplicatorForBigSpeed; ///< Multiple for count the number of block needed + volatile int MultiForBigSpeed; + #endif + QSemaphore writeFull; + volatile bool writeFullBlocked; + QSemaphore isOpen; + QSemaphore pauseMutex; + volatile bool putInPause; + QList<QByteArray> theBlockList; ///< Store the block list + quint64 lastGoodPosition; + QByteArray blockArray; ///< temp data for block writing, the data + qint64 bytesWriten; ///< temp data for block writing, the bytes writen + int id; + volatile bool endDetected; + quint64 startSize; + QSemaphore *mkpathTransfer; + bool fakeMode; + bool buffer; + bool needRemoveTheFile; + volatile bool sequential; + bool deletePartiallyTransferredFiles; + #ifdef ULTRACOPIER_PLUGIN_SPEED_SUPPORT + volatile int multiForBigSpeed; ///< Multiple for count the number of block needed + #endif +private slots: + bool internalOpen(); + void internalWrite(); + void internalCloseSlot(); + void internalClose(bool emitSignal=true); + void internalReopen(); + void internalEndOfFile(); + void internalFlushAndSeekToZero(); +}; + +#endif // WRITETHREAD_H diff --git a/plugins/CopyEngine/Ultracopier/copyEngineOptions.ui b/plugins/CopyEngine/Ultracopier/copyEngineOptions.ui new file mode 100644 index 0000000..4870480 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/copyEngineOptions.ui @@ -0,0 +1,762 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>copyEngineOptions</class> + <widget class="QWidget" name="copyEngineOptions"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>801</width> + <height>504</height> + </rect> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>0</number> + </property> + <property name="margin"> + <number>0</number> + </property> + <item> + <widget class="QToolBox" name="toolBox"> + <property name="currentIndex"> + <number>0</number> + </property> + <widget class="QWidget" name="page_trasnfer"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>791</width> + <height>364</height> + </rect> + </property> + <attribute name="label"> + <string>Transfer</string> + </attribute> + <layout class="QGridLayout" name="gridLayout_5"> + <item row="3" column="2"> + <widget class="QCheckBox" name="moveTheWholeFolder"/> + </item> + <item row="3" column="0"> + <widget class="QLabel" name="label_18"> + <property name="text"> + <string>Move the whole folder</string> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Transfer the file rights</string> + </property> + </widget> + </item> + <item row="0" column="2"> + <widget class="QCheckBox" name="doRightTransfer"/> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>Keep the file date</string> + </property> + </widget> + </item> + <item row="2" column="2"> + <widget class="QCheckBox" name="autoStart"/> + </item> + <item row="1" column="2"> + <widget class="QCheckBox" name="keepDate"/> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="label_5"> + <property name="text"> + <string>Autostart the transfer</string> + </property> + </widget> + </item> + <item row="4" column="2"> + <widget class="QCheckBox" name="followTheStrictOrder"> + <property name="toolTip"> + <string>Less performance if checked</string> + </property> + </widget> + </item> + <item row="6" column="1"> + <spacer name="verticalSpacer_6"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>278</height> + </size> + </property> + </spacer> + </item> + <item row="4" column="0"> + <widget class="QLabel" name="label_19"> + <property name="toolTip"> + <string>Less performance if checked</string> + </property> + <property name="text"> + <string>Follow the strict order</string> + </property> + </widget> + </item> + <item row="5" column="0"> + <widget class="QLabel" name="label_rsync"> + <property name="text"> + <string notr="true">Rsync</string> + </property> + </widget> + </item> + <item row="5" column="2"> + <widget class="QCheckBox" name="rsync"/> + </item> + </layout> + </widget> + <widget class="QWidget" name="page_error_collision"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>502</width> + <height>218</height> + </rect> + </property> + <attribute name="label"> + <string>Error and collision</string> + </attribute> + <layout class="QGridLayout" name="gridLayout_4"> + <item row="2" column="0"> + <widget class="QLabel" name="label_6"> + <property name="text"> + <string>When folder error</string> + </property> + </widget> + </item> + <item row="4" column="2"> + <widget class="QCheckBox" name="checkBoxDestinationFolderExists"/> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="label_12"> + <property name="text"> + <string>When file error</string> + </property> + </widget> + </item> + <item row="0" column="2"> + <widget class="QComboBox" name="comboBoxFileError"> + <item> + <property name="text"> + <string notr="true">Ask</string> + </property> + </item> + <item> + <property name="text"> + <string notr="true">Skip</string> + </property> + </item> + <item> + <property name="text"> + <string notr="true">Put at the end</string> + </property> + </item> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_13"> + <property name="text"> + <string>When file collision</string> + </property> + </widget> + </item> + <item row="1" column="2"> + <widget class="QComboBox" name="comboBoxFileCollision"> + <item> + <property name="text"> + <string notr="true">Ask</string> + </property> + </item> + <item> + <property name="text"> + <string notr="true">Skip</string> + </property> + </item> + <item> + <property name="text"> + <string notr="true">Overwrite</string> + </property> + </item> + <item> + <property name="text"> + <string notr="true">Overwrite if different</string> + </property> + </item> + <item> + <property name="text"> + <string notr="true">Overwrite if newer</string> + </property> + </item> + <item> + <property name="text"> + <string notr="true">Overwrite if older</string> + </property> + </item> + <item> + <property name="text"> + <string notr="true">Rename</string> + </property> + </item> + </widget> + </item> + <item row="2" column="2"> + <widget class="QComboBox" name="comboBoxFolderError"> + <item> + <property name="text"> + <string notr="true">Ask</string> + </property> + </item> + <item> + <property name="text"> + <string notr="true">Skip</string> + </property> + </item> + </widget> + </item> + <item row="3" column="0"> + <widget class="QLabel" name="label_7"> + <property name="text"> + <string>When folder collision</string> + </property> + </widget> + </item> + <item row="3" column="2"> + <widget class="QComboBox" name="comboBoxFolderCollision"> + <item> + <property name="text"> + <string notr="true">Ask</string> + </property> + </item> + <item> + <property name="text"> + <string notr="true">Merge</string> + </property> + </item> + <item> + <property name="text"> + <string notr="true">Skip</string> + </property> + </item> + <item> + <property name="text"> + <string notr="true">Rename</string> + </property> + </item> + </widget> + </item> + <item row="4" column="0"> + <widget class="QLabel" name="label_8"> + <property name="text"> + <string>Check if destination folder exists</string> + </property> + </widget> + </item> + <item row="7" column="1"> + <widget class="QPushButton" name="renamingRules"> + <property name="text"> + <string>Renaming rules</string> + </property> + </widget> + </item> + <item row="8" column="1"> + <spacer name="verticalSpacer_5"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>193</height> + </size> + </property> + </spacer> + </item> + <item row="5" column="0"> + <widget class="QLabel" name="label_20"> + <property name="text"> + <string>Delete partially transferred files</string> + </property> + </widget> + </item> + <item row="5" column="2"> + <widget class="QCheckBox" name="deletePartiallyTransferredFiles"/> + </item> + <item row="6" column="2"> + <widget class="QCheckBox" name="renameTheOriginalDestination"/> + </item> + <item row="6" column="0"> + <widget class="QLabel" name="label_22"> + <property name="text"> + <string>Rename the original destination</string> + </property> + </widget> + </item> + </layout> + <zorder>label_12</zorder> + <zorder>label_13</zorder> + <zorder>label_6</zorder> + <zorder>label_7</zorder> + <zorder>label_8</zorder> + <zorder>comboBoxFileError</zorder> + <zorder>comboBoxFileCollision</zorder> + <zorder>comboBoxFolderError</zorder> + <zorder>comboBoxFolderCollision</zorder> + <zorder>checkBoxDestinationFolderExists</zorder> + <zorder>renamingRules</zorder> + <zorder>label_20</zorder> + <zorder>deletePartiallyTransferredFiles</zorder> + <zorder>renameTheOriginalDestination</zorder> + <zorder>label_22</zorder> + </widget> + <widget class="QWidget" name="page_control"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>172</width> + <height>119</height> + </rect> + </property> + <attribute name="label"> + <string>Control</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <widget class="QGroupBox" name="groupBox"> + <property name="title"> + <string>Checksum</string> + </property> + <layout class="QGridLayout" name="gridLayout_2"> + <item row="1" column="1"> + <widget class="QCheckBox" name="checksumOnlyOnError"/> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_9"> + <property name="text"> + <string>Only after error</string> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="label_10"> + <property name="text"> + <string>Ignore if impossible</string> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QCheckBox" name="checksumIgnoreIfImpossible"/> + </item> + <item row="0" column="1"> + <widget class="QCheckBox" name="doChecksum"> + <property name="checked"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="label_11"> + <property name="text"> + <string>Verify checksums</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <spacer name="verticalSpacer_4"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>242</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <widget class="QWidget" name="page_performance"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>791</width> + <height>364</height> + </rect> + </property> + <attribute name="label"> + <string>Performance</string> + </attribute> + <layout class="QGridLayout" name="gridLayout"> + <item row="5" column="0"> + <widget class="QLabel" name="label_16"> + <property name="text"> + <string>Parallel buffer</string> + </property> + </widget> + </item> + <item row="4" column="1"> + <widget class="QSpinBox" name="sequentialBuffer"> + <property name="suffix"> + <string>KB</string> + </property> + <property name="minimum"> + <number>1</number> + </property> + <property name="maximum"> + <number>999999999</number> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QSpinBox" name="blockSize"> + <property name="suffix"> + <string>KB</string> + </property> + <property name="minimum"> + <number>1</number> + </property> + <property name="maximum"> + <number>65536</number> + </property> + </widget> + </item> + <item row="5" column="1"> + <widget class="QSpinBox" name="parallelBuffer"> + <property name="suffix"> + <string>KB</string> + </property> + <property name="minimum"> + <number>1</number> + </property> + <property name="maximum"> + <number>999999999</number> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QCheckBox" name="osBuffer"/> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="label_4"> + <property name="text"> + <string>Block size</string> + </property> + </widget> + </item> + <item row="4" column="0"> + <widget class="QLabel" name="label_15"> + <property name="text"> + <string>Sequential buffer</string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_3"> + <property name="text"> + <string>Enable OS buffer</string> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QSpinBox" name="osBufferLimit"> + <property name="suffix"> + <string>KB</string> + </property> + <property name="minimum"> + <number>1</number> + </property> + <property name="maximum"> + <number>2048</number> + </property> + <property name="value"> + <number>512</number> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QCheckBox" name="osBufferLimited"> + <property name="text"> + <string>OS buffer only if smaller than</string> + </property> + </widget> + </item> + <item row="3" column="0"> + <widget class="QLabel" name="label_14"> + <property name="text"> + <string>Transfer algorithm</string> + </property> + </widget> + </item> + <item row="3" column="1"> + <widget class="QComboBox" name="transferAlgorithm"> + <item> + <property name="text"> + <string notr="true">Automatic</string> + </property> + </item> + <item> + <property name="text"> + <string notr="true">Sequential</string> + </property> + </item> + <item> + <property name="text"> + <string notr="true">Parallel</string> + </property> + </item> + </widget> + </item> + <item row="9" column="1"> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>197</height> + </size> + </property> + </spacer> + </item> + <item row="6" column="0"> + <widget class="QLabel" name="label_17"> + <property name="text"> + <string>Parallelize if smaller than</string> + </property> + </widget> + </item> + <item row="6" column="1"> + <widget class="QSpinBox" name="parallelizeIfSmallerThan"> + <property name="suffix"> + <string>KB</string> + </property> + <property name="maximum"> + <number>1024</number> + </property> + </widget> + </item> + <item row="7" column="1"> + <widget class="QSpinBox" name="inodeThreads"> + <property name="minimum"> + <number>1</number> + </property> + <property name="maximum"> + <number>32</number> + </property> + <property name="value"> + <number>16</number> + </property> + </widget> + </item> + <item row="7" column="0"> + <widget class="QLabel" name="label_21"> + <property name="text"> + <string>Inode threads</string> + </property> + </widget> + </item> + <item row="8" column="1"> + <widget class="QCheckBox" name="copyListOrder"> + <property name="toolTip"> + <string>More cpu, but better organisation on the disk</string> + </property> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="8" column="0"> + <widget class="QLabel" name="label_25"> + <property name="toolTip"> + <string>More cpu, but better organisation on the disk</string> + </property> + <property name="text"> + <string>Order the list</string> + </property> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name="page_misc"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>449</width> + <height>89</height> + </rect> + </property> + <attribute name="label"> + <string>Misc</string> + </attribute> + <layout class="QGridLayout" name="gridLayout_3"> + <item row="0" column="0"> + <widget class="QLabel" name="label_23"> + <property name="text"> + <string>Check the disk space</string> + </property> + </widget> + </item> + <item row="0" column="2"> + <widget class="QCheckBox" name="checkDiskSpace"/> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_24"> + <property name="text"> + <string>Use this folder when destination is not set</string> + </property> + </widget> + </item> + <item row="1" column="2"> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QLineEdit" name="defaultDestinationFolder"/> + </item> + <item> + <widget class="QPushButton" name="defaultDestinationFolderBrowse"> + <property name="text"> + <string>Browse</string> + </property> + </widget> + </item> + </layout> + </item> + <item row="2" column="0"> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>353</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="2" column="1"> + <widget class="QPushButton" name="filters"> + <property name="text"> + <string>Filters</string> + </property> + </widget> + </item> + <item row="2" column="2"> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>352</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="3" column="1"> + <spacer name="verticalSpacer_2"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>159</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>doChecksum</sender> + <signal>clicked(bool)</signal> + <receiver>label_9</receiver> + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> + <x>583</x> + <y>136</y> + </hint> + <hint type="destinationlabel"> + <x>109</x> + <y>161</y> + </hint> + </hints> + </connection> + <connection> + <sender>doChecksum</sender> + <signal>clicked(bool)</signal> + <receiver>checksumOnlyOnError</receiver> + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> + <x>594</x> + <y>136</y> + </hint> + <hint type="destinationlabel"> + <x>586</x> + <y>161</y> + </hint> + </hints> + </connection> + <connection> + <sender>doChecksum</sender> + <signal>clicked(bool)</signal> + <receiver>label_10</receiver> + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> + <x>641</x> + <y>136</y> + </hint> + <hint type="destinationlabel"> + <x>132</x> + <y>186</y> + </hint> + </hints> + </connection> + <connection> + <sender>doChecksum</sender> + <signal>clicked(bool)</signal> + <receiver>checksumIgnoreIfImpossible</receiver> + <slot>setEnabled(bool)</slot> + <hints> + <hint type="sourcelabel"> + <x>665</x> + <y>136</y> + </hint> + <hint type="destinationlabel"> + <x>609</x> + <y>186</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/plugins/CopyEngine/Ultracopier-0.3/resources.qrc b/plugins/CopyEngine/Ultracopier/copyEngineResources.qrc index c6ca4ef..0228c74 100644 --- a/plugins/CopyEngine/Ultracopier-0.3/resources.qrc +++ b/plugins/CopyEngine/Ultracopier/copyEngineResources.qrc @@ -1,5 +1,5 @@ <RCC> - <qresource prefix="/"> + <qresource prefix="/CopyEngine/Ultracopier"> <file>resources/add.png</file> <file>resources/edit.png</file> <file>resources/remove.png</file> diff --git a/plugins/CopyEngine/Ultracopier-0.3/debugDialog.ui b/plugins/CopyEngine/Ultracopier/debugDialog.ui index 0df03be..80fde7e 100644 --- a/plugins/CopyEngine/Ultracopier-0.3/debugDialog.ui +++ b/plugins/CopyEngine/Ultracopier/debugDialog.ui @@ -4,8 +4,6 @@ <widget class="QWidget" name="debugDialog"> <property name="geometry"> <rect> - <x>0</x> - <y>0</y> <width>665</width> <height>392</height> </rect> diff --git a/plugins/CopyEngine/Ultracopier-0.3/documentation.dox b/plugins/CopyEngine/Ultracopier/documentation.dox index c91674b..727969f 100755..100644 --- a/plugins/CopyEngine/Ultracopier-0.3/documentation.dox +++ b/plugins/CopyEngine/Ultracopier/documentation.dox @@ -6,18 +6,17 @@ */ /*! - \mainpage Copy engine 0.3 + \mainpage Copy engine \section mainpage_overview Overview - The default copy engine for Ultracopier 0.3. Support file/folder, copy/move, ...\n - More informations on <a href="http://ultracopier-wiki.first-world.info/">the wiki of ultracopier</a>. Is part of Ultracopier 0.3 project. + The default copy engine for Ultracopier. Support file/folder, copy/move, ...\n + More informations on <a href="http://ultracopier-wiki.first-world.info/">the wiki of ultracopier</a>. \section mainpage_platforms Platforms - This plugin might be usable in all environments where you find Qt 4, but Gcc is requiered for some part.\n - This plugin requires Qt 4.5.x or newer. Tested on Qt 4.7. Due to optimization Qt 4.8 usage will be better.\n - To be compatible with the official Ultracopier plugins, you need compil it with Gcc, Qt4.8, and same env as Ultracopier have been compiled, see the documentation. + This plugin might be usable in all environments where you find Qt 5, but Gcc is requiered for some part. You need qtsystem modules for QtSystemInfo\n + This plugin requires Qt 5.0 or newer. Tested on Qt 5.0.\n \section mainpage_downloads Downloads @@ -38,4 +37,3 @@ The code source is under GPL3. The image is extacted from Oxygen icon pack of KDE4. */ - diff --git a/plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.ui b/plugins/CopyEngine/Ultracopier/fileErrorDialog.ui index c5027e7..b603924 100644 --- a/plugins/CopyEngine/Ultracopier-0.3/fileErrorDialog.ui +++ b/plugins/CopyEngine/Ultracopier/fileErrorDialog.ui @@ -6,12 +6,12 @@ <rect> <x>0</x> <y>0</y> - <width>478</width> - <height>154</height> + <width>723</width> + <height>185</height> </rect> </property> <property name="windowTitle"> - <string>Error on file</string> + <string>Error with file</string> </property> <layout class="QVBoxLayout" name="verticalLayout_2"> <item> @@ -47,6 +47,9 @@ </item> <item> <layout class="QFormLayout" name="formLayout_2"> + <property name="fieldGrowthPolicy"> + <enum>QFormLayout::ExpandingFieldsGrow</enum> + </property> <item row="0" column="0"> <widget class="QLabel" name="label_size"> <property name="enabled"> @@ -98,6 +101,40 @@ </property> </widget> </item> + <item row="4" column="0"> + <widget class="QLabel" name="label_file_destination"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="text"> + <string>Destination</string> + </property> + </widget> + </item> + <item row="4" column="1"> + <widget class="QLabel" name="label_content_file_destination"> + <property name="text"> + <string notr="true">../toto.txt</string> + </property> + </widget> + </item> + <item row="3" column="0"> + <widget class="QLabel" name="label_folder"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="text"> + <string>Folder</string> + </property> + </widget> + </item> + <item row="3" column="1"> + <widget class="QLabel" name="label_content_folder"> + <property name="text"> + <string notr="true">/folder/</string> + </property> + </widget> + </item> </layout> </item> <item> @@ -133,7 +170,7 @@ <item> <widget class="QCheckBox" name="checkBoxAlways"> <property name="text"> - <string>&Always do this action</string> + <string>&Always perform this action</string> </property> </widget> </item> @@ -151,6 +188,13 @@ </spacer> </item> <item> + <widget class="QPushButton" name="Rights"> + <property name="text"> + <string>Try in with elevated privileges</string> + </property> + </widget> + </item> + <item> <widget class="QPushButton" name="PutToBottom"> <property name="text"> <string>Put to bottom</string> diff --git a/plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.ui b/plugins/CopyEngine/Ultracopier/fileExistsDialog.ui index a37945a..0c38a57 100644 --- a/plugins/CopyEngine/Ultracopier-0.3/fileExistsDialog.ui +++ b/plugins/CopyEngine/Ultracopier/fileExistsDialog.ui @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>469</width> - <height>150</height> + <height>162</height> </rect> </property> <property name="windowTitle"> @@ -124,6 +124,23 @@ </property> </widget> </item> + <item row="3" column="0"> + <widget class="QLabel" name="label_3"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="text"> + <string>Folder</string> + </property> + </widget> + </item> + <item row="3" column="1"> + <widget class="QLabel" name="label_content_source_folder"> + <property name="text"> + <string notr="true">/source/</string> + </property> + </widget> + </item> </layout> </item> <item> @@ -195,6 +212,23 @@ </property> </widget> </item> + <item row="3" column="0"> + <widget class="QLabel" name="label_4"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="text"> + <string>Folder</string> + </property> + </widget> + </item> + <item row="3" column="1"> + <widget class="QLabel" name="label_content_destination_folder"> + <property name="text"> + <string notr="true">/destination/</string> + </property> + </widget> + </item> </layout> </item> <item> @@ -251,7 +285,7 @@ <item> <widget class="QCheckBox" name="checkBoxAlways"> <property name="text"> - <string>&Always do this action</string> + <string>&Always perform this action</string> </property> </widget> </item> @@ -309,7 +343,18 @@ </action> <action name="actionOverwrite_if_not_same_modification_date"> <property name="text"> - <string>Overwrite if not same modification date</string> + <string>Overwrite if modification date differs</string> + </property> + <property name="toolTip"> + <string>Overwrite if modification date differs</string> + </property> + </action> + <action name="actionOverwrite_if_older"> + <property name="text"> + <string>Overwrite if older</string> + </property> + <property name="toolTip"> + <string>Overwrite if older</string> </property> </action> </widget> diff --git a/plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.ui b/plugins/CopyEngine/Ultracopier/fileIsSameDialog.ui index 673ba26..c019a63 100644 --- a/plugins/CopyEngine/Ultracopier-0.3/fileIsSameDialog.ui +++ b/plugins/CopyEngine/Ultracopier/fileIsSameDialog.ui @@ -6,22 +6,15 @@ <rect> <x>0</x> <y>0</y> - <width>378</width> - <height>148</height> + <width>411</width> + <height>142</height> </rect> </property> <property name="windowTitle"> - <string>This files are the same file</string> + <string>The source and destination are same</string> </property> <layout class="QVBoxLayout" name="verticalLayout"> <item> - <widget class="QLabel" name="label"> - <property name="text"> - <string>The source and destination is same</string> - </property> - </widget> - </item> - <item> <layout class="QHBoxLayout" name="horizontalLayout"> <item> <spacer name="horizontalSpacer_3"> @@ -53,15 +46,8 @@ <property name="text"> <string notr="true">0 KiB</string> </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_modified"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="text"> - <string>Modified</string> + <property name="textFormat"> + <enum>Qt::PlainText</enum> </property> </widget> </item> @@ -70,6 +56,9 @@ <property name="text"> <string notr="true">Today</string> </property> + <property name="textFormat"> + <enum>Qt::PlainText</enum> + </property> </widget> </item> <item row="2" column="0"> @@ -87,6 +76,39 @@ <property name="text"> <string notr="true">source.txt</string> </property> + <property name="textFormat"> + <enum>Qt::PlainText</enum> + </property> + </widget> + </item> + <item row="3" column="0"> + <widget class="QLabel" name="label_2"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="text"> + <string>Folder</string> + </property> + </widget> + </item> + <item row="3" column="1"> + <widget class="QLabel" name="label_content_folder"> + <property name="text"> + <string notr="true">/toto/</string> + </property> + <property name="textFormat"> + <enum>Qt::PlainText</enum> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_modified"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="text"> + <string>Modified</string> + </property> </widget> </item> </layout> @@ -145,7 +167,7 @@ <item> <widget class="QCheckBox" name="checkBoxAlways"> <property name="text"> - <string>&Always do this action</string> + <string>&Always perform this action</string> </property> </widget> </item> diff --git a/plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.ui b/plugins/CopyEngine/Ultracopier/folderExistsDialog.ui index c4c4d5e..440b5ca 100644 --- a/plugins/CopyEngine/Ultracopier-0.3/folderExistsDialog.ui +++ b/plugins/CopyEngine/Ultracopier/folderExistsDialog.ui @@ -6,12 +6,12 @@ <rect> <x>0</x> <y>0</y> - <width>443</width> - <height>146</height> + <width>476</width> + <height>140</height> </rect> </property> <property name="windowTitle"> - <string>This folders are the same folder</string> + <string>The source and destination is identical</string> </property> <layout class="QVBoxLayout" name="verticalLayout"> <item> @@ -57,13 +57,6 @@ </layout> </item> <item> - <widget class="QLabel" name="label_message"> - <property name="text"> - <string>The source and destination is same</string> - </property> - </widget> - </item> - <item> <layout class="QHBoxLayout" name="horizontalLayout_4"> <item> <spacer name="horizontalSpacer"> @@ -114,6 +107,23 @@ </property> </widget> </item> + <item row="2" column="0"> + <widget class="QLabel" name="label_source_folder"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="text"> + <string>Folder</string> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QLabel" name="label_content_source_folder"> + <property name="text"> + <string notr="true">/source/</string> + </property> + </widget> + </item> </layout> </item> <item> @@ -165,6 +175,23 @@ </property> </widget> </item> + <item row="2" column="0"> + <widget class="QLabel" name="label_destination_folder"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="text"> + <string>Folder</string> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QLabel" name="label_content_destination_folder"> + <property name="text"> + <string notr="true">/destination/</string> + </property> + </widget> + </item> </layout> </item> <item> @@ -208,7 +235,7 @@ <item> <widget class="QCheckBox" name="checkBoxAlways"> <property name="text"> - <string>&Always do this action</string> + <string>&Always perform this action</string> </property> </widget> </item> diff --git a/plugins/CopyEngine/Ultracopier/informations-rsync.xml b/plugins/CopyEngine/Ultracopier/informations-rsync.xml new file mode 100644 index 0000000..43befc2 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/informations-rsync.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<package> + <title xml:lang="en"><![CDATA[Rsync copy engine]]></title><!-- english is required --> + <title xml:lang="fr"><![CDATA[Moteur de copie rsync]]></title> + <!-- What kind of plugin this is --> + <category>CopyEngine</category> + <!-- Who wrote this plugin --> + <author><![CDATA[BRULE Herman, alpha_one_x86 (alpha_one_x86@first-world.info)]]></author> + <!-- URL of page or site for this plugin (may provide additional information, bug reports, feature requests). --> + <website xml:lang="en"><![CDATA[http://ultracopier.first-world.info/]]></website><!-- not required --> + <website xml:lang="fr"><![CDATA[http://ultracopier-fr.first-world.info/]]></website><!-- not required --> + <!-- the date-time format should be in timestamps format --> + <pubDate>1287496800</pubDate> + <!-- the architecture code of this plugin, found PlatformMacro.h into ultracopier source --> + <architecture>linux-x86_64-pc</architecture> + <!-- Detailed description --> + <description xml:lang="en"><![CDATA[Rsync copy engine, variant of the official copy engine to provide simple way to do backups]]></description> + <description xml:lang="fr"><![CDATA[Moteur de copie rsync, variante du moteur de copie officiel pour fournir une maniƩre simple de faire des backups]]></description> + <!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number --> + <version>1.0.0.0</version> + <!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. --> + <name>Rsync</name> + <!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. --> + <dependencies><![CDATA[ + ]]></dependencies> +</package>
\ No newline at end of file diff --git a/plugins/CopyEngine/Ultracopier-0.3/informations.xml b/plugins/CopyEngine/Ultracopier/informations.xml index 8593149..1a1d769 100644 --- a/plugins/CopyEngine/Ultracopier-0.3/informations.xml +++ b/plugins/CopyEngine/Ultracopier/informations.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <package> - <title xml:lang="en"><![CDATA[Copy engine of Ultracopier 0.3]]></title><!-- english is required --> - <title xml:lang="fr"><![CDATA[Moteur de copie d'ultracopier 0.3]]></title> + <title xml:lang="en"><![CDATA[Copy engine of Ultracopier]]></title><!-- english is required --> + <title xml:lang="fr"><![CDATA[Moteur de copie d'ultracopier]]></title> <!-- What kind of plugin this is --> <category>CopyEngine</category> <!-- Who wrote this plugin --> @@ -14,14 +14,13 @@ <!-- the architecture code of this plugin, found PlatformMacro.h into ultracopier source --> <architecture>windows-x86</architecture> <!-- Detailed description --> - <description xml:lang="en"><![CDATA[Copy engine of Ultracopier 0.3, do in Qt for all platform, and copy by stream]]></description> - <description xml:lang="fr"><![CDATA[Moteur de copie d'ultracopier 0.3, fait en Qt pour toutes les plateformes, et copie par stream]]></description> + <description xml:lang="en"><![CDATA[Copy engine of Ultracopier, do in Qt for all platform, and copy by stream]]></description> + <description xml:lang="fr"><![CDATA[Moteur de copie d'ultracopier, fait en Qt pour toutes les plateformes, et copie par stream]]></description> <!-- Version of this release of this plugin, need be like that's: A.B.C.D, where A, B, C and D is number --> - <version>0.3.1.0</version> + <version>1.2.3.6</version> <!-- This internal name should never change, because it is used to detect when a particular plugin is updated. It must comprise only lower case ASCII characters (a-z), numerical digits (0-9), "-", "." or "_", and it must be be unique within the category. And have size lower than 64 char. --> - <name>Ultracopier-0.3</name> + <name>Ultracopier</name> <!-- Dependency checking. This is used to check when a plugin may not be compatible with an updated version of either Ultracopier or another plugin. This example only checks Ultracopier. --> <dependencies><![CDATA[ - >=ultracopier-0.3.1.0 ]]></dependencies> </package>
\ No newline at end of file diff --git a/plugins/CopyEngine/Ultracopier/plugin.json b/plugins/CopyEngine/Ultracopier/plugin.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/plugin.json @@ -0,0 +1 @@ +{}
\ No newline at end of file diff --git a/plugins/CopyEngine/Ultracopier/resources/add.png b/plugins/CopyEngine/Ultracopier/resources/add.png Binary files differnew file mode 100644 index 0000000..7932127 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/resources/add.png diff --git a/plugins/CopyEngine/Ultracopier/resources/edit.png b/plugins/CopyEngine/Ultracopier/resources/edit.png Binary files differnew file mode 100644 index 0000000..5464856 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/resources/edit.png diff --git a/plugins/CopyEngine/Ultracopier/resources/filter.png b/plugins/CopyEngine/Ultracopier/resources/filter.png Binary files differnew file mode 100644 index 0000000..9bb3164 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/resources/filter.png diff --git a/plugins/CopyEngine/Ultracopier/resources/remove.png b/plugins/CopyEngine/Ultracopier/resources/remove.png Binary files differnew file mode 100644 index 0000000..b711740 --- /dev/null +++ b/plugins/CopyEngine/Ultracopier/resources/remove.png |