/*! \relates QOrganizerCollectionId Outputs \a id to the debug stream \a dbg. */ QDebug operator<<(QDebug dbg, const QOrganizerCollectionId &id) { dbg.nospace() << "QOrganizerCollectionId("; if (id.isNull()) dbg.nospace() << "(null))"; else id.d->debugStreamOut(dbg) << ")"; return dbg.maybeSpace(); }
void CalendarThreadWrapper::addToCalendar() { const QString viaStation = m_result->viaStation(); QSettings settings(FAHRPLAN_SETTINGS_NAMESPACE, "fahrplan2"); QString calendarEntryTitle; QString calendarEntryDesc; if (viaStation.isEmpty()) calendarEntryTitle = tr("%1 to %2").arg(m_result->departureStation(), m_result->arrivalStation()); else calendarEntryTitle = tr("%1 via %3 to %2").arg(m_result->departureStation(), m_result->arrivalStation(), viaStation); if (!m_result->info().isEmpty()) calendarEntryDesc.append(m_result->info()).append("\n"); const bool compactFormat = settings.value("compactCalendarEntries", false).toBool(); for (int i=0; i < m_result->itemcount(); i++) { JourneyDetailResultItem *item = m_result->getItem(i); if (!compactFormat && !item->train().isEmpty()) calendarEntryDesc.append("--- ").append(item->train()).append(" ---\n"); calendarEntryDesc.append(formatStation(item->departureDateTime(), item->departureStation(), item->departureInfo())); calendarEntryDesc.append("\n"); if (compactFormat && !item->train().isEmpty()) calendarEntryDesc.append("--- ").append(item->train()).append(" ---\n"); calendarEntryDesc.append(formatStation(item->arrivalDateTime(), item->arrivalStation(), item->arrivalInfo())); calendarEntryDesc.append("\n"); if (!item->info().isEmpty()) { calendarEntryDesc.append(item->info()).append("\n"); } if (!compactFormat) calendarEntryDesc.append("\n"); } if (!compactFormat) calendarEntryDesc.append( tr("-- \nAdded by Fahrplan. Please, re-check the information before your journey.")); #ifdef BUILD_FOR_BLACKBERRY CalendarService service; QPair<AccountId, FolderId> folder; settings.beginGroup("Calendar"); folder.first = settings.value("AccountId", -1).toInt(); if (folder.first >= 0) folder.second = settings.value("FolderId", -1).toInt(); if ((folder.first < 0) || (folder.second < 0)) folder = service.defaultCalendarFolder(); CalendarEvent event; event.setAccountId(folder.first); event.setFolderId(folder.second); event.setSubject(calendarEntryTitle); event.setStartTime(m_result->departureDateTime()); event.setEndTime(m_result->arrivalDateTime()); event.setBody(calendarEntryDesc); event.setReminder(-1); emit addCalendarEntryComplete(service.createEvent(event) == Result::Success); #elif defined(BUILD_FOR_HARMATTAN) || defined(BUILD_FOR_MAEMO_5) || defined(BUILD_FOR_SYMBIAN) QOrganizerManager defaultManager; QOrganizerEvent event; event.setDisplayLabel(calendarEntryTitle); event.setStartDateTime(m_result->departureDateTime()); event.setEndDateTime(m_result->arrivalDateTime()); event.setDescription(calendarEntryDesc); QString id = settings.value("Calendar/CollectionId").toString(); if (!id.isEmpty()) { QOrganizerCollectionId collectionId = QOrganizerCollectionId::fromString(id); if (!collectionId.isNull()) event.setCollectionId(collectionId); } emit addCalendarEntryComplete(defaultManager.saveItem(&event)); #else emit addCalendarEntryComplete(false); #endif QThread::currentThread()->exit(0); // Move back to GUI thread so the deleteLater() callback works (it requires // an event loop which is still alive) moveToThread(QCoreApplication::instance()->thread()); }
void tst_QOrganizerCollection::datastream() { // collection datastreaming QByteArray buffer; QOrganizerCollection collectionIn; collectionIn.setMetaData("key", "value"); QOrganizerCollection collectionOut; QOrganizerCollectionId originalId; // first, stream an item with a complete id { QDataStream stream1(&buffer, QIODevice::WriteOnly); QOrganizerManager om("memory"); QVERIFY(om.saveCollection(&collectionIn)); // fill in its ID originalId = collectionIn.id(); stream1 << collectionIn; QVERIFY(buffer.size() > 0); QDataStream stream2(buffer); stream2 >> collectionOut; QCOMPARE(collectionOut, collectionIn); // can use QCOMPARE for collections, since no detail keys. } // second, stream an item with an id with the mgr uri set, local id null { QDataStream stream1(&buffer, QIODevice::WriteOnly); collectionIn.setId(QOrganizerCollectionId()); stream1 << collectionIn; QVERIFY(buffer.size() > 0); QDataStream stream2(buffer); stream2 >> collectionOut; QCOMPARE(collectionOut, collectionIn); // can use QCOMPARE for collections, since no detail keys. } /* TODO: Review tests // third, stream an item with an id with the mgr uri null, local id set { QDataStream stream1(&buffer, QIODevice::WriteOnly); QOrganizerCollectionId modifiedId = originalId; modifiedId.setManagerUri(QString()); // this will clear the local id! modifiedId.setId(originalId.localId()); // so reset it and make sure nothing bad happens. collectionIn.setId(modifiedId); stream1 << collectionIn; QVERIFY(buffer.size() > 0); QDataStream stream2(buffer); stream2 >> collectionOut; QVERIFY(collectionOut.metaData() == collectionIn.metaData()); QVERIFY(collectionOut.id() != collectionIn.id()); // no manager uri of input :. won't be serialized. }*/ // fourth, stream an item with a null id { QDataStream stream1(&buffer, QIODevice::WriteOnly); collectionIn.setId(QOrganizerCollectionId()); stream1 << collectionIn; QVERIFY(buffer.size() > 0); QDataStream stream2(buffer); stream2 >> collectionOut; QVERIFY(collectionOut.metaData() == collectionIn.metaData()); QVERIFY(collectionOut.id() == collectionIn.id()); // should both be null ids. } // id datastreaming buffer.clear(); QOrganizerCollectionId inputId; QOrganizerCollectionId outputId; // first, stream the whole id (mgr uri set, local id set) { inputId = originalId; QString serializedId = inputId.toString(); outputId = QOrganizerCollectionId::fromString(serializedId); QCOMPARE(inputId, outputId); inputId = originalId; buffer.clear(); QDataStream stream1(&buffer, QIODevice::WriteOnly); stream1 << inputId; QVERIFY(buffer.size() > 0); QDataStream stream2(buffer); stream2 >> outputId; QCOMPARE(inputId, outputId); } /* TODO: review test // second, stream a partial id (mgr uri null, local id set) { inputId.setManagerUri(QString()); inputId.setId(originalId.localId()); buffer.clear(); QDataStream stream1(&buffer, QIODevice::WriteOnly); stream1 << inputId; QVERIFY(buffer.size() > 0); QDataStream stream2(buffer); stream2 >> outputId; // because the manager uri is null, we cannot stream it in. QVERIFY(outputId.isNull()); QVERIFY(!inputId.isNull()); } // third, stream a partial id (mgr uri set, local id null). { inputId.setManagerUri(originalId.managerUri()); inputId.setId(QOrganizerCollectionId()); buffer.clear(); QDataStream stream1(&buffer, QIODevice::WriteOnly); stream1 << inputId; QVERIFY(buffer.size() > 0); QDataStream stream2(buffer); stream2 >> outputId; QCOMPARE(inputId, outputId); }*/ // fourth, stream a null id { inputId = QOrganizerCollectionId(); QString serializedId = inputId.toString(); outputId = QOrganizerCollectionId::fromString(serializedId); QCOMPARE(inputId, outputId); inputId = QOrganizerCollectionId(); buffer.clear(); QDataStream stream1(&buffer, QIODevice::WriteOnly); stream1 << inputId; QVERIFY(buffer.size() > 0); QDataStream stream2(buffer); stream2 >> outputId; QCOMPARE(inputId, outputId); } /* TODO: review test // fifth, stream an id after changing it's manager uri. { inputId.setManagerUri(originalId.managerUri()); inputId.setId(originalId.localId()); inputId.setManagerUri("test manager uri"); // should clear the local id. QVERIFY(inputId.localId() == QOrganizerCollectionId()); buffer.clear(); QDataStream stream1(&buffer, QIODevice::WriteOnly); stream1 << inputId; QVERIFY(buffer.size() > 0); QDataStream stream2(buffer); stream2 >> outputId; QCOMPARE(inputId, outputId); } // sixth, stream an id after changing it's manager uri and resetting the local id. // this should cause great problems, because the manager doesn't exist so it shouldn't // be able to deserialize. Make sure it's handled gracefully. { inputId.setManagerUri(originalId.managerUri()); inputId.setManagerUri("test manager uri"); // should clear the local id. inputId.setId(originalId.localId()); buffer.clear(); QDataStream stream1(&buffer, QIODevice::WriteOnly); stream1 << inputId; QVERIFY(buffer.size() > 0); QDataStream stream2(buffer); stream2 >> outputId; QVERIFY(outputId.isNull()); } */ }