summaryrefslogtreecommitdiffabout
path: root/libkdepim/ksyncmanager.cpp
Side-by-side diff
Diffstat (limited to 'libkdepim/ksyncmanager.cpp') (more/less context) (show whitespace changes)
-rw-r--r--libkdepim/ksyncmanager.cpp174
1 files changed, 155 insertions, 19 deletions
diff --git a/libkdepim/ksyncmanager.cpp b/libkdepim/ksyncmanager.cpp
index 87f200a..07e6761 100644
--- a/libkdepim/ksyncmanager.cpp
+++ b/libkdepim/ksyncmanager.cpp
@@ -21,57 +21,68 @@
// $Id$
#include "ksyncmanager.h"
#include <stdlib.h>
#ifndef _WIN32_
#include <unistd.h>
#endif
#include "ksyncprofile.h"
#include "ksyncprefsdialog.h"
#include "kpimprefs.h"
#include <qdir.h>
+#include <qprogressbar.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)
{
+ bar = new QProgressBar ( 1, 0 );
+ bar->setCaption ("");
+
+ int w = 300;
+ if ( QApplication::desktop()->width() < 320 )
+ w = 220;
+ int h = bar->sizeHint().height() ;
+ int dw = QApplication::desktop()->width();
+ int dh = QApplication::desktop()->height();
+ bar->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
}
KSyncManager::~KSyncManager()
{
-
+ delete bar;
}
void KSyncManager::fillSyncMenu()
{
if ( mSyncMenu->count() )
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");
@@ -85,40 +96,43 @@ void KSyncManager::fillSyncMenu()
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;
}
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 );
+ //US do not display SharpDTM if app is pwmpi, or no sharpfiles available
+ if ( mTargetApp == PWMPI) {
+ mSyncMenu->removeItem( 1000 );
+ }
+ else if (!app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) {
+ mSyncMenu->setItemEnabled( 1000, false );
}
//probaly useless
//mView->setupExternSyncProfiles();
}
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();
@@ -148,56 +162,90 @@ void KSyncManager::slotSyncMenu( int action )
mPrefs->mWriteBackExistingOnly = temp->getWriteBackExisting();
mPrefs->mWriteBackInFuture = 0;
if ( temp->getWriteBackFuture() )
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() ) {
+ switch(mTargetApp)
+ {
+ case (KAPI):
if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) )
mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
+ break;
+ case (KOPI):
+ if ( syncWithFile( temp->getRemoteFileName( ), false ) )
+ mPrefs->mLastSyncedLocalFile = temp->getRemoteFileName();
+ break;
+ case (PWMPI):
+ if ( syncWithFile( temp->getRemoteFileNamePWM( ), false ) )
+ mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNamePWM();
+ break;
+ default:
+ qDebug("KSyncManager::slotSyncMenu: invalid apptype selected");
+ break;
+ }
} else {
if ( temp->getIsPhoneSync() ) {
mPrefs->mPhoneDevice = temp->getPhoneDevice( ) ;
mPrefs->mPhoneConnection = temp->getPhoneConnection( );
mPrefs->mPhoneModel = temp->getPhoneModel( );
syncPhone();
} else
syncRemote( temp );
}
}
delete temp;
setBlockSave(false);
}
void KSyncManager::syncLocalFile()
{
QString fn =mPrefs->mLastSyncedLocalFile;
+ QString ext;
- fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename(*.ics/*.vcs)"), mParent );
+ switch(mTargetApp)
+ {
+ case (KAPI):
+ ext = "(*.vcf)";
+ break;
+ case (KOPI):
+ ext = "(*.ics/*.vcs)";
+ break;
+ case (PWMPI):
+ ext = "(*.pwm)";
+ break;
+ default:
+ qDebug("KSyncManager::syncLocalFile: invalid apptype selected");
+ break;
+
+ }
+
+ fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename"+ext), mParent );
if ( fn == "" )
return;
if ( syncWithFile( fn, false ) ) {
qDebug("syncLocalFile() successful ");
}
}
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) );
@@ -271,50 +319,86 @@ void KSyncManager::multiSync( bool askforPrefs )
mParent->setCaption(i18n("Nothing synced! No profiles defined for multisync!"));
return;
}
int KSyncManager::ringSync()
{
int syncedProfiles = 0;
unsigned int i;
QTime timer;
KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
QStringList syncProfileNames = mPrefs->mSyncProfileNames;
KSyncProfile* temp = new KSyncProfile ();
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 )) {
+
+ QString includeInRingSync;
+ switch(mTargetApp)
+ {
+ case (KAPI):
+ includeInRingSync = temp->getIncludeInRingSyncAB();
+ break;
+ case (KOPI):
+ includeInRingSync = temp->getIncludeInRingSync();
+ break;
+ case (PWMPI):
+ includeInRingSync = temp->getIncludeInRingSyncPWM();
+ break;
+ default:
+ qDebug("KSyncManager::ringSync: invalid apptype selected");
+ break;
+
+ }
+
+
+ if ( includeInRingSync && ( i < 1 || i > 2 )) {
mParent->setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... "));
++syncedProfiles;
// mPrefs->mAskForPreferences = temp->getAskForPreferences();
mPrefs->mWriteBackFile = temp->getWriteBackFile();
mPrefs->mWriteBackExistingOnly = temp->getWriteBackExisting();
mPrefs->mWriteBackInFuture = 0;
if ( temp->getWriteBackFuture() )
mPrefs->mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
mPrefs->mShowSyncSummary = false;
mCurrentSyncDevice = syncProfileNames[i] ;
mCurrentSyncName = mPrefs->mLocalMachineName;
if ( i == 0 ) {
syncSharp();
} else {
if ( temp->getIsLocalFileSync() ) {
- if ( syncWithFile( temp->getRemoteFileNameAB( ), true ) )
+ switch(mTargetApp)
+ {
+ case (KAPI):
+ if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) )
mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
+ break;
+ case (KOPI):
+ if ( syncWithFile( temp->getRemoteFileName( ), false ) )
+ mPrefs->mLastSyncedLocalFile = temp->getRemoteFileName();
+ break;
+ case (PWMPI):
+ if ( syncWithFile( temp->getRemoteFileNamePWM( ), false ) )
+ mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNamePWM();
+ break;
+ default:
+ qDebug("KSyncManager::slotSyncMenu: invalid apptype selected");
+ break;
+ }
} else {
if ( temp->getIsPhoneSync() ) {
mPrefs->mPhoneDevice = temp->getPhoneDevice( ) ;
mPrefs->mPhoneConnection = temp->getPhoneConnection( );
mPrefs->mPhoneModel = temp->getPhoneModel( );
syncPhone();
} else
syncRemote( temp, false );
}
}
timer.start();
mParent->setCaption(i18n("Multiple sync in progress ... please wait!") );
while ( timer.elapsed () < 2000 ) {
qApp->processEvents();
#ifndef _WIN32_
@@ -327,79 +411,108 @@ int KSyncManager::ringSync()
}
delete temp;
return syncedProfiles;
}
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( mParent, i18n("Sync"),
question,
i18n("Yes"), i18n("No"),
0, 0 ) != 0 )
return;
}
- QString command = prof->getPreSyncCommandAB();
+
+ QString preCommand;
+ QString localTempFile;
+ QString postCommand;
+
+ switch(mTargetApp)
+ {
+ case (KAPI):
+ preCommand = prof->getPreSyncCommandAB();
+ postCommand = prof->getPostSyncCommandAB();
+ localTempFile = prof->getLocalTempFileAB();
+ break;
+ case (KOPI):
+ preCommand = prof->getPreSyncCommand();
+ postCommand = prof->getPostSyncCommand();
+ localTempFile = prof->getLocalTempFile();
+ break;
+ case (PWMPI):
+ preCommand = prof->getPreSyncCommandPWM();
+ postCommand = prof->getPostSyncCommandPWM();
+ localTempFile = prof->getLocalTempFilePWM();
+ break;
+ default:
+ qDebug("KSyncManager::syncRemote: invalid apptype selected");
+ break;
+ }
+
+
int fi;
- if ( (fi = command.find("$PWD$")) > 0 ) {
+ if ( (fi = preCommand.find("$PWD$")) > 0 ) {
QString pwd = getPassword();
- command = command.left( fi )+ pwd + command.mid( fi+5 );
+ preCommand = preCommand.left( fi )+ pwd + preCommand.mid( fi+5 );
}
int maxlen = 30;
if ( QApplication::desktop()->width() > 320 )
maxlen += 25;
mParent->setCaption ( i18n( "Copy remote file to local machine..." ) );
int fileSize = 0;
- int result = system ( command );
+ int result = system ( preCommand );
// 0 : okay
// 256: no such file or dir
//
qDebug("KO: Remote copy result(0 = okay): %d ",result );
if ( result != 0 ) {
unsigned int len = maxlen;
- while ( len < command.length() ) {
- command.insert( len , "\n" );
+ while ( len < preCommand.length() ) {
+ preCommand.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) ;
+ 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 (preCommand) ;
QMessageBox::information( mParent, i18n("Sync - ERROR"),
question,
i18n("Okay!")) ;
mParent->setCaption ("");
return;
}
mParent->setCaption ( i18n( "Copying succeed." ) );
//qDebug(" file **%s** ",prof->getLocalTempFile().latin1() );
- if ( syncWithFile( prof->getLocalTempFileAB(), true ) ) {
+
+
+
+ if ( syncWithFile( localTempFile, true ) ) {
// Event* e = mView->getLastSyncEvent();
// e->setReadOnly( false );
// e->setLocation( KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]);
// e->setReadOnly( true );
if ( mPrefs->mWriteBackFile ) {
- command = prof->getPostSyncCommandAB();
int fi;
- if ( (fi = command.find("$PWD$")) > 0 ) {
+ if ( (fi = postCommand.find("$PWD$")) > 0 ) {
QString pwd = getPassword();
- command = command.left( fi )+ pwd + command.mid( fi+5 );
+ postCommand = postCommand.left( fi )+ pwd + postCommand.mid( fi+5 );
}
mParent->setCaption ( i18n( "Writing back file ..." ) );
- result = system ( command );
+ result = system ( postCommand );
qDebug("Writing back file result: %d ", result);
if ( result != 0 ) {
mParent->setCaption ( i18n( "Writing back file result: " )+QString::number( result ) );
return;
} else {
mParent->setCaption ( i18n( "Syncronization sucessfully completed" ) );
}
}
}
return;
}
void KSyncManager::edit_sync_options()
{
//mDialogManager->showSyncOptions();
//mPrefs->mSyncAlgoPrefs
@@ -514,16 +627,39 @@ bool KSyncManager::syncExternalApplication(QString resource)
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();
}
+
+void KSyncManager::showProgressBar(int percentage, QString caption, int total)
+{
+ if (!bar->isVisible())
+ {
+ bar->setCaption (caption);
+ bar->setTotalSteps ( total ) ;
+
+ bar->show();
+ }
+
+ bar->setProgress( percentage );
+}
+
+void KSyncManager::hideProgressBar()
+{
+ bar->hide();
+}
+
+bool KSyncManager::isProgressBarCanceled()
+{
+ return !bar->isVisible();
+}