void CalDavClient::startQuickSync() { FUNCTION_CALL_TRACE; mKCal::ExtendedCalendar::Ptr calendar = mKCal::ExtendedCalendar::Ptr(new mKCal::ExtendedCalendar(KDateTime::Spec::UTC())); mKCal::ExtendedStorage::Ptr storage = calendar->defaultStorage(calendar); storage->open(); storage->load(QDateTime::currentDateTime().toUTC().addMonths(-6).date(), QDateTime::currentDateTime().toUTC().addMonths(12).date()); // we add 2 seconds to ensure that the timestamp doesn't // fall prior to when the calendar db commit fs sync finalises. KDateTime fromDate(lastSyncTime().addSecs(2)); LOG_DEBUG("\n\nLAST SYNC TIME = " << fromDate.toString() << "\n\n"); KCalCore::Incidence::List inserted; KCalCore::Incidence::List modified; KCalCore::Incidence::List deleted; QString errorString; if (!loadStorageChanges(storage, fromDate, &inserted, &modified, &deleted, &errorString)) { storage->close(); calendar->close(); syncFinished(Buteo::SyncResults::INTERNAL_ERROR, errorString); return; } LOG_DEBUG("Changes: inserted = " << inserted.count() << "modified = " << modified.count() << "deleted = " << deleted.count()); if (inserted.isEmpty() && modified.isEmpty() && deleted.isEmpty()) { // no local changes to send, just do a REPORT to pull updates from server retrieveETags(); } else { for (int i=0; i<inserted.count(); i++) { Put *put = new Put(mNAManager, &mSettings); mRequests.insert(put); connect(put, SIGNAL(finished()), this, SLOT(nonReportRequestFinished())); put->createEvent(inserted[i]); } for (int i=0; i<modified.count(); i++) { Put *put = new Put(mNAManager, &mSettings); mRequests.insert(put); connect(put, SIGNAL(finished()), this, SLOT(nonReportRequestFinished())); put->updateEvent(modified[i]); } for (int i=0; i<deleted.count(); i++) { Delete *del = new Delete(mNAManager, &mSettings); mRequests.insert(del); connect(del, SIGNAL(finished()), this, SLOT(nonReportRequestFinished())); del->deleteEvent(deleted[i]); } } storage->close(); calendar->close(); }
void NotebookSyncAgent::sendLocalChanges() { NOTEBOOK_FUNCTION_CALL_TRACE; KCalCore::Incidence::List inserted; KCalCore::Incidence::List modified; KCalCore::Incidence::List deleted; if (!loadLocalChanges(mChangesSinceDate, &inserted, &modified, &deleted)) { emitFinished(Buteo::SyncResults::INTERNAL_ERROR, "Unable to load changes for calendar: " + mServerPath); return; } if (inserted.isEmpty() && modified.isEmpty() && deleted.isEmpty()) { LOG_DEBUG("No changes to send!"); emitFinished(Buteo::SyncResults::NO_ERROR, "Done, no local changes for " + mServerPath); return; } LOG_DEBUG("Total changes for" << mServerPath << ":" << "inserted = " << inserted.count() << "modified = " << modified.count() << "deleted = " << deleted.count()); for (int i=0; i<inserted.count(); i++) { Put *put = new Put(mNAManager, mSettings); mRequests.insert(put); connect(put, SIGNAL(finished()), this, SLOT(nonReportRequestFinished())); put->createEvent(mServerPath, inserted[i]); } for (int i=0; i<modified.count(); i++) { Put *put = new Put(mNAManager, mSettings); mRequests.insert(put); connect(put, SIGNAL(finished()), this, SLOT(nonReportRequestFinished())); put->updateEvent(mServerPath, modified[i], mLocalETags.value(modified[i]->uid())); } for (int i=0; i<deleted.count(); i++) { Delete *del = new Delete(mNAManager, mSettings); mRequests.insert(del); connect(del, SIGNAL(finished()), this, SLOT(nonReportRequestFinished())); del->deleteEvent(mServerPath, deleted[i]); } }
void AttachmentHandler::slotFinishView( KJob *job ) { IncidenceSearchJob *searchJob = qobject_cast<IncidenceSearchJob*>( job ); const KCalCore::Incidence::List incidences = searchJob->incidences(); ReceivedInfo info = d->mJobToReceivedInfo[job]; bool success = false; if ( !incidences.isEmpty() ) { if ( view( info.attachmentName, incidences.first() ) ) { success = true; } } emit viewFinished( info.uid, info.attachmentName, success ); d->mJobToReceivedInfo.remove( job ); }
void TodoPlugin::processDropEvent( QDropEvent *event ) { const QMimeData *md = event->mimeData(); if ( KABC::VCardDrag::canDecode( md ) ) { KABC::Addressee::List contacts; KABC::VCardDrag::fromMimeData( md, contacts ); KABC::Addressee::List::Iterator it; QStringList attendees; for ( it = contacts.begin(); it != contacts.end(); ++it ) { QString email = (*it).fullEmail(); if ( email.isEmpty() ) { attendees.append( (*it).realName() + "<>" ); } else { attendees.append( email ); } } interface()->openTodoEditor( i18nc( "@item", "Meeting" ), QString(), QStringList(), attendees ); return; } if ( KCalUtils::ICalDrag::canDecode( event->mimeData() ) ) { KCalCore::MemoryCalendar::Ptr cal( new KCalCore::MemoryCalendar( KSystemTimeZones::local() ) ); if ( KCalUtils::ICalDrag::fromMimeData( event->mimeData(), cal ) ) { KCalCore::Incidence::List incidences = cal->incidences(); Q_ASSERT( incidences.count() ); if ( !incidences.isEmpty() ) { event->accept(); KCalCore::Incidence::Ptr i = incidences.first(); QString summary; if ( i->type() == KCalCore::Incidence::TypeJournal ) { summary = i18nc( "@item", "Note: %1", i->summary() ); } else { summary = i->summary(); } interface()->openTodoEditor( summary, i->description(), QStringList() ); return; } // else fall through to text decoding } } if ( md->hasText() ) { QString text = md->text(); interface()->openTodoEditor( text ); return; } if ( KPIM::MailList::canDecode( md ) ) { KPIM::MailList mails = KPIM::MailList::fromMimeData( md ); event->accept(); if ( mails.count() != 1 ) { KMessageBox::sorry( core(), i18nc( "@info", "Dropping multiple mails is not supported." ) ); } else { KPIM::MailSummary mail = mails.first(); QString txt = i18nc( "@item", "From: %1\nTo: %2\nSubject: %3", mail.from(), mail.to(), mail.subject() ); QString uri = QLatin1String( "kmail:" ) + QString::number( mail.serialNumber() ) + '/' + mail.messageId(); KTemporaryFile tf; tf.setAutoRemove( true ); tf.write( event->encodedData( "message/rfc822" ) ); interface()->openTodoEditor( i18nc( "@item", "Mail: %1", mail.subject() ), txt, uri, tf.fileName(), QStringList(), "message/rfc822" ); tf.close(); } return; } kWarning() << QString( "Cannot handle drop events of type '%1'." ).arg( event->format() ); }