96
96
QOrganizerEDSEngine::~QOrganizerEDSEngine()
98
Q_FOREACH(QOrganizerAbstractRequest *req, m_runningRequests.keys()) {
98
QList<QOrganizerAbstractRequest*> reqs = m_runningRequests.keys();
99
Q_FOREACH(QOrganizerAbstractRequest *req, reqs) {
131
132
void QOrganizerEDSEngine::itemsAsyncStart(FetchRequestData *data)
134
// check if request was destroyed by the caller
135
if (!data->isLive()) {
136
releaseRequestData(data);
133
140
QString collection = data->nextCollection();
134
141
if (!collection.isEmpty()) {
135
142
EClient *client = data->parent()->d->m_sourceRegistry->client(collection);
164
releaseRequestData(data);
161
168
void QOrganizerEDSEngine::itemsAsyncDone(FetchRequestData *data)
163
itemsAsyncStart(data);
170
if (data->isLive()) {
171
itemsAsyncStart(data);
173
releaseRequestData(data);
166
177
void QOrganizerEDSEngine::itemsAsyncListed(ECalComponent *comp,
171
182
Q_UNUSED(instanceStart);
172
183
Q_UNUSED(instanceEnd);
174
icalcomponent *icalComp = icalcomponent_new_clone(e_cal_component_get_icalcomponent(comp));
176
data->appendResult(icalComp);
185
if (data->isLive()) {
186
icalcomponent *icalComp = icalcomponent_new_clone(e_cal_component_get_icalcomponent(comp));
188
data->appendResult(icalComp);
192
205
qWarning() << "Fail to list events in calendar" << gError->message;
193
206
g_error_free(gError);
195
data->finish(QOrganizerManager::InvalidCollectionError);
208
if (data->isLive()) {
209
data->finish(QOrganizerManager::InvalidCollectionError);
211
releaseRequestData(data);
215
// check if request was destroyed by the caller
216
if (data->isLive()) {
199
217
data->appendResults(data->parent()->parseEvents(data->collection(), events, false));
218
itemsAsyncStart(data);
220
releaseRequestData(data);
201
itemsAsyncStart(data);
204
224
void QOrganizerEDSEngine::itemsByIdAsync(QOrganizerItemFetchByIdRequest *req)
210
230
void QOrganizerEDSEngine::itemsByIdAsyncStart(FetchByIdRequestData *data)
232
// check if request was destroyed by the caller
233
if (!data->isLive()) {
234
releaseRequestData(data);
212
238
QString id = data->nextId();
213
239
if (!id.isEmpty()) {
214
240
QStringList ids = id.split("/");
254
280
g_error_free(gError);
256
282
data->appendResult(QOrganizerItem());
257
} else if (icalComp) {
283
} else if (icalComp && data->isLive()) {
258
284
GSList *events = g_slist_append(0, icalComp);
259
285
QList<QOrganizerItem> items = data->parent()->parseEvents(data->currentCollectionId(), events, true);
260
286
Q_ASSERT(items.size() == 1);
261
287
data->appendResult(items[0]);
262
288
g_slist_free_full(events, (GDestroyNotify) icalcomponent_free);
264
itemsByIdAsyncStart(data);
291
if (data->isLive()) {
292
itemsByIdAsyncStart(data);
294
releaseRequestData(data);
267
298
void QOrganizerEDSEngine::itemOcurrenceAsync(QOrganizerItemOccurrenceFetchRequest *req)
300
330
qWarning() << "Fail to get object for id:" << data->request<QOrganizerItemOccurrenceFetchRequest>()->parentItem();
301
331
g_error_free(error);
302
data->finish(QOrganizerManager::DoesNotExistError);
332
if (data->isLive()) {
333
data->finish(QOrganizerManager::DoesNotExistError);
335
releaseRequestData(data);
307
e_cal_client_generate_instances_for_object(data->client(),
312
(ECalRecurInstanceFn) QOrganizerEDSEngine::itemOcurrenceAsyncListed,
314
(GDestroyNotify) QOrganizerEDSEngine::itemOcurrenceAsyncDone);
339
if (data->isLive()) {
340
e_cal_client_generate_instances_for_object(data->client(),
345
(ECalRecurInstanceFn) QOrganizerEDSEngine::itemOcurrenceAsyncListed,
347
(GDestroyNotify) QOrganizerEDSEngine::itemOcurrenceAsyncDone);
349
releaseRequestData(data);
317
353
void QOrganizerEDSEngine::itemOcurrenceAsyncListed(ECalComponent *comp,
457
501
void QOrganizerEDSEngine::saveItemsAsyncStart(SaveRequestData *data)
503
// check if request was destroyed by the caller
504
if (!data->isLive()) {
505
releaseRequestData(data);
459
509
QString collectionId = data->nextCollection();
461
511
if (collectionId.isNull() && data->end()) {
513
releaseRequestData(data);
466
516
bool createItems = true;
537
587
Q_UNUSED(source_object);
539
589
GError *gError = 0;
540
gboolean result = e_cal_client_modify_objects_finish(E_CAL_CLIENT(data->client()),
590
e_cal_client_modify_objects_finish(E_CAL_CLIENT(data->client()),
544
QCoreApplication::processEvents();
547
595
qWarning() << "Fail to modify items" << gError->message;
548
596
g_error_free(gError);
550
Q_FOREACH(const QOrganizerItem &i, data->workingItems()) {
551
data->appendResult(i, QOrganizerManager::UnspecifiedError);
598
if (data->isLive()) {
599
Q_FOREACH(const QOrganizerItem &i, data->workingItems()) {
600
data->appendResult(i, QOrganizerManager::UnspecifiedError);
603
} else if (data->isLive()) {
554
604
data->appendResults(data->workingItems());
557
saveItemsAsyncStart(data);
607
if (data->isLive()) {
608
saveItemsAsyncStart(data);
610
releaseRequestData(data);
560
614
void QOrganizerEDSEngine::saveItemsAsyncCreated(GObject *source_object,
572
QCoreApplication::processEvents();
574
627
qWarning() << "Fail to create items:" << gError->message;
575
628
g_error_free(gError);
578
Q_FOREACH(const QOrganizerItem &i, data->workingItems()) {
579
data->appendResult(i, QOrganizerManager::UnspecifiedError);
631
if (data->isLive()) {
632
Q_FOREACH(const QOrganizerItem &i, data->workingItems()) {
633
data->appendResult(i, QOrganizerManager::UnspecifiedError);
636
} else if (data->isLive()) {
582
637
QString currentCollectionId = data->currentCollection();
583
638
if (currentCollectionId.isEmpty()) {
584
639
currentCollectionId = data->parent()->defaultCollection(0).id().toString();
600
655
data->appendResults(items);
603
saveItemsAsyncStart(data);
658
// check if request was destroyed by the caller
659
if (data->isLive()) {
660
saveItemsAsyncStart(data);
662
releaseRequestData(data);
606
666
bool QOrganizerEDSEngine::saveItems(QList<QtOrganizer::QOrganizerItem> *items,
640
700
void QOrganizerEDSEngine::removeItemsByIdAsyncStart(RemoveByIdRequestData *data)
702
// check if request was destroyed by the caller
703
if (!data->isLive()) {
704
releaseRequestData(data);
642
708
QString collectionId = data->next();
643
709
for(; !collectionId.isNull(); collectionId = data->next()) {
644
710
EClient *client = data->parent()->d->m_sourceRegistry->client(collectionId);
647
713
GSList *ids = data->compIds();
648
714
GError *gError = 0;
649
715
e_cal_client_remove_objects_sync(data->client(), ids, E_CAL_OBJ_MOD_THIS, 0, 0);
650
QCoreApplication::processEvents();
652
717
qWarning() << "Fail to remove Items" << gError->message;
653
718
g_error_free(gError);
676
741
void QOrganizerEDSEngine::removeItemsAsyncStart(RemoveRequestData *data)
743
// check if request was destroyed by the caller
744
if (!data->isLive()) {
745
releaseRequestData(data);
678
749
QOrganizerCollectionId collection = data->next();
679
750
for(; !collection.isNull(); collection = data->next()) {
680
751
EClient *client = data->parent()->d->m_sourceRegistry->client(collection.toString());
683
754
GSList *ids = data->compIds();
684
755
GError *gError = 0;
685
756
e_cal_client_remove_objects_sync(data->client(), ids, E_CAL_OBJ_MOD_THIS, 0, 0);
686
QCoreApplication::processEvents();
688
758
qWarning() << "Fail to remove Items" << gError->message;
689
759
g_error_free(gError);
802
872
GError *gError = 0;
803
873
e_source_registry_create_sources_finish(registry, res, &gError);
875
// avoid return immediately after create the source, because EDS is not ready to write on the source
804
876
QCoreApplication::processEvents();
807
878
qWarning() << "Fail to create sources:" << gError->message;
808
879
g_error_free(gError);
809
data->finish(QOrganizerManager::InvalidCollectionError);
880
if (data->isLive()) {
881
data->finish(QOrganizerManager::InvalidCollectionError);
882
releaseRequestData(data);
885
} else if (data->isLive()) {
812
886
data->commitSourceCreated();
813
887
data->prepareToUpdate();
814
888
saveCollectionUpdateAsyncStart(data);
818
892
void QOrganizerEDSEngine::saveCollectionUpdateAsyncStart(SaveCollectionRequestData *data)
894
// check if request was destroyed by the caller
895
if (!data->isLive()) {
896
releaseRequestData(data);
820
900
ESource *source = data->nextSourceToUpdate();
822
e_source_registry_commit_source(data->registry(),
825
(GAsyncReadyCallback) QOrganizerEDSEngine::saveCollectionUpdateAsynCommited,
902
e_source_write(source,
904
(GAsyncReadyCallback) QOrganizerEDSEngine::saveCollectionUpdateAsynCommited,
908
releaseRequestData(data);
833
void QOrganizerEDSEngine::saveCollectionUpdateAsynCommited(ESourceRegistry *registry,
912
void QOrganizerEDSEngine::saveCollectionUpdateAsynCommited(ESource *source,
834
913
GAsyncResult *res,
835
914
SaveCollectionRequestData *data)
837
916
GError *gError = 0;
838
ESource *currentSource = data->nextSourceToUpdate();
840
e_source_registry_commit_source_finish(registry, res, &gError);
841
QCoreApplication::processEvents();
918
e_source_write_finish(source, res, &gError);
844
920
qWarning() << "Fail to update collection" << gError->message;
845
921
g_error_free(gError);
846
data->commitSourceUpdated(currentSource, QOrganizerManager::InvalidCollectionError);
922
if (data->isLive()) {
923
data->commitSourceUpdated(source, QOrganizerManager::InvalidCollectionError);
925
} else if (data->isLive()) {
926
data->commitSourceUpdated(source);
929
if (data->isLive()) {
930
saveCollectionUpdateAsyncStart(data);
848
data->commitSourceUpdated(currentSource);
932
releaseRequestData(data);
851
saveCollectionUpdateAsyncStart(data);
854
936
bool QOrganizerEDSEngine::removeCollection(const QOrganizerCollectionId& collectionId, QOrganizerManager::Error* error)
881
963
GAsyncResult *res,
882
964
RemoveCollectionRequestData *data)
966
// check if request was destroyed by the caller
967
if (!data->isLive()) {
968
releaseRequestData(data);
884
972
if (sourceObject && res) {
885
973
GError *gError = 0;
886
974
if (data->remoteDeletable()) {