From: <svn...@op...> - 2010-09-27 18:01:00
|
Author: deloptes Date: Mon Sep 27 20:00:45 2010 New Revision: 6137 URL: http://www.opensync.org/changeset/6137 Log: - get changes in work Modified: plugins/akonadi-sync/trunk/src/akonadi_opensync.cpp plugins/akonadi-sync/trunk/src/datasink.cpp plugins/akonadi-sync/trunk/src/datasink.h plugins/akonadi-sync/trunk/src/sinkbase.cpp plugins/akonadi-sync/trunk/src/sinkbase.h Modified: plugins/akonadi-sync/trunk/src/akonadi_opensync.cpp ============================================================================== --- plugins/akonadi-sync/trunk/src/akonadi_opensync.cpp Thu Sep 23 03:07:14 2010 (r6136) +++ plugins/akonadi-sync/trunk/src/akonadi_opensync.cpp Mon Sep 27 20:00:45 2010 (r6137) @@ -92,9 +92,7 @@ ds = new DataSink( DataSink::Notes ); else continue; - kDebug() << "Info:"<< osync_plugin_info_get_groupname(info); - - osync_objtype_sink_set_userdata(sink, ds); + if ( !ds->initialize( plugin, info, sink, error ) ) { delete ds; delete mainSink; Modified: plugins/akonadi-sync/trunk/src/datasink.cpp ============================================================================== --- plugins/akonadi-sync/trunk/src/datasink.cpp Thu Sep 23 03:07:14 2010 (r6136) +++ plugins/akonadi-sync/trunk/src/datasink.cpp Mon Sep 27 20:00:45 2010 (r6137) @@ -1,7 +1,7 @@ /* Copyright (c) 2008 Volker Krause <vk...@kd...> Copyright (c) 2010 Emanoil Kotsev <del...@ya...> - + $Id$ This library is free software; you can redistribute it and/or modify it @@ -53,32 +53,27 @@ DataSink::DataSink( int type ) : SinkBase( GetChanges | Commit | SyncDone ) { - kDebug() << "Create obj:" << type; + kDebug() << "Create obj:" << type; m_type = type; - - m_hasEvent = ( type == DataSink::Calendars ) ? true : false; - m_hasContact = ( type == DataSink::Contacts ) ? true : false; - m_hasNote = ( type == DataSink::Notes ) ? true : false; - m_hasTodo = ( type == DataSink::Todos ) ? true : false; + +// m_isEvent = ( type == DataSink::Calendars ) ? true : false; +// m_isContact = ( type == DataSink::Contacts ) ? true : false; +// m_isNote = ( type == DataSink::Notes ) ? true : false; +// m_isTodo = ( type == DataSink::Todos ) ? true : false; } DataSink::~DataSink() { - kDebug() << "DataSink destructor called"; // TODO still needed + kDebug() << "DataSink destructor called"; // TODO still needed } bool DataSink::initialize(OSyncPlugin * plugin, OSyncPluginInfo * info, OSyncObjTypeSink *sink, OSyncError ** error) { - kDebug() << "initializing" << osync_objtype_sink_get_name(sink); - Q_UNUSED( plugin ); - Q_UNUSED( info ); - Q_UNUSED( error ); - - bool enabled = osync_objtype_sink_is_enabled( sink ); - if( ! enabled ) { - kDebug() << "sink is not enabled.."; - return false; - } + kDebug() << "initializing" << osync_objtype_sink_get_name(sink); + kDebug() << "TYPE " << m_type; + Q_UNUSED( plugin ); + Q_UNUSED( info ); + Q_UNUSED( error ); OSyncPluginConfig *config = osync_plugin_info_get_config(info); if (!config) { @@ -86,13 +81,12 @@ return false; } - wrapSink( sink ); - osync_objtype_sink_enable_hashtable(sink , TRUE); - m_hashtable = osync_objtype_sink_get_hashtable(sink); - - if ( ! m_hashtable ) - kDebug() << ">> NO hashtable for objtype:" << osync_objtype_sink_get_name(sink); - + bool enabled = osync_objtype_sink_is_enabled( sink ); + if ( ! enabled ) { + kDebug() << "sink is not enabled.."; + return false; + } + // kDebug() << "Sink wrapped: " << osync_objtype_sink_get_name(sink); // TODO @@ -105,6 +99,35 @@ // return false; // } + wrapSink( sink ); + + OSyncPluginResource *resource = osync_plugin_config_find_active_resource(config, osync_objtype_sink_get_name(sink)); + OSyncList *objfrmtList = osync_plugin_resource_get_objformat_sinks(resource); + + OSyncList *r; + bool hasObjFormat; + for(r = objfrmtList;r;r = r->next) { + OSyncObjFormatSink *objformatsink = (OSyncObjFormatSink *) r->data; + + if(!strcmp("vcard30", osync_objformat_sink_get_objformat(objformatsink))) { + hasObjFormat = true; + kDebug() << "Has objformat vcard30"; + break; + } + } + + if (!hasObjFormat) { + kDebug() << "No objformat vcard30"; + return false; + } + + osync_objtype_sink_set_userdata(sink, this); + osync_objtype_sink_enable_hashtable(sink , TRUE); + OSyncHashTable *hashtable = osync_objtype_sink_get_hashtable(sink); + + if ( ! hashtable ) + kDebug() << ">> NO hashtable for objtype:" << osync_objtype_sink_get_name(sink); + return true; } @@ -133,25 +156,23 @@ void DataSink::getChanges() { + kDebug() << " DataSink::getChanges() called"; OSyncError *oerror = 0; - // ### broken in OpenSync, I don't get valid configuration here! -// #if 1 + OSyncHashTable *hashtable = osync_objtype_sink_get_hashtable(sink());; + Collection col = collection(); if ( !col.isValid() ) { kDebug() << "No collection"; osync_trace( TRACE_EXIT_ERROR, "%s: %s", __PRETTY_FUNCTION__, osync_error_print( &oerror ) ); return; } -// #else -// Collection col( 409 ); -// #endif // FIXME if ( getSlowSink() ) { kDebug() << "we're in the middle of slow-syncing..."; osync_trace( TRACE_INTERNAL, "EKO Got slow-sync, resetting hashtable" ); - if ( ! osync_hashtable_slowsync( m_hashtable, &oerror ) ) { + if ( ! osync_hashtable_slowsync( hashtable, &oerror ) ) { warning( oerror ); osync_trace( TRACE_EXIT_ERROR, "%s: %s", __PRETTY_FUNCTION__, osync_error_print( &oerror ) ); return; @@ -170,6 +191,7 @@ error( OSYNC_ERROR_IO_ERROR, job->errorText() ); return; } + success(); } void DataSink::slotItemsReceived( const Item::List &items ) @@ -187,6 +209,7 @@ OSyncObjFormat *format = osync_format_env_find_objformat( formatenv, formatName().toLatin1() ); OSyncError *error = 0; + OSyncHashTable *hashtable = osync_objtype_sink_get_hashtable(sink()); OSyncChange *change = osync_change_new( &error ); if ( !change ) { @@ -208,24 +231,24 @@ osync_change_set_data( change, odata ); - kDebug() << item.id() << "DATA:" << osync_data_get_printable( odata , &error) << "\n" << "ORIG:" << item.payloadData().data(); + kDebug() << item.id() << "\n" << "DATA:" << osync_data_get_printable( odata , &error) << "\n" << "ORIG:" << item.payloadData().data(); osync_data_unref( odata ); osync_change_set_hash( change, QString::number( item.revision() ).toLatin1() ); - OSyncChangeType changeType = osync_hashtable_get_changetype( m_hashtable, change ); + OSyncChangeType changeType = osync_hashtable_get_changetype( hashtable, change ); osync_change_set_changetype( change, changeType ); - /* + /* */ kDebug() << "changeid:" << osync_change_get_uid( change ) << "itemid:" << item.id() << "revision:" << item.revision() << "changetype:" << changeType - << "hash:" << osync_hashtable_get_hash( m_hashtable, osync_change_get_uid( change ) ) + << "hash:" << osync_hashtable_get_hash( hashtable, osync_change_get_uid( change ) ) << "objtype:" << osync_change_get_objtype( change ) << "objform:" << osync_objformat_get_name( osync_change_get_objformat( change ) ) << "sinkname:" << osync_objtype_sink_get_name( sink() ); - */ + /* */ if ( changeType != OSYNC_CHANGE_TYPE_UNMODIFIED ) osync_context_report_change( context(), change ); @@ -242,7 +265,8 @@ // after the items have been processed, see what's been deleted and send them to opensync OSyncError *error = 0; // FIXME: - OSyncList *u, *uids = osync_hashtable_get_deleted( m_hashtable ); + OSyncHashTable *hashtable = osync_objtype_sink_get_hashtable(sink()); + OSyncList *u, *uids = osync_hashtable_get_deleted( hashtable ); // for ( u = uids; u; u = u->next) { QString uid( (char *)u->data ); @@ -268,7 +292,7 @@ osync_data_set_objtype( data, osync_objtype_sink_get_name( sink() ) ); osync_change_set_data( change, data ); - osync_hashtable_update_change( m_hashtable, change ); + osync_hashtable_update_change( hashtable, change ); osync_change_unref( change ); } @@ -283,6 +307,7 @@ kDebug() << "change uid:" << osync_change_get_uid( change ); kDebug() << "objtype:" << osync_change_get_objtype( change ); kDebug() << "objform:" << osync_objformat_get_name (osync_change_get_objformat( change ) ); + OSyncHashTable *hashtable = osync_objtype_sink_get_hashtable(sink()); switch ( osync_change_get_changetype( change ) ) { case OSYNC_CHANGE_TYPE_ADDED: { @@ -317,7 +342,7 @@ kDebug() << "got invalid changetype?"; } - osync_hashtable_update_change( m_hashtable, change ); + osync_hashtable_update_change( hashtable, change ); success(); } @@ -473,11 +498,12 @@ void DataSink::syncDone() { kDebug() << "sync for sink member done"; -// OSyncError *error = 0; + OSyncError *error = 0; +// OSyncHashTable *hashtable = osync_objtype_sink_get_hashtable(sink()); // osync_objtype_sink_save_hashtable( sink, &error ); // OSyncError *error = 0; // OSyncObjTypeSink *sink =sink(); -// osync_objtype_sink_save_hashtable( sink , &error ); + osync_objtype_sink_save_hashtable( sink() , &error ); //TODO check for errors success(); } Modified: plugins/akonadi-sync/trunk/src/datasink.h ============================================================================== --- plugins/akonadi-sync/trunk/src/datasink.h Thu Sep 23 03:07:14 2010 (r6136) +++ plugins/akonadi-sync/trunk/src/datasink.h Mon Sep 27 20:00:45 2010 (r6137) @@ -99,7 +99,7 @@ bool setPayload( Item *item, const QString &str ); private: - OSyncHashTable *m_hashtable; +// OSyncHashTable *m_hashtable; int m_type; }; Modified: plugins/akonadi-sync/trunk/src/sinkbase.cpp ============================================================================== --- plugins/akonadi-sync/trunk/src/sinkbase.cpp Thu Sep 23 03:07:14 2010 (r6136) +++ plugins/akonadi-sync/trunk/src/sinkbase.cpp Mon Sep 27 20:00:45 2010 (r6137) @@ -37,10 +37,12 @@ static void connect_wrapper(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, void *userdata ) { WRAP( connect() ) + osync_context_report_success(ctx); } static void disconnect_wrapper(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, void *userdata) { WRAP( disconnect() ) +// osync_context_report_success(ctx); } static void get_changes_wrapper(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, osync_bool slow_sync, void *userdata) { @@ -48,6 +50,7 @@ WRAP ( getChanges() ) if ( slow_sync ) sb->setSlowSink(slow_sync); +// osync_context_report_success(ctx); } static void sync_done_wrapper(OSyncObjTypeSink *sink, OSyncPluginInfo *info, OSyncContext *ctx, void *userdata) { @@ -64,7 +67,8 @@ SinkBase::SinkBase( int features ) : mContext( 0 ), mSink( 0 ), - mPluginInfo( 0 ) + mPluginInfo( 0 ), + m_SlowSync( false ) { m_canConnect = ( features & Connect ) ? true : false; @@ -88,8 +92,6 @@ void SinkBase::connect() { Q_ASSERT( false ); - // Success! - osync_context_report_success(mContext); } void SinkBase::setSlowSink(osync_bool s) @@ -155,15 +157,20 @@ Q_ASSERT( sink ); Q_ASSERT( mSink == 0 ); mSink = sink; + + + kDebug() << ">> m_canConnect:" << m_canConnect; + kDebug() << ">> m_canGetChanges:" << m_canGetChanges; +// kDebug() << ">> NO hashtable for objtype:" << m_canConnect; - if ( ! m_canConnect && ( m_hasEvent || m_hasContact) ) + if ( ! m_canConnect ) osync_objtype_sink_set_connect_func(sink, connect_wrapper); - if ( ! m_canDisconnect && ( m_hasEvent || m_hasContact) ) + if ( ! m_canDisconnect || m_isContact || m_isEvent ) osync_objtype_sink_set_disconnect_func(sink, disconnect_wrapper); - if ( ! m_canGetChanges && ( m_hasEvent || m_hasContact) ) + if ( ! m_canGetChanges || m_isContact || m_isEvent ) osync_objtype_sink_set_get_changes_func(sink, get_changes_wrapper); - if ( ! m_canCommit && ( m_hasEvent || m_hasContact) ) + if ( ! m_canCommit || m_isContact || m_isEvent ) osync_objtype_sink_set_commit_func(sink, commit_wrapper); // TODO: check if relevant for akonadi // if ( m_canWrite ) @@ -174,7 +181,7 @@ // osync_objtype_sink_set_commit_func(sink, 0); // if ( m_canBatchCommit ) // osync_objtype_sink_set_commit_func(sink, 0); - if ( ! m_canSyncDone && ( m_hasEvent || m_hasContact) ) + if ( ! m_canSyncDone || m_isContact || m_isEvent) osync_objtype_sink_set_sync_done_func(sink, sync_done_wrapper); } Modified: plugins/akonadi-sync/trunk/src/sinkbase.h ============================================================================== --- plugins/akonadi-sync/trunk/src/sinkbase.h Thu Sep 23 03:07:14 2010 (r6136) +++ plugins/akonadi-sync/trunk/src/sinkbase.h Mon Sep 27 20:00:45 2010 (r6137) @@ -72,7 +72,7 @@ void warning( OSyncError *error ) const; void wrapSink( OSyncObjTypeSink* sink ); OSyncObjTypeSink* sink() const { return mSink; } - bool m_hasContact, m_hasEvent, m_hasTodo, m_hasNote; + bool m_isContact, m_isEvent, m_isTodo, m_isNote; private: // OSyncObjTypeSinkFunctions mWrapedFunctions; |