summaryrefslogtreecommitdiffabout
Unidiff
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
@@ -113,108 +113,108 @@ $Id$
113 113
114#include <kresources/selectdialog.h> 114#include <kresources/selectdialog.h>
115#include <kmessagebox.h> 115#include <kmessagebox.h>
116 116
117#include <picture.h> 117#include <picture.h>
118#include <resource.h> 118#include <resource.h>
119 119
120//US#include <qsplitter.h> 120//US#include <qsplitter.h>
121#include <qmap.h> 121#include <qmap.h>
122#include <qdir.h> 122#include <qdir.h>
123#include <qfile.h> 123#include <qfile.h>
124#include <qvbox.h> 124#include <qvbox.h>
125#include <qlayout.h> 125#include <qlayout.h>
126#include <qclipboard.h> 126#include <qclipboard.h>
127#include <qtextstream.h> 127#include <qtextstream.h>
128 128
129#include <libkdepim/categoryselectdialog.h> 129#include <libkdepim/categoryselectdialog.h>
130#include <kabc/vcardconverter.h> 130#include <kabc/vcardconverter.h>
131 131
132 132
133#include "addresseeutil.h" 133#include "addresseeutil.h"
134#include "undocmds.h" 134#include "undocmds.h"
135#include "addresseeeditordialog.h" 135#include "addresseeeditordialog.h"
136#include "viewmanager.h" 136#include "viewmanager.h"
137#include "details/detailsviewcontainer.h" 137#include "details/detailsviewcontainer.h"
138#include "kabprefs.h" 138#include "kabprefs.h"
139#include "xxportmanager.h" 139#include "xxportmanager.h"
140#include "incsearchwidget.h" 140#include "incsearchwidget.h"
141#include "jumpbuttonbar.h" 141#include "jumpbuttonbar.h"
142#include "extensionmanager.h" 142#include "extensionmanager.h"
143#include "addresseeconfig.h" 143#include "addresseeconfig.h"
144#include <kcmultidialog.h> 144#include <kcmultidialog.h>
145 145
146#ifdef _WIN32_ 146#ifdef _WIN32_
147 147
148#include "kaimportoldialog.h" 148#include "kaimportoldialog.h"
149#else 149#else
150#include <unistd.h> 150#include <unistd.h>
151#endif 151#endif
152// sync includes 152// sync includes
153#include <libkdepim/ksyncprofile.h> 153#include <libkdepim/ksyncprofile.h>
154#include <libkdepim/ksyncprefsdialog.h> 154#include <libkdepim/ksyncprefsdialog.h>
155 155
156 156
157bool pasteWithNewUid = true; 157bool pasteWithNewUid = true;
158 158
159#ifdef KAB_EMBEDDED 159#ifdef KAB_EMBEDDED
160KABCore::KABCore( KAddressBookMain *client, bool readWrite, QWidget *parent, const char *name ) 160KABCore::KABCore( KAddressBookMain *client, bool readWrite, QWidget *parent, const char *name )
161 : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ), 161 : QWidget( parent, name ), KSyncInterface(), mGUIClient( client ), mViewManager( 0 ),
162 mExtensionManager( 0 ),mConfigureDialog( 0 ),/*US mLdapSearchDialog( 0 ),*/ 162 mExtensionManager( 0 ),mConfigureDialog( 0 ),/*US mLdapSearchDialog( 0 ),*/
163 mReadWrite( readWrite ), mModified( false ), mMainWindow(client) 163 mReadWrite( readWrite ), mModified( false ), mMainWindow(client)
164#else //KAB_EMBEDDED 164#else //KAB_EMBEDDED
165KABCore::KABCore( KXMLGUIClient *client, bool readWrite, QWidget *parent, const char *name ) 165KABCore::KABCore( KXMLGUIClient *client, bool readWrite, QWidget *parent, const char *name )
166 : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ), 166 : QWidget( parent, name ), KSyncInterface(), mGUIClient( client ), mViewManager( 0 ),
167 mExtensionManager( 0 ), mConfigureDialog( 0 ), mLdapSearchDialog( 0 ), 167 mExtensionManager( 0 ), mConfigureDialog( 0 ), mLdapSearchDialog( 0 ),
168 mReadWrite( readWrite ), mModified( false ) 168 mReadWrite( readWrite ), mModified( false )
169#endif //KAB_EMBEDDED 169#endif //KAB_EMBEDDED
170{ 170{
171 171 // syncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)this, KSyncManager::KAPI, KABPrefs::instance(), syncMenu);
172 mBlockSaveFlag = false; 172 // syncManager->setBlockSave(false);
173 mExtensionBarSplitter = 0; 173 mExtensionBarSplitter = 0;
174 mIsPart = !parent->inherits( "KAddressBookMain" ); 174 mIsPart = !parent->inherits( "KAddressBookMain" );
175 175
176 mAddressBook = KABC::StdAddressBook::self(); 176 mAddressBook = KABC::StdAddressBook::self();
177 KABC::StdAddressBook::setAutomaticSave( false ); 177 KABC::StdAddressBook::setAutomaticSave( false );
178 178
179#ifndef KAB_EMBEDDED 179#ifndef KAB_EMBEDDED
180 mAddressBook->setErrorHandler( new KABC::GUIErrorHandler ); 180 mAddressBook->setErrorHandler( new KABC::GUIErrorHandler );
181#endif //KAB_EMBEDDED 181#endif //KAB_EMBEDDED
182 182
183 connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook * ) ), 183 connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook * ) ),
184 SLOT( addressBookChanged() ) ); 184 SLOT( addressBookChanged() ) );
185 185
186#if 0 186#if 0
187 // LP moved to addressbook init method 187 // LP moved to addressbook init method
188 mAddressBook->addCustomField( i18n( "Department" ), KABC::Field::Organization, 188 mAddressBook->addCustomField( i18n( "Department" ), KABC::Field::Organization,
189 "X-Department", "KADDRESSBOOK" ); 189 "X-Department", "KADDRESSBOOK" );
190 mAddressBook->addCustomField( i18n( "Profession" ), KABC::Field::Organization, 190 mAddressBook->addCustomField( i18n( "Profession" ), KABC::Field::Organization,
191 "X-Profession", "KADDRESSBOOK" ); 191 "X-Profession", "KADDRESSBOOK" );
192 mAddressBook->addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization, 192 mAddressBook->addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization,
193 "X-AssistantsName", "KADDRESSBOOK" ); 193 "X-AssistantsName", "KADDRESSBOOK" );
194 mAddressBook->addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization, 194 mAddressBook->addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization,
195 "X-ManagersName", "KADDRESSBOOK" ); 195 "X-ManagersName", "KADDRESSBOOK" );
196 mAddressBook->addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal, 196 mAddressBook->addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal,
197 "X-SpousesName", "KADDRESSBOOK" ); 197 "X-SpousesName", "KADDRESSBOOK" );
198 mAddressBook->addCustomField( i18n( "Office" ), KABC::Field::Personal, 198 mAddressBook->addCustomField( i18n( "Office" ), KABC::Field::Personal,
199 "X-Office", "KADDRESSBOOK" ); 199 "X-Office", "KADDRESSBOOK" );
200 mAddressBook->addCustomField( i18n( "IM Address" ), KABC::Field::Personal, 200 mAddressBook->addCustomField( i18n( "IM Address" ), KABC::Field::Personal,
201 "X-IMAddress", "KADDRESSBOOK" ); 201 "X-IMAddress", "KADDRESSBOOK" );
202 mAddressBook->addCustomField( i18n( "Anniversary" ), KABC::Field::Personal, 202 mAddressBook->addCustomField( i18n( "Anniversary" ), KABC::Field::Personal,
203 "X-Anniversary", "KADDRESSBOOK" ); 203 "X-Anniversary", "KADDRESSBOOK" );
204 204
205 //US added this field to become compatible with Opie/qtopia addressbook 205 //US added this field to become compatible with Opie/qtopia addressbook
206 // values can be "female" or "male" or "". An empty field represents undefined. 206 // values can be "female" or "male" or "". An empty field represents undefined.
207 mAddressBook->addCustomField( i18n( "Gender" ), KABC::Field::Personal, 207 mAddressBook->addCustomField( i18n( "Gender" ), KABC::Field::Personal,
208 "X-Gender", "KADDRESSBOOK" ); 208 "X-Gender", "KADDRESSBOOK" );
209 mAddressBook->addCustomField( i18n( "Children" ), KABC::Field::Personal, 209 mAddressBook->addCustomField( i18n( "Children" ), KABC::Field::Personal,
210 "X-Children", "KADDRESSBOOK" ); 210 "X-Children", "KADDRESSBOOK" );
211 mAddressBook->addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal, 211 mAddressBook->addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal,
212 "X-FreeBusyUrl", "KADDRESSBOOK" ); 212 "X-FreeBusyUrl", "KADDRESSBOOK" );
213#endif 213#endif
214 initGUI(); 214 initGUI();
215 215
216 mIncSearchWidget->setFocus(); 216 mIncSearchWidget->setFocus();
217 217
218 218
219 connect( mViewManager, SIGNAL( selected( const QString& ) ), 219 connect( mViewManager, SIGNAL( selected( const QString& ) ),
220 SLOT( setContactSelected( const QString& ) ) ); 220 SLOT( setContactSelected( const QString& ) ) );
@@ -224,96 +224,98 @@ KABCore::KABCore( KXMLGUIClient *client, bool readWrite, QWidget *parent, const
224 connect( mViewManager, SIGNAL( deleteRequest( ) ), 224 connect( mViewManager, SIGNAL( deleteRequest( ) ),
225 SLOT( deleteContacts( ) ) ); 225 SLOT( deleteContacts( ) ) );
226 connect( mViewManager, SIGNAL( modified() ), 226 connect( mViewManager, SIGNAL( modified() ),
227 SLOT( setModified() ) ); 227 SLOT( setModified() ) );
228 228
229 connect( mExtensionManager, SIGNAL( modified( const KABC::Addressee::List& ) ), this, SLOT( extensionModified( const KABC::Addressee::List& ) ) ); 229 connect( mExtensionManager, SIGNAL( modified( const KABC::Addressee::List& ) ), this, SLOT( extensionModified( const KABC::Addressee::List& ) ) );
230 connect( mExtensionManager, SIGNAL( changedActiveExtension( int ) ), this, SLOT( extensionChanged( int ) ) ); 230 connect( mExtensionManager, SIGNAL( changedActiveExtension( int ) ), this, SLOT( extensionChanged( int ) ) );
231 231
232 connect( mXXPortManager, SIGNAL( modified() ), 232 connect( mXXPortManager, SIGNAL( modified() ),
233 SLOT( setModified() ) ); 233 SLOT( setModified() ) );
234 234
235 connect( mJumpButtonBar, SIGNAL( jumpToLetter( const QString& ) ), 235 connect( mJumpButtonBar, SIGNAL( jumpToLetter( const QString& ) ),
236 SLOT( incrementalSearch( const QString& ) ) ); 236 SLOT( incrementalSearch( const QString& ) ) );
237 connect( mIncSearchWidget, SIGNAL( fieldChanged() ), 237 connect( mIncSearchWidget, SIGNAL( fieldChanged() ),
238 mJumpButtonBar, SLOT( recreateButtons() ) ); 238 mJumpButtonBar, SLOT( recreateButtons() ) );
239 239
240 connect( mDetails, SIGNAL( sendEmail( const QString& ) ), 240 connect( mDetails, SIGNAL( sendEmail( const QString& ) ),
241 SLOT( sendMail( const QString& ) ) ); 241 SLOT( sendMail( const QString& ) ) );
242 242
243 243
244 connect( ExternalAppHandler::instance(), SIGNAL (requestForNameEmailUidList(const QString&, const QString&)),this, SLOT(requestForNameEmailUidList(const QString&, const QString&))); 244 connect( ExternalAppHandler::instance(), SIGNAL (requestForNameEmailUidList(const QString&, const QString&)),this, SLOT(requestForNameEmailUidList(const QString&, const QString&)));
245 connect( ExternalAppHandler::instance(), SIGNAL (requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&)),this, SLOT(requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&))); 245 connect( ExternalAppHandler::instance(), SIGNAL (requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&)),this, SLOT(requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&)));
246 246
247 247
248#ifndef KAB_EMBEDDED 248#ifndef KAB_EMBEDDED
249 connect( mViewManager, SIGNAL( urlDropped( const KURL& ) ), 249 connect( mViewManager, SIGNAL( urlDropped( const KURL& ) ),
250 mXXPortManager, SLOT( importVCard( const KURL& ) ) ); 250 mXXPortManager, SLOT( importVCard( const KURL& ) ) );
251 251
252 connect( mDetails, SIGNAL( browse( const QString& ) ), 252 connect( mDetails, SIGNAL( browse( const QString& ) ),
253 SLOT( browse( const QString& ) ) ); 253 SLOT( browse( const QString& ) ) );
254 254
255 255
256 mAddressBookService = new KAddressBookService( this ); 256 mAddressBookService = new KAddressBookService( this );
257 257
258#endif //KAB_EMBEDDED 258#endif //KAB_EMBEDDED
259 mEditorDialog = 0; 259 mEditorDialog = 0;
260 createAddresseeEditorDialog( this ); 260 createAddresseeEditorDialog( this );
261 setModified( false ); 261 setModified( false );
262} 262}
263 263
264KABCore::~KABCore() 264KABCore::~KABCore()
265{ 265{
266 // save(); 266 // save();
267 //saveSettings(); 267 //saveSettings();
268 //KABPrefs::instance()->writeConfig(); 268 //KABPrefs::instance()->writeConfig();
269 delete AddresseeConfig::instance(); 269 delete AddresseeConfig::instance();
270 mAddressBook = 0; 270 mAddressBook = 0;
271 KABC::StdAddressBook::close(); 271 KABC::StdAddressBook::close();
272
273 delete syncManager;
272} 274}
273 275
274void KABCore::restoreSettings() 276void KABCore::restoreSettings()
275{ 277{
276 mMultipleViewsAtOnce = KABPrefs::instance()->mMultipleViewsAtOnce; 278 mMultipleViewsAtOnce = KABPrefs::instance()->mMultipleViewsAtOnce;
277 279
278 bool state; 280 bool state;
279 281
280 if (mMultipleViewsAtOnce) 282 if (mMultipleViewsAtOnce)
281 state = KABPrefs::instance()->mDetailsPageVisible; 283 state = KABPrefs::instance()->mDetailsPageVisible;
282 else 284 else
283 state = false; 285 state = false;
284 286
285 mActionDetails->setChecked( state ); 287 mActionDetails->setChecked( state );
286 setDetailsVisible( state ); 288 setDetailsVisible( state );
287 289
288 state = KABPrefs::instance()->mJumpButtonBarVisible; 290 state = KABPrefs::instance()->mJumpButtonBarVisible;
289 291
290 mActionJumpBar->setChecked( state ); 292 mActionJumpBar->setChecked( state );
291 setJumpButtonBarVisible( state ); 293 setJumpButtonBarVisible( state );
292/*US 294/*US
293 QValueList<int> splitterSize = KABPrefs::instance()->mDetailsSplitter; 295 QValueList<int> splitterSize = KABPrefs::instance()->mDetailsSplitter;
294 if ( splitterSize.count() == 0 ) { 296 if ( splitterSize.count() == 0 ) {
295 splitterSize.append( width() / 2 ); 297 splitterSize.append( width() / 2 );
296 splitterSize.append( width() / 2 ); 298 splitterSize.append( width() / 2 );
297 } 299 }
298 mMiniSplitter->setSizes( splitterSize ); 300 mMiniSplitter->setSizes( splitterSize );
299 if ( mExtensionBarSplitter ) { 301 if ( mExtensionBarSplitter ) {
300 splitterSize = KABPrefs::instance()->mExtensionsSplitter; 302 splitterSize = KABPrefs::instance()->mExtensionsSplitter;
301 if ( splitterSize.count() == 0 ) { 303 if ( splitterSize.count() == 0 ) {
302 splitterSize.append( width() / 2 ); 304 splitterSize.append( width() / 2 );
303 splitterSize.append( width() / 2 ); 305 splitterSize.append( width() / 2 );
304 } 306 }
305 mExtensionBarSplitter->setSizes( splitterSize ); 307 mExtensionBarSplitter->setSizes( splitterSize );
306 308
307 } 309 }
308*/ 310*/
309 mViewManager->restoreSettings(); 311 mViewManager->restoreSettings();
310 mIncSearchWidget->setCurrentItem( KABPrefs::instance()->mCurrentIncSearchField ); 312 mIncSearchWidget->setCurrentItem( KABPrefs::instance()->mCurrentIncSearchField );
311 mExtensionManager->restoreSettings(); 313 mExtensionManager->restoreSettings();
312#ifdef DESKTOP_VERSION 314#ifdef DESKTOP_VERSION
313 int wid = width(); 315 int wid = width();
314 if ( wid < 10 ) 316 if ( wid < 10 )
315 wid = 400; 317 wid = 400;
316#else 318#else
317 int wid = QApplication::desktop()->width(); 319 int wid = QApplication::desktop()->width();
318 if ( wid < 640 ) 320 if ( wid < 640 )
319 wid = QApplication::desktop()->height(); 321 wid = QApplication::desktop()->height();
@@ -1029,120 +1031,120 @@ void KABCore::importVCard( const QString &vCard, bool showPreview )
1029} 1031}
1030 1032
1031//US added a second method without defaultparameter 1033//US added a second method without defaultparameter
1032void KABCore::editContact2() { 1034void KABCore::editContact2() {
1033 editContact( QString::null ); 1035 editContact( QString::null );
1034} 1036}
1035 1037
1036void KABCore::editContact( const QString &uid ) 1038void KABCore::editContact( const QString &uid )
1037{ 1039{
1038 1040
1039 if ( mExtensionManager->isQuickEditVisible() ) 1041 if ( mExtensionManager->isQuickEditVisible() )
1040 return; 1042 return;
1041 1043
1042 // First, locate the contact entry 1044 // First, locate the contact entry
1043 QString localUID = uid; 1045 QString localUID = uid;
1044 if ( localUID.isNull() ) { 1046 if ( localUID.isNull() ) {
1045 QStringList uidList = mViewManager->selectedUids(); 1047 QStringList uidList = mViewManager->selectedUids();
1046 if ( uidList.count() > 0 ) 1048 if ( uidList.count() > 0 )
1047 localUID = *( uidList.at( 0 ) ); 1049 localUID = *( uidList.at( 0 ) );
1048 } 1050 }
1049 1051
1050 KABC::Addressee addr = mAddressBook->findByUid( localUID ); 1052 KABC::Addressee addr = mAddressBook->findByUid( localUID );
1051 if ( !addr.isEmpty() ) { 1053 if ( !addr.isEmpty() ) {
1052 mEditorDialog->setAddressee( addr ); 1054 mEditorDialog->setAddressee( addr );
1053 KApplication::execDialog ( mEditorDialog ); 1055 KApplication::execDialog ( mEditorDialog );
1054 } 1056 }
1055} 1057}
1056 1058
1057/** 1059/**
1058 Shows or edits the detail view for the given uid. If the uid is QString::null, 1060 Shows or edits the detail view for the given uid. If the uid is QString::null,
1059 the method will try to find a selected addressee in the view. 1061 the method will try to find a selected addressee in the view.
1060 */ 1062 */
1061void KABCore::executeContact( const QString &uid /*US = QString::null*/ ) 1063void KABCore::executeContact( const QString &uid /*US = QString::null*/ )
1062{ 1064{
1063 if ( mMultipleViewsAtOnce ) 1065 if ( mMultipleViewsAtOnce )
1064 { 1066 {
1065 editContact( uid ); 1067 editContact( uid );
1066 } 1068 }
1067 else 1069 else
1068 { 1070 {
1069 setDetailsVisible( true ); 1071 setDetailsVisible( true );
1070 mActionDetails->setChecked(true); 1072 mActionDetails->setChecked(true);
1071 } 1073 }
1072 1074
1073} 1075}
1074 1076
1075void KABCore::save() 1077void KABCore::save()
1076{ 1078{
1077 if (mBlockSaveFlag) 1079 if (syncManager->blockSave())
1078 return; 1080 return;
1079 mBlockSaveFlag = true; 1081 syncManager->setBlockSave(true);
1080 if ( !mModified ) 1082 if ( !mModified )
1081 return; 1083 return;
1082 QString text = i18n( "There was an error while attempting to save\n the " 1084 QString text = i18n( "There was an error while attempting to save\n the "
1083 "address book. Please check that some \nother application is " 1085 "address book. Please check that some \nother application is "
1084 "not using it. " ); 1086 "not using it. " );
1085 statusMessage(i18n("Saving addressbook ... ")); 1087 statusMessage(i18n("Saving addressbook ... "));
1086#ifndef KAB_EMBEDDED 1088#ifndef KAB_EMBEDDED
1087 KABC::StdAddressBook *b = dynamic_cast<KABC::StdAddressBook*>( mAddressBook ); 1089 KABC::StdAddressBook *b = dynamic_cast<KABC::StdAddressBook*>( mAddressBook );
1088 if ( !b || !b->save() ) { 1090 if ( !b || !b->save() ) {
1089 KMessageBox::error( this, text, i18n( "Unable to Save" ) ); 1091 KMessageBox::error( this, text, i18n( "Unable to Save" ) );
1090 } 1092 }
1091#else //KAB_EMBEDDED 1093#else //KAB_EMBEDDED
1092 KABC::StdAddressBook *b = (KABC::StdAddressBook*)( mAddressBook ); 1094 KABC::StdAddressBook *b = (KABC::StdAddressBook*)( mAddressBook );
1093 if ( !b || !b->save() ) { 1095 if ( !b || !b->save() ) {
1094 QMessageBox::critical( this, i18n( "Unable to Save" ), text, i18n("Ok")); 1096 QMessageBox::critical( this, i18n( "Unable to Save" ), text, i18n("Ok"));
1095 } 1097 }
1096#endif //KAB_EMBEDDED 1098#endif //KAB_EMBEDDED
1097 1099
1098 statusMessage(i18n("Addressbook saved!")); 1100 statusMessage(i18n("Addressbook saved!"));
1099 setModified( false ); 1101 setModified( false );
1100 mBlockSaveFlag = false; 1102 syncManager->setBlockSave(false);
1101} 1103}
1102 1104
1103void KABCore::statusMessage(QString mess , int time ) 1105void KABCore::statusMessage(QString mess , int time )
1104{ 1106{
1105 //topLevelWidget()->setCaption( mess ); 1107 //topLevelWidget()->setCaption( mess );
1106 // pending setting timer to revome message 1108 // pending setting timer to revome message
1107} 1109}
1108void KABCore::undo() 1110void KABCore::undo()
1109{ 1111{
1110 UndoStack::instance()->undo(); 1112 UndoStack::instance()->undo();
1111 1113
1112 // Refresh the view 1114 // Refresh the view
1113 mViewManager->refreshView(); 1115 mViewManager->refreshView();
1114} 1116}
1115 1117
1116void KABCore::redo() 1118void KABCore::redo()
1117{ 1119{
1118 RedoStack::instance()->redo(); 1120 RedoStack::instance()->redo();
1119 1121
1120 // Refresh the view 1122 // Refresh the view
1121 mViewManager->refreshView(); 1123 mViewManager->refreshView();
1122} 1124}
1123 1125
1124void KABCore::setJumpButtonBarVisible( bool visible ) 1126void KABCore::setJumpButtonBarVisible( bool visible )
1125{ 1127{
1126 if (mMultipleViewsAtOnce) 1128 if (mMultipleViewsAtOnce)
1127 { 1129 {
1128 if ( visible ) 1130 if ( visible )
1129 mJumpButtonBar->show(); 1131 mJumpButtonBar->show();
1130 else 1132 else
1131 mJumpButtonBar->hide(); 1133 mJumpButtonBar->hide();
1132 } 1134 }
1133 else 1135 else
1134 { 1136 {
1135 // show the jumpbar only if "the details are hidden" == "viewmanager are shown" 1137 // show the jumpbar only if "the details are hidden" == "viewmanager are shown"
1136 if (mViewManager->isVisible()) 1138 if (mViewManager->isVisible())
1137 { 1139 {
1138 if ( visible ) 1140 if ( visible )
1139 mJumpButtonBar->show(); 1141 mJumpButtonBar->show();
1140 else 1142 else
1141 mJumpButtonBar->hide(); 1143 mJumpButtonBar->hide();
1142 } 1144 }
1143 else 1145 else
1144 { 1146 {
1145 mJumpButtonBar->hide(); 1147 mJumpButtonBar->hide();
1146 } 1148 }
1147 } 1149 }
1148} 1150}
@@ -1491,96 +1493,99 @@ void KABCore::initGUI()
1491 topLayout->addWidget(mMiniSplitter ); 1493 topLayout->addWidget(mMiniSplitter );
1492 mViewManager = new ViewManager( this, mMiniSplitter ); 1494 mViewManager = new ViewManager( this, mMiniSplitter );
1493 mDetails = new ViewContainer( mMiniSplitter ); 1495 mDetails = new ViewContainer( mMiniSplitter );
1494 1496
1495 1497
1496 mExtensionManager = new ExtensionManager( this, mMiniSplitter ); 1498 mExtensionManager = new ExtensionManager( this, mMiniSplitter );
1497#endif 1499#endif
1498 //eh->hide(); 1500 //eh->hide();
1499 // topLayout->addWidget(mExtensionManager ); 1501 // topLayout->addWidget(mExtensionManager );
1500 1502
1501 1503
1502/*US 1504/*US
1503#ifndef KAB_NOSPLITTER 1505#ifndef KAB_NOSPLITTER
1504 QHBoxLayout *topLayout = new QHBoxLayout( this ); 1506 QHBoxLayout *topLayout = new QHBoxLayout( this );
1505//US topLayout->setSpacing( KDialogBase::spacingHint() ); 1507//US topLayout->setSpacing( KDialogBase::spacingHint() );
1506 topLayout->setSpacing( 10 ); 1508 topLayout->setSpacing( 10 );
1507 1509
1508 mDetailsSplitter = new QSplitter( this ); 1510 mDetailsSplitter = new QSplitter( this );
1509 1511
1510 QVBox *viewSpace = new QVBox( mDetailsSplitter ); 1512 QVBox *viewSpace = new QVBox( mDetailsSplitter );
1511 1513
1512 mViewManager = new ViewManager( this, viewSpace ); 1514 mViewManager = new ViewManager( this, viewSpace );
1513 viewSpace->setStretchFactor( mViewManager, 1 ); 1515 viewSpace->setStretchFactor( mViewManager, 1 );
1514 1516
1515 mDetails = new ViewContainer( mDetailsSplitter ); 1517 mDetails = new ViewContainer( mDetailsSplitter );
1516 1518
1517 topLayout->addWidget( mDetailsSplitter ); 1519 topLayout->addWidget( mDetailsSplitter );
1518 topLayout->setStretchFactor( mDetailsSplitter, 100 ); 1520 topLayout->setStretchFactor( mDetailsSplitter, 100 );
1519#else //KAB_NOSPLITTER 1521#else //KAB_NOSPLITTER
1520 QHBoxLayout *topLayout = new QHBoxLayout( this ); 1522 QHBoxLayout *topLayout = new QHBoxLayout( this );
1521//US topLayout->setSpacing( KDialogBase::spacingHint() ); 1523//US topLayout->setSpacing( KDialogBase::spacingHint() );
1522 topLayout->setSpacing( 10 ); 1524 topLayout->setSpacing( 10 );
1523 1525
1524// mDetailsSplitter = new QSplitter( this ); 1526// mDetailsSplitter = new QSplitter( this );
1525 1527
1526 QVBox *viewSpace = new QVBox( this ); 1528 QVBox *viewSpace = new QVBox( this );
1527 1529
1528 mViewManager = new ViewManager( this, viewSpace ); 1530 mViewManager = new ViewManager( this, viewSpace );
1529 viewSpace->setStretchFactor( mViewManager, 1 ); 1531 viewSpace->setStretchFactor( mViewManager, 1 );
1530 1532
1531 mDetails = new ViewContainer( this ); 1533 mDetails = new ViewContainer( this );
1532 1534
1533 topLayout->addWidget( viewSpace ); 1535 topLayout->addWidget( viewSpace );
1534// topLayout->setStretchFactor( mDetailsSplitter, 100 ); 1536// topLayout->setStretchFactor( mDetailsSplitter, 100 );
1535 topLayout->addWidget( mDetails ); 1537 topLayout->addWidget( mDetails );
1536#endif //KAB_NOSPLITTER 1538#endif //KAB_NOSPLITTER
1537*/ 1539*/
1538 1540
1541 syncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)this, KSyncManager::KAPI, KABPrefs::instance(), syncMenu);
1542 syncManager->setBlockSave(false);
1543
1539 1544
1540#endif //KAB_EMBEDDED 1545#endif //KAB_EMBEDDED
1541 initActions(); 1546 initActions();
1542 1547
1543#ifdef KAB_EMBEDDED 1548#ifdef KAB_EMBEDDED
1544 addActionsManually(); 1549 addActionsManually();
1545 //US make sure the export and import menues are initialized before creating the xxPortManager. 1550 //US make sure the export and import menues are initialized before creating the xxPortManager.
1546 mXXPortManager = new XXPortManager( this, this ); 1551 mXXPortManager = new XXPortManager( this, this );
1547 1552
1548 // LR mIncSearchWidget = new IncSearchWidget( mMainWindow->getIconToolBar() ); 1553 // LR mIncSearchWidget = new IncSearchWidget( mMainWindow->getIconToolBar() );
1549 //mMainWindow->toolBar()->insertWidget(-1, 4, mIncSearchWidget); 1554 //mMainWindow->toolBar()->insertWidget(-1, 4, mIncSearchWidget);
1550 // mActionQuit->plug ( mMainWindow->toolBar()); 1555 // mActionQuit->plug ( mMainWindow->toolBar());
1551 //mIncSearchWidget = new IncSearchWidget( mMainWindow->toolBar() ); 1556 //mIncSearchWidget = new IncSearchWidget( mMainWindow->toolBar() );
1552 //mMainWindow->toolBar()->insertWidget(-1, 0, mIncSearchWidget); 1557 //mMainWindow->toolBar()->insertWidget(-1, 0, mIncSearchWidget);
1553 // mIncSearchWidget->hide(); 1558 // mIncSearchWidget->hide();
1554 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ), 1559 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ),
1555 SLOT( incrementalSearch( const QString& ) ) ); 1560 SLOT( incrementalSearch( const QString& ) ) );
1556 1561
1557 1562
1558 mJumpButtonBar = new JumpButtonBar( this, this ); 1563 mJumpButtonBar = new JumpButtonBar( this, this );
1559 1564
1560 topLayout->addWidget( mJumpButtonBar ); 1565 topLayout->addWidget( mJumpButtonBar );
1561//US topLayout->setStretchFactor( mJumpButtonBar, 10 ); 1566//US topLayout->setStretchFactor( mJumpButtonBar, 10 );
1562 1567
1563// mMainWindow->getIconToolBar()->raise(); 1568// mMainWindow->getIconToolBar()->raise();
1564 1569
1565#endif //KAB_EMBEDDED 1570#endif //KAB_EMBEDDED
1566 1571
1567} 1572}
1568void KABCore::initActions() 1573void KABCore::initActions()
1569{ 1574{
1570//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart); 1575//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart);
1571 1576
1572#ifndef KAB_EMBEDDED 1577#ifndef KAB_EMBEDDED
1573 connect( QApplication::clipboard(), SIGNAL( dataChanged() ), 1578 connect( QApplication::clipboard(), SIGNAL( dataChanged() ),
1574 SLOT( clipboardDataChanged() ) ); 1579 SLOT( clipboardDataChanged() ) );
1575#endif //KAB_EMBEDDED 1580#endif //KAB_EMBEDDED
1576 1581
1577 // file menu 1582 // file menu
1578 if ( mIsPart ) { 1583 if ( mIsPart ) {
1579 mActionMail = new KAction( i18n( "&Mail" ), "mail_generic", 0, this, 1584 mActionMail = new KAction( i18n( "&Mail" ), "mail_generic", 0, this,
1580 SLOT( sendMail() ), actionCollection(), 1585 SLOT( sendMail() ), actionCollection(),
1581 "kaddressbook_mail" ); 1586 "kaddressbook_mail" );
1582 mActionPrint = new KAction( i18n( "&Print" ), "fileprint", CTRL + Key_P, this, 1587 mActionPrint = new KAction( i18n( "&Print" ), "fileprint", CTRL + Key_P, this,
1583 SLOT( print() ), actionCollection(), "kaddressbook_print" ); 1588 SLOT( print() ), actionCollection(), "kaddressbook_print" );
1584 1589
1585 } else { 1590 } else {
1586 mActionMail = KStdAction::mail( this, SLOT( sendMail() ), actionCollection() ); 1591 mActionMail = KStdAction::mail( this, SLOT( sendMail() ), actionCollection() );
@@ -1853,98 +1858,98 @@ void KABCore::addActionsManually()
1853 mActionKeyBindings->plug( settingsMenu ); 1858 mActionKeyBindings->plug( settingsMenu );
1854 } 1859 }
1855 1860
1856 settingsMenu->insertSeparator(); 1861 settingsMenu->insertSeparator();
1857 1862
1858 mActionJumpBar->plug( settingsMenu ); 1863 mActionJumpBar->plug( settingsMenu );
1859 mActionDetails->plug( settingsMenu ); 1864 mActionDetails->plug( settingsMenu );
1860 if (!KABPrefs::instance()->mMultipleViewsAtOnce || KGlobal::getDesktopSize() == KGlobal::Desktop ) 1865 if (!KABPrefs::instance()->mMultipleViewsAtOnce || KGlobal::getDesktopSize() == KGlobal::Desktop )
1861 mActionDetails->plug( tb ); 1866 mActionDetails->plug( tb );
1862 settingsMenu->insertSeparator(); 1867 settingsMenu->insertSeparator();
1863 1868
1864 mActionWhoAmI->plug( settingsMenu ); 1869 mActionWhoAmI->plug( settingsMenu );
1865 mActionCategories->plug( settingsMenu ); 1870 mActionCategories->plug( settingsMenu );
1866 1871
1867 mActionLicence->plug( helpMenu ); 1872 mActionLicence->plug( helpMenu );
1868 mActionFaq->plug( helpMenu ); 1873 mActionFaq->plug( helpMenu );
1869 mActionAboutKAddressbook->plug( helpMenu ); 1874 mActionAboutKAddressbook->plug( helpMenu );
1870 1875
1871 if (KGlobal::getDesktopSize() > KGlobal::Small ) { 1876 if (KGlobal::getDesktopSize() > KGlobal::Small ) {
1872 1877
1873 mActionSave->plug( tb ); 1878 mActionSave->plug( tb );
1874 mViewManager->getFilterAction()->plug ( tb); 1879 mViewManager->getFilterAction()->plug ( tb);
1875 if (KGlobal::getDesktopSize() == KGlobal::Desktop ) { 1880 if (KGlobal::getDesktopSize() == KGlobal::Desktop ) {
1876 mActionUndo->plug( tb ); 1881 mActionUndo->plug( tb );
1877 mActionDelete->plug( tb ); 1882 mActionDelete->plug( tb );
1878 mActionRedo->plug( tb ); 1883 mActionRedo->plug( tb );
1879 } 1884 }
1880 } 1885 }
1881 //mActionQuit->plug ( tb ); 1886 //mActionQuit->plug ( tb );
1882 // tb->insertWidget(-1, 0, mIncSearchWidget, 6); 1887 // tb->insertWidget(-1, 0, mIncSearchWidget, 6);
1883 1888
1884 //US link the searchwidget first to this. 1889 //US link the searchwidget first to this.
1885 // The real linkage to the toolbar happens later. 1890 // The real linkage to the toolbar happens later.
1886//US mIncSearchWidget->reparent(tb, 0, QPoint(50,0), TRUE); 1891//US mIncSearchWidget->reparent(tb, 0, QPoint(50,0), TRUE);
1887//US tb->insertItem( mIncSearchWidget ); 1892//US tb->insertItem( mIncSearchWidget );
1888/*US 1893/*US
1889 mIncSearchWidget = new IncSearchWidget( tb ); 1894 mIncSearchWidget = new IncSearchWidget( tb );
1890 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ), 1895 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ),
1891 SLOT( incrementalSearch( const QString& ) ) ); 1896 SLOT( incrementalSearch( const QString& ) ) );
1892 1897
1893 mJumpButtonBar = new JumpButtonBar( this, this ); 1898 mJumpButtonBar = new JumpButtonBar( this, this );
1894 1899
1895//US topLayout->addWidget( mJumpButtonBar ); 1900//US topLayout->addWidget( mJumpButtonBar );
1896 this->layout()->add( mJumpButtonBar ); 1901 this->layout()->add( mJumpButtonBar );
1897*/ 1902*/
1898 1903
1899#endif //KAB_EMBEDDED 1904#endif //KAB_EMBEDDED
1900 1905
1901 connect ( syncMenu, SIGNAL( activated ( int ) ), this, SLOT (slotSyncMenu( int ) ) ); 1906 connect ( syncMenu, SIGNAL( activated ( int ) ), syncManager, SLOT (slotSyncMenu( int ) ) );
1902 fillSyncMenu(); 1907 syncManager->fillSyncMenu();
1903 1908
1904} 1909}
1905void KABCore::showLicence() 1910void KABCore::showLicence()
1906{ 1911{
1907 KApplication::showLicence(); 1912 KApplication::showLicence();
1908} 1913}
1909void KABCore::removeVoice() 1914void KABCore::removeVoice()
1910{ 1915{
1911 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 ) 1916 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 )
1912 return; 1917 return;
1913 KABC::Addressee::List list = mViewManager->selectedAddressees(); 1918 KABC::Addressee::List list = mViewManager->selectedAddressees();
1914 KABC::Addressee::List::Iterator it; 1919 KABC::Addressee::List::Iterator it;
1915 for ( it = list.begin(); it != list.end(); ++it ) { 1920 for ( it = list.begin(); it != list.end(); ++it ) {
1916 PhoneNumber::List phoneNumbers = (*it).phoneNumbers(); 1921 PhoneNumber::List phoneNumbers = (*it).phoneNumbers();
1917 PhoneNumber::List::Iterator phoneIt; 1922 PhoneNumber::List::Iterator phoneIt;
1918 bool found = false; 1923 bool found = false;
1919 for ( phoneIt = phoneNumbers.begin(); phoneIt != phoneNumbers.end(); ++phoneIt ) { 1924 for ( phoneIt = phoneNumbers.begin(); phoneIt != phoneNumbers.end(); ++phoneIt ) {
1920 if ( (*phoneIt).type() & PhoneNumber::Voice) { // voice found 1925 if ( (*phoneIt).type() & PhoneNumber::Voice) { // voice found
1921 if ((*phoneIt).type() - PhoneNumber::Voice ) { 1926 if ((*phoneIt).type() - PhoneNumber::Voice ) {
1922 (*phoneIt).setType((*phoneIt).type() - PhoneNumber::Voice ); 1927 (*phoneIt).setType((*phoneIt).type() - PhoneNumber::Voice );
1923 (*it).insertPhoneNumber( (*phoneIt) ); 1928 (*it).insertPhoneNumber( (*phoneIt) );
1924 found = true; 1929 found = true;
1925 } 1930 }
1926 } 1931 }
1927 1932
1928 } 1933 }
1929 if ( found ) 1934 if ( found )
1930 contactModified((*it) ); 1935 contactModified((*it) );
1931 } 1936 }
1932} 1937}
1933 1938
1934 1939
1935 1940
1936void KABCore::clipboardDataChanged() 1941void KABCore::clipboardDataChanged()
1937{ 1942{
1938 1943
1939 if ( mReadWrite ) 1944 if ( mReadWrite )
1940 mActionPaste->setEnabled( !QApplication::clipboard()->text().isEmpty() ); 1945 mActionPaste->setEnabled( !QApplication::clipboard()->text().isEmpty() );
1941 1946
1942} 1947}
1943 1948
1944void KABCore::updateActionMenu() 1949void KABCore::updateActionMenu()
1945{ 1950{
1946 UndoStack *undo = UndoStack::instance(); 1951 UndoStack *undo = UndoStack::instance();
1947 RedoStack *redo = RedoStack::instance(); 1952 RedoStack *redo = RedoStack::instance();
1948 1953
1949 if ( undo->isEmpty() ) 1954 if ( undo->isEmpty() )
1950 mActionUndo->setText( i18n( "Undo" ) ); 1955 mActionUndo->setText( i18n( "Undo" ) );
@@ -2056,542 +2061,137 @@ void KABCore::requestForDetails(const QString& sourceChannel, const QString& ses
2056 { 2061 {
2057 for (int j = 0; j < emaillist.count(); j++) 2062 for (int j = 0; j < emaillist.count(); j++)
2058 { 2063 {
2059 if (namelist[i] == emaillist[j]) 2064 if (namelist[i] == emaillist[j])
2060 { 2065 {
2061 foundUid = namelist[i].uid(); 2066 foundUid = namelist[i].uid();
2062 } 2067 }
2063 } 2068 }
2064 } 2069 }
2065 } 2070 }
2066 } 2071 }
2067 else 2072 else
2068 { 2073 {
2069 foundUid = uid; 2074 foundUid = uid;
2070 } 2075 }
2071 2076
2072 if (!foundUid.isEmpty()) 2077 if (!foundUid.isEmpty())
2073 { 2078 {
2074 2079
2075 // raise Ka/Pi if it is in the background 2080 // raise Ka/Pi if it is in the background
2076#ifndef DESKTOP_VERSION 2081#ifndef DESKTOP_VERSION
2077#ifndef KORG_NODCOP 2082#ifndef KORG_NODCOP
2078 //QCopEnvelope e("QPE/Application/kapi", "raise()"); 2083 //QCopEnvelope e("QPE/Application/kapi", "raise()");
2079#endif 2084#endif
2080#endif 2085#endif
2081 2086
2082 mMainWindow->showMaximized(); 2087 mMainWindow->showMaximized();
2083 mMainWindow-> raise(); 2088 mMainWindow-> raise();
2084 2089
2085 mViewManager->setSelected( "", false); 2090 mViewManager->setSelected( "", false);
2086 mViewManager->refreshView( "" ); 2091 mViewManager->refreshView( "" );
2087 mViewManager->setSelected( foundUid, true ); 2092 mViewManager->setSelected( foundUid, true );
2088 mViewManager->refreshView( foundUid ); 2093 mViewManager->refreshView( foundUid );
2089 2094
2090 if ( !mMultipleViewsAtOnce ) 2095 if ( !mMultipleViewsAtOnce )
2091 { 2096 {
2092 setDetailsVisible( true ); 2097 setDetailsVisible( true );
2093 mActionDetails->setChecked(true); 2098 mActionDetails->setChecked(true);
2094 } 2099 }
2095 } 2100 }
2096} 2101}
2097 2102
2098 2103
2099void KABCore::faq() 2104void KABCore::faq()
2100{ 2105{
2101 KApplication::showFile( "KA/Pi FAQ", "kdepim/kaddressbook/kapiFAQ.txt" ); 2106 KApplication::showFile( "KA/Pi FAQ", "kdepim/kaddressbook/kapiFAQ.txt" );
2102} 2107}
2103 2108
2104
2105void KABCore::fillSyncMenu()
2106{
2107 if ( syncMenu->count() )
2108 syncMenu->clear();
2109 syncMenu->insertItem( i18n("Configure..."), 0 );
2110 syncMenu->insertSeparator();
2111 syncMenu->insertItem( i18n("Multiple sync"), 1 );
2112 syncMenu->insertSeparator();
2113 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
2114 config.setGroup("General");
2115 QStringList prof = config.readListEntry("SyncProfileNames");
2116 KABPrefs::instance()->mLocalMachineName = config.readEntry("LocalMachineName","undefined");
2117 if ( prof.count() < 3 ) {
2118 prof.clear();
2119 prof << i18n("Sharp_DTM");
2120 prof << i18n("Local_file");
2121 prof << i18n("Last_file");
2122 KSyncProfile* temp = new KSyncProfile ();
2123 temp->setName( prof[0] );
2124 temp->writeConfig(&config);
2125 temp->setName( prof[1] );
2126 temp->writeConfig(&config);
2127 temp->setName( prof[2] );
2128 temp->writeConfig(&config);
2129 config.setGroup("General");
2130 config.writeEntry("SyncProfileNames",prof);
2131 config.writeEntry("ExternSyncProfiles","Sharp_DTM");
2132 config.sync();
2133 delete temp;
2134 }
2135 KABPrefs::instance()->mExternSyncProfiles = config.readListEntry("ExternSyncProfiles");
2136 KABPrefs::instance()->mSyncProfileNames = prof;
2137 int i;
2138 for ( i = 0; i < prof.count(); ++i ) {
2139
2140 syncMenu->insertItem( prof[i], 1000+i );
2141 if ( i == 2 )
2142 syncMenu->insertSeparator();
2143 }
2144 QDir app_dir;
2145 if ( !app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) {
2146 syncMenu->setItemEnabled( false , 1000 );
2147 }
2148 //probaly useless
2149 //mView->setupExternSyncProfiles();
2150}
2151void KABCore::slotSyncMenu( int action )
2152{
2153 //qDebug("syncaction %d ", action);
2154 if ( action == 0 ) {
2155
2156 // seems to be a Qt2 event handling bug
2157 // syncmenu.clear causes a segfault at first time
2158 // when we call it after the main event loop, it is ok
2159 // same behaviour when calling OM/Pi via QCOP for the first time
2160 QTimer::singleShot ( 1, this, SLOT ( confSync() ) );
2161 //confSync();
2162
2163 return;
2164 }
2165 if ( action == 1 ) {
2166 multiSync( true );
2167 return;
2168 }
2169
2170 if (mBlockSaveFlag)
2171 return;
2172 mBlockSaveFlag = true;
2173 mCurrentSyncProfile = action - 1000 ;
2174 mCurrentSyncDevice = KABPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile] ;
2175 mCurrentSyncName = KABPrefs::instance()->mLocalMachineName ;
2176 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
2177 KSyncProfile* temp = new KSyncProfile ();
2178 temp->setName(KABPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]);
2179 temp->readConfig(&config);
2180 KABPrefs::instance()->mAskForPreferences = temp->getAskForPreferences();
2181 KABPrefs::instance()->mSyncAlgoPrefs = temp->getSyncPrefs();
2182 KABPrefs::instance()->mWriteBackFile = temp->getWriteBackFile();
2183 KABPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting();
2184 KABPrefs::instance()->mWriteBackInFuture = 0;
2185 if ( temp->getWriteBackFuture() )
2186 KABPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
2187 KABPrefs::instance()->mShowSyncSummary = temp->getShowSummaryAfterSync();
2188 if ( action == 1000 ) {
2189 syncSharp();
2190
2191 } else if ( action == 1001 ) {
2192 syncLocalFile();
2193
2194 } else if ( action == 1002 ) {
2195 quickSyncLocalFile();
2196
2197 } else if ( action >= 1003 ) {
2198 if ( temp->getIsLocalFileSync() ) {
2199 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) )
2200 KABPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
2201 } else {
2202 if ( temp->getIsPhoneSync() ) {
2203 KABPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ;
2204 KABPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( );
2205 KABPrefs::instance()->mPhoneModel = temp->getPhoneModel( );
2206 syncPhone();
2207 } else
2208 syncRemote( temp );
2209
2210 }
2211 }
2212 delete temp;
2213 mBlockSaveFlag = false;
2214}
2215
2216void KABCore::syncLocalFile()
2217{
2218
2219 QString fn =KABPrefs::instance()->mLastSyncedLocalFile;
2220
2221 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename(*.ics/*.vcs)"), this );
2222 if ( fn == "" )
2223 return;
2224 if ( syncWithFile( fn, false ) ) {
2225 qDebug("syncLocalFile() successful ");
2226 }
2227
2228}
2229bool KABCore::syncWithFile( QString fn , bool quick )
2230{
2231 bool ret = false;
2232 QFileInfo info;
2233 info.setFile( fn );
2234 QString mess;
2235 bool loadbup = true;
2236 if ( !info. exists() ) {
2237 mess = i18n( "Sync file \n...%1\ndoes not exist!\nNothing synced!\n").arg(fn.right( 30) );
2238 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
2239 mess );
2240 return ret;
2241 }
2242 int result = 0;
2243 if ( !quick ) {
2244 mess = i18n("Sync with file \n...%1\nfrom:\n%2\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false ));
2245 result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
2246 mess,
2247 i18n("Sync"), i18n("Cancel"), 0,
2248 0, 1 );
2249 if ( result )
2250 return false;
2251 }
2252 if ( KABPrefs::instance()->mAskForPreferences )
2253 edit_sync_options();
2254 if ( result == 0 ) {
2255 //qDebug("Now sycing ... ");
2256 if ( ret = syncAB( fn, KABPrefs::instance()->mSyncAlgoPrefs ) )
2257 setCaption( i18n("Synchronization successful") );
2258 else
2259 setCaption( i18n("Sync cancelled or failed. Nothing synced.") );
2260 if ( ! quick )
2261 KABPrefs::instance()->mLastSyncedLocalFile = fn;
2262 setModified();
2263 }
2264 return ret;
2265}
2266void KABCore::quickSyncLocalFile()
2267{
2268
2269 if ( syncWithFile( KABPrefs::instance()->mLastSyncedLocalFile, false ) ) {
2270 qDebug("quick syncLocalFile() successful ");
2271
2272 }
2273}
2274void KABCore::multiSync( bool askforPrefs )
2275{
2276 if (mBlockSaveFlag)
2277 return;
2278 mBlockSaveFlag = true;
2279 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!");
2280 if ( QMessageBox::information( this, i18n("KO/Pi Sync"),
2281 question,
2282 i18n("Yes"), i18n("No"),
2283 0, 0 ) != 0 ) {
2284 mBlockSaveFlag = false;
2285 setCaption(i18n("Aborted! Nothing synced!"));
2286 return;
2287 }
2288 mCurrentSyncDevice = i18n("Multiple profiles") ;
2289 KABPrefs::instance()->mSyncAlgoPrefs = KABPrefs::instance()->mRingSyncAlgoPrefs;
2290 if ( askforPrefs ) {
2291 edit_sync_options();
2292 KABPrefs::instance()->mRingSyncAlgoPrefs = KABPrefs::instance()->mSyncAlgoPrefs;
2293 }
2294 setCaption(i18n("Multiple sync started.") );
2295 qApp->processEvents();
2296 int num = ringSync() ;
2297 if ( num > 1 )
2298 ringSync();
2299 mBlockSaveFlag = false;
2300 if ( num )
2301 save();
2302 if ( num )
2303 setCaption(i18n("%1 profiles synced. Multiple sync completed!").arg(num) );
2304 else
2305 setCaption(i18n("Nothing synced! No profiles defined for multisync!"));
2306 return;
2307}
2308int KABCore::ringSync()
2309{
2310 int syncedProfiles = 0;
2311 int i;
2312 QTime timer;
2313 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
2314 QStringList syncProfileNames = KABPrefs::instance()->mSyncProfileNames;
2315 KSyncProfile* temp = new KSyncProfile ();
2316 KABPrefs::instance()->mAskForPreferences = false;
2317 for ( i = 0; i < syncProfileNames.count(); ++i ) {
2318 mCurrentSyncProfile = i;
2319 temp->setName(syncProfileNames[mCurrentSyncProfile]);
2320 temp->readConfig(&config);
2321 if ( temp->getIncludeInRingSyncAB() && ( i < 1 || i > 2 )) {
2322 setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... "));
2323 ++syncedProfiles;
2324 // KABPrefs::instance()->mAskForPreferences = temp->getAskForPreferences();
2325 KABPrefs::instance()->mWriteBackFile = temp->getWriteBackFile();
2326 KABPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting();
2327 KABPrefs::instance()->mWriteBackInFuture = 0;
2328 if ( temp->getWriteBackFuture() )
2329 KABPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
2330 KABPrefs::instance()->mShowSyncSummary = false;
2331 mCurrentSyncDevice = syncProfileNames[i] ;
2332 mCurrentSyncName = KABPrefs::instance()->mLocalMachineName;
2333 if ( i == 0 ) {
2334 syncSharp();
2335 } else {
2336 if ( temp->getIsLocalFileSync() ) {
2337 if ( syncWithFile( temp->getRemoteFileNameAB( ), true ) )
2338 KABPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
2339 } else {
2340 if ( temp->getIsPhoneSync() ) {
2341 KABPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ;
2342 KABPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( );
2343 KABPrefs::instance()->mPhoneModel = temp->getPhoneModel( );
2344 syncPhone();
2345 } else
2346 syncRemote( temp, false );
2347
2348 }
2349 }
2350 timer.start();
2351 setCaption(i18n("Multiple sync in progress ... please wait!") );
2352 while ( timer.elapsed () < 2000 ) {
2353 qApp->processEvents();
2354#ifndef _WIN32_
2355 sleep (1);
2356#endif
2357 }
2358
2359 }
2360
2361 }
2362 delete temp;
2363 return syncedProfiles;
2364}
2365
2366void KABCore::syncRemote( KSyncProfile* prof, bool ask)
2367{
2368 QString question;
2369 if ( ask ) {
2370 question = i18n("Do you really want\nto remote sync\nwith profile \n")+ prof->getName()+" ?\n";
2371 if ( QMessageBox::information( this, i18n("KO/Pi Sync"),
2372 question,
2373 i18n("Yes"), i18n("No"),
2374 0, 0 ) != 0 )
2375 return;
2376 }
2377 QString command = prof->getPreSyncCommandAB();
2378 int fi;
2379 if ( (fi = command.find("$PWD$")) > 0 ) {
2380 QString pwd = getPassword();
2381 command = command.left( fi )+ pwd + command.mid( fi+5 );
2382
2383 }
2384 int maxlen = 30;
2385 if ( QApplication::desktop()->width() > 320 )
2386 maxlen += 25;
2387 setCaption ( i18n( "Copy remote file to local machine..." ) );
2388 int fileSize = 0;
2389 int result = system ( command );
2390 // 0 : okay
2391 // 256: no such file or dir
2392 //
2393 qDebug("KO: Remote copy result(0 = okay): %d ",result );
2394 if ( result != 0 ) {
2395 int len = maxlen;
2396 while ( len < command.length() ) {
2397 command.insert( len , "\n" );
2398 len += maxlen +2;
2399 }
2400 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) ;
2401 QMessageBox::information( this, i18n("KO/Pi Sync - ERROR"),
2402 question,
2403 i18n("Okay!")) ;
2404 setCaption ("KO/Pi");
2405 return;
2406 }
2407 setCaption ( i18n( "Copying succeed." ) );
2408 //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() );
2409 if ( syncWithFile( prof->getLocalTempFileAB(), true ) ) {
2410// Event* e = mView->getLastSyncEvent();
2411// e->setReadOnly( false );
2412// e->setLocation( KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]);
2413// e->setReadOnly( true );
2414 if ( KABPrefs::instance()->mWriteBackFile ) {
2415 command = prof->getPostSyncCommandAB();
2416 int fi;
2417 if ( (fi = command.find("$PWD$")) > 0 ) {
2418 QString pwd = getPassword();
2419 command = command.left( fi )+ pwd + command.mid( fi+5 );
2420
2421 }
2422 setCaption ( i18n( "Writing back file ..." ) );
2423 result = system ( command );
2424 qDebug("KO: Writing back file result: %d ", result);
2425 if ( result != 0 ) {
2426 setCaption ( i18n( "Writing back file result: " )+QString::number( result ) );
2427 return;
2428 } else {
2429 setCaption ( i18n( "Syncronization sucessfully completed" ) );
2430 }
2431 }
2432 }
2433 return;
2434}
2435#include <qpushbutton.h>
2436#include <qradiobutton.h>
2437#include <qbuttongroup.h>
2438void KABCore::edit_sync_options()
2439{
2440 //mDialogManager->showSyncOptions();
2441 //KABPrefs::instance()->mSyncAlgoPrefs
2442 QDialog dia( this, "dia", true );
2443 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice );
2444 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia);
2445 QVBoxLayout lay ( &dia );
2446 lay.setSpacing( 2 );
2447 lay.setMargin( 3 );
2448 lay.addWidget(&gr);
2449 QRadioButton loc ( i18n("Take local entry on conflict"), &gr );
2450 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr );
2451 QRadioButton newest( i18n("Take newest entry on conflict"), &gr );
2452 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr );
2453 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr );
2454 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr );
2455 //QRadioButton both( i18n("Take both on conflict"), &gr );
2456 QPushButton pb ( "OK", &dia);
2457 lay.addWidget( &pb );
2458 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
2459 switch ( KABPrefs::instance()->mSyncAlgoPrefs ) {
2460 case 0:
2461 loc.setChecked( true);
2462 break;
2463 case 1:
2464 rem.setChecked( true );
2465 break;
2466 case 2:
2467 newest.setChecked( true);
2468 break;
2469 case 3:
2470 ask.setChecked( true);
2471 break;
2472 case 4:
2473 f_loc.setChecked( true);
2474 break;
2475 case 5:
2476 f_rem.setChecked( true);
2477 break;
2478 case 6:
2479 // both.setChecked( true);
2480 break;
2481 default:
2482 break;
2483 }
2484 if ( dia.exec() ) {
2485 KABPrefs::instance()->mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ;
2486 }
2487
2488
2489}
2490QString KABCore::getPassword( )
2491{
2492 QString retfile = "";
2493 QDialog dia ( this, "input-dialog", true );
2494 QLineEdit lab ( &dia );
2495 lab.setEchoMode( QLineEdit::Password );
2496 QVBoxLayout lay( &dia );
2497 lay.setMargin(7);
2498 lay.setSpacing(7);
2499 lay.addWidget( &lab);
2500 dia.setFixedSize( 230,50 );
2501 dia.setCaption( i18n("Enter password") );
2502 QPushButton pb ( "OK", &dia);
2503 lay.addWidget( &pb );
2504 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
2505 dia.show();
2506 int res = dia.exec();
2507 if ( res )
2508 retfile = lab.text();
2509 dia.hide();
2510 qApp->processEvents();
2511 return retfile;
2512
2513}
2514#include <libkcal/syncdefines.h> 2109#include <libkcal/syncdefines.h>
2515 2110
2516KABC::Addressee KABCore::getLastSyncAddressee() 2111KABC::Addressee KABCore::getLastSyncAddressee()
2517{ 2112{
2518 Addressee lse; 2113 Addressee lse;
2114 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice();
2115
2519 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 2116 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
2520 lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice ); 2117 lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice );
2521 if (lse.isEmpty()) { 2118 if (lse.isEmpty()) {
2522 qDebug("Creating new last-syncAddressee "); 2119 qDebug("Creating new last-syncAddressee ");
2523 lse.setUid( "last-syncAddressee-"+mCurrentSyncDevice ); 2120 lse.setUid( "last-syncAddressee-"+mCurrentSyncDevice );
2524 QString sum = ""; 2121 QString sum = "";
2525 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 2122 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
2526 sum = "E: "; 2123 sum = "E: ";
2527 lse.setFamilyName("!"+sum+mCurrentSyncDevice + i18n(" - sync event")); 2124 lse.setFamilyName("!"+sum+mCurrentSyncDevice + i18n(" - sync event"));
2528 lse.setRevision( mLastAddressbookSync ); 2125 lse.setRevision( mLastAddressbookSync );
2529 lse.setCategories( i18n("SyncEvent") ); 2126 lse.setCategories( i18n("SyncEvent") );
2530 mAddressBook->insertAddressee( lse ); 2127 mAddressBook->insertAddressee( lse );
2531 } 2128 }
2532 return lse; 2129 return lse;
2533} 2130}
2534int KABCore::takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full ) 2131int KABCore::takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full )
2535{ 2132{
2536 2133
2537 //void setZaurusId(int id); 2134 //void setZaurusId(int id);
2538 // int zaurusId() const; 2135 // int zaurusId() const;
2539 // void setZaurusUid(int id); 2136 // void setZaurusUid(int id);
2540 // int zaurusUid() const; 2137 // int zaurusUid() const;
2541 // void setZaurusStat(int id); 2138 // void setZaurusStat(int id);
2542 // int zaurusStat() const; 2139 // int zaurusStat() const;
2543 // 0 equal 2140 // 0 equal
2544 // 1 take local 2141 // 1 take local
2545 // 2 take remote 2142 // 2 take remote
2546 // 3 cancel 2143 // 3 cancel
2547 QDateTime lastSync = mLastAddressbookSync; 2144 QDateTime lastSync = mLastAddressbookSync;
2548 QDateTime localMod = local->revision(); 2145 QDateTime localMod = local->revision();
2549 QDateTime remoteMod = remote->revision(); 2146 QDateTime remoteMod = remote->revision();
2147
2148 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice();
2149
2550 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2150 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2551 bool remCh, locCh; 2151 bool remCh, locCh;
2552 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 2152 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
2553 2153
2554 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); 2154 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
2555 locCh = ( localMod > mLastAddressbookSync ); 2155 locCh = ( localMod > mLastAddressbookSync );
2556 if ( !remCh && ! locCh ) { 2156 if ( !remCh && ! locCh ) {
2557 //qDebug("both not changed "); 2157 //qDebug("both not changed ");
2558 lastSync = localMod.addDays(1); 2158 lastSync = localMod.addDays(1);
2559 if ( mode <= SYNC_PREF_ASK ) 2159 if ( mode <= SYNC_PREF_ASK )
2560 return 0; 2160 return 0;
2561 } else { 2161 } else {
2562 if ( locCh ) { 2162 if ( locCh ) {
2563 //qDebug("loc changed %s %s", localMod.toString().latin1(), mLastAddressbookSync.toString().latin1()); 2163 //qDebug("loc changed %s %s", localMod.toString().latin1(), mLastAddressbookSync.toString().latin1());
2564 lastSync = localMod.addDays( -1 ); 2164 lastSync = localMod.addDays( -1 );
2565 if ( !remCh ) 2165 if ( !remCh )
2566 remoteMod =( lastSync.addDays( -1 ) ); 2166 remoteMod =( lastSync.addDays( -1 ) );
2567 } else { 2167 } else {
2568 //qDebug(" not loc changed "); 2168 //qDebug(" not loc changed ");
2569 lastSync = localMod.addDays( 1 ); 2169 lastSync = localMod.addDays( 1 );
2570 if ( remCh ) 2170 if ( remCh )
2571 remoteMod =( lastSync.addDays( 1 ) ); 2171 remoteMod =( lastSync.addDays( 1 ) );
2572 2172
2573 } 2173 }
2574 } 2174 }
2575 full = true; 2175 full = true;
2576 if ( mode < SYNC_PREF_ASK ) 2176 if ( mode < SYNC_PREF_ASK )
2577 mode = SYNC_PREF_ASK; 2177 mode = SYNC_PREF_ASK;
2578 } else { 2178 } else {
2579 if ( localMod == remoteMod ) 2179 if ( localMod == remoteMod )
2580 return 0; 2180 return 0;
2581 2181
2582 } 2182 }
2583 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 2183 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
2584 2184
2585 //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , localMod, remote->lastModified().toString().latin1(), remoteMod); 2185 //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , localMod, remote->lastModified().toString().latin1(), remoteMod);
2586 //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() ); 2186 //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() );
2587 //full = true; //debug only 2187 //full = true; //debug only
2588 if ( full ) { 2188 if ( full ) {
2589 bool equ = ( (*local) == (*remote) ); 2189 bool equ = ( (*local) == (*remote) );
2590 if ( equ ) { 2190 if ( equ ) {
2591 //qDebug("equal "); 2191 //qDebug("equal ");
2592 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2192 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2593 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 2193 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
2594 } 2194 }
2595 if ( mode < SYNC_PREF_FORCE_LOCAL ) 2195 if ( mode < SYNC_PREF_FORCE_LOCAL )
2596 return 0; 2196 return 0;
2597 2197
@@ -2608,105 +2208,111 @@ int KABCore::takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, i
2608 switch( mode ) { 2208 switch( mode ) {
2609 case SYNC_PREF_LOCAL: 2209 case SYNC_PREF_LOCAL:
2610 if ( lastSync > remoteMod ) 2210 if ( lastSync > remoteMod )
2611 return 1; 2211 return 1;
2612 if ( lastSync > localMod ) 2212 if ( lastSync > localMod )
2613 return 2; 2213 return 2;
2614 return 1; 2214 return 1;
2615 break; 2215 break;
2616 case SYNC_PREF_REMOTE: 2216 case SYNC_PREF_REMOTE:
2617 if ( lastSync > remoteMod ) 2217 if ( lastSync > remoteMod )
2618 return 1; 2218 return 1;
2619 if ( lastSync > localMod ) 2219 if ( lastSync > localMod )
2620 return 2; 2220 return 2;
2621 return 2; 2221 return 2;
2622 break; 2222 break;
2623 case SYNC_PREF_NEWEST: 2223 case SYNC_PREF_NEWEST:
2624 if ( localMod > remoteMod ) 2224 if ( localMod > remoteMod )
2625 return 1; 2225 return 1;
2626 else 2226 else
2627 return 2; 2227 return 2;
2628 break; 2228 break;
2629 case SYNC_PREF_ASK: 2229 case SYNC_PREF_ASK:
2630 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 2230 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
2631 if ( lastSync > remoteMod ) 2231 if ( lastSync > remoteMod )
2632 return 1; 2232 return 1;
2633 if ( lastSync > localMod ) 2233 if ( lastSync > localMod )
2634 return 2; 2234 return 2;
2635 localIsNew = localMod >= remoteMod; 2235 localIsNew = localMod >= remoteMod;
2636 //qDebug("conflict! ************************************** "); 2236 //qDebug("conflict! ************************************** ");
2637 { 2237 {
2638 KPIM::AddresseeChooser acd ( *local,*remote, localIsNew , this ); 2238 KPIM::AddresseeChooser acd ( *local,*remote, localIsNew , this );
2639 result = acd.executeD(localIsNew); 2239 result = acd.executeD(localIsNew);
2640 return result; 2240 return result;
2641 } 2241 }
2642 break; 2242 break;
2643 case SYNC_PREF_FORCE_LOCAL: 2243 case SYNC_PREF_FORCE_LOCAL:
2644 return 1; 2244 return 1;
2645 break; 2245 break;
2646 case SYNC_PREF_FORCE_REMOTE: 2246 case SYNC_PREF_FORCE_REMOTE:
2647 return 2; 2247 return 2;
2648 break; 2248 break;
2649 2249
2650 default: 2250 default:
2651 // SYNC_PREF_TAKE_BOTH not implemented 2251 // SYNC_PREF_TAKE_BOTH not implemented
2652 break; 2252 break;
2653 } 2253 }
2654 return 0; 2254 return 0;
2655} 2255}
2256
2257
2656bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode) 2258bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode)
2657{ 2259{
2658 bool syncOK = true; 2260 bool syncOK = true;
2659 int addedAddressee = 0; 2261 int addedAddressee = 0;
2660 int addedAddresseeR = 0; 2262 int addedAddresseeR = 0;
2661 int deletedAddresseeR = 0; 2263 int deletedAddresseeR = 0;
2662 int deletedAddresseeL = 0; 2264 int deletedAddresseeL = 0;
2663 int changedLocal = 0; 2265 int changedLocal = 0;
2664 int changedRemote = 0; 2266 int changedRemote = 0;
2267
2268 QString mCurrentSyncName = syncManager->getCurrentSyncName();
2269 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice();
2270
2665 //QPtrList<Addressee> el = local->rawAddressees(); 2271 //QPtrList<Addressee> el = local->rawAddressees();
2666 Addressee addresseeR; 2272 Addressee addresseeR;
2667 QString uid; 2273 QString uid;
2668 int take; 2274 int take;
2669 Addressee addresseeL; 2275 Addressee addresseeL;
2670 Addressee addresseeRSync; 2276 Addressee addresseeRSync;
2671 Addressee addresseeLSync; 2277 Addressee addresseeLSync;
2672 // KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees(); 2278 // KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees();
2673 //KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees(); 2279 //KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees();
2674 bool fullDateRange = false; 2280 bool fullDateRange = false;
2675 local->resetTempSyncStat(); 2281 local->resetTempSyncStat();
2676 mLastAddressbookSync = QDateTime::currentDateTime(); 2282 mLastAddressbookSync = QDateTime::currentDateTime();
2677 QDateTime modifiedCalendar = mLastAddressbookSync;; 2283 QDateTime modifiedCalendar = mLastAddressbookSync;;
2678 addresseeLSync = getLastSyncAddressee(); 2284 addresseeLSync = getLastSyncAddressee();
2679 qDebug("Last Sync %s ", addresseeLSync.revision().toString().latin1()); 2285 qDebug("Last Sync %s ", addresseeLSync.revision().toString().latin1());
2680 addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName ); 2286 addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName );
2681 if ( !addresseeR.isEmpty() ) { 2287 if ( !addresseeR.isEmpty() ) {
2682 addresseeRSync = addresseeR; 2288 addresseeRSync = addresseeR;
2683 remote->removeAddressee(addresseeR ); 2289 remote->removeAddressee(addresseeR );
2684 2290
2685 } else { 2291 } else {
2686 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2292 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2687 addresseeRSync = addresseeLSync ; 2293 addresseeRSync = addresseeLSync ;
2688 } else { 2294 } else {
2689 qDebug("FULLDATE 1"); 2295 qDebug("FULLDATE 1");
2690 fullDateRange = true; 2296 fullDateRange = true;
2691 Addressee newAdd; 2297 Addressee newAdd;
2692 addresseeRSync = newAdd; 2298 addresseeRSync = newAdd;
2693 addresseeRSync.setFamilyName(mCurrentSyncName + i18n(" - sync addressee")); 2299 addresseeRSync.setFamilyName(mCurrentSyncName + i18n(" - sync addressee"));
2694 addresseeRSync.setUid("last-syncAddressee-"+mCurrentSyncName ); 2300 addresseeRSync.setUid("last-syncAddressee-"+mCurrentSyncName );
2695 addresseeRSync.setRevision( mLastAddressbookSync ); 2301 addresseeRSync.setRevision( mLastAddressbookSync );
2696 addresseeRSync.setCategories( i18n("SyncAddressee") ); 2302 addresseeRSync.setCategories( i18n("SyncAddressee") );
2697 } 2303 }
2698 } 2304 }
2699 if ( addresseeLSync.revision() == mLastAddressbookSync ) { 2305 if ( addresseeLSync.revision() == mLastAddressbookSync ) {
2700 qDebug("FULLDATE 2"); 2306 qDebug("FULLDATE 2");
2701 fullDateRange = true; 2307 fullDateRange = true;
2702 } 2308 }
2703 if ( ! fullDateRange ) { 2309 if ( ! fullDateRange ) {
2704 if ( addresseeLSync.revision() != addresseeRSync.revision() ) { 2310 if ( addresseeLSync.revision() != addresseeRSync.revision() ) {
2705 2311
2706 // qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() ); 2312 // qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() );
2707 //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec()); 2313 //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec());
2708 fullDateRange = true; 2314 fullDateRange = true;
2709 qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() ); 2315 qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() );
2710 } 2316 }
2711 } 2317 }
2712 // fullDateRange = true; // debug only! 2318 // fullDateRange = true; // debug only!
@@ -2876,193 +2482,188 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
2876 if ( inL.revision() < mLastAddressbookSync && mode != 4 ) { 2482 if ( inL.revision() < mLastAddressbookSync && mode != 4 ) {
2877 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL); 2483 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
2878 local->removeAddressee( inL ); 2484 local->removeAddressee( inL );
2879 ++deletedAddresseeL; 2485 ++deletedAddresseeL;
2880 } else { 2486 } else {
2881 if ( ! KABPrefs::instance()->mWriteBackExistingOnly ) { 2487 if ( ! KABPrefs::instance()->mWriteBackExistingOnly ) {
2882 ++addedAddresseeR; 2488 ++addedAddresseeR;
2883 inL.setRevision( modifiedCalendar ); 2489 inL.setRevision( modifiedCalendar );
2884 local->insertAddressee( inL, false ); 2490 local->insertAddressee( inL, false );
2885 inR = inL; 2491 inR = inL;
2886 inR.setResource( 0 ); 2492 inR.setResource( 0 );
2887 remote->insertAddressee( inR, false ); 2493 remote->insertAddressee( inR, false );
2888 } 2494 }
2889 } 2495 }
2890 } 2496 }
2891 } 2497 }
2892 } 2498 }
2893 ++incCounter; 2499 ++incCounter;
2894 } 2500 }
2895 el.clear(); 2501 el.clear();
2896 bar.hide(); 2502 bar.hide();
2897 mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 ); 2503 mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 );
2898 // get rid of micro seconds 2504 // get rid of micro seconds
2899 QTime t = mLastAddressbookSync.time(); 2505 QTime t = mLastAddressbookSync.time();
2900 mLastAddressbookSync.setTime( QTime (t.hour (), t.minute (), t.second () ) ); 2506 mLastAddressbookSync.setTime( QTime (t.hour (), t.minute (), t.second () ) );
2901 addresseeLSync.setRevision( mLastAddressbookSync ); 2507 addresseeLSync.setRevision( mLastAddressbookSync );
2902 addresseeRSync.setRevision( mLastAddressbookSync ); 2508 addresseeRSync.setRevision( mLastAddressbookSync );
2903 addresseeRSync.setRole( i18n("!Remote from: ")+mCurrentSyncName ) ; 2509 addresseeRSync.setRole( i18n("!Remote from: ")+mCurrentSyncName ) ;
2904 addresseeLSync.setRole(i18n("!Local from: ") + mCurrentSyncName ); 2510 addresseeLSync.setRole(i18n("!Local from: ") + mCurrentSyncName );
2905 addresseeRSync.setGivenName( i18n("!DO NOT EDIT!") ) ; 2511 addresseeRSync.setGivenName( i18n("!DO NOT EDIT!") ) ;
2906 addresseeLSync.setGivenName(i18n("!DO NOT EDIT!") ); 2512 addresseeLSync.setGivenName(i18n("!DO NOT EDIT!") );
2907 addresseeRSync.setOrganization( "!"+mLastAddressbookSync.toString() ) ; 2513 addresseeRSync.setOrganization( "!"+mLastAddressbookSync.toString() ) ;
2908 addresseeLSync.setOrganization("!"+ mLastAddressbookSync.toString() ); 2514 addresseeLSync.setOrganization("!"+ mLastAddressbookSync.toString() );
2909 addresseeRSync.setNote( "" ) ; 2515 addresseeRSync.setNote( "" ) ;
2910 addresseeLSync.setNote( "" ); 2516 addresseeLSync.setNote( "" );
2911 2517
2912 if ( mGlobalSyncMode == SYNC_MODE_NORMAL) 2518 if ( mGlobalSyncMode == SYNC_MODE_NORMAL)
2913 remote->insertAddressee( addresseeRSync, false ); 2519 remote->insertAddressee( addresseeRSync, false );
2914 local->insertAddressee( addresseeLSync, false ); 2520 local->insertAddressee( addresseeLSync, false );
2915 QString mes; 2521 QString mes;
2916 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 ); 2522 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 );
2917 if ( KABPrefs::instance()->mShowSyncSummary ) { 2523 if ( KABPrefs::instance()->mShowSyncSummary ) {
2918 KMessageBox::information(this, mes, i18n("KA/Pi Synchronization") ); 2524 KMessageBox::information(this, mes, i18n("KA/Pi Synchronization") );
2919 } 2525 }
2920 qDebug( mes ); 2526 qDebug( mes );
2921 return syncOK; 2527 return syncOK;
2922} 2528}
2923 2529
2924bool KABCore::syncAB(QString filename, int mode) 2530
2531//this is a overwritten callbackmethods from the syncinterface
2532bool KABCore::sync(KSyncManager* manager, QString filename, int mode)
2925{ 2533{
2926 2534
2927 //pending prepare addresseeview for output 2535 //pending prepare addresseeview for output
2928 //pending detect, if remote file has REV field. if not switch to external sync 2536 //pending detect, if remote file has REV field. if not switch to external sync
2929 mGlobalSyncMode = SYNC_MODE_NORMAL; 2537 mGlobalSyncMode = SYNC_MODE_NORMAL;
2538 QString mCurrentSyncDevice = manager->getCurrentSyncDevice();
2539
2930 AddressBook abLocal(filename,"syncContact"); 2540 AddressBook abLocal(filename,"syncContact");
2931 bool syncOK = false; 2541 bool syncOK = false;
2932 if ( abLocal.load() ) { 2542 if ( abLocal.load() ) {
2933 qDebug("AB loaded %s,sync mode %d",filename.latin1(), mode ); 2543 qDebug("AB loaded %s,sync mode %d",filename.latin1(), mode );
2934 bool external = false; 2544 bool external = false;
2935 bool isXML = false; 2545 bool isXML = false;
2936 if ( filename.right(4) == ".xml") { 2546 if ( filename.right(4) == ".xml") {
2937 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 2547 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
2938 isXML = true; 2548 isXML = true;
2939 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice ); 2549 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice );
2940 } else { 2550 } else {
2941 Addressee lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice ); 2551 Addressee lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice );
2942 if ( ! lse.isEmpty() ) { 2552 if ( ! lse.isEmpty() ) {
2943 if ( lse.familyName().left(4) == "!E: " ) 2553 if ( lse.familyName().left(4) == "!E: " )
2944 external = true; 2554 external = true;
2945 } else { 2555 } else {
2946 bool found = false; 2556 bool found = false;
2947 AddressBook::Iterator it; 2557 AddressBook::Iterator it;
2948 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 2558 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
2949 if ( (*it).revision().date().year() > 2003 ) { 2559 if ( (*it).revision().date().year() > 2003 ) {
2950 found = true; 2560 found = true;
2951 break; 2561 break;
2952 } 2562 }
2953 } 2563 }
2954 external = ! found; 2564 external = ! found;
2955 } 2565 }
2956 2566
2957 if ( external ) { 2567 if ( external ) {
2958 qDebug("Setting vcf mode to external "); 2568 qDebug("Setting vcf mode to external ");
2959 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 2569 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
2960 AddressBook::Iterator it; 2570 AddressBook::Iterator it;
2961 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 2571 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
2962 (*it).setID( mCurrentSyncDevice, (*it).uid() ); 2572 (*it).setID( mCurrentSyncDevice, (*it).uid() );
2963 (*it).computeCsum( mCurrentSyncDevice ); 2573 (*it).computeCsum( mCurrentSyncDevice );
2964 } 2574 }
2965 } 2575 }
2966 } 2576 }
2967 //AddressBook::Iterator it; 2577 //AddressBook::Iterator it;
2968 //QStringList vcards; 2578 //QStringList vcards;
2969 //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 2579 //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
2970 // qDebug("Name %s ", (*it).familyName().latin1()); 2580 // qDebug("Name %s ", (*it).familyName().latin1());
2971 //} 2581 //}
2972 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode ); 2582 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode );
2973 if ( syncOK ) { 2583 if ( syncOK ) {
2974 if ( KABPrefs::instance()->mWriteBackFile ) 2584 if ( KABPrefs::instance()->mWriteBackFile )
2975 { 2585 {
2976 if ( external ) 2586 if ( external )
2977 abLocal.removeSyncAddressees( !isXML); 2587 abLocal.removeSyncAddressees( !isXML);
2978 qDebug("Saving remote AB "); 2588 qDebug("Saving remote AB ");
2979 abLocal.saveAB(); 2589 abLocal.saveAB();
2980 if ( isXML ) { 2590 if ( isXML ) {
2981 // afterwrite processing 2591 // afterwrite processing
2982 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice ); 2592 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice );
2983 } 2593 }
2984 } 2594 }
2985 } 2595 }
2986 setModified(); 2596 setModified();
2987 2597
2988 } 2598 }
2989 if ( syncOK ) 2599 if ( syncOK )
2990 mViewManager->refreshView(); 2600 mViewManager->refreshView();
2991 return syncOK; 2601 return syncOK;
2992#if 0 2602#if 0
2993 2603
2994 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) { 2604 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) {
2995 getEventViewerDialog()->setSyncMode( true ); 2605 getEventViewerDialog()->setSyncMode( true );
2996 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 2606 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
2997 getEventViewerDialog()->setSyncMode( false ); 2607 getEventViewerDialog()->setSyncMode( false );
2998 if ( syncOK ) { 2608 if ( syncOK ) {
2999 if ( KOPrefs::instance()->mWriteBackFile ) 2609 if ( KOPrefs::instance()->mWriteBackFile )
3000 { 2610 {
3001 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 2611 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
3002 storage->save(); 2612 storage->save();
3003 } 2613 }
3004 } 2614 }
3005 setModified(); 2615 setModified();
3006 } 2616 }
3007 2617
3008#endif 2618#endif
3009} 2619}
3010 2620
3011void KABCore::confSync() 2621
3012{ 2622//this is a overwritten callbackmethods from the syncinterface
3013 static KSyncPrefsDialog* sp = 0; 2623bool KABCore::syncExternal(KSyncManager* manager, QString resource)
3014 if ( ! sp ) {
3015 sp = new KSyncPrefsDialog( this, "syncprefs", true );
3016 }
3017 sp->usrReadConfig();
3018#ifndef DESKTOP_VERSION
3019 sp->showMaximized();
3020#else
3021 sp->show();
3022#endif
3023 sp->exec();
3024 KABPrefs::instance()->mSyncProfileNames = sp->getSyncProfileNames();
3025 KABPrefs::instance()->mLocalMachineName = sp->getLocalMachineName ();
3026 fillSyncMenu();
3027}
3028void KABCore::syncSharp()
3029{
3030 if ( ! syncExternal("sharp") )
3031 qDebug("ERROR sync sharp ");;
3032}
3033bool KABCore::syncExternal(QString resource)
3034{ 2624{
3035 if ( mModified ) 2625 QString mCurrentSyncDevice = manager->getCurrentSyncDevice();
3036 save(); 2626
3037 if ( KABPrefs::instance()->mAskForPreferences )
3038 edit_sync_options();
3039 qDebug("syncSharp() ");
3040 AddressBook abLocal( resource,"syncContact"); 2627 AddressBook abLocal( resource,"syncContact");
3041 bool syncOK = false; 2628 bool syncOK = false;
3042 if ( abLocal.load() ) { 2629 if ( abLocal.load() ) {
3043 qDebug("AB sharp loaded ,sync device %s",mCurrentSyncDevice.latin1()); 2630 qDebug("AB sharp loaded ,sync device %s",mCurrentSyncDevice.latin1());
3044 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 2631 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
3045 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice ); 2632 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice );
2633 qDebug("KABCore::syncExternal: why do we acces here KABPrefs and not somehow KSyncProfile? ");
3046 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, KABPrefs::instance()->mSyncAlgoPrefs ); 2634 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, KABPrefs::instance()->mSyncAlgoPrefs );
3047 if ( syncOK ) { 2635 if ( syncOK ) {
3048 if ( KABPrefs::instance()->mWriteBackFile ) { 2636 if ( KABPrefs::instance()->mWriteBackFile ) {
3049 abLocal.saveAB(); 2637 abLocal.saveAB();
3050 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice ); 2638 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice );
3051 } 2639 }
3052 } 2640 }
3053 setModified(); 2641 setModified();
3054 } 2642 }
3055 if ( syncOK ) 2643 if ( syncOK )
3056 mViewManager->refreshView(); 2644 mViewManager->refreshView();
3057 return syncOK; 2645 return syncOK;
3058 2646
3059} 2647}
3060void KABCore::syncPhone() 2648
2649//called by the syncmanager to indicate that the work has to marked as dirty.
2650void KABCore::sync_setModified()
3061{ 2651{
3062 if ( mModified ) 2652 setModified();
3063 save(); 2653}
3064 qDebug("pending syncPhone(); ");
3065 //mView->syncPhone();
3066 setModified();
3067 2654
2655//called by the syncmanager to ask if the dirty flag is set.
2656bool KABCore::sync_isModified()
2657{
2658 return mModified;
3068} 2659}
2660
2661
2662//called by the syncmanager to indicate that the work has to be saved.
2663void KABCore::sync_save()
2664{
2665 save();
2666}
2667
2668
2669
diff --git a/kaddressbook/kabcore.h b/kaddressbook/kabcore.h
index e89bf41..ef61d6d 100644
--- a/kaddressbook/kabcore.h
+++ b/kaddressbook/kabcore.h
@@ -1,118 +1,119 @@
1/* 1/*
2 This file is part of KAddressbook. 2 This file is part of KAddressbook.
3 Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> 3 Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24#ifndef KABCORE_H 24#ifndef KABCORE_H
25#define KABCORE_H 25#define KABCORE_H
26 26
27#include <kabc/field.h> 27#include <kabc/field.h>
28 28
29#ifndef KAB_EMBEDDED 29#ifndef KAB_EMBEDDED
30#endif //KAB_EMBEDDED 30#endif //KAB_EMBEDDED
31#include <qdict.h> 31#include <qdict.h>
32 32
33#include <qwidget.h> 33#include <qwidget.h>
34#include <qpopupmenu.h> 34#include <qpopupmenu.h>
35#include <ksyncmanager.h>
35 36
36namespace KABC { 37namespace KABC {
37class AddressBook; 38class AddressBook;
38} 39}
39 40
40#ifndef KAB_EMBEDDED 41#ifndef KAB_EMBEDDED
41class KAboutData; 42class KAboutData;
42class KConfig; 43class KConfig;
43 44
44class KAddressBookService; 45class KAddressBookService;
45class LDAPSearchDialog; 46class LDAPSearchDialog;
46#else //KAB_EMBEDDED 47#else //KAB_EMBEDDED
47class KAddressBookMain; 48class KAddressBookMain;
48//US class QAction; 49//US class QAction;
49#endif //KAB_EMBEDDED 50#endif //KAB_EMBEDDED
50class KCMultiDialog; 51class KCMultiDialog;
51class KXMLGUIClient; 52class KXMLGUIClient;
52class ExtensionManager; 53class ExtensionManager;
53class XXPortManager; 54class XXPortManager;
54class JumpButtonBar; 55class JumpButtonBar;
55class IncSearchWidget; 56class IncSearchWidget;
56class KDGanttMinimizeSplitter; 57class KDGanttMinimizeSplitter;
57class KAction; 58class KAction;
58class KActionCollection; 59class KActionCollection;
59class KToggleAction; 60class KToggleAction;
60class KSyncProfile; 61class KSyncProfile;
61 62
62class QAction; 63class QAction;
63class QMenuBar; 64class QMenuBar;
64class QSplitter; 65class QSplitter;
65class ViewContainer; 66class ViewContainer;
66class ViewManager; 67class ViewManager;
67class AddresseeEditorDialog; 68class AddresseeEditorDialog;
68class Ir; 69class Ir;
69 70
70class KABCore : public QWidget 71class KABCore : public QWidget, public KSyncInterface
71{ 72{
72 Q_OBJECT 73 Q_OBJECT
73 74
74 public: 75 public:
75 KABCore( KAddressBookMain *client, bool readWrite, QWidget *parent, const char *name = 0 ); 76 KABCore( KAddressBookMain *client, bool readWrite, QWidget *parent, const char *name = 0 );
76 77
77 78
78 ~KABCore(); 79 ~KABCore();
79 80
80 81
81#ifdef KAB_EMBEDDED 82#ifdef KAB_EMBEDDED
82 //US added functionality 83 //US added functionality
83 QPopupMenu* getViewMenu() {return viewMenu;} 84 QPopupMenu* getViewMenu() {return viewMenu;}
84 QPopupMenu* getFilterMenu() {return filterMenu;} 85 QPopupMenu* getFilterMenu() {return filterMenu;}
85 QPopupMenu* getSettingsMenu() {return settingsMenu;} 86 QPopupMenu* getSettingsMenu() {return settingsMenu;}
86 void addActionsManually(); 87 void addActionsManually();
87#endif //KAB_EMBEDDED 88#endif //KAB_EMBEDDED
88 /** 89 /**
89 Restores the global settings. 90 Restores the global settings.
90 */ 91 */
91 void restoreSettings(); 92 void restoreSettings();
92 93
93 /** 94 /**
94 Saves the global settings. 95 Saves the global settings.
95 */ 96 */
96 void saveSettings(); 97 void saveSettings();
97 98
98 /** 99 /**
99 Returns a pointer to the StdAddressBook of the application. 100 Returns a pointer to the StdAddressBook of the application.
100 */ 101 */
101 KABC::AddressBook *addressBook() const; 102 KABC::AddressBook *addressBook() const;
102 103
103 /** 104 /**
104 Returns a pointer to the KConfig object of the application. 105 Returns a pointer to the KConfig object of the application.
105 */ 106 */
106 static KConfig *config(); 107 static KConfig *config();
107 108
108 /** 109 /**
109 Returns a pointer to the global KActionCollection object. So 110 Returns a pointer to the global KActionCollection object. So
110 other classes can register their actions easily. 111 other classes can register their actions easily.
111 */ 112 */
112 KActionCollection *actionCollection() const; 113 KActionCollection *actionCollection() const;
113 114
114 /** 115 /**
115 Returns the current search field of the Incremental Search Widget. 116 Returns the current search field of the Incremental Search Widget.
116 */ 117 */
117 KABC::Field *currentSearchField() const; 118 KABC::Field *currentSearchField() const;
118 119
@@ -296,97 +297,97 @@ class KABCore : public QWidget
296 */ 297 */
297 void redo(); 298 void redo();
298 299
299 /** 300 /**
300 Shows the edit dialog for the given uid. If the uid is QString::null, 301 Shows the edit dialog for the given uid. If the uid is QString::null,
301 the method will try to find a selected addressee in the view. 302 the method will try to find a selected addressee in the view.
302 */ 303 */
303 void editContact( const QString &uid /*US = QString::null*/ ); 304 void editContact( const QString &uid /*US = QString::null*/ );
304//US added a second method without defaultparameter 305//US added a second method without defaultparameter
305 void editContact2(); 306 void editContact2();
306 307
307 /** 308 /**
308 Shows or edits the detail view for the given uid. If the uid is QString::null, 309 Shows or edits the detail view for the given uid. If the uid is QString::null,
309 the method will try to find a selected addressee in the view. 310 the method will try to find a selected addressee in the view.
310 */ 311 */
311 void executeContact( const QString &uid /*US = QString::null*/ ); 312 void executeContact( const QString &uid /*US = QString::null*/ );
312 313
313 /** 314 /**
314 Launches the configuration dialog. 315 Launches the configuration dialog.
315 */ 316 */
316 void openConfigDialog(); 317 void openConfigDialog();
317 318
318 /** 319 /**
319 Launches the ldap search dialog. 320 Launches the ldap search dialog.
320 */ 321 */
321 void openLDAPDialog(); 322 void openLDAPDialog();
322 323
323 /** 324 /**
324 Creates a KAddressBookPrinter, which will display the print 325 Creates a KAddressBookPrinter, which will display the print
325 dialog and do the printing. 326 dialog and do the printing.
326 */ 327 */
327 void print(); 328 void print();
328 329
329 /** 330 /**
330 Registers a new GUI client, so plugins can register its actions. 331 Registers a new GUI client, so plugins can register its actions.
331 */ 332 */
332 void addGUIClient( KXMLGUIClient *client ); 333 void addGUIClient( KXMLGUIClient *client );
333 334
334 void requestForNameEmailUidList(const QString& sourceChannel, const QString& sessionuid); 335 void requestForNameEmailUidList(const QString& sourceChannel, const QString& sessionuid);
335 void requestForDetails(const QString& sourceChannel, const QString& sessionuid, const QString& name, const QString& email, const QString& uid); 336 void requestForDetails(const QString& sourceChannel, const QString& sessionuid, const QString& name, const QString& email, const QString& uid);
336 337
337 338
338 signals: 339 signals:
339 void contactSelected( const QString &name ); 340 void contactSelected( const QString &name );
340 void contactSelected( const QPixmap &pixmap ); 341 void contactSelected( const QPixmap &pixmap );
341 public slots: 342 public slots:
342 void setDetailsVisible( bool visible ); 343 void setDetailsVisible( bool visible );
343 void setDetailsToState(); 344 void setDetailsToState();
344 void slotSyncMenu( int ); 345 // void slotSyncMenu( int );
345 private slots: 346 private slots:
346 void setJumpButtonBarVisible( bool visible ); 347 void setJumpButtonBarVisible( bool visible );
347 void importFromOL(); 348 void importFromOL();
348 void extensionModified( const KABC::Addressee::List &list ); 349 void extensionModified( const KABC::Addressee::List &list );
349 void extensionChanged( int id ); 350 void extensionChanged( int id );
350 void clipboardDataChanged(); 351 void clipboardDataChanged();
351 void updateActionMenu(); 352 void updateActionMenu();
352 void configureKeyBindings(); 353 void configureKeyBindings();
353 void removeVoice(); 354 void removeVoice();
354#ifdef KAB_EMBEDDED 355#ifdef KAB_EMBEDDED
355 void configureResources(); 356 void configureResources();
356#endif //KAB_EMBEDDED 357#endif //KAB_EMBEDDED
357 358
358 void slotEditorDestroyed( const QString &uid ); 359 void slotEditorDestroyed( const QString &uid );
359 void configurationChanged(); 360 void configurationChanged();
360 void addressBookChanged(); 361 void addressBookChanged();
361 362
362 private: 363 private:
363 void initGUI(); 364 void initGUI();
364 void initActions(); 365 void initActions();
365 366
366 AddresseeEditorDialog *createAddresseeEditorDialog( QWidget *parent, 367 AddresseeEditorDialog *createAddresseeEditorDialog( QWidget *parent,
367 const char *name = 0 ); 368 const char *name = 0 );
368 369
369 KXMLGUIClient *mGUIClient; 370 KXMLGUIClient *mGUIClient;
370 371
371 KABC::AddressBook *mAddressBook; 372 KABC::AddressBook *mAddressBook;
372 373
373 ViewManager *mViewManager; 374 ViewManager *mViewManager;
374 // QSplitter *mDetailsSplitter; 375 // QSplitter *mDetailsSplitter;
375 KDGanttMinimizeSplitter *mExtensionBarSplitter; 376 KDGanttMinimizeSplitter *mExtensionBarSplitter;
376 ViewContainer *mDetails; 377 ViewContainer *mDetails;
377 KDGanttMinimizeSplitter* mMiniSplitter; 378 KDGanttMinimizeSplitter* mMiniSplitter;
378 XXPortManager *mXXPortManager; 379 XXPortManager *mXXPortManager;
379 JumpButtonBar *mJumpButtonBar; 380 JumpButtonBar *mJumpButtonBar;
380 IncSearchWidget *mIncSearchWidget; 381 IncSearchWidget *mIncSearchWidget;
381 ExtensionManager *mExtensionManager; 382 ExtensionManager *mExtensionManager;
382 383
383 KCMultiDialog *mConfigureDialog; 384 KCMultiDialog *mConfigureDialog;
384 385
385#ifndef KAB_EMBEDDED 386#ifndef KAB_EMBEDDED
386 LDAPSearchDialog *mLdapSearchDialog; 387 LDAPSearchDialog *mLdapSearchDialog;
387#endif //KAB_EMBEDDED 388#endif //KAB_EMBEDDED
388 // QDict<AddresseeEditorDialog> mEditorDict; 389 // QDict<AddresseeEditorDialog> mEditorDict;
389 AddresseeEditorDialog *mEditorDialog; 390 AddresseeEditorDialog *mEditorDialog;
390 bool mReadWrite; 391 bool mReadWrite;
391 bool mModified; 392 bool mModified;
392 bool mIsPart; 393 bool mIsPart;
@@ -402,84 +403,79 @@ class KABCore : public QWidget
402 KAction *mActionEditAddressee; 403 KAction *mActionEditAddressee;
403 KAction *mActionMailVCard; 404 KAction *mActionMailVCard;
404 KAction *mActionBeamVCard; 405 KAction *mActionBeamVCard;
405 406
406 KAction *mActionQuit; 407 KAction *mActionQuit;
407 408
408 //US edit menu 409 //US edit menu
409 KAction *mActionCopy; 410 KAction *mActionCopy;
410 KAction *mActionCut; 411 KAction *mActionCut;
411 KAction *mActionPaste; 412 KAction *mActionPaste;
412 KAction *mActionSelectAll; 413 KAction *mActionSelectAll;
413 KAction *mActionUndo; 414 KAction *mActionUndo;
414 KAction *mActionRedo; 415 KAction *mActionRedo;
415 KAction *mActionDelete; 416 KAction *mActionDelete;
416 417
417 //US settings menu 418 //US settings menu
418 KAction *mActionConfigResources; 419 KAction *mActionConfigResources;
419 KAction *mActionConfigKAddressbook; 420 KAction *mActionConfigKAddressbook;
420 KAction *mActionConfigShortcuts; 421 KAction *mActionConfigShortcuts;
421 KAction *mActionConfigureToolbars; 422 KAction *mActionConfigureToolbars;
422 KAction *mActionKeyBindings; 423 KAction *mActionKeyBindings;
423 KToggleAction *mActionJumpBar; 424 KToggleAction *mActionJumpBar;
424 KToggleAction *mActionDetails; 425 KToggleAction *mActionDetails;
425 KAction *mActionWhoAmI; 426 KAction *mActionWhoAmI;
426 KAction *mActionCategories; 427 KAction *mActionCategories;
427 KAction *mActionAboutKAddressbook; 428 KAction *mActionAboutKAddressbook;
428 KAction *mActionLicence; 429 KAction *mActionLicence;
429 KAction *mActionFaq; 430 KAction *mActionFaq;
430 431
431 KAction *mActionDeleteView; 432 KAction *mActionDeleteView;
432 433
433 QPopupMenu *viewMenu; 434 QPopupMenu *viewMenu;
434 QPopupMenu *filterMenu; 435 QPopupMenu *filterMenu;
435 QPopupMenu *settingsMenu; 436 QPopupMenu *settingsMenu;
436 QPopupMenu *changeMenu; 437 QPopupMenu *changeMenu;
437//US QAction *mActionSave; 438//US QAction *mActionSave;
438 QPopupMenu *ImportMenu; 439 QPopupMenu *ImportMenu;
439 QPopupMenu *ExportMenu; 440 QPopupMenu *ExportMenu;
440 //LR additional methods 441 //LR additional methods
441 KAction *mActionRemoveVoice; 442 KAction *mActionRemoveVoice;
442 KAction * mActionImportOL; 443 KAction * mActionImportOL;
443 444
444#ifndef KAB_EMBEDDED 445#ifndef KAB_EMBEDDED
445 KAddressBookService *mAddressBookService; 446 KAddressBookService *mAddressBookService;
446#endif //KAB_EMBEDDED 447#endif //KAB_EMBEDDED
447 448
448 class KABCorePrivate; 449 class KABCorePrivate;
449 KABCorePrivate *d; 450 KABCorePrivate *d;
450 bool mBlockSaveFlag; 451 //US bool mBlockSaveFlag;
451 452
452#ifdef KAB_EMBEDDED 453#ifdef KAB_EMBEDDED
453 KAddressBookMain *mMainWindow; // should be the same like mGUIClient 454 KAddressBookMain *mMainWindow; // should be the same like mGUIClient
454#endif //KAB_EMBEDDED 455#endif //KAB_EMBEDDED
456
457 //this are the overwritten callbackmethods from the syncinterface
458 virtual bool sync(KSyncManager* manager, QString filename, int mode);
459 virtual bool syncExternal(KSyncManager* manager, QString resource);
460
461 //called by the syncmanager to indicate that the work has to marked as dirty.
462 virtual void sync_setModified();
463 //called by the syncmanager to ask if the dirty flag is set.
464 virtual bool KABCore::sync_isModified();
465 //called by the syncmanager to indicate that the work has to be saved.
466 virtual void sync_save();
467
455 // LR ******************************* 468 // LR *******************************
456 // sync stuff! 469 // sync stuff!
457 QPopupMenu *syncMenu; 470 QPopupMenu *syncMenu;
458 void fillSyncMenu(); 471 KSyncManager* syncManager;
459 QString mCurrentSyncDevice;
460 QString mCurrentSyncName;
461 void quickSyncLocalFile();
462 bool syncWithFile( QString fn , bool quick );
463 void syncLocalFile();
464 void syncPhone();
465 void syncSharp();
466 bool syncExternal(QString);
467 void multiSync( bool askforPrefs );
468 int mCurrentSyncProfile ;
469 void syncRemote( KSyncProfile* prof, bool ask = true);
470 void edit_sync_options();
471 bool syncAB(QString filename, int mode);
472 int ringSync();
473 QString getPassword( );
474 int mGlobalSyncMode; 472 int mGlobalSyncMode;
475 bool synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode); 473 bool synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode);
476 KABC::Addressee getLastSyncAddressee(); 474 KABC::Addressee getLastSyncAddressee();
477 QDateTime mLastAddressbookSync; 475 QDateTime mLastAddressbookSync;
478 int takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full ); 476 int takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full );
479 public slots:
480 void confSync();
481 // ********************* 477 // *********************
482 478
483}; 479};
484 480
485#endif 481#endif
diff --git a/kaddressbook/kabprefs.h b/kaddressbook/kabprefs.h
index 9926aa0..e4f359c 100644
--- a/kaddressbook/kabprefs.h
+++ b/kaddressbook/kabprefs.h
@@ -37,72 +37,56 @@ class KABPrefs : public KPimPrefs
37 37
38 static KABPrefs *instance(); 38 static KABPrefs *instance();
39 39
40 // General 40 // General
41 bool mHonorSingleClick; 41 bool mHonorSingleClick;
42 bool mAutomaticNameParsing; 42 bool mAutomaticNameParsing;
43 int mCurrentIncSearchField; 43 int mCurrentIncSearchField;
44 44
45#ifdef KAB_EMBEDDED 45#ifdef KAB_EMBEDDED
46 // US introduce a nonconst way to return the config object. 46 // US introduce a nonconst way to return the config object.
47 KConfig* getConfig(); 47 KConfig* getConfig();
48 48
49 bool mToolBarHor; 49 bool mToolBarHor;
50 bool mToolBarUp; 50 bool mToolBarUp;
51 bool mAskForQuit; 51 bool mAskForQuit;
52 52
53 53
54 /** Set preferences to default values */ 54 /** Set preferences to default values */
55// void usrSetDefaults(); 55// void usrSetDefaults();
56 56
57 /** Read preferences from config file */ 57 /** Read preferences from config file */
58// void usrReadConfig(); 58// void usrReadConfig();
59 59
60 /** Write preferences to config file */ 60 /** Write preferences to config file */
61// void usrWriteConfig(); 61// void usrWriteConfig();
62#endif //KAB_EMBEDDED 62#endif //KAB_EMBEDDED
63 63
64 64
65 // GUI 65 // GUI
66 bool mJumpButtonBarVisible; 66 bool mJumpButtonBarVisible;
67 bool mDetailsPageVisible; 67 bool mDetailsPageVisible;
68 bool mMultipleViewsAtOnce; 68 bool mMultipleViewsAtOnce;
69 bool mSearchWithReturn; 69 bool mSearchWithReturn;
70 QValueList<int> mExtensionsSplitter; 70 QValueList<int> mExtensionsSplitter;
71 QValueList<int> mDetailsSplitter; 71 QValueList<int> mDetailsSplitter;
72 72
73 // Extensions stuff 73 // Extensions stuff
74 int mCurrentExtension; 74 int mCurrentExtension;
75 QStringList mActiveExtensions; 75 QStringList mActiveExtensions;
76 76
77 // Views stuff 77 // Views stuff
78 QString mCurrentView; 78 QString mCurrentView;
79 QStringList mViewNames; 79 QStringList mViewNames;
80 80
81 // Filter 81 // Filter
82 int mCurrentFilter; 82 int mCurrentFilter;
83 83
84 void setCategoryDefaults(); 84 void setCategoryDefaults();
85 // sync stuff 85
86 QString mLocalMachineName;
87 QStringList mExternSyncProfiles;
88 QStringList mSyncProfileNames;
89 bool mAskForPreferences;
90 bool mShowSyncSummary;
91 bool mShowSyncEvents;
92 bool mShowTodoInAgenda;
93 bool mWriteBackExistingOnly;
94 int mSyncAlgoPrefs;
95 int mRingSyncAlgoPrefs;
96 bool mWriteBackFile;
97 int mWriteBackInFuture;
98 QString mPhoneDevice;
99 QString mPhoneConnection;
100 QString mPhoneModel;
101 QString mLastSyncedLocalFile; // save!
102 private: 86 private:
103 KABPrefs(); 87 KABPrefs();
104 88
105 static KABPrefs *sInstance; 89 static KABPrefs *sInstance;
106}; 90};
107 91
108#endif 92#endif
diff --git a/libkdepim/kpimprefs.h b/libkdepim/kpimprefs.h
index 860665b..01c57a3 100644
--- a/libkdepim/kpimprefs.h
+++ b/libkdepim/kpimprefs.h
@@ -11,54 +11,75 @@
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24/* 24/*
25Enhanced Version of the file for platform independent KDE tools. 25Enhanced Version of the file for platform independent KDE tools.
26Copyright (c) 2004 Ulf Schenk 26Copyright (c) 2004 Ulf Schenk
27 27
28$Id$ 28$Id$
29*/ 29*/
30 30
31#ifndef KPIMPREFS_H 31#ifndef KPIMPREFS_H
32#define KPIMPREFS_H 32#define KPIMPREFS_H
33 33
34#include <qstringlist.h> 34#include <qstringlist.h>
35 35
36#include "kprefs.h" 36#include "kprefs.h"
37 37
38class KPimPrefs : public KPrefs 38class KPimPrefs : public KPrefs
39{ 39{
40 public: 40 public:
41 41
42 KPimPrefs( const QString &name = QString::null ); 42 KPimPrefs( const QString &name = QString::null );
43 43
44 virtual ~KPimPrefs(); 44 virtual ~KPimPrefs();
45 45
46 /** Set preferences to default values */ 46 /** Set preferences to default values */
47 void usrSetDefaults(); 47 void usrSetDefaults();
48 48
49 /** Read preferences from config file */ 49 /** Read preferences from config file */
50 void usrReadConfig(); 50 void usrReadConfig();
51 51
52 /** Write preferences to config file */ 52 /** Write preferences to config file */
53 void usrWriteConfig(); 53 void usrWriteConfig();
54 54
55 55
56 public: 56 public:
57 QStringList mCustomCategories; 57 QStringList mCustomCategories;
58 58
59 // sync stuff
60 QString mLocalMachineName;
61 QStringList mExternSyncProfiles;
62 QStringList mSyncProfileNames;
63 bool mAskForPreferences;
64 bool mShowSyncSummary;
65 bool mShowSyncEvents;
66 bool mShowTodoInAgenda;
67 bool mWriteBackExistingOnly;
68 int mSyncAlgoPrefs;
69 int mRingSyncAlgoPrefs;
70 bool mWriteBackFile;
71 int mWriteBackInFuture;
72 QString mPhoneDevice;
73 QString mPhoneConnection;
74 QString mPhoneModel;
75 QString mLastSyncedLocalFile; // save!
76
59 77
60 protected: 78 protected:
61 virtual void setCategoryDefaults(); 79 virtual void setCategoryDefaults();
80
81
82
62}; 83};
63 84
64#endif 85#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 @@
1/* 1/*
2 This file is part of KDE-Pim/Pi. 2 This file is part of KDE-Pim/Pi.
3 Copyright (c) 2004 Ulf Schenk 3 Copyright (c) 2004 Ulf Schenk
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21// $Id$ 21// $Id$
22 22
23#include "ksyncmanager.h" 23#include "ksyncmanager.h"
24 24
25#include <stdlib.h>
25 26
26KSyncManager::KSyncManager(TargetApp ta, QPopupMenu* syncmenu) 27#ifndef _WIN32_
27 : mSyncMenu(syncmenu), mTargetApp(ta) 28#include <unistd.h>
29#endif
30
31
32#include "ksyncprofile.h"
33#include "ksyncprefsdialog.h"
34#include "kpimprefs.h"
35
36#include <qdir.h>
37#include <qpopupmenu.h>
38#include <qpushbutton.h>
39#include <qradiobutton.h>
40#include <qbuttongroup.h>
41#include <qtimer.h>
42#include <qmessagebox.h>
43#include <qapplication.h>
44#include <qlineedit.h>
45#include <qdialog.h>
46#include <qlayout.h>
47
48#include <klocale.h>
49#include <kglobal.h>
50#include <kconfig.h>
51#include <kfiledialog.h>
52
53KSyncManager::KSyncManager(QWidget* parent, KSyncInterface* implementation, TargetApp ta, KPimPrefs* prefs, QPopupMenu* syncmenu)
54 : QObject(), mParent(parent), mImplementation(implementation), mTargetApp(ta), mPrefs(prefs), mSyncMenu(syncmenu)
28{ 55{
29 56
30} 57}
31 58
32KSyncManager::~KSyncManager() 59KSyncManager::~KSyncManager()
33{ 60{
34 61
35} 62}
36 63
37 64
38void KABCore::fillSyncMenu() 65void KSyncManager::fillSyncMenu()
39{ 66{
40 if ( mSyncMenu->count() ) 67 if ( mSyncMenu->count() )
41 msyncMenu->clear(); 68 mSyncMenu->clear();
42 69
43 mSyncMenu->insertItem( i18n("Configure..."), 0 ); 70 mSyncMenu->insertItem( i18n("Configure..."), 0 );
44 mSyncMenu->insertSeparator(); 71 mSyncMenu->insertSeparator();
45 mSyncMenu->insertItem( i18n("Multiple sync"), 1 ); 72 mSyncMenu->insertItem( i18n("Multiple sync"), 1 );
46 mSyncMenu->insertSeparator(); 73 mSyncMenu->insertSeparator();
47 74
48 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 75 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
49 config.setGroup("General"); 76 config.setGroup("General");
50 QStringList prof = config.readListEntry("SyncProfileNames"); 77 QStringList prof = config.readListEntry("SyncProfileNames");
51 //US KABPrefs::instance()->mLocalMachineName = config.readEntry("LocalMachineName","undefined"); 78 mPrefs->mLocalMachineName = config.readEntry("LocalMachineName","undefined");
52 if ( prof.count() < 3 ) { 79 if ( prof.count() < 3 ) {
53 prof.clear(); 80 prof.clear();
54 prof << i18n("Sharp_DTM"); 81 prof << i18n("Sharp_DTM");
55 prof << i18n("Local_file"); 82 prof << i18n("Local_file");
56 prof << i18n("Last_file"); 83 prof << i18n("Last_file");
57 KSyncProfile* temp = new KSyncProfile (); 84 KSyncProfile* temp = new KSyncProfile ();
58 temp->setName( prof[0] ); 85 temp->setName( prof[0] );
59 temp->writeConfig(&config); 86 temp->writeConfig(&config);
60 temp->setName( prof[1] ); 87 temp->setName( prof[1] );
61 temp->writeConfig(&config); 88 temp->writeConfig(&config);
62 temp->setName( prof[2] ); 89 temp->setName( prof[2] );
63 temp->writeConfig(&config); 90 temp->writeConfig(&config);
64 config.setGroup("General"); 91 config.setGroup("General");
65 config.writeEntry("SyncProfileNames",prof); 92 config.writeEntry("SyncProfileNames",prof);
66 config.writeEntry("ExternSyncProfiles","Sharp_DTM"); 93 config.writeEntry("ExternSyncProfiles","Sharp_DTM");
67 config.sync(); 94 config.sync();
68 delete temp; 95 delete temp;
69 } 96 }
70 /*US 97 mPrefs->mExternSyncProfiles = config.readListEntry("ExternSyncProfiles");
71 KABPrefs::instance()->mExternSyncProfiles = config.readListEntry("ExternSyncProfiles"); 98 mPrefs->mSyncProfileNames = prof;
72 KABPrefs::instance()->mSyncProfileNames = prof; 99 unsigned int i;
73 */
74 int i;
75 for ( i = 0; i < prof.count(); ++i ) { 100 for ( i = 0; i < prof.count(); ++i ) {
76 101
77 mSyncMenu->insertItem( prof[i], 1000+i ); 102 mSyncMenu->insertItem( prof[i], 1000+i );
78 if ( i == 2 ) 103 if ( i == 2 )
79 mSyncMenu->insertSeparator(); 104 mSyncMenu->insertSeparator();
80 } 105 }
81 QDir app_dir; 106 QDir app_dir;
82 if ( !app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) { 107 if ( !app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) {
83 mSyncMenu->setItemEnabled( false , 1000 ); 108 mSyncMenu->setItemEnabled( false , 1000 );
84 } 109 }
85 //probaly useless 110 //probaly useless
86 //mView->setupExternSyncProfiles(); 111 //mView->setupExternSyncProfiles();
87} 112}
88void KABCore::slotSyncMenu( int action ) 113
114void KSyncManager::slotSyncMenu( int action )
89{ 115{
90 //qDebug("syncaction %d ", action); 116 //qDebug("syncaction %d ", action);
91 if ( action == 0 ) { 117 if ( action == 0 ) {
92 118
93 // seems to be a Qt2 event handling bug 119 // seems to be a Qt2 event handling bug
94 // syncmenu.clear causes a segfault at first time 120 // syncmenu.clear causes a segfault at first time
95 // when we call it after the main event loop, it is ok 121 // when we call it after the main event loop, it is ok
96 // same behaviour when calling OM/Pi via QCOP for the first time 122 // same behaviour when calling OM/Pi via QCOP for the first time
97 QTimer::singleShot ( 1, this, SLOT ( confSync() ) ); 123 QTimer::singleShot ( 1, this, SLOT ( confSync() ) );
98 //confSync(); 124 //confSync();
99 125
100 return; 126 return;
101 } 127 }
102 if ( action == 1 ) { 128 if ( action == 1 ) {
103 multiSync( true ); 129 multiSync( true );
104 return; 130 return;
105 } 131 }
106 132
107 if (mBlockSaveFlag) 133 if (blockSave())
108 return; 134 return;
109 mBlockSaveFlag = true; 135
136 setBlockSave(true);
137
110 mCurrentSyncProfile = action - 1000 ; 138 mCurrentSyncProfile = action - 1000 ;
111 //US mCurrentSyncDevice = KABPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile] ; 139 mCurrentSyncDevice = mPrefs->mSyncProfileNames[mCurrentSyncProfile] ;
112 //US mCurrentSyncName = KABPrefs::instance()->mLocalMachineName ; 140 mCurrentSyncName = mPrefs->mLocalMachineName ;
113 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 141 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
114 KSyncProfile* temp = new KSyncProfile (); 142 KSyncProfile* temp = new KSyncProfile ();
115 //US temp->setName(KABPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]); 143 temp->setName(mPrefs->mSyncProfileNames[mCurrentSyncProfile]);
116 temp->readConfig(&config); 144 temp->readConfig(&config);
117 /*US 145 mPrefs->mAskForPreferences = temp->getAskForPreferences();
118 KABPrefs::instance()->mAskForPreferences = temp->getAskForPreferences(); 146 mPrefs->mSyncAlgoPrefs = temp->getSyncPrefs();
119 KABPrefs::instance()->mSyncAlgoPrefs = temp->getSyncPrefs(); 147 mPrefs->mWriteBackFile = temp->getWriteBackFile();
120 KABPrefs::instance()->mWriteBackFile = temp->getWriteBackFile(); 148 mPrefs->mWriteBackExistingOnly = temp->getWriteBackExisting();
121 KABPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting(); 149 mPrefs->mWriteBackInFuture = 0;
122 KABPrefs::instance()->mWriteBackInFuture = 0;
123 if ( temp->getWriteBackFuture() ) 150 if ( temp->getWriteBackFuture() )
124 KABPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( ); 151 mPrefs->mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
125 KABPrefs::instance()->mShowSyncSummary = temp->getShowSummaryAfterSync(); 152 mPrefs->mShowSyncSummary = temp->getShowSummaryAfterSync();
126 */
127 if ( action == 1000 ) { 153 if ( action == 1000 ) {
128 syncSharp(); 154 syncSharp();
129 155
130 } else if ( action == 1001 ) { 156 } else if ( action == 1001 ) {
131 syncLocalFile(); 157 syncLocalFile();
132 158
133 } else if ( action == 1002 ) { 159 } else if ( action == 1002 ) {
134 quickSyncLocalFile(); 160 quickSyncLocalFile();
135 161
136 } else if ( action >= 1003 ) { 162 } else if ( action >= 1003 ) {
137 if ( temp->getIsLocalFileSync() ) { 163 if ( temp->getIsLocalFileSync() ) {
138 /*US if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) ) 164 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) )
139 KABPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileNameAB(); 165 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
140 */ 166
141 } else { 167 } else {
142 if ( temp->getIsPhoneSync() ) { 168 if ( temp->getIsPhoneSync() ) {
143 /* 169 mPrefs->mPhoneDevice = temp->getPhoneDevice( ) ;
144 KABPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ; 170 mPrefs->mPhoneConnection = temp->getPhoneConnection( );
145 KABPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( ); 171 mPrefs->mPhoneModel = temp->getPhoneModel( );
146 KABPrefs::instance()->mPhoneModel = temp->getPhoneModel( );
147 */
148 syncPhone(); 172 syncPhone();
149 } else 173 } else
150 syncRemote( temp ); 174 syncRemote( temp );
151 175
152 } 176 }
153 } 177 }
154 delete temp; 178 delete temp;
155 mBlockSaveFlag = false; 179 setBlockSave(false);
156} 180}
157 181
158void KABCore::syncLocalFile() 182void KSyncManager::syncLocalFile()
159{ 183{
160 184
161 QString fn =KABPrefs::instance()->mLastSyncedLocalFile; 185 QString fn =mPrefs->mLastSyncedLocalFile;
162 186
163 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename(*.ics/*.vcs)"), this ); 187 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename(*.ics/*.vcs)"), mParent );
164 if ( fn == "" ) 188 if ( fn == "" )
165 return; 189 return;
166 if ( syncWithFile( fn, false ) ) { 190 if ( syncWithFile( fn, false ) ) {
167 qDebug("syncLocalFile() successful "); 191 qDebug("syncLocalFile() successful ");
168 } 192 }
169 193
170} 194}
171bool KABCore::syncWithFile( QString fn , bool quick ) 195bool KSyncManager::syncWithFile( QString fn , bool quick )
172{ 196{
173 bool ret = false; 197 bool ret = false;
174 QFileInfo info; 198 QFileInfo info;
175 info.setFile( fn ); 199 info.setFile( fn );
176 QString mess; 200 QString mess;
177 bool loadbup = true; 201 bool loadbup = true;
178 if ( !info. exists() ) { 202 if ( !info. exists() ) {
179 mess = i18n( "Sync file \n...%1\ndoes not exist!\nNothing synced!\n").arg(fn.right( 30) ); 203 mess = i18n( "Sync file \n...%1\ndoes not exist!\nNothing synced!\n").arg(fn.right( 30) );
180 int result = QMessageBox::warning( this, i18n("Warning!"), 204 int result = QMessageBox::warning( mParent, i18n("Warning!"),
181 mess ); 205 mess );
182 return ret; 206 return ret;
183 } 207 }
184 int result = 0; 208 int result = 0;
185 if ( !quick ) { 209 if ( !quick ) {
186 mess = i18n("Sync with file \n...%1\nfrom:\n%2\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )); 210 mess = i18n("Sync with file \n...%1\nfrom:\n%2\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false ));
187 result = QMessageBox::warning( this, i18n("Warning!"), 211 result = QMessageBox::warning( mParent, i18n("Warning!"),
188 mess, 212 mess,
189 i18n("Sync"), i18n("Cancel"), 0, 213 i18n("Sync"), i18n("Cancel"), 0,
190 0, 1 ); 214 0, 1 );
191 if ( result ) 215 if ( result )
192 return false; 216 return false;
193 } 217 }
194 if ( KABPrefs::instance()->mAskForPreferences ) 218 if ( mPrefs->mAskForPreferences )
195 edit_sync_options(); 219 edit_sync_options();
196 if ( result == 0 ) { 220 if ( result == 0 ) {
197 //qDebug("Now sycing ... "); 221 //qDebug("Now sycing ... ");
198 if ( ret = syncAB( fn, KABPrefs::instance()->mSyncAlgoPrefs ) ) 222 if ( ret = mImplementation->sync( this, fn, mPrefs->mSyncAlgoPrefs ) )
199 setCaption( i18n("Synchronization successful") ); 223 mParent->setCaption( i18n("Synchronization successful") );
200 else 224 else
201 setCaption( i18n("Sync cancelled or failed. Nothing synced.") ); 225 mParent->setCaption( i18n("Sync cancelled or failed. Nothing synced.") );
202 if ( ! quick ) 226 if ( ! quick )
203 KABPrefs::instance()->mLastSyncedLocalFile = fn; 227 mPrefs->mLastSyncedLocalFile = fn;
204 setModified(); 228 mImplementation->sync_setModified();
205 } 229 }
206 return ret; 230 return ret;
207} 231}
208void KABCore::quickSyncLocalFile() 232void KSyncManager::quickSyncLocalFile()
209{ 233{
210 234
211 if ( syncWithFile( KABPrefs::instance()->mLastSyncedLocalFile, false ) ) { 235 if ( syncWithFile( mPrefs->mLastSyncedLocalFile, false ) ) {
212 qDebug("quick syncLocalFile() successful "); 236 qDebug("quick syncLocalFile() successful ");
213 237
214 } 238 }
215} 239}
216void KABCore::multiSync( bool askforPrefs ) 240void KSyncManager::multiSync( bool askforPrefs )
217{ 241{
218 if (mBlockSaveFlag) 242 if (blockSave())
219 return; 243 return;
220 mBlockSaveFlag = true; 244 setBlockSave(true);
221 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!"); 245 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!");
222 if ( QMessageBox::information( this, i18n("KO/Pi Sync"), 246 if ( QMessageBox::information( mParent, i18n("Sync"),
223 question, 247 question,
224 i18n("Yes"), i18n("No"), 248 i18n("Yes"), i18n("No"),
225 0, 0 ) != 0 ) { 249 0, 0 ) != 0 ) {
226 mBlockSaveFlag = false; 250 setBlockSave(false);
227 setCaption(i18n("Aborted! Nothing synced!")); 251 mParent->setCaption(i18n("Aborted! Nothing synced!"));
228 return; 252 return;
229 } 253 }
230 mCurrentSyncDevice = i18n("Multiple profiles") ; 254 mCurrentSyncDevice = i18n("Multiple profiles") ;
231 KABPrefs::instance()->mSyncAlgoPrefs = KABPrefs::instance()->mRingSyncAlgoPrefs; 255 mPrefs->mSyncAlgoPrefs = mPrefs->mRingSyncAlgoPrefs;
232 if ( askforPrefs ) { 256 if ( askforPrefs ) {
233 edit_sync_options(); 257 edit_sync_options();
234 KABPrefs::instance()->mRingSyncAlgoPrefs = KABPrefs::instance()->mSyncAlgoPrefs; 258 mPrefs->mRingSyncAlgoPrefs = mPrefs->mSyncAlgoPrefs;
235 } 259 }
236 setCaption(i18n("Multiple sync started.") ); 260 mParent->setCaption(i18n("Multiple sync started.") );
237 qApp->processEvents(); 261 qApp->processEvents();
238 int num = ringSync() ; 262 int num = ringSync() ;
239 if ( num > 1 ) 263 if ( num > 1 )
240 ringSync(); 264 ringSync();
241 mBlockSaveFlag = false; 265 setBlockSave(false);
242 if ( num ) 266 if ( num )
243 save(); 267 mImplementation->sync_save();
244 if ( num ) 268 if ( num )
245 setCaption(i18n("%1 profiles synced. Multiple sync completed!").arg(num) ); 269 mParent->setCaption(i18n("%1 profiles synced. Multiple sync completed!").arg(num) );
246 else 270 else
247 setCaption(i18n("Nothing synced! No profiles defined for multisync!")); 271 mParent->setCaption(i18n("Nothing synced! No profiles defined for multisync!"));
248 return; 272 return;
249} 273}
250int KABCore::ringSync() 274int KSyncManager::ringSync()
251{ 275{
252 int syncedProfiles = 0; 276 int syncedProfiles = 0;
253 int i; 277 unsigned int i;
254 QTime timer; 278 QTime timer;
255 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 279 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
256 QStringList syncProfileNames = KABPrefs::instance()->mSyncProfileNames; 280 QStringList syncProfileNames = mPrefs->mSyncProfileNames;
257 KSyncProfile* temp = new KSyncProfile (); 281 KSyncProfile* temp = new KSyncProfile ();
258 KABPrefs::instance()->mAskForPreferences = false; 282 mPrefs->mAskForPreferences = false;
259 for ( i = 0; i < syncProfileNames.count(); ++i ) { 283 for ( i = 0; i < syncProfileNames.count(); ++i ) {
260 mCurrentSyncProfile = i; 284 mCurrentSyncProfile = i;
261 temp->setName(syncProfileNames[mCurrentSyncProfile]); 285 temp->setName(syncProfileNames[mCurrentSyncProfile]);
262 temp->readConfig(&config); 286 temp->readConfig(&config);
263 if ( temp->getIncludeInRingSyncAB() && ( i < 1 || i > 2 )) { 287 if ( temp->getIncludeInRingSyncAB() && ( i < 1 || i > 2 )) {
264 setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... ")); 288 mParent->setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... "));
265 ++syncedProfiles; 289 ++syncedProfiles;
266 // KABPrefs::instance()->mAskForPreferences = temp->getAskForPreferences(); 290 // mPrefs->mAskForPreferences = temp->getAskForPreferences();
267 KABPrefs::instance()->mWriteBackFile = temp->getWriteBackFile(); 291 mPrefs->mWriteBackFile = temp->getWriteBackFile();
268 KABPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting(); 292 mPrefs->mWriteBackExistingOnly = temp->getWriteBackExisting();
269 KABPrefs::instance()->mWriteBackInFuture = 0; 293 mPrefs->mWriteBackInFuture = 0;
270 if ( temp->getWriteBackFuture() ) 294 if ( temp->getWriteBackFuture() )
271 KABPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( ); 295 mPrefs->mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
272 KABPrefs::instance()->mShowSyncSummary = false; 296 mPrefs->mShowSyncSummary = false;
273 mCurrentSyncDevice = syncProfileNames[i] ; 297 mCurrentSyncDevice = syncProfileNames[i] ;
274 mCurrentSyncName = KABPrefs::instance()->mLocalMachineName; 298 mCurrentSyncName = mPrefs->mLocalMachineName;
275 if ( i == 0 ) { 299 if ( i == 0 ) {
276 syncSharp(); 300 syncSharp();
277 } else { 301 } else {
278 if ( temp->getIsLocalFileSync() ) { 302 if ( temp->getIsLocalFileSync() ) {
279 if ( syncWithFile( temp->getRemoteFileNameAB( ), true ) ) 303 if ( syncWithFile( temp->getRemoteFileNameAB( ), true ) )
280 KABPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileNameAB(); 304 mPrefs->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
281 } else { 305 } else {
282 if ( temp->getIsPhoneSync() ) { 306 if ( temp->getIsPhoneSync() ) {
283 KABPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ; 307 mPrefs->mPhoneDevice = temp->getPhoneDevice( ) ;
284 KABPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( ); 308 mPrefs->mPhoneConnection = temp->getPhoneConnection( );
285 KABPrefs::instance()->mPhoneModel = temp->getPhoneModel( ); 309 mPrefs->mPhoneModel = temp->getPhoneModel( );
286 syncPhone(); 310 syncPhone();
287 } else 311 } else
288 syncRemote( temp, false ); 312 syncRemote( temp, false );
289 313
290 } 314 }
291 } 315 }
292 timer.start(); 316 timer.start();
293 setCaption(i18n("Multiple sync in progress ... please wait!") ); 317 mParent->setCaption(i18n("Multiple sync in progress ... please wait!") );
294 while ( timer.elapsed () < 2000 ) { 318 while ( timer.elapsed () < 2000 ) {
295 qApp->processEvents(); 319 qApp->processEvents();
296#ifndef _WIN32_ 320#ifndef _WIN32_
297 sleep (1); 321 sleep (1);
298#endif 322#endif
299 } 323 }
300 324
301 } 325 }
302 326
303 } 327 }
304 delete temp; 328 delete temp;
305 return syncedProfiles; 329 return syncedProfiles;
306} 330}
307 331
308void KABCore::syncRemote( KSyncProfile* prof, bool ask) 332void KSyncManager::syncRemote( KSyncProfile* prof, bool ask)
309{ 333{
310 QString question; 334 QString question;
311 if ( ask ) { 335 if ( ask ) {
312 question = i18n("Do you really want\nto remote sync\nwith profile \n")+ prof->getName()+" ?\n"; 336 question = i18n("Do you really want\nto remote sync\nwith profile \n")+ prof->getName()+" ?\n";
313 if ( QMessageBox::information( this, i18n("KO/Pi Sync"), 337 if ( QMessageBox::information( mParent, i18n("Sync"),
314 question, 338 question,
315 i18n("Yes"), i18n("No"), 339 i18n("Yes"), i18n("No"),
316 0, 0 ) != 0 ) 340 0, 0 ) != 0 )
317 return; 341 return;
318 } 342 }
319 QString command = prof->getPreSyncCommandAB(); 343 QString command = prof->getPreSyncCommandAB();
320 int fi; 344 int fi;
321 if ( (fi = command.find("$PWD$")) > 0 ) { 345 if ( (fi = command.find("$PWD$")) > 0 ) {
322 QString pwd = getPassword(); 346 QString pwd = getPassword();
323 command = command.left( fi )+ pwd + command.mid( fi+5 ); 347 command = command.left( fi )+ pwd + command.mid( fi+5 );
324 348
325 } 349 }
326 int maxlen = 30; 350 int maxlen = 30;
327 if ( QApplication::desktop()->width() > 320 ) 351 if ( QApplication::desktop()->width() > 320 )
328 maxlen += 25; 352 maxlen += 25;
329 setCaption ( i18n( "Copy remote file to local machine..." ) ); 353 mParent->setCaption ( i18n( "Copy remote file to local machine..." ) );
330 int fileSize = 0; 354 int fileSize = 0;
331 int result = system ( command ); 355 int result = system ( command );
332 // 0 : okay 356 // 0 : okay
333 // 256: no such file or dir 357 // 256: no such file or dir
334 // 358 //
335 qDebug("KO: Remote copy result(0 = okay): %d ",result ); 359 qDebug("KO: Remote copy result(0 = okay): %d ",result );
336 if ( result != 0 ) { 360 if ( result != 0 ) {
337 int len = maxlen; 361 unsigned int len = maxlen;
338 while ( len < command.length() ) { 362 while ( len < command.length() ) {
339 command.insert( len , "\n" ); 363 command.insert( len , "\n" );
340 len += maxlen +2; 364 len += maxlen +2;
341 } 365 }
342 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) ; 366 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) ;
343 QMessageBox::information( this, i18n("KO/Pi Sync - ERROR"), 367 QMessageBox::information( mParent, i18n("Sync - ERROR"),
344 question, 368 question,
345 i18n("Okay!")) ; 369 i18n("Okay!")) ;
346 setCaption ("KO/Pi"); 370 mParent->setCaption ("");
347 return; 371 return;
348 } 372 }
349 setCaption ( i18n( "Copying succeed." ) ); 373 mParent->setCaption ( i18n( "Copying succeed." ) );
350 //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() ); 374 //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() );
351 if ( syncWithFile( prof->getLocalTempFileAB(), true ) ) { 375 if ( syncWithFile( prof->getLocalTempFileAB(), true ) ) {
352// Event* e = mView->getLastSyncEvent(); 376// Event* e = mView->getLastSyncEvent();
353// e->setReadOnly( false ); 377// e->setReadOnly( false );
354// e->setLocation( KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]); 378// e->setLocation( KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]);
355// e->setReadOnly( true ); 379// e->setReadOnly( true );
356 if ( KABPrefs::instance()->mWriteBackFile ) { 380 if ( mPrefs->mWriteBackFile ) {
357 command = prof->getPostSyncCommandAB(); 381 command = prof->getPostSyncCommandAB();
358 int fi; 382 int fi;
359 if ( (fi = command.find("$PWD$")) > 0 ) { 383 if ( (fi = command.find("$PWD$")) > 0 ) {
360 QString pwd = getPassword(); 384 QString pwd = getPassword();
361 command = command.left( fi )+ pwd + command.mid( fi+5 ); 385 command = command.left( fi )+ pwd + command.mid( fi+5 );
362 386
363 } 387 }
364 setCaption ( i18n( "Writing back file ..." ) ); 388 mParent->setCaption ( i18n( "Writing back file ..." ) );
365 result = system ( command ); 389 result = system ( command );
366 qDebug("KO: Writing back file result: %d ", result); 390 qDebug("Writing back file result: %d ", result);
367 if ( result != 0 ) { 391 if ( result != 0 ) {
368 setCaption ( i18n( "Writing back file result: " )+QString::number( result ) ); 392 mParent->setCaption ( i18n( "Writing back file result: " )+QString::number( result ) );
369 return; 393 return;
370 } else { 394 } else {
371 setCaption ( i18n( "Syncronization sucessfully completed" ) ); 395 mParent->setCaption ( i18n( "Syncronization sucessfully completed" ) );
372 } 396 }
373 } 397 }
374 } 398 }
375 return; 399 return;
376} 400}
377#include <qpushbutton.h> 401
378#include <qradiobutton.h> 402void KSyncManager::edit_sync_options()
379#include <qbuttongroup.h>
380void KABCore::edit_sync_options()
381{ 403{
382 //mDialogManager->showSyncOptions(); 404 //mDialogManager->showSyncOptions();
383 //KABPrefs::instance()->mSyncAlgoPrefs 405 //mPrefs->mSyncAlgoPrefs
384 QDialog dia( this, "dia", true ); 406 QDialog dia( mParent, "dia", true );
385 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice ); 407 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice );
386 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia); 408 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia);
387 QVBoxLayout lay ( &dia ); 409 QVBoxLayout lay ( &dia );
388 lay.setSpacing( 2 ); 410 lay.setSpacing( 2 );
389 lay.setMargin( 3 ); 411 lay.setMargin( 3 );
390 lay.addWidget(&gr); 412 lay.addWidget(&gr);
391 QRadioButton loc ( i18n("Take local entry on conflict"), &gr ); 413 QRadioButton loc ( i18n("Take local entry on conflict"), &gr );
392 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr ); 414 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr );
393 QRadioButton newest( i18n("Take newest entry on conflict"), &gr ); 415 QRadioButton newest( i18n("Take newest entry on conflict"), &gr );
394 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr ); 416 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr );
395 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr ); 417 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr );
396 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr ); 418 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr );
397 //QRadioButton both( i18n("Take both on conflict"), &gr ); 419 //QRadioButton both( i18n("Take both on conflict"), &gr );
398 QPushButton pb ( "OK", &dia); 420 QPushButton pb ( "OK", &dia);
399 lay.addWidget( &pb ); 421 lay.addWidget( &pb );
400 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 422 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
401 switch ( KABPrefs::instance()->mSyncAlgoPrefs ) { 423 switch ( mPrefs->mSyncAlgoPrefs ) {
402 case 0: 424 case 0:
403 loc.setChecked( true); 425 loc.setChecked( true);
404 break; 426 break;
405 case 1: 427 case 1:
406 rem.setChecked( true ); 428 rem.setChecked( true );
407 break; 429 break;
408 case 2: 430 case 2:
409 newest.setChecked( true); 431 newest.setChecked( true);
410 break; 432 break;
411 case 3: 433 case 3:
412 ask.setChecked( true); 434 ask.setChecked( true);
413 break; 435 break;
414 case 4: 436 case 4:
415 f_loc.setChecked( true); 437 f_loc.setChecked( true);
416 break; 438 break;
417 case 5: 439 case 5:
418 f_rem.setChecked( true); 440 f_rem.setChecked( true);
419 break; 441 break;
420 case 6: 442 case 6:
421 // both.setChecked( true); 443 // both.setChecked( true);
422 break; 444 break;
423 default: 445 default:
424 break; 446 break;
425 } 447 }
426 if ( dia.exec() ) { 448 if ( dia.exec() ) {
427 KABPrefs::instance()->mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ; 449 mPrefs->mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ;
428 } 450 }
429 451
430 452
431} 453}
432QString KABCore::getPassword( ) 454QString KSyncManager::getPassword( )
433{ 455{
434 QString retfile = ""; 456 QString retfile = "";
435 QDialog dia ( this, "input-dialog", true ); 457 QDialog dia ( mParent, "input-dialog", true );
436 QLineEdit lab ( &dia ); 458 QLineEdit lab ( &dia );
437 lab.setEchoMode( QLineEdit::Password ); 459 lab.setEchoMode( QLineEdit::Password );
438 QVBoxLayout lay( &dia ); 460 QVBoxLayout lay( &dia );
439 lay.setMargin(7); 461 lay.setMargin(7);
440 lay.setSpacing(7); 462 lay.setSpacing(7);
441 lay.addWidget( &lab); 463 lay.addWidget( &lab);
442 dia.setFixedSize( 230,50 ); 464 dia.setFixedSize( 230,50 );
443 dia.setCaption( i18n("Enter password") ); 465 dia.setCaption( i18n("Enter password") );
444 QPushButton pb ( "OK", &dia); 466 QPushButton pb ( "OK", &dia);
445 lay.addWidget( &pb ); 467 lay.addWidget( &pb );
446 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 468 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
447 dia.show(); 469 dia.show();
448 int res = dia.exec(); 470 int res = dia.exec();
449 if ( res ) 471 if ( res )
450 retfile = lab.text(); 472 retfile = lab.text();
451 dia.hide(); 473 dia.hide();
452 qApp->processEvents(); 474 qApp->processEvents();
453 return retfile; 475 return retfile;
454 476
455} 477}
478
479
480void KSyncManager::confSync()
481{
482 static KSyncPrefsDialog* sp = 0;
483 if ( ! sp ) {
484 sp = new KSyncPrefsDialog( mParent, "syncprefs", true );
485 }
486 sp->usrReadConfig();
487#ifndef DESKTOP_VERSION
488 sp->showMaximized();
489#else
490 sp->show();
491#endif
492 sp->exec();
493 mPrefs->mSyncProfileNames = sp->getSyncProfileNames();
494 mPrefs->mLocalMachineName = sp->getLocalMachineName ();
495 fillSyncMenu();
496}
497
498void KSyncManager::syncSharp()
499{
500 if ( ! syncExternalApplication("sharp") )
501 qDebug("ERROR sync sharp ");;
502}
503
504bool KSyncManager::syncExternalApplication(QString resource)
505{
506 if ( mImplementation->sync_isModified() )
507 mImplementation->sync_save();
508
509 if ( mPrefs->mAskForPreferences )
510 edit_sync_options();
511
512 qDebug("sync %s", resource.latin1());
513
514 bool syncOK = mImplementation->syncExternal(this, resource);
515
516 return syncOK;
517
518}
519
520void KSyncManager::syncPhone()
521{
522 if ( mImplementation->sync_isModified() )
523 mImplementation->sync_save();
524
525 qDebug("pending syncPhone(); ");
526 //mView->syncPhone();
527 mImplementation->sync_setModified();
528
529}
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 @@
1/* 1/*
2 This file is part of KDE-Pim/Pi. 2 This file is part of KDE-Pim/Pi.
3 Copyright (c) 2004 Ulf Schenk 3 Copyright (c) 2004 Ulf Schenk
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19 19
20$Id$ 20$Id$
21*/ 21*/
22#ifndef _KSYNCMANAGER_H 22#ifndef _KSYNCMANAGER_H
23#define _KSYNCMANAGER_H 23#define _KSYNCMANAGER_H
24 24
25#include <qobject.h>
25#include <qstring.h> 26#include <qstring.h>
26 27
27class QPopupMenu; 28class QPopupMenu;
28class KSyncProfile; 29class KSyncProfile;
30class KPimPrefs;
31class QWidget;
32class KSyncManager;
33class KSyncInterface;
29 34
30 35class KSyncManager : public QObject
31
32class KSyncManager
33{ 36{
34 37 Q_OBJECT
35 public:
36 KSyncManager(TargetApp ta, QPopupMenu* syncmenu);
37 ~KSyncManager() ;
38 38
39 public:
39 enum TargetApp { 40 enum TargetApp {
40 KOPI = 0, 41 KOPI = 0,
41 KAPI = 1, 42 KAPI = 1,
42 PWMPI = 2 }; 43 PWMPI = 2 };
43 44
44 private: 45
46 KSyncManager(QWidget* parent, KSyncInterface* implementation, TargetApp ta, KPimPrefs* prefs, QPopupMenu* syncmenu);
47 ~KSyncManager() ;
48
49 bool blockSave() { return mBlockSaveFlag; }
50 void setBlockSave(bool sa) { mBlockSaveFlag = sa; }
51
45 void fillSyncMenu(); 52 void fillSyncMenu();
46 void syncLocalFile(); 53
47 bool syncWithFile( QString fn , bool quick ); 54 QString getCurrentSyncDevice() { return mCurrentSyncDevice; }
55 QString getCurrentSyncName() { return mCurrentSyncName; }
56
57 public slots:
58 void slotSyncMenu( int );
59
60 private:
61 // LR *******************************
62 // sync stuff!
63 QString mCurrentSyncDevice;
64 QString mCurrentSyncName;
48 void quickSyncLocalFile(); 65 void quickSyncLocalFile();
66 bool syncWithFile( QString fn , bool quick );
67 void syncLocalFile();
68 void syncPhone();
69 void syncSharp();
70 bool syncExternalApplication(QString);
49 void multiSync( bool askforPrefs ); 71 void multiSync( bool askforPrefs );
50 int ringSync(); 72 int mCurrentSyncProfile ;
51 void syncRemote( KSyncProfile* prof, bool ask); 73 void syncRemote( KSyncProfile* prof, bool ask = true);
52 void edit_sync_options(); 74 void edit_sync_options();
53 QString getPassword(); 75 int ringSync();
76 QString getPassword( );
77
78 private slots:
79 void confSync();
80 // *********************
54 81
55 private: 82 private:
56 QPopupMenu* mSyncMenu; 83 bool mBlockSaveFlag;
84
85
86 QWidget* mParent;
87 KSyncInterface* mImplementation;
57 TargetApp mTargetApp; 88 TargetApp mTargetApp;
89 KPimPrefs* mPrefs;
90 QPopupMenu* mSyncMenu;
91
58 92
59 93
60 94
61 95
62 96
63 97
98};
99
100
101class KSyncInterface
102{
103 public:
104 virtual bool sync(KSyncManager* manager, QString filename, int mode) = 0;
105 virtual bool syncExternal(KSyncManager* manager, QString resource) = 0;
64 106
65 107
108 //called by the syncmanager to indicate that the work has to be marked as dirty.
109 virtual void sync_setModified() = 0;
110
111 //called by the syncmanager to ask if the dirty flag is set.
112 virtual bool sync_isModified() = 0;
113
114 //called by the syncmanager to indicate that the work has to be saved.
115 virtual void sync_save() = 0;
66}; 116};
67 117
118
68#endif 119#endif
diff --git a/libkdepim/libkdepimE.pro b/libkdepim/libkdepimE.pro
index 2a30ee8..156e247 100644
--- a/libkdepim/libkdepimE.pro
+++ b/libkdepim/libkdepimE.pro
@@ -1,53 +1,55 @@
1 TEMPLATE= lib 1 TEMPLATE= lib
2 CONFIG += qt warn_on 2 CONFIG += qt warn_on
3TARGET = microkdepim 3TARGET = microkdepim
4INCLUDEPATH += . $(KDEPIMDIR) $(KDEPIMDIR)/microkde $(KDEPIMDIR)/qtcompat $(KDEPIMDIR)/microkde/kdecore $(KDEPIMDIR)/microkde/kdeui $(QPEDIR)/include 4INCLUDEPATH += . $(KDEPIMDIR) $(KDEPIMDIR)/microkde $(KDEPIMDIR)/qtcompat $(KDEPIMDIR)/microkde/kdecore $(KDEPIMDIR)/microkde/kdeui $(QPEDIR)/include
5LIBS += -lmicrokde 5LIBS += -lmicrokde
6#LIBS += -lmicrokcal 6#LIBS += -lmicrokcal
7LIBS += -L$(QPEDIR)/lib 7LIBS += -L$(QPEDIR)/lib
8OBJECTS_DIR = obj/$(PLATFORM) 8OBJECTS_DIR = obj/$(PLATFORM)
9MOC_DIR = moc/$(PLATFORM) 9MOC_DIR = moc/$(PLATFORM)
10DESTDIR=$(QPEDIR)/lib 10DESTDIR=$(QPEDIR)/lib
11 11
12 12
13INTERFACES = \ 13INTERFACES = \
14 14
15HEADERS = \ 15HEADERS = \
16 categoryeditdialog.h \ 16 categoryeditdialog.h \
17 categoryeditdialog_base.h \ 17 categoryeditdialog_base.h \
18 categoryselectdialog.h \ 18 categoryselectdialog.h \
19 categoryselectdialog_base.h \ 19 categoryselectdialog_base.h \
20 externalapphandler.h \ 20 externalapphandler.h \
21 kdateedit.h \ 21 kdateedit.h \
22 kdatepicker.h \ 22 kdatepicker.h \
23 kinputdialog.h \ 23 kinputdialog.h \
24 kpimprefs.h \ 24 kpimprefs.h \
25 kpimglobalprefs.h \ 25 kpimglobalprefs.h \
26 kprefsdialog.h \ 26 kprefsdialog.h \
27 kprefswidget.h \ 27 kprefswidget.h \
28 ksyncmanager.h \
28 ksyncprofile.h \ 29 ksyncprofile.h \
29 ksyncprefsdialog.h \ 30 ksyncprefsdialog.h \
30 kcmconfigs/kcmkdepimconfig.h \ 31 kcmconfigs/kcmkdepimconfig.h \
31 kcmconfigs/kdepimconfigwidget.h 32 kcmconfigs/kdepimconfigwidget.h
32 33
33 34
34 35
35SOURCES = \ 36SOURCES = \
36 categoryeditdialog.cpp \ 37 categoryeditdialog.cpp \
37 categoryeditdialog_base.cpp \ 38 categoryeditdialog_base.cpp \
38 categoryselectdialog.cpp \ 39 categoryselectdialog.cpp \
39 categoryselectdialog_base.cpp \ 40 categoryselectdialog_base.cpp \
40 externalapphandler.cpp \ 41 externalapphandler.cpp \
41 kdateedit.cpp \ 42 kdateedit.cpp \
42 kinputdialog.cpp \ 43 kinputdialog.cpp \
43 kdatepicker.cpp \ 44 kdatepicker.cpp \
44 kpimprefs.cpp \ 45 kpimprefs.cpp \
45 kpimglobalprefs.cpp \ 46 kpimglobalprefs.cpp \
46 kprefsdialog.cpp \ 47 kprefsdialog.cpp \
47 kprefswidget.cpp \ 48 kprefswidget.cpp \
49 ksyncmanager.cpp \
48 ksyncprofile.cpp \ 50 ksyncprofile.cpp \
49 ksyncprefsdialog.cpp \ 51 ksyncprefsdialog.cpp \
50 kcmconfigs/kcmkdepimconfig.cpp \ 52 kcmconfigs/kcmkdepimconfig.cpp \
51 kcmconfigs/kdepimconfigwidget.cpp 53 kcmconfigs/kdepimconfigwidget.cpp
52 54
53 55