konnectormanager.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <qdir.h>
00023
00024 #include <kapplication.h>
00025 #include <kdebug.h>
00026 #include <kparts/componentfactory.h>
00027 #include <kstandarddirs.h>
00028
00029 #include "configpart.h"
00030 #include "konnectorinfo.h"
00031
00032 #include "konnectormanager.h"
00033
00034 using namespace KSync;
00035
00036 static KStaticDeleter<KonnectorManager> deleter;
00037 KonnectorManager* KonnectorManager::m_self = 0;
00038
00039 KonnectorManager::KonnectorManager()
00040 : KRES::Manager<Konnector>( "konnector" )
00041 {
00042 m_auto = false;
00043 m_filter.setAutoDelete( true );
00044 m_konnectors.setAutoDelete( true );
00045
00046 readConfig();
00047
00048 connectSignals();
00049 }
00050
00051 KonnectorManager::~KonnectorManager()
00052 {
00053 }
00054
00055 KonnectorManager* KonnectorManager::self()
00056 {
00057 if ( !m_self ) deleter.setObject( m_self, new KonnectorManager() );
00058
00059 return m_self;
00060 }
00061
00062 Device::ValueList KonnectorManager::query()
00063 {
00064 return allDevices();
00065 }
00066
00067 Konnector *KonnectorManager::load( const Device& dev )
00068 {
00069 Konnector *plugin = KParts::ComponentFactory::
00070 createInstanceFromLibrary<Konnector>( dev.library().local8Bit(), this );
00071 if ( !plugin ) return 0;
00072
00073 connect( plugin, SIGNAL( synceesRead( Konnector * ) ),
00074 SLOT( slotSync( Konnector * ) ) );
00075 connect( plugin, SIGNAL( sig_progress( Konnector *, const Progress & ) ),
00076 SLOT( slotProgress( Konnector *, const Progress & ) ) );
00077 connect( plugin, SIGNAL( sig_error( Konnector *, const Error & ) ),
00078 SLOT( slotError( Konnector *, const Error& ) ) );
00079 connect( plugin, SIGNAL( sig_downloaded( Konnector *, const SynceeList & ) ),
00080 SLOT( slotDownloaded( Konnector *, const SynceeList & ) ) );
00081
00082 m_konnectors.append( plugin );
00083
00084 return plugin;
00085 }
00086
00087 Konnector *KonnectorManager::load( const QString& deviceName )
00088 {
00089 return load( find( deviceName ) );
00090 }
00091
00092 bool KonnectorManager::unload( Konnector *k )
00093 {
00094 return m_konnectors.remove( k );
00095 }
00096
00097 bool KonnectorManager::autoLoadFilter() const
00098 {
00099 return m_auto;
00100 }
00101
00102 void KonnectorManager::setAutoLoadFilter( bool aut )
00103 {
00104 m_auto = aut;
00105 }
00106
00107 void KonnectorManager::add( Filter* filter)
00108 {
00109 m_filAdded.append( filter );
00110 }
00111
00112 void KonnectorManager::deleteFilter( Filter* filter)
00113 {
00114 m_filAdded.remove( filter );
00115 }
00116
00117 const Filter::PtrList KonnectorManager::filters()
00118 {
00119 return m_filAdded;
00120 }
00121
00122 void KonnectorManager::write( Konnector * , const SynceeList & )
00123 {
00124
00125 #if 0
00126 kdDebug(5201) << "KonnectorManager::write" << endl;
00127 if ( !plugin ) {
00128 kdDebug(5201) << " Did not contain the plugin " << endl;
00129 emit error( plugin, StdError::konnectorDoesNotExist() );
00130 emit progress( plugin, StdProgress::done() );
00131 return;
00132 }
00133 kdDebug(5201) << "Konnector: " << plugin->info().name() << endl;
00134 plugin->writeSyncees();
00135 #endif
00136 }
00137
00138
00139
00140
00141
00142
00143 Device::ValueList KonnectorManager::allDevices()
00144 {
00145 m_devices.clear();
00146
00147 QStringList list = KGlobal::dirs()->findDirs("data", "kitchensync" );
00148
00149
00150 for (QStringList::Iterator it = list.begin(); it != list.end(); ++it ) {
00151 QDir dir( (*it), "*.desktop" );
00152 QStringList files = dir.entryList();
00153
00154 QStringList::Iterator fileIt;
00155
00156 for (fileIt = files.begin(); fileIt != files.end(); ++fileIt )
00157 m_devices.append( parseDevice( (*it) + (*fileIt ) ) );
00158 }
00159 return m_devices;
00160 }
00161
00162 Device KonnectorManager::parseDevice( const QString &path )
00163 {
00164 KService service( path );
00165
00166 QString name = service.name();
00167 QString lib = service.library();
00168 QString group = service.property( QString::fromLatin1("Group" ) ).toString();
00169 QString vendo = service.property( QString::fromLatin1("Vendor") ).toString();
00170 QString id = service.property( QString::fromLatin1("Id" ) ).toString();
00171
00172 kdDebug(5201) << "Id " << id << " " << name << endl;
00173
00174 return Device(name, group, vendo, lib, id );
00175 }
00176
00177 Device KonnectorManager::find( const QString& device )
00178 {
00179 Device dev;
00180 if ( m_devices.isEmpty() ) return dev;
00181
00182 Device::ValueList::Iterator it;
00183 for ( it = m_devices.begin(); it != m_devices.end(); ++it ) {
00184 if ( (*it).identify() == device ) {
00185 dev = (*it);
00186 break;
00187 }
00188 }
00189 return dev;
00190 }
00191
00192 void KonnectorManager::slotSync( Konnector *k, const SynceeList & list )
00193 {
00194 const SynceeList & unknown = findUnknown( list );
00195 filter( unknown, list );
00196 emit sync( k, list );
00197 }
00198
00199 void KonnectorManager::slotProgress( Konnector *k, const Progress &pro )
00200 {
00201 emit progress( k, pro );
00202 }
00203
00204 void KonnectorManager::slotError( Konnector *k, const Error &err )
00205 {
00206 emit error( k, err );
00207 }
00208
00209 void KonnectorManager::slotDownloaded( Konnector *k, const SynceeList & list)
00210 {
00211 const SynceeList & unknown = findUnknown( list );
00212 filter( unknown, list );
00213 emit downloaded( k, list );
00214 }
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224 void KonnectorManager::filter( const SynceeList & ,
00225 const SynceeList & )
00226 {
00227 kdError() << "KonnectorManager::filter() not implemented" << endl;
00228 }
00229
00230 SynceeList KonnectorManager::findUnknown( const SynceeList & )
00231 {
00232 #if 0
00233 lst.setAutoDelete( false );
00234 const SynceeList & list;
00235 Syncee* syn;
00236 for ( syn = lst.first(); syn; syn = lst.next() ) {
00237 if ( syn->type() == QString::fromLatin1("UnknownSyncEntry") ) {
00238 lst.remove( syn );
00239 list.append( syn );
00240 }
00241 }
00242 return list;
00243 #endif
00244 return SynceeList();
00245 }
00246
00247 void KonnectorManager::connectSignals()
00248 {
00249 Iterator it;
00250 for( it = begin(); it != end(); ++it ) {
00251 connect( *it, SIGNAL( synceesRead( Konnector * ) ),
00252 SIGNAL( synceesRead( Konnector * ) ) );
00253 connect( *it, SIGNAL( synceeReadError( Konnector * ) ),
00254 SIGNAL( synceeReadError( Konnector * ) ) );
00255 connect( *it, SIGNAL( synceesWritten( Konnector * ) ),
00256 SIGNAL( synceesWritten( Konnector * ) ) );
00257 connect( *it, SIGNAL( synceeWriteError( Konnector * ) ),
00258 SIGNAL( synceeWriteError( Konnector * ) ) );
00259 }
00260 }
00261
00262 #include "konnectormanager.moc"
This file is part of the documentation for kitchensync Library Version 3.3.2.