summaryrefslogtreecommitdiff
path: root/CopyEngineManager.h
diff options
context:
space:
mode:
Diffstat (limited to 'CopyEngineManager.h')
-rw-r--r--CopyEngineManager.h105
1 files changed, 105 insertions, 0 deletions
diff --git a/CopyEngineManager.h b/CopyEngineManager.h
new file mode 100644
index 0000000..904508c
--- /dev/null
+++ b/CopyEngineManager.h
@@ -0,0 +1,105 @@
+/** \file CopyEngineManager.h
+\brief Define the copy engine manager
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef COPYENGINEMANAGER_H
+#define COPYENGINEMANAGER_H
+
+#include <QObject>
+#ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
+#include <QPluginLoader>
+#endif
+#include <QList>
+#include <QWidget>
+#include <QString>
+
+#include "Environment.h"
+#include "LocalPluginOptions.h"
+#include "OptionDialog.h"
+#include "interface/PluginInterface_CopyEngine.h"
+#include "FacilityEngine.h"
+
+namespace Ui {
+ class CopyEngineOptions;
+}
+
+/** \brief Manage copy engine plugins and their instance */
+class CopyEngineManager : public QObject
+{
+ Q_OBJECT
+public:
+ /** \brief internal structure to return one copy engine instance */
+ struct returnCopyEngine
+ {
+ PluginInterface_CopyEngine * engine; ///< The copy engine instance
+ bool canDoOnlyCopy; ///< true if can do only the copy (not move)
+ Ultracopier::CopyType type; ///< Kind of copy what it can do
+ Ultracopier::TransferListOperation transferListOperation;
+ };
+ explicit CopyEngineManager(OptionDialog *optionDialog);
+ /** \brief return copy engine instance when know the sources and destinations
+ \param mode the mode (copy/move)
+ \param protocolsUsedForTheSources list of sources used
+ \param protocolsUsedForTheDestination list of destination used
+ \see getCopyEngine()
+ */
+ returnCopyEngine getCopyEngine(const Ultracopier::CopyMode &mode,const std::vector<std::string> &protocolsUsedForTheSources,const std::string &protocolsUsedForTheDestination);
+ /** \brief return copy engine instance with specific engine
+ \param mode the mode (copy/move)
+ \param name name of the engine needed
+ \see getCopyEngine()
+ */
+ returnCopyEngine getCopyEngine(const Ultracopier::CopyMode &mode,const std::string &name);
+ //bool currentEngineCanDoOnlyCopy(std::vector<std::string> protocolsUsedForTheSources,std::string protocolsUsedForTheDestination="");
+ //CopyType currentEngineGetCopyType(std::vector<std::string> protocolsUsedForTheSources,std::string protocolsUsedForTheDestination="");
+ /** \brief to send all signal because all object is connected on it */
+ void setIsConnected();
+ /** \brief check if the protocols given is supported by the copy engine
+ \see Core::newCopy()
+ \see Core::newMove()
+ */
+ bool protocolsSupportedByTheCopyEngine(PluginInterface_CopyEngine * engine,const std::vector<std::string> &protocolsUsedForTheSources,const std::string &protocolsUsedForTheDestination);
+private slots:
+ void onePluginAdded(const PluginsAvailable &plugin);
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE
+ void onePluginWillBeRemoved(const PluginsAvailable &plugin);
+ void onePluginWillBeUnloaded(const PluginsAvailable &plugin);
+ #endif
+ #ifdef ULTRACOPIER_DEBUG
+ void debugInformation(const Ultracopier::DebugLevel &level, const std::string& fonction, const std::string& text, const std::string& file, const int& ligne);
+ #endif // ULTRACOPIER_DEBUG
+ /// \brief To notify when new value into a group have changed
+ void newOptionValue(const std::string &groupName,const std::string &variableName,const std::string &value);
+ void allPluginIsloaded();
+private:
+ /// \brief the option interface
+ struct CopyEnginePlugin
+ {
+ std::string path;
+ std::string name;
+ std::string pluginPath;
+ std::vector<std::string> supportedProtocolsForTheSource;
+ std::vector<std::string> supportedProtocolsForTheDestination;
+ #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE_DIRECT
+ QPluginLoader * pointer;
+ #endif
+ PluginInterface_CopyEngineFactory * factory;
+ std::vector<PluginInterface_CopyEngine *> intances;
+ bool canDoOnlyCopy;
+ Ultracopier::CopyType type;
+ Ultracopier::TransferListOperation transferListOperation;
+ LocalPluginOptions *options;
+ QWidget *optionsWidget;
+ };
+ std::vector<CopyEnginePlugin> pluginList;
+ OptionDialog *optionDialog;
+ bool isConnected;
+signals:
+ //void newCopyEngineOptions(std::string,std::string,QWidget *);
+ void addCopyEngine(std::string name,bool canDoOnlyCopy) const;
+ void removeCopyEngine(std::string name) const;
+ void previouslyPluginAdded(PluginsAvailable) const;
+};
+
+#endif // COPYENGINEMANAGER_H