summaryrefslogtreecommitdiff
path: root/CopyListener.h
blob: c5cd84e3a7a0e2667e6ef12ae9ac4717f763abbe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/** \file CopyListener.h
\brief Define the class to load the plugin and lunch it
\author alpha_one_x86
\version 0.3
\date 2010
\licence GPL3, see the file COPYING */ 

#ifndef COPYLISTENER_H
#define COPYLISTENER_H

#include <QObject>
#include <QList>
#include <QPluginLoader>

#include "interface/PluginInterface_Listener.h"
#include "Environment.h"
#include "GlobalClass.h"
#include "PluginLoader.h"

/** \brief to load all the listener and parse all event */
class CopyListener : public QObject, public GlobalClass
{
	Q_OBJECT
	public:
		explicit CopyListener(QObject *parent = 0);
		~CopyListener();
		/** \brief send of one listener is loaded */
		bool oneListenerIsLoaded();
		/** \brief to resend the state */
		void resendState();
	private slots:
		//void newPlugin();
		void newPluginCopy(const quint32 &orderId,const QStringList &sources);
		void newPluginCopy(const quint32 &orderId,const QStringList &sources,const QString &destination);
		void newPluginMove(const quint32 &orderId,const QStringList &sources);
		void newPluginMove(const quint32 &orderId,const QStringList &sources,const QString &destination);
		void onePluginAdded(const PluginsAvailable &plugin);
		void onePluginWillBeRemoved(const PluginsAvailable &plugin);
		void newState(const ListeningState &state);
		#ifdef ULTRACOPIER_DEBUG
		void debugInformation(DebugLevel level,const QString& fonction,const QString& text,const QString& file,const int& ligne);
		#endif // ULTRACOPIER_DEBUG
		void allPluginIsloaded();
	public slots:
		/** \brief the copy is finished
		 \param orderId id used when it have send the copy
		 \param withError true if it have found error
		 \see newCopy()
		 \see newMove()
		*/
		void copyFinished(const quint32 & orderId,const bool &withError);
		/** \brief the copy is canceled by the user
		 \param orderId id used when it have send the copy
		 \see newCopy()
		 \see newMove()
		*/
		void copyCanceled(const quint32 & orderId);
		/** \brief try listen, to get copy/move from external source (mainly the file manager)
		 \see close()
		*/
		void listen();
		/** \brief stop listen, to get copy/move from external source (mainly the file manager)
		 \see listen()
		*/
		void close();
		/** new copy without destination have been pased by the CLI */
		void newCopy(QStringList sources);
		/** new copy with destination have been pased by the CLI */
		void newCopy(QStringList sources,QString destination);
		/** new move without destination have been pased by the CLI */
		void newMove(QStringList sources);
		/** new move with destination have been pased by the CLI */
		void newMove(QStringList sources,QString destination);
	signals:
		void newCopy(quint32 orderId,QStringList protocolsUsedForTheSources,QStringList sources);
		void newCopy(quint32 orderId,QStringList protocolsUsedForTheSources,QStringList sources,QString protocolsUsedForTheDestination,QString destination);
		void newMove(quint32 orderId,QStringList protocolsUsedForTheSources,QStringList sources);
		void newMove(quint32 orderId,QStringList protocolsUsedForTheSources,QStringList sources,QString protocolsUsedForTheDestination,QString destination);
		void listenerReady(ListeningState state,bool havePlugin,bool someAreInWaitOfReply);
		void pluginLoaderReady(CatchState state,bool havePlugin,bool someAreInWaitOfReply);
	private:
		struct PluginListener
		{
			PluginInterface_Listener *listenInterface;
			QPluginLoader *pluginLoader;
			QString path;
			ListeningState state;
			bool inWaitOfReply;
			LocalPluginOptions *options;
		};
		QList<PluginListener> pluginList;
		//for the options
		quint32 nextOrderId;
		QList<quint32> orderList;
		//for the copy as suspend
		struct CopyRunning
		{
			PluginInterface_Listener *listenInterface;
			quint32 pluginOrderId;
			quint32 orderId;
		};
		QList<CopyRunning> copyRunningList;
		quint32 incrementOrderId();
		bool tryListen;
		PluginLoader pluginLoader;
		ListeningState last_state;
		bool last_have_plugin,last_inWaitOfReply;
		void sendState(bool force=false);
		QStringList parseWildcardSources(QStringList sources);
		QStringList stripSeparator(QStringList sources);
};

#endif // COPYLISTENER_H