1 #include "QTMegaListener.h"
2 #include "QTMegaEvent.h"
3 
4 #include <QCoreApplication>
5 
6 using namespace mega;
7 using namespace std;
8 
QTMegaListener(MegaApi * megaApi,MegaListener * listener)9 QTMegaListener::QTMegaListener(MegaApi *megaApi, MegaListener *listener) : QObject()
10 {
11     this->megaApi = megaApi;
12 	this->listener = listener;
13 }
14 
~QTMegaListener()15 QTMegaListener::~QTMegaListener()
16 {
17     this->listener = NULL;
18     if (megaApi)
19     {
20         megaApi->removeListener(this);
21     }
22 }
23 
onRequestStart(MegaApi * api,MegaRequest * request)24 void QTMegaListener::onRequestStart(MegaApi *api, MegaRequest *request)
25 {
26     if (request->getType() == MegaRequest::TYPE_DELETE)
27     {
28         megaApi = NULL;
29     }
30 
31     QTMegaEvent *event = new QTMegaEvent(api, (QEvent::Type)QTMegaEvent::OnRequestStart);
32     event->setRequest(request->copy());
33     QCoreApplication::postEvent(this, event, INT_MIN);
34 }
35 
onRequestFinish(MegaApi * api,MegaRequest * request,MegaError * e)36 void QTMegaListener::onRequestFinish(MegaApi *api, MegaRequest *request, MegaError *e)
37 {
38     QTMegaEvent *event = new QTMegaEvent(api, (QEvent::Type)QTMegaEvent::OnRequestFinish);
39     event->setRequest(request->copy());
40     event->setError(e->copy());
41     QCoreApplication::postEvent(this, event, INT_MIN);
42 }
43 
onRequestUpdate(MegaApi * api,MegaRequest * request)44 void QTMegaListener::onRequestUpdate(MegaApi *api, MegaRequest *request)
45 {
46     QTMegaEvent *event = new QTMegaEvent(api, (QEvent::Type)QTMegaEvent::OnRequestUpdate);
47     event->setRequest(request->copy());
48     QCoreApplication::postEvent(this, event, INT_MIN);
49 }
50 
onRequestTemporaryError(MegaApi * api,MegaRequest * request,MegaError * e)51 void QTMegaListener::onRequestTemporaryError(MegaApi *api, MegaRequest *request, MegaError *e)
52 {
53     QTMegaEvent *event = new QTMegaEvent(api, (QEvent::Type)QTMegaEvent::OnRequestTemporaryError);
54     event->setRequest(request->copy());
55     event->setError(e->copy());
56     QCoreApplication::postEvent(this, event, INT_MIN);
57 }
58 
onTransferStart(MegaApi * api,MegaTransfer * transfer)59 void QTMegaListener::onTransferStart(MegaApi *api, MegaTransfer *transfer)
60 {
61     QTMegaEvent *event = new QTMegaEvent(api, (QEvent::Type)QTMegaEvent::OnTransferStart);
62     event->setTransfer(transfer->copy());
63     QCoreApplication::postEvent(this, event, INT_MIN);
64 }
65 
onTransferFinish(MegaApi * api,MegaTransfer * transfer,MegaError * e)66 void QTMegaListener::onTransferFinish(MegaApi *api, MegaTransfer *transfer, MegaError *e)
67 {
68     QTMegaEvent *event = new QTMegaEvent(api, (QEvent::Type)QTMegaEvent::OnTransferFinish);
69     event->setTransfer(transfer->copy());
70     event->setError(e->copy());
71     QCoreApplication::postEvent(this, event, INT_MIN);
72 }
73 
onTransferUpdate(MegaApi * api,MegaTransfer * transfer)74 void QTMegaListener::onTransferUpdate(MegaApi *api, MegaTransfer *transfer)
75 {
76     QTMegaEvent *event = new QTMegaEvent(api, (QEvent::Type)QTMegaEvent::OnTransferUpdate);
77     event->setTransfer(transfer->copy());
78     QCoreApplication::postEvent(this, event, INT_MIN);
79 }
80 
onTransferTemporaryError(MegaApi * api,MegaTransfer * transfer,MegaError * e)81 void QTMegaListener::onTransferTemporaryError(MegaApi *api, MegaTransfer *transfer, MegaError *e)
82 {
83     QTMegaEvent *event = new QTMegaEvent(api, (QEvent::Type)QTMegaEvent::OnTransferTemporaryError);
84     event->setTransfer(transfer->copy());
85     event->setError(e->copy());
86     QCoreApplication::postEvent(this, event, INT_MIN);
87 }
88 
onUsersUpdate(MegaApi * api,MegaUserList * users)89 void QTMegaListener::onUsersUpdate(MegaApi *api, MegaUserList *users)
90 {
91     QTMegaEvent *event = new QTMegaEvent(api, (QEvent::Type)QTMegaEvent::OnUsersUpdate);
92     event->setUsers(users ? users->copy() : NULL);
93     QCoreApplication::postEvent(this, event, INT_MIN);
94 }
95 
onUserAlertsUpdate(MegaApi * api,MegaUserAlertList * alerts)96 void QTMegaListener::onUserAlertsUpdate(MegaApi *api, MegaUserAlertList *alerts)
97 {
98     QTMegaEvent *event = new QTMegaEvent(api, (QEvent::Type)QTMegaEvent::OnUserAlertsUpdate);
99     event->setUserAlerts(alerts ? alerts->copy() : NULL);
100     QCoreApplication::postEvent(this, event, INT_MIN);
101 }
102 
onNodesUpdate(MegaApi * api,MegaNodeList * nodes)103 void QTMegaListener::onNodesUpdate(MegaApi *api, MegaNodeList *nodes)
104 {
105     QTMegaEvent *event = new QTMegaEvent(api, (QEvent::Type)QTMegaEvent::OnNodesUpdate);
106     event->setNodes(nodes ? nodes->copy() : NULL);
107     QCoreApplication::postEvent(this, event, INT_MIN);
108 }
109 
onAccountUpdate(MegaApi * api)110 void QTMegaListener::onAccountUpdate(MegaApi *api)
111 {
112     QTMegaEvent *event = new QTMegaEvent(api, (QEvent::Type)QTMegaEvent::OnAccountUpdate);
113     QCoreApplication::postEvent(this, event, INT_MIN);
114 }
115 
onReloadNeeded(MegaApi * api)116 void QTMegaListener::onReloadNeeded(MegaApi *api)
117 {
118     QTMegaEvent *event = new QTMegaEvent(api, (QEvent::Type)QTMegaEvent::OnReloadNeeded);
119     QCoreApplication::postEvent(this, event, INT_MIN);
120 }
121 
onEvent(MegaApi * api,MegaEvent * e)122 void QTMegaListener::onEvent(MegaApi *api, MegaEvent *e)
123 {
124     QTMegaEvent *event = new QTMegaEvent(api, (QEvent::Type)QTMegaEvent::OnEvent);
125     event->setEvent(e->copy());
126     QCoreApplication::postEvent(this, event, INT_MIN);
127 }
128 
129 #ifdef ENABLE_SYNC
onSyncStateChanged(MegaApi * api,MegaSync * sync)130 void QTMegaListener::onSyncStateChanged(MegaApi *api, MegaSync *sync)
131 {
132     QTMegaEvent *event = new QTMegaEvent(api, (QEvent::Type)QTMegaEvent::OnSyncStateChanged);
133     event->setSync(sync->copy());
134     QCoreApplication::postEvent(this, event, INT_MIN);
135 }
136 
onSyncFileStateChanged(MegaApi * api,MegaSync * sync,string * localPath,int newState)137 void QTMegaListener::onSyncFileStateChanged(MegaApi *api, MegaSync *sync, string *localPath, int newState)
138 {
139     QTMegaEvent *event = new QTMegaEvent(api, (QEvent::Type)QTMegaEvent::OnFileSyncStateChanged);
140     event->setSync(sync->copy());
141     event->setLocalPath(new string(*localPath));
142     event->setNewState(newState);
143     QCoreApplication::postEvent(this, event, INT_MIN);
144 }
145 
onGlobalSyncStateChanged(MegaApi * api)146 void QTMegaListener::onGlobalSyncStateChanged(MegaApi *api)
147 {
148     QTMegaEvent *event = new QTMegaEvent(api, (QEvent::Type)QTMegaEvent::OnGlobalSyncStateChanged);
149     QCoreApplication::postEvent(this, event, INT_MIN);
150 }
151 #endif
152 
customEvent(QEvent * e)153 void QTMegaListener::customEvent(QEvent *e)
154 {
155     QTMegaEvent *event = (QTMegaEvent *)e;
156     switch(event->type())
157     {
158         case QTMegaEvent::OnRequestStart:
159             if(listener) listener->onRequestStart(event->getMegaApi(), event->getRequest());
160             break;
161         case QTMegaEvent::OnRequestUpdate:
162             if(listener) listener->onRequestUpdate(event->getMegaApi(), event->getRequest());
163             break;
164         case QTMegaEvent::OnRequestFinish:
165             if(listener) listener->onRequestFinish(event->getMegaApi(), event->getRequest(), event->getError());
166             break;
167         case QTMegaEvent::OnRequestTemporaryError:
168             if(listener) listener->onRequestTemporaryError(event->getMegaApi(), event->getRequest(), event->getError());
169             break;
170         case QTMegaEvent::OnTransferStart:
171             if(listener) listener->onTransferStart(event->getMegaApi(), event->getTransfer());
172             break;
173         case QTMegaEvent::OnTransferTemporaryError:
174             if(listener) listener->onTransferTemporaryError(event->getMegaApi(), event->getTransfer(), event->getError());
175             break;
176         case QTMegaEvent::OnTransferUpdate:
177             if(listener) listener->onTransferUpdate(event->getMegaApi(), event->getTransfer());
178             break;
179         case QTMegaEvent::OnTransferFinish:
180             if(listener) listener->onTransferFinish(event->getMegaApi(), event->getTransfer(), event->getError());
181             break;
182         case QTMegaEvent::OnUsersUpdate:
183             if(listener) listener->onUsersUpdate(event->getMegaApi(), event->getUsers());
184             break;
185         case QTMegaEvent::OnUserAlertsUpdate:
186             if(listener) listener->onUserAlertsUpdate(event->getMegaApi(), event->getUserAlerts());
187             break;
188         case QTMegaEvent::OnNodesUpdate:
189             if(listener) listener->onNodesUpdate(event->getMegaApi(), event->getNodes());
190             break;
191         case QTMegaEvent::OnAccountUpdate:
192             if(listener) listener->onAccountUpdate(event->getMegaApi());
193             break;
194         case QTMegaEvent::OnReloadNeeded:
195             if(listener) listener->onReloadNeeded(event->getMegaApi());
196             break;
197         case QTMegaEvent::OnEvent:
198             if(listener) listener->onEvent(event->getMegaApi(), event->getEvent());
199             break;
200 #if ENABLE_SYNC
201         case QTMegaEvent::OnSyncStateChanged:
202             if(listener) listener->onSyncStateChanged(event->getMegaApi(), event->getSync());
203             break;
204         case QTMegaEvent::OnFileSyncStateChanged:
205             if(listener) listener->onSyncFileStateChanged(event->getMegaApi(), event->getSync(), event->getLocalPath(), event->getNewState());
206             break;
207         case QTMegaEvent::OnGlobalSyncStateChanged:
208             if(listener) listener->onGlobalSyncStateChanged(event->getMegaApi());
209             break;
210 #endif
211         default:
212             break;
213     }
214 }
215