summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/kabcore.cpp509
-rw-r--r--kaddressbook/kabcore.h38
-rw-r--r--kaddressbook/kabprefs.h18
-rw-r--r--libkdepim/kpimprefs.h21
-rw-r--r--libkdepim/ksyncmanager.cpp274
-rw-r--r--libkdepim/ksyncmanager.h79
-rw-r--r--libkdepim/libkdepimE.pro2
7 files changed, 335 insertions, 606 deletions
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index df634d0..f222234 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -137,60 +137,60 @@ $Id$
#include "details/detailsviewcontainer.h"
#include "kabprefs.h"
#include "xxportmanager.h"
#include "incsearchwidget.h"
#include "jumpbuttonbar.h"
#include "extensionmanager.h"
#include "addresseeconfig.h"
#include <kcmultidialog.h>
#ifdef _WIN32_
#include "kaimportoldialog.h"
#else
#include <unistd.h>
#endif
// sync includes
#include <libkdepim/ksyncprofile.h>
#include <libkdepim/ksyncprefsdialog.h>
bool pasteWithNewUid = true;
#ifdef KAB_EMBEDDED
KABCore::KABCore( KAddressBookMain *client, bool readWrite, QWidget *parent, const char *name )
- : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ),
+ : QWidget( parent, name ), KSyncInterface(), mGUIClient( client ), mViewManager( 0 ),
mExtensionManager( 0 ),mConfigureDialog( 0 ),/*US mLdapSearchDialog( 0 ),*/
mReadWrite( readWrite ), mModified( false ), mMainWindow(client)
#else //KAB_EMBEDDED
KABCore::KABCore( KXMLGUIClient *client, bool readWrite, QWidget *parent, const char *name )
- : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ),
+ : QWidget( parent, name ), KSyncInterface(), mGUIClient( client ), mViewManager( 0 ),
mExtensionManager( 0 ), mConfigureDialog( 0 ), mLdapSearchDialog( 0 ),
mReadWrite( readWrite ), mModified( false )
#endif //KAB_EMBEDDED
{
-
- mBlockSaveFlag = false;
+ // syncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)this, KSyncManager::KAPI, KABPrefs::instance(), syncMenu);
+ // syncManager->setBlockSave(false);
mExtensionBarSplitter = 0;
mIsPart = !parent->inherits( "KAddressBookMain" );
mAddressBook = KABC::StdAddressBook::self();
KABC::StdAddressBook::setAutomaticSave( false );
#ifndef KAB_EMBEDDED
mAddressBook->setErrorHandler( new KABC::GUIErrorHandler );
#endif //KAB_EMBEDDED
connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook * ) ),
SLOT( addressBookChanged() ) );
#if 0
// LP moved to addressbook init method
mAddressBook->addCustomField( i18n( "Department" ), KABC::Field::Organization,
"X-Department", "KADDRESSBOOK" );
mAddressBook->addCustomField( i18n( "Profession" ), KABC::Field::Organization,
"X-Profession", "KADDRESSBOOK" );
mAddressBook->addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization,
"X-AssistantsName", "KADDRESSBOOK" );
mAddressBook->addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization,
"X-ManagersName", "KADDRESSBOOK" );
mAddressBook->addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal,
@@ -248,48 +248,50 @@ KABCore::KABCore( KXMLGUIClient *client, bool readWrite, QWidget *parent, const
#ifndef KAB_EMBEDDED
connect( mViewManager, SIGNAL( urlDropped( const KURL& ) ),
mXXPortManager, SLOT( importVCard( const KURL& ) ) );
connect( mDetails, SIGNAL( browse( const QString& ) ),
SLOT( browse( const QString& ) ) );
mAddressBookService = new KAddressBookService( this );
#endif //KAB_EMBEDDED
mEditorDialog = 0;
createAddresseeEditorDialog( this );
setModified( false );
}
KABCore::~KABCore()
{
// save();
//saveSettings();
//KABPrefs::instance()->writeConfig();
delete AddresseeConfig::instance();
mAddressBook = 0;
KABC::StdAddressBook::close();
+
+ delete syncManager;
}
void KABCore::restoreSettings()
{
mMultipleViewsAtOnce = KABPrefs::instance()->mMultipleViewsAtOnce;
bool state;
if (mMultipleViewsAtOnce)
state = KABPrefs::instance()->mDetailsPageVisible;
else
state = false;
mActionDetails->setChecked( state );
setDetailsVisible( state );
state = KABPrefs::instance()->mJumpButtonBarVisible;
mActionJumpBar->setChecked( state );
setJumpButtonBarVisible( state );
/*US
QValueList<int> splitterSize = KABPrefs::instance()->mDetailsSplitter;
if ( splitterSize.count() == 0 ) {
splitterSize.append( width() / 2 );
@@ -1053,72 +1055,72 @@ void KABCore::editContact( const QString &uid )
KApplication::execDialog ( mEditorDialog );
}
}
/**
Shows or edits the detail view for the given uid. If the uid is QString::null,
the method will try to find a selected addressee in the view.
*/
void KABCore::executeContact( const QString &uid /*US = QString::null*/ )
{
if ( mMultipleViewsAtOnce )
{
editContact( uid );
}
else
{
setDetailsVisible( true );
mActionDetails->setChecked(true);
}
}
void KABCore::save()
{
- if (mBlockSaveFlag)
+ if (syncManager->blockSave())
return;
- mBlockSaveFlag = true;
+ syncManager->setBlockSave(true);
if ( !mModified )
return;
QString text = i18n( "There was an error while attempting to save\n the "
"address book. Please check that some \nother application is "
"not using it. " );
statusMessage(i18n("Saving addressbook ... "));
#ifndef KAB_EMBEDDED
KABC::StdAddressBook *b = dynamic_cast<KABC::StdAddressBook*>( mAddressBook );
if ( !b || !b->save() ) {
KMessageBox::error( this, text, i18n( "Unable to Save" ) );
}
#else //KAB_EMBEDDED
KABC::StdAddressBook *b = (KABC::StdAddressBook*)( mAddressBook );
if ( !b || !b->save() ) {
QMessageBox::critical( this, i18n( "Unable to Save" ), text, i18n("Ok"));
}
#endif //KAB_EMBEDDED
statusMessage(i18n("Addressbook saved!"));
setModified( false );
- mBlockSaveFlag = false;
+ syncManager->setBlockSave(false);
}
void KABCore::statusMessage(QString mess , int time )
{
//topLevelWidget()->setCaption( mess );
// pending setting timer to revome message
}
void KABCore::undo()
{
UndoStack::instance()->undo();
// Refresh the view
mViewManager->refreshView();
}
void KABCore::redo()
{
RedoStack::instance()->redo();
// Refresh the view
mViewManager->refreshView();
}
void KABCore::setJumpButtonBarVisible( bool visible )
@@ -1515,48 +1517,51 @@ void KABCore::initGUI()
mDetails = new ViewContainer( mDetailsSplitter );
topLayout->addWidget( mDetailsSplitter );
topLayout->setStretchFactor( mDetailsSplitter, 100 );
#else //KAB_NOSPLITTER
QHBoxLayout *topLayout = new QHBoxLayout( this );
//US topLayout->setSpacing( KDialogBase::spacingHint() );
topLayout->setSpacing( 10 );
// mDetailsSplitter = new QSplitter( this );
QVBox *viewSpace = new QVBox( this );
mViewManager = new ViewManager( this, viewSpace );
viewSpace->setStretchFactor( mViewManager, 1 );
mDetails = new ViewContainer( this );
topLayout->addWidget( viewSpace );
// topLayout->setStretchFactor( mDetailsSplitter, 100 );
topLayout->addWidget( mDetails );
#endif //KAB_NOSPLITTER
*/
+ syncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)this, KSyncManager::KAPI, KABPrefs::instance(), syncMenu);
+ syncManager->setBlockSave(false);
+
#endif //KAB_EMBEDDED
initActions();
#ifdef KAB_EMBEDDED
addActionsManually();
//US make sure the export and import menues are initialized before creating the xxPortManager.
mXXPortManager = new XXPortManager( this, this );
// LR mIncSearchWidget = new IncSearchWidget( mMainWindow->getIconToolBar() );
//mMainWindow->toolBar()->insertWidget(-1, 4, mIncSearchWidget);
// mActionQuit->plug ( mMainWindow->toolBar());
//mIncSearchWidget = new IncSearchWidget( mMainWindow->toolBar() );
//mMainWindow->toolBar()->insertWidget(-1, 0, mIncSearchWidget);
// mIncSearchWidget->hide();
connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ),
SLOT( incrementalSearch( const QString& ) ) );
mJumpButtonBar = new JumpButtonBar( this, this );
topLayout->addWidget( mJumpButtonBar );
//US topLayout->setStretchFactor( mJumpButtonBar, 10 );
@@ -1877,50 +1882,50 @@ void KABCore::addActionsManually()
mActionDelete->plug( tb );
mActionRedo->plug( tb );
}
}
//mActionQuit->plug ( tb );
// tb->insertWidget(-1, 0, mIncSearchWidget, 6);
//US link the searchwidget first to this.
// The real linkage to the toolbar happens later.
//US mIncSearchWidget->reparent(tb, 0, QPoint(50,0), TRUE);
//US tb->insertItem( mIncSearchWidget );
/*US
mIncSearchWidget = new IncSearchWidget( tb );
connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ),
SLOT( incrementalSearch( const QString& ) ) );
mJumpButtonBar = new JumpButtonBar( this, this );
//US topLayout->addWidget( mJumpButtonBar );
this->layout()->add( mJumpButtonBar );
*/
#endif //KAB_EMBEDDED
- connect ( syncMenu, SIGNAL( activated ( int ) ), this, SLOT (slotSyncMenu( int ) ) );
- fillSyncMenu();
+ connect ( syncMenu, SIGNAL( activated ( int ) ), syncManager, SLOT (slotSyncMenu( int ) ) );
+ syncManager->fillSyncMenu();
}
void KABCore::showLicence()
{
KApplication::showLicence();
}
void KABCore::removeVoice()
{
if ( KMessageBox::questionYesNo( this, i18n("After importing, phone numbers\nmay have two or more types.\n(E.g. work+voice)\nThese numbers are shown as \"other\".\nClick Yes to remove the voice type\nfrom numbers with more than one type.\n\nRemove voice type?") ) == KMessageBox::No )
return;
KABC::Addressee::List list = mViewManager->selectedAddressees();
KABC::Addressee::List::Iterator it;
for ( it = list.begin(); it != list.end(); ++it ) {
PhoneNumber::List phoneNumbers = (*it).phoneNumbers();
PhoneNumber::List::Iterator phoneIt;
bool found = false;
for ( phoneIt = phoneNumbers.begin(); phoneIt != phoneNumbers.end(); ++phoneIt ) {
if ( (*phoneIt).type() & PhoneNumber::Voice) { // voice found
if ((*phoneIt).type() - PhoneNumber::Voice ) {
(*phoneIt).setType((*phoneIt).type() - PhoneNumber::Voice );
(*it).insertPhoneNumber( (*phoneIt) );
found = true;
}
}
@@ -2080,494 +2085,89 @@ void KABCore::requestForDetails(const QString& sourceChannel, const QString& ses
#endif
mMainWindow->showMaximized();
mMainWindow-> raise();
mViewManager->setSelected( "", false);
mViewManager->refreshView( "" );
mViewManager->setSelected( foundUid, true );
mViewManager->refreshView( foundUid );
if ( !mMultipleViewsAtOnce )
{
setDetailsVisible( true );
mActionDetails->setChecked(true);
}
}
}
void KABCore::faq()
{
KApplication::showFile( "KA/Pi FAQ", "kdepim/kaddressbook/kapiFAQ.txt" );
}
-
-void KABCore::fillSyncMenu()
-{
- if ( syncMenu->count() )
- syncMenu->clear();
- syncMenu->insertItem( i18n("Configure..."), 0 );
- syncMenu->insertSeparator();
- syncMenu->insertItem( i18n("Multiple sync"), 1 );
- syncMenu->insertSeparator();
- KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
- config.setGroup("General");
- QStringList prof = config.readListEntry("SyncProfileNames");
- KABPrefs::instance()->mLocalMachineName = config.readEntry("LocalMachineName","undefined");
- if ( prof.count() < 3 ) {
- prof.clear();
- prof << i18n("Sharp_DTM");
- prof << i18n("Local_file");
- prof << i18n("Last_file");
- KSyncProfile* temp = new KSyncProfile ();
- temp->setName( prof[0] );
- temp->writeConfig(&config);
- temp->setName( prof[1] );
- temp->writeConfig(&config);
- temp->setName( prof[2] );
- temp->writeConfig(&config);
- config.setGroup("General");
- config.writeEntry("SyncProfileNames",prof);
- config.writeEntry("ExternSyncProfiles","Sharp_DTM");
- config.sync();
- delete temp;
- }
- KABPrefs::instance()->mExternSyncProfiles = config.readListEntry("ExternSyncProfiles");
- KABPrefs::instance()->mSyncProfileNames = prof;
- int i;
- for ( i = 0; i < prof.count(); ++i ) {
-
- syncMenu->insertItem( prof[i], 1000+i );
- if ( i == 2 )
- syncMenu->insertSeparator();
- }
- QDir app_dir;
- if ( !app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) {
- syncMenu->setItemEnabled( false , 1000 );
- }
- //probaly useless
- //mView->setupExternSyncProfiles();
-}
-void KABCore::slotSyncMenu( int action )
-{
- //qDebug("syncaction %d ", action);
- if ( action == 0 ) {
-
- // seems to be a Qt2 event handling bug
- // syncmenu.clear causes a segfault at first time
- // when we call it after the main event loop, it is ok
- // same behaviour when calling OM/Pi via QCOP for the first time
- QTimer::singleShot ( 1, this, SLOT ( confSync() ) );
- //confSync();
-
- return;
- }
- if ( action == 1 ) {
- multiSync( true );
- return;
- }
-
- if (mBlockSaveFlag)
- return;
- mBlockSaveFlag = true;
- mCurrentSyncProfile = action - 1000 ;
- mCurrentSyncDevice = KABPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile] ;
- mCurrentSyncName = KABPrefs::instance()->mLocalMachineName ;
- KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
- KSyncProfile* temp = new KSyncProfile ();
- temp->setName(KABPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]);
- temp->readConfig(&config);
- KABPrefs::instance()->mAskForPreferences = temp->getAskForPreferences();
- KABPrefs::instance()->mSyncAlgoPrefs = temp->getSyncPrefs();
- KABPrefs::instance()->mWriteBackFile = temp->getWriteBackFile();
- KABPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting();
- KABPrefs::instance()->mWriteBackInFuture = 0;
- if ( temp->getWriteBackFuture() )
- KABPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
- KABPrefs::instance()->mShowSyncSummary = temp->getShowSummaryAfterSync();
- if ( action == 1000 ) {
- syncSharp();
-
- } else if ( action == 1001 ) {
- syncLocalFile();
-
- } else if ( action == 1002 ) {
- quickSyncLocalFile();
-
- } else if ( action >= 1003 ) {
- if ( temp->getIsLocalFileSync() ) {
- if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) )
- KABPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
- } else {
- if ( temp->getIsPhoneSync() ) {
- KABPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ;
- KABPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( );
- KABPrefs::instance()->mPhoneModel = temp->getPhoneModel( );
- syncPhone();
- } else
- syncRemote( temp );
-
- }
- }
- delete temp;
- mBlockSaveFlag = false;
-}
-
-void KABCore::syncLocalFile()
-{
-
- QString fn =KABPrefs::instance()->mLastSyncedLocalFile;
-
- fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename(*.ics/*.vcs)"), this );
- if ( fn == "" )
- return;
- if ( syncWithFile( fn, false ) ) {
- qDebug("syncLocalFile() successful ");
- }
-
-}
-bool KABCore::syncWithFile( QString fn , bool quick )
-{
- bool ret = false;
- QFileInfo info;
- info.setFile( fn );
- QString mess;
- bool loadbup = true;
- if ( !info. exists() ) {
- mess = i18n( "Sync file \n...%1\ndoes not exist!\nNothing synced!\n").arg(fn.right( 30) );
- int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
- mess );
- return ret;
- }
- int result = 0;
- if ( !quick ) {
- mess = i18n("Sync with file \n...%1\nfrom:\n%2\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false ));
- result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
- mess,
- i18n("Sync"), i18n("Cancel"), 0,
- 0, 1 );
- if ( result )
- return false;
- }
- if ( KABPrefs::instance()->mAskForPreferences )
- edit_sync_options();
- if ( result == 0 ) {
- //qDebug("Now sycing ... ");
- if ( ret = syncAB( fn, KABPrefs::instance()->mSyncAlgoPrefs ) )
- setCaption( i18n("Synchronization successful") );
- else
- setCaption( i18n("Sync cancelled or failed. Nothing synced.") );
- if ( ! quick )
- KABPrefs::instance()->mLastSyncedLocalFile = fn;
- setModified();
- }
- return ret;
-}
-void KABCore::quickSyncLocalFile()
-{
-
- if ( syncWithFile( KABPrefs::instance()->mLastSyncedLocalFile, false ) ) {
- qDebug("quick syncLocalFile() successful ");
-
- }
-}
-void KABCore::multiSync( bool askforPrefs )
-{
- if (mBlockSaveFlag)
- return;
- mBlockSaveFlag = true;
- 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( this, i18n("KO/Pi Sync"),
- question,
- i18n("Yes"), i18n("No"),
- 0, 0 ) != 0 ) {
- mBlockSaveFlag = false;
- setCaption(i18n("Aborted! Nothing synced!"));
- return;
- }
- mCurrentSyncDevice = i18n("Multiple profiles") ;
- KABPrefs::instance()->mSyncAlgoPrefs = KABPrefs::instance()->mRingSyncAlgoPrefs;
- if ( askforPrefs ) {
- edit_sync_options();
- KABPrefs::instance()->mRingSyncAlgoPrefs = KABPrefs::instance()->mSyncAlgoPrefs;
- }
- setCaption(i18n("Multiple sync started.") );
- qApp->processEvents();
- int num = ringSync() ;
- if ( num > 1 )
- ringSync();
- mBlockSaveFlag = false;
- if ( num )
- save();
- if ( num )
- setCaption(i18n("%1 profiles synced. Multiple sync completed!").arg(num) );
- else
- setCaption(i18n("Nothing synced! No profiles defined for multisync!"));
- return;
-}
-int KABCore::ringSync()
-{
- int syncedProfiles = 0;
- int i;
- QTime timer;
- KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
- QStringList syncProfileNames = KABPrefs::instance()->mSyncProfileNames;
- KSyncProfile* temp = new KSyncProfile ();
- KABPrefs::instance()->mAskForPreferences = false;
- for ( i = 0; i < syncProfileNames.count(); ++i ) {
- mCurrentSyncProfile = i;
- temp->setName(syncProfileNames[mCurrentSyncProfile]);
- temp->readConfig(&config);
- if ( temp->getIncludeInRingSyncAB() && ( i < 1 || i > 2 )) {
- setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... "));
- ++syncedProfiles;
- // KABPrefs::instance()->mAskForPreferences = temp->getAskForPreferences();
- KABPrefs::instance()->mWriteBackFile = temp->getWriteBackFile();
- KABPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting();
- KABPrefs::instance()->mWriteBackInFuture = 0;
- if ( temp->getWriteBackFuture() )
- KABPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
- KABPrefs::instance()->mShowSyncSummary = false;
- mCurrentSyncDevice = syncProfileNames[i] ;
- mCurrentSyncName = KABPrefs::instance()->mLocalMachineName;
- if ( i == 0 ) {
- syncSharp();
- } else {
- if ( temp->getIsLocalFileSync() ) {
- if ( syncWithFile( temp->getRemoteFileNameAB( ), true ) )
- KABPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
- } else {
- if ( temp->getIsPhoneSync() ) {
- KABPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ;
- KABPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( );
- KABPrefs::instance()->mPhoneModel = temp->getPhoneModel( );
- syncPhone();
- } else
- syncRemote( temp, false );
-
- }
- }
- timer.start();
- setCaption(i18n("Multiple sync in progress ... please wait!") );
- while ( timer.elapsed () < 2000 ) {
- qApp->processEvents();
-#ifndef _WIN32_
- sleep (1);
-#endif
- }
-
- }
-
- }
- delete temp;
- return syncedProfiles;
-}
-
-void KABCore::syncRemote( KSyncProfile* prof, bool ask)
-{
- QString question;
- if ( ask ) {
- question = i18n("Do you really want\nto remote sync\nwith profile \n")+ prof->getName()+" ?\n";
- if ( QMessageBox::information( this, i18n("KO/Pi Sync"),
- question,
- i18n("Yes"), i18n("No"),
- 0, 0 ) != 0 )
- return;
- }
- QString command = prof->getPreSyncCommandAB();
- int fi;
- if ( (fi = command.find("$PWD$")) > 0 ) {
- QString pwd = getPassword();
- command = command.left( fi )+ pwd + command.mid( fi+5 );
-
- }
- int maxlen = 30;
- if ( QApplication::desktop()->width() > 320 )
- maxlen += 25;
- setCaption ( i18n( "Copy remote file to local machine..." ) );
- int fileSize = 0;
- int result = system ( command );
- // 0 : okay
- // 256: no such file or dir
- //
- qDebug("KO: Remote copy result(0 = okay): %d ",result );
- if ( result != 0 ) {
- int len = maxlen;
- while ( len < command.length() ) {
- command.insert( len , "\n" );
- len += maxlen +2;
- }
- question = i18n("Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n").arg (command) ;
- QMessageBox::information( this, i18n("KO/Pi Sync - ERROR"),
- question,
- i18n("Okay!")) ;
- setCaption ("KO/Pi");
- return;
- }
- setCaption ( i18n( "Copying succeed." ) );
- //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() );
- if ( syncWithFile( prof->getLocalTempFileAB(), true ) ) {
-// Event* e = mView->getLastSyncEvent();
-// e->setReadOnly( false );
-// e->setLocation( KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]);
-// e->setReadOnly( true );
- if ( KABPrefs::instance()->mWriteBackFile ) {
- command = prof->getPostSyncCommandAB();
- int fi;
- if ( (fi = command.find("$PWD$")) > 0 ) {
- QString pwd = getPassword();
- command = command.left( fi )+ pwd + command.mid( fi+5 );
-
- }
- setCaption ( i18n( "Writing back file ..." ) );
- result = system ( command );
- qDebug("KO: Writing back file result: %d ", result);
- if ( result != 0 ) {
- setCaption ( i18n( "Writing back file result: " )+QString::number( result ) );
- return;
- } else {
- setCaption ( i18n( "Syncronization sucessfully completed" ) );
- }
- }
- }
- return;
-}
-#include <qpushbutton.h>
-#include <qradiobutton.h>
-#include <qbuttongroup.h>
-void KABCore::edit_sync_options()
-{
- //mDialogManager->showSyncOptions();
- //KABPrefs::instance()->mSyncAlgoPrefs
- QDialog dia( this, "dia", true );
- dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice );
- QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia);
- QVBoxLayout lay ( &dia );
- lay.setSpacing( 2 );
- lay.setMargin( 3 );
- lay.addWidget(&gr);
- QRadioButton loc ( i18n("Take local entry on conflict"), &gr );
- QRadioButton rem ( i18n("Take remote entry on conflict"), &gr );
- QRadioButton newest( i18n("Take newest entry on conflict"), &gr );
- QRadioButton ask( i18n("Ask for every entry on conflict"), &gr );
- QRadioButton f_loc( i18n("Force: Take local entry always"), &gr );
- QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr );
- //QRadioButton both( i18n("Take both on conflict"), &gr );
- QPushButton pb ( "OK", &dia);
- lay.addWidget( &pb );
- connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
- switch ( KABPrefs::instance()->mSyncAlgoPrefs ) {
- case 0:
- loc.setChecked( true);
- break;
- case 1:
- rem.setChecked( true );
- break;
- case 2:
- newest.setChecked( true);
- break;
- case 3:
- ask.setChecked( true);
- break;
- case 4:
- f_loc.setChecked( true);
- break;
- case 5:
- f_rem.setChecked( true);
- break;
- case 6:
- // both.setChecked( true);
- break;
- default:
- break;
- }
- if ( dia.exec() ) {
- KABPrefs::instance()->mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ;
- }
-
-
-}
-QString KABCore::getPassword( )
-{
- QString retfile = "";
- QDialog dia ( this, "input-dialog", true );
- QLineEdit lab ( &dia );
- lab.setEchoMode( QLineEdit::Password );
- QVBoxLayout lay( &dia );
- lay.setMargin(7);
- lay.setSpacing(7);
- lay.addWidget( &lab);
- dia.setFixedSize( 230,50 );
- dia.setCaption( i18n("Enter password") );
- QPushButton pb ( "OK", &dia);
- lay.addWidget( &pb );
- connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
- dia.show();
- int res = dia.exec();
- if ( res )
- retfile = lab.text();
- dia.hide();
- qApp->processEvents();
- return retfile;
-
-}
#include <libkcal/syncdefines.h>
KABC::Addressee KABCore::getLastSyncAddressee()
{
Addressee lse;
+ QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice();
+
//qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice );
if (lse.isEmpty()) {
qDebug("Creating new last-syncAddressee ");
lse.setUid( "last-syncAddressee-"+mCurrentSyncDevice );
QString sum = "";
if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
sum = "E: ";
lse.setFamilyName("!"+sum+mCurrentSyncDevice + i18n(" - sync event"));
lse.setRevision( mLastAddressbookSync );
lse.setCategories( i18n("SyncEvent") );
mAddressBook->insertAddressee( lse );
}
return lse;
}
int KABCore::takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full )
{
//void setZaurusId(int id);
// int zaurusId() const;
// void setZaurusUid(int id);
// int zaurusUid() const;
// void setZaurusStat(int id);
// int zaurusStat() const;
// 0 equal
// 1 take local
// 2 take remote
// 3 cancel
QDateTime lastSync = mLastAddressbookSync;
QDateTime localMod = local->revision();
QDateTime remoteMod = remote->revision();
+
+ QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice();
+
if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
bool remCh, locCh;
remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
//qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
locCh = ( localMod > mLastAddressbookSync );
if ( !remCh && ! locCh ) {
//qDebug("both not changed ");
lastSync = localMod.addDays(1);
if ( mode <= SYNC_PREF_ASK )
return 0;
} else {
if ( locCh ) {
//qDebug("loc changed %s %s", localMod.toString().latin1(), mLastAddressbookSync.toString().latin1());
lastSync = localMod.addDays( -1 );
if ( !remCh )
remoteMod =( lastSync.addDays( -1 ) );
} else {
//qDebug(" not loc changed ");
lastSync = localMod.addDays( 1 );
if ( remCh )
remoteMod =( lastSync.addDays( 1 ) );
}
@@ -2632,57 +2232,63 @@ int KABCore::takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, i
return 1;
if ( lastSync > localMod )
return 2;
localIsNew = localMod >= remoteMod;
//qDebug("conflict! ************************************** ");
{
KPIM::AddresseeChooser acd ( *local,*remote, localIsNew , this );
result = acd.executeD(localIsNew);
return result;
}
break;
case SYNC_PREF_FORCE_LOCAL:
return 1;
break;
case SYNC_PREF_FORCE_REMOTE:
return 2;
break;
default:
// SYNC_PREF_TAKE_BOTH not implemented
break;
}
return 0;
}
+
+
bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode)
{
bool syncOK = true;
int addedAddressee = 0;
int addedAddresseeR = 0;
int deletedAddresseeR = 0;
int deletedAddresseeL = 0;
int changedLocal = 0;
int changedRemote = 0;
+
+ QString mCurrentSyncName = syncManager->getCurrentSyncName();
+ QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice();
+
//QPtrList<Addressee> el = local->rawAddressees();
Addressee addresseeR;
QString uid;
int take;
Addressee addresseeL;
Addressee addresseeRSync;
Addressee addresseeLSync;
// KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees();
//KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees();
bool fullDateRange = false;
local->resetTempSyncStat();
mLastAddressbookSync = QDateTime::currentDateTime();
QDateTime modifiedCalendar = mLastAddressbookSync;;
addresseeLSync = getLastSyncAddressee();
qDebug("Last Sync %s ", addresseeLSync.revision().toString().latin1());
addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName );
if ( !addresseeR.isEmpty() ) {
addresseeRSync = addresseeR;
remote->removeAddressee(addresseeR );
} else {
if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
addresseeRSync = addresseeLSync ;
} else {
@@ -2900,54 +2506,58 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
mLastAddressbookSync.setTime( QTime (t.hour (), t.minute (), t.second () ) );
addresseeLSync.setRevision( mLastAddressbookSync );
addresseeRSync.setRevision( mLastAddressbookSync );
addresseeRSync.setRole( i18n("!Remote from: ")+mCurrentSyncName ) ;
addresseeLSync.setRole(i18n("!Local from: ") + mCurrentSyncName );
addresseeRSync.setGivenName( i18n("!DO NOT EDIT!") ) ;
addresseeLSync.setGivenName(i18n("!DO NOT EDIT!") );
addresseeRSync.setOrganization( "!"+mLastAddressbookSync.toString() ) ;
addresseeLSync.setOrganization("!"+ mLastAddressbookSync.toString() );
addresseeRSync.setNote( "" ) ;
addresseeLSync.setNote( "" );
if ( mGlobalSyncMode == SYNC_MODE_NORMAL)
remote->insertAddressee( addresseeRSync, false );
local->insertAddressee( addresseeLSync, false );
QString mes;
mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n"),addedAddressee, addedAddresseeR, changedLocal, changedRemote, deletedAddresseeL, deletedAddresseeR );
if ( KABPrefs::instance()->mShowSyncSummary ) {
KMessageBox::information(this, mes, i18n("KA/Pi Synchronization") );
}
qDebug( mes );
return syncOK;
}
-bool KABCore::syncAB(QString filename, int mode)
+
+//this is a overwritten callbackmethods from the syncinterface
+bool KABCore::sync(KSyncManager* manager, QString filename, int mode)
{
//pending prepare addresseeview for output
//pending detect, if remote file has REV field. if not switch to external sync
mGlobalSyncMode = SYNC_MODE_NORMAL;
+ QString mCurrentSyncDevice = manager->getCurrentSyncDevice();
+
AddressBook abLocal(filename,"syncContact");
bool syncOK = false;
if ( abLocal.load() ) {
qDebug("AB loaded %s,sync mode %d",filename.latin1(), mode );
bool external = false;
bool isXML = false;
if ( filename.right(4) == ".xml") {
mGlobalSyncMode = SYNC_MODE_EXTERNAL;
isXML = true;
abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice );
} else {
Addressee lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice );
if ( ! lse.isEmpty() ) {
if ( lse.familyName().left(4) == "!E: " )
external = true;
} else {
bool found = false;
AddressBook::Iterator it;
for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
if ( (*it).revision().date().year() > 2003 ) {
found = true;
break;
}
}
@@ -2987,82 +2597,73 @@ bool KABCore::syncAB(QString filename, int mode)
}
if ( syncOK )
mViewManager->refreshView();
return syncOK;
#if 0
if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) {
getEventViewerDialog()->setSyncMode( true );
syncOK = synchronizeCalendar( mCalendar, calendar, mode );
getEventViewerDialog()->setSyncMode( false );
if ( syncOK ) {
if ( KOPrefs::instance()->mWriteBackFile )
{
storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
storage->save();
}
}
setModified();
}
#endif
}
-void KABCore::confSync()
-{
- static KSyncPrefsDialog* sp = 0;
- if ( ! sp ) {
- sp = new KSyncPrefsDialog( this, "syncprefs", true );
- }
- sp->usrReadConfig();
-#ifndef DESKTOP_VERSION
- sp->showMaximized();
-#else
- sp->show();
-#endif
- sp->exec();
- KABPrefs::instance()->mSyncProfileNames = sp->getSyncProfileNames();
- KABPrefs::instance()->mLocalMachineName = sp->getLocalMachineName ();
- fillSyncMenu();
-}
-void KABCore::syncSharp()
-{
- if ( ! syncExternal("sharp") )
- qDebug("ERROR sync sharp ");;
-}
-bool KABCore::syncExternal(QString resource)
+
+//this is a overwritten callbackmethods from the syncinterface
+bool KABCore::syncExternal(KSyncManager* manager, QString resource)
{
- if ( mModified )
- save();
- if ( KABPrefs::instance()->mAskForPreferences )
- edit_sync_options();
- qDebug("syncSharp() ");
+ QString mCurrentSyncDevice = manager->getCurrentSyncDevice();
+
AddressBook abLocal( resource,"syncContact");
bool syncOK = false;
if ( abLocal.load() ) {
qDebug("AB sharp loaded ,sync device %s",mCurrentSyncDevice.latin1());
mGlobalSyncMode = SYNC_MODE_EXTERNAL;
abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice );
+ qDebug("KABCore::syncExternal: why do we acces here KABPrefs and not somehow KSyncProfile? ");
syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, KABPrefs::instance()->mSyncAlgoPrefs );
if ( syncOK ) {
if ( KABPrefs::instance()->mWriteBackFile ) {
abLocal.saveAB();
abLocal.postExternSync( mAddressBook,mCurrentSyncDevice );
}
}
setModified();
}
if ( syncOK )
mViewManager->refreshView();
return syncOK;
}
-void KABCore::syncPhone()
+
+//called by the syncmanager to indicate that the work has to marked as dirty.
+void KABCore::sync_setModified()
{
- if ( mModified )
- save();
- qDebug("pending syncPhone(); ");
- //mView->syncPhone();
- setModified();
+ setModified();
+}
+//called by the syncmanager to ask if the dirty flag is set.
+bool KABCore::sync_isModified()
+{
+ return mModified;
}
+
+
+//called by the syncmanager to indicate that the work has to be saved.
+void KABCore::sync_save()
+{
+ save();
+}
+
+
+
diff --git a/kaddressbook/kabcore.h b/kaddressbook/kabcore.h
index e89bf41..ef61d6d 100644
--- a/kaddressbook/kabcore.h
+++ b/kaddressbook/kabcore.h
@@ -11,84 +11,85 @@
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
As a special exception, permission is given to link this program
with any edition of Qt, and distribute the resulting executable,
without including the source code for Qt in the source distribution.
*/
#ifndef KABCORE_H
#define KABCORE_H
#include <kabc/field.h>
#ifndef KAB_EMBEDDED
#endif //KAB_EMBEDDED
#include <qdict.h>
#include <qwidget.h>
#include <qpopupmenu.h>
+#include <ksyncmanager.h>
namespace KABC {
class AddressBook;
}
#ifndef KAB_EMBEDDED
class KAboutData;
class KConfig;
class KAddressBookService;
class LDAPSearchDialog;
#else //KAB_EMBEDDED
class KAddressBookMain;
//US class QAction;
#endif //KAB_EMBEDDED
class KCMultiDialog;
class KXMLGUIClient;
class ExtensionManager;
class XXPortManager;
class JumpButtonBar;
class IncSearchWidget;
class KDGanttMinimizeSplitter;
class KAction;
class KActionCollection;
class KToggleAction;
class KSyncProfile;
class QAction;
class QMenuBar;
class QSplitter;
class ViewContainer;
class ViewManager;
class AddresseeEditorDialog;
class Ir;
-class KABCore : public QWidget
+class KABCore : public QWidget, public KSyncInterface
{
Q_OBJECT
public:
KABCore( KAddressBookMain *client, bool readWrite, QWidget *parent, const char *name = 0 );
~KABCore();
#ifdef KAB_EMBEDDED
//US added functionality
QPopupMenu* getViewMenu() {return viewMenu;}
QPopupMenu* getFilterMenu() {return filterMenu;}
QPopupMenu* getSettingsMenu() {return settingsMenu;}
void addActionsManually();
#endif //KAB_EMBEDDED
/**
Restores the global settings.
*/
void restoreSettings();
/**
Saves the global settings.
@@ -320,49 +321,49 @@ class KABCore : public QWidget
*/
void openLDAPDialog();
/**
Creates a KAddressBookPrinter, which will display the print
dialog and do the printing.
*/
void print();
/**
Registers a new GUI client, so plugins can register its actions.
*/
void addGUIClient( KXMLGUIClient *client );
void requestForNameEmailUidList(const QString& sourceChannel, const QString& sessionuid);
void requestForDetails(const QString& sourceChannel, const QString& sessionuid, const QString& name, const QString& email, const QString& uid);
signals:
void contactSelected( const QString &name );
void contactSelected( const QPixmap &pixmap );
public slots:
void setDetailsVisible( bool visible );
void setDetailsToState();
- void slotSyncMenu( int );
+ // void slotSyncMenu( int );
private slots:
void setJumpButtonBarVisible( bool visible );
void importFromOL();
void extensionModified( const KABC::Addressee::List &list );
void extensionChanged( int id );
void clipboardDataChanged();
void updateActionMenu();
void configureKeyBindings();
void removeVoice();
#ifdef KAB_EMBEDDED
void configureResources();
#endif //KAB_EMBEDDED
void slotEditorDestroyed( const QString &uid );
void configurationChanged();
void addressBookChanged();
private:
void initGUI();
void initActions();
AddresseeEditorDialog *createAddresseeEditorDialog( QWidget *parent,
const char *name = 0 );
@@ -426,60 +427,55 @@ class KABCore : public QWidget
KAction *mActionCategories;
KAction *mActionAboutKAddressbook;
KAction *mActionLicence;
KAction *mActionFaq;
KAction *mActionDeleteView;
QPopupMenu *viewMenu;
QPopupMenu *filterMenu;
QPopupMenu *settingsMenu;
QPopupMenu *changeMenu;
//US QAction *mActionSave;
QPopupMenu *ImportMenu;
QPopupMenu *ExportMenu;
//LR additional methods
KAction *mActionRemoveVoice;
KAction * mActionImportOL;
#ifndef KAB_EMBEDDED
KAddressBookService *mAddressBookService;
#endif //KAB_EMBEDDED
class KABCorePrivate;
KABCorePrivate *d;
- bool mBlockSaveFlag;
+ //US bool mBlockSaveFlag;
#ifdef KAB_EMBEDDED
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 syncExternal(KSyncManager* manager, QString resource);
+
+ //called by the syncmanager to indicate that the work has to marked as dirty.
+ virtual void sync_setModified();
+ //called by the syncmanager to ask if the dirty flag is set.
+ virtual bool KABCore::sync_isModified();
+ //called by the syncmanager to indicate that the work has to be saved.
+ virtual void sync_save();
+
// LR *******************************
// sync stuff!
QPopupMenu *syncMenu;
- void fillSyncMenu();
- QString mCurrentSyncDevice;
- QString mCurrentSyncName;
- void quickSyncLocalFile();
- bool syncWithFile( QString fn , bool quick );
- void syncLocalFile();
- void syncPhone();
- void syncSharp();
- bool syncExternal(QString);
- void multiSync( bool askforPrefs );
- int mCurrentSyncProfile ;
- void syncRemote( KSyncProfile* prof, bool ask = true);
- void edit_sync_options();
- bool syncAB(QString filename, int mode);
- int ringSync();
- QString getPassword( );
+ KSyncManager* syncManager;
int mGlobalSyncMode;
bool synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode);
KABC::Addressee getLastSyncAddressee();
QDateTime mLastAddressbookSync;
int takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full );
- public slots:
- void confSync();
// *********************
};
#endif
diff --git a/kaddressbook/kabprefs.h b/kaddressbook/kabprefs.h
index 9926aa0..e4f359c 100644
--- a/kaddressbook/kabprefs.h
+++ b/kaddressbook/kabprefs.h
@@ -61,48 +61,32 @@ class KABPrefs : public KPimPrefs
// void usrWriteConfig();
#endif //KAB_EMBEDDED
// GUI
bool mJumpButtonBarVisible;
bool mDetailsPageVisible;
bool mMultipleViewsAtOnce;
bool mSearchWithReturn;
QValueList<int> mExtensionsSplitter;
QValueList<int> mDetailsSplitter;
// Extensions stuff
int mCurrentExtension;
QStringList mActiveExtensions;
// Views stuff
QString mCurrentView;
QStringList mViewNames;
// Filter
int mCurrentFilter;
void setCategoryDefaults();
- // sync stuff
- QString mLocalMachineName;
- QStringList mExternSyncProfiles;
- QStringList mSyncProfileNames;
- bool mAskForPreferences;
- bool mShowSyncSummary;
- bool mShowSyncEvents;
- bool mShowTodoInAgenda;
- bool mWriteBackExistingOnly;
- int mSyncAlgoPrefs;
- int mRingSyncAlgoPrefs;
- bool mWriteBackFile;
- int mWriteBackInFuture;
- QString mPhoneDevice;
- QString mPhoneConnection;
- QString mPhoneModel;
- QString mLastSyncedLocalFile; // save!
+
private:
KABPrefs();
static KABPrefs *sInstance;
};
#endif
diff --git a/libkdepim/kpimprefs.h b/libkdepim/kpimprefs.h
index 860665b..01c57a3 100644
--- a/libkdepim/kpimprefs.h
+++ b/libkdepim/kpimprefs.h
@@ -35,30 +35,51 @@ $Id$
#include "kprefs.h"
class KPimPrefs : public KPrefs
{
public:
KPimPrefs( const QString &name = QString::null );
virtual ~KPimPrefs();
/** Set preferences to default values */
void usrSetDefaults();
/** Read preferences from config file */
void usrReadConfig();
/** Write preferences to config file */
void usrWriteConfig();
public:
QStringList mCustomCategories;
+ // sync stuff
+ QString mLocalMachineName;
+ QStringList mExternSyncProfiles;
+ QStringList mSyncProfileNames;
+ bool mAskForPreferences;
+ bool mShowSyncSummary;
+ bool mShowSyncEvents;
+ bool mShowTodoInAgenda;
+ bool mWriteBackExistingOnly;
+ int mSyncAlgoPrefs;
+ int mRingSyncAlgoPrefs;
+ bool mWriteBackFile;
+ int mWriteBackInFuture;
+ QString mPhoneDevice;
+ QString mPhoneConnection;
+ QString mPhoneModel;
+ QString mLastSyncedLocalFile; // save!
+
protected:
virtual void setCategoryDefaults();
+
+
+
};
#endif
diff --git a/libkdepim/ksyncmanager.cpp b/libkdepim/ksyncmanager.cpp
index 52e3bd9..87f200a 100644
--- a/libkdepim/ksyncmanager.cpp
+++ b/libkdepim/ksyncmanager.cpp
@@ -1,455 +1,529 @@
/*
This file is part of KDE-Pim/Pi.
Copyright (c) 2004 Ulf Schenk
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
// $Id$
#include "ksyncmanager.h"
+#include <stdlib.h>
-KSyncManager::KSyncManager(TargetApp ta, QPopupMenu* syncmenu)
- : mSyncMenu(syncmenu), mTargetApp(ta)
+#ifndef _WIN32_
+#include <unistd.h>
+#endif
+
+
+#include "ksyncprofile.h"
+#include "ksyncprefsdialog.h"
+#include "kpimprefs.h"
+
+#include <qdir.h>
+#include <qpopupmenu.h>
+#include <qpushbutton.h>
+#include <qradiobutton.h>
+#include <qbuttongroup.h>
+#include <qtimer.h>
+#include <qmessagebox.h>
+#include <qapplication.h>
+#include <qlineedit.h>
+#include <qdialog.h>
+#include <qlayout.h>
+
+#include <klocale.h>
+#include <kglobal.h>
+#include <kconfig.h>
+#include <kfiledialog.h>
+
+KSyncManager::KSyncManager(QWidget* parent, KSyncInterface* implementation, TargetApp ta, KPimPrefs* prefs, QPopupMenu* syncmenu)
+ : QObject(), mParent(parent), mImplementation(implementation), mTargetApp(ta), mPrefs(prefs), mSyncMenu(syncmenu)
{
}
KSyncManager::~KSyncManager()
{
}
-void KABCore::fillSyncMenu()
+void KSyncManager::fillSyncMenu()
{
if ( mSyncMenu->count() )
- msyncMenu->clear();
+ mSyncMenu->clear();
mSyncMenu->insertItem( i18n("Configure..."), 0 );
mSyncMenu->insertSeparator();
mSyncMenu->insertItem( i18n("Multiple sync"), 1 );
mSyncMenu->insertSeparator();
KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
config.setGroup("General");
QStringList prof = config.readListEntry("SyncProfileNames");
- //US KABPrefs::instance()->mLocalMachineName = config.readEntry("LocalMachineName","undefined");
+ mPrefs->mLocalMachineName = config.readEntry("LocalMachineName","undefined");
if ( prof.count() < 3 ) {
prof.clear();
prof << i18n("Sharp_DTM");
prof << i18n("Local_file");
prof << i18n("Last_file");
KSyncProfile* temp = new KSyncProfile ();
temp->setName( prof[0] );
temp->writeConfig(&config);
temp->setName( prof[1] );
temp->writeConfig(&config);
temp->setName( prof[2] );
temp->writeConfig(&config);
config.setGroup("General");
config.writeEntry("SyncProfileNames",prof);
config.writeEntry("ExternSyncProfiles","Sharp_DTM");
config.sync();
delete temp;
}
- /*US
- KABPrefs::instance()->mExternSyncProfiles = config.readListEntry("ExternSyncProfiles");
- KABPrefs::instance()->mSyncProfileNames = prof;
- */
- int i;
+ mPrefs->mExternSyncProfiles = config.readListEntry("ExternSyncProfiles");
+ mPrefs->mSyncProfileNames = prof;
+ unsigned int i;
for ( i = 0; i < prof.count(); ++i ) {
mSyncMenu->insertItem( prof[i], 1000+i );
if ( i == 2 )
mSyncMenu->insertSeparator();
}
QDir app_dir;
if ( !app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) {
mSyncMenu->setItemEnabled( false , 1000 );
}
//probaly useless
//mView->setupExternSyncProfiles();
}
-void KABCore::slotSyncMenu( int action )
+
+void KSyncManager::slotSyncMenu( int action )
{
//qDebug("syncaction %d ", action);
if ( action == 0 ) {
// seems to be a Qt2 event handling bug
// syncmenu.clear causes a segfault at first time
// when we call it after the main event loop, it is ok
// same behaviour when calling OM/Pi via QCOP for the first time
QTimer::singleShot ( 1, this, SLOT ( confSync() ) );
//confSync();
return;
}
if ( action == 1 ) {
multiSync( true );
return;
}
- if (mBlockSaveFlag)
+ if (blockSave())
return;
- mBlockSaveFlag = true;
+
+ setBlockSave(true);
+
mCurrentSyncProfile = action - 1000 ;
- //US mCurrentSyncDevice = KABPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile] ;
- //US mCurrentSyncName = KABPrefs::instance()->mLocalMachineName ;
+ mCurrentSyncDevice = mPrefs->mSyncProfileNames[mCurrentSyncProfile] ;
+ mCurrentSyncName = mPrefs->mLocalMachineName ;
KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
KSyncProfile* temp = new KSyncProfile ();
- //US temp->setName(KABPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]);
+ temp->setName(mPrefs->mSyncProfileNames[mCurrentSyncProfile]);
temp->readConfig(&config);
- /*US
- KABPrefs::instance()->mAskForPreferences = temp->getAskForPreferences();
- KABPrefs::instance()->mSyncAlgoPrefs = temp->getSyncPrefs();
- KABPrefs::instance()->mWriteBackFile = temp->getWriteBackFile();
- KABPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting();
- KABPrefs::instance()->mWriteBackInFuture = 0;
+ mPrefs->mAskForPreferences = temp->getAskForPreferences();
+ mPrefs->mSyncAlgoPrefs = temp->getSyncPrefs();
+ mPrefs->mWriteBackFile = temp->getWriteBackFile();
+ mPrefs->mWriteBackExistingOnly = temp->getWriteBackExisting();
+ mPrefs->mWriteBackInFuture = 0;
if ( temp->getWriteBackFuture() )
- KABPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
- KABPrefs::instance()->mShowSyncSummary = temp->getShowSummaryAfterSync();
- */
+ mPrefs->mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
+ mPrefs->mShowSyncSummary = temp->getShowSummaryAfterSync();
if ( action == 1000 ) {
syncSharp();
} else if ( action == 1001 ) {
syncLocalFile();
} else if ( action == 1002 ) {
quickSyncLocalFile();
} else if ( action >= 1003 ) {
if ( temp->getIsLocalFileSync() ) {
- /*US if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) )
- KABPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
- */
+ if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) )
+ mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
+
} else {
if ( temp->getIsPhoneSync() ) {
- /*
- KABPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ;
- KABPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( );
- KABPrefs::instance()->mPhoneModel = temp->getPhoneModel( );
- */
+ mPrefs->mPhoneDevice = temp->getPhoneDevice( ) ;
+ mPrefs->mPhoneConnection = temp->getPhoneConnection( );
+ mPrefs->mPhoneModel = temp->getPhoneModel( );
syncPhone();
} else
syncRemote( temp );
}
}
delete temp;
- mBlockSaveFlag = false;
+ setBlockSave(false);
}
-void KABCore::syncLocalFile()
+void KSyncManager::syncLocalFile()
{
- QString fn =KABPrefs::instance()->mLastSyncedLocalFile;
+ QString fn =mPrefs->mLastSyncedLocalFile;
- fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename(*.ics/*.vcs)"), this );
+ fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename(*.ics/*.vcs)"), mParent );
if ( fn == "" )
return;
if ( syncWithFile( fn, false ) ) {
qDebug("syncLocalFile() successful ");
}
}
-bool KABCore::syncWithFile( QString fn , bool quick )
+bool KSyncManager::syncWithFile( QString fn , bool quick )
{
bool ret = false;
QFileInfo info;
info.setFile( fn );
QString mess;
bool loadbup = true;
if ( !info. exists() ) {
mess = i18n( "Sync file \n...%1\ndoes not exist!\nNothing synced!\n").arg(fn.right( 30) );
- int result = QMessageBox::warning( this, i18n("Warning!"),
+ int result = QMessageBox::warning( mParent, i18n("Warning!"),
mess );
return ret;
}
int result = 0;
if ( !quick ) {
mess = i18n("Sync with file \n...%1\nfrom:\n%2\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false ));
- result = QMessageBox::warning( this, i18n("Warning!"),
+ result = QMessageBox::warning( mParent, i18n("Warning!"),
mess,
i18n("Sync"), i18n("Cancel"), 0,
0, 1 );
if ( result )
return false;
}
- if ( KABPrefs::instance()->mAskForPreferences )
+ if ( mPrefs->mAskForPreferences )
edit_sync_options();
if ( result == 0 ) {
//qDebug("Now sycing ... ");
- if ( ret = syncAB( fn, KABPrefs::instance()->mSyncAlgoPrefs ) )
- setCaption( i18n("Synchronization successful") );
+ if ( ret = mImplementation->sync( this, fn, mPrefs->mSyncAlgoPrefs ) )
+ mParent->setCaption( i18n("Synchronization successful") );
else
- setCaption( i18n("Sync cancelled or failed. Nothing synced.") );
+ mParent->setCaption( i18n("Sync cancelled or failed. Nothing synced.") );
if ( ! quick )
- KABPrefs::instance()->mLastSyncedLocalFile = fn;
- setModified();
+ mPrefs->mLastSyncedLocalFile = fn;
+ mImplementation->sync_setModified();
}
return ret;
}
-void KABCore::quickSyncLocalFile()
+void KSyncManager::quickSyncLocalFile()
{
- if ( syncWithFile( KABPrefs::instance()->mLastSyncedLocalFile, false ) ) {
+ if ( syncWithFile( mPrefs->mLastSyncedLocalFile, false ) ) {
qDebug("quick syncLocalFile() successful ");
}
}
-void KABCore::multiSync( bool askforPrefs )
+void KSyncManager::multiSync( bool askforPrefs )
{
- if (mBlockSaveFlag)
+ if (blockSave())
return;
- mBlockSaveFlag = true;
+ setBlockSave(true);
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( this, i18n("KO/Pi Sync"),
+ if ( QMessageBox::information( mParent, i18n("Sync"),
question,
i18n("Yes"), i18n("No"),
0, 0 ) != 0 ) {
- mBlockSaveFlag = false;
- setCaption(i18n("Aborted! Nothing synced!"));
+ setBlockSave(false);
+ mParent->setCaption(i18n("Aborted! Nothing synced!"));
return;
}
mCurrentSyncDevice = i18n("Multiple profiles") ;
- KABPrefs::instance()->mSyncAlgoPrefs = KABPrefs::instance()->mRingSyncAlgoPrefs;
+ mPrefs->mSyncAlgoPrefs = mPrefs->mRingSyncAlgoPrefs;
if ( askforPrefs ) {
edit_sync_options();
- KABPrefs::instance()->mRingSyncAlgoPrefs = KABPrefs::instance()->mSyncAlgoPrefs;
+ mPrefs->mRingSyncAlgoPrefs = mPrefs->mSyncAlgoPrefs;
}
- setCaption(i18n("Multiple sync started.") );
+ mParent->setCaption(i18n("Multiple sync started.") );
qApp->processEvents();
int num = ringSync() ;
if ( num > 1 )
ringSync();
- mBlockSaveFlag = false;
+ setBlockSave(false);
if ( num )
- save();
+ mImplementation->sync_save();
if ( num )
- setCaption(i18n("%1 profiles synced. Multiple sync completed!").arg(num) );
+ mParent->setCaption(i18n("%1 profiles synced. Multiple sync completed!").arg(num) );
else
- setCaption(i18n("Nothing synced! No profiles defined for multisync!"));
+ mParent->setCaption(i18n("Nothing synced! No profiles defined for multisync!"));
return;
}
-int KABCore::ringSync()
+int KSyncManager::ringSync()
{
int syncedProfiles = 0;
- int i;
+ unsigned int i;
QTime timer;
KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
- QStringList syncProfileNames = KABPrefs::instance()->mSyncProfileNames;
+ QStringList syncProfileNames = mPrefs->mSyncProfileNames;
KSyncProfile* temp = new KSyncProfile ();
- KABPrefs::instance()->mAskForPreferences = false;
+ mPrefs->mAskForPreferences = false;
for ( i = 0; i < syncProfileNames.count(); ++i ) {
mCurrentSyncProfile = i;
temp->setName(syncProfileNames[mCurrentSyncProfile]);
temp->readConfig(&config);
if ( temp->getIncludeInRingSyncAB() && ( i < 1 || i > 2 )) {
- setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... "));
+ mParent->setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... "));
++syncedProfiles;
- // KABPrefs::instance()->mAskForPreferences = temp->getAskForPreferences();
- KABPrefs::instance()->mWriteBackFile = temp->getWriteBackFile();
- KABPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting();
- KABPrefs::instance()->mWriteBackInFuture = 0;
+ // mPrefs->mAskForPreferences = temp->getAskForPreferences();
+ mPrefs->mWriteBackFile = temp->getWriteBackFile();
+ mPrefs->mWriteBackExistingOnly = temp->getWriteBackExisting();
+ mPrefs->mWriteBackInFuture = 0;
if ( temp->getWriteBackFuture() )
- KABPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
- KABPrefs::instance()->mShowSyncSummary = false;
+ mPrefs->mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
+ mPrefs->mShowSyncSummary = false;
mCurrentSyncDevice = syncProfileNames[i] ;
- mCurrentSyncName = KABPrefs::instance()->mLocalMachineName;
+ mCurrentSyncName = mPrefs->mLocalMachineName;
if ( i == 0 ) {
syncSharp();
} else {
if ( temp->getIsLocalFileSync() ) {
if ( syncWithFile( temp->getRemoteFileNameAB( ), true ) )
- KABPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
+ mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
} else {
if ( temp->getIsPhoneSync() ) {
- KABPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ;
- KABPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( );
- KABPrefs::instance()->mPhoneModel = temp->getPhoneModel( );
+ mPrefs->mPhoneDevice = temp->getPhoneDevice( ) ;
+ mPrefs->mPhoneConnection = temp->getPhoneConnection( );
+ mPrefs->mPhoneModel = temp->getPhoneModel( );
syncPhone();
} else
syncRemote( temp, false );
}
}
timer.start();
- setCaption(i18n("Multiple sync in progress ... please wait!") );
+ mParent->setCaption(i18n("Multiple sync in progress ... please wait!") );
while ( timer.elapsed () < 2000 ) {
qApp->processEvents();
#ifndef _WIN32_
sleep (1);
#endif
}
}
}
delete temp;
return syncedProfiles;
}
-void KABCore::syncRemote( KSyncProfile* prof, bool ask)
+void KSyncManager::syncRemote( KSyncProfile* prof, bool ask)
{
QString question;
if ( ask ) {
question = i18n("Do you really want\nto remote sync\nwith profile \n")+ prof->getName()+" ?\n";
- if ( QMessageBox::information( this, i18n("KO/Pi Sync"),
+ if ( QMessageBox::information( mParent, i18n("Sync"),
question,
i18n("Yes"), i18n("No"),
0, 0 ) != 0 )
return;
}
QString command = prof->getPreSyncCommandAB();
int fi;
if ( (fi = command.find("$PWD$")) > 0 ) {
QString pwd = getPassword();
command = command.left( fi )+ pwd + command.mid( fi+5 );
}
int maxlen = 30;
if ( QApplication::desktop()->width() > 320 )
maxlen += 25;
- setCaption ( i18n( "Copy remote file to local machine..." ) );
+ mParent->setCaption ( i18n( "Copy remote file to local machine..." ) );
int fileSize = 0;
int result = system ( command );
// 0 : okay
// 256: no such file or dir
//
qDebug("KO: Remote copy result(0 = okay): %d ",result );
if ( result != 0 ) {
- int len = maxlen;
+ unsigned int len = maxlen;
while ( len < command.length() ) {
command.insert( len , "\n" );
len += maxlen +2;
}
question = i18n("Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n").arg (command) ;
- QMessageBox::information( this, i18n("KO/Pi Sync - ERROR"),
+ QMessageBox::information( mParent, i18n("Sync - ERROR"),
question,
i18n("Okay!")) ;
- setCaption ("KO/Pi");
+ mParent->setCaption ("");
return;
}
- setCaption ( i18n( "Copying succeed." ) );
+ mParent->setCaption ( i18n( "Copying succeed." ) );
//qDebug(" file **%s** ",prof->getLocalTempFile().latin1() );
if ( syncWithFile( prof->getLocalTempFileAB(), true ) ) {
// Event* e = mView->getLastSyncEvent();
// e->setReadOnly( false );
// e->setLocation( KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]);
// e->setReadOnly( true );
- if ( KABPrefs::instance()->mWriteBackFile ) {
+ if ( mPrefs->mWriteBackFile ) {
command = prof->getPostSyncCommandAB();
int fi;
if ( (fi = command.find("$PWD$")) > 0 ) {
QString pwd = getPassword();
command = command.left( fi )+ pwd + command.mid( fi+5 );
}
- setCaption ( i18n( "Writing back file ..." ) );
+ mParent->setCaption ( i18n( "Writing back file ..." ) );
result = system ( command );
- qDebug("KO: Writing back file result: %d ", result);
+ qDebug("Writing back file result: %d ", result);
if ( result != 0 ) {
- setCaption ( i18n( "Writing back file result: " )+QString::number( result ) );
+ mParent->setCaption ( i18n( "Writing back file result: " )+QString::number( result ) );
return;
} else {
- setCaption ( i18n( "Syncronization sucessfully completed" ) );
+ mParent->setCaption ( i18n( "Syncronization sucessfully completed" ) );
}
}
}
return;
}
-#include <qpushbutton.h>
-#include <qradiobutton.h>
-#include <qbuttongroup.h>
-void KABCore::edit_sync_options()
+
+void KSyncManager::edit_sync_options()
{
//mDialogManager->showSyncOptions();
- //KABPrefs::instance()->mSyncAlgoPrefs
- QDialog dia( this, "dia", true );
+ //mPrefs->mSyncAlgoPrefs
+ QDialog dia( mParent, "dia", true );
dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice );
QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia);
QVBoxLayout lay ( &dia );
lay.setSpacing( 2 );
lay.setMargin( 3 );
lay.addWidget(&gr);
QRadioButton loc ( i18n("Take local entry on conflict"), &gr );
QRadioButton rem ( i18n("Take remote entry on conflict"), &gr );
QRadioButton newest( i18n("Take newest entry on conflict"), &gr );
QRadioButton ask( i18n("Ask for every entry on conflict"), &gr );
QRadioButton f_loc( i18n("Force: Take local entry always"), &gr );
QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr );
//QRadioButton both( i18n("Take both on conflict"), &gr );
QPushButton pb ( "OK", &dia);
lay.addWidget( &pb );
connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
- switch ( KABPrefs::instance()->mSyncAlgoPrefs ) {
+ switch ( mPrefs->mSyncAlgoPrefs ) {
case 0:
loc.setChecked( true);
break;
case 1:
rem.setChecked( true );
break;
case 2:
newest.setChecked( true);
break;
case 3:
ask.setChecked( true);
break;
case 4:
f_loc.setChecked( true);
break;
case 5:
f_rem.setChecked( true);
break;
case 6:
// both.setChecked( true);
break;
default:
break;
}
if ( dia.exec() ) {
- KABPrefs::instance()->mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ;
+ mPrefs->mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ;
}
}
-QString KABCore::getPassword( )
+QString KSyncManager::getPassword( )
{
QString retfile = "";
- QDialog dia ( this, "input-dialog", true );
+ QDialog dia ( mParent, "input-dialog", true );
QLineEdit lab ( &dia );
lab.setEchoMode( QLineEdit::Password );
QVBoxLayout lay( &dia );
lay.setMargin(7);
lay.setSpacing(7);
lay.addWidget( &lab);
dia.setFixedSize( 230,50 );
dia.setCaption( i18n("Enter password") );
QPushButton pb ( "OK", &dia);
lay.addWidget( &pb );
connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
dia.show();
int res = dia.exec();
if ( res )
retfile = lab.text();
dia.hide();
qApp->processEvents();
return retfile;
}
+
+
+void KSyncManager::confSync()
+{
+ static KSyncPrefsDialog* sp = 0;
+ if ( ! sp ) {
+ sp = new KSyncPrefsDialog( mParent, "syncprefs", true );
+ }
+ sp->usrReadConfig();
+#ifndef DESKTOP_VERSION
+ sp->showMaximized();
+#else
+ sp->show();
+#endif
+ sp->exec();
+ mPrefs->mSyncProfileNames = sp->getSyncProfileNames();
+ mPrefs->mLocalMachineName = sp->getLocalMachineName ();
+ fillSyncMenu();
+}
+
+void KSyncManager::syncSharp()
+{
+ if ( ! syncExternalApplication("sharp") )
+ qDebug("ERROR sync sharp ");;
+}
+
+bool KSyncManager::syncExternalApplication(QString resource)
+{
+ if ( mImplementation->sync_isModified() )
+ mImplementation->sync_save();
+
+ if ( mPrefs->mAskForPreferences )
+ edit_sync_options();
+
+ qDebug("sync %s", resource.latin1());
+
+ bool syncOK = mImplementation->syncExternal(this, resource);
+
+ return syncOK;
+
+}
+
+void KSyncManager::syncPhone()
+{
+ if ( mImplementation->sync_isModified() )
+ mImplementation->sync_save();
+
+ qDebug("pending syncPhone(); ");
+ //mView->syncPhone();
+ mImplementation->sync_setModified();
+
+}
diff --git a/libkdepim/ksyncmanager.h b/libkdepim/ksyncmanager.h
index d7c2a02..389a005 100644
--- a/libkdepim/ksyncmanager.h
+++ b/libkdepim/ksyncmanager.h
@@ -1,68 +1,119 @@
/*
This file is part of KDE-Pim/Pi.
Copyright (c) 2004 Ulf Schenk
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
$Id$
*/
#ifndef _KSYNCMANAGER_H
#define _KSYNCMANAGER_H
+#include <qobject.h>
#include <qstring.h>
class QPopupMenu;
class KSyncProfile;
+class KPimPrefs;
+class QWidget;
+class KSyncManager;
+class KSyncInterface;
-
-
-class KSyncManager
+class KSyncManager : public QObject
{
-
- public:
- KSyncManager(TargetApp ta, QPopupMenu* syncmenu);
- ~KSyncManager() ;
+ Q_OBJECT
+ public:
enum TargetApp {
KOPI = 0,
KAPI = 1,
PWMPI = 2 };
- private:
+
+ KSyncManager(QWidget* parent, KSyncInterface* implementation, TargetApp ta, KPimPrefs* prefs, QPopupMenu* syncmenu);
+ ~KSyncManager() ;
+
+ bool blockSave() { return mBlockSaveFlag; }
+ void setBlockSave(bool sa) { mBlockSaveFlag = sa; }
+
void fillSyncMenu();
- void syncLocalFile();
- bool syncWithFile( QString fn , bool quick );
+
+ QString getCurrentSyncDevice() { return mCurrentSyncDevice; }
+ QString getCurrentSyncName() { return mCurrentSyncName; }
+
+ public slots:
+ void slotSyncMenu( int );
+
+ private:
+ // LR *******************************
+ // sync stuff!
+ QString mCurrentSyncDevice;
+ QString mCurrentSyncName;
void quickSyncLocalFile();
+ bool syncWithFile( QString fn , bool quick );
+ void syncLocalFile();
+ void syncPhone();
+ void syncSharp();
+ bool syncExternalApplication(QString);
void multiSync( bool askforPrefs );
- int ringSync();
- void syncRemote( KSyncProfile* prof, bool ask);
+ int mCurrentSyncProfile ;
+ void syncRemote( KSyncProfile* prof, bool ask = true);
void edit_sync_options();
- QString getPassword();
+ int ringSync();
+ QString getPassword( );
+
+ private slots:
+ void confSync();
+ // *********************
private:
- QPopupMenu* mSyncMenu;
+ bool mBlockSaveFlag;
+
+
+ QWidget* mParent;
+ KSyncInterface* mImplementation;
TargetApp mTargetApp;
+ KPimPrefs* mPrefs;
+ QPopupMenu* mSyncMenu;
+
+};
+
+
+class KSyncInterface
+{
+ public:
+ virtual bool sync(KSyncManager* manager, QString filename, int mode) = 0;
+ virtual bool syncExternal(KSyncManager* manager, QString resource) = 0;
+ //called by the syncmanager to indicate that the work has to be marked as dirty.
+ virtual void sync_setModified() = 0;
+
+ //called by the syncmanager to ask if the dirty flag is set.
+ virtual bool sync_isModified() = 0;
+
+ //called by the syncmanager to indicate that the work has to be saved.
+ virtual void sync_save() = 0;
};
+
#endif
diff --git a/libkdepim/libkdepimE.pro b/libkdepim/libkdepimE.pro
index 2a30ee8..156e247 100644
--- a/libkdepim/libkdepimE.pro
+++ b/libkdepim/libkdepimE.pro
@@ -4,50 +4,52 @@ TARGET = microkdepim
INCLUDEPATH += . $(KDEPIMDIR) $(KDEPIMDIR)/microkde $(KDEPIMDIR)/qtcompat $(KDEPIMDIR)/microkde/kdecore $(KDEPIMDIR)/microkde/kdeui $(QPEDIR)/include
LIBS += -lmicrokde
#LIBS += -lmicrokcal
LIBS += -L$(QPEDIR)/lib
OBJECTS_DIR = obj/$(PLATFORM)
MOC_DIR = moc/$(PLATFORM)
DESTDIR=$(QPEDIR)/lib
INTERFACES = \
HEADERS = \
categoryeditdialog.h \
categoryeditdialog_base.h \
categoryselectdialog.h \
categoryselectdialog_base.h \
externalapphandler.h \
kdateedit.h \
kdatepicker.h \
kinputdialog.h \
kpimprefs.h \
kpimglobalprefs.h \
kprefsdialog.h \
kprefswidget.h \
+ ksyncmanager.h \
ksyncprofile.h \
ksyncprefsdialog.h \
kcmconfigs/kcmkdepimconfig.h \
kcmconfigs/kdepimconfigwidget.h
SOURCES = \
categoryeditdialog.cpp \
categoryeditdialog_base.cpp \
categoryselectdialog.cpp \
categoryselectdialog_base.cpp \
externalapphandler.cpp \
kdateedit.cpp \
kinputdialog.cpp \
kdatepicker.cpp \
kpimprefs.cpp \
kpimglobalprefs.cpp \
kprefsdialog.cpp \
kprefswidget.cpp \
+ ksyncmanager.cpp \
ksyncprofile.cpp \
ksyncprefsdialog.cpp \
kcmconfigs/kcmkdepimconfig.cpp \
kcmconfigs/kdepimconfigwidget.cpp