From: <svn...@op...> - 2010-10-13 22:16:21
|
Author: deloptes Date: Thu Oct 14 00:16:11 2010 New Revision: 6145 URL: http://www.opensync.org/changeset/6145 Log: datasink.h datasink.cpp akonadi_opensync.cpp I've fixed few issues with formats and added better support for mimetypes needed by akonadi I'm not sure if I need to keep the mimetype as object property in datasink akonadi-sync vnote11 is a ressource of type note that needs to be enabled explicitely as it is identified by different mimetype and is represented as separate collection in akonadi CMakeLists.txt I added some debugging options (not sure if it is working as intended) Modified: plugins/akonadi-sync/trunk/CMakeLists.txt plugins/akonadi-sync/trunk/src/akonadi-sync plugins/akonadi-sync/trunk/src/akonadi_opensync.cpp plugins/akonadi-sync/trunk/src/datasink.cpp plugins/akonadi-sync/trunk/src/datasink.h Modified: plugins/akonadi-sync/trunk/CMakeLists.txt ============================================================================== --- plugins/akonadi-sync/trunk/CMakeLists.txt Sun Oct 10 23:46:01 2010 (r6144) +++ plugins/akonadi-sync/trunk/CMakeLists.txt Thu Oct 14 00:16:11 2010 (r6145) @@ -21,8 +21,9 @@ # SET( CMAKE_CXX_FLAGS_DEBUG "-DDEBUG -ggdb -g -O2 -Wall -W " ${CMAKE_CXX_FLAGS_DEBUG} ${KDE4_ENABLE_EXCEPTIONS} ) #ADD_DEFINITIONS(-g -O2 -fsigned-char -freg-struct-return -Wall -W -Wshadow -Wstrict-prototypes -Wpointer-arith -Wcast-qual -Winline -Werror) -ADD_DEFINITIONS( -DDEBUG -g -O2 -Wall -W -fexceptions) +# ADD_DEFINITIONS( -DDEBUG -g -O2 -Wall -W -fexceptions) # -Werror +ADD_DEFINITIONS( -ggdb -O2 -Wall -W -fexceptions) FIND_PACKAGE( KdepimLibs REQUIRED ) FIND_PACKAGE( Akonadi REQUIRED ) Modified: plugins/akonadi-sync/trunk/src/akonadi-sync ============================================================================== --- plugins/akonadi-sync/trunk/src/akonadi-sync Sun Oct 10 23:46:01 2010 (r6144) +++ plugins/akonadi-sync/trunk/src/akonadi-sync Thu Oct 14 00:16:11 2010 (r6145) @@ -28,7 +28,7 @@ <Url>default</Url> </Resource> <Resource> - <Enabled>1</Enabled> + <Enabled>0</Enabled> <Formats> <Format> <Name>vtodo10</Name> @@ -41,13 +41,20 @@ <Url>default</Url> </Resource> <Resource> - <Enabled>1</Enabled> + <Enabled>0</Enabled> <Formats> <Format> - <Name>vnote11</Name> + <Name>vjournal</Name> </Format> + </Formats> + <ObjType>note</ObjType> + <Url>default</Url> + </Resource> + <Resource> + <Enabled>0</Enabled> + <Formats> <Format> - <Name>vjournal</Name> + <Name>vnote11</Name> </Format> </Formats> <ObjType>note</ObjType> Modified: plugins/akonadi-sync/trunk/src/akonadi_opensync.cpp ============================================================================== --- plugins/akonadi-sync/trunk/src/akonadi_opensync.cpp Sun Oct 10 23:46:01 2010 (r6144) +++ plugins/akonadi-sync/trunk/src/akonadi_opensync.cpp Thu Oct 14 00:16:11 2010 (r6145) @@ -98,12 +98,12 @@ else continue; - // there might be someting more intelligent to check when to return below + // there might be something more intelligent to check how to return below if ( !ds->initialize( plugin, info, sink, error ) ) { - osync_objtype_sink_set_enabled(sink, false); - osync_objtype_sink_set_available(sink, false); - delete ds; - objects_supported--; + osync_objtype_sink_set_enabled(sink, false); + osync_objtype_sink_set_available(sink, false); + delete ds; + objects_supported--; } } @@ -171,25 +171,14 @@ application/x-vnd.akonadi.calendar.freebusy - this will be most probably ignored, so not checking for it */ - static osync_bool testSupport(OSyncObjTypeSink *sink, OSyncPluginConfig *config, OSyncError **error ) { + static osync_bool testSupport(OSyncObjTypeSink *sink, OSyncPluginConfig *config, QString mimeType, OSyncError **error ) { kDebug(); - QString mimeType; - const char *myType = osync_objtype_sink_get_name(sink); Akonadi::CollectionFetchScope scope; scope.setIncludeUnsubscribed( true ); - if ( ! strcmp(myType,"contact") ) - mimeType = "application/x-vnd.kde.contactgroup" ; // text/directory - else if ( ! strcmp(myType,"event") ) - mimeType = "application/x-vnd.akonadi.calendar.event"; - else if ( ! strcmp(myType,"note") ) - mimeType = "application/x-vnd.akonadi.calendar.journal"; - else if ( ! strcmp(myType,"todo") ) - mimeType = "application/x-vnd.akonadi.calendar.todo"; - else - return false; + bool configured = false; scope.setContentMimeTypes( QStringList() << mimeType ); // fetch all akonadi collections for this mimetype @@ -203,12 +192,11 @@ int col_count = colsList.count(); kDebug() << "found" << col_count << "collections"; bool enabled = false; - bool configured = false; foreach ( const Akonadi::Collection &col, colsList ) { kDebug() << "processing resource " << col.name() << col.contentMimeTypes(); kDebug() << "url " << col.name() << col.url().url(); - configured = false; + configured = false; OSyncList *resList = osync_plugin_config_get_resources(config); for ( OSyncList *r = resList; r; r = r->next ) { @@ -218,40 +206,39 @@ const char *myMimeType = osync_plugin_resource_get_mime(myRes); const char *myUrl = osync_plugin_resource_get_url(myRes); - if ( !strcmp(myObjType, myType) ) { + if ( !strcmp(myObjType, osync_objtype_sink_get_name(sink)) ) { if ( !strcmp(myUrl , "default") ) { osync_plugin_resource_set_name( myRes, toXml(col.name()).toLatin1() ); osync_plugin_resource_set_url(myRes, col.url().url().toLatin1()); osync_plugin_resource_set_mime(myRes, mimeType.toLatin1() ); - configured = true; + configured = true; } else if ( !strcmp(myUrl, col.url().url().toLatin1()) && !strcmp(myMimeType, mimeType.toLatin1()) ) { kDebug() << "aleady configured" << myObjType; - configured = true; + configured = true; } if (! enabled ) - enabled = osync_plugin_resource_is_enabled(myRes); + enabled = osync_plugin_resource_is_enabled(myRes); } } - + if ( ! configured ) { - OSyncPluginResource *newRes = create_resource(myType, error ) ; - osync_plugin_resource_set_name( newRes, toXml(col.name()).toLatin1() ); - osync_plugin_resource_set_url(newRes, col.url().url().toLatin1()); - osync_plugin_resource_set_mime(newRes, mimeType.toLatin1() ); - if ( ! enabled ) { - osync_plugin_resource_enable( newRes, true ); - enabled = true; - } - else { - osync_plugin_resource_enable( newRes, false ); - } - - osync_plugin_config_add_resource(config , newRes); - configured = true; - } - - } + OSyncPluginResource *newRes = create_resource(osync_objtype_sink_get_name(sink), error ) ; + osync_plugin_resource_set_name( newRes, toXml(col.name()).toLatin1() ); + osync_plugin_resource_set_url(newRes, col.url().url().toLatin1()); + osync_plugin_resource_set_mime(newRes, mimeType.toLatin1() ); + if ( ! enabled ) { + osync_plugin_resource_enable( newRes, true ); + enabled = true; + } + else { + osync_plugin_resource_enable( newRes, false ); + } + osync_plugin_config_add_resource(config , newRes); + configured = true; + } + + } return configured; } @@ -275,13 +262,43 @@ OSyncList *sinks = osync_plugin_info_get_objtype_sinks(info); for ( OSyncList *s = sinks; s; s = s->next ) { OSyncObjTypeSink *sink = (OSyncObjTypeSink*) s->data; + const char *myType = osync_objtype_sink_get_name(sink); // check if sync supported - if ( ! testSupport(sink, config, error) ) { - osync_objtype_sink_set_available(sink, false); + if ( ! strcmp(myType,"contact") ) { + /* NOTE + * for groups I think x-vnd.kde.contactgroup is useful ... + * for address book though "text/directory" + * so we check here if there are contact groups + */ + if ( ! testSupport(sink, config, "application/x-vnd.kde.contactgroup", error) ) + osync_objtype_sink_set_available(sink, false); + else + osync_objtype_sink_set_available(sink, true); } - else { - osync_objtype_sink_set_available(sink, true); + else if ( ! strcmp(myType,"event") ) { + if ( ! testSupport(sink, config, "application/x-vnd.akonadi.calendar.event", error) ) + osync_objtype_sink_set_available(sink, false); + else + osync_objtype_sink_set_available(sink, true); } + else if ( ! strcmp(myType,"note") ) { + if ( ! testSupport(sink, config, "application/x-vnd.akonadi.calendar.journal", error) ) + osync_objtype_sink_set_available(sink, false); + else + osync_objtype_sink_set_available(sink, true); + + if ( ! testSupport(sink, config, "application/x-vnd.kde.notes", error) ) + osync_objtype_sink_set_available(sink, false); + else + osync_objtype_sink_set_available(sink, true); + } + else if ( ! strcmp(myType,"todo") ) { + if ( ! testSupport(sink, config, "application/x-vnd.akonadi.calendar.todo", error) ) + osync_objtype_sink_set_available(sink, false); + else + osync_objtype_sink_set_available(sink, true); + } + osync_plugin_info_add_objtype( info, sink ); } // set information about the peer (KDE itself) Modified: plugins/akonadi-sync/trunk/src/datasink.cpp ============================================================================== --- plugins/akonadi-sync/trunk/src/datasink.cpp Sun Oct 10 23:46:01 2010 (r6144) +++ plugins/akonadi-sync/trunk/src/datasink.cpp Thu Oct 14 00:16:11 2010 (r6145) @@ -37,9 +37,9 @@ #include <kabc/vcardformat.h> // TODO -// notes includes -// todos includes -// journals includes +// notes, todos, journals & includes are done by icalformat +// I am not quite sure about it, but I think +// this needs to be checked when working on todos and notes #include <KDebug> #include <KLocale> @@ -74,7 +74,7 @@ kDebug() << "initializing" << osync_objtype_sink_get_name ( sink ); Q_UNUSED ( plugin ); Q_UNUSED ( info ); - Q_UNUSED ( error ); + Q_UNUSED ( error ); OSyncPluginConfig *config = osync_plugin_info_get_config ( info ); @@ -86,21 +86,22 @@ // FIXME enable checks on sync/commit etc!! OSyncPluginResource *resource = osync_plugin_config_find_active_resource ( config, osync_objtype_sink_get_name ( sink ) ); - if ( resource && ! osync_plugin_resource_is_enabled(resource) ) { -// osync_error_set( error, OSYNC_ERROR_MISCONFIGURATION, i18n ( "No active resource for type \"%s\" found", m_type ).toLatin1() ); + if ( ! resource || ! osync_plugin_resource_is_enabled(resource) ) { m_Enabled = FALSE; return false; - } else + } else m_Enabled = TRUE; - + m_Url = osync_plugin_resource_get_url ( resource ); OSyncList *objfrmtList = osync_plugin_resource_get_objformat_sinks ( resource ); + const char *preferred = osync_plugin_resource_get_preferred_format(resource); for ( OSyncList *r = objfrmtList;r;r = r->next ) { OSyncObjFormatSink *objformatsink = ( OSyncObjFormatSink * ) r->data; const char* tobjformat = osync_objformat_sink_get_objformat ( objformatsink ); + // TODO how can I negotiate format ... is this here enough? switch ( m_type ) { case Contacts: @@ -142,14 +143,19 @@ default: return false; } - - kDebug() << "Has objformat: " << m_Format; } - + + if ( ! preferred || strcmp(preferred,m_Format.toLatin1() ) ) + osync_plugin_resource_set_preferred_format( resource, m_Format.toLatin1() ); + + kDebug() << "Has objformat: " << m_Format; + wrapSink ( sink ); + osync_objtype_sink_set_enabled ( sink, true ); + osync_objtype_sink_set_available ( sink, true ); osync_objtype_sink_set_userdata ( sink, this ); - osync_objtype_sink_enable_hashtable ( sink , TRUE ); + osync_objtype_sink_enable_hashtable ( sink , true ); return true; } @@ -157,9 +163,9 @@ Akonadi::Collection DataSink::collection() const { kDebug(); - - const KUrl url = KUrl ( m_Url); - + + const KUrl url = KUrl ( m_Url ); + if ( url.isEmpty() ) { error ( OSYNC_ERROR_MISCONFIGURATION, i18n ( "Url for object type \"%s\" is not configured.", m_type) ); @@ -186,37 +192,37 @@ } Akonadi::Collection col = collection() ; - if ( !col.isValid() ) + if ( !col.isValid() ) + { + kDebug() << "No collection"; + osync_trace ( TRACE_EXIT_ERROR, "%s: %s", __PRETTY_FUNCTION__, osync_error_print ( &oerror ) ); + return; + } +// FIXME: I don't understand this completely well + if ( getSlowSink() ) + { + kDebug() << "we're in the middle of slow-syncing..."; + osync_trace ( TRACE_INTERNAL, "resetting hashtable" ); + if ( ! osync_hashtable_slowsync ( hashtable, &oerror ) ) { - kDebug() << "No collection"; + warning ( oerror ); osync_trace ( TRACE_EXIT_ERROR, "%s: %s", __PRETTY_FUNCTION__, osync_error_print ( &oerror ) ); return; } -// FIXME - if ( getSlowSink() ) - { - kDebug() << "we're in the middle of slow-syncing..."; - osync_trace ( TRACE_INTERNAL, "resetting hashtable" ); - if ( ! osync_hashtable_slowsync ( hashtable, &oerror ) ) - { - warning ( oerror ); - osync_trace ( TRACE_EXIT_ERROR, "%s: %s", __PRETTY_FUNCTION__, osync_error_print ( &oerror ) ); - return; - } - } - - ItemFetchJob *job = new ItemFetchJob ( col ); - job->fetchScope().fetchFullPayload(); - kDebug() << "Fetched full payload"; + } - QObject::connect ( job, SIGNAL ( itemsReceived ( const Akonadi::Item::List & ) ), this, SLOT ( slotItemsReceived ( const Akonadi::Item::List & ) ) ); - QObject::connect ( job, SIGNAL ( result ( KJob * ) ), this, SLOT ( slotGetChangesFinished ( KJob * ) ) ); + ItemFetchJob *job = new ItemFetchJob ( col ); + job->fetchScope().fetchFullPayload(); + kDebug() << "Fetched full payload"; - if ( !job->exec() ) - { - error ( OSYNC_ERROR_IO_ERROR, job->errorText() ); - return; - } + QObject::connect ( job, SIGNAL ( itemsReceived ( const Akonadi::Item::List & ) ), this, SLOT ( slotItemsReceived ( const Akonadi::Item::List & ) ) ); + QObject::connect ( job, SIGNAL ( result ( KJob * ) ), this, SLOT ( slotGetChangesFinished ( KJob * ) ) ); + + if ( !job->exec() ) + { + error ( OSYNC_ERROR_IO_ERROR, job->errorText() ); + return; + } kDebug() << "success()"; success(); @@ -226,9 +232,8 @@ { kDebug(); kDebug() << "retrieved" << items.count() << "items"; - Q_FOREACH ( const Item& item, items ) { - reportChange ( item ); - } + Q_FOREACH ( const Item& item, items ) + reportChange ( item ); kDebug() << "done"; } @@ -255,11 +260,19 @@ warning ( error ); return; } +// TODO Do I need to filter here some items +// osync_change_get_objformat( change ); +// if ( strcmp(m_MimeType.toLatin1(),item.mimeType().toLatin1()) ) { +// osync_change_unref ( change ); +// // warning ( error ); +// return; +// } + // Now you can set the data for the object // Set the last argument to FALSE if the real data // should be queried later in a "get_data" function - QString cvtToString = item.payloadData().data() ; + QString cvtToString = QString ( item.payloadData().data() ); OSyncData *odata = osync_data_new ( cvtToString.toLatin1().data() , cvtToString.size(), format, &error ); if ( !odata ) { @@ -334,8 +347,8 @@ osync_data_set_objtype( data, osync_objtype_sink_get_name( sink() ) ); osync_change_set_data( change, data ); osync_hashtable_update_change ( hashtable, change ); - osync_context_report_change ( context(), change ); + osync_change_unref ( change ); osync_data_unref(data); } @@ -344,15 +357,34 @@ kDebug() << "got all changes."; } +// NOTE "application/x-vnd.kde.contactgroup" is used for contact groups ... we can use it probably later + +QString DataSink::getMimeWithFormat ( OSyncObjFormat * format ) { + const char* name = osync_objformat_get_name (format); + if (!strcmp(name,"vcard21") || !strcmp(name,"vcard30") ) + return "text/directory"; + else if (!strcmp(name,"vevent10") || !strcmp(name,"vevent10") ) + return "application/x-vnd.akonadi.calendar.event"; + else if (!strcmp(name,"vtodo10") || !strcmp(name,"vtodo20")) + return "application/x-vnd.akonadi.calendar.todo"; + else if (!strcmp(name,"vnote11") ) + return "application/x-vnd.kde.notes"; + else if (!strcmp(name,"vjournal")) + return "application/x-vnd.akonadi.calendar.journal"; + else + return false; +} + void DataSink::commit ( OSyncChange *change ) { kDebug(); - + OSyncHashTable *hashtable = osync_objtype_sink_get_hashtable ( sink() ); char *plain = 0; osync_data_get_data ( osync_change_get_data ( change ), &plain, /*size*/0 ); QString str = QString::fromLatin1 ( plain ); QString id = QString::fromLatin1 ( osync_change_get_uid ( change ) ); + QString mimeType = getMimeWithFormat(osync_change_get_objformat(change)); kDebug() << "change uid:" << id; kDebug() << "objform:" << osync_objformat_get_name ( osync_change_get_objformat ( change ) ); @@ -361,95 +393,96 @@ Akonadi::Collection col = collection(); - switch ( osync_change_get_changetype ( change ) ) - { - case OSYNC_CHANGE_TYPE_ADDED: - { + switch ( osync_change_get_changetype ( change ) ) + { + case OSYNC_CHANGE_TYPE_ADDED: + { - if ( !col.isValid() ) { - error( OSYNC_ERROR_GENERIC, "Invalid collction."); - return; - } - - Item item; - setPayload ( &item, str ); - item.setRemoteId( id.toLatin1() ); - - ItemCreateJob *job = new Akonadi::ItemCreateJob ( item, col ); - if ( ! job->exec() ) { - error( OSYNC_ERROR_GENERIC, "Unable to create job for item."); - return; - } - - item = job->item(); // handle !job->exec in return too.. - if ( ! item.isValid() ) { - error( OSYNC_ERROR_GENERIC, "Unable to fetch item."); - return; - } - osync_change_set_uid ( change, item.remoteId().toLatin1() ); - osync_change_set_hash ( change, QString::number ( item.revision() ).toLatin1() ); - break; + if ( !col.isValid() ) { + error( OSYNC_ERROR_GENERIC, "Invalid collction."); + return; } - case OSYNC_CHANGE_TYPE_MODIFIED: - { - Item item = fetchItem ( id ); - setPayload ( &item, str ); + Item item; + setPayload ( &item, mimeType, str ); + item.setRemoteId( id.toLatin1() ); + + ItemCreateJob *job = new Akonadi::ItemCreateJob ( item, col ); + if ( ! job->exec() ) { + error( OSYNC_ERROR_GENERIC, "Unable to create job for item."); + return; + } - if ( ! item.isValid() ) { - error( OSYNC_ERROR_GENERIC, "Unable to fetch item."); - return; - } - - ItemModifyJob *modifyJob = new Akonadi::ItemModifyJob ( item ); - if ( ! modifyJob->exec() ) { - error ( OSYNC_ERROR_GENERIC, "Unable to fetch item."); - return; - } + item = job->item(); // handle !job->exec in return too.. + if ( ! item.isValid() ) { + error( OSYNC_ERROR_GENERIC, "Unable to fetch item."); + return; + } + osync_change_set_uid ( change, item.remoteId().toLatin1() ); + osync_change_set_hash ( change, QString::number ( item.revision() ).toLatin1() ); + break; + } - item = modifyJob->item(); + case OSYNC_CHANGE_TYPE_MODIFIED: + { + Item item = fetchItem ( id ); + setPayload ( &item, mimeType, str ); - osync_change_set_uid ( change, item.remoteId().toLatin1() ); - osync_change_set_hash ( change, QString::number ( item.revision() ).toLatin1() ); - break; + if ( ! item.isValid() ) { + error( OSYNC_ERROR_GENERIC, "Unable to fetch item."); + return; } - case OSYNC_CHANGE_TYPE_DELETED: - { - Item item = fetchItem ( id ); - if ( ! item.isValid() ) { - error( OSYNC_ERROR_GENERIC, "Unable to fetch item"); - return; - } - - ItemDeleteJob *job = new ItemDeleteJob( item ); - if ( ! job->exec() ) { - error( OSYNC_ERROR_GENERIC, "Unable to delete item"); - return; - } - break; + ItemModifyJob *modifyJob = new Akonadi::ItemModifyJob ( item ); + if ( ! modifyJob->exec() ) { + error ( OSYNC_ERROR_GENERIC, "Unable to fetch item."); + return; } - case OSYNC_CHANGE_TYPE_UNMODIFIED: - { - kDebug() << "UNMODIFIED"; - // should we do something here? - break; + item = modifyJob->item(); + + osync_change_set_uid ( change, item.remoteId().toLatin1() ); + osync_change_set_hash ( change, QString::number ( item.revision() ).toLatin1() ); + break; + } + + case OSYNC_CHANGE_TYPE_DELETED: + { + Item item = fetchItem ( id ); + if ( ! item.isValid() ) { + error( OSYNC_ERROR_GENERIC, "Unable to fetch item"); + return; } - default: - kDebug() << "got invalid changetype?"; - error(OSYNC_ERROR_GENERIC, "got invalid changetype"); + + ItemDeleteJob *job = new ItemDeleteJob( item ); + if ( ! job->exec() ) { + error( OSYNC_ERROR_GENERIC, "Unable to delete item"); return; } + break; + } - osync_hashtable_update_change ( hashtable, change ); + case OSYNC_CHANGE_TYPE_UNMODIFIED: + { + kDebug() << "UNMODIFIED"; + // should we do something here? + break; + } + default: + kDebug() << "got invalid changetype?"; + error(OSYNC_ERROR_GENERIC, "got invalid changetype"); + return; + } + + osync_hashtable_update_change ( hashtable, change ); success(); } -bool DataSink::setPayload ( Item *item, const QString &str ) +bool DataSink::setPayload ( Item *item, const QString mimeType, const QString &str ) { kDebug(); + item->setMimeType ( mimeType ); switch ( m_type ) { case Contacts: @@ -457,7 +490,6 @@ kDebug() << "type = contacts"; KABC::VCardConverter converter; KABC::Addressee vcard = converter.parseVCard ( str.toUtf8() ); - item->setMimeType ( "text/directory" ); item->setPayload<KABC::Addressee> ( vcard ); kDebug() << "payload: " << vcard.toString().toUtf8(); break; @@ -467,7 +499,6 @@ kDebug() << "events"; KCal::ICalFormat format; KCal::Incidence *calEntry = format.fromString ( str.toUtf8() ); - item->setMimeType ( "application/x-vnd.akonadi.calendar.event" ); item->setPayload<IncidencePtr> ( IncidencePtr ( calEntry->clone() ) ); kDebug() << "payload: " << str.toUtf8(); break; @@ -477,7 +508,6 @@ kDebug() << "todos"; KCal::ICalFormat format; KCal::Incidence *todoEntry = format.fromString ( str.toUtf8() ); - item->setMimeType ( "application/x-vnd.akonadi.calendar.todo" ); item->setPayload<IncidencePtr> ( IncidencePtr ( todoEntry->clone() ) ); kDebug() << "payload: " << str.toUtf8(); break; @@ -487,8 +517,6 @@ kDebug() << "notes"; KCal::ICalFormat format; KCal::Incidence *noteEntry = format.fromString ( str.toUtf8() ); -// item->setMimeType ( "application/x-vnd.kde.notes" ); - item->setMimeType ( "application/x-vnd.akonadi.calendar.journal" ); item->setPayload<IncidencePtr> ( IncidencePtr ( noteEntry->clone() ) ); kDebug() << "payload: " << str.toUtf8(); break; @@ -505,13 +533,13 @@ { kDebug(); - ItemFetchJob *fetchJob = new ItemFetchJob ( collection() ); - fetchJob->fetchScope(); + ItemFetchJob *fetchJob = new ItemFetchJob ( collection() ); + fetchJob->fetchScope().fetchFullPayload(); - if ( fetchJob->exec() ) - foreach ( const Item &item, fetchJob->items() ) - if ( !strcmp(item.remoteId().toLatin1(), id.toLatin1() )) - return item; + if ( fetchJob->exec() ) + foreach ( const Item &item, fetchJob->items() ) + if ( !strcmp(item.remoteId().toLatin1(), id.toLatin1() )) + return item; // no such item found? // this will be handled as invalid item return Item(); Modified: plugins/akonadi-sync/trunk/src/datasink.h ============================================================================== --- plugins/akonadi-sync/trunk/src/datasink.h Sun Oct 10 23:46:01 2010 (r6144) +++ plugins/akonadi-sync/trunk/src/datasink.h Thu Oct 14 00:16:11 2010 (r6145) @@ -91,7 +91,8 @@ private: const Item fetchItem( const QString& id ); - bool setPayload( Item *item, const QString &str ); + bool setPayload( Item *item, const QString mimeType, const QString &str ); + QString getMimeWithFormat(OSyncObjFormat* format); private: OSyncHashTable *m_hashtable; @@ -99,7 +100,7 @@ QString m_Format; bool m_Enabled; QString m_Url; - QString m_MimeType; +// QString m_MimeType; }; #endif |