kitchensync

member.cpp

00001 /*
00002     This file is part of libqopensync.
00003 
00004     Copyright (c) 2005 Tobias Koenig <tokoe@kde.org>
00005 
00006     This library is free software; you can redistribute it and/or
00007     modify it under the terms of the GNU Library General Public
00008     License as published by the Free Software Foundation; either
00009     version 2 of the License, or (at your option) any later version.
00010 
00011     This library is distributed in the hope that it will be useful,
00012     but WITHOUT ANY WARRANTY; without even the implied warranty of
00013     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014     Library General Public License for more details.
00015 
00016     You should have received a copy of the GNU Library General Public License
00017     along with this library; see the file COPYING.LIB.  If not, write to
00018     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00019     Boston, MA 02110-1301, USA.
00020 */
00021 
00022 #include <opensync/opensync.h>
00023 #include <stdlib.h>
00024 
00025 #include "member.h"
00026 
00027 using namespace QSync;
00028 
00029 Member::Member()
00030   : mMember( 0 )
00031 {
00032 }
00033 
00034 Member::~Member()
00035 {
00036 }
00037 
00038 bool Member::isValid() const
00039 {
00040   OSyncError *error = 0;
00041 
00042   if ( !mMember )
00043     return false;
00044 
00045   if ( !osync_member_instance_plugin( mMember, pluginName().utf8(), &error ) ) {
00046     tqDebug( "Plugin %s is not valid: %s", pluginName().latin1(), osync_error_print( &error ) );
00047     osync_error_free( &error );
00048     return false;
00049   }
00050 
00051   return true;
00052 }
00053 
00054 TQString Member::configurationDirectory() const
00055 {
00056   Q_ASSERT( mMember );
00057 
00058   return TQString::fromLatin1( osync_member_get_configdir( mMember ) );
00059 }
00060 
00061 TQString Member::pluginName() const
00062 {
00063   Q_ASSERT( mMember );
00064 
00065   return TQString::fromLatin1( osync_member_get_pluginname( mMember ) );
00066 }
00067 
00068 Plugin Member::plugin() const
00069 {
00070   Q_ASSERT( mMember );
00071 
00072   Plugin plugin;
00073 
00074   OSyncPlugin *oplugin = osync_member_get_plugin( mMember );
00075   if ( oplugin )
00076     plugin.mPlugin = oplugin;
00077 
00078   return plugin;
00079 }
00080 
00081 int Member::id() const
00082 {
00083   Q_ASSERT( mMember );
00084 
00085   return osync_member_get_id( mMember );
00086 }
00087 
00088 void Member::setName( const TQString &name )
00089 {
00090   Q_ASSERT( mMember );
00091 
00092   osync_member_set_name( mMember, (const char*)name.utf8() );
00093 }
00094 
00095 TQString Member::name() const
00096 {
00097   Q_ASSERT( mMember );
00098 
00099   return TQString::fromUtf8( osync_member_get_name( mMember ) );
00100 }
00101 
00102 void Member::setConfiguration( const TQByteArray &configurationData )
00103 {
00104   Q_ASSERT( mMember );
00105 
00106   osync_member_set_config( mMember, configurationData.data(), configurationData.size() );
00107 }
00108 
00109 Result Member::configuration( TQByteArray &configurationData, bool useDefault )
00110 {
00111   Q_ASSERT( mMember );
00112 
00113   char *data;
00114   int size;
00115 
00116   OSyncError *error = 0;
00117   osync_bool ok = false;
00118   if ( useDefault )
00119     ok = osync_member_get_config_or_default( mMember, &data, &size, &error );
00120   else
00121     ok = osync_member_get_config( mMember, &data, &size, &error );
00122 
00123   if ( !ok ) {
00124     return Result( &error );
00125   } else {
00126     configurationData.resize( size );
00127     memcpy( configurationData.data(), data, size );
00128 
00129     return Result();
00130   }
00131 }
00132 
00133 Result Member::save()
00134 {
00135   Q_ASSERT( mMember );
00136 
00137   OSyncError *error = 0;
00138   if ( !osync_member_save( mMember, &error ) )
00139     return Result( &error );
00140   else
00141     return Result();
00142 }
00143 
00144 Result Member::instance( const Plugin &plugin )
00145 {
00146   OSyncError *error = 0;
00147   if ( !osync_member_instance_plugin( mMember, plugin.name().utf8(), &error ) )
00148     return Result( &error );
00149   else
00150     return Result();
00151 }
00152 
00153 bool Member::operator==( const Member &member ) const
00154 {
00155   return mMember == member.mMember;
00156 }
00157 
00158 TQString Member::scanDevices( const TQString &query )
00159 {
00160   Q_ASSERT( mMember );
00161 
00162   OSyncError *error = 0;
00163   char *data = (char*)osync_member_call_plugin( mMember, "scan_devices", const_cast<char*>( query.utf8().data() ), &error );
00164   if ( error != 0 ) {
00165     osync_error_free( &error );
00166     return TQString();
00167   } else {
00168     TQString xml = TQString::fromUtf8( data );
00169     free( data );
00170     return xml;
00171   }
00172 }
00173 
00174 bool Member::testConnection( const TQString &configuration )
00175 {
00176   Q_ASSERT( mMember );
00177 
00178   OSyncError *error = 0;
00179   int *result = (int*)osync_member_call_plugin( mMember, "test_connection", const_cast<char*>( configuration.utf8().data() ), &error );
00180   if ( error != 0 ) {
00181     osync_error_free( &error );
00182     return false;
00183   } else {
00184     bool value = ( *result == 1 ? true : false );
00185     free( result );
00186     return value;
00187   }
00188 }