Page MenuHomePhorge

sinkbase.cpp
No OneTemporary

sinkbase.cpp

/*
Copyright (c) 2008 Volker Krause <vkrause@kde.org>
This library is free software; you can redistribute it and/or modify it
under the terms of the GNU Library General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
This library is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
*/
#include "sinkbase.h"
#include <KDebug>
#define WRAP(X) \
osync_trace( TRACE_ENTRY, "%s(%p, %p, %p)", __PRETTY_FUNCTION__, userdata, info, ctx); \
SinkBase *sink = reinterpret_cast<SinkBase*>( \
osync_objtype_sink_get_userdata( osync_plugin_info_get_sink( info ) ) ); \
sink->setContext( ctx ); \
sink->setPluginInfo( info ); \
sink->X; \
osync_trace( TRACE_EXIT, "%s", __PRETTY_FUNCTION__ );
extern "C"
{
static void connect_wrapper( void *userdata, OSyncPluginInfo *info, OSyncContext *ctx )
{
WRAP( connect() )
}
static void disconnect_wrapper(void *userdata, OSyncPluginInfo *info, OSyncContext *ctx)
{
WRAP( disconnect() )
}
static void get_changes_wrapper(void *userdata, OSyncPluginInfo *info, OSyncContext *ctx)
{
WRAP( getChanges() )
}
static void commit_wrapper(void *userdata, OSyncPluginInfo *info, OSyncContext *ctx, OSyncChange *chg)
{
kDebug() << "commitwrap";
WRAP( commit( chg ) )
}
static void sync_done_wrapper(void *userdata, OSyncPluginInfo *info, OSyncContext *ctx)
{
WRAP( syncDone() )
}
} // extern C
SinkBase::SinkBase( int features ) :
mContext( 0 ),
mSink( 0 ),
mPluginInfo( 0 )
{
mWrapedFunctions.connect = ( features & Connect ) ? connect_wrapper : 0;
mWrapedFunctions.disconnect = ( features & Disconnect ) ? disconnect_wrapper : 0;
mWrapedFunctions.get_changes = ( features & GetChanges ) ? get_changes_wrapper : 0;
mWrapedFunctions.commit = ( features & Commit ) ? commit_wrapper : 0;
mWrapedFunctions.write = ( features & Write ) ? 0 : 0;
mWrapedFunctions.committed_all = ( features & CommittedAll ) ? 0 : 0;
mWrapedFunctions.read = ( features & Read ) ? 0 : 0;
mWrapedFunctions.batch_commit = ( features & BatchCommit ) ? 0 : 0;
mWrapedFunctions.sync_done = ( features & SyncDone ) ? sync_done_wrapper : 0;
}
SinkBase::~SinkBase()
{
if( mSink )
osync_objtype_sink_unref( mSink );
}
void SinkBase::connect()
{
Q_ASSERT( false );
}
void SinkBase::disconnect()
{
Q_ASSERT( false );
}
void SinkBase::getChanges()
{
Q_ASSERT( false );
}
void SinkBase::commit(OSyncChange * chg)
{
Q_UNUSED( chg );
Q_ASSERT( false );
}
void SinkBase::syncDone()
{
Q_ASSERT( false );
}
void SinkBase::success() const
{
kDebug();
Q_ASSERT( mContext );
osync_context_report_success( mContext );
mContext = 0;
}
void SinkBase::error(OSyncErrorType type, const QString &msg) const
{
kDebug();
Q_ASSERT( mContext );
osync_context_report_error( mContext, type, msg.toUtf8() );
mContext = 0;
}
void SinkBase::warning(OSyncError * error) const
{
kDebug();
Q_ASSERT( mContext );
osync_context_report_osyncwarning( mContext, error );
osync_error_unref( &error );
}
void SinkBase::wrapSink(OSyncObjTypeSink * sink)
{
kDebug();
Q_ASSERT( sink );
Q_ASSERT( mSink == 0 );
mSink = sink;
osync_objtype_sink_set_functions( sink, mWrapedFunctions, this );
}
void SinkBase::setPluginInfo(OSyncPluginInfo * info)
{
Q_ASSERT( mPluginInfo == 0 || mPluginInfo == info );
mPluginInfo = info;
}
void SinkBase::setContext(OSyncContext * context)
{
Q_ASSERT( mContext == 0 || context == mContext );
// ### do I need to ref() that here? and then probably deref() the old one somewhere above?
mContext = context;
}
#include "sinkbase.moc"

File Metadata

Mime Type
text/x-c
Expires
Fri, Nov 1, 9:09 AM (1 d, 12 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
10070559
Default Alt Text
sinkbase.cpp (4 KB)

Event Timeline