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"