summaryrefslogtreecommitdiff
path: root/plugins-alternative/CopyEngine/Rsync/factory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins-alternative/CopyEngine/Rsync/factory.cpp')
-rw-r--r--plugins-alternative/CopyEngine/Rsync/factory.cpp420
1 files changed, 420 insertions, 0 deletions
diff --git a/plugins-alternative/CopyEngine/Rsync/factory.cpp b/plugins-alternative/CopyEngine/Rsync/factory.cpp
new file mode 100644
index 0000000..7ed27d4
--- /dev/null
+++ b/plugins-alternative/CopyEngine/Rsync/factory.cpp
@@ -0,0 +1,420 @@
+/** \file factory.cpp
+\brief Define the factory to create new instance
+\author alpha_one_x86
+\version 0.3
+\date 2010 */
+
+#include <QtCore>
+#include <QFileDialog>
+
+#include "factory.h"
+
+Factory::Factory() :
+ ui(new Ui::options())
+{
+ tempWidget=new QWidget();
+ ui->setupUi(tempWidget);
+ errorFound=false;
+ optionsEngine=NULL;
+ filters=new Filters(tempWidget);
+ renamingRules=new RenamingRules(tempWidget);
+ #if defined (Q_OS_WIN32)
+ QFileInfoList temp=QDir::drives();
+ for (int i = 0; i < temp.size(); ++i) {
+ mountSysPoint<<temp.at(i).filePath();
+ }
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"mountSysPoint: "+mountSysPoint.join(";"));
+ #elif defined (Q_OS_LINUX)
+ connect(&mount,SIGNAL(error(QProcess::ProcessError)), this,SLOT(error(QProcess::ProcessError)));
+ connect(&mount,SIGNAL(finished(int,QProcess::ExitStatus)), this,SLOT(finished(int,QProcess::ExitStatus)));
+ connect(&mount,SIGNAL(readyReadStandardOutput()), this,SLOT(readyReadStandardOutput()));
+ connect(&mount,SIGNAL(readyReadStandardError()), this,SLOT(readyReadStandardError()));
+ mount.start("mount");
+ #endif
+ connect(ui->doRightTransfer, SIGNAL(toggled(bool)), this,SLOT(setDoRightTransfer(bool)));
+ connect(ui->keepDate, SIGNAL(toggled(bool)), this,SLOT(setKeepDate(bool)));
+ connect(ui->blockSize, SIGNAL(valueChanged(int)), this,SLOT(setBlockSize(int)));
+ connect(ui->autoStart, SIGNAL(toggled(bool)), this,SLOT(setAutoStart(bool)));
+ connect(ui->rsync, SIGNAL(toggled(bool)), this,SLOT(setRsync(bool)));
+ connect(ui->doChecksum, SIGNAL(toggled(bool)), this,SLOT(doChecksum_toggled(bool)));
+ connect(ui->checksumIgnoreIfImpossible, SIGNAL(toggled(bool)), this,SLOT(checksumIgnoreIfImpossible_toggled(bool)));
+ connect(ui->checksumOnlyOnError, SIGNAL(toggled(bool)), this,SLOT(checksumOnlyOnError_toggled(bool)));
+ connect(ui->osBuffer, SIGNAL(toggled(bool)), this,SLOT(osBuffer_toggled(bool)));
+ connect(ui->osBufferLimited, SIGNAL(toggled(bool)), this,SLOT(osBufferLimited_toggled(bool)));
+ connect(ui->osBufferLimit, SIGNAL(editingFinished()), this,SLOT(osBufferLimit_editingFinished()));
+
+ connect(filters,SIGNAL(sendNewFilters(QStringList,QStringList,QStringList,QStringList)),this,SLOT(sendNewFilters(QStringList,QStringList,QStringList,QStringList)));
+ connect(ui->filters,SIGNAL(clicked()),this,SLOT(showFilterDialog()));
+ connect(renamingRules,SIGNAL(sendNewRenamingRules(QString,QString)),this,SLOT(sendNewRenamingRules(QString,QString)));
+ connect(ui->renamingRules,SIGNAL(clicked()),this,SLOT(showRenamingRules()));
+
+ ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
+}
+
+Factory::~Factory()
+{
+ delete renamingRules;
+ delete filters;
+ delete ui;
+}
+
+PluginInterface_CopyEngine * Factory::getInstance()
+{
+ copyEngine *realObject=new copyEngine(facilityEngine);
+ #ifdef ULTRACOPIER_PLUGIN_DEBUG
+ connect(realObject,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)));
+ #endif
+ realObject->connectTheSignalsSlots();
+ realObject->setDrive(mountSysPoint);
+ PluginInterface_CopyEngine * newTransferEngine=realObject;
+ connect(this,SIGNAL(reloadLanguage()),newTransferEngine,SLOT(newLanguageLoaded()));
+ realObject->setRightTransfer( optionsEngine->getOptionValue("doRightTransfer").toBool());
+ realObject->setKeepDate( optionsEngine->getOptionValue("keepDate").toBool());
+ realObject->setBlockSize( optionsEngine->getOptionValue("blockSize").toInt());
+ realObject->setAutoStart( optionsEngine->getOptionValue("autoStart").toBool());
+ realObject->setRsync( optionsEngine->getOptionValue("rsync").toBool());
+ realObject->on_comboBoxFolderColision_currentIndexChanged(ui->comboBoxFolderColision->currentIndex());
+ realObject->on_comboBoxFolderError_currentIndexChanged(ui->comboBoxFolderError->currentIndex());
+ realObject->setCheckDestinationFolderExists( optionsEngine->getOptionValue("checkDestinationFolder").toBool());
+
+ realObject->set_doChecksum(optionsEngine->getOptionValue("doChecksum").toBool());
+ realObject->set_checksumIgnoreIfImpossible(optionsEngine->getOptionValue("checksumIgnoreIfImpossible").toBool());
+ realObject->set_checksumOnlyOnError(optionsEngine->getOptionValue("checksumOnlyOnError").toBool());
+ realObject->set_osBuffer(optionsEngine->getOptionValue("osBuffer").toBool());
+ realObject->set_osBufferLimited(optionsEngine->getOptionValue("osBufferLimited").toBool());
+ realObject->set_osBufferLimit(optionsEngine->getOptionValue("osBufferLimit").toUInt());
+ realObject->set_setFilters(optionsEngine->getOptionValue("includeStrings").toStringList(),
+ optionsEngine->getOptionValue("includeOptions").toStringList(),
+ optionsEngine->getOptionValue("excludeStrings").toStringList(),
+ optionsEngine->getOptionValue("excludeOptions").toStringList()
+ );
+ realObject->setRenamingRules(optionsEngine->getOptionValue("firstRenamingRule").toString(),optionsEngine->getOptionValue("otherRenamingRule").toString());
+ return newTransferEngine;
+}
+
+void Factory::setResources(OptionInterface * options,const QString &writePath,const QString &pluginPath,FacilityInterface * facilityInterface,const bool &portableVersion)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, writePath: "+writePath+", pluginPath:"+pluginPath);
+ this->facilityEngine=facilityInterface;
+ Q_UNUSED(portableVersion);
+ #ifndef ULTRACOPIER_PLUGIN_DEBUG
+ Q_UNUSED(writePath);
+ Q_UNUSED(pluginPath);
+ #endif
+ #if ! defined (Q_CC_GNU)
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"Unable to change date time of files, only gcc is supported");
+ #endif
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,COMPILERINFO);
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"MAX BUFFER BLOCK: "+QString::number(ULTRACOPIER_PLUGIN_MAXBUFFERBLOCK));
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"MIN TIMER INTERVAL: "+QString::number(ULTRACOPIER_PLUGIN_MINTIMERINTERVAL));
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"MAX TIMER INTERVAL: "+QString::number(ULTRACOPIER_PLUGIN_MAXTIMERINTERVAL));
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"NUM SEM SPEED MANAGEMENT: "+QString::number(ULTRACOPIER_PLUGIN_NUMSEMSPEEDMANAGEMENT));
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"MAX PARALLEL INODE OPT: "+QString::number(ULTRACOPIER_PLUGIN_MAXPARALLELINODEOPT));
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"MAX PARALLEL TRANFER: "+QString::number(ULTRACOPIER_PLUGIN_MAXPARALLELTRANFER));
+ #if defined (ULTRACOPIER_PLUGIN_CHECKLISTTYPE)
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"CHECK LIST TYPE set");
+ #else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"CHECK LIST TYPE not set");
+ #endif
+ if(options!=NULL)
+ {
+ optionsEngine=options;
+ //load the options
+ QList<QPair<QString, QVariant> > KeysList;
+ KeysList.append(qMakePair(QString("doRightTransfer"),QVariant(true)));
+ KeysList.append(qMakePair(QString("keepDate"),QVariant(true)));
+ KeysList.append(qMakePair(QString("blockSize"),QVariant(1024)));//1024KB as default
+ KeysList.append(qMakePair(QString("autoStart"),QVariant(true)));
+ KeysList.append(qMakePair(QString("rsync"),QVariant(true)));
+ KeysList.append(qMakePair(QString("folderError"),QVariant(0)));
+ KeysList.append(qMakePair(QString("folderColision"),QVariant(0)));
+ KeysList.append(qMakePair(QString("checkDestinationFolder"),QVariant(true)));
+ KeysList.append(qMakePair(QString("includeStrings"),QVariant(QStringList())));
+ KeysList.append(qMakePair(QString("includeOptions"),QVariant(QStringList())));
+ KeysList.append(qMakePair(QString("excludeStrings"),QVariant(QStringList())));
+ KeysList.append(qMakePair(QString("excludeOptions"),QVariant(QStringList())));
+ KeysList.append(qMakePair(QString("doChecksum"),QVariant(true)));
+ KeysList.append(qMakePair(QString("checksumIgnoreIfImpossible"),QVariant(true)));
+ KeysList.append(qMakePair(QString("checksumOnlyOnError"),QVariant(true)));
+ KeysList.append(qMakePair(QString("osBuffer"),QVariant(true)));
+ KeysList.append(qMakePair(QString("firstRenamingRule"),QVariant("")));
+ KeysList.append(qMakePair(QString("otherRenamingRule"),QVariant("")));
+ #ifdef Q_OS_WIN32
+ KeysList.append(qMakePair(QString("osBufferLimited"),QVariant(true)));
+ #else
+ KeysList.append(qMakePair(QString("osBufferLimited"),QVariant(false)));
+ #endif
+ KeysList.append(qMakePair(QString("osBufferLimit"),QVariant(512)));
+ optionsEngine->addOptionGroup(KeysList);
+ #if ! defined (Q_CC_GNU)
+ ui->keepDate->setEnabled(false);
+ ui->keepDate->setToolTip("Not supported with this compiler");
+ #endif
+ ui->doRightTransfer->setChecked(optionsEngine->getOptionValue("doRightTransfer").toBool());
+ ui->keepDate->setChecked(optionsEngine->getOptionValue("keepDate").toBool());
+ ui->blockSize->setValue(optionsEngine->getOptionValue("blockSize").toUInt());
+ ui->autoStart->setChecked(optionsEngine->getOptionValue("autoStart").toBool());
+ ui->rsync->setChecked(optionsEngine->getOptionValue("rsync").toBool());
+ ui->comboBoxFolderError->setCurrentIndex(optionsEngine->getOptionValue("folderError").toUInt());
+ ui->comboBoxFolderColision->setCurrentIndex(optionsEngine->getOptionValue("folderColision").toUInt());
+ ui->checkBoxDestinationFolderExists->setChecked(optionsEngine->getOptionValue("checkDestinationFolder").toBool());
+ ui->doChecksum->setChecked(optionsEngine->getOptionValue("doChecksum").toBool());
+ ui->checksumIgnoreIfImpossible->setChecked(optionsEngine->getOptionValue("checksumIgnoreIfImpossible").toBool());
+ ui->checksumOnlyOnError->setChecked(optionsEngine->getOptionValue("checksumOnlyOnError").toBool());
+ ui->osBuffer->setChecked(optionsEngine->getOptionValue("osBuffer").toBool());
+ ui->osBufferLimited->setChecked(optionsEngine->getOptionValue("osBufferLimited").toBool());
+ ui->osBufferLimit->setValue(optionsEngine->getOptionValue("osBufferLimit").toUInt());
+ filters->setFilters(optionsEngine->getOptionValue("includeStrings").toStringList(),
+ optionsEngine->getOptionValue("includeOptions").toStringList(),
+ optionsEngine->getOptionValue("excludeStrings").toStringList(),
+ optionsEngine->getOptionValue("excludeOptions").toStringList()
+ );
+ renamingRules->setRenamingRules(optionsEngine->getOptionValue("firstRenamingRule").toString(),optionsEngine->getOptionValue("otherRenamingRule").toString());
+ }
+}
+
+QStringList Factory::supportedProtocolsForTheSource()
+{
+ return QStringList() << "file";
+}
+
+QStringList Factory::supportedProtocolsForTheDestination()
+{
+ return QStringList() << "file";
+}
+
+CopyType Factory::getCopyType()
+{
+ return FileAndFolder;
+}
+
+TransferListOperation Factory::getTransferListOperation()
+{
+ return TransferListOperation_ImportExport;
+}
+
+bool Factory::canDoOnlyCopy()
+{
+ return false;
+}
+
+void Factory::error(QProcess::ProcessError error)
+{
+ #ifndef ULTRACOPIER_PLUGIN_DEBUG
+ Q_UNUSED(error)
+ #endif
+ errorFound=true;
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"have detected error: "+QString::number(error));
+}
+
+void Factory::finished(int exitCode, QProcess::ExitStatus exitStatus)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"exitCode: "+QString::number(exitCode)+", exitStatus: "+QString::number(exitStatus));
+ #ifndef ULTRACOPIER_PLUGIN_DEBUG
+ Q_UNUSED(exitCode)
+ Q_UNUSED(exitStatus)
+ #endif
+ if(!StandardError.isEmpty())
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"have finished with text on error output: "+StandardError);
+ else if(errorFound)
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"have finished with error and no text");
+ {
+ QStringList tempList=StandardOutput.split(QRegExp("[\n\r]+"));
+ int index=0;
+ while(index<tempList.size())
+ {
+ QString newString=tempList.at(index);
+ newString=newString.remove(QRegExp("^.* on "));
+ newString=newString.remove(QRegExp(" type .*$"));
+ if(!newString.endsWith(QDir::separator()))
+ newString+=QDir::separator();
+ mountSysPoint<<newString;
+ index++;
+ }
+ mountSysPoint.removeDuplicates();
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"mountSysPoint: "+mountSysPoint.join(";"));
+ }
+}
+
+void Factory::readyReadStandardError()
+{
+ StandardError+=mount.readAllStandardError();
+}
+
+void Factory::readyReadStandardOutput()
+{
+ StandardOutput+=mount.readAllStandardOutput();
+}
+
+void Factory::resetOptions()
+{
+}
+
+QWidget * Factory::options()
+{
+ ui->autoStart->setChecked(optionsEngine->getOptionValue("autoStart").toBool());
+ return tempWidget;
+}
+
+void Factory::setDoRightTransfer(bool doRightTransfer)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("doRightTransfer",doRightTransfer);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void Factory::setKeepDate(bool keepDate)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("keepDate",keepDate);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void Factory::setBlockSize(int blockSize)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("blockSize",blockSize);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void Factory::setAutoStart(bool autoStart)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("autoStart",autoStart);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void Factory::setRsync(bool rsync)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("rsync",rsync);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void Factory::newLanguageLoaded()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start, retranslate the widget options");
+ ui->retranslateUi(tempWidget);
+ if(optionsEngine!=NULL)
+ {
+ filters->newLanguageLoaded();
+ renamingRules->newLanguageLoaded();
+ }
+ emit reloadLanguage();
+}
+
+Q_EXPORT_PLUGIN2(copyEngine, Factory);
+
+void Factory::doChecksum_toggled(bool doChecksum)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("doChecksum",doChecksum);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void Factory::checksumOnlyOnError_toggled(bool checksumOnlyOnError)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("checksumOnlyOnError",checksumOnlyOnError);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void Factory::osBuffer_toggled(bool osBuffer)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("osBuffer",osBuffer);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+ ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
+}
+
+void Factory::osBufferLimited_toggled(bool osBufferLimited)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("osBufferLimited",osBufferLimited);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+ ui->osBufferLimit->setEnabled(ui->osBuffer->isChecked() && ui->osBufferLimited->isChecked());
+}
+
+void Factory::osBufferLimit_editingFinished()
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the spinbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("osBufferLimit",ui->osBufferLimit->value());
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void Factory::showFilterDialog()
+{
+ if(optionsEngine==NULL)
+ {
+ QMessageBox::critical(NULL,tr("Options error"),tr("Options engine is not loaded, can't access to the filters"));
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"options not loaded");
+ return;
+ }
+ filters->exec();
+}
+
+void Factory::sendNewFilters(QStringList includeStrings,QStringList includeOptions,QStringList excludeStrings,QStringList excludeOptions)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"new filter");
+ if(optionsEngine!=NULL)
+ {
+ optionsEngine->setOptionValue("includeStrings",includeStrings);
+ optionsEngine->setOptionValue("includeOptions",includeOptions);
+ optionsEngine->setOptionValue("excludeStrings",excludeStrings);
+ optionsEngine->setOptionValue("excludeOptions",excludeOptions);
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void Factory::sendNewRenamingRules(QString firstRenamingRule,QString otherRenamingRule)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"new filter");
+ if(optionsEngine!=NULL)
+ {
+ optionsEngine->setOptionValue("firstRenamingRule",firstRenamingRule);
+ optionsEngine->setOptionValue("otherRenamingRule",otherRenamingRule);
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+}
+
+void Factory::showRenamingRules()
+{
+ if(optionsEngine==NULL)
+ {
+ QMessageBox::critical(NULL,tr("Options error"),tr("Options engine is not loaded, can't access to the filters"));
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"options not loaded");
+ return;
+ }
+ renamingRules->exec();
+}
+
+void Factory::checksumIgnoreIfImpossible_toggled(bool checksumIgnoreIfImpossible)
+{
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"the checkbox have changed");
+ if(optionsEngine!=NULL)
+ optionsEngine->setOptionValue("checksumIgnoreIfImpossible",checksumIgnoreIfImpossible);
+ else
+ ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"internal error, crash prevented");
+}