summaryrefslogtreecommitdiff
path: root/PluginsManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'PluginsManager.cpp')
-rw-r--r--PluginsManager.cpp1562
1 files changed, 802 insertions, 760 deletions
diff --git a/PluginsManager.cpp b/PluginsManager.cpp
index e3c71ec..1a8ad42 100644
--- a/PluginsManager.cpp
+++ b/PluginsManager.cpp
@@ -1,9 +1,7 @@
/** \file PluginsManager.cpp
\brief Define the class to manage and load the plugins
\author alpha_one_x86
-\version 0.3
-\date 2010
-\licence GPL3, see the file COPYING */
+\licence GPL3, see the file COPYING */
#include <QDir>
#include <QMessageBox>
@@ -16,604 +14,636 @@
/// \brief Create the manager and load the defaults variables
PluginsManager::PluginsManager()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- //load the overall instance
- pluginLoaded=false;
- resources=ResourcesManager::getInstance();
- options=OptionEngine::getInstance();
-
- language="en";
- stopIt=false;
- editionSemList.release();
- checkPluginThread=new AuthPlugin();
- englishPluginType << "CopyEngine" << "Languages" << "Listener" << "PluginLoader" << "SessionLoader" << "Themes";
- //catPlugin << tr("CopyEngine") << tr("Languages") << tr("Listener") << tr("PluginLoader") << tr("SessionLoader") << tr("Themes");
- importingPlugin=false;
- connect(&decodeThread, SIGNAL(decodedIsFinish()), this, SLOT(decodingFinished()),Qt::QueuedConnection);
- connect(checkPluginThread, SIGNAL(authentifiedPath(QString)), this, SLOT(newAuthPath(QString)),Qt::QueuedConnection);
- connect(this, SIGNAL(finished()), this, SLOT(post_operation()),Qt::QueuedConnection);
- connect(this, SIGNAL(newLanguageLoaded()), &pluginInformationWindows, SLOT(retranslateInformation()),Qt::QueuedConnection);
-// connect(this, SIGNAL(pluginListingIsfinish()), options,SLOT(setInterfaceValue()));
- //load the plugins list
- /// \bug bug when I put here: moveToThread(this);, due to the direction connection to remove the plugin
- start();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ //load the overall instance
+ pluginLoaded = false;
+ language = QStringLiteral("en");
+ stopIt = false;
+ pluginInformation = NULL;
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ importingPlugin = false;
+ #endif
+ editionSemList.release();
+ englishPluginType << QStringLiteral("CopyEngine") << QStringLiteral("Languages") << QStringLiteral("Listener") << QStringLiteral("PluginLoader") << QStringLiteral("SessionLoader") << QStringLiteral("Themes");
+ //catPlugin << tr("CopyEngine") << tr("Languages") << tr("Listener") << tr("PluginLoader") << tr("SessionLoader") << tr("Themes");
+ #ifdef ULTRACOPIER_PLUGIN_IMPORT_SUPPORT
+ connect(&decodeThread, &QXzDecodeThread::decodedIsFinish, this, &PluginsManager::decodingFinished,Qt::QueuedConnection);
+ #endif
+ connect(this, &PluginsManager::finished, this, &PluginsManager::post_operation,Qt::QueuedConnection);
+// connect(this, &PluginsManager::pluginListingIsfinish, options,&OptionEngine::setInterfaceValue);
+ //load the plugins list
+
+ /// \bug bug when I put here: moveToThread(this);, due to the direction connection to remove the plugin
+ start();
}
/// \brief Destroy the manager
PluginsManager::~PluginsManager()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- int index=0;
- int loop_size=pluginsList.size();
- while(index<loop_size)
- {
- emit onePluginWillBeUnloaded(pluginsList.at(index));
- index++;
- }
- stopIt=true;
- if(this->isRunning())
- this->wait(0);
- delete checkPluginThread;
- OptionEngine::destroyInstanceAtTheLastCall();
- ResourcesManager::destroyInstanceAtTheLastCall();
+ stopIt=true;
+ if(pluginInformation!=NULL)
+ delete pluginInformation;
+ if(this->isRunning())
+ this->wait(0);
}
/// \brief set current language
void PluginsManager::setLanguage(const QString &language)
{
- this->language=language;
+ this->language=language;
}
void PluginsManager::post_operation()
{
- pluginLoaded=true;
- emit pluginListingIsfinish();
+ pluginLoaded=true;
+ emit pluginListingIsfinish();
}
-bool PluginsManager::allPluginHaveBeenLoaded()
+bool PluginsManager::allPluginHaveBeenLoaded() const
{
- return pluginLoaded;
+ return pluginLoaded;
}
void PluginsManager::lockPluginListEdition()
{
- editionSemList.acquire();
+ editionSemList.acquire();
}
void PluginsManager::unlockPluginListEdition()
{
- editionSemList.release();
+ editionSemList.release();
}
void PluginsManager::run()
{
- //load the path and plugins into the path
- QStringList readPath;
- readPath << resources->getReadPath();
- pluginsList.clear();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"pluginsList.size(): "+QString::number(pluginsList.size()));
- foreach(QString basePath,readPath)
- {
- foreach(QString dirSub,englishPluginType)
- {
- QString pluginComposed=basePath+dirSub+QDir::separator();
- QDir dir(pluginComposed);
- if(stopIt)
- return;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"search plugin into: "+pluginComposed);
- if(dir.exists())
- {
- foreach(QString dirName, dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot))
- {
- if(stopIt)
- return;
- loadPluginInformation(pluginComposed+dirName+QDir::separator());
- }
- }
- }
- }
- #ifdef ULTRACOPIER_DEBUG
- int index=0;
- int loop_size=pluginsList.size();
- while(index<loop_size)
- {
- QString category=categoryToString(pluginsList.at(index).category);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"Plugin "+QString::number(index)+" loaded ("+category+"): "+pluginsList.at(index).path);
- index++;
- }
- #endif
- checkPluginThread->loadSearchPath(readPath,englishPluginType);
- checkPluginThread->stop();
- checkPluginThread->start();
- checkDependencies();
-}
-
-QString PluginsManager::categoryToString(const PluginType &category)
-{
- switch(category)
- {
- case PluginType_CopyEngine:
- return "CopyEngine";
- break;
- case PluginType_Languages:
- return "Languages";
- break;
- case PluginType_Listener:
- return "Listener";
- break;
- case PluginType_PluginLoader:
- return "PluginLoader";
- break;
- case PluginType_SessionLoader:
- return "SessionLoader";
- break;
- case PluginType_Themes:
- return "Themes";
- break;
- default:
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"cat text not found");
- return "Unknow";
- break;
- }
+ regexp_to_clean_1=QRegularExpression(QStringLiteral("[\n\r]+"));
+ regexp_to_clean_2=QRegularExpression(QStringLiteral("[ \t]+"));
+ regexp_to_clean_3=QRegularExpression(QStringLiteral("(&&)+"));
+ regexp_to_clean_4=QRegularExpression(QStringLiteral("^&&"));
+ regexp_to_clean_5=QRegularExpression(QStringLiteral("&&$"));
+ regexp_to_dep_1=QRegularExpression(QStringLiteral("(&&|\\|\\||\\(|\\))"));
+ regexp_to_dep_2=QRegularExpression(QStringLiteral("^(<=|<|=|>|>=)[a-zA-Z0-9\\-]+-([0-9]+\\.)*[0-9]+$"));
+ regexp_to_dep_3=QRegularExpression(QStringLiteral("(<=|<|=|>|>=)"));
+ regexp_to_dep_4=QRegularExpression(QStringLiteral("-([0-9]+\\.)*[0-9]+"));
+ regexp_to_dep_5=QRegularExpression(QStringLiteral("[a-zA-Z0-9\\-]+-"));
+ regexp_to_dep_6=QRegularExpression(QStringLiteral("[a-zA-Z0-9\\-]+-([0-9]+\\.)*[0-9]+"));
+
+ //load the path and plugins into the path
+ QStringList readPath;
+ readPath << ResourcesManager::resourcesManager->getReadPath();
+ pluginsList.clear();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("pluginsList.size(): ")+QString::number(pluginsList.size()));
+ foreach(QString basePath,readPath)
+ {
+ foreach(QString dirSub,englishPluginType)
+ {
+ QString pluginComposed=basePath+dirSub+QDir::separator();
+ QDir dir(pluginComposed);
+ if(stopIt)
+ return;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("search plugin into: ")+pluginComposed);
+ if(dir.exists())
+ {
+ foreach(QString dirName, dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot))
+ {
+ if(stopIt)
+ return;
+ loadPluginInformation(pluginComposed+dirName+QDir::separator());
+ }
+ }
+ }
+ }
+ #ifdef ULTRACOPIER_DEBUG
+ int index_debug=0;
+ const int &loop_size=pluginsList.size();
+ while(index_debug<loop_size)
+ {
+ QString category=categoryToString(pluginsList.at(index_debug).category);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,QStringLiteral("Plugin ")+QString::number(index_debug)+QStringLiteral(" loaded (")+category+QStringLiteral("): ")+pluginsList.at(index_debug).path);
+ index_debug++;
+ }
+ #endif
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ while(checkDependencies()!=0){};
+ #endif
+ //QList<PluginsAvailable> list;
+ int index=0;
+ while(index<pluginsList.size())
+ {
+ if(pluginsList.at(index).errorString.isEmpty())
+ emit onePluginAdded(pluginsList.at(index));
+ index++;
+ }
+}
+
+QString PluginsManager::categoryToString(const PluginType &category) const
+{
+ switch(category)
+ {
+ case PluginType_CopyEngine:
+ return QStringLiteral("CopyEngine");
+ break;
+ case PluginType_Languages:
+ return QStringLiteral("Languages");
+ break;
+ case PluginType_Listener:
+ return QStringLiteral("Listener");
+ break;
+ case PluginType_PluginLoader:
+ return QStringLiteral("PluginLoader");
+ break;
+ case PluginType_SessionLoader:
+ return QStringLiteral("SessionLoader");
+ break;
+ case PluginType_Themes:
+ return QStringLiteral("Themes");
+ break;
+ default:
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("cat text not found: ")+QString::number(category));
+ return QStringLiteral("Unknown");
+ break;
+ }
}
QString PluginsManager::categoryToTranslation(const PluginType &category)
{
- return pluginInformationWindows.categoryToTranslation(category);
+ if(pluginInformation==NULL)
+ {
+ pluginInformation=new PluginInformation();
+ connect(this, &PluginsManager::newLanguageLoaded, pluginInformation, &PluginInformation::retranslateInformation,Qt::QueuedConnection);
+ }
+ return pluginInformation->categoryToTranslation(category);
}
bool PluginsManager::isSamePlugin(const PluginsAvailable &pluginA,const PluginsAvailable &pluginB)
{
- /*if(pluginA.category!=pluginB.category)
- return false;*/
- //only this test should be suffisent
- if(pluginA.path!=pluginB.path)
- return false;
- /*if(pluginA.name!=pluginB.name)
- return false;
- if(pluginA.writablePath!=pluginB.writablePath)
- return false;
- if(pluginA.categorySpecific!=pluginB.categorySpecific)
- return false;
- if(pluginA.version!=pluginB.version)
- return false;
- if(pluginA.informations!=pluginB.informations)
- return false;*/
- return true;
+ /*if(pluginA.category!=pluginB.category)
+ return false;*/
+ //only this test should be suffisent
+ if(pluginA.path!=pluginB.path)
+ return false;
+ /*if(pluginA.name!=pluginB.name)
+ return false;
+ if(pluginA.writablePath!=pluginB.writablePath)
+ return false;
+ if(pluginA.categorySpecific!=pluginB.categorySpecific)
+ return false;
+ if(pluginA.version!=pluginB.version)
+ return false;
+ if(pluginA.informations!=pluginB.informations)
+ return false;*/
+ return true;
}
bool PluginsManager::loadPluginInformation(const QString &path)
{
- PluginsAvailable tempPlugin;
- tempPlugin.isAuth = false;
- tempPlugin.path = path;
- tempPlugin.category = PluginType_Unknow;
- QDir pluginPath(path);
- if(pluginPath.cdUp() && pluginPath.cdUp() &&
- resources->getWritablePath()!="" &&
- pluginPath==QDir(resources->getWritablePath()))
- tempPlugin.isWritable=true;
- else
- tempPlugin.isWritable=false;
- QFile xmlMetaData(path+"informations.xml");
- if(xmlMetaData.exists())
- {
- if(xmlMetaData.open(QIODevice::ReadOnly))
- {
- loadPluginXml(&tempPlugin,xmlMetaData.readAll());
- xmlMetaData.close();
- }
- else
- {
- tempPlugin.errorString=tr("informations.xml is not accessible");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"informations.xml is not accessible into the plugin: "+path);
- }
- }
- else
- {
- tempPlugin.errorString=tr("informations.xml not found into the plugin");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"informations.xml not found into the plugin: "+path);
- }
- editionSemList.acquire();
- pluginsList << tempPlugin;
- if(tempPlugin.errorString=="")
- pluginsListIndexed.insert(tempPlugin.category,tempPlugin);
- editionSemList.release();
- if(tempPlugin.errorString=="")
- {
- emit onePluginAdded(tempPlugin);
- return true;
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Error detected, the not loaded: "+tempPlugin.errorString+", for path: "+tempPlugin.path);
- return false;
- }
+ PluginsAvailable tempPlugin;
+ tempPlugin.isAuth = false;
+ tempPlugin.path = path;
+ tempPlugin.category = PluginType_Unknow;
+ QDir pluginPath(path);
+ if(pluginPath.cdUp() && pluginPath.cdUp() &&
+ ResourcesManager::resourcesManager->getWritablePath()!="" &&
+ pluginPath==QDir(ResourcesManager::resourcesManager->getWritablePath()))
+ tempPlugin.isWritable=true;
+ else
+ tempPlugin.isWritable=false;
+ QFile xmlMetaData(path+QStringLiteral("informations.xml"));
+ if(xmlMetaData.exists())
+ {
+ if(xmlMetaData.open(QIODevice::ReadOnly))
+ {
+ loadPluginXml(&tempPlugin,xmlMetaData.readAll());
+ xmlMetaData.close();
+ }
+ else
+ {
+ tempPlugin.errorString=tr("informations.xml is not accessible");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("informations.xml is not accessible into the plugin: ")+path);
+ }
+ }
+ else
+ {
+ tempPlugin.errorString=tr("informations.xml not found for the plugin");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("informations.xml not found for the plugin: ")+path);
+ }
+ editionSemList.acquire();
+ pluginsList << tempPlugin;
+ if(tempPlugin.errorString==QStringLiteral(""))
+ pluginsListIndexed.insert(tempPlugin.category,tempPlugin);
+ editionSemList.release();
+ if(tempPlugin.errorString==QStringLiteral(""))
+ return true;
+ else
+ {
+ emit onePluginInErrorAdded(tempPlugin);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Error detected, the not loaded: ")+tempPlugin.errorString+QStringLiteral(", for path: ")+tempPlugin.path);
+ return false;
+ }
}
void PluginsManager::loadPluginXml(PluginsAvailable * thePlugin,const QByteArray &xml)
{
- QString errorStr;
- int errorLine;
- int errorColumn;
- QDomDocument domDocument;
- if (!domDocument.setContent(xml, false, &errorStr,&errorLine,&errorColumn))
- {
- thePlugin->errorString=tr("%1, parse error at line %2, column %3: %4").arg("informations.xml").arg(errorLine).arg(errorColumn).arg(errorStr);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,QString("%1, Parse error at line %2, column %3: %4").arg("informations.xml").arg(errorLine).arg(errorColumn).arg(errorStr));
- }
- else
- {
- QDomElement root = domDocument.documentElement();
- if (root.tagName() != "package")
- {
- thePlugin->errorString=tr("\"package\" root tag not found for the xml file");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"\"package\" root balise not found for the xml file");
- }
- //load the variable
- if(thePlugin->errorString=="")
- loadBalise(root,"title",&(thePlugin->informations),&(thePlugin->errorString),true,true,true);
- if(thePlugin->errorString=="")
- loadBalise(root,"website",&(thePlugin->informations),&(thePlugin->errorString),false,true);
- if(thePlugin->errorString=="")
- loadBalise(root,"description",&(thePlugin->informations),&(thePlugin->errorString),true,true,true);
- if(thePlugin->errorString=="")
- loadBalise(root,"author",&(thePlugin->informations),&(thePlugin->errorString),true,false);
- if(thePlugin->errorString=="")
- loadBalise(root,"pubDate",&(thePlugin->informations),&(thePlugin->errorString),true,false);
- if(thePlugin->errorString=="")
- {
- loadBalise(root,"version",&(thePlugin->informations),&(thePlugin->errorString),true,false);
- if(thePlugin->errorString=="")
- thePlugin->version=thePlugin->informations.last().last();
- }
- if(thePlugin->errorString=="")
- {
- loadBalise(root,"category",&(thePlugin->informations),&(thePlugin->errorString),true,false);
- if(thePlugin->errorString=="")
- {
- QString tempCat=thePlugin->informations.last().last();
- if(tempCat=="Languages")
- thePlugin->category=PluginType_Languages;
- else if(tempCat=="CopyEngine")
- thePlugin->category=PluginType_CopyEngine;
- else if(tempCat=="Listener")
- thePlugin->category=PluginType_Listener;
- else if(tempCat=="PluginLoader")
- thePlugin->category=PluginType_PluginLoader;
- else if(tempCat=="SessionLoader")
- thePlugin->category=PluginType_SessionLoader;
- else if(tempCat=="Themes")
- thePlugin->category=PluginType_Themes;
- else
- thePlugin->errorString="Unknow category: "+QString::number((int)thePlugin->category);
- if(thePlugin->errorString.isEmpty())
- {
- if(thePlugin->category!=PluginType_Languages)
- {
- loadBalise(root,"architecture",&(thePlugin->informations),&(thePlugin->errorString),true,false);
- if(thePlugin->errorString=="")
- {
- #ifndef ULTRACOPIER_VERSION_PORTABLE
- if(thePlugin->informations.last().last()!=ULTRACOPIER_PLATFORM_CODE)
- thePlugin->errorString="Wrong platform code: "+thePlugin->informations.last().last();
- #endif
- }
- }
- }
- }
- }
- if(thePlugin->errorString=="")
- {
- loadBalise(root,"name",&(thePlugin->informations),&(thePlugin->errorString),true,false);
- if(thePlugin->errorString=="")
- {
- thePlugin->name=thePlugin->informations.last().last();
- int index=0;
- int loop_size=pluginsList.size();
- int sub_index,loop_sub_size;
- while(index<loop_size)
- {
- sub_index=0;
- loop_sub_size=pluginsList.at(index).informations.size();
- while(sub_index<loop_sub_size)
- {
- if(pluginsList.at(index).informations.at(sub_index).first()=="name" &&
- pluginsList.at(index).name==thePlugin->name &&
- pluginsList.at(index).category==thePlugin->category)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Plugin duplicate found ("+QString::number((int)thePlugin->category)+"/"+pluginsList.at(index).informations.at(sub_index).last()+"), already loaded, actual version skipped: "+thePlugin->version);
- thePlugin->errorString=tr("Duplicated plugin found, already loaded!");
- break;
- break;
- }
- sub_index++;
- }
- index++;
- }
- }
- }
- if(thePlugin->errorString=="")
- loadBalise(root,"dependencies",&(thePlugin->informations),&(thePlugin->errorString),true,false);
- if(thePlugin->errorString=="")
- {
- QDomElement child = root.firstChildElement("categorySpecific");
- if(!child.isNull() && child.isElement())
- thePlugin->categorySpecific=child;
- }
- }
+ QString errorStr;
+ int errorLine;
+ int errorColumn;
+ QDomDocument domDocument;
+ if (!domDocument.setContent(xml, false, &errorStr,&errorLine,&errorColumn))
+ {
+ thePlugin->errorString=tr("%1, parse error at line %2, column %3: %4").arg(QStringLiteral("informations.xml")).arg(errorLine).arg(errorColumn).arg(errorStr);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("%1, Parse error at line %2, column %3: %4").arg(QStringLiteral("informations.xml")).arg(errorLine).arg(errorColumn).arg(errorStr));
+ }
+ else
+ {
+ QDomElement root = domDocument.documentElement();
+ if (root.tagName() != QStringLiteral("package"))
+ {
+ thePlugin->errorString=tr("\"package\" root tag not found for the xml file");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("\"package\" root balise not found for the xml file"));
+ }
+ //load the variable
+ if(thePlugin->errorString.isEmpty())
+ loadBalise(root,QStringLiteral("title"),&(thePlugin->informations),&(thePlugin->errorString),true,true,true);
+ if(thePlugin->errorString.isEmpty())
+ loadBalise(root,QStringLiteral("website"),&(thePlugin->informations),&(thePlugin->errorString),false,true);
+ if(thePlugin->errorString.isEmpty())
+ loadBalise(root,QStringLiteral("description"),&(thePlugin->informations),&(thePlugin->errorString),true,true,true);
+ if(thePlugin->errorString.isEmpty())
+ loadBalise(root,QStringLiteral("author"),&(thePlugin->informations),&(thePlugin->errorString),true,false);
+ if(thePlugin->errorString.isEmpty())
+ loadBalise(root,QStringLiteral("pubDate"),&(thePlugin->informations),&(thePlugin->errorString),true,false);
+ if(thePlugin->errorString.isEmpty())
+ {
+ loadBalise(root,QStringLiteral("version"),&(thePlugin->informations),&(thePlugin->errorString),true,false);
+ if(thePlugin->errorString.isEmpty())
+ thePlugin->version=thePlugin->informations.last().last();
+ }
+ if(thePlugin->errorString.isEmpty())
+ {
+ loadBalise(root,QStringLiteral("category"),&(thePlugin->informations),&(thePlugin->errorString),true,false);
+ if(thePlugin->errorString.isEmpty())
+ {
+ QString tempCat=thePlugin->informations.last().last();
+ if(tempCat==QStringLiteral("Languages"))
+ thePlugin->category=PluginType_Languages;
+ else if(tempCat==QStringLiteral("CopyEngine"))
+ thePlugin->category=PluginType_CopyEngine;
+ else if(tempCat==QStringLiteral("Listener"))
+ thePlugin->category=PluginType_Listener;
+ else if(tempCat==QStringLiteral("PluginLoader"))
+ thePlugin->category=PluginType_PluginLoader;
+ else if(tempCat==QStringLiteral("SessionLoader"))
+ thePlugin->category=PluginType_SessionLoader;
+ else if(tempCat==QStringLiteral("Themes"))
+ thePlugin->category=PluginType_Themes;
+ else
+ thePlugin->errorString=QStringLiteral("Unknow category: ")+QString::number((int)thePlugin->category);
+ if(thePlugin->errorString.isEmpty())
+ {
+ if(thePlugin->category!=PluginType_Languages)
+ {
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ loadBalise(root,QStringLiteral("architecture"),&(thePlugin->informations),&(thePlugin->errorString),true,false);
+ if(thePlugin->errorString.isEmpty())
+ {
+ if(thePlugin->informations.last().last()!=ULTRACOPIER_PLATFORM_CODE)
+ thePlugin->errorString=QStringLiteral("Wrong platform code: ")+thePlugin->informations.last().last();
+ }
+ #endif
+ }
+ }
+ }
+ }
+ if(thePlugin->errorString.isEmpty())
+ {
+ loadBalise(root,QStringLiteral("name"),&(thePlugin->informations),&(thePlugin->errorString),true,false);
+ if(thePlugin->errorString.isEmpty())
+ {
+ thePlugin->name=thePlugin->informations.last().last();
+ int index=0;
+ const int &loop_size=pluginsList.size();
+ int sub_index,loop_sub_size;
+ while(index<loop_size)
+ {
+ sub_index=0;
+ loop_sub_size=pluginsList.at(index).informations.size();
+ while(sub_index<loop_sub_size)
+ {
+ if(pluginsList.at(index).informations.at(sub_index).first()==QStringLiteral("name") &&
+ pluginsList.at(index).name==thePlugin->name &&
+ pluginsList.at(index).category==thePlugin->category)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Plugin duplicate found ("+QString::number((int)thePlugin->category)+"/"+pluginsList.at(index).informations.at(sub_index).last()+"), already loaded, actual version skipped: "+thePlugin->version);
+ thePlugin->errorString=tr("Duplicated plugin found, already loaded!");
+ break;
+ break;
+ }
+ sub_index++;
+ }
+ index++;
+ }
+ }
+ }
+ if(thePlugin->errorString.isEmpty())
+ loadBalise(root,QStringLiteral("dependencies"),&(thePlugin->informations),&(thePlugin->errorString),true,false);
+ if(thePlugin->errorString.isEmpty())
+ {
+ QDomElement child = root.firstChildElement(QStringLiteral("categorySpecific"));
+ if(!child.isNull() && child.isElement())
+ thePlugin->categorySpecific=child;
+ }
+ }
}
/// \brief to load the multi-language balise
void PluginsManager::loadBalise(const QDomElement &root,const QString &name,QList<QStringList> *informations,QString *errorString,bool needHaveOneEntryMinimum,bool multiLanguage,bool englishNeedBeFound)
{
- int foundElement=0;
- bool englishTextIsFoundForThisChild=false;
- QDomElement child = root.firstChildElement(name);
- while(!child.isNull())
- {
- if(child.isElement())
- {
- QStringList newInformations;
- if(multiLanguage)
- {
- if(child.hasAttribute("xml:lang"))
- {
- if(child.attribute("xml:lang")=="en")
- englishTextIsFoundForThisChild=true;
- foundElement++;
- newInformations << child.tagName() << child.attribute("xml:lang") << child.text();
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Have not the attribute xml:lang: child.tagName(): %1, child.text(): %2").arg(child.tagName()).arg(child.text()));
- }
- else
- {
- foundElement++;
- newInformations << child.tagName() << child.text();
- }
- *informations << newInformations;
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Is not Element: child.tagName(): %1").arg(child.tagName()));
- child = child.nextSiblingElement(name);
- }
- if(multiLanguage && englishTextIsFoundForThisChild==false && englishNeedBeFound)
- {
- informations->clear();
- *errorString=tr("English text missing into the informations.xml for the tag: %1").arg(name);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("English text missing into the informations.xml for the tag: %1").arg(name));
- return;
- }
- if(needHaveOneEntryMinimum && foundElement==0)
- {
- informations->clear();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Tag not found: %1").arg(name));
- *errorString=tr("Tag not found: %1").arg(name);
- }
+ int foundElement=0;
+ bool englishTextIsFoundForThisChild=false;
+ QDomElement child = root.firstChildElement(name);
+ while(!child.isNull())
+ {
+ if(child.isElement())
+ {
+ QStringList newInformations;
+ if(multiLanguage)
+ {
+ if(child.hasAttribute(QStringLiteral("xml:lang")))
+ {
+ if(child.attribute(QStringLiteral("xml:lang"))==QStringLiteral("en"))
+ englishTextIsFoundForThisChild=true;
+ foundElement++;
+ newInformations << child.tagName() << child.attribute(QStringLiteral("xml:lang")) << child.text();
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Have not the attribute xml:lang: child.tagName(): %1, child.text(): %2").arg(child.tagName()).arg(child.text()));
+ }
+ else
+ {
+ foundElement++;
+ newInformations << child.tagName() << child.text();
+ }
+ *informations << newInformations;
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Is not Element: child.tagName(): %1").arg(child.tagName()));
+ child = child.nextSiblingElement(name);
+ }
+ if(multiLanguage && englishTextIsFoundForThisChild==false && englishNeedBeFound)
+ {
+ informations->clear();
+ *errorString=tr("English text missing in the informations.xml for the tag: %1").arg(name);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("English text missing into the informations.xml for the tag: %1").arg(name));
+ return;
+ }
+ if(needHaveOneEntryMinimum && foundElement==0)
+ {
+ informations->clear();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Tag not found: %1").arg(name));
+ *errorString=tr("Tag not found: %1").arg(name);
+ }
}
/// \brief to load the get dom specific
-QString PluginsManager::getDomSpecific(const QDomElement &root,const QString &name,const QList<QPair<QString,QString> > &listChildAttribute)
-{
- QDomElement child = root.firstChildElement(name);
- int index,loop_size;
- bool allIsFound;
- while(!child.isNull())
- {
- if(child.isElement())
- {
- allIsFound=true;
- index=0;
- loop_size=listChildAttribute.size();
- while(index<loop_size)
- {
- if(child.attribute(listChildAttribute.at(index).first)!=listChildAttribute.at(index).second)
- {
- allIsFound=false;
- break;
- }
- index++;
- }
- if(allIsFound)
- return child.text();
- }
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Is not Element: child.tagName(): %1").arg(child.tagName()));
- child = child.nextSiblingElement(name);
- }
- return QString();
+QString PluginsManager::getDomSpecific(const QDomElement &root,const QString &name,const QList<QPair<QString,QString> > &listChildAttribute) const
+{
+ QDomElement child = root.firstChildElement(name);
+ int index,loop_size;
+ bool allIsFound;
+ while(!child.isNull())
+ {
+ if(child.isElement())
+ {
+ allIsFound=true;
+ index=0;
+ loop_size=listChildAttribute.size();
+ while(index<loop_size)
+ {
+ if(child.attribute(listChildAttribute.at(index).first)!=listChildAttribute.at(index).second)
+ {
+ allIsFound=false;
+ break;
+ }
+ index++;
+ }
+ if(allIsFound)
+ return child.text();
+ }
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Is not Element: child.tagName(): %1").arg(child.tagName()));
+ child = child.nextSiblingElement(name);
+ }
+ return QString();
}
/// \brief to load the get dom specific
-QString PluginsManager::getDomSpecific(const QDomElement &root,const QString &name)
+QString PluginsManager::getDomSpecific(const QDomElement &root,const QString &name) const
{
- QDomElement child = root.firstChildElement(name);
- while(!child.isNull())
- {
- if(child.isElement())
- return child.text();
- else
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Is not Element: child.tagName(): %1").arg(child.tagName()));
- child = child.nextSiblingElement(name);
- }
- return QString();
+ QDomElement child = root.firstChildElement(name);
+ while(!child.isNull())
+ {
+ if(child.isElement())
+ return child.text();
+ else
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QString("Is not Element: child.tagName(): %1").arg(child.tagName()));
+ child = child.nextSiblingElement(name);
+ }
+ return QString();
}
+#ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
/// \brief check the dependencies
-void PluginsManager::checkDependencies()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- int index=0;
- int loop_size=pluginsList.size();
- int sub_index,loop_sub_size,resolv_size,indexOfDependencies;
- bool depCheck;
- while(index<loop_size)
- {
- sub_index=0;
- loop_sub_size=pluginsList.at(index).informations.size();
- while(sub_index<loop_sub_size)
- {
- if(pluginsList.at(index).informations.at(sub_index).size()==2 && pluginsList.at(index).informations.at(sub_index).at(0)=="dependencies")
- {
- QString dependencies=pluginsList.at(index).informations.at(sub_index).at(1);
- dependencies=dependencies.replace(QRegExp("[\n\r]+"),"&&");
- dependencies=dependencies.replace(QRegExp("[ \t]+"),"");
- dependencies=dependencies.replace(QRegExp("(&&)+"),"&&");
- dependencies=dependencies.replace(QRegExp("^&&"),"");
- dependencies=dependencies.replace(QRegExp("&&$"),"");
- QStringList dependenciesToResolv=dependencies.split(QRegExp("(&&|\\|\\||\\(|\\))"),QString::SkipEmptyParts);
- indexOfDependencies=0;
- resolv_size=dependenciesToResolv.size();
- while(indexOfDependencies<resolv_size)
- {
- QString dependenciesToParse=dependenciesToResolv.at(indexOfDependencies);
- if(!dependenciesToParse.contains(QRegExp("^(<=|<|=|>|>=)[a-zA-Z0-9\\-]+-([0-9]+\\.)*[0-9]+$")))
- {
- pluginsList[index].informations.clear();
- pluginsList[index].errorString=tr("Dependencies part is wrong");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Dependencies part is wrong: %1").arg(dependenciesToParse));
- break;
- }
- QString partName=dependenciesToParse;
- partName=partName.remove(QRegExp("(<=|<|=|>|>=)"));
- partName=partName.remove(QRegExp("-([0-9]+\\.)*[0-9]+"));
- QString partVersion=dependenciesToParse;
- partVersion=partVersion.remove(QRegExp("(<=|<|=|>|>=)"));
- partVersion=partVersion.remove(QRegExp("[a-zA-Z0-9\\-]+-"));
- QString partComp=dependenciesToParse;
- partComp=partComp.remove(QRegExp("[a-zA-Z0-9\\-]+-([0-9]+\\.)*[0-9]+"));
- //current version soft
- QString pluginVersion=getPluginVersion(partName);
- depCheck=compareVersion(pluginVersion,partComp,partVersion);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"dependencies to resolv, partName: "+partName+", partVersion: "+partVersion+", partComp: "+partComp+", pluginVersion: "+pluginVersion+", depCheck: "+QString::number(depCheck));
- if(!depCheck)
- {
- pluginsList[index].informations.clear();
- pluginsList[index].errorString=tr("Dependencies %1 are not satisfied, for plugin: %2").arg(dependenciesToParse).arg(pluginsList[index].path);
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,QString("Dependencies %1 are not satisfied, for plugin: %2").arg(dependenciesToParse).arg(pluginsList[index].path));
- break;
- }
- indexOfDependencies++;
- }
- }
- sub_index++;
- }
- index++;
- }
+quint32 PluginsManager::checkDependencies()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ quint32 errors=0;
+ int index=0;
+ const int &loop_size=pluginsList.size();
+ int sub_index,loop_sub_size,resolv_size,indexOfDependencies;
+ bool depCheck;
+ while(index<loop_size)
+ {
+ sub_index=0;
+ loop_sub_size=pluginsList.at(index).informations.size();
+ while(sub_index<loop_sub_size)
+ {
+ if(pluginsList.at(index).informations.at(sub_index).size()==2 && pluginsList.at(index).informations.at(sub_index).at(0)==QStringLiteral("dependencies"))
+ {
+ QString dependencies=pluginsList.at(index).informations.at(sub_index).at(1);
+ dependencies=dependencies.replace(regexp_to_clean_1,QStringLiteral("&&"));
+ dependencies=dependencies.replace(regexp_to_clean_2,QStringLiteral(""));
+ dependencies=dependencies.replace(regexp_to_clean_3,QStringLiteral("&&"));
+ dependencies=dependencies.replace(regexp_to_clean_4,QStringLiteral(""));
+ dependencies=dependencies.replace(regexp_to_clean_5,QStringLiteral(""));
+ QStringList dependenciesToResolv=dependencies.split(regexp_to_dep_1,QString::SkipEmptyParts);
+ indexOfDependencies=0;
+ resolv_size=dependenciesToResolv.size();
+ while(indexOfDependencies<resolv_size)
+ {
+ QString dependenciesToParse=dependenciesToResolv.at(indexOfDependencies);
+ if(!dependenciesToParse.contains(regexp_to_dep_2))
+ {
+ pluginsList[index].informations.clear();
+ pluginsList[index].errorString=tr("Dependencies part is wrong");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Dependencies part is wrong: %1").arg(dependenciesToParse));
+ emit onePluginInErrorAdded(pluginsList.at(index));
+ errors++;
+ break;
+ }
+ QString partName=dependenciesToParse;
+ partName=partName.remove(regexp_to_dep_3);
+ partName=partName.remove(regexp_to_dep_4);
+ QString partVersion=dependenciesToParse;
+ partVersion=partVersion.remove(regexp_to_dep_3);
+ partVersion=partVersion.remove(regexp_to_dep_5);
+ QString partComp=dependenciesToParse;
+ partComp=partComp.remove(regexp_to_dep_6);
+ //current version soft
+ QString pluginVersion=getPluginVersion(partName);
+ depCheck=compareVersion(pluginVersion,partComp,partVersion);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("dependencies to resolv, partName: ")+partName+QStringLiteral(", partVersion: ")+partVersion+QStringLiteral(", partComp: ")+partComp+QStringLiteral(", pluginVersion: ")+pluginVersion+QStringLiteral(", depCheck: ")+QString::number(depCheck));
+ if(!depCheck)
+ {
+ pluginsList[index].informations.clear();
+ pluginsList[index].errorString=tr("Dependencies %1 are not satisfied, for plugin: %2").arg(dependenciesToParse).arg(pluginsList[index].path);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("Dependencies %1 are not satisfied, for plugin: %2").arg(dependenciesToParse).arg(pluginsList[index].path));
+ pluginsListIndexed.remove(pluginsList.at(index).category,pluginsList.at(index));
+ emit onePluginInErrorAdded(pluginsList.at(index));
+ errors++;
+ break;
+ }
+ indexOfDependencies++;
+ }
+ }
+ sub_index++;
+ }
+ index++;
+ }
+ return errors;
}
+#endif
/// \brief get the version
-QString PluginsManager::getPluginVersion(const QString &pluginName)
-{
- if(pluginName=="ultracopier")
- return ULTRACOPIER_VERSION;
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- int index=0;
- while(index<pluginsList.size())
- {
- QString version,internalName;
- int sub_index=0;
- while(sub_index<pluginsList.at(index).informations.size())
- {
- if(pluginsList.at(index).informations.at(sub_index).size()==2 && pluginsList.at(index).informations.at(sub_index).at(0)=="version")
- version=pluginsList.at(index).informations.at(sub_index).at(1);
- if(pluginsList.at(index).informations.at(sub_index).size()==2 && pluginsList.at(index).informations.at(sub_index).at(0)=="internalName")
- internalName=pluginsList.at(index).informations.at(sub_index).at(1);
- sub_index++;
- }
- if(internalName==pluginName)
- return version;
- index++;
- }
- return "";
+QString PluginsManager::getPluginVersion(const QString &pluginName) const
+{
+ #ifdef ULTRACOPIER_MODE_SUPERCOPIER
+ if(pluginName==QStringLiteral("supercopier"))
+ return ULTRACOPIER_VERSION;
+ #else
+ if(pluginName==QStringLiteral("ultracopier"))
+ return ULTRACOPIER_VERSION;
+ #endif
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ int index=0;
+ while(index<pluginsList.size())
+ {
+ QString version,internalName;
+ int sub_index=0;
+ while(sub_index<pluginsList.at(index).informations.size())
+ {
+ if(pluginsList.at(index).informations.at(sub_index).size()==2 && pluginsList.at(index).informations.at(sub_index).at(0)==QStringLiteral("version"))
+ version=pluginsList.at(index).informations.at(sub_index).at(1);
+ if(pluginsList.at(index).informations.at(sub_index).size()==2 && pluginsList.at(index).informations.at(sub_index).at(0)==QStringLiteral("internalName"))
+ internalName=pluginsList.at(index).informations.at(sub_index).at(1);
+ sub_index++;
+ }
+ if(internalName==pluginName)
+ return version;
+ index++;
+ }
+ return "";
}
/// \brief To compare version
bool PluginsManager::compareVersion(const QString &versionA,const QString &sign,const QString &versionB)
{
- QStringList versionANumber=versionA.split(".");
- QStringList versionBNumber=versionB.split(".");
- int index=0;
- int defaultReturnValue=true;
- if(sign=="<")
- defaultReturnValue=false;
- if(sign==">")
- defaultReturnValue=false;
- while(index<versionANumber.size() && index<versionBNumber.size())
- {
- unsigned int reaNumberA=versionANumber.at(index).toUInt();
- unsigned int reaNumberB=versionBNumber.at(index).toUInt();
- if(sign=="=" && reaNumberA!=reaNumberB)
- return false;
- if(sign=="<")
- {
- if(reaNumberA>reaNumberB)
- return false;
- if(reaNumberA<reaNumberB)
- return true;
- }
- if(sign==">")
- {
- if(reaNumberA<reaNumberB)
- return false;
- if(reaNumberA>reaNumberB)
- return true;
- }
- if(sign=="<=")
- {
- if(reaNumberA>reaNumberB)
- return false;
- if(reaNumberA<reaNumberB)
- return true;
- }
- if(sign==">=")
- {
- if(reaNumberA<reaNumberB)
- return false;
- if(reaNumberA>reaNumberB)
- return true;
- }
- index++;
- }
- return defaultReturnValue;
-}
-
-QList<PluginsAvailable> PluginsManager::getPluginsByCategory(const PluginType &category)
-{
- return pluginsListIndexed.values(category);
-}
-
-QList<PluginsAvailable> PluginsManager::getPlugins()
-{
- QList<PluginsAvailable> list;
- int index=0;
- while(index<pluginsList.size())
- {
- if(pluginsList.at(index).errorString=="")
- list<<pluginsList.at(index);
- index++;
- }
- return list;
+ QStringList versionANumber=versionA.split(QStringLiteral("."));
+ QStringList versionBNumber=versionB.split(QStringLiteral("."));
+ int index=0;
+ int defaultReturnValue=true;
+ if(sign==QStringLiteral("<"))
+ defaultReturnValue=false;
+ if(sign==QStringLiteral(">"))
+ defaultReturnValue=false;
+ while(index<versionANumber.size() && index<versionBNumber.size())
+ {
+ unsigned int reaNumberA=versionANumber.at(index).toUInt();
+ unsigned int reaNumberB=versionBNumber.at(index).toUInt();
+ if(sign==QStringLiteral("=") && reaNumberA!=reaNumberB)
+ return false;
+ if(sign==QStringLiteral("<"))
+ {
+ if(reaNumberA>reaNumberB)
+ return false;
+ if(reaNumberA<reaNumberB)
+ return true;
+ }
+ if(sign==QStringLiteral(">"))
+ {
+ if(reaNumberA<reaNumberB)
+ return false;
+ if(reaNumberA>reaNumberB)
+ return true;
+ }
+ if(sign==QStringLiteral("<="))
+ {
+ if(reaNumberA>reaNumberB)
+ return false;
+ if(reaNumberA<reaNumberB)
+ return true;
+ }
+ if(sign==QStringLiteral(">="))
+ {
+ if(reaNumberA<reaNumberB)
+ return false;
+ if(reaNumberA>reaNumberB)
+ return true;
+ }
+ index++;
+ }
+ return defaultReturnValue;
+}
+
+QList<PluginsAvailable> PluginsManager::getPluginsByCategory(const PluginType &category) const
+{
+ return pluginsListIndexed.values(category);
+}
+
+QList<PluginsAvailable> PluginsManager::getPlugins(bool withError) const
+{
+ QList<PluginsAvailable> list;
+ int index=0;
+ while(index<pluginsList.size())
+ {
+ if(withError || pluginsList.at(index).errorString.isEmpty())
+ list<<pluginsList.at(index);
+ index++;
+ }
+ return list;
}
/// \brief show the information
void PluginsManager::showInformation(const QString &path)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- int index=0;
- while(index<pluginsList.size())
- {
- if(pluginsList.at(index).path==path)
- {
- pluginInformationWindows.setLanguage(mainShortName);
- pluginInformationWindows.setPlugin(pluginsList.at(index));
- pluginInformationWindows.show();
- return;
- }
- index++;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"item not selected");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ int index=0;
+ while(index<pluginsList.size())
+ {
+ if(pluginsList.at(index).path==path)
+ {
+ if(pluginInformation==NULL)
+ {
+ pluginInformation=new PluginInformation();
+ connect(this, &PluginsManager::newLanguageLoaded, pluginInformation, &PluginInformation::retranslateInformation,Qt::QueuedConnection);
+ }
+ pluginInformation->setLanguage(mainShortName);
+ pluginInformation->setPlugin(pluginsList.at(index));
+ pluginInformation->show();
+ return;
+ }
+ index++;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("item not selected"));
}
void PluginsManager::showInformationDoubleClick()
@@ -621,263 +651,275 @@ void PluginsManager::showInformationDoubleClick()
// showInformation(false);
}
+#ifdef ULTRACOPIER_PLUGIN_IMPORT_SUPPORT
void PluginsManager::removeThePluginSelected(const QString &path)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- int index=0;
- while(index<pluginsList.size())
- {
- if(pluginsList.at(index).path==path)
- {
- QMessageBox::StandardButton reply;
- // if(pluginsList.at(index).internalVersionAlternative.isEmpty())
- reply = QMessageBox::question(NULL,tr("Remove %1").arg(pluginsList.at(index).name),tr("Are you sure about removing \"%1\" in version %2?").arg(pluginsList.at(index).name).arg(pluginsList.at(index).version),QMessageBox::Yes|QMessageBox::No,QMessageBox::No);
- // else
- // reply = QMessageBox::question(NULL,tr("Remove %1").arg(getTranslatedText(pluginsList.at(index),"name",mainShortName)),tr("Are you sure to wish remove \"%1\" in version %2 for the internal version %3?").arg(getTranslatedText(pluginsList.at(index),"name",mainShortName)).arg(pluginsList.at(index).version).arg(pluginsList.at(index).internalVersionAlternative),QMessageBox::Yes|QMessageBox::No,QMessageBox::No);
- if(reply==QMessageBox::Yes)
- {
- emit onePluginWillBeUnloaded(pluginsList.at(index));
- emit onePluginWillBeRemoved(pluginsList.at(index));
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"remove plugin at this path: "+pluginsList.at(index).path);
- if(!ResourcesManager::removeFolder(pluginsList.at(index).path))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"unable to remove the plugin");
- QMessageBox::critical(NULL,tr("Error"),tr("Error while the removing plugin, please check the rights on the folder: \n%1").arg(pluginsList.at(index).path));
- }
- pluginsListIndexed.remove(pluginsList.at(index).category,pluginsList.at(index));
- pluginsList.removeAt(index);
- checkDependencies();
- }
- return;
- }
- index++;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"item not selected");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ int index=0;
+ while(index<pluginsList.size())
+ {
+ if(pluginsList.at(index).path==path)
+ {
+ QMessageBox::StandardButton reply;
+ // if(pluginsList.at(index).internalVersionAlternative.isEmpty())
+ reply = QMessageBox::question(NULL,tr("Remove %1").arg(pluginsList.at(index).name),tr("Are you sure about removing \"%1\" in version %2?").arg(pluginsList.at(index).name).arg(pluginsList.at(index).version),QMessageBox::Yes|QMessageBox::No,QMessageBox::No);
+ // else
+ // reply = QMessageBox::question(NULL,tr("Remove %1").arg(getTranslatedText(pluginsList.at(index),"name",mainShortName)),tr("Are you sure to wish remove \"%1\" in version %2 for the internal version %3?").arg(getTranslatedText(pluginsList.at(index),"name",mainShortName)).arg(pluginsList.at(index).version).arg(pluginsList.at(index).internalVersionAlternative),QMessageBox::Yes|QMessageBox::No,QMessageBox::No);
+ if(reply==QMessageBox::Yes)
+ {
+ emit onePluginWillBeUnloaded(pluginsList.at(index));
+ emit onePluginWillBeRemoved(pluginsList.at(index));
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"remove plugin at this path: "+pluginsList.at(index).path);
+ if(!ResourcesManager::removeFolder(pluginsList.at(index).path))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"unable to remove the plugin");
+ QMessageBox::critical(NULL,tr("Error"),tr("Error while the removing plugin, please check the rights on the folder: \n%1").arg(pluginsList.at(index).path));
+ }
+ pluginsListIndexed.remove(pluginsList.at(index).category,pluginsList.at(index));
+ pluginsList.removeAt(index);
+ while(checkDependencies()!=0){};
+ }
+ return;
+ }
+ index++;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,QStringLiteral("item not selected"));
}
void PluginsManager::addPlugin(const ImportBackend &backend)
{
- if(backend==ImportBackend_File)
- excuteTheFileBackendLoader();
-}
-
-void PluginsManager::excuteTheFileBackendLoader()
-{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(importingPlugin)
- {
- QMessageBox::information(NULL,tr("Information"),tr("Previous import is in progress..."));
- return;
- }
- QString fileName = QFileDialog::getOpenFileName(NULL,tr("Open Ultracopier plugin"),QString(),tr("Ultracopier plugin (*.urc)"));
- if(fileName!="")
- {
- QFile temp(fileName);
- if(temp.open(QIODevice::ReadOnly))
- {
- importingPlugin=true;
- lunchDecodeThread(temp.readAll());
- temp.close();
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"unable to open the file: "+temp.errorString());
- QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to open the plugin: %1").arg(temp.errorString()));
- }
- }
+ if(backend==ImportBackend_File)
+ executeTheFileBackendLoader();
+}
+
+void PluginsManager::executeTheFileBackendLoader()
+{
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ if(importingPlugin)
+ {
+ QMessageBox::information(NULL,tr("Information"),tr("Previous import is in progress..."));
+ return;
+ }
+ QString fileName = QFileDialog::getOpenFileName(NULL,tr("Open Ultracopier plugin"),QString(),tr("Ultracopier plugin (*.urc)"));
+ if(fileName!="")
+ tryLoadPlugin(fileName);
+}
+
+void PluginsManager::tryLoadPlugin(const QString &file)
+{
+ QFile temp(file);
+ if(temp.open(QIODevice::ReadOnly))
+ {
+ importingPlugin=true;
+ lunchDecodeThread(temp.readAll());
+ temp.close();
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"unable to open the file: "+temp.errorString());
+ QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to open the plugin: %1").arg(temp.errorString()));
+ }
}
void PluginsManager::lunchDecodeThread(const QByteArray &data)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- decodeThread.setData(data);
- decodeThread.start(QThread::LowestPriority);
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ decodeThread.setData(data);
+ decodeThread.start(QThread::LowestPriority);
}
void PluginsManager::decodingFinished()
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- if(!decodeThread.errorFound())
- {
- QByteArray data=decodeThread.decodedData();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"data.size(): "+QString::number(data.size()));
- QTarDecode tarFile;
- if(!tarFile.decodeData(data))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"tarFile.errorString(): "+tarFile.errorString());
- QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to load the plugin content, please check it: %1").arg(tarFile.errorString()));
- }
- else
- {
- QStringList fileList = tarFile.getFileList();
- QList<QByteArray> dataList = tarFile.getDataList();
- if(fileList.size()>1)
- {
- QString basePluginArchive="";
- /* block use less for tar?
- if(fileList.at(0).contains(QRegExp("[\\/]")))
- {
- bool folderFoundEveryWhere=true;
- basePluginArchive=fileList.at(0);
- basePluginArchive.remove(QRegExp("[\\/].*$"));
- for (int i = 0; i < list.size(); ++i)
- {
- if(!fileList.at(i).startsWith(basePluginArchive))
- {
- folderFoundEveryWhere=false;
- break;
- }
- }
- if(folderFoundEveryWhere)
- {
- for (int i = 0; i < fileList.size(); ++i)
- fileList[i].remove(0,basePluginArchive.size());
- }
- else
- basePluginArchive="";
- }*/
- PluginsAvailable tempPlugin;
- QString categoryFinal="";
- for (int i = 0; i < fileList.size(); ++i)
- if(fileList.at(i)=="informations.xml")
- {
- loadPluginXml(&tempPlugin,dataList.at(i));
- break;
- }
- if(tempPlugin.errorString=="")
- {
- categoryFinal=categoryToString(tempPlugin.category);
- if(categoryFinal!="")
- {
- QString writablePath=resources->getWritablePath();
- if(writablePath!="")
- {
- QDir dir;
- QString finalPluginPath=writablePath+categoryFinal+QDir::separator()+tempPlugin.name+QDir::separator();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"writablePath: \""+writablePath+"\"");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"basePluginArchive: \""+basePluginArchive+"\"");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"categoryFinal: \""+categoryFinal+"\"");
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"finalPluginPath: \""+finalPluginPath+"\"");
- if(!dir.exists(finalPluginPath))
- {
- bool errorFound=false;
- for (int i = 0; i < fileList.size(); ++i)
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"file "+QString::number(i)+": "+finalPluginPath+fileList.at(i));
- fileList[i].remove(QRegExp("^(..?[\\/])+"));
- QFile currentFile(finalPluginPath+fileList.at(i));
- QFileInfo info(currentFile);
- if(!dir.exists(info.absolutePath()))
- if(!dir.mkpath(info.absolutePath()))
- {
- resources->disableWritablePath();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"Unable to make the path: "+info.absolutePath());
- QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to create a folder to install the plugin:\n%1").arg(info.absolutePath()));
- errorFound=true;
- break;
- }
- if(currentFile.open(QIODevice::ReadWrite))
- {
- currentFile.write(dataList.at(i));
- currentFile.close();
- }
- else
- {
- resources->disableWritablePath();
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"Unable to make the file: "+info.absolutePath()+", error:"+currentFile.errorString());
- QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to create a file to install the plugin:\n%1\nsince:%2").arg(info.absolutePath()).arg(currentFile.errorString()));
- errorFound=true;
- break;
- }
- }
- if(!errorFound)
- {
- if(loadPluginInformation(finalPluginPath))
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Information,"push the new plugin into the real list");
- checkDependencies();
- emit needLangToRefreshPluginList();
- }
- }
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"Folder with same name is present, skip the plugin installation: "+finalPluginPath);
- QMessageBox::critical(NULL,tr("Plugin loader"),tr("Folder with same name is present, skip the plugin installation:\n%1").arg(finalPluginPath));
- }
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Critical,"Have not writable path, then how add you plugin?");
- QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to load the plugin content, please check it"));
- }
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"category into informations.xml not found!");
- QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to load the plugin content, please check it"));
- }
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"Error in the xml: "+tempPlugin.errorString);
- QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to load the plugin content, please check it: %1").arg(tempPlugin.errorString));
- }
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"No file found into the plugin");
- QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to load the plugin content, please check it"));
- }
- }
- }
- else
- {
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"decodeThread.errorFound(), error: "+decodeThread.errorString());
- QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to load the plugin content, please check it: %1").arg(decodeThread.errorString()));
- }
- importingPlugin=false;
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ if(!decodeThread.errorFound())
+ {
+ QByteArray data=decodeThread.decodedData();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"data.size(): "+QString::number(data.size()));
+ QTarDecode tarFile;
+ std::vector<char> cppdata;
+ cppdata.resize(data.size());
+ memcpy(cppdata.data(),data.data(),data.size());
+ if(!tarFile.decodeData(cppdata))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"tarFile.errorString(): "+QString::fromStdString(tarFile.errorString()));
+ QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to load the plugin content, please check it: %1").arg(QString::fromStdString(tarFile.errorString())));
+ }
+ else
+ {
+ std::vector<std::string> fileList = tarFile.getFileList();
+ std::vector<std::vector<char> > dataList = tarFile.getDataList();
+ if(fileList.size()>1)
+ {
+ QString basePluginArchive=QStringLiteral("");
+ /* block use less for tar?
+ if(fileList.at(0).contains(QRegularExpression("[\\/]")))
+ {
+ bool folderFoundEveryWhere=true;
+ basePluginArchive=fileList.at(0);
+ basePluginArchive.remove(QRegularExpression("[\\/].*$"));
+ for (int i = 0; i < list.size(); ++i)
+ {
+ if(!fileList.at(i).startsWith(basePluginArchive))
+ {
+ folderFoundEveryWhere=false;
+ break;
+ }
+ }
+ if(folderFoundEveryWhere)
+ {
+ for (int i = 0; i < fileList.size(); ++i)
+ fileList[i].remove(0,basePluginArchive.size());
+ }
+ else
+ basePluginArchive="";
+ }*/
+ PluginsAvailable tempPlugin;
+ QString categoryFinal=QStringLiteral("");
+ for (unsigned int i = 0; i < fileList.size(); ++i)
+ if(fileList.at(i)=="informations.xml")
+ {
+ loadPluginXml(&tempPlugin,QByteArray(dataList.at(i).data(),dataList.at(i).size()));
+ break;
+ }
+ if(tempPlugin.errorString=="")
+ {
+ categoryFinal=categoryToString(tempPlugin.category);
+ if(categoryFinal!="")
+ {
+ QString writablePath=ResourcesManager::resourcesManager->getWritablePath();
+ if(writablePath!="")
+ {
+ QDir dir;
+ QString finalPluginPath=writablePath+categoryFinal+QDir::separator()+tempPlugin.name+QDir::separator();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"writablePath: \""+writablePath+"\"");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"basePluginArchive: \""+basePluginArchive+"\"");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,"categoryFinal: \""+categoryFinal+"\"");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"finalPluginPath: \""+finalPluginPath+"\"");
+ if(!dir.exists(finalPluginPath))
+ {
+ bool errorFound=false;
+ for (unsigned int i = 0; i < fileList.size(); ++i)
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"file "+QString::number(i)+": "+finalPluginPath+QString::fromStdString(fileList.at(i)));
+ QString fileListEntry=QString::fromStdString(fileList[i]);
+ fileListEntry.remove(QRegularExpression("^(..?[\\/])+"));
+ QFile currentFile(finalPluginPath+fileListEntry);
+ QFileInfo info(currentFile);
+ if(!dir.exists(info.absolutePath()))
+ if(!dir.mkpath(info.absolutePath()))
+ {
+ ResourcesManager::resourcesManager->disableWritablePath();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"Unable to make the path: "+info.absolutePath());
+ QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to create a folder to install the plugin:\n%1").arg(info.absolutePath()));
+ errorFound=true;
+ break;
+ }
+ if(currentFile.open(QIODevice::ReadWrite))
+ {
+ currentFile.write(QByteArray(dataList.at(i).data(),dataList.at(i).size()));
+ currentFile.close();
+ }
+ else
+ {
+ ResourcesManager::resourcesManager->disableWritablePath();
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"Unable to make the file: "+info.absolutePath()+", error:"+currentFile.errorString());
+ QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to create a file to install the plugin:\n%1\nsince:%2").arg(info.absolutePath()).arg(currentFile.errorString()));
+ errorFound=true;
+ break;
+ }
+ }
+ if(!errorFound)
+ {
+ if(loadPluginInformation(finalPluginPath))
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Information,"push the new plugin into the real list");
+ while(checkDependencies()!=0){};
+ emit needLangToRefreshPluginList();
+ emit manuallyAdded(tempPlugin);
+ }
+ }
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"Folder with same name is present, skip the plugin installation: "+finalPluginPath);
+ QMessageBox::critical(NULL,tr("Plugin loader"),tr("Folder with same name is present, skip the plugin installation:\n%1").arg(finalPluginPath));
+ }
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Critical,"Have not writable path, then how add you plugin?");
+ QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to load the plugin content, please check it"));
+ }
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"category into informations.xml not found!");
+ QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to load the plugin content, please check it"));
+ }
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"Error in the xml: "+tempPlugin.errorString);
+ QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to load the plugin content, please check it: %1").arg(tempPlugin.errorString));
+ }
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"No file found into the plugin");
+ QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to load the plugin content, please check it"));
+ }
+ }
+ }
+ else
+ {
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"decodeThread.errorFound(), error: "+decodeThread.errorString());
+ QMessageBox::critical(NULL,tr("Plugin loader"),tr("Unable to load the plugin content, please check it: %1").arg(decodeThread.errorString()));
+ }
+ importingPlugin=false;
}
+#endif
+#ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
void PluginsManager::newAuthPath(const QString &path)
{
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Notice,"start");
- int index=0;
- while(index<pluginsList.size())
- {
- if(pluginsList.at(index).path==path)
- {
- pluginsList[index].isAuth=true;
- return;
- }
- index++;
- }
- ULTRACOPIER_DEBUGCONSOLE(DebugLevel_Warning,"plugin not located");
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Notice,QStringLiteral("start"));
+ int index=0;
+ while(index<pluginsList.size())
+ {
+ if(pluginsList.at(index).path==path)
+ {
+ pluginsList[index].isAuth=true;
+ return;
+ }
+ index++;
+ }
+ ULTRACOPIER_DEBUGCONSOLE(Ultracopier::DebugLevel_Warning,"plugin not located");
}
+#endif
/// \brief transfor short plugin name into file name
QString PluginsManager::getResolvedPluginName(const QString &name)
{
- #if defined(Q_OS_LINUX)
- return "lib"+name+".so";
- #elif defined(Q_OS_MAC)
- #if defined(QT_DEBUG)
- return "lib"+name+"_debug.dylib";
- #else
- return "lib"+name+".dylib";
- #endif
- #elif defined(Q_OS_WIN32)
- #if defined(QT_DEBUG)
- return name+"d.dll";
- #else
- return name+".dll";
- #endif
- #else
- #error "Platform not supported"
- #endif
+ #if defined(Q_OS_LINUX)
+ return QStringLiteral("lib")+name+QStringLiteral(".so");
+ #elif defined(Q_OS_MAC)
+ #if defined(QT_DEBUG)
+ return QStringLiteral("lib")+name+QStringLiteral("_debug.dylib");
+ #else
+ return QStringLiteral("lib")+name+QStringLiteral(".dylib");
+ #endif
+ #elif defined(Q_OS_WIN32)
+ #if defined(QT_DEBUG)
+ return name+QStringLiteral("d.dll");
+ #else
+ return name+QStringLiteral(".dll");
+ #endif
+ #else
+ #error "Platform not supported"
+ #endif
}
bool operator==(PluginsAvailable pluginA,PluginsAvailable pluginB)
{
- return PluginsManager::isSamePlugin(pluginA,pluginB);
+ return PluginsManager::isSamePlugin(pluginA,pluginB);
}