-rw-r--r-- | bin/kdepim/korganizer/howtoSYNC.txt | 19 | ||||
-rw-r--r-- | libkdepim/ksyncmanager.cpp | 58 | ||||
-rw-r--r-- | libkdepim/ksyncmanager.h | 1 |
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 | |||
@@ -86,65 +86,70 @@ c) Create a new sync profile and give it a unique name. | |||
86 | your profile name ( refer to b) ). | 86 | your profile name ( refer to b) ). |
87 | d) Coose the profile kind of your syncing method: | 87 | d) 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) |
93 | e) Choose the other profile options. | 93 | e) Choose the other profile options. |
94 | Detailed explanation in 2) | 94 | Detailed explanation in 2) |
95 | f) Close sync dialog with OK. | 95 | f) Close sync dialog with OK. |
96 | g) Sync. | 96 | g) Sync. |
97 | 97 | ||
98 | NOTE: | 98 | NOTE: |
99 | AFTER SYNCING THERE ARE "SYNC EVENTS" CREATED | 99 | AFTER 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. |
101 | YOU MAY NOT DELETE OR CHANGE THESE EVENTS. | 101 | YOU MAY NOT DELETE OR CHANGE THESE EVENTS. |
102 | 102 | ||
103 | ************************************************************************* | 103 | ************************************************************************* |
104 | 2) Sync settings in sync dialog | 104 | 2) Sync settings in sync dialog |
105 | ************************************************************************* | 105 | ************************************************************************* |
106 | 106 | ||
107 | a) Local device name: | 107 | a) Local device name: |
108 | -> 1) b) | 108 | -> 1) b) |
109 | b) Profile: | 109 | b) Profile: |
110 | -> 1) c) | 110 | -> 1) c) |
111 | c) Include in multiple sync: | 111 | c) 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. |
117 | d) Ask for preferences before sync: | 117 | d) 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. | ||
119 | e) Sync preferences: | 124 | e) Sync preferences: |
120 | Choose here your sync preferences. | 125 | Choose here your sync preferences. |
121 | Details -> 4) | 126 | Details -> 4) |
122 | f) Show summary after sync: | 127 | f) 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. |
125 | g) Write back synced data: | 130 | g) 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. |
131 | h) --Write back (on remote) existing entries only: | 136 | h) --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. |
137 | i) --Write back (calendar) entries in future only: | 142 | i) --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. |
144 | j) Profile kind: | 149 | j) Profile kind: |
145 | Details -> 5) | 150 | Details -> 5) |
146 | 151 | ||
147 | ************************************************************************* | 152 | ************************************************************************* |
148 | 3) Syncing background | 153 | 3) Syncing background |
149 | ************************************************************************* | 154 | ************************************************************************* |
150 | 155 | ||
@@ -237,65 +242,75 @@ SYNC PREFERENCES: | |||
237 | ************************************************************************* | 242 | ************************************************************************* |
238 | 5) Details about sync profile kinds | 243 | 5) Details about sync profile kinds |
239 | ************************************************************************* | 244 | ************************************************************************* |
240 | 245 | ||
241 | a) Local file | 246 | a) 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 | ||
244 | b) Pi-Sync (direct Kx/Pi to Kx/Pi sync) | 249 | b) 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 | ||
285 | c) Remote file | 300 | c) 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 | ||
295 | d) Mobile device (cell phone) | 310 | d) 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 |
diff --git a/libkdepim/ksyncmanager.cpp b/libkdepim/ksyncmanager.cpp index b3e266a..0faa24d 100644 --- a/libkdepim/ksyncmanager.cpp +++ b/libkdepim/ksyncmanager.cpp | |||
@@ -580,69 +580,99 @@ void KSyncManager::syncRemote( KSyncProfile* prof, bool ask) | |||
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 | 612 | void 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 | } | ||
613 | void KSyncManager::edit_sync_options() | 644 | void 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); |
@@ -756,68 +786,69 @@ void KSyncManager::hideProgressBar() | |||
756 | } | 786 | } |
757 | 787 | ||
758 | bool KSyncManager::isProgressBarCanceled() | 788 | bool KSyncManager::isProgressBarCanceled() |
759 | { | 789 | { |
760 | return !bar->isVisible(); | 790 | return !bar->isVisible(); |
761 | } | 791 | } |
762 | 792 | ||
763 | QString KSyncManager::syncFileName() | 793 | QString 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 | |||
789 | void KSyncManager::syncPi() | 818 | void 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 | ||
804 | void KSyncManager::deleteCommandSocket(KCommandSocket*s, int state) | 835 | void 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())); |
@@ -868,76 +899,76 @@ void KServerSocket::newConnection ( int socket ) | |||
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 | ||
873 | void KServerSocket::discardClient() | 904 | void 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 | } |
882 | void KServerSocket::readClient() | 913 | void 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 | } |
921 | void KServerSocket::end_connect() | 952 | void KServerSocket::end_connect() |
922 | { | 953 | { |
923 | delete mSyncActionDialog; | 954 | delete mSyncActionDialog; |
924 | mSyncActionDialog = 0; | 955 | mSyncActionDialog = 0; |
925 | } | 956 | } |
926 | void KServerSocket::send_file() | 957 | void 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(); |
@@ -1126,51 +1157,54 @@ void KCommandSocket::readFileFromSocket() | |||
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 | ||
1156 | void KCommandSocket::deleteSocket() | 1187 | void 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 | |||
@@ -144,64 +144,65 @@ class KSyncManager : public QObject | |||
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 | ||
192 | class KSyncInterface | 193 | class 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 |