From b3c8bdcc0d1e4b2ab298847a7902b6d60410a5bc Mon Sep 17 00:00:00 2001 From: Thomas Preud'homme Date: Fri, 24 Nov 2017 23:24:09 +0000 Subject: New upstream version 1.2.3.6 --- CopyEngineManager.cpp | 620 +++++++++++++++++++++++++++----------------------- 1 file changed, 329 insertions(+), 291 deletions(-) (limited to 'CopyEngineManager.cpp') diff --git a/CopyEngineManager.cpp b/CopyEngineManager.cpp index 4808fc7..2355743 100644 --- a/CopyEngineManager.cpp +++ b/CopyEngineManager.cpp @@ -1,343 +1,381 @@ /** \file CopyEngineManager.cpp \brief Define the copy engine manager \author alpha_one_x86 -\version 0.3 -\date 2010 \licence GPL3, see the file COPYING */ -#include #include #include "CopyEngineManager.h" +#include "LanguagesManager.h" + +#ifdef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT +#include "plugins/CopyEngine/Ultracopier/CopyEngineFactory.h" +#endif CopyEngineManager::CopyEngineManager(OptionDialog *optionDialog) { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - connect(languages, SIGNAL(newLanguageLoaded(QString)), &facilityEngine,SLOT(retranslate()),Qt::DirectConnection); - this->optionDialog=optionDialog; - //setup the ui layout - plugins->lockPluginListEdition(); - connect(this,SIGNAL(previouslyPluginAdded(PluginsAvailable)), this,SLOT(onePluginAdded(PluginsAvailable)),Qt::QueuedConnection); - connect(plugins,SIGNAL(onePluginAdded(PluginsAvailable)), this,SLOT(onePluginAdded(PluginsAvailable)),Qt::QueuedConnection); - connect(plugins,SIGNAL(onePluginWillBeRemoved(PluginsAvailable)), this,SLOT(onePluginWillBeRemoved(PluginsAvailable)),Qt::DirectConnection); - connect(plugins,SIGNAL(pluginListingIsfinish()), this,SLOT(allPluginIsloaded()),Qt::QueuedConnection); - QList list=plugins->getPluginsByCategory(PluginType_CopyEngine); - foreach(PluginsAvailable currentPlugin,list) - emit previouslyPluginAdded(currentPlugin); - plugins->unlockPluginListEdition(); - //load the options - isConnected=false; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"start"); + this->optionDialog=optionDialog; + //setup the ui layout + PluginsManager::pluginsManager->lockPluginListEdition(); + connect(this,&CopyEngineManager::previouslyPluginAdded, this,&CopyEngineManager::onePluginAdded,Qt::QueuedConnection); + connect(PluginsManager::pluginsManager,&PluginsManager::onePluginAdded, this,&CopyEngineManager::onePluginAdded,Qt::QueuedConnection); + #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE + connect(PluginsManager::pluginsManager,&PluginsManager::onePluginWillBeRemoved, this,&CopyEngineManager::onePluginWillBeRemoved,Qt::DirectConnection); + #endif + connect(PluginsManager::pluginsManager,&PluginsManager::pluginListingIsfinish, this,&CopyEngineManager::allPluginIsloaded,Qt::QueuedConnection); + QList list=PluginsManager::pluginsManager->getPluginsByCategory(PluginType_CopyEngine); + foreach(PluginsAvailable currentPlugin,list) + emit previouslyPluginAdded(currentPlugin); + PluginsManager::pluginsManager->unlockPluginListEdition(); + //load the options + isConnected=false; } void CopyEngineManager::onePluginAdded(const PluginsAvailable &plugin) { - if(plugin.category!=PluginType_CopyEngine) - return; - //setFileName - QString pluginPath=plugin.path+PluginsManager::getResolvedPluginName("copyEngine"); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start: "+pluginPath); - //search into loaded session - int index=0; - while(indexinstance(); - if(pluginObject==NULL) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("unable to load the plugin: %1").arg(newItem.pointer->errorString())); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("unable to load the plugin for %1").arg(newItem.pluginPath)); - newItem.pointer->unload(); - return; - } - newItem.factory = qobject_cast(pluginObject); - //check if found - index=0; - while(indexunload(); - return; - } - index++; - } - if(newItem.factory==NULL) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("unable to cast the plugin: %1").arg(newItem.pointer->errorString())); - newItem.pointer->unload(); - return; - } - #ifdef ULTRACOPIER_DEBUG - qRegisterMetaType("DebugLevel"); - connect(newItem.factory,SIGNAL(debugInformation(DebugLevel,QString,QString,QString,int)),this,SLOT(debugInformation(DebugLevel,QString,QString,QString,int)),Qt::QueuedConnection); - #endif // ULTRACOPIER_DEBUG - newItem.options=new LocalPluginOptions("CopyEngine-"+newItem.name); - newItem.factory->setResources(newItem.options,plugin.writablePath,plugin.path,&facilityEngine,ULTRACOPIER_VERSION_PORTABLE_BOOL); - newItem.optionsWidget=newItem.factory->options(); - newItem.supportedProtocolsForTheSource=newItem.factory->supportedProtocolsForTheSource(); - newItem.supportedProtocolsForTheDestination=newItem.factory->supportedProtocolsForTheDestination(); - newItem.canDoOnlyCopy=newItem.factory->canDoOnlyCopy(); - newItem.type=newItem.factory->getCopyType(); - newItem.transferListOperation=newItem.factory->getTransferListOperation(); - optionDialog->addPluginOptionWidget(PluginType_CopyEngine,newItem.name,newItem.optionsWidget); - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"plugin: "+newItem.name+" loaded, send options"); - //emit newCopyEngineOptions(plugin.path,newItem.name,newItem.optionsWidget); - pluginList << newItem; - connect(languages,SIGNAL(newLanguageLoaded(QString)),newItem.factory,SLOT(newLanguageLoaded())); - if(plugins->allPluginHaveBeenLoaded()) - allPluginIsloaded(); - if(isConnected) - emit addCopyEngine(newItem.name,newItem.canDoOnlyCopy); + if(plugin.category!=PluginType_CopyEngine) + return; + //setFileName + QString pluginPath=plugin.path+PluginsManager::getResolvedPluginName(QStringLiteral("copyEngine")); + #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE + /*more IO + if(!QFile(pluginPath).exists()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("The plugin binary is missing: ")+pluginPath); + return; + }*/ + #endif + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start: ")+pluginPath); + //search into loaded session + int index=0; + while(index(pluginObject); + if(newItem.factory!=NULL) + break; + index++; + } + if(index==objectList.size()) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("static copy engine not found")); + return; + } + #else + QObject *pluginObject = newItem.pointer->instance(); + if(pluginObject==NULL) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unable to load the plugin: %1").arg(newItem.pointer->errorString())); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unable to load the plugin for %1").arg(newItem.pluginPath)); + newItem.pointer->unload(); + return; + } + newItem.factory = qobject_cast(pluginObject); + //check if found + index=0; + while(indexunload(); + return; + } + index++; + } + if(newItem.factory==NULL) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("unable to cast the plugin: %1").arg(newItem.pointer->errorString())); + newItem.pointer->unload(); + return; + } + #endif + #else + newItem.factory=new CopyEngineFactory(); + #endif + + #ifdef ULTRACOPIER_DEBUG + connect(newItem.factory,&PluginInterface_CopyEngineFactory::debugInformation,this,&CopyEngineManager::debugInformation,Qt::QueuedConnection); + #endif // ULTRACOPIER_DEBUG + newItem.options=new LocalPluginOptions(QStringLiteral("CopyEngine-")+newItem.name); + newItem.factory->setResources(newItem.options,plugin.writablePath,plugin.path,&FacilityEngine::facilityEngine,ULTRACOPIER_VERSION_PORTABLE_BOOL); + newItem.optionsWidget=newItem.factory->options(); + newItem.supportedProtocolsForTheSource=newItem.factory->supportedProtocolsForTheSource(); + newItem.supportedProtocolsForTheDestination=newItem.factory->supportedProtocolsForTheDestination(); + newItem.canDoOnlyCopy=newItem.factory->canDoOnlyCopy(); + newItem.type=newItem.factory->getCopyType(); + newItem.transferListOperation=newItem.factory->getTransferListOperation(); + optionDialog->addPluginOptionWidget(PluginType_CopyEngine,newItem.name,newItem.optionsWidget); + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("plugin: ")+newItem.name+QStringLiteral(" loaded, send options")); + //emit newCopyEngineOptions(plugin.path,newItem.name,newItem.optionsWidget); + pluginList << newItem; + connect(LanguagesManager::languagesManager,&LanguagesManager::newLanguageLoaded,newItem.factory,&PluginInterface_CopyEngineFactory::newLanguageLoaded); + if(PluginsManager::pluginsManager->allPluginHaveBeenLoaded()) + allPluginIsloaded(); + if(isConnected) + emit addCopyEngine(newItem.name,newItem.canDoOnlyCopy); } +#ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE void CopyEngineManager::onePluginWillBeRemoved(const PluginsAvailable &plugin) { - int index=0; - while(indexunload(); - return; - } - index++; - } + if(plugin.category!=PluginType_CopyEngine) + return; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start")); + int index=0; + while(indexunload(); + return; + } + index++; + } } +#endif -CopyEngineManager::returnCopyEngine CopyEngineManager::getCopyEngine(const CopyMode &mode,const QStringList &protocolsUsedForTheSources,const QString &protocolsUsedForTheDestination) +CopyEngineManager::returnCopyEngine CopyEngineManager::getCopyEngine(const Ultracopier::CopyMode &mode,const QStringList &protocolsUsedForTheSources,const QString &protocolsUsedForTheDestination) { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("start, pluginList.size(): %1, mode: %2, and particular protocol").arg(pluginList.size()).arg((int)mode)); - returnCopyEngine temp; - int index=0; - bool isTheGoodEngine=false; - while(indexgetInstance(); - temp.engine=pluginList[index].intances.last(); - temp.canDoOnlyCopy=pluginList.at(index).canDoOnlyCopy; - temp.type=pluginList.at(index).type; - temp.transferListOperation=pluginList.at(index).transferListOperation; - return temp; - } - index++; - } - if(mode==Move) - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Cannot find any copy engine with motions support"); - QMessageBox::critical(NULL,tr("Warning"),tr("Cannot find any copy engine with motions support")); - } - else - { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Cannot find any compatible engine!"); - QMessageBox::critical(NULL,tr("Warning"),tr("Cannot find any compatible engine!")); - } - temp.engine=NULL; - temp.type=File; - temp.canDoOnlyCopy=true; - return temp; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start, pluginList.size(): %1, mode: %2, and particular protocol").arg(pluginList.size()).arg((int)mode)); + returnCopyEngine temp; + int index=0; + bool isTheGoodEngine=false; + while(indexgetInstance(); + temp.engine=pluginList.at(index).intances.last(); + temp.canDoOnlyCopy=pluginList.at(index).canDoOnlyCopy; + temp.type=pluginList.at(index).type; + temp.transferListOperation=pluginList.at(index).transferListOperation; + return temp; + } + index++; + } + if(mode==Ultracopier::Move) + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Cannot find any copy engine with move support"); + QMessageBox::critical(NULL,tr("Warning"),tr("Cannot find any copy engine with move support")); + } + else + { + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Cannot find any compatible engine!"); + QMessageBox::critical(NULL,tr("Warning"),tr("Cannot find any compatible engine!")); + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("protocolsUsedForTheSources: %1, protocolsUsedForTheDestination: %2").arg(protocolsUsedForTheSources.join(";")).arg(protocolsUsedForTheDestination)); + + temp.engine=NULL; + temp.type=Ultracopier::File; + temp.canDoOnlyCopy=true; + return temp; } -CopyEngineManager::returnCopyEngine CopyEngineManager::getCopyEngine(const CopyMode &mode,const QString &name) +CopyEngineManager::returnCopyEngine CopyEngineManager::getCopyEngine(const Ultracopier::CopyMode &mode,const QString &name) { - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("start, pluginList.size(): %1, with mode: %2, and name: %3").arg(pluginList.size()).arg((int)mode).arg(name)); - returnCopyEngine temp; - int index=0; - while(indexgetInstance(); - temp.engine=pluginList[index].intances.last(); - temp.canDoOnlyCopy=pluginList.at(index).canDoOnlyCopy; - temp.type=pluginList.at(index).type; - temp.transferListOperation=pluginList.at(index).transferListOperation; - return temp; - } - index++; - } - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Cannot find any engine with this name: %1").arg(name)); - QMessageBox::critical(NULL,tr("Warning"),tr("Cannot find any engine with this name: %1").arg(name)); - temp.engine=NULL; - temp.type=File; - temp.canDoOnlyCopy=true; - return temp; + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start, pluginList.size(): %1, with mode: %2, and name: %3").arg(pluginList.size()).arg((int)mode).arg(name)); + returnCopyEngine temp; + int index=0; + while(indexgetInstance(); + temp.engine=pluginList.at(index).intances.last(); + temp.canDoOnlyCopy=pluginList.at(index).canDoOnlyCopy; + temp.type=pluginList.at(index).type; + temp.transferListOperation=pluginList.at(index).transferListOperation; + return temp; + } + index++; + } + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Cannot find any engine with this name: %1").arg(name)); + QMessageBox::critical(NULL,tr("Warning"),tr("Cannot find any engine with this name: %1").arg(name)); + temp.engine=NULL; + temp.type=Ultracopier::File; + temp.canDoOnlyCopy=true; + return temp; } #ifdef ULTRACOPIER_DEBUG -void CopyEngineManager::debugInformation(DebugLevel level,const QString& fonction,const QString& text,const QString& file,const int& ligne) +void CopyEngineManager::debugInformation(const Ultracopier::DebugLevel &level,const QString& fonction,const QString& text,const QString& file,const int& ligne) { - DebugEngine::addDebugInformationStatic(level,fonction,text,file,ligne,"Copy Engine plugin"); + DebugEngine::addDebugInformationStatic(level,fonction,text,file,ligne,QStringLiteral("Copy Engine plugin")); } #endif // ULTRACOPIER_DEBUG /// \brief To notify when new value into a group have changed void CopyEngineManager::newOptionValue(const QString &groupName,const QString &variableName,const QVariant &value) { - if(groupName=="CopyEngine" && variableName=="List") - { - Q_UNUSED(value) - ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"start(\""+groupName+"\",\""+variableName+"\",\""+value.toString()+"\")"); - allPluginIsloaded(); - } + if(groupName==QStringLiteral("CopyEngine") && variableName==QStringLiteral("List")) + { + Q_UNUSED(value) + ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"start(\""+groupName+"\",\""+variableName+"\",\""+value.toString()+"\")"); + allPluginIsloaded(); + } } void CopyEngineManager::setIsConnected() { - /* ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start"); - prevent bug, I don't know why, in one case it bug here - */ - isConnected=true; - int index=0; - while(indexgetOptionValue("CopyEngine","List").toStringList(); - preferedList.removeDuplicates(); - actualList.removeDuplicates(); - index=0; - while(indexsetOptionValue("CopyEngine","List",preferedList); - QList newPluginList; - index=0; - while(indexgetOptionValue(QStringLiteral("CopyEngine"),QStringLiteral("List")).toStringList(); + preferedList.removeDuplicates(); + actualList.removeDuplicates(); + index=0; + while(indexsetOptionValue(QStringLiteral("CopyEngine"),QStringLiteral("List"),preferedList); + QList newPluginList; + index=0; + while(index