diff options
5 files changed, 95 insertions, 10 deletions
diff --git a/src/imports/organizer/qdeclarativeorganizermodel.cpp b/src/imports/organizer/qdeclarativeorganizermodel.cpp index 0d85d4fa1..d77b786d4 100644 --- a/src/imports/organizer/qdeclarativeorganizermodel.cpp +++ b/src/imports/organizer/qdeclarativeorganizermodel.cpp @@ -36,6 +36,7 @@ #include <QtCore/qfile.h> #include <QtCore/qmath.h> #include <QtCore/qurl.h> +#include <QtCore/qpointer.h> #include <QtQml/qqmlinfo.h> @@ -77,6 +78,7 @@ static QString urlToLocalFileName(const QUrl& url) } +static const char ITEM_TO_SAVE_PROPERTY[] = {"ITEM_TO_SAVE_PROPERTY"}; class QDeclarativeOrganizerModelPrivate { @@ -1247,6 +1249,14 @@ void QDeclarativeOrganizerModel::saveItem(QDeclarativeOrganizerItem* di) req->setManager(d->m_manager); req->setItem(item); + if (di->itemId().isEmpty()) { + // if the item id is empty this means that this item is a new event + // we need to keep trace of this declarative item to update with the + // new Id as soon as this request finish + QPointer<QDeclarativeOrganizerItem> pItem = di; + req->setProperty(ITEM_TO_SAVE_PROPERTY, QVariant::fromValue(pItem)); + } + connect(req, SIGNAL(stateChanged(QOrganizerAbstractRequest::State)), this, SLOT(onRequestStateChanged(QOrganizerAbstractRequest::State))); req->start(); @@ -1341,6 +1351,18 @@ void QDeclarativeOrganizerModel::onRequestStateChanged(QOrganizerAbstractRequest QOrganizerAbstractRequest *request = qobject_cast<QOrganizerAbstractRequest *>(sender()); Q_ASSERT(request); + if (request->error() == QOrganizerManager::NoError && + request->type() == QOrganizerAbstractRequest::ItemSaveRequest) { + QVariant vItem = request->property(ITEM_TO_SAVE_PROPERTY); + if (vItem.isValid()) { + QPointer<QDeclarativeOrganizerItem> pItem = vItem.value<QPointer<QDeclarativeOrganizerItem> >(); + // Fill declarative item id + QOrganizerItemSaveRequest *sr = static_cast<QOrganizerItemSaveRequest *>(request); + if (pItem && sr->items().length() == 1) + pItem->setItem(sr->items()[0]); + } + } + checkError(request); request->deleteLater(); } diff --git a/tests/auto/organizer/qmlorganizer/testcases/tst_organizercollectionfilter.qml b/tests/auto/organizer/qmlorganizer/testcases/tst_organizercollectionfilter.qml index 6fa4523b8..c010e549b 100644 --- a/tests/auto/organizer/qmlorganizer/testcases/tst_organizercollectionfilter.qml +++ b/tests/auto/organizer/qmlorganizer/testcases/tst_organizercollectionfilter.qml @@ -128,7 +128,15 @@ Rectangle { utility.waitModelChange(0); compare(model.itemCount, 0) - //save event to default collection + //save a new event to default collection + event = Qt.createQmlObject( + "import QtOrganizer 5.0;" + + "Event { " + + " displayLabel: \"organizer collection filter test event\"; " + + " description: \"organizer collection filter test event\"; " + + " startDateTime: '2010-12-12'; " + + " endDateTime: '2010-12-13'; }" + , test); event.collectionId = model.defaultCollectionId(); model.saveItem(event); utility.waitModelChange(1); diff --git a/tests/auto/organizer/qmlorganizer/testcases/tst_organizerintersectionfilter.qml b/tests/auto/organizer/qmlorganizer/testcases/tst_organizerintersectionfilter.qml index 11f3cbb20..99681ec35 100644 --- a/tests/auto/organizer/qmlorganizer/testcases/tst_organizerintersectionfilter.qml +++ b/tests/auto/organizer/qmlorganizer/testcases/tst_organizerintersectionfilter.qml @@ -116,7 +116,16 @@ Rectangle { utility.waitModelChange(1); compare(model.itemCount, 1) - //event with new collection id + //new event with new collection id + event = Qt.createQmlObject( + "import QtOrganizer 5.0;" + + "Event { " + + " id:event;" + + " displayLabel: \"organizer intersection filter test event\"; " + + " description: \"organizer intersection filter test event\"; " + + " startDateTime: '2010-12-12'; " + + " endDateTime: '2010-12-13'; }" + , test); event.collectionId = savedCollection.collectionId; model.saveItem(event); utility.waitModelChange(2); diff --git a/tests/auto/organizer/qmlorganizer/testcases/tst_organizerrecurrence.qml b/tests/auto/organizer/qmlorganizer/testcases/tst_organizerrecurrence.qml index 021c7f603..95fa0796e 100644 --- a/tests/auto/organizer/qmlorganizer/testcases/tst_organizerrecurrence.qml +++ b/tests/auto/organizer/qmlorganizer/testcases/tst_organizerrecurrence.qml @@ -39,6 +39,19 @@ TestCase { id: test name: "OrganizerRecurrenceTests" + property var testEvent: null + property var testTodo: null + + Component { + id: eventComponent + Event {} + } + + Component { + id: todoComponent + Todo {} + } + QOrganizerTestUtility { id: utility } @@ -50,14 +63,6 @@ TestCase { endPeriod:'2014-12-31' } - Event { - id: testEvent - } - - Todo { - id: testTodo - } - RecurrenceRule { id: testRule } @@ -79,9 +84,25 @@ TestCase { } function cleanup() { + if (testEvent) { + testEvent.destroy() + testEvent = null + } + + if (testTodo) { + testTodo.destroy() + testTodo = null + } + model.manager = "" } + function init() + { + testEvent = eventComponent.createObject(test) + testTodo = todoComponent.createObject(test) + } + function localDateTime(tsSpec) { // Parse a ISO8601 time spec and return it as local time; if passed to the Date // ctor, it will be interpreted as UTC @@ -711,6 +732,7 @@ TestCase { model.manager = managers[i]; spyManagerChanged.wait() cleanDatabase(); + testEvent = eventComponent.createObject(test) testRule.frequency = RecurrenceRule.Daily; testRule.interval = 1; @@ -737,6 +759,7 @@ TestCase { model.manager = managers[i]; spyManagerChanged.wait() cleanDatabase(); + testEvent = eventComponent.createObject(test) testRule.frequency = RecurrenceRule.Daily; testRule.interval = 3; @@ -832,6 +855,16 @@ TestCase { spyModelChanged.wait() } compare(model.itemIds().length, 0) + + if (testEvent) { + testEvent.destroy() + testEvent = null + } + + if (testTodo) { + testTodo.destroy() + testTodo = null + } } function populateTestItemsFromData(data) { @@ -859,6 +892,8 @@ TestCase { testXRule.positions = data.xrule.positions; testXRule.firstDayOfWeek = data.xrule.firstDayOfWeek; } + testEvent = eventComponent.createObject(test) + testTodo = todoComponent.createObject(test) testEvent.startDateTime = new Date(data.definitions.start); testTodo.startDateTime = new Date(data.definitions.start); diff --git a/tests/auto/organizer/qmlorganizer/testcases/tst_organizerunionfilter.qml b/tests/auto/organizer/qmlorganizer/testcases/tst_organizerunionfilter.qml index 96a8e2852..727d2f6ad 100644 --- a/tests/auto/organizer/qmlorganizer/testcases/tst_organizerunionfilter.qml +++ b/tests/auto/organizer/qmlorganizer/testcases/tst_organizerunionfilter.qml @@ -114,12 +114,23 @@ Rectangle { model.saveItem(event); utility.waitModelChange(1); compare(model.itemCount, 1) + event.destroy() //event with new collection id + event = Qt.createQmlObject( + "import QtOrganizer 5.0;" + + "Event { " + + " id:event;" + + " displayLabel: \"organizer union filter test event\"; " + + " description: \"organizer union filter test event\"; " + + " startDateTime: '2010-12-12'; " + + " endDateTime: '2010-12-13'; }" + , test); event.collectionId = savedCollection.collectionId; model.saveItem(event); utility.waitModelChange(2); compare(model.itemCount, 2) + event.destroy() var fetchlist = model.items; var idEventId; |