-rw-r--r-- | kaddressbook/kabcore.cpp | 2 | ||||
-rw-r--r-- | kaddressbook/kabcore.h | 2 | ||||
-rw-r--r-- | korganizer/calendarview.cpp | 19 | ||||
-rw-r--r-- | korganizer/calendarview.h | 2 | ||||
-rw-r--r-- | korganizer/koprefs.cpp | 10 | ||||
-rw-r--r-- | korganizer/koprefs.h | 1 | ||||
-rw-r--r-- | libkdepim/ksyncmanager.cpp | 51 | ||||
-rw-r--r-- | libkdepim/ksyncmanager.h | 8 | ||||
-rw-r--r-- | libkdepim/ksyncprefsdialog.cpp | 6 |
9 files changed, 80 insertions, 21 deletions
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp index 033e537..2dea619 100644 --- a/kaddressbook/kabcore.cpp +++ b/kaddressbook/kabcore.cpp @@ -3304,9 +3304,9 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo } //this is a overwritten callbackmethods from the syncinterface -bool KABCore::sync(KSyncManager* manager, QString filename, int mode) +bool KABCore::sync(KSyncManager* manager, QString filename, int mode,QString resource) { //pending prepare addresseeview for output //pending detect, if remote file has REV field. if not switch to external sync diff --git a/kaddressbook/kabcore.h b/kaddressbook/kabcore.h index 42b7709..c4a0b3b 100644 --- a/kaddressbook/kabcore.h +++ b/kaddressbook/kabcore.h @@ -511,9 +511,9 @@ class KABCore : public QWidget, public KSyncInterface KAddressBookMain *mMainWindow; // should be the same like mGUIClient #endif //KAB_EMBEDDED //this are the overwritten callbackmethods from the syncinterface - virtual bool sync(KSyncManager* manager, QString filename, int mode); + virtual bool sync(KSyncManager* manager, QString filename, int mode,QString resource); virtual bool syncExternal(KSyncManager* manager, QString resource); virtual void removeSyncInfo( QString syncProfile); bool syncPhone(); void message( QString m , bool startTimer = true); diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp index 31e103d..8965d3b 100644 --- a/korganizer/calendarview.cpp +++ b/korganizer/calendarview.cpp @@ -1977,9 +1977,8 @@ bool CalendarView::syncCalendar(QString filename, int mode) void CalendarView::syncExternal( int mode ) { mGlobalSyncMode = SYNC_MODE_EXTERNAL; - qApp->processEvents(); CalendarLocal* calendar = new CalendarLocal(); calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); bool syncOK = false; @@ -5033,9 +5032,9 @@ void CalendarView::keyPressEvent ( QKeyEvent *e) e->ignore(); } -bool CalendarView::sync(KSyncManager* manager, QString filename, int mode) +bool CalendarView::sync(KSyncManager* manager, QString filename, int mode,QString resource) { if ( manager != mSyncManager) qDebug("KO: Internal error-1. SyncManager mismatch "); @@ -5043,9 +5042,23 @@ bool CalendarView::sync(KSyncManager* manager, QString filename, int mode) qDebug("KO: SyncKDE request detected!"); } mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); mCurrentSyncName = mSyncManager->getCurrentSyncName(); - return syncCalendar( filename, mode ); + if ( !resource.isEmpty() ) { + int exclusiveSyncResource = KOPrefs::instance()->getFuzzyCalendarID( resource ); + qDebug( "KO: Sync request for resource: %s", resource.latin1() ); + + if ( !exclusiveSyncResource ) { + qDebug( "KO: Requested sync resource not found: %s", resource.latin1() ); + return false; + } + mCalendar->setDefaultCalendar( exclusiveSyncResource ); + mCalendar->setDefaultCalendarEnabledOnly(); + } + bool result = syncCalendar( filename, mode ); + if ( !resource.isEmpty() ) + restoreCalendarSettings(); + return result; } bool CalendarView::syncExternal(KSyncManager* manager, QString resource) { //mSyncManager = manager; diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h index 80f7ed4..f85b6a3 100644 --- a/korganizer/calendarview.h +++ b/korganizer/calendarview.h @@ -517,9 +517,9 @@ class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Obser void createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval ); // show a standard warning // returns KMsgBox::yesNoCancel() int msgCalModified(); - virtual bool sync(KSyncManager* manager, QString filename, int mode); + virtual bool sync(KSyncManager* manager, QString filename, int mode, QString resource); virtual bool syncExternal(KSyncManager* manager, QString resource); virtual void removeSyncInfo( QString syncProfile); void setSyncManager(KSyncManager* manager); diff --git a/korganizer/koprefs.cpp b/korganizer/koprefs.cpp index 1b0e5f4..31ef338 100644 --- a/korganizer/koprefs.cpp +++ b/korganizer/koprefs.cpp @@ -527,8 +527,18 @@ int KOPrefs::getCalendarID( const QString & name ) kkf = mCalendars.next(); } return 1; } +int KOPrefs::getFuzzyCalendarID( const QString & name ) +{ + KopiCalendarFile * kkf = mCalendars.first(); + while ( kkf ) { + if ( name.lower() == kkf->mName.lower()) + return kkf->mCalNumber; + kkf = mCalendars.next(); + } + return 0; +} QString KOPrefs::calName( int calNum) const { return (mDefCalColors[calNum-1])->mName; } diff --git a/korganizer/koprefs.h b/korganizer/koprefs.h index bac8010..70da096 100644 --- a/korganizer/koprefs.h +++ b/korganizer/koprefs.h @@ -104,8 +104,9 @@ class KOPrefs : public KPimPrefs void deleteCalendar( int ); QColor defaultColor( int ) const; QString calName( int ) const; int getCalendarID( const QString & name ); + int getFuzzyCalendarID( const QString & name ); protected: void setTimeZoneIdDefault(); /** Fill empty mail fields with default values. */ diff --git a/libkdepim/ksyncmanager.cpp b/libkdepim/ksyncmanager.cpp index d71264f..a64eb34 100644 --- a/libkdepim/ksyncmanager.cpp +++ b/libkdepim/ksyncmanager.cpp @@ -195,8 +195,9 @@ void KSyncManager::slotClearMenu( int action ) } void KSyncManager::slotSyncMenu( int action ) { qDebug("KSM::syncaction %d ", action); + mCurrentResourceLocal = ""; if ( action == 5000 ) return; mSyncWithDesktop = false; if ( action == 0 ) { @@ -312,14 +313,17 @@ void KSyncManager::slotSyncMenu( int action ) mPhoneDevice = temp->getPhoneDevice( ) ; mPhoneConnection = temp->getPhoneConnection( ); mPhoneModel = temp->getPhoneModel( ); syncPhone(); - } else if ( temp->getIsPiSync() ) { + } else if ( temp->getIsPiSync()|| temp->getIsPiSyncSpec()) { + mSpecificResources.clear(); if ( mTargetApp == KAPI ) { mPassWordPiSync = temp->getRemotePwAB(); mActiveSyncPort = temp->getRemotePortAB(); mActiveSyncIP = temp->getRemoteIPAB(); } else if ( mTargetApp == KOPI ) { + if ( temp->getIsPiSyncSpec() ) + mSpecificResources = QStringList::split( ":", temp->getResSpecKopi() ); mPassWordPiSync = temp->getRemotePw(); mActiveSyncPort = temp->getRemotePort(); mActiveSyncIP = temp->getRemoteIP(); } else { @@ -502,9 +506,9 @@ bool KSyncManager::syncWithFile( QString fn , bool quick ) return false; } if ( result == 0 ) { //qDebug("Now sycing ... "); - if ( ret = mImplementation->sync( this, fn, mSyncAlgoPrefs ) ) + if ( ret = mImplementation->sync( this, fn, mSyncAlgoPrefs ,mCurrentResourceLocal ) ) mParent->topLevelWidget()->setCaption( i18n("Synchronization successful") ); else mParent->topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") ); if ( ! quick ) @@ -526,8 +530,9 @@ void KSyncManager::multiSync( bool askforPrefs ) { if (blockSave()) return; setBlockSave(true); + mCurrentResourceLocal = ""; if ( askforPrefs ) { QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!"); if ( QMessageBox::information( mParent, i18n("KDE-Pim Sync"), question, @@ -571,8 +576,9 @@ int KSyncManager::ringSync() KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); QStringList syncProfileNames = mSyncProfileNames; KSyncProfile* temp = new KSyncProfile (); mAskForPreferences = false; + mCurrentResourceLocal = ""; for ( i = 0; i < syncProfileNames.count(); ++i ) { mCurrentSyncProfile = i; temp->setName(syncProfileNames[mCurrentSyncProfile]); temp->readConfig(&config); @@ -648,14 +654,16 @@ int KSyncManager::ringSync() mPhoneDevice = temp->getPhoneDevice( ) ; mPhoneConnection = temp->getPhoneConnection( ); mPhoneModel = temp->getPhoneModel( ); syncPhone(); - } else if ( temp->getIsPiSync() ) { + } else if ( temp->getIsPiSync() || temp->getIsPiSyncSpec()) { + mSpecificResources.clear(); if ( mTargetApp == KAPI ) { mPassWordPiSync = temp->getRemotePwAB(); mActiveSyncPort = temp->getRemotePortAB(); mActiveSyncIP = temp->getRemoteIPAB(); } else if ( mTargetApp == KOPI ) { + mSpecificResources = QStringList::split( ":", temp->getResSpecKopi() ); mPassWordPiSync = temp->getRemotePw(); mActiveSyncPort = temp->getRemotePort(); mActiveSyncIP = temp->getRemoteIP(); } else { @@ -1126,11 +1134,31 @@ void KSyncManager::syncPi() mParent->topLevelWidget()->setCaption( i18n("Sorry, no valid port.Syncing cancelled.") ); mPisyncFinished = true; return; } - KCommandSocket* commandSocket = new KCommandSocket( mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() ); - connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) ); - commandSocket->readFile( syncFileName() ); + mCurrentResourceLocal = ""; + mCurrentResourceRemote = ""; + if ( mSpecificResources.count() ) { + int startLocal = 0; + int startRemote = mSpecificResources.count()/2; + while ( startLocal < mSpecificResources.count()/2 ) { + mPisyncFinished = false; + mCurrentResourceLocal = mSpecificResources[ startLocal ]; + mCurrentResourceRemote = mSpecificResources[ startRemote ]; + KCommandSocket* commandSocket = new KCommandSocket( mCurrentResourceRemote, mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() ); + connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) ); + commandSocket->readFile( syncFileName() ); + while ( !mPisyncFinished ) { + //qDebug("waiting "); + qApp->processEvents(); + } + ++startLocal; + } + } else { + KCommandSocket* commandSocket = new KCommandSocket( "", mPassWordPiSync, port, mActiveSyncIP, this, mParent->topLevelWidget() ); + connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) ); + commandSocket->readFile( syncFileName() ); + } } void KSyncManager::deleteCommandSocket(KCommandSocket*s, int state) { @@ -1153,9 +1181,9 @@ void KSyncManager::deleteCommandSocket(KCommandSocket*s, int state) else if ( state == KCommandSocket::errorUN ) mParent->topLevelWidget()->setCaption( i18n("Unknown error on remote.") ); delete s; if ( state == KCommandSocket::errorR ) { - KCommandSocket* commandSocket = new KCommandSocket( mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget()); + KCommandSocket* commandSocket = new KCommandSocket( "",mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget()); connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) ); commandSocket->sendStop(); } mPisyncFinished = true; @@ -1190,9 +1218,9 @@ void KSyncManager::readFileFromSocket() if ( ! syncWithFile( fileName , true ) ) { mParent->topLevelWidget()->setCaption( i18n("Syncing failed.") ); syncOK = false; } - KCommandSocket* commandSocket = new KCommandSocket( mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget() ); + KCommandSocket* commandSocket = new KCommandSocket( "",mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this, mParent->topLevelWidget() ); connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) ); if ( mWriteBackFile && syncOK ) { mParent->topLevelWidget()->setCaption( i18n("Sending back file ...") ); commandSocket->writeFile( fileName ); @@ -1461,10 +1489,13 @@ void KServerSocket::readBackFileFromSocket() blockRC = false; } -KCommandSocket::KCommandSocket ( QString password, Q_UINT16 port, QString host, QObject * parent, QWidget * cap, const char * name ): QObject( parent, name ) +KCommandSocket::KCommandSocket ( QString remres, QString password, Q_UINT16 port, QString host, QObject * parent, QWidget * cap, const char * name ): QObject( parent, name ) { + mRemoteResource = remres; + if ( mRemoteResource.isEmpty() ) + mRemoteResource = "ALL"; mPassWord = password; mSocket = 0; mFirst = false; mFirstLine = true; @@ -1489,9 +1520,9 @@ void KCommandSocket::sendFileRequest() QTextStream os( mSocket ); os.setEncoding( QTextStream::Latin1 ); QString curDt = " " +KGlobal::locale()->formatDateTime(QDateTime::currentDateTime().addSecs(-1),true, true,KLocale::ISODate ); - os << "GET " << mPassWord << curDt <<"\r\n\r\n"; + os << "GET " << mPassWord << curDt << mRemoteResource << "\r\n\r\n"; } void KCommandSocket::readFile( QString fn ) { diff --git a/libkdepim/ksyncmanager.h b/libkdepim/ksyncmanager.h index d3734da..f4654ce 100644 --- a/libkdepim/ksyncmanager.h +++ b/libkdepim/ksyncmanager.h @@ -80,9 +80,9 @@ class KCommandSocket : public QObject { Q_OBJECT public: enum state { successR, errorR, successW, errorW, errorTO, errorPW, errorCA, errorFI, errorUN, errorED,quiet }; - KCommandSocket ( QString password, Q_UINT16 port, QString host, QObject * parent=0, QWidget* cap = 0, const char * name=0 ); + KCommandSocket (QString remoteResource, QString password, Q_UINT16 port, QString host, QObject * parent=0, QWidget* cap = 0, const char * name=0 ); void readFile( QString ); void writeFile( QString ); void sendStop(); @@ -97,8 +97,9 @@ class KCommandSocket : public QObject void readFileFromSocket(); void deleteSocket(); void writeFileToSocket(); private : + QString mRemoteResource; int mConnectCount; int mConnectMax; KProgressDialog mConnectProgress; QWidget* tlw; @@ -201,8 +202,11 @@ class KSyncManager : public QObject bool edit_pisync_options(); int ringSync(); QString getPassword( ); bool mPisyncFinished; + QStringList mSpecificResources; + QString mCurrentResourceLocal; + QString mCurrentResourceRemote; bool mBlockSaveFlag; QWidget* mParent; KSyncInterface* mImplementation; TargetApp mTargetApp; @@ -221,9 +225,9 @@ private slots: class KSyncInterface { public : virtual void removeSyncInfo( QString syncProfile) = 0; - virtual bool sync(KSyncManager* manager, QString filename, int mode) = 0; + virtual bool sync(KSyncManager* manager, QString filename, int mode, QString resource) = 0; virtual bool syncExternal(KSyncManager* manager, QString resource) { // empty implementation, because some syncable applications do not // have an external(sharpdtm) syncmode, like pwmanager. diff --git a/libkdepim/ksyncprefsdialog.cpp b/libkdepim/ksyncprefsdialog.cpp index 292cde1..27f7932 100644 --- a/libkdepim/ksyncprefsdialog.cpp +++ b/libkdepim/ksyncprefsdialog.cpp @@ -591,10 +591,10 @@ void KSyncPrefsDialog::profileChanged( int item ) mIsKapiFileR->setChecked(prof->getIsKapiFile()) ; QStringList res = QStringList::split( ":",prof->getResSpecKopi()); - int i; - for ( i = 0;i < res.count(); ++i ) { + int i= res.count()/2; + for ( ;i < res.count(); ++i ) { mResTableKopi->setText( i, 0, res[i] ); } res = QStringList::split( ":",prof->getResSpecKapi()); for ( i = 0;i < res.count(); ++i ) { @@ -751,9 +751,9 @@ void KSyncPrefsDialog::saveProfile() prof->setFilterInAB ( mFilterInAB ->currentText ()); prof->setFilterOutAB ( mFilterOutAB ->currentText ()); if ( mIsPiSpecific->isChecked() ) { - QStringList res; + QStringList res = mResourcesKopi; int i; for ( i = 0;i < mResourcesKopi.count(); ++i ) { res.append( mResTableKopi->text( i, 0 )); } |