engine.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "engine.h"
00023
00024 #include "actionpart.h"
00025
00026 #include <konnector.h>
00027 #include <konnectormanager.h>
00028 #include <konnectorinfo.h>
00029 #include <klocale.h>
00030
00031 #include <qdatetime.h>
00032
00033 using namespace KSync;
00034
00035 Engine::Engine( QPtrList<ActionPart> &parts )
00036 : mParts( parts )
00037 {
00038 }
00039
00040 Engine::~Engine()
00041 {
00042 }
00043
00044 void Engine::slotProgress( Konnector *k, const Progress &p )
00045 {
00046 logMessage( i18n("Got Progress from Konnector at address %1: %2").arg( (long)k ).arg( p.text() ) );
00047 }
00048
00049 void Engine::slotError( Konnector *k, const Error &e )
00050 {
00051 logMessage( i18n("Got Progress from Konnector at address %1: %2").arg( (long)k ).arg( e.text() ) );
00052 }
00053
00054 void Engine::logMessage( const QString &message )
00055 {
00056 QString text = QTime::currentTime().toString() + ": ";
00057 text += message;
00058
00059 kdDebug() << "LOG: " << text << endl;
00060 }
00061
00062 Konnector::List Engine::konnectors()
00063 {
00064 return mKonnectors;
00065 }
00066
00067 void Engine::go()
00068 {
00069 kdDebug() << "Engine::go():" << endl;
00070
00071 logMessage( i18n("Sync Action triggered") );
00072
00073 mOpenedKonnectors.clear();
00074 mProcessedKonnectors.clear();
00075 mKonnectorCount = 0;
00076
00077 mKonnectors.clear();
00078
00079 KRES::Manager<Konnector> *manager = KonnectorManager::self();
00080 KRES::Manager<Konnector>::ActiveIterator it;
00081 for( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) {
00082 kdDebug() << " Engine::go(): Konnector: id: " << (*it)->identifier()
00083 << " name: " << (*it)->resourceName() << endl;
00084 mKonnectors.append( *it );
00085 }
00086
00087 bool needsRead = false;
00088
00089 ActionPart *part;
00090 for ( part = mParts.first(); part; part = mParts.next() ) {
00091 part->filterKonnectors( mKonnectors );
00092 if ( part->needsKonnectorRead() ) needsRead = true;
00093 }
00094
00095 if ( needsRead ) {
00096 Konnector *k;
00097 for( k = mKonnectors.first(); k; k = mKonnectors.next() ) {
00098 logMessage( i18n("Connecting '%1'").arg( k->resourceName() ) );
00099 if ( !k->connectDevice() ) {
00100 logMessage( i18n("Error connecting device.") );
00101 } else {
00102 mOpenedKonnectors.append( k );
00103 ++mKonnectorCount;
00104 }
00105 }
00106
00107 for ( k = mOpenedKonnectors.first(); k; k = mOpenedKonnectors.next() ) {
00108 logMessage( i18n("Request Syncees") );
00109 if ( !k->readSyncees() ) {
00110 logMessage( i18n("Request failed.") );
00111 }
00112 }
00113 } else {
00114 executeActions();
00115 }
00116 }
00117
00118 void Engine::slotSynceesRead( Konnector *k )
00119 {
00120 logMessage( i18n("Syncees read from '%1'").arg( k->resourceName() ) );
00121
00122 mProcessedKonnectors.append( k );
00123
00124 SynceeList syncees = k->syncees();
00125
00126 if ( syncees.count() == 0 ) {
00127 logMessage( i18n("Syncee list is empty.") );
00128 return;
00129 }
00130
00131 tryExecuteActions();
00132 }
00133
00134 void Engine::tryExecuteActions()
00135 {
00136 kdDebug() << "Engine::tryExecuteActions()" << endl;
00137
00138 kdDebug() << " konnectorCount: " << mKonnectorCount << endl;
00139 kdDebug() << " processedKonnectorsCount: " << mProcessedKonnectors.count()
00140 << endl;
00141
00142 if ( mKonnectorCount == mProcessedKonnectors.count() ) {
00143 executeActions();
00144 }
00145 }
00146
00147 void Engine::executeActions()
00148 {
00149 logMessage( i18n("Execute Actions") );
00150
00151 bool needsWrite = false;
00152
00153 ActionPart *part;
00154 for ( part = mParts.first(); part; part = mParts.next() ) {
00155 part->executeAction();
00156 if ( part->needsKonnectorWrite() ) needsWrite = true;
00157 }
00158
00159 if ( needsWrite ) {
00160 mProcessedKonnectors.clear();
00161
00162 Konnector *konnector;
00163 for( konnector = mOpenedKonnectors.first(); konnector;
00164 konnector = mOpenedKonnectors.next() ) {
00165 if ( konnector->writeSyncees() ) {
00166 kdDebug() << "writeSyncees(): " << konnector->resourceName() << endl;
00167 } else {
00168 kdError() << "Error requesting to write Syncee: "
00169 << konnector->resourceName() << endl;
00170 }
00171 }
00172 } else {
00173 finish();
00174 }
00175 }
00176
00177 void Engine::slotSynceeReadError( Konnector *k )
00178 {
00179 logMessage( i18n("Error reading Syncees from '%1'")
00180 .arg( k->resourceName() ) );
00181
00182 --mKonnectorCount;
00183
00184 tryExecuteActions();
00185 }
00186
00187 void Engine::slotSynceesWritten( Konnector *k )
00188 {
00189 logMessage( i18n("Syncees written to '%1'").arg( k->resourceName() ) );
00190
00191 mProcessedKonnectors.append( k );
00192
00193 disconnectDevice( k );
00194
00195 tryFinish();
00196 }
00197
00198 void Engine::slotSynceeWriteError( Konnector *k )
00199 {
00200 logMessage( i18n("Error writing Syncees to '%1'")
00201 .arg( k->resourceName() ) );
00202
00203 --mKonnectorCount;
00204
00205 disconnectDevice( k );
00206
00207 tryFinish();
00208 }
00209
00210 void Engine::disconnectDevice( Konnector *k )
00211 {
00212 if ( !k->disconnectDevice() ) {
00213 logMessage( i18n("Error disconnecting device") );
00214 }
00215 }
00216
00217 void Engine::tryFinish()
00218 {
00219 if ( mKonnectorCount == mProcessedKonnectors.count() ) {
00220 finish();
00221 }
00222 }
00223
00224 void Engine::finish()
00225 {
00226 logMessage( i18n("Synchronization finished.") );
00227 }
00228
00229 #include "engine.moc"
This file is part of the documentation for kitchensync Library Version 3.3.2.