summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/korganizer/howtoSYNC.txt19
-rw-r--r--libkdepim/ksyncmanager.cpp58
-rw-r--r--libkdepim/ksyncmanager.h1
3 files changed, 64 insertions, 14 deletions
diff --git a/bin/kdepim/korganizer/howtoSYNC.txt b/bin/kdepim/korganizer/howtoSYNC.txt
index d3046de..c4e80f5 100644
--- a/bin/kdepim/korganizer/howtoSYNC.txt
+++ b/bin/kdepim/korganizer/howtoSYNC.txt
@@ -54,129 +54,134 @@ Everything is explained in more details below.
54 54
55NOTE: 55NOTE:
56If you do not use profile kind "Pi-Sync", 56If you do not use profile kind "Pi-Sync",
57it is recommended to close 57it is recommended to close
58a running KO/Pi ( or KA/Pi) on the remote device. 58a running KO/Pi ( or KA/Pi) on the remote device.
59(Note: KO/Pi( or KA/Pi) running on Zaurus with 59(Note: KO/Pi( or KA/Pi) running on Zaurus with
60FastLoad enabled will never be closed!) 60FastLoad enabled will never be closed!)
61After syncing with a running KO/Pi on the remote device, 61After syncing with a running KO/Pi on the remote device,
62a "save" on the remote device will tell you that it needs to merge (sync). 62a "save" on the remote device will tell you that it needs to merge (sync).
63After merging (just a syncing with the changed file) 63After merging (just a syncing with the changed file)
64you will get the new data showing in remote KO/Pi. 64you will get the new data showing in remote KO/Pi.
65 65
66************************************************************************* 66*************************************************************************
671) Qick overview of settings 671) Qick overview of settings
68************************************************************************* 68*************************************************************************
69 69
70a) Open sync settings dialog (Menu Synchronize - Configure...) 70a) Open sync settings dialog (Menu Synchronize - Configure...)
71b) Give your device a unique name. 71b) Give your device a unique name.
72 (unique in the set of all devices you want to sync with). 72 (unique in the set of all devices you want to sync with).
73 If you have already configured another devive and created 73 If you have already configured another devive and created
74 there a sync profile to sync with this device, give your device 74 there a sync profile to sync with this device, give your device
75 the same name as this sync profile! The same name is important, 75 the same name as this sync profile! The same name is important,
76 because it makes it possible to sync first A->B 76 because it makes it possible to sync first A->B
77 (A local device, that performs the sync, B remote device) 77 (A local device, that performs the sync, B remote device)
78 and then B->A. Such that the B->A sync knows about the 78 and then B->A. Such that the B->A sync knows about the
79 already performed A->B sync. 79 already performed A->B sync.
80 That means: It is unimportant if you sync A->B or B->A, 80 That means: It is unimportant if you sync A->B or B->A,
81 the devices A and B will be synced properly. 81 the devices A and B will be synced properly.
82c) Create a new sync profile and give it a unique name. 82c) Create a new sync profile and give it a unique name.
83 (unique in the set of all sync profiles on this device). 83 (unique in the set of all sync profiles on this device).
84 If you want to sync with a device, where KO/Pi is already installed 84 If you want to sync with a device, where KO/Pi is already installed
85 and which has a given unique device name, use this device name as 85 and which has a given unique device name, use this device name as
86 your profile name ( refer to b) ). 86 your profile name ( refer to b) ).
87d) Coose the profile kind of your syncing method: 87d) Coose the profile kind of your syncing method:
88 (i) Local file or 88 (i) Local file or
89 (ii) Pi-Sync or 89 (ii) Pi-Sync or
90 (iii) Remote file or 90 (iii) Remote file or
91 (iiii) Mobile Phone. 91 (iiii) Mobile Phone.
92 Detailed explanation in 5) 92 Detailed explanation in 5)
93e) Choose the other profile options. 93e) Choose the other profile options.
94 Detailed explanation in 2) 94 Detailed explanation in 2)
95f) Close sync dialog with OK. 95f) Close sync dialog with OK.
96g) Sync. 96g) Sync.
97 97
98NOTE: 98NOTE:
99AFTER SYNCING THERE ARE "SYNC EVENTS" CREATED 99AFTER SYNCING THERE ARE "SYNC EVENTS" CREATED
100(OR UPDATED, IF IT ALREADY EXITS) FOR EACH SYNC PROFILE. 100(OR UPDATED, IF IT ALREADY EXITS) FOR EACH SYNC PROFILE.
101YOU MAY NOT DELETE OR CHANGE THESE EVENTS. 101YOU MAY NOT DELETE OR CHANGE THESE EVENTS.
102 102
103************************************************************************* 103*************************************************************************
1042) Sync settings in sync dialog 1042) Sync settings in sync dialog
105************************************************************************* 105*************************************************************************
106 106
107a) Local device name: 107a) Local device name:
108 -> 1) b) 108 -> 1) b)
109b) Profile: 109b) Profile:
110 -> 1) c) 110 -> 1) c)
111c) Include in multiple sync: 111c) Include in multiple sync:
112 In the Synchronize menu, there is a multiple sync menu entry. 112 In the Synchronize menu, there is a multiple sync menu entry.
113 If you choose this menu entry, all user defined profiles with this 113 If you choose this menu entry, all user defined profiles with this
114 'Include in multiple sync' option enabled will be synced 114 'Include in multiple sync' option enabled will be synced
115 one after another. And this twice. This will take some time. 115 one after another. And this twice. This will take some time.
116 After that sync, on all devices should be the same data. 116 After that sync, on all devices should be the same data.
117d) Ask for preferences before sync: 117d) Ask for preferences before sync:
118 Check this to be asked for sync settings before each sync. 118 Check this to be asked for sync preferences settings before each sync.
119 If the profile kind is "Pi-Sync" you will be asked to confirm
120 the "Pi-Sync" specific settings (Password,IP address, port number)
121 as well. That makes it possible to use that profile for a
122 device that is connected via DHCP to the network and gets different
123 IP addresses when connection to the network.
119e) Sync preferences: 124e) Sync preferences:
120 Choose here your sync preferences. 125 Choose here your sync preferences.
121 Details -> 4) 126 Details -> 4)
122f) Show summary after sync: 127f) Show summary after sync:
123 Check this to get a small summary dialog after sync 128 Check this to get a small summary dialog after sync
124 about number of added/changed/deleted events on local/remote. 129 about number of added/changed/deleted events on local/remote.
125g) Write back synced data: 130g) Write back synced data:
126 Uncheck this to update the local calendar only. 131 Uncheck this to update the local calendar only.
127 I.e. your local calendar is synced with the remote calendar 132 I.e. your local calendar is synced with the remote calendar
128 but nothing on the remote calendar is changed. 133 but nothing on the remote calendar is changed.
129 If you uncheck "Write back synced data", the settings 134 If you uncheck "Write back synced data", the settings
130 under h) and i) are ignored, of course. 135 under h) and i) are ignored, of course.
131h) --Write back (on remote) existing entries only: 136h) --Write back (on remote) existing entries only:
132 Check this to update the remote data only. 137 Check this to update the remote data only.
133 I.e. no data from yor local calendar/addressbook is added to the 138 I.e. no data from yor local calendar/addressbook is added to the
134 remote device. You may use this option to 139 remote device. You may use this option to
135 sync against some kind of "public calendar/addressbook" without 140 sync against some kind of "public calendar/addressbook" without
136 writing back your personal data. 141 writing back your personal data.
137i) --Write back (calendar) entries in future only: 142i) --Write back (calendar) entries in future only:
138 Check this to write back only calendar entries in future. 143 Check this to write back only calendar entries in future.
139 (Useful when syncing with mobile phones.) 144 (Useful when syncing with mobile phones.)
140 You can specify the date range in weeks with 145 You can specify the date range in weeks with
141 ---- Max. weeks in future. 146 ---- Max. weeks in future.
142 Note: The date range starts always 7 days before the actual date! 147 Note: The date range starts always 7 days before the actual date!
143 I.e. the calendar events of the last week are written back always. 148 I.e. the calendar events of the last week are written back always.
144j) Profile kind: 149j) Profile kind:
145 Details -> 5) 150 Details -> 5)
146 151
147************************************************************************* 152*************************************************************************
1483) Syncing background 1533) Syncing background
149************************************************************************* 154*************************************************************************
150 155
151The same mentioned for calendars is valid for addressbooks as well. 156The same mentioned for calendars is valid for addressbooks as well.
152 157
153Synchronizing calendars ( i.e. files ) means, 158Synchronizing calendars ( i.e. files ) means,
154to merge two calendars in a useful way. 159to merge two calendars in a useful way.
155If the two calendars are completely different, 160If the two calendars are completely different,
156there is no problem, the resulting calendar contains 161there is no problem, the resulting calendar contains
157all data from the local and from the remote calendar. 162all data from the local and from the remote calendar.
158 163
159Problems will occur, if you have edited items 164Problems will occur, if you have edited items
160from the local calendar on the remote machine. 165from the local calendar on the remote machine.
161Then it could be, that items are in conflict. 166Then it could be, that items are in conflict.
162Two items are "in conflict", if they have the 167Two items are "in conflict", if they have the
163same unique ID (which get an item at time of 168same unique ID (which get an item at time of
164creation and owns it until it is deleted ) 169creation and owns it until it is deleted )
165and they both are modified after the last 170and they both are modified after the last
166synchronization. 171synchronization.
167 172
168At first sync of two calendars there is no item deleted. 173At first sync of two calendars there is no item deleted.
169If the calendars are synced before and there is an item, 174If the calendars are synced before and there is an item,
170which is not edited after the last sync and is only 175which is not edited after the last sync and is only
171available in one calendar, then this item is deleted 176available in one calendar, then this item is deleted
172in this calendar. 177in this calendar.
173 178
174But when was the last synchronization between two calendars? 179But when was the last synchronization between two calendars?
175 180
176To know that, KO/Pi creates at first syncing 181To know that, KO/Pi creates at first syncing
177of two files an unique event "<profile name> - sync Event" 182of two files an unique event "<profile name> - sync Event"
178on the remote and the local calendar. 183on the remote and the local calendar.
179After syncing, the start time of this event is set 184After syncing, the start time of this event is set
180to the time of syncing. 185to the time of syncing.
181The event is read only and the user may not change it. 186The event is read only and the user may not change it.
182 187
@@ -205,129 +210,139 @@ SYNC PREFERENCES:
205 If it is the first sync, 210 If it is the first sync,
206 "Ask for every entry" 211 "Ask for every entry"
207 is chosen automatically, 212 is chosen automatically,
208 if this is selected. 213 if this is selected.
209 214
210 -Take remote entry on conflict: 215 -Take remote entry on conflict:
211 Takes the remote entry on conflict. 216 Takes the remote entry on conflict.
212 If it is the first sync, 217 If it is the first sync,
213 "Ask for every entry" 218 "Ask for every entry"
214 is chosen automatically, 219 is chosen automatically,
215 if this is selected. 220 if this is selected.
216 221
217 -Take newest entry on conflict: 222 -Take newest entry on conflict:
218 This takes the newest entry on conflict. 223 This takes the newest entry on conflict.
219 May be the most useful syncing mode. 224 May be the most useful syncing mode.
220 225
221 -Ask for every entry on conflict: 226 -Ask for every entry on conflict:
222 Pops up an event viewer dialog and 227 Pops up an event viewer dialog and
223 shows the two conflicting entries there. 228 shows the two conflicting entries there.
224 The user can chose, which entry he would like to take. 229 The user can chose, which entry he would like to take.
225 The button for the newest entry 230 The button for the newest entry
226 is automatically set as default button. 231 is automatically set as default button.
227 The color for the newest entry is green. 232 The color for the newest entry is green.
228 233
229 -Force: Take local entry always: 234 -Force: Take local entry always:
230 Even if the calendars are already synced 235 Even if the calendars are already synced
231 there is no item deleted on local. 236 there is no item deleted on local.
232 237
233 -Force: Take remote entry always: 238 -Force: Take remote entry always:
234 Analogous to 239 Analogous to
235 "Force: Take local entry always" 240 "Force: Take local entry always"
236 241
237************************************************************************* 242*************************************************************************
2385) Details about sync profile kinds 2435) Details about sync profile kinds
239************************************************************************* 244*************************************************************************
240 245
241a) Local file 246a) Local file
242 Please specify a local file you want to sync with. 247 Please specify a local file you want to sync with.
243 248
244b) Pi-Sync (direct Kx/Pi to Kx/Pi sync) 249b) Pi-Sync (direct Kx/Pi to Kx/Pi sync)
245 We mention here only KO/Pi, but the same is valid for KA/Pi. 250 We mention here only KO/Pi, but the same is valid for KA/Pi.
246 If you want to sync with a device, where KO/Pi is 251 If you want to sync with a device, where KO/Pi is
247 installed, you can easily get the remote file via network 252 installed, you can easily get the remote file via network
248 with the build in file transfer feature "Pi-Sync": 253 with the build in file transfer feature "Pi-Sync":
249 You have first to enable file transfer on the remote device: 254 You have first to enable file transfer on the remote device:
250 - Start KO/Pi on the remote device. 255 - Start KO/Pi on the remote device.
251 - Choose Menu Synchronize-Enable Pi-Sync. 256 - Choose Menu Synchronize-Enable Pi-Sync.
252 - Choose a port number, where KO/Pi should listen for 257 - Choose a port number, where KO/Pi should listen for
253 file sending requests. Valid port numbers are numbers 258 file sending requests. Valid port numbers are numbers
254 between 1 and 65565. Do not specify port numbers, that are 259 between 1 and 65565. Do not specify port numbers, that are
255 used by other applications. A port number between 9000 and 9999 260 used by other applications. A port number between 9000 and 9999
256 is most likely not used by another application. 261 is most likely not used by another application.
257 The default port number is 9197 for KO/Pi. 262 The default port number is 9197 for KO/Pi.
258 If you specify a port number, which is already in use, 263 If you specify a port number, which is already in use,
259 you will get an error message when closing this dialog. 264 you will get an error message when closing this dialog.
260 - Choose a password. 265 - Choose a password.
261 - Click OK. 266 - Click OK.
262 Now KO/Pi will send the calendar data via the network, 267 Now KO/Pi will send the calendar data via the network,
263 if some other device is sending a "please send calendar" 268 if some other device is sending a "please send calendar"
264 request on the given port using the given password. 269 request on the given port using the given password.
265 If you want to be sure, nobody can access your calendar 270 If you want to be sure, nobody can access your calendar
266 data, simply disable the file transfer feature on the 271 data, simply disable the file transfer feature on the
267 remote device after the syncing is done by choosing: 272 remote device after the syncing is done by choosing:
268 Menu Synchronize-Disable Pi-Sync. 273 Menu Synchronize-Disable Pi-Sync.
269 274
275 Note: If you want to sync with a remote device that gets different
276 IPaddresses each time connected to the network
277 (this may be the case, if you use DHCP for connection
278 of the remote device to the network) simply enable
279 "Ask for preferences before sync".
280 Then you will be asked to confirm the
281 "Pi-Sync" specific settings
282 (Password,IP address, port number)
283 and you can easily change the IP address before each sync.
284
270 On your local device, create a new profile and choose 285 On your local device, create a new profile and choose
271 profile kind "Pi-Sync". 286 profile kind "Pi-Sync".
272 Fill in the needed values: 287 Fill in the needed values:
273 - Password for remote access: 288 - Password for remote access:
274 The password you specified on the remote device. 289 The password you specified on the remote device.
275 - Remote IP address: 290 - Remote IP address:
276 The IP address of the remote device. 291 The IP address of the remote device.
277 - Remote port number: 292 - Remote port number:
278 The port number you specified on the remote device. 293 The port number you specified on the remote device.
279 294
280 Now you can syncronize your local device easily with your 295 Now you can syncronize your local device easily with your
281 remote device. This works well for all platforms KO/Pi is 296 remote device. This works well for all platforms KO/Pi is
282 running on, e.g. syncing a KO/Pi on Zaurus with KO/Pi on Windows 297 running on, e.g. syncing a KO/Pi on Zaurus with KO/Pi on Windows
283 is now very easy. 298 is now very easy.
284 299
285c) Remote file 300c) Remote file
286 Syncing with the profile kind "Remote file" is performed in three steps: 301 Syncing with the profile kind "Remote file" is performed in three steps:
287 i) download the remote file to your local machine to a temp file 302 i) download the remote file to your local machine to a temp file
288 ii) sync with this temp file 303 ii) sync with this temp file
289 iii) upload the synced file to the remote device 304 iii) upload the synced file to the remote device
290 305
291 The down-/uploading if i) and iii) is done via a command line command. 306 The down-/uploading if i) and iii) is done via a command line command.
292 Please specify the download/upload command ( like scp, ftp, ...) and the 307 Please specify the download/upload command ( like scp, ftp, ...) and the
293 file name of the temp file in the corresponding fields. 308 file name of the temp file in the corresponding fields.
294 309
295d) Mobile device (cell phone) 310d) Mobile device (cell phone)
296 Note: On the Zaurus you have to install the kammu_xxx_arm.ipk package 311 Note: On the Zaurus you have to install the kammu_xxx_arm.ipk package
297 to be able to access mobile phones. 312 to be able to access mobile phones.
298 We mention here only KO/Pi, but the same is valid for KA/Pi. 313 We mention here only KO/Pi, but the same is valid for KA/Pi.
299 Note: 314 Note:
300 It is only possible to sync a mobile phone with one particular device 315 It is only possible to sync a mobile phone with one particular device
301 running KO/Pi. If you want to be able to write data of more than one device 316 running KO/Pi. If you want to be able to write data of more than one device
302 to the mobile phone (e.g. from your Zaurus and from your Windows Laptop) 317 to the mobile phone (e.g. from your Zaurus and from your Windows Laptop)
303 do not sync with the mobile phone at all, but use the 318 do not sync with the mobile phone at all, but use the
304 "Export to phone" functionality from the different devices. 319 "Export to phone" functionality from the different devices.
305 Using "Export to phone" makes it not possible to get back data from the 320 Using "Export to phone" makes it not possible to get back data from the
306 phone, if it was changed there, of course. 321 phone, if it was changed there, of course.
307 If you sync with the phone, do not use "Export to phone" from any device. 322 If you sync with the phone, do not use "Export to phone" from any device.
308 (And do not sync, as mentioned above, from any other device with that phone). 323 (And do not sync, as mentioned above, from any other device with that phone).
309 It would delete the needed information for syncing with that phone! 324 It would delete the needed information for syncing with that phone!
310 325
311 We are using Gammu (Version: 0.98.9) ( http://freshmeat.net/projects/gammu/ ) 326 We are using Gammu (Version: 0.98.9) ( http://freshmeat.net/projects/gammu/ )
312 for accessing the phones. 327 for accessing the phones.
313 Note: You cannot use the original Gammu for syncing KDE-Pim/Pi, because 328 Note: You cannot use the original Gammu for syncing KDE-Pim/Pi, because
314 we have modified the original version to make it useable for syncing! 329 we have modified the original version to make it useable for syncing!
315 Gammu allows access to many phones in many ways (Irda, Bluetooth, serial,...). 330 Gammu allows access to many phones in many ways (Irda, Bluetooth, serial,...).
316 The recommended phone access using Gammu with KDE-Pim/Pi is Irda (infrared). 331 The recommended phone access using Gammu with KDE-Pim/Pi is Irda (infrared).
317 Bluetooth access is disabled on the Zaurus, but may work on Windows. 332 Bluetooth access is disabled on the Zaurus, but may work on Windows.
318 Please look at the Gammu homepage and documentation about more details 333 Please look at the Gammu homepage and documentation about more details
319 configuring Gammu how to access your phone. 334 configuring Gammu how to access your phone.
320 If you have problems accessing your phone, start KO/Pi from the konsole 335 If you have problems accessing your phone, start KO/Pi from the konsole
321 and you will get a more detailed output what went wrong. 336 and you will get a more detailed output what went wrong.
322 About Gammu from the Gammu homepage: 337 About Gammu from the Gammu homepage:
323 Gammu (formerly known as MyGnokii2) is a cellular 338 Gammu (formerly known as MyGnokii2) is a cellular
324 manager for various mobile phones/modems. 339 manager for various mobile phones/modems.
325 It supports the Nokia 2100, 3100, 32xx, 33xx, 340 It supports the Nokia 2100, 3100, 32xx, 33xx,
326 3410, 35xx, 51xx, 5210, 5510, 61xx, 62xx, 341 3410, 35xx, 51xx, 5210, 5510, 61xx, 62xx,
327 63xx, 6510, 6610, 6800, 71xx, 7210, 7250, 342 63xx, 6510, 6610, 6800, 71xx, 7210, 7250,
328 7250i, 82xx, 83xx, 8910, 9110, 9210 343 7250i, 82xx, 83xx, 8910, 9110, 9210
329 and compatible and AT devices (Siemens, Alcatel, 344 and compatible and AT devices (Siemens, Alcatel,
330 Falcom, WaveCom, IPAQ, Samsung, SE, and others) 345 Falcom, WaveCom, IPAQ, Samsung, SE, and others)
331 over cables/infrared/BlueTooth. 346 over cables/infrared/BlueTooth.
332 347
333 Here is an example what to specify to access a Nokia 6310i via infrared: 348 Here is an example what to specify to access a Nokia 6310i via infrared:
diff --git a/libkdepim/ksyncmanager.cpp b/libkdepim/ksyncmanager.cpp
index b3e266a..0faa24d 100644
--- a/libkdepim/ksyncmanager.cpp
+++ b/libkdepim/ksyncmanager.cpp
@@ -548,133 +548,163 @@ void KSyncManager::syncRemote( KSyncProfile* prof, bool ask)
548 preCommand = prof->getPreSyncCommandPWM(); 548 preCommand = prof->getPreSyncCommandPWM();
549 postCommand = prof->getPostSyncCommandPWM(); 549 postCommand = prof->getPostSyncCommandPWM();
550 localTempFile = prof->getLocalTempFilePWM(); 550 localTempFile = prof->getLocalTempFilePWM();
551 break; 551 break;
552 default: 552 default:
553 qDebug("KSyncManager::syncRemote: invalid apptype selected"); 553 qDebug("KSyncManager::syncRemote: invalid apptype selected");
554 break; 554 break;
555 } 555 }
556 556
557 557
558 int fi; 558 int fi;
559 if ( (fi = preCommand.find("$PWD$")) > 0 ) { 559 if ( (fi = preCommand.find("$PWD$")) > 0 ) {
560 QString pwd = getPassword(); 560 QString pwd = getPassword();
561 preCommand = preCommand.left( fi )+ pwd + preCommand.mid( fi+5 ); 561 preCommand = preCommand.left( fi )+ pwd + preCommand.mid( fi+5 );
562 562
563 } 563 }
564 int maxlen = 30; 564 int maxlen = 30;
565 if ( QApplication::desktop()->width() > 320 ) 565 if ( QApplication::desktop()->width() > 320 )
566 maxlen += 25; 566 maxlen += 25;
567 mParent->topLevelWidget()->setCaption ( i18n( "Copy remote file to local machine..." ) ); 567 mParent->topLevelWidget()->setCaption ( i18n( "Copy remote file to local machine..." ) );
568 int fileSize = 0; 568 int fileSize = 0;
569 int result = system ( preCommand ); 569 int result = system ( preCommand );
570 // 0 : okay 570 // 0 : okay
571 // 256: no such file or dir 571 // 256: no such file or dir
572 // 572 //
573 qDebug("KO: Remote copy result(0 = okay): %d ",result ); 573 qDebug("KO: Remote copy result(0 = okay): %d ",result );
574 if ( result != 0 ) { 574 if ( result != 0 ) {
575 unsigned int len = maxlen; 575 unsigned int len = maxlen;
576 while ( len < preCommand.length() ) { 576 while ( len < preCommand.length() ) {
577 preCommand.insert( len , "\n" ); 577 preCommand.insert( len , "\n" );
578 len += maxlen +2; 578 len += maxlen +2;
579 } 579 }
580 question = i18n("Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n").arg (preCommand) ; 580 question = i18n("Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n").arg (preCommand) ;
581 QMessageBox::information( mParent, i18n("Sync - ERROR"), 581 QMessageBox::information( mParent, i18n("Sync - ERROR"),
582 question, 582 question,
583 i18n("Okay!")) ; 583 i18n("Okay!")) ;
584 mParent->topLevelWidget()->setCaption ("KDE-Pim"); 584 mParent->topLevelWidget()->setCaption ("KDE-Pim");
585 return; 585 return;
586 } 586 }
587 mParent->topLevelWidget()->setCaption ( i18n( "Copying succeed." ) ); 587 mParent->topLevelWidget()->setCaption ( i18n( "Copying succeed." ) );
588 //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() ); 588 //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() );
589 589
590 if ( syncWithFile( localTempFile, true ) ) { 590 if ( syncWithFile( localTempFile, true ) ) {
591 591
592 if ( mWriteBackFile ) { 592 if ( mWriteBackFile ) {
593 int fi; 593 int fi;
594 if ( (fi = postCommand.find("$PWD$")) > 0 ) { 594 if ( (fi = postCommand.find("$PWD$")) > 0 ) {
595 QString pwd = getPassword(); 595 QString pwd = getPassword();
596 postCommand = postCommand.left( fi )+ pwd + postCommand.mid( fi+5 ); 596 postCommand = postCommand.left( fi )+ pwd + postCommand.mid( fi+5 );
597 597
598 } 598 }
599 mParent->topLevelWidget()->setCaption ( i18n( "Writing back file ..." ) ); 599 mParent->topLevelWidget()->setCaption ( i18n( "Writing back file ..." ) );
600 result = system ( postCommand ); 600 result = system ( postCommand );
601 qDebug("Writing back file result: %d ", result); 601 qDebug("Writing back file result: %d ", result);
602 if ( result != 0 ) { 602 if ( result != 0 ) {
603 mParent->topLevelWidget()->setCaption ( i18n( "Writing back file result: " )+QString::number( result ) ); 603 mParent->topLevelWidget()->setCaption ( i18n( "Writing back file result: " )+QString::number( result ) );
604 return; 604 return;
605 } else { 605 } else {
606 mParent->topLevelWidget()->setCaption ( i18n( "Syncronization sucessfully completed" ) ); 606 mParent->topLevelWidget()->setCaption ( i18n( "Syncronization sucessfully completed" ) );
607 } 607 }
608 } 608 }
609 } 609 }
610 return; 610 return;
611} 611}
612 612void KSyncManager::edit_pisync_options()
613{
614 QDialog dia( mParent, "dia", true );
615 dia.setCaption( i18n("Pi-Sync options for device: " ) +mCurrentSyncDevice );
616 QVBoxLayout lay ( &dia );
617 lay.setSpacing( 5 );
618 lay.setMargin( 3 );
619 QLabel lab1 ( i18n("Password for remote access:"), &dia);
620 lay.addWidget( &lab1 );
621 QLineEdit le1 (&dia );
622 lay.addWidget( &le1 );
623 QLabel lab2 ( i18n("Remote IP address:"), &dia);
624 lay.addWidget( &lab2 );
625 QLineEdit le2 (&dia );
626 lay.addWidget( &le2 );
627 QLabel lab3 ( i18n("Remote port number:"), &dia);
628 lay.addWidget( &lab3 );
629 QLineEdit le3 (&dia );
630 lay.addWidget( &le3 );
631 QPushButton pb ( "OK", &dia);
632 lay.addWidget( &pb );
633 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
634 le1.setText( mPassWordPiSync );
635 le2.setText( mActiveSyncIP );
636 le3.setText( mActiveSyncPort );
637 if ( dia.exec() ) {
638 mPassWordPiSync = le1.text();
639 mActiveSyncPort = le3.text();
640 mActiveSyncIP = le2.text();
641 }
642
643}
613void KSyncManager::edit_sync_options() 644void KSyncManager::edit_sync_options()
614{ 645{
615 //mDialogManager->showSyncOptions(); 646
616 //mSyncAlgoPrefs
617 QDialog dia( mParent, "dia", true ); 647 QDialog dia( mParent, "dia", true );
618 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice ); 648 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice );
619 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia); 649 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia);
620 QVBoxLayout lay ( &dia ); 650 QVBoxLayout lay ( &dia );
621 lay.setSpacing( 2 ); 651 lay.setSpacing( 2 );
622 lay.setMargin( 3 ); 652 lay.setMargin( 3 );
623 lay.addWidget(&gr); 653 lay.addWidget(&gr);
624 QRadioButton loc ( i18n("Take local entry on conflict"), &gr ); 654 QRadioButton loc ( i18n("Take local entry on conflict"), &gr );
625 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr ); 655 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr );
626 QRadioButton newest( i18n("Take newest entry on conflict"), &gr ); 656 QRadioButton newest( i18n("Take newest entry on conflict"), &gr );
627 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr ); 657 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr );
628 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr ); 658 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr );
629 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr ); 659 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr );
630 //QRadioButton both( i18n("Take both on conflict"), &gr ); 660 //QRadioButton both( i18n("Take both on conflict"), &gr );
631 QPushButton pb ( "OK", &dia); 661 QPushButton pb ( "OK", &dia);
632 lay.addWidget( &pb ); 662 lay.addWidget( &pb );
633 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 663 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
634 switch ( mSyncAlgoPrefs ) { 664 switch ( mSyncAlgoPrefs ) {
635 case 0: 665 case 0:
636 loc.setChecked( true); 666 loc.setChecked( true);
637 break; 667 break;
638 case 1: 668 case 1:
639 rem.setChecked( true ); 669 rem.setChecked( true );
640 break; 670 break;
641 case 2: 671 case 2:
642 newest.setChecked( true); 672 newest.setChecked( true);
643 break; 673 break;
644 case 3: 674 case 3:
645 ask.setChecked( true); 675 ask.setChecked( true);
646 break; 676 break;
647 case 4: 677 case 4:
648 f_loc.setChecked( true); 678 f_loc.setChecked( true);
649 break; 679 break;
650 case 5: 680 case 5:
651 f_rem.setChecked( true); 681 f_rem.setChecked( true);
652 break; 682 break;
653 case 6: 683 case 6:
654 // both.setChecked( true); 684 // both.setChecked( true);
655 break; 685 break;
656 default: 686 default:
657 break; 687 break;
658 } 688 }
659 if ( dia.exec() ) { 689 if ( dia.exec() ) {
660 mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ; 690 mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ;
661 } 691 }
662 692
663 693
664} 694}
665 695
666QString KSyncManager::getPassword( ) 696QString KSyncManager::getPassword( )
667{ 697{
668 QString retfile = ""; 698 QString retfile = "";
669 QDialog dia ( mParent, "input-dialog", true ); 699 QDialog dia ( mParent, "input-dialog", true );
670 QLineEdit lab ( &dia ); 700 QLineEdit lab ( &dia );
671 lab.setEchoMode( QLineEdit::Password ); 701 lab.setEchoMode( QLineEdit::Password );
672 QVBoxLayout lay( &dia ); 702 QVBoxLayout lay( &dia );
673 lay.setMargin(7); 703 lay.setMargin(7);
674 lay.setSpacing(7); 704 lay.setSpacing(7);
675 lay.addWidget( &lab); 705 lay.addWidget( &lab);
676 dia.setFixedSize( 230,50 ); 706 dia.setFixedSize( 230,50 );
677 dia.setCaption( i18n("Enter password") ); 707 dia.setCaption( i18n("Enter password") );
678 QPushButton pb ( "OK", &dia); 708 QPushButton pb ( "OK", &dia);
679 lay.addWidget( &pb ); 709 lay.addWidget( &pb );
680 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 710 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
@@ -724,252 +754,253 @@ bool KSyncManager::syncExternalApplication(QString resource)
724 754
725 qDebug("sync %s", resource.latin1()); 755 qDebug("sync %s", resource.latin1());
726 756
727 bool syncOK = mImplementation->syncExternal(this, resource); 757 bool syncOK = mImplementation->syncExternal(this, resource);
728 758
729 return syncOK; 759 return syncOK;
730 760
731} 761}
732 762
733void KSyncManager::syncPhone() 763void KSyncManager::syncPhone()
734{ 764{
735 765
736 syncExternalApplication("phone"); 766 syncExternalApplication("phone");
737 767
738} 768}
739 769
740void KSyncManager::showProgressBar(int percentage, QString caption, int total) 770void KSyncManager::showProgressBar(int percentage, QString caption, int total)
741{ 771{
742 if (!bar->isVisible()) 772 if (!bar->isVisible())
743 { 773 {
744 bar->setCaption (caption); 774 bar->setCaption (caption);
745 bar->setTotalSteps ( total ) ; 775 bar->setTotalSteps ( total ) ;
746 776
747 bar->show(); 777 bar->show();
748 } 778 }
749 779
750 bar->setProgress( percentage ); 780 bar->setProgress( percentage );
751} 781}
752 782
753void KSyncManager::hideProgressBar() 783void KSyncManager::hideProgressBar()
754{ 784{
755 bar->hide(); 785 bar->hide();
756} 786}
757 787
758bool KSyncManager::isProgressBarCanceled() 788bool KSyncManager::isProgressBarCanceled()
759{ 789{
760 return !bar->isVisible(); 790 return !bar->isVisible();
761} 791}
762 792
763QString KSyncManager::syncFileName() 793QString KSyncManager::syncFileName()
764{ 794{
765 795
766 QString fn = "tempfile"; 796 QString fn = "tempfile";
767 switch(mTargetApp) 797 switch(mTargetApp)
768 { 798 {
769 case (KAPI): 799 case (KAPI):
770 fn = "tempsyncab.vcf"; 800 fn = "tempsyncab.vcf";
771 break; 801 break;
772 case (KOPI): 802 case (KOPI):
773 fn = "tempsynccal.ics"; 803 fn = "tempsynccal.ics";
774 break; 804 break;
775 case (PWMPI): 805 case (PWMPI):
776 fn = "tempsyncpw.pwm"; 806 fn = "tempsyncpw.pwm";
777 break; 807 break;
778 default: 808 default:
779 break; 809 break;
780 } 810 }
781#ifdef _WIN32_ 811#ifdef _WIN32_
782 return locateLocal( "tmp", fn ); 812 return locateLocal( "tmp", fn );
783#else 813#else
784 return (QString( "/tmp/" )+ fn ); 814 return (QString( "/tmp/" )+ fn );
785#endif 815#endif
786} 816}
787 817
788
789void KSyncManager::syncPi() 818void KSyncManager::syncPi()
790{ 819{
791 qApp->processEvents(); 820 qApp->processEvents();
821 if ( mAskForPreferences )
822 edit_pisync_options();
792 bool ok; 823 bool ok;
793 Q_UINT16 port = mActiveSyncPort.toUInt(&ok); 824 Q_UINT16 port = mActiveSyncPort.toUInt(&ok);
794 if ( ! ok ) { 825 if ( ! ok ) {
795 mParent->topLevelWidget()->setCaption( i18n("Sorry, no valid port.Syncing cancelled.") ); 826 mParent->topLevelWidget()->setCaption( i18n("Sorry, no valid port.Syncing cancelled.") );
796 return; 827 return;
797 } 828 }
798 KCommandSocket* commandSocket = new KCommandSocket( mPassWordPiSync, port, mActiveSyncIP, this ); 829 KCommandSocket* commandSocket = new KCommandSocket( mPassWordPiSync, port, mActiveSyncIP, this );
799 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) ); 830 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int )), this, SLOT(deleteCommandSocket(KCommandSocket*, int)) );
800 mParent->topLevelWidget()->setCaption( i18n("Sending request for remote file ...") ); 831 mParent->topLevelWidget()->setCaption( i18n("Sending request for remote file ...") );
801 commandSocket->readFile( syncFileName() ); 832 commandSocket->readFile( syncFileName() );
802} 833}
803 834
804void KSyncManager::deleteCommandSocket(KCommandSocket*s, int state) 835void KSyncManager::deleteCommandSocket(KCommandSocket*s, int state)
805{ 836{
806 qDebug("MainWindow::deleteCommandSocket %d", state); 837 qDebug("MainWindow::deleteCommandSocket %d", state);
807 838
808 //enum { success, errorW, errorR, quiet }; 839 //enum { success, errorW, errorR, quiet };
809 if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO ) { 840 if ( state == KCommandSocket::errorR ||state == KCommandSocket::errorTO ) {
810 mParent->topLevelWidget()->setCaption( i18n("ERROR: Receiving remote file failed.") ); 841 mParent->topLevelWidget()->setCaption( i18n("ERROR: Receiving remote file failed.") );
811 delete s; 842 delete s;
812 if ( state == KCommandSocket::errorR ) { 843 if ( state == KCommandSocket::errorR ) {
813 KCommandSocket* commandSocket = new KCommandSocket( mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this ); 844 KCommandSocket* commandSocket = new KCommandSocket( mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this );
814 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) ); 845 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) );
815 commandSocket->sendStop(); 846 commandSocket->sendStop();
816 } 847 }
817 return; 848 return;
818 849
819 } else if ( state == KCommandSocket::errorW ) { 850 } else if ( state == KCommandSocket::errorW ) {
820 mParent->topLevelWidget()->setCaption( i18n("ERROR:Writing back file failed.") ); 851 mParent->topLevelWidget()->setCaption( i18n("ERROR:Writing back file failed.") );
821 852
822 } else if ( state == KCommandSocket::successR ) { 853 } else if ( state == KCommandSocket::successR ) {
823 QTimer::singleShot( 1, this , SLOT ( readFileFromSocket())); 854 QTimer::singleShot( 1, this , SLOT ( readFileFromSocket()));
824 855
825 } else if ( state == KCommandSocket::successW ) { 856 } else if ( state == KCommandSocket::successW ) {
826 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync succesful!") ); 857 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync succesful!") );
827 } 858 }
828 859
829 delete s; 860 delete s;
830} 861}
831 862
832void KSyncManager::readFileFromSocket() 863void KSyncManager::readFileFromSocket()
833{ 864{
834 QString fileName = syncFileName(); 865 QString fileName = syncFileName();
835 mParent->topLevelWidget()->setCaption( i18n("Remote file saved to temp file.") ); 866 mParent->topLevelWidget()->setCaption( i18n("Remote file saved to temp file.") );
836 if ( ! syncWithFile( fileName , true ) ) { 867 if ( ! syncWithFile( fileName , true ) ) {
837 mParent->topLevelWidget()->setCaption( i18n("Syncing failed.") ); 868 mParent->topLevelWidget()->setCaption( i18n("Syncing failed.") );
838 qDebug("Syncing failed "); 869 qDebug("Syncing failed ");
839 return; 870 return;
840 } 871 }
841 KCommandSocket* commandSocket = new KCommandSocket( mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this ); 872 KCommandSocket* commandSocket = new KCommandSocket( mPassWordPiSync, mActiveSyncPort.toUInt(), mActiveSyncIP, this );
842 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) ); 873 connect( commandSocket, SIGNAL(commandFinished( KCommandSocket*, int)), this, SLOT(deleteCommandSocket(KCommandSocket*, int )) );
843 if ( mWriteBackFile ) 874 if ( mWriteBackFile )
844 commandSocket->writeFile( fileName ); 875 commandSocket->writeFile( fileName );
845 else { 876 else {
846 commandSocket->sendStop(); 877 commandSocket->sendStop();
847 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync succesful!") ); 878 mParent->topLevelWidget()->setCaption( i18n("Pi-Sync succesful!") );
848 } 879 }
849} 880}
850 881
851KServerSocket:: KServerSocket ( QString pw, Q_UINT16 port, int backlog, QObject * parent, const char * name ) : QServerSocket( port, backlog, parent, name ) 882KServerSocket:: KServerSocket ( QString pw, Q_UINT16 port, int backlog, QObject * parent, const char * name ) : QServerSocket( port, backlog, parent, name )
852{ 883{
853 mPassWord = pw; 884 mPassWord = pw;
854 mSocket = 0; 885 mSocket = 0;
855 mSyncActionDialog = 0; 886 mSyncActionDialog = 0;
856 blockRC = false; 887 blockRC = false;
857}; 888};
858 889
859void KServerSocket::newConnection ( int socket ) 890void KServerSocket::newConnection ( int socket )
860{ 891{
861 // qDebug("KServerSocket:New connection %d ", socket); 892 // qDebug("KServerSocket:New connection %d ", socket);
862 if ( mSocket ) { 893 if ( mSocket ) {
863 qDebug("KServerSocket::newConnection Socket deleted! "); 894 qDebug("KServerSocket::newConnection Socket deleted! ");
864 delete mSocket; 895 delete mSocket;
865 mSocket = 0; 896 mSocket = 0;
866 } 897 }
867 mSocket = new QSocket( this ); 898 mSocket = new QSocket( this );
868 connect( mSocket , SIGNAL(readyRead()), this, SLOT(readClient()) ); 899 connect( mSocket , SIGNAL(readyRead()), this, SLOT(readClient()) );
869 connect( mSocket , SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) ); 900 connect( mSocket , SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) );
870 mSocket->setSocket( socket ); 901 mSocket->setSocket( socket );
871} 902}
872 903
873void KServerSocket::discardClient() 904void KServerSocket::discardClient()
874{ 905{
875 //qDebug(" KServerSocket::discardClient()"); 906 //qDebug(" KServerSocket::discardClient()");
876 if ( mSocket ) { 907 if ( mSocket ) {
877 delete mSocket; 908 delete mSocket;
878 mSocket = 0; 909 mSocket = 0;
879 } 910 }
880 //emit endConnect(); 911 //emit endConnect();
881} 912}
882void KServerSocket::readClient() 913void KServerSocket::readClient()
883{ 914{
884 if ( blockRC ) 915 if ( blockRC )
885 return; 916 return;
886 if ( mSocket == 0 ) { 917 if ( mSocket == 0 ) {
887 qDebug("ERROR::KServerSocket::readClient(): mSocket == 0 "); 918 qDebug("ERROR::KServerSocket::readClient(): mSocket == 0 ");
888 return; 919 return;
889 } 920 }
890 qDebug("KServerSocket readClient()"); 921 qDebug("KServerSocket readClient()");
891 if ( mSocket->canReadLine() ) { 922 if ( mSocket->canReadLine() ) {
892 QString line = mSocket->readLine(); 923 QString line = mSocket->readLine();
893 qDebug("KServerSocket readline: %s ", line.latin1()); 924 qDebug("KServerSocket readline: %s ", line.latin1());
894 QStringList tokens = QStringList::split( QRegExp("[ \r\n][ \r\n]*"), line ); 925 QStringList tokens = QStringList::split( QRegExp("[ \r\n][ \r\n]*"), line );
895 if ( tokens[0] == "GET" ) { 926 if ( tokens[0] == "GET" ) {
896 if ( tokens[1] == mPassWord ) 927 if ( tokens[1] == mPassWord )
897 //emit sendFile( mSocket ); 928 //emit sendFile( mSocket );
898 send_file(); 929 send_file();
899 else { 930 else {
900 KMessageBox::information( 0, i18n("ERROR:\nGot send file request\nwith invalid password")); 931 KMessageBox::error( 0, i18n("Got send file request\nwith invalid password"));
901 qDebug("password %s, invalid password %s ",mPassWord.latin1(), tokens[1].latin1() ); 932 qDebug("password %s, invalid password %s ",mPassWord.latin1(), tokens[1].latin1() );
902 } 933 }
903 } 934 }
904 if ( tokens[0] == "PUT" ) { 935 if ( tokens[0] == "PUT" ) {
905 if ( tokens[1] == mPassWord ) { 936 if ( tokens[1] == mPassWord ) {
906 //emit getFile( mSocket ); 937 //emit getFile( mSocket );
907 blockRC = true; 938 blockRC = true;
908 get_file(); 939 get_file();
909 } 940 }
910 else { 941 else {
911 KMessageBox::information( 0, i18n("ERROR:\nGot receive file request\nwith invalid password")); 942 KMessageBox::error( 0, i18n("Got receive file request\nwith invalid password"));
912 qDebug("password %s, invalid password %s ",mPassWord.latin1(), tokens[1].latin1() ); 943 qDebug("password %s, invalid password %s ",mPassWord.latin1(), tokens[1].latin1() );
913 } 944 }
914 } 945 }
915 if ( tokens[0] == "STOP" ) { 946 if ( tokens[0] == "STOP" ) {
916 //emit endConnect(); 947 //emit endConnect();
917 end_connect(); 948 end_connect();
918 } 949 }
919 } 950 }
920} 951}
921void KServerSocket::end_connect() 952void KServerSocket::end_connect()
922{ 953{
923 delete mSyncActionDialog; 954 delete mSyncActionDialog;
924 mSyncActionDialog = 0; 955 mSyncActionDialog = 0;
925} 956}
926void KServerSocket::send_file() 957void KServerSocket::send_file()
927{ 958{
928 //qDebug("MainWindow::sendFile(QSocket* s) "); 959 //qDebug("MainWindow::sendFile(QSocket* s) ");
929 if ( mSyncActionDialog ) 960 if ( mSyncActionDialog )
930 delete mSyncActionDialog; 961 delete mSyncActionDialog;
931 mSyncActionDialog = new QDialog ( 0, "input-dialog", true ); 962 mSyncActionDialog = new QDialog ( 0, "input-dialog", true );
932 mSyncActionDialog->setCaption(i18n("Received sync request")); 963 mSyncActionDialog->setCaption(i18n("Received sync request"));
933 QLabel* label = new QLabel( i18n("Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog."), mSyncActionDialog ); 964 QLabel* label = new QLabel( i18n("Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog."), mSyncActionDialog );
934 QVBoxLayout* lay = new QVBoxLayout( mSyncActionDialog ); 965 QVBoxLayout* lay = new QVBoxLayout( mSyncActionDialog );
935 lay->addWidget( label); 966 lay->addWidget( label);
936 lay->setMargin(7); 967 lay->setMargin(7);
937 lay->setSpacing(7); 968 lay->setSpacing(7);
938 mSyncActionDialog->setFixedSize( 230, 120); 969 mSyncActionDialog->setFixedSize( 230, 120);
939 mSyncActionDialog->show(); 970 mSyncActionDialog->show();
940 mSyncActionDialog->raise(); 971 mSyncActionDialog->raise();
941 qDebug("KSS::saving ... "); 972 qDebug("KSS::saving ... ");
942 emit request_file(); 973 emit request_file();
943 qApp->processEvents(); 974 qApp->processEvents();
944 QString fileName = mFileName; 975 QString fileName = mFileName;
945 QFile file( fileName ); 976 QFile file( fileName );
946 if (!file.open( IO_ReadOnly ) ) { 977 if (!file.open( IO_ReadOnly ) ) {
947 delete mSyncActionDialog; 978 delete mSyncActionDialog;
948 mSyncActionDialog = 0; 979 mSyncActionDialog = 0;
949 qDebug("KSS::error open file "); 980 qDebug("KSS::error open file ");
950 mSocket->close(); 981 mSocket->close();
951 if ( mSocket->state() == QSocket::Idle ) 982 if ( mSocket->state() == QSocket::Idle )
952 QTimer::singleShot( 10, this , SLOT ( discardClient())); 983 QTimer::singleShot( 10, this , SLOT ( discardClient()));
953 return ; 984 return ;
954 985
955 } 986 }
956 mSyncActionDialog->setCaption( i18n("Sending file...") ); 987 mSyncActionDialog->setCaption( i18n("Sending file...") );
957 QTextStream ts( &file ); 988 QTextStream ts( &file );
958 ts.setEncoding( QTextStream::Latin1 ); 989 ts.setEncoding( QTextStream::Latin1 );
959 990
960 QTextStream os( mSocket ); 991 QTextStream os( mSocket );
961 os.setEncoding( QTextStream::Latin1 ); 992 os.setEncoding( QTextStream::Latin1 );
962 while ( ! ts.atEnd() ) { 993 while ( ! ts.atEnd() ) {
963 os << ts.readLine() << "\n"; 994 os << ts.readLine() << "\n";
964 } 995 }
965 //os << ts.read(); 996 //os << ts.read();
966 file.close(); 997 file.close();
967 mSyncActionDialog->setCaption( i18n("Waiting for synced file...") ); 998 mSyncActionDialog->setCaption( i18n("Waiting for synced file...") );
968 mSocket->close(); 999 mSocket->close();
969 if ( mSocket->state() == QSocket::Idle ) 1000 if ( mSocket->state() == QSocket::Idle )
970 QTimer::singleShot( 10, this , SLOT ( discardClient())); 1001 QTimer::singleShot( 10, this , SLOT ( discardClient()));
971} 1002}
972void KServerSocket::get_file() 1003void KServerSocket::get_file()
973{ 1004{
974 mSyncActionDialog->setCaption( i18n("Receiving synced file...") ); 1005 mSyncActionDialog->setCaption( i18n("Receiving synced file...") );
975 1006
@@ -1094,83 +1125,86 @@ void KCommandSocket::sendStop()
1094 mSocket = new QSocket( this ); 1125 mSocket = new QSocket( this );
1095 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1126 connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1096 } 1127 }
1097 mSocket->connectToHost( mHost, mPort ); 1128 mSocket->connectToHost( mHost, mPort );
1098 QTextStream os2( mSocket ); 1129 QTextStream os2( mSocket );
1099 os2.setEncoding( QTextStream::Latin1 ); 1130 os2.setEncoding( QTextStream::Latin1 );
1100 os2 << "STOP\r\n"; 1131 os2 << "STOP\r\n";
1101 mSocket->close(); 1132 mSocket->close();
1102 if ( mSocket->state() == QSocket::Idle ) 1133 if ( mSocket->state() == QSocket::Idle )
1103 QTimer::singleShot( 10, this , SLOT ( deleteSocket())); 1134 QTimer::singleShot( 10, this , SLOT ( deleteSocket()));
1104} 1135}
1105 1136
1106void KCommandSocket::startReadFileFromSocket() 1137void KCommandSocket::startReadFileFromSocket()
1107{ 1138{
1108 if ( ! mFirst ) 1139 if ( ! mFirst )
1109 return; 1140 return;
1110 mFirst = false; 1141 mFirst = false;
1111 mTimerSocket->stop(); 1142 mTimerSocket->stop();
1112 mFileString = ""; 1143 mFileString = "";
1113 mTime.start(); 1144 mTime.start();
1114 QTimer::singleShot( 1, this , SLOT (readFileFromSocket( ) )); 1145 QTimer::singleShot( 1, this , SLOT (readFileFromSocket( ) ));
1115 1146
1116} 1147}
1117void KCommandSocket::readFileFromSocket() 1148void KCommandSocket::readFileFromSocket()
1118{ 1149{
1119 //qDebug("readBackFileFromSocket() %d ", mTime.elapsed ()); 1150 //qDebug("readBackFileFromSocket() %d ", mTime.elapsed ());
1120 while ( mSocket->canReadLine () ) { 1151 while ( mSocket->canReadLine () ) {
1121 mTime.restart(); 1152 mTime.restart();
1122 QString line = mSocket->readLine (); 1153 QString line = mSocket->readLine ();
1123 mFileString += line; 1154 mFileString += line;
1124 //qDebug("readline: %s ", line.latin1()); 1155 //qDebug("readline: %s ", line.latin1());
1125 } 1156 }
1126 if ( mTime.elapsed () < 3000 ) { 1157 if ( mTime.elapsed () < 3000 ) {
1127 // wait for more 1158 // wait for more
1128 //qDebug("waitformore "); 1159 //qDebug("waitformore ");
1129 QTimer::singleShot( 100, this , SLOT (readFileFromSocket( ) )); 1160 QTimer::singleShot( 100, this , SLOT (readFileFromSocket( ) ));
1130 return; 1161 return;
1131 } 1162 }
1132 QString fileName = mFileName; 1163 QString fileName = mFileName;
1133 QFile file ( fileName ); 1164 QFile file ( fileName );
1134 if (!file.open( IO_WriteOnly ) ) { 1165 if (!file.open( IO_WriteOnly ) ) {
1135 mFileString = ""; 1166 mFileString = "";
1136 mRetVal = errorR; 1167 mRetVal = errorR;
1137 qDebug("Error open temp calender file for writing: %s",fileName.latin1() ); 1168 qDebug("Error open temp calender file for writing: %s",fileName.latin1() );
1138 deleteSocket(); 1169 deleteSocket();
1139 return ; 1170 return ;
1140 1171
1141 } 1172 }
1142 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1)); 1173 // mView->setLoadedFileVersion(QDateTime::currentDateTime().addSecs( -1));
1143 QTextStream ts ( &file ); 1174 QTextStream ts ( &file );
1144 ts.setEncoding( QTextStream::Latin1 ); 1175 ts.setEncoding( QTextStream::Latin1 );
1145 ts << mFileString; 1176 ts << mFileString;
1146 file.close(); 1177 file.close();
1147 mFileString = ""; 1178 mFileString = "";
1148 mRetVal = successR; 1179 mRetVal = successR;
1149 mSocket->close(); 1180 mSocket->close();
1150 // if state is not idle, deleteSocket(); is called via 1181 // if state is not idle, deleteSocket(); is called via
1151 // connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) ); 1182 // connect( mSocket, SIGNAL(delayedCloseFinished ()), this, SLOT(deleteSocket()) );
1152 if ( mSocket->state() == QSocket::Idle ) 1183 if ( mSocket->state() == QSocket::Idle )
1153 deleteSocket(); 1184 deleteSocket();
1154} 1185}
1155 1186
1156void KCommandSocket::deleteSocket() 1187void KCommandSocket::deleteSocket()
1157{ 1188{
1189 //qDebug("KCommandSocket::deleteSocket() ");
1158 if ( mTimerSocket->isActive () ) { 1190 if ( mTimerSocket->isActive () ) {
1159 mTimerSocket->stop(); 1191 mTimerSocket->stop();
1160 mRetVal = errorTO; 1192 mRetVal = errorTO;
1193 qDebug("Connection to remote host timed out");
1161 if ( mSocket ) { 1194 if ( mSocket ) {
1162 mSocket->close(); 1195 mSocket->close();
1163 if ( mSocket->state() == QSocket::Idle ) 1196 //if ( mSocket->state() == QSocket::Idle )
1164 deleteSocket(); 1197 // deleteSocket();
1165 return; 1198 delete mSocket;
1199 mSocket = 0;
1166 } 1200 }
1201 KMessageBox::error( 0, i18n("Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host? "));
1202 emit commandFinished( this, mRetVal );
1203 return;
1167 } 1204 }
1168 //qDebug("KCommandSocket::deleteSocket() %d", mRetVal ); 1205 //qDebug("KCommandSocket::deleteSocket() %d", mRetVal );
1169 if ( mSocket) 1206 if ( mSocket)
1170 delete mSocket; 1207 delete mSocket;
1171 mSocket = 0; 1208 mSocket = 0;
1172 if ( mRetVal == errorTO)
1173 KMessageBox::information( 0, i18n("ERROR:\nConnection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host? "));
1174
1175 emit commandFinished( this, mRetVal ); 1209 emit commandFinished( this, mRetVal );
1176} 1210}
diff --git a/libkdepim/ksyncmanager.h b/libkdepim/ksyncmanager.h
index 1f7c7e7..5b05383 100644
--- a/libkdepim/ksyncmanager.h
+++ b/libkdepim/ksyncmanager.h
@@ -112,96 +112,97 @@ class KSyncManager : public QObject
112 PWMPI = 2 }; 112 PWMPI = 2 };
113 113
114 KSyncManager(QWidget* parent, KSyncInterface* implementation, TargetApp ta, KPimPrefs* prefs, QPopupMenu* syncmenu); 114 KSyncManager(QWidget* parent, KSyncInterface* implementation, TargetApp ta, KPimPrefs* prefs, QPopupMenu* syncmenu);
115 ~KSyncManager() ; 115 ~KSyncManager() ;
116 116
117 void multiSync( bool askforPrefs ); 117 void multiSync( bool askforPrefs );
118 bool blockSave() { return mBlockSaveFlag; } 118 bool blockSave() { return mBlockSaveFlag; }
119 void setBlockSave(bool sa) { mBlockSaveFlag = sa; } 119 void setBlockSave(bool sa) { mBlockSaveFlag = sa; }
120 void setDefaultFileName( QString s) { mDefFileName = s ;} 120 void setDefaultFileName( QString s) { mDefFileName = s ;}
121 QString defaultFileName() { return mDefFileName ;} 121 QString defaultFileName() { return mDefFileName ;}
122 QString syncFileName(); 122 QString syncFileName();
123 123
124 QString getCurrentSyncDevice() { return mCurrentSyncDevice; } 124 QString getCurrentSyncDevice() { return mCurrentSyncDevice; }
125 QString getCurrentSyncName() { return mCurrentSyncName; } 125 QString getCurrentSyncName() { return mCurrentSyncName; }
126 126
127 void showProgressBar(int percentage, QString caption = QString::null, int total=100); 127 void showProgressBar(int percentage, QString caption = QString::null, int total=100);
128 void hideProgressBar(); 128 void hideProgressBar();
129 bool isProgressBarCanceled(); 129 bool isProgressBarCanceled();
130 130
131 // sync stuff 131 // sync stuff
132 QString mLocalMachineName; 132 QString mLocalMachineName;
133 QStringList mExternSyncProfiles; 133 QStringList mExternSyncProfiles;
134 QStringList mSyncProfileNames; 134 QStringList mSyncProfileNames;
135 bool mAskForPreferences; 135 bool mAskForPreferences;
136 bool mShowSyncSummary; 136 bool mShowSyncSummary;
137 bool mWriteBackExistingOnly; 137 bool mWriteBackExistingOnly;
138 int mSyncAlgoPrefs; 138 int mSyncAlgoPrefs;
139 bool mWriteBackFile; 139 bool mWriteBackFile;
140 int mWriteBackInFuture; 140 int mWriteBackInFuture;
141 QString mPhoneDevice; 141 QString mPhoneDevice;
142 QString mPhoneConnection; 142 QString mPhoneConnection;
143 QString mPhoneModel; 143 QString mPhoneModel;
144 QString mPassWordPiSync; 144 QString mPassWordPiSync;
145 QString mActiveSyncPort; 145 QString mActiveSyncPort;
146 QString mActiveSyncIP ; 146 QString mActiveSyncIP ;
147 147
148 signals: 148 signals:
149 void save(); 149 void save();
150 void request_file(); 150 void request_file();
151 void getFile( bool ); 151 void getFile( bool );
152 152
153 public slots: 153 public slots:
154 void slotSyncMenu( int ); 154 void slotSyncMenu( int );
155 void deleteCommandSocket(KCommandSocket*s, int state); 155 void deleteCommandSocket(KCommandSocket*s, int state);
156 void readFileFromSocket(); 156 void readFileFromSocket();
157 void fillSyncMenu(); 157 void fillSyncMenu();
158 158
159 private: 159 private:
160 void syncPi(); 160 void syncPi();
161 KServerSocket * mServerSocket; 161 KServerSocket * mServerSocket;
162 void enableQuick(); 162 void enableQuick();
163 KPimPrefs* mPrefs; 163 KPimPrefs* mPrefs;
164 QString mDefFileName; 164 QString mDefFileName;
165 QString mCurrentSyncDevice; 165 QString mCurrentSyncDevice;
166 QString mCurrentSyncName; 166 QString mCurrentSyncName;
167 void quickSyncLocalFile(); 167 void quickSyncLocalFile();
168 bool syncWithFile( QString fn , bool quick ); 168 bool syncWithFile( QString fn , bool quick );
169 void syncLocalFile(); 169 void syncLocalFile();
170 void syncPhone(); 170 void syncPhone();
171 void syncSharp(); 171 void syncSharp();
172 bool syncExternalApplication(QString); 172 bool syncExternalApplication(QString);
173 int mCurrentSyncProfile ; 173 int mCurrentSyncProfile ;
174 void syncRemote( KSyncProfile* prof, bool ask = true); 174 void syncRemote( KSyncProfile* prof, bool ask = true);
175 void edit_sync_options(); 175 void edit_sync_options();
176 void edit_pisync_options();
176 int ringSync(); 177 int ringSync();
177 QString getPassword( ); 178 QString getPassword( );
178 179
179 private slots: 180 private slots:
180 void confSync(); 181 void confSync();
181 private: 182 private:
182 bool mBlockSaveFlag; 183 bool mBlockSaveFlag;
183 QWidget* mParent; 184 QWidget* mParent;
184 KSyncInterface* mImplementation; 185 KSyncInterface* mImplementation;
185 TargetApp mTargetApp; 186 TargetApp mTargetApp;
186 QPopupMenu* mSyncMenu; 187 QPopupMenu* mSyncMenu;
187 QProgressBar* bar; 188 QProgressBar* bar;
188 189
189}; 190};
190 191
191 192
192class KSyncInterface 193class KSyncInterface
193{ 194{
194 public : 195 public :
195 virtual bool sync(KSyncManager* manager, QString filename, int mode) = 0; 196 virtual bool sync(KSyncManager* manager, QString filename, int mode) = 0;
196 virtual bool syncExternal(KSyncManager* manager, QString resource) 197 virtual bool syncExternal(KSyncManager* manager, QString resource)
197 { 198 {
198 // empty implementation, because some syncable applications do not 199 // empty implementation, because some syncable applications do not
199 // have an external(sharpdtm) syncmode, like pwmanager. 200 // have an external(sharpdtm) syncmode, like pwmanager.
200 return false; 201 return false;
201 } 202 }
202 203
203 204
204}; 205};
205 206
206 207
207#endif 208#endif