summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt4
-rw-r--r--kaddressbook/kabcore.cpp2
2 files changed, 5 insertions, 1 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 41b3e45..c61a322 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,516 +1,520 @@
1Info about the changes in new versions of KDE-Pim/Pi 1Info about the changes in new versions of KDE-Pim/Pi
2 2
3********** VERSION 1.9.11 ************ 3********** VERSION 1.9.11 ************
4 4
5Fixed several problems in PWM/Pi, like 5Fixed several problems in PWM/Pi, like
6asking the user, if unsaved changed are pending 6asking the user, if unsaved changed are pending
7when closing the app. 7when closing the app.
8 8
9Fixed a crash in KO/Pi , when importing/loading vcs files 9Fixed a crash in KO/Pi , when importing/loading vcs files
10which have an entry with an attendee with state: 10which have an entry with an attendee with state:
11NEEDS ACTION 11NEEDS ACTION
12 12
13Fixed some problems in the German translation of OM/Pi, 13Fixed some problems in the German translation of OM/Pi,
14which makes some dialogs not fitting on the screen 14which makes some dialogs not fitting on the screen
15of the Z 5500. 15of the Z 5500.
16 16
17Fixed Qtopia crash, when disabling/deinstalling 17Fixed Qtopia crash, when disabling/deinstalling
18KO/Pi alarm applet. 18KO/Pi alarm applet.
19 19
20Implemented direct KDE<->KA/Pi sync for KA/Pi running 20Implemented direct KDE<->KA/Pi sync for KA/Pi running
21on Linux desktop. 21on Linux desktop.
22 22
23Added "remove sync info" to sync menu. 23Added "remove sync info" to sync menu.
24 24
25Tweaked the KO/Pi What's next view a bit, added 25Tweaked the KO/Pi What's next view a bit, added
26setting to hide events that are done. 26setting to hide events that are done.
27 27
28Disabled "beam receive enabled" on startup to 28Disabled "beam receive enabled" on startup to
29avoid problems if Fastload is enabled. 29avoid problems if Fastload is enabled.
30Please set "beam receive enabled", 30Please set "beam receive enabled",
31if you want to receive data via IR. 31if you want to receive data via IR.
32 32
33Fixed bug in direct KDE<->KO/Pi sync for KO/Pi running 33Fixed bug in direct KDE<->KO/Pi sync for KO/Pi running
34on Linux desktop. 34on Linux desktop.
35 35
36Made in KA/Pi scrolling possible, if details view is selected. 36Made in KA/Pi scrolling possible, if details view is selected.
37(The keyboard focus is set automatically to the search line)
38
39Fixed a bug in DMT sync, that a new entry in DTM was added
40on every sync to Kx/Pi.
37 41
38 42
39 43
40 44
41********** VERSION 1.9.10 ************ 45********** VERSION 1.9.10 ************
42 46
43Many internal small bugfixes. 47Many internal small bugfixes.
44And fix of the "big" bug in KO/Pi, 48And fix of the "big" bug in KO/Pi,
45that after Syncing the appointments had an offset by several hours. 49that after Syncing the appointments had an offset by several hours.
46That was a problem with the internal timezone setting, 50That was a problem with the internal timezone setting,
47introduced by the changed timezone configuration settings. 51introduced by the changed timezone configuration settings.
48 52
49German translation for OM/Pi is now available. 53German translation for OM/Pi is now available.
50 54
51 55
52********** VERSION 1.9.9 ************ 56********** VERSION 1.9.9 ************
53 57
54KDE-Pim/Pi has a new Member! 58KDE-Pim/Pi has a new Member!
55It is called PWM/Pi (Passwordmanager/platform-independent) 59It is called PWM/Pi (Passwordmanager/platform-independent)
56and it is available for the Zaurus. 60and it is available for the Zaurus.
57It is planned, that it will be available later for Windows. 61It is planned, that it will be available later for Windows.
58(And for Linux, of course). 62(And for Linux, of course).
59It is a port of the Passwordmanager of KDE. 63It is a port of the Passwordmanager of KDE.
60It will need the MicroKDElibs to run. 64It will need the MicroKDElibs to run.
61 65
62Made loading of addressbooks in KA/Pi up to 7 times faster! 66Made loading of addressbooks in KA/Pi up to 7 times faster!
63The bigger your addressbook file, the more starting speed 67The bigger your addressbook file, the more starting speed
64will you gain. (relatively) 68will you gain. (relatively)
65 69
66The Qtopia addressbook connector is now platform independend 70The Qtopia addressbook connector is now platform independend
67as well and should work on any platform for importing/exporting 71as well and should work on any platform for importing/exporting
68Qtopia and Opie XML files. 72Qtopia and Opie XML files.
69 73
70Added a +30min feature to the timezone settings to make 74Added a +30min feature to the timezone settings to make
71KDE-Pim/Pi useable in Australia and other parts on the 75KDE-Pim/Pi useable in Australia and other parts on the
72world with strange timezones ;-) 76world with strange timezones ;-)
73 77
74German "Umlaute" should now be sorted correctly on the Z in KA/Pi. 78German "Umlaute" should now be sorted correctly on the Z in KA/Pi.
75 79
76It is now possible to disable the 80It is now possible to disable the
77"receive data via infrared" feature, such that syncing with 81"receive data via infrared" feature, such that syncing with
78Outlook is now possible again with Kx/Pi runing. 82Outlook is now possible again with Kx/Pi runing.
79Please disable it, before syncing Sharp DTM with Outlook. 83Please disable it, before syncing Sharp DTM with Outlook.
80For your convenience, the "receive data via infrared" feature 84For your convenience, the "receive data via infrared" feature
81is disabled automatically, if you sync Kx/Pi with DTM. 85is disabled automatically, if you sync Kx/Pi with DTM.
82You have to enable it again manually after syncing. 86You have to enable it again manually after syncing.
83Enabling this feature makes it impossible to start the 87Enabling this feature makes it impossible to start the
84Sharp DTM apps. If this feature is enabled, you will only get the 88Sharp DTM apps. If this feature is enabled, you will only get the
85alarm notification from KO/Pi and not from the Sharp calendar. 89alarm notification from KO/Pi and not from the Sharp calendar.
86This is very useful if you sync KO/Pi with Sharp DTM, 90This is very useful if you sync KO/Pi with Sharp DTM,
87because after syncing you usually would get notified about 91because after syncing you usually would get notified about
88an alarm by KO/Pi and the Sharp Calendar. 92an alarm by KO/Pi and the Sharp Calendar.
89 93
90Together with the Linux desktop version of KO/Pi 94Together with the Linux desktop version of KO/Pi
91it is now possible to sync KO/Pi on the Zaurus 95it is now possible to sync KO/Pi on the Zaurus
92with the complete KDE-desktop (3.3 or later) 96with the complete KDE-desktop (3.3 or later)
93calendar data easily. 97calendar data easily.
94That makes it possible to sync the Z with one 98That makes it possible to sync the Z with one
95click of a mouse with the KDE-Desktop. 99click of a mouse with the KDE-Desktop.
96This feature it available for all Zaurus platforms KO/Pi 100This feature it available for all Zaurus platforms KO/Pi
97is running on. 101is running on.
98The only thing needed is a running KO/Pi on Linux and 102The only thing needed is a running KO/Pi on Linux and
99a compiled version of the small 103a compiled version of the small
100KDE-Pim/Pi<->KDE-Desktop access command line program, 104KDE-Pim/Pi<->KDE-Desktop access command line program,
101which is in the KDE-Pim/Pi sources available. 105which is in the KDE-Pim/Pi sources available.
102 106
103The "KDE-desktop" syncing feature for KA/Pi will follow 107The "KDE-desktop" syncing feature for KA/Pi will follow
104in the next releases. 108in the next releases.
105 109
106Fixed the vcard export bug, which had the version 1.9.8. 110Fixed the vcard export bug, which had the version 1.9.8.
107 111
108Added missing GERMAN translation to KO/Pi. 112Added missing GERMAN translation to KO/Pi.
109Hi PsionX, could you add the missing french translation?Thx! 113Hi PsionX, could you add the missing french translation?Thx!
110 114
111Translation files for KA/Pi are available as well. 115Translation files for KA/Pi are available as well.
112GERMAN translation will be available in the next release. 116GERMAN translation will be available in the next release.
113PsionX ( yres, you again ;-) ), could you start translating 117PsionX ( yres, you again ;-) ), could you start translating
114KA/Pi? Thx! 118KA/Pi? Thx!
115 119
116You can download the version 1.9.9 at 120You can download the version 1.9.9 at
117 121
118http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=112604 122http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=112604
119 123
120Note: 124Note:
121To run the mail program OM/Pi you need libopenssl. 125To run the mail program OM/Pi you need libopenssl.
122A link to a download loaction is available at 126A link to a download loaction is available at
123ZSI at www.killefiz.de 127ZSI at www.killefiz.de
124 128
125 129
126********** VERSION 1.9.8 ************ 130********** VERSION 1.9.8 ************
127 131
128Fixed character decoding in OM/Pi. 132Fixed character decoding in OM/Pi.
129(e.g. German "Umlaute" were not displayed properly.) 133(e.g. German "Umlaute" were not displayed properly.)
130 134
131Made is possible to reparent todos in KO/Pi. 135Made is possible to reparent todos in KO/Pi.
132Use contextmenu or keys (look at Help-Keys + Colors) for that. 136Use contextmenu or keys (look at Help-Keys + Colors) for that.
133 137
134Added the missing Sync-Howto and WhatsNew to the packages. 138Added the missing Sync-Howto and WhatsNew to the packages.
135 139
136KO/Pi on Linux desktop can now sync with KDE desktop. 140KO/Pi on Linux desktop can now sync with KDE desktop.
137That means: When using KO/Pi on Linux desktop for syncing with 141That means: When using KO/Pi on Linux desktop for syncing with
138KDE desktop and the Zaurus, the Zaurus can be synced now 142KDE desktop and the Zaurus, the Zaurus can be synced now
139with all KDE-Calendar resources, not only with one local file. 143with all KDE-Calendar resources, not only with one local file.
140(That makes it possible to sync the Zaurus with the 144(That makes it possible to sync the Zaurus with the
141calendar data on a Kolab server) 145calendar data on a Kolab server)
142 146
143KA/Pi syncing with KDE desktop will be available in the next version. 147KA/Pi syncing with KDE desktop will be available in the next version.
144 148
145 149
146********** VERSION 1.9.7 ************ 150********** VERSION 1.9.7 ************
147 151
148KO/Pi - KA/Pi on Windows: 152KO/Pi - KA/Pi on Windows:
149Now a directory can be defined by the user, where the 153Now a directory can be defined by the user, where the
150application/config data should be saved. 154application/config data should be saved.
151 Define your desired path in the evironment variable 155 Define your desired path in the evironment variable
152 MICROKDEHOME 156 MICROKDEHOME
153 before starting KO/Pi or KA/Pi. 157 before starting KO/Pi or KA/Pi.
154 158
155An easy Kx/Pi to Kx/Pi syncing is now possible 159An easy Kx/Pi to Kx/Pi syncing is now possible
156(it is called Pi-Sync) via network. 160(it is called Pi-Sync) via network.
157Please look at the Sync Howto. 161Please look at the Sync Howto.
158 162
159Exporting of calendar data and contacts to mobile phones is now possible. 163Exporting of calendar data and contacts to mobile phones is now possible.
160The SyncHowto is updated with information howto 164The SyncHowto is updated with information howto
161access/sync mobile phones. 165access/sync mobile phones.
162Please look at the Sync Howto. 166Please look at the Sync Howto.
163 167
164Now KO/Pi and KA/Pi on the Zaurus can receive data via infrared directly. 168Now KO/Pi and KA/Pi on the Zaurus can receive data via infrared directly.
165Please disable Fastload for the original contact/calendar applications 169Please disable Fastload for the original contact/calendar applications
166and close them. 170and close them.
167KO/Pi and KA/Pi must be running in order to receive the data. 171KO/Pi and KA/Pi must be running in order to receive the data.
168(KO/Pi and KA/Pi are always running if Fastload for them is enabled!) 172(KO/Pi and KA/Pi are always running if Fastload for them is enabled!)
169 173
170In the KA/Pi details view are now the preferred tel. numbers displayed on top 174In the KA/Pi details view are now the preferred tel. numbers displayed on top
171of the other data ( emails/tel.numbers/addresses) 175of the other data ( emails/tel.numbers/addresses)
172 176
173Fixed some syncing problems in KA/Pi. 177Fixed some syncing problems in KA/Pi.
174 178
175Added font settings for the KA/Pi details view. 179Added font settings for the KA/Pi details view.
176Added fields "children's name" and "gender" to KA/Pi. 180Added fields "children's name" and "gender" to KA/Pi.
177 181
178Made searching in KA/Pi better: 182Made searching in KA/Pi better:
179Now the first item in a view is selected after a search automatically and 183Now the first item in a view is selected after a search automatically and
180the views can be scrolled up/down when the search input field has the keyboard focus. 184the views can be scrolled up/down when the search input field has the keyboard focus.
181 185
182And, of course, fixed a bunch of reported bugs in KO/Pi and KA/Pi. 186And, of course, fixed a bunch of reported bugs in KO/Pi and KA/Pi.
183 187
184 188
185********** VERSION 1.9.6 ************ 189********** VERSION 1.9.6 ************
186 190
187Changes in the external application communication on the Zaurus 191Changes in the external application communication on the Zaurus
188in order to use less RAM when the apps are running. 192in order to use less RAM when the apps are running.
189First syncing of addressbooks (KA/Pi) is possible. 193First syncing of addressbooks (KA/Pi) is possible.
190 194
191 195
192********** VERSION 1.9.5a ************ 196********** VERSION 1.9.5a ************
193 197
194Fixed a bug in KO/Pi in the SharpDTM sync of version 1.9.5. 198Fixed a bug in KO/Pi in the SharpDTM sync of version 1.9.5.
195Fixed some small bugs. 199Fixed some small bugs.
196KA/Pi shows now the birthday in summary view. 200KA/Pi shows now the birthday in summary view.
197Now OM/Pi and KA/Pi are using the date format defined in KO/Pi 201Now OM/Pi and KA/Pi are using the date format defined in KO/Pi
198for displaying dates. 202for displaying dates.
199 203
200 204
201********** VERSION 1.9.5 ************ 205********** VERSION 1.9.5 ************
202 206
203There is still no Addressbook syncing! 207There is still no Addressbook syncing!
204 208
205New in 1.9.5: 209New in 1.9.5:
206 210
207Many bugfixes. 211Many bugfixes.
208Better searching in KA/Pi. 212Better searching in KA/Pi.
209You can configure in KA/Pi if you want to search only after 213You can configure in KA/Pi if you want to search only after
210<return> key pressed. 214<return> key pressed.
211 215
212Better mail downloading in OM/Pi. 216Better mail downloading in OM/Pi.
213 217
214First experimental alpha version of sync of KO/Pi with mobile phones. 218First experimental alpha version of sync of KO/Pi with mobile phones.
215See gammu documentation for supported phones. 219See gammu documentation for supported phones.
216You need to install the package kammu_1.9.5_arm.ipk for sync of KO/Pi with mobile phones. kammu_1.9.5_arm.ipk needs libbluetooth and libsdp. 220You need to install the package kammu_1.9.5_arm.ipk for sync of KO/Pi with mobile phones. kammu_1.9.5_arm.ipk needs libbluetooth and libsdp.
217Quick hint how to use: 221Quick hint how to use:
218NOTE: MOBILE PHONE SYNC IS EXPERIMENTAL! 222NOTE: MOBILE PHONE SYNC IS EXPERIMENTAL!
219Install kammu_1.9.5_arm.ipk , libbluetooth and libsdp. 223Install kammu_1.9.5_arm.ipk , libbluetooth and libsdp.
220Create syncprofile - mobile device 224Create syncprofile - mobile device
221Remove entry for model. (Leave empty ). 225Remove entry for model. (Leave empty ).
222Enable infrared on Zaurus and your Phone. 226Enable infrared on Zaurus and your Phone.
223Sync. 227Sync.
224To get a more detailed log, start kopi from konsole. 228To get a more detailed log, start kopi from konsole.
225 229
226********** VERSION 1.9.4 ************ 230********** VERSION 1.9.4 ************
227 231
228This is the version 1.9.4 of KDE-Pim/Pi for the Zaurus. 232This is the version 1.9.4 of KDE-Pim/Pi for the Zaurus.
229 233
230WARNING: 234WARNING:
231PLEASE BACKUP ALL YOUR DATA! 235PLEASE BACKUP ALL YOUR DATA!
232We have changed a lot and maybe there are some unknown problems. 236We have changed a lot and maybe there are some unknown problems.
233 237
234SYNC HANDLING HAS CHANGED! 238SYNC HANDLING HAS CHANGED!
235Such that, if you sync now with an already synded device, you will duplicated entries after the first sync. 239Such that, if you sync now with an already synded device, you will duplicated entries after the first sync.
236(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks). 240(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks).
237 241
238You need the kmicrokdelibs_1.9.4_arm.ipk as a base for the other programs. 242You need the kmicrokdelibs_1.9.4_arm.ipk as a base for the other programs.
239If you get the error: "Install only possible in main memory", just try it again to install it on SD card. That worked for me. And it was reported that rebooting Qtopia did help in this case as well. 243If you get the error: "Install only possible in main memory", just try it again to install it on SD card. That worked for me. And it was reported that rebooting Qtopia did help in this case as well.
240 244
241As programs are available: 245As programs are available:
242KO/Pi (korganizer ipk) - a calendar program. 246KO/Pi (korganizer ipk) - a calendar program.
243KA/Pi (kaddressbook ipk ) - an addressbook 247KA/Pi (kaddressbook ipk ) - an addressbook
244OM/Pi (kopiemail ipk ) an email program with pop/smtp and IMAP support. 248OM/Pi (kopiemail ipk ) an email program with pop/smtp and IMAP support.
245 249
246An alarm notification program ( korganizer-alarm ipk ) for KO/Pi that notifies you about alarms, even if the Zaurus is in suspend mode. 250An alarm notification program ( korganizer-alarm ipk ) for KO/Pi that notifies you about alarms, even if the Zaurus is in suspend mode.
247(If you do not see an icon in the taskbar after installing korganizer-alarm, please restart Qtopia) 251(If you do not see an icon in the taskbar after installing korganizer-alarm, please restart Qtopia)
248 252
249All the applications are installed in a "Pim" TAB. 253All the applications are installed in a "Pim" TAB.
250If this TAB is new on your system, you can get an icon in this TAB by installing pim_TAB_icon_1.9.4_arm.ipk 254If this TAB is new on your system, you can get an icon in this TAB by installing pim_TAB_icon_1.9.4_arm.ipk
251 255
252All the application are integrated. 256All the application are integrated.
253Such that you can choose in KO/Pi the attendees of a meeting from the addresses in KA/Pi. When you click in KA/Pi on the email address, OM/Pi is started to write the mail. 257Such that you can choose in KO/Pi the attendees of a meeting from the addresses in KA/Pi. When you click in KA/Pi on the email address, OM/Pi is started to write the mail.
254 258
255HINT: 259HINT:
256If you install KPhone/Pi 0.9.7, it will be called, if you click in KA/Pi on a phone number. 260If you install KPhone/Pi 0.9.7, it will be called, if you click in KA/Pi on a phone number.
257 261
258What's new? 262What's new?
259 263
260SYNC HANDLING HAS CHANGED! 264SYNC HANDLING HAS CHANGED!
261Such that, if you sync now with an already synded device, you will duplicated entries after the first sync. 265Such that, if you sync now with an already synded device, you will duplicated entries after the first sync.
262(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks). 266(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks).
263 267
264New in OM/Pi: 268New in OM/Pi:
265When copying(i.e. downloading mails) , you can specify, that only mails of a given size should be downloaded. Added mail copy possibility for selected mails. 269When copying(i.e. downloading mails) , you can specify, that only mails of a given size should be downloaded. Added mail copy possibility for selected mails.
266 270
267New in KO/Pi: 271New in KO/Pi:
268French is now available for KO/Pi. 272French is now available for KO/Pi.
269Choose menu:Actions - Configure:TAB locale 273Choose menu:Actions - Configure:TAB locale
270Syncing has changed. 274Syncing has changed.
271Phone sync available soon. 275Phone sync available soon.
272Not much changes, I cannot remember them ... 276Not much changes, I cannot remember them ...
273 277
274New in KA/Pi: 278New in KA/Pi:
275Beaming possible. 279Beaming possible.
276Sharp DTM readonly access possible( create a new DTM resource ); 280Sharp DTM readonly access possible( create a new DTM resource );
277Better searching possible. 281Better searching possible.
278Search is performed only after pressing the return key. 282Search is performed only after pressing the return key.
279Use wildcard * to specify parts of a name. 283Use wildcard * to specify parts of a name.
280 284
281Better name/email selection dialog (called from KO/Pi or OM/Pi). In this dialog, now searching is possible. Like in KA/Pi, use return key and wildcard * . 285Better name/email selection dialog (called from KO/Pi or OM/Pi). In this dialog, now searching is possible. Like in KA/Pi, use return key and wildcard * .
282 286
283A big improvement is the new management of the contact access. 287A big improvement is the new management of the contact access.
284In version 1.9.3, every application was using their own addressbook access data. 288In version 1.9.3, every application was using their own addressbook access data.
285That means, the addressbook was loaded up to three times in the memory, when accessed by KA/Pi, KO/Pi and OM/Pi. 289That means, the addressbook was loaded up to three times in the memory, when accessed by KA/Pi, KO/Pi and OM/Pi.
286That was wasting of memory, if you had several hundreds of contacts. 290That was wasting of memory, if you had several hundreds of contacts.
287 291
288Now only KA/Pi accesses the addressbook. 292Now only KA/Pi accesses the addressbook.
289If KO/Pi or OM/Pi want to get some name/email data, they request KA/Pi to open the name/email selection dialog and send it back to them. 293If KO/Pi or OM/Pi want to get some name/email data, they request KA/Pi to open the name/email selection dialog and send it back to them.
290If you click on an attendee in a meeting, its contact data is displayed in KA/Pi directly. 294If you click on an attendee in a meeting, its contact data is displayed in KA/Pi directly.
291That means, if KO/Pi or OM/Pi want to access contact data, KA/Pi is started first. 295That means, if KO/Pi or OM/Pi want to access contact data, KA/Pi is started first.
292 296
293New in the KO/Pi alarm applet: 297New in the KO/Pi alarm applet:
294Configure your own timer popup menu! 298Configure your own timer popup menu!
295(Text and minutes for timer countdown) 299(Text and minutes for timer countdown)
296Just edit the file 300Just edit the file
297(yourhomedir)/.kopialarmtimerrc 301(yourhomedir)/.kopialarmtimerrc
298and start/stop a timer to get a new menu with the data of this file. 302and start/stop a timer to get a new menu with the data of this file.
299 303
300********** VERSION 1.9.3 ************ 304********** VERSION 1.9.3 ************
3011) 3051)
302Now KO/Pi on Windows imports directly the calendar data of 306Now KO/Pi on Windows imports directly the calendar data of
303an installed Outlook. Should work with OL version >= 2000. 307an installed Outlook. Should work with OL version >= 2000.
304 308
305********** VERSION 1.9.2 ************ 309********** VERSION 1.9.2 ************
3061) 3101)
307KDE-Pim/Pi has got a new member: 311KDE-Pim/Pi has got a new member:
308KmicroMail (KM/Pi) is a mail program, 312KmicroMail (KM/Pi) is a mail program,
309which can handle IMAP and POP mail access. 313which can handle IMAP and POP mail access.
310It is based on Opie-Mail v3. 314It is based on Opie-Mail v3.
311All dependencies to the Opie libraries ar removed, 315All dependencies to the Opie libraries ar removed,
312such that no additional Opie lib is needed. 316such that no additional Opie lib is needed.
313It is already integrated in KO/Pi and KA/Pi. 317It is already integrated in KO/Pi and KA/Pi.
314It it now available for the Zaurus,probably it 318It it now available for the Zaurus,probably it
315will be available for other platforms later. 319will be available for other platforms later.
316Hint: 320Hint:
317Create your own contact (name + email) 321Create your own contact (name + email)
318in KA/Pi, select this contact and choose menu: 322in KA/Pi, select this contact and choose menu:
319Settings - Set Who Am I. 323Settings - Set Who Am I.
320Now the settings of this contact are used as 324Now the settings of this contact are used as
321the sender data in KM/Pi. 325the sender data in KM/Pi.
3222) 3262)
323KDE-Pim/Pi is split up in five different 327KDE-Pim/Pi is split up in five different
324packages now precompiled for Sharp Zaurus: 328packages now precompiled for Sharp Zaurus:
325--kmicrokdelibs_1.9.2_arm.ipk 329--kmicrokdelibs_1.9.2_arm.ipk
326The libs are needed for any 330The libs are needed for any
327of the following programs: 331of the following programs:
328--kaddressbook_1.9.2_arm.ipk 332--kaddressbook_1.9.2_arm.ipk
329--kmicromail_1.9.2_arm.ipk 333--kmicromail_1.9.2_arm.ipk
330--korganizer_1.9.2_arm.ipk 334--korganizer_1.9.2_arm.ipk
331Independ from that, there is the alarm applet 335Independ from that, there is the alarm applet
332available for KO/Pi, which also offers 336available for KO/Pi, which also offers
333quick access for a new mail or 337quick access for a new mail or
334showing the addressbook.: 338showing the addressbook.:
335--korganizer-alarm_1.9.2_arm.ipk 339--korganizer-alarm_1.9.2_arm.ipk
336Independend means, that the alarm applet 340Independend means, that the alarm applet
337does not need any of the libs or programs above to run. 341does not need any of the libs or programs above to run.
338But it would be quite useless without these programs. 342But it would be quite useless without these programs.
339NOTE: 343NOTE:
340If you get a 344If you get a
341"This application depends on other programs" 345"This application depends on other programs"
342during installation of 346during installation of
343--kmicrokdelibs_1.9.2_arm.ipk 347--kmicrokdelibs_1.9.2_arm.ipk
344you probably do not have to care about that. 348you probably do not have to care about that.
345kmicrokdelibs_1.9.2 will come with some 349kmicrokdelibs_1.9.2 will come with some
346resource plugins, which needs additional libraries. 350resource plugins, which needs additional libraries.
347(E.g. libopie1, if you want to use the 351(E.g. libopie1, if you want to use the
348opie resource connector in KA/Pi). 352opie resource connector in KA/Pi).
349If you do not have this libraries installed, 353If you do not have this libraries installed,
350you simply cannot use the resource. 354you simply cannot use the resource.
351To make it clear: 355To make it clear:
352If the libraries are missing, the applications 356If the libraries are missing, the applications
353using kmicrokdelibs will start, 357using kmicrokdelibs will start,
354because the resources are plugins. 358because the resources are plugins.
3553) 3593)
356KO/Pi and friends are now installable on SD-Card! 360KO/Pi and friends are now installable on SD-Card!
357It is recommended to install all libs and apps 361It is recommended to install all libs and apps
358on the SD card or all in the internal storage. 362on the SD card or all in the internal storage.
359There may be problems, if this is mixed. 363There may be problems, if this is mixed.
3604) 3644)
361Fixed two bugs in the alarm notification on Windows. 365Fixed two bugs in the alarm notification on Windows.
3625) 3665)
363Great improvement! 367Great improvement!
364KO/Pi uses now the latest version of libical. 368KO/Pi uses now the latest version of libical.
365Libical is the library which actually reads 369Libical is the library which actually reads
366the calendar files and extract the data from it. 370the calendar files and extract the data from it.
367With the old version, there were problems 371With the old version, there were problems
368(crashes or program hangs) when licical did read 372(crashes or program hangs) when licical did read
369files, which were not stored from KO/Pi. 373files, which were not stored from KO/Pi.
370I do not know, if the new libical works perfect, 374I do not know, if the new libical works perfect,
371but actually it works much better than 375but actually it works much better than
372the old version. 376the old version.
373There are no problems with compatibility with 377There are no problems with compatibility with
374old calendar files of KO/Pi, of course! 378old calendar files of KO/Pi, of course!
3756) 3796)
376New in KA/Pi: 380New in KA/Pi:
377Opie addressbook resource connector available! 381Opie addressbook resource connector available!
378You will need libopie1 and the opie addressbook, 382You will need libopie1 and the opie addressbook,
379of course. 383of course.
380With the Opie addressbook resource connector, 384With the Opie addressbook resource connector,
381you can access the Opie addressbook readonly in KA/Pi. 385you can access the Opie addressbook readonly in KA/Pi.
382If you want to edit or import the data into KA/Pi, 386If you want to edit or import the data into KA/Pi,
383do this: 387do this:
384a) Create an Opie resource. 388a) Create an Opie resource.
385 (Menu: Settings-Configure Resources). 389 (Menu: Settings-Configure Resources).
386After configuration and restarting KA/Pi you should see 390After configuration and restarting KA/Pi you should see
387the Opie contacts in KA/Pi. 391the Opie contacts in KA/Pi.
388b) Select some or all Opie contacts. 392b) Select some or all Opie contacts.
389(NOTE: +++++ 393(NOTE: +++++
390To know exactly, what contacts are Opie contacts, 394To know exactly, what contacts are Opie contacts,
391do this: Choose menu: 395do this: Choose menu:
392View-Modify View - TAB Fields. 396View-Modify View - TAB Fields.
393Select in the above list "Resource" and click 397Select in the above list "Resource" and click
394down arrow to add it to the "Selected fields". 398down arrow to add it to the "Selected fields".
395Click OK. 399Click OK.
396Now you have a new column "Resource" in your list, 400Now you have a new column "Resource" in your list,
397where you can see, what an Opie resource is. 401where you can see, what an Opie resource is.
398++++ NOTE end.) 402++++ NOTE end.)
399Ok, we do have now some Opie contacts seleted. 403Ok, we do have now some Opie contacts seleted.
400(Use SHIFT or CTRL key in order to multiple select). 404(Use SHIFT or CTRL key in order to multiple select).
401c) Choose menu: Edit-Copy. 405c) Choose menu: Edit-Copy.
402d) Choose menu: Edit-Paste. 406d) Choose menu: Edit-Paste.
403e) Select the resource, you want to add the contacts to. 407e) Select the resource, you want to add the contacts to.
404Congrats! Now you have read/write access to the copied 408Congrats! Now you have read/write access to the copied
405opie contacts as "real" KA/Pi contacts. 409opie contacts as "real" KA/Pi contacts.
406 410
407 411
408********** VERSION 1.9.1 ************ 412********** VERSION 1.9.1 ************
4091) 4131)
410 +++ IMPORTANT 1 +++ 414 +++ IMPORTANT 1 +++
411 415
412The storing place of the default calendar 416The storing place of the default calendar
413file has changed! 417file has changed!
414The default calendar file was 418The default calendar file was
415Applications/korganizer/mycalendar.ics 419Applications/korganizer/mycalendar.ics
416on Zaurus and 420on Zaurus and
417(yourHomeDir)/korganizer/mycalendar.ics 421(yourHomeDir)/korganizer/mycalendar.ics
418on Windows/Linux desktop. Now it is 422on Windows/Linux desktop. Now it is
419(yourHomeDir)/kdepim/korganizer/mycalendar.ics 423(yourHomeDir)/kdepim/korganizer/mycalendar.ics
420on Zaurus, Windows and Linux. 424on Zaurus, Windows and Linux.
421To load the old file, choose menu 425To load the old file, choose menu
422File-Load calendar backup. 426File-Load calendar backup.
423(It should be loaded automatically 427(It should be loaded automatically
424at startup with a warning message displayed). 428at startup with a warning message displayed).
425The place of the configuration file has changed too. 429The place of the configuration file has changed too.
426If you want to use your old KO/Pi config, 430If you want to use your old KO/Pi config,
427copy it to 431copy it to
428(yourHomeDir)/kdepim/config/korganizerrc 432(yourHomeDir)/kdepim/config/korganizerrc
429Please read VERSION 1.9.0 - topic 3) as well! 433Please read VERSION 1.9.0 - topic 3) as well!
430 434
431 +++ IMPORTANT 2 +++ 435 +++ IMPORTANT 2 +++
432 436
433Because of the new paths, you will need 437Because of the new paths, you will need
434a new version of the KO/Pi alarm applet 438a new version of the KO/Pi alarm applet
435for Zaurus. 439for Zaurus.
436Use version >= 1.9.1 440Use version >= 1.9.1
437 441
4382) 4422)
439Now the QWhat'sThis Icon works for items 443Now the QWhat'sThis Icon works for items
440in the month view as well. 444in the month view as well.
441(See VERSION 1.7.8 Topic 1) ). 445(See VERSION 1.7.8 Topic 1) ).
4423) 4463)
443You can import birtsdays/anniversaries 447You can import birtsdays/anniversaries
444from KA/Pi into KO/Pi. 448from KA/Pi into KO/Pi.
445Choose menu File-Import birthdays. 449Choose menu File-Import birthdays.
446If you import twice, already imported items 450If you import twice, already imported items
447will not be imported again, if they 451will not be imported again, if they
448have not been changed in KO/Pi. 452have not been changed in KO/Pi.
4494) 4534)
450When syncing with sharp DTM, now a progress 454When syncing with sharp DTM, now a progress
451is shown, when the data is written back. 455is shown, when the data is written back.
452If there is much data in KO/Pi and no data 456If there is much data in KO/Pi and no data
453in DTM, that can take a long time. 457in DTM, that can take a long time.
454(But only for the first time ). 458(But only for the first time ).
4555) 4595)
456In the search dialog, you can search 460In the search dialog, you can search
457now for the name/email of an attendee 461now for the name/email of an attendee
458of an event/todo. 462of an event/todo.
459To get more space for displaying 463To get more space for displaying
460search results, the buttons 464search results, the buttons
461for "search" and "close" on the 465for "search" and "close" on the
462bottom are removed in the PDA version. 466bottom are removed in the PDA version.
463You have to click OK in the top right 467You have to click OK in the top right
464corner to do a search. 468corner to do a search.
4656) 4696)
466Now it is possible to disable the displaying 470Now it is possible to disable the displaying
467of todo items in the Allday part of the Agenda. 471of todo items in the Allday part of the Agenda.
468Choose Menu Action-Configure, 472Choose Menu Action-Configure,
469TAB Todo View, checkbox 473TAB Todo View, checkbox
470"Allday Agenda view shows todos" 474"Allday Agenda view shows todos"
4717) 4757)
472If FastLoad is enabled, now the settings and the 476If FastLoad is enabled, now the settings and the
473calendar data are saved, when KO/Pi is closed. 477calendar data are saved, when KO/Pi is closed.
474(If no Fastload is enabled, KO/Pi saves 478(If no Fastload is enabled, KO/Pi saves
475the data as well, of course) 479the data as well, of course)
4768) 4808)
477The Agenda View has a minimize-splitter now, 481The Agenda View has a minimize-splitter now,
478such that the height of the allday part can be 482such that the height of the allday part can be
479changed quickly. 483changed quickly.
480 484
481********** VERSION 1.9.0 ************ 485********** VERSION 1.9.0 ************
4821) 4861)
483KO/Pi is now merged with the new microKDE from KA/Pi. 487KO/Pi is now merged with the new microKDE from KA/Pi.
484KO/Pi accesses now KA/Pi as the addressbook. 488KO/Pi accesses now KA/Pi as the addressbook.
485The other ddressbook-plugins are not working any longer. 489The other ddressbook-plugins are not working any longer.
486(It is planned, that later KA/Pi itself uses these plugins) 490(It is planned, that later KA/Pi itself uses these plugins)
487New versions of KO/Pi are only available 491New versions of KO/Pi are only available
488together with KA/Pi as the KDE-Pim/Pi package. 492together with KA/Pi as the KDE-Pim/Pi package.
4892) 4932)
490If you click on an attendee of a meeting in the 494If you click on an attendee of a meeting in the
491event viewer, a detailed summary of the 495event viewer, a detailed summary of the
492attendee is shown. 496attendee is shown.
4933) 4973)
494The place of the configuration file has changed. 498The place of the configuration file has changed.
495If you want to use your old KO/Pi config, copy 499If you want to use your old KO/Pi config, copy
496Applications/korganizer/config_korganizerrc 500Applications/korganizer/config_korganizerrc
497to 501to
498Applications/korganizer/config/korganizerrc 502Applications/korganizer/config/korganizerrc
499 503
500********** VERSION 1.7.8 ************ 504********** VERSION 1.7.8 ************
5011) 5051)
502Now the QWhat'sThis ist working. 506Now the QWhat'sThis ist working.
503Enable the QWhat'sThis icon in the toolbar. 507Enable the QWhat'sThis icon in the toolbar.
504(You have to restart to reload the changed toolbar config). 508(You have to restart to reload the changed toolbar config).
505Now click on the QWhat'sThis Icon 509Now click on the QWhat'sThis Icon
506in the top right corner of KO/Pi. 510in the top right corner of KO/Pi.
507Then click on an item in the Agenda View: 511Then click on an item in the Agenda View:
508You will get a detailed display of the items content. 512You will get a detailed display of the items content.
5092) 5132)
510Some other very minor changes. 514Some other very minor changes.
511But I have forgotten the details ... 515But I have forgotten the details ...
512For that reason I start this log here: 516For that reason I start this log here:
513To document my changes, when I am doing it. 517To document my changes, when I am doing it.
514 518
515********** VERSION 1.7.7 ************ 519********** VERSION 1.7.7 ************
516Stable Version of KO/Pi \ No newline at end of file 520Stable Version of KO/Pi \ No newline at end of file
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index c75b4bc..9ef97c9 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -2226,754 +2226,754 @@ void KABCore::requestForBirthdayList(const QString& sourceChannel, const QString
2226 QString anni; 2226 QString anni;
2227 QString formattedbday; 2227 QString formattedbday;
2228 2228
2229 for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) 2229 for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it )
2230 { 2230 {
2231 if ( ! bar.isVisible() ) 2231 if ( ! bar.isVisible() )
2232 return; 2232 return;
2233 bar.setProgress( count++ ); 2233 bar.setProgress( count++ );
2234 qApp->processEvents(); 2234 qApp->processEvents();
2235 bday = (*it).birthday().date(); 2235 bday = (*it).birthday().date();
2236 anni = (*it).custom("KADDRESSBOOK", "X-Anniversary" ); 2236 anni = (*it).custom("KADDRESSBOOK", "X-Anniversary" );
2237 2237
2238 if ( bday.isValid() || !anni.isEmpty()) 2238 if ( bday.isValid() || !anni.isEmpty())
2239 { 2239 {
2240 if (bday.isValid()) 2240 if (bday.isValid())
2241 formattedbday = KGlobal::locale()->formatDate(bday, true, KLocale::ISODate); 2241 formattedbday = KGlobal::locale()->formatDate(bday, true, KLocale::ISODate);
2242 else 2242 else
2243 formattedbday = "NOTVALID"; 2243 formattedbday = "NOTVALID";
2244 if (anni.isEmpty()) 2244 if (anni.isEmpty())
2245 anni = "INVALID"; 2245 anni = "INVALID";
2246 2246
2247 birthdayList.append(formattedbday); 2247 birthdayList.append(formattedbday);
2248 anniversaryList.append(anni); //should be ISODate 2248 anniversaryList.append(anni); //should be ISODate
2249 realNameList.append((*it).realName()); 2249 realNameList.append((*it).realName());
2250 preferredEmailList.append((*it).preferredEmail()); 2250 preferredEmailList.append((*it).preferredEmail());
2251 assembledNameList.append((*it).assembledName()); 2251 assembledNameList.append((*it).assembledName());
2252 uidList.append((*it).uid()); 2252 uidList.append((*it).uid());
2253 2253
2254 qDebug("found birthday in KA/Pi: %s,%s,%s,%s: %s, %s", (*it).realName().latin1(), (*it).preferredEmail().latin1(), (*it).assembledName().latin1(), (*it).uid().latin1(), formattedbday.latin1(), anni.latin1() ); 2254 qDebug("found birthday in KA/Pi: %s,%s,%s,%s: %s, %s", (*it).realName().latin1(), (*it).preferredEmail().latin1(), (*it).assembledName().latin1(), (*it).uid().latin1(), formattedbday.latin1(), anni.latin1() );
2255 } 2255 }
2256 } 2256 }
2257 2257
2258 bool res = ExternalAppHandler::instance()->returnBirthdayListFromKAPI(sourceChannel, uid, birthdayList, anniversaryList, realNameList, preferredEmailList, assembledNameList, uidList); 2258 bool res = ExternalAppHandler::instance()->returnBirthdayListFromKAPI(sourceChannel, uid, birthdayList, anniversaryList, realNameList, preferredEmailList, assembledNameList, uidList);
2259 2259
2260} 2260}
2261 2261
2262/* this method will be called through the QCop interface from other apps to show details of a contact. 2262/* this method will be called through the QCop interface from other apps to show details of a contact.
2263 */ 2263 */
2264void KABCore::requestForDetails(const QString& sourceChannel, const QString& sessionuid, const QString& name, const QString& email, const QString& uid) 2264void KABCore::requestForDetails(const QString& sourceChannel, const QString& sessionuid, const QString& name, const QString& email, const QString& uid)
2265{ 2265{
2266 qDebug("KABCore::requestForDetails %s %s %s %s %s", sourceChannel.latin1(), sessionuid.latin1(), name.latin1(), email.latin1(), uid.latin1()); 2266 qDebug("KABCore::requestForDetails %s %s %s %s %s", sourceChannel.latin1(), sessionuid.latin1(), name.latin1(), email.latin1(), uid.latin1());
2267 2267
2268 QString foundUid = QString::null; 2268 QString foundUid = QString::null;
2269 if ( ! uid.isEmpty() ) { 2269 if ( ! uid.isEmpty() ) {
2270 Addressee adrr = mAddressBook->findByUid( uid ); 2270 Addressee adrr = mAddressBook->findByUid( uid );
2271 if ( !adrr.isEmpty() ) { 2271 if ( !adrr.isEmpty() ) {
2272 foundUid = uid; 2272 foundUid = uid;
2273 } 2273 }
2274 if ( email == "sendbacklist" ) { 2274 if ( email == "sendbacklist" ) {
2275 //qDebug("ssssssssssssssssssssssend "); 2275 //qDebug("ssssssssssssssssssssssend ");
2276 QStringList nameList; 2276 QStringList nameList;
2277 QStringList emailList; 2277 QStringList emailList;
2278 QStringList uidList; 2278 QStringList uidList;
2279 nameList.append(adrr.realName()); 2279 nameList.append(adrr.realName());
2280 emailList = adrr.emails(); 2280 emailList = adrr.emails();
2281 uidList.append( adrr.preferredEmail()); 2281 uidList.append( adrr.preferredEmail());
2282 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI("QPE/Application/ompi", uid, nameList, emailList, uidList); 2282 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI("QPE/Application/ompi", uid, nameList, emailList, uidList);
2283 return; 2283 return;
2284 } 2284 }
2285 2285
2286 } 2286 }
2287 2287
2288 if ( email == "sendbacklist" ) 2288 if ( email == "sendbacklist" )
2289 return; 2289 return;
2290 if (foundUid.isEmpty()) 2290 if (foundUid.isEmpty())
2291 { 2291 {
2292 //find the uid of the person first 2292 //find the uid of the person first
2293 Addressee::List namelist; 2293 Addressee::List namelist;
2294 Addressee::List emaillist; 2294 Addressee::List emaillist;
2295 2295
2296 if (!name.isEmpty()) 2296 if (!name.isEmpty())
2297 namelist = mAddressBook->findByName( name ); 2297 namelist = mAddressBook->findByName( name );
2298 2298
2299 if (!email.isEmpty()) 2299 if (!email.isEmpty())
2300 emaillist = mAddressBook->findByEmail( email ); 2300 emaillist = mAddressBook->findByEmail( email );
2301 qDebug("count %d %d ", namelist.count(),emaillist.count() ); 2301 qDebug("count %d %d ", namelist.count(),emaillist.count() );
2302 //check if we have a match in Namelist and Emaillist 2302 //check if we have a match in Namelist and Emaillist
2303 if ((namelist.count() == 0) && (emaillist.count() > 0)) { 2303 if ((namelist.count() == 0) && (emaillist.count() > 0)) {
2304 foundUid = emaillist[0].uid(); 2304 foundUid = emaillist[0].uid();
2305 } 2305 }
2306 else if ((namelist.count() > 0) && (emaillist.count() == 0)) 2306 else if ((namelist.count() > 0) && (emaillist.count() == 0))
2307 foundUid = namelist[0].uid(); 2307 foundUid = namelist[0].uid();
2308 else 2308 else
2309 { 2309 {
2310 for (int i = 0; i < namelist.count(); i++) 2310 for (int i = 0; i < namelist.count(); i++)
2311 { 2311 {
2312 for (int j = 0; j < emaillist.count(); j++) 2312 for (int j = 0; j < emaillist.count(); j++)
2313 { 2313 {
2314 if (namelist[i] == emaillist[j]) 2314 if (namelist[i] == emaillist[j])
2315 { 2315 {
2316 foundUid = namelist[i].uid(); 2316 foundUid = namelist[i].uid();
2317 } 2317 }
2318 } 2318 }
2319 } 2319 }
2320 } 2320 }
2321 } 2321 }
2322 else 2322 else
2323 { 2323 {
2324 foundUid = uid; 2324 foundUid = uid;
2325 } 2325 }
2326 2326
2327 if (!foundUid.isEmpty()) 2327 if (!foundUid.isEmpty())
2328 { 2328 {
2329 2329
2330 // raise Ka/Pi if it is in the background 2330 // raise Ka/Pi if it is in the background
2331#ifndef DESKTOP_VERSION 2331#ifndef DESKTOP_VERSION
2332#ifndef KORG_NODCOP 2332#ifndef KORG_NODCOP
2333 //QCopEnvelope e("QPE/Application/kapi", "raise()"); 2333 //QCopEnvelope e("QPE/Application/kapi", "raise()");
2334#endif 2334#endif
2335#endif 2335#endif
2336 2336
2337 mMainWindow->showMaximized(); 2337 mMainWindow->showMaximized();
2338 mMainWindow-> raise(); 2338 mMainWindow-> raise();
2339 2339
2340 mViewManager->setSelected( "", false); 2340 mViewManager->setSelected( "", false);
2341 mViewManager->refreshView( "" ); 2341 mViewManager->refreshView( "" );
2342 mViewManager->setSelected( foundUid, true ); 2342 mViewManager->setSelected( foundUid, true );
2343 mViewManager->refreshView( foundUid ); 2343 mViewManager->refreshView( foundUid );
2344 2344
2345 if ( !mMultipleViewsAtOnce ) 2345 if ( !mMultipleViewsAtOnce )
2346 { 2346 {
2347 setDetailsVisible( true ); 2347 setDetailsVisible( true );
2348 mActionDetails->setChecked(true); 2348 mActionDetails->setChecked(true);
2349 } 2349 }
2350 } 2350 }
2351} 2351}
2352 2352
2353void KABCore::whatsnew() 2353void KABCore::whatsnew()
2354{ 2354{
2355 KApplication::showFile( "KDE-Pim/Pi Version Info", "kdepim/WhatsNew.txt" ); 2355 KApplication::showFile( "KDE-Pim/Pi Version Info", "kdepim/WhatsNew.txt" );
2356} 2356}
2357void KABCore::synchowto() 2357void KABCore::synchowto()
2358{ 2358{
2359 KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/SyncHowto.txt" ); 2359 KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/SyncHowto.txt" );
2360} 2360}
2361void KABCore::kdesynchowto() 2361void KABCore::kdesynchowto()
2362{ 2362{
2363 KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/Zaurus-KDE_syncHowTo.txt" ); 2363 KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/Zaurus-KDE_syncHowTo.txt" );
2364} 2364}
2365void KABCore::multisynchowto() 2365void KABCore::multisynchowto()
2366{ 2366{
2367 KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/MultiSyncHowTo.txt" ); 2367 KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/MultiSyncHowTo.txt" );
2368} 2368}
2369void KABCore::faq() 2369void KABCore::faq()
2370{ 2370{
2371 KApplication::showFile( "KA/Pi FAQ", "kdepim/kaddressbook/kapiFAQ.txt" ); 2371 KApplication::showFile( "KA/Pi FAQ", "kdepim/kaddressbook/kapiFAQ.txt" );
2372} 2372}
2373 2373
2374#include <libkcal/syncdefines.h> 2374#include <libkcal/syncdefines.h>
2375 2375
2376KABC::Addressee KABCore::getLastSyncAddressee() 2376KABC::Addressee KABCore::getLastSyncAddressee()
2377{ 2377{
2378 Addressee lse; 2378 Addressee lse;
2379 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice(); 2379 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice();
2380 2380
2381 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 2381 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
2382 lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice ); 2382 lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice );
2383 if (lse.isEmpty()) { 2383 if (lse.isEmpty()) {
2384 qDebug("Creating new last-syncAddressee "); 2384 qDebug("Creating new last-syncAddressee ");
2385 lse.setUid( "last-syncAddressee-"+mCurrentSyncDevice ); 2385 lse.setUid( "last-syncAddressee-"+mCurrentSyncDevice );
2386 QString sum = ""; 2386 QString sum = "";
2387 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 2387 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
2388 sum = "E: "; 2388 sum = "E: ";
2389 lse.setFamilyName("!"+sum+mCurrentSyncDevice + i18n(" - sync event")); 2389 lse.setFamilyName("!"+sum+mCurrentSyncDevice + i18n(" - sync event"));
2390 lse.setRevision( mLastAddressbookSync ); 2390 lse.setRevision( mLastAddressbookSync );
2391 lse.setCategories( i18n("SyncEvent") ); 2391 lse.setCategories( i18n("SyncEvent") );
2392 mAddressBook->insertAddressee( lse ); 2392 mAddressBook->insertAddressee( lse );
2393 } 2393 }
2394 return lse; 2394 return lse;
2395} 2395}
2396int KABCore::takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full ) 2396int KABCore::takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full )
2397{ 2397{
2398 2398
2399 //void setZaurusId(int id); 2399 //void setZaurusId(int id);
2400 // int zaurusId() const; 2400 // int zaurusId() const;
2401 // void setZaurusUid(int id); 2401 // void setZaurusUid(int id);
2402 // int zaurusUid() const; 2402 // int zaurusUid() const;
2403 // void setZaurusStat(int id); 2403 // void setZaurusStat(int id);
2404 // int zaurusStat() const; 2404 // int zaurusStat() const;
2405 // 0 equal 2405 // 0 equal
2406 // 1 take local 2406 // 1 take local
2407 // 2 take remote 2407 // 2 take remote
2408 // 3 cancel 2408 // 3 cancel
2409 QDateTime lastSync = mLastAddressbookSync; 2409 QDateTime lastSync = mLastAddressbookSync;
2410 QDateTime localMod = local->revision(); 2410 QDateTime localMod = local->revision();
2411 QDateTime remoteMod = remote->revision(); 2411 QDateTime remoteMod = remote->revision();
2412 2412
2413 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice(); 2413 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice();
2414 2414
2415 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2415 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2416 bool remCh, locCh; 2416 bool remCh, locCh;
2417 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 2417 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
2418 2418
2419 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); 2419 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
2420 locCh = ( localMod > mLastAddressbookSync ); 2420 locCh = ( localMod > mLastAddressbookSync );
2421 if ( !remCh && ! locCh ) { 2421 if ( !remCh && ! locCh ) {
2422 //qDebug("both not changed "); 2422 //qDebug("both not changed ");
2423 lastSync = localMod.addDays(1); 2423 lastSync = localMod.addDays(1);
2424 if ( mode <= SYNC_PREF_ASK ) 2424 if ( mode <= SYNC_PREF_ASK )
2425 return 0; 2425 return 0;
2426 } else { 2426 } else {
2427 if ( locCh ) { 2427 if ( locCh ) {
2428 //qDebug("loc changed %s %s", localMod.toString().latin1(), mLastAddressbookSync.toString().latin1()); 2428 //qDebug("loc changed %s %s", localMod.toString().latin1(), mLastAddressbookSync.toString().latin1());
2429 lastSync = localMod.addDays( -1 ); 2429 lastSync = localMod.addDays( -1 );
2430 if ( !remCh ) 2430 if ( !remCh )
2431 remoteMod =( lastSync.addDays( -1 ) ); 2431 remoteMod =( lastSync.addDays( -1 ) );
2432 } else { 2432 } else {
2433 //qDebug(" not loc changed "); 2433 //qDebug(" not loc changed ");
2434 lastSync = localMod.addDays( 1 ); 2434 lastSync = localMod.addDays( 1 );
2435 if ( remCh ) 2435 if ( remCh )
2436 remoteMod =( lastSync.addDays( 1 ) ); 2436 remoteMod =( lastSync.addDays( 1 ) );
2437 2437
2438 } 2438 }
2439 } 2439 }
2440 full = true; 2440 full = true;
2441 if ( mode < SYNC_PREF_ASK ) 2441 if ( mode < SYNC_PREF_ASK )
2442 mode = SYNC_PREF_ASK; 2442 mode = SYNC_PREF_ASK;
2443 } else { 2443 } else {
2444 if ( localMod == remoteMod ) 2444 if ( localMod == remoteMod )
2445 return 0; 2445 return 0;
2446 2446
2447 } 2447 }
2448 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 2448 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
2449 2449
2450 //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , localMod, remote->lastModified().toString().latin1(), remoteMod); 2450 //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , localMod, remote->lastModified().toString().latin1(), remoteMod);
2451 //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() ); 2451 //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() );
2452 //full = true; //debug only 2452 //full = true; //debug only
2453 if ( full ) { 2453 if ( full ) {
2454 bool equ = ( (*local) == (*remote) ); 2454 bool equ = ( (*local) == (*remote) );
2455 if ( equ ) { 2455 if ( equ ) {
2456 //qDebug("equal "); 2456 //qDebug("equal ");
2457 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2457 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2458 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 2458 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
2459 } 2459 }
2460 if ( mode < SYNC_PREF_FORCE_LOCAL ) 2460 if ( mode < SYNC_PREF_FORCE_LOCAL )
2461 return 0; 2461 return 0;
2462 2462
2463 }//else //debug only 2463 }//else //debug only
2464 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 2464 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
2465 } 2465 }
2466 int result; 2466 int result;
2467 bool localIsNew; 2467 bool localIsNew;
2468 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , local->lastModified().toString().latin1() , remote->lastModified().toString().latin1() ); 2468 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , local->lastModified().toString().latin1() , remote->lastModified().toString().latin1() );
2469 2469
2470 if ( full && mode < SYNC_PREF_NEWEST ) 2470 if ( full && mode < SYNC_PREF_NEWEST )
2471 mode = SYNC_PREF_ASK; 2471 mode = SYNC_PREF_ASK;
2472 2472
2473 switch( mode ) { 2473 switch( mode ) {
2474 case SYNC_PREF_LOCAL: 2474 case SYNC_PREF_LOCAL:
2475 if ( lastSync > remoteMod ) 2475 if ( lastSync > remoteMod )
2476 return 1; 2476 return 1;
2477 if ( lastSync > localMod ) 2477 if ( lastSync > localMod )
2478 return 2; 2478 return 2;
2479 return 1; 2479 return 1;
2480 break; 2480 break;
2481 case SYNC_PREF_REMOTE: 2481 case SYNC_PREF_REMOTE:
2482 if ( lastSync > remoteMod ) 2482 if ( lastSync > remoteMod )
2483 return 1; 2483 return 1;
2484 if ( lastSync > localMod ) 2484 if ( lastSync > localMod )
2485 return 2; 2485 return 2;
2486 return 2; 2486 return 2;
2487 break; 2487 break;
2488 case SYNC_PREF_NEWEST: 2488 case SYNC_PREF_NEWEST:
2489 if ( localMod > remoteMod ) 2489 if ( localMod > remoteMod )
2490 return 1; 2490 return 1;
2491 else 2491 else
2492 return 2; 2492 return 2;
2493 break; 2493 break;
2494 case SYNC_PREF_ASK: 2494 case SYNC_PREF_ASK:
2495 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 2495 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
2496 if ( lastSync > remoteMod ) 2496 if ( lastSync > remoteMod )
2497 return 1; 2497 return 1;
2498 if ( lastSync > localMod ) 2498 if ( lastSync > localMod )
2499 return 2; 2499 return 2;
2500 localIsNew = localMod >= remoteMod; 2500 localIsNew = localMod >= remoteMod;
2501 //qDebug("conflict! ************************************** "); 2501 //qDebug("conflict! ************************************** ");
2502 { 2502 {
2503 KPIM::AddresseeChooser acd ( *local,*remote, localIsNew , this ); 2503 KPIM::AddresseeChooser acd ( *local,*remote, localIsNew , this );
2504 result = acd.executeD(localIsNew); 2504 result = acd.executeD(localIsNew);
2505 return result; 2505 return result;
2506 } 2506 }
2507 break; 2507 break;
2508 case SYNC_PREF_FORCE_LOCAL: 2508 case SYNC_PREF_FORCE_LOCAL:
2509 return 1; 2509 return 1;
2510 break; 2510 break;
2511 case SYNC_PREF_FORCE_REMOTE: 2511 case SYNC_PREF_FORCE_REMOTE:
2512 return 2; 2512 return 2;
2513 break; 2513 break;
2514 2514
2515 default: 2515 default:
2516 // SYNC_PREF_TAKE_BOTH not implemented 2516 // SYNC_PREF_TAKE_BOTH not implemented
2517 break; 2517 break;
2518 } 2518 }
2519 return 0; 2519 return 0;
2520} 2520}
2521 2521
2522 2522
2523bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode) 2523bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode)
2524{ 2524{
2525 bool syncOK = true; 2525 bool syncOK = true;
2526 int addedAddressee = 0; 2526 int addedAddressee = 0;
2527 int addedAddresseeR = 0; 2527 int addedAddresseeR = 0;
2528 int deletedAddresseeR = 0; 2528 int deletedAddresseeR = 0;
2529 int deletedAddresseeL = 0; 2529 int deletedAddresseeL = 0;
2530 int changedLocal = 0; 2530 int changedLocal = 0;
2531 int changedRemote = 0; 2531 int changedRemote = 0;
2532 2532
2533 QString mCurrentSyncName = syncManager->getCurrentSyncName(); 2533 QString mCurrentSyncName = syncManager->getCurrentSyncName();
2534 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice(); 2534 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice();
2535 2535
2536 //QPtrList<Addressee> el = local->rawAddressees(); 2536 //QPtrList<Addressee> el = local->rawAddressees();
2537 Addressee addresseeR; 2537 Addressee addresseeR;
2538 QString uid; 2538 QString uid;
2539 int take; 2539 int take;
2540 Addressee addresseeL; 2540 Addressee addresseeL;
2541 Addressee addresseeRSync; 2541 Addressee addresseeRSync;
2542 Addressee addresseeLSync; 2542 Addressee addresseeLSync;
2543 // KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees(); 2543 // KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees();
2544 //KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees(); 2544 //KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees();
2545 bool fullDateRange = false; 2545 bool fullDateRange = false;
2546 local->resetTempSyncStat(); 2546 local->resetTempSyncStat();
2547 mLastAddressbookSync = QDateTime::currentDateTime(); 2547 mLastAddressbookSync = QDateTime::currentDateTime();
2548 if ( syncManager->syncWithDesktop() ) { 2548 if ( syncManager->syncWithDesktop() ) {
2549 // remote->removeSyncInfo( QString());//remove all info 2549 // remote->removeSyncInfo( QString());//remove all info
2550 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 2550 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
2551 mLastAddressbookSync = KSyncManager::mRequestedSyncEvent; 2551 mLastAddressbookSync = KSyncManager::mRequestedSyncEvent;
2552 qDebug("using extern time for calendar sync: %s ", mLastAddressbookSync.toString().latin1() ); 2552 qDebug("using extern time for calendar sync: %s ", mLastAddressbookSync.toString().latin1() );
2553 } else { 2553 } else {
2554 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime "); 2554 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime ");
2555 } 2555 }
2556 } 2556 }
2557 QDateTime modifiedCalendar = mLastAddressbookSync; 2557 QDateTime modifiedCalendar = mLastAddressbookSync;
2558 addresseeLSync = getLastSyncAddressee(); 2558 addresseeLSync = getLastSyncAddressee();
2559 qDebug("Last Sync %s ", addresseeLSync.revision().toString().latin1()); 2559 qDebug("Last Sync %s ", addresseeLSync.revision().toString().latin1());
2560 addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName ); 2560 addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName );
2561 if ( !addresseeR.isEmpty() ) { 2561 if ( !addresseeR.isEmpty() ) {
2562 addresseeRSync = addresseeR; 2562 addresseeRSync = addresseeR;
2563 remote->removeAddressee(addresseeR ); 2563 remote->removeAddressee(addresseeR );
2564 2564
2565 } else { 2565 } else {
2566 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2566 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2567 addresseeRSync = addresseeLSync ; 2567 addresseeRSync = addresseeLSync ;
2568 } else { 2568 } else {
2569 qDebug("FULLDATE 1"); 2569 qDebug("FULLDATE 1");
2570 fullDateRange = true; 2570 fullDateRange = true;
2571 Addressee newAdd; 2571 Addressee newAdd;
2572 addresseeRSync = newAdd; 2572 addresseeRSync = newAdd;
2573 addresseeRSync.setFamilyName(mCurrentSyncName + i18n(" - sync addressee")); 2573 addresseeRSync.setFamilyName(mCurrentSyncName + i18n(" - sync addressee"));
2574 addresseeRSync.setUid("last-syncAddressee-"+mCurrentSyncName ); 2574 addresseeRSync.setUid("last-syncAddressee-"+mCurrentSyncName );
2575 addresseeRSync.setRevision( mLastAddressbookSync ); 2575 addresseeRSync.setRevision( mLastAddressbookSync );
2576 addresseeRSync.setCategories( i18n("SyncAddressee") ); 2576 addresseeRSync.setCategories( i18n("SyncAddressee") );
2577 } 2577 }
2578 } 2578 }
2579 if ( addresseeLSync.revision() == mLastAddressbookSync ) { 2579 if ( addresseeLSync.revision() == mLastAddressbookSync ) {
2580 qDebug("FULLDATE 2"); 2580 qDebug("FULLDATE 2");
2581 fullDateRange = true; 2581 fullDateRange = true;
2582 } 2582 }
2583 if ( ! fullDateRange ) { 2583 if ( ! fullDateRange ) {
2584 if ( addresseeLSync.revision() != addresseeRSync.revision() ) { 2584 if ( addresseeLSync.revision() != addresseeRSync.revision() ) {
2585 2585
2586 // qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() ); 2586 // qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() );
2587 //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec()); 2587 //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec());
2588 fullDateRange = true; 2588 fullDateRange = true;
2589 qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() ); 2589 qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() );
2590 } 2590 }
2591 } 2591 }
2592 // fullDateRange = true; // debug only! 2592 // fullDateRange = true; // debug only!
2593 if ( fullDateRange ) 2593 if ( fullDateRange )
2594 mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365); 2594 mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365);
2595 else 2595 else
2596 mLastAddressbookSync = addresseeLSync.revision(); 2596 mLastAddressbookSync = addresseeLSync.revision();
2597 // for resyncing if own file has changed 2597 // for resyncing if own file has changed
2598 // PENDING fixme later when implemented 2598 // PENDING fixme later when implemented
2599#if 0 2599#if 0
2600 if ( mCurrentSyncDevice == "deleteaftersync" ) { 2600 if ( mCurrentSyncDevice == "deleteaftersync" ) {
2601 mLastAddressbookSync = loadedFileVersion; 2601 mLastAddressbookSync = loadedFileVersion;
2602 qDebug("setting mLastAddressbookSync "); 2602 qDebug("setting mLastAddressbookSync ");
2603 } 2603 }
2604#endif 2604#endif
2605 2605
2606 //qDebug("*************************** "); 2606 //qDebug("*************************** ");
2607 // qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() ); 2607 // qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() );
2608 QStringList er = remote->uidList(); 2608 QStringList er = remote->uidList();
2609 Addressee inR ;//= er.first(); 2609 Addressee inR ;//= er.first();
2610 Addressee inL; 2610 Addressee inL;
2611 2611
2612 syncManager->showProgressBar(0, i18n("Syncing - close to abort!"), er.count()); 2612 syncManager->showProgressBar(0, i18n("Syncing - close to abort!"), er.count());
2613 2613
2614 int modulo = (er.count()/10)+1; 2614 int modulo = (er.count()/10)+1;
2615 int incCounter = 0; 2615 int incCounter = 0;
2616 while ( incCounter < er.count()) { 2616 while ( incCounter < er.count()) {
2617 if (syncManager->isProgressBarCanceled()) 2617 if (syncManager->isProgressBarCanceled())
2618 return false; 2618 return false;
2619 if ( incCounter % modulo == 0 ) 2619 if ( incCounter % modulo == 0 )
2620 syncManager->showProgressBar(incCounter); 2620 syncManager->showProgressBar(incCounter);
2621 2621
2622 uid = er[ incCounter ]; 2622 uid = er[ incCounter ];
2623 bool skipIncidence = false; 2623 bool skipIncidence = false;
2624 if ( uid.left(19) == QString("last-syncAddressee-") ) 2624 if ( uid.left(19) == QString("last-syncAddressee-") )
2625 skipIncidence = true; 2625 skipIncidence = true;
2626 QString idS,OidS; 2626 QString idS,OidS;
2627 qApp->processEvents(); 2627 qApp->processEvents();
2628 if ( !skipIncidence ) { 2628 if ( !skipIncidence ) {
2629 inL = local->findByUid( uid ); 2629 inL = local->findByUid( uid );
2630 inR = remote->findByUid( uid ); 2630 inR = remote->findByUid( uid );
2631 //inL.setResource( 0 ); 2631 //inL.setResource( 0 );
2632 //inR.setResource( 0 ); 2632 //inR.setResource( 0 );
2633 if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars 2633 if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars
2634 if ( !inL.resource() || inL.resource()->includeInSync() ) { 2634 if ( !inL.resource() || inL.resource()->includeInSync() ) {
2635 if ( take = takeAddressee( &inL, &inR, mode, fullDateRange ) ) { 2635 if ( take = takeAddressee( &inL, &inR, mode, fullDateRange ) ) {
2636 //qDebug("take %d %s ", take, inL.summary().latin1()); 2636 //qDebug("take %d %s ", take, inL.summary().latin1());
2637 if ( take == 3 ) 2637 if ( take == 3 )
2638 return false; 2638 return false;
2639 if ( take == 1 ) {// take local ********************** 2639 if ( take == 1 ) {// take local **********************
2640 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2640 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2641 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); 2641 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
2642 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) ); 2642 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) );
2643 local->insertAddressee( inL, false ); 2643 local->insertAddressee( inL, false );
2644 idS = inR.externalUID(); 2644 idS = inR.externalUID();
2645 OidS = inR.originalExternalUID(); 2645 OidS = inR.originalExternalUID();
2646 } 2646 }
2647 else 2647 else
2648 idS = inR.IDStr(); 2648 idS = inR.IDStr();
2649 remote->removeAddressee( inR ); 2649 remote->removeAddressee( inR );
2650 inR = inL; 2650 inR = inL;
2651 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 2651 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
2652 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2652 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2653 inR.setOriginalExternalUID( OidS ); 2653 inR.setOriginalExternalUID( OidS );
2654 inR.setExternalUID( idS ); 2654 inR.setExternalUID( idS );
2655 if ( syncManager->syncWithDesktop() ) 2655 if ( syncManager->syncWithDesktop() )
2656 inR.setIDStr("changed" ); 2656 inR.setIDStr("changed" );
2657 //inR.insertCustom( "KADDRESSBOOK", "X-KDESYNC","changed" ); 2657 //inR.insertCustom( "KADDRESSBOOK", "X-KDESYNC","changed" );
2658 } else { 2658 } else {
2659 inR.setIDStr( idS ); 2659 inR.setIDStr( idS );
2660 } 2660 }
2661 inR.setResource( 0 ); 2661 inR.setResource( 0 );
2662 remote->insertAddressee( inR , false); 2662 remote->insertAddressee( inR , false);
2663 ++changedRemote; 2663 ++changedRemote;
2664 } else { // take == 2 take remote ********************** 2664 } else { // take == 2 take remote **********************
2665 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2665 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2666 if ( inR.revision().date().year() < 2004 ) 2666 if ( inR.revision().date().year() < 2004 )
2667 inR.setRevision( modifiedCalendar ); 2667 inR.setRevision( modifiedCalendar );
2668 } 2668 }
2669 idS = inL.IDStr(); 2669 idS = inL.IDStr();
2670 local->removeAddressee( inL ); 2670 local->removeAddressee( inL );
2671 inL = inR; 2671 inL = inR;
2672 inL.setIDStr( idS ); 2672 inL.setIDStr( idS );
2673 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2673 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2674 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); 2674 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
2675 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) ); 2675 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) );
2676 } 2676 }
2677 inL.setResource( 0 ); 2677 inL.setResource( 0 );
2678 local->insertAddressee( inL , false ); 2678 local->insertAddressee( inL , false );
2679 ++changedLocal; 2679 ++changedLocal;
2680 } 2680 }
2681 } 2681 }
2682 } 2682 }
2683 } else { // no conflict ********** add or delete remote 2683 } else { // no conflict ********** add or delete remote
2684 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2684 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2685 QString des = addresseeLSync.note(); 2685 QString des = addresseeLSync.note();
2686 if ( des.find( inR.getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 2686 if ( des.find( inR.getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
2687 inR.setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 2687 inR.setTempSyncStat( SYNC_TEMPSTATE_DELETE );
2688 remote->insertAddressee( inR, false ); 2688 remote->insertAddressee( inR, false );
2689 ++deletedAddresseeR; 2689 ++deletedAddresseeR;
2690 } else { 2690 } else {
2691 inR.setRevision( modifiedCalendar ); 2691 inR.setRevision( modifiedCalendar );
2692 remote->insertAddressee( inR, false ); 2692 remote->insertAddressee( inR, false );
2693 inL = inR; 2693 inL = inR;
2694 inL.setIDStr( ":" ); 2694 inL.setIDStr( ":" );
2695 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); 2695 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
2696 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) ); 2696 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) );
2697 inL.setResource( 0 ); 2697 inL.setResource( 0 );
2698 local->insertAddressee( inL , false); 2698 local->insertAddressee( inL , false);
2699 ++addedAddressee; 2699 ++addedAddressee;
2700 } 2700 }
2701 } else { 2701 } else {
2702 if ( inR.revision() > mLastAddressbookSync || mode == 5 ) { 2702 if ( inR.revision() > mLastAddressbookSync || mode == 5 ) {
2703 inR.setRevision( modifiedCalendar ); 2703 inR.setRevision( modifiedCalendar );
2704 remote->insertAddressee( inR, false ); 2704 remote->insertAddressee( inR, false );
2705 inR.setResource( 0 ); 2705 inR.setResource( 0 );
2706 local->insertAddressee( inR, false ); 2706 local->insertAddressee( inR, false );
2707 ++addedAddressee; 2707 ++addedAddressee;
2708 } else { 2708 } else {
2709 // pending checkExternSyncAddressee(addresseeRSyncSharp, inR); 2709 // pending checkExternSyncAddressee(addresseeRSyncSharp, inR);
2710 remote->removeAddressee( inR ); 2710 remote->removeAddressee( inR );
2711 ++deletedAddresseeR; 2711 ++deletedAddresseeR;
2712 } 2712 }
2713 } 2713 }
2714 } 2714 }
2715 } 2715 }
2716 ++incCounter; 2716 ++incCounter;
2717 } 2717 }
2718 er.clear(); 2718 er.clear();
2719 QStringList el = local->uidList(); 2719 QStringList el = local->uidList();
2720 modulo = (el.count()/10)+1; 2720 modulo = (el.count()/10)+1;
2721 2721
2722 syncManager->showProgressBar(0, i18n("Add / remove addressees"), el.count()); 2722 syncManager->showProgressBar(0, i18n("Add / remove addressees"), el.count());
2723 incCounter = 0; 2723 incCounter = 0;
2724 while ( incCounter < el.count()) { 2724 while ( incCounter < el.count()) {
2725 qApp->processEvents(); 2725 qApp->processEvents();
2726 if (syncManager->isProgressBarCanceled()) 2726 if (syncManager->isProgressBarCanceled())
2727 return false; 2727 return false;
2728 if ( incCounter % modulo == 0 ) 2728 if ( incCounter % modulo == 0 )
2729 syncManager->showProgressBar(incCounter); 2729 syncManager->showProgressBar(incCounter);
2730 uid = el[ incCounter ]; 2730 uid = el[ incCounter ];
2731 bool skipIncidence = false; 2731 bool skipIncidence = false;
2732 if ( uid.left(19) == QString("last-syncAddressee-") ) 2732 if ( uid.left(19) == QString("last-syncAddressee-") )
2733 skipIncidence = true; 2733 skipIncidence = true;
2734 if ( !skipIncidence ) { 2734 if ( !skipIncidence ) {
2735 inL = local->findByUid( uid ); 2735 inL = local->findByUid( uid );
2736 if ( !inL.resource() || inL.resource()->includeInSync() ) { 2736 if ( !inL.resource() || inL.resource()->includeInSync() ) {
2737 inR = remote->findByUid( uid ); 2737 inR = remote->findByUid( uid );
2738 if ( inR.isEmpty() ) { / no conflict ********** add or delete local 2738 if ( inR.isEmpty() ) { // no conflict ********** add or delete local
2739 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2739 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2740 if ( !inL.getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 2740 if ( !inL.getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
2741 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL); 2741 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
2742 local->removeAddressee( inL ); 2742 local->removeAddressee( inL );
2743 ++deletedAddresseeL; 2743 ++deletedAddresseeL;
2744 } else { 2744 } else {
2745 if ( ! syncManager->mWriteBackExistingOnly ) { 2745 if ( ! syncManager->mWriteBackExistingOnly ) {
2746 inL.removeID(mCurrentSyncDevice ); 2746 inL.removeID(mCurrentSyncDevice );
2747 ++addedAddresseeR; 2747 ++addedAddresseeR;
2748 inL.setRevision( modifiedCalendar ); 2748 inL.setRevision( modifiedCalendar );
2749 local->insertAddressee( inL, false ); 2749 local->insertAddressee( inL, false );
2750 inR = inL; 2750 inR = inL;
2751 inR.setTempSyncStat( SYNC_TEMPSTATE_ADDED_EXTERNAL ); 2751 inR.setTempSyncStat( SYNC_TEMPSTATE_ADDED_EXTERNAL );
2752 inR.setResource( 0 ); 2752 inR.setResource( 0 );
2753 remote->insertAddressee( inR, false ); 2753 remote->insertAddressee( inR, false );
2754 } 2754 }
2755 } 2755 }
2756 } else { 2756 } else {
2757 if ( inL.revision() < mLastAddressbookSync && mode != 4 ) { 2757 if ( inL.revision() < mLastAddressbookSync && mode != 4 ) {
2758 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL); 2758 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
2759 local->removeAddressee( inL ); 2759 local->removeAddressee( inL );
2760 ++deletedAddresseeL; 2760 ++deletedAddresseeL;
2761 } else { 2761 } else {
2762 if ( ! syncManager->mWriteBackExistingOnly ) { 2762 if ( ! syncManager->mWriteBackExistingOnly ) {
2763 ++addedAddresseeR; 2763 ++addedAddresseeR;
2764 inL.setRevision( modifiedCalendar ); 2764 inL.setRevision( modifiedCalendar );
2765 local->insertAddressee( inL, false ); 2765 local->insertAddressee( inL, false );
2766 inR = inL; 2766 inR = inL;
2767 inR.setIDStr( ":" ); 2767 inR.setIDStr( ":" );
2768 inR.setResource( 0 ); 2768 inR.setResource( 0 );
2769 remote->insertAddressee( inR, false ); 2769 remote->insertAddressee( inR, false );
2770 } 2770 }
2771 } 2771 }
2772 } 2772 }
2773 } 2773 }
2774 } 2774 }
2775 } 2775 }
2776 ++incCounter; 2776 ++incCounter;
2777 } 2777 }
2778 el.clear(); 2778 el.clear();
2779 syncManager->hideProgressBar(); 2779 syncManager->hideProgressBar();
2780 mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 ); 2780 mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 );
2781 // get rid of micro seconds 2781 // get rid of micro seconds
2782 QTime t = mLastAddressbookSync.time(); 2782 QTime t = mLastAddressbookSync.time();
2783 mLastAddressbookSync.setTime( QTime (t.hour (), t.minute (), t.second () ) ); 2783 mLastAddressbookSync.setTime( QTime (t.hour (), t.minute (), t.second () ) );
2784 addresseeLSync.setRevision( mLastAddressbookSync ); 2784 addresseeLSync.setRevision( mLastAddressbookSync );
2785 addresseeRSync.setRevision( mLastAddressbookSync ); 2785 addresseeRSync.setRevision( mLastAddressbookSync );
2786 addresseeRSync.setRole( i18n("!Remote from: ")+mCurrentSyncName ) ; 2786 addresseeRSync.setRole( i18n("!Remote from: ")+mCurrentSyncName ) ;
2787 addresseeLSync.setRole(i18n("!Local from: ") + mCurrentSyncName ); 2787 addresseeLSync.setRole(i18n("!Local from: ") + mCurrentSyncName );
2788 addresseeRSync.setGivenName( i18n("!DO NOT EDIT!") ) ; 2788 addresseeRSync.setGivenName( i18n("!DO NOT EDIT!") ) ;
2789 addresseeLSync.setGivenName(i18n("!DO NOT EDIT!") ); 2789 addresseeLSync.setGivenName(i18n("!DO NOT EDIT!") );
2790 addresseeRSync.setOrganization( "!"+mLastAddressbookSync.toString() ) ; 2790 addresseeRSync.setOrganization( "!"+mLastAddressbookSync.toString() ) ;
2791 addresseeLSync.setOrganization("!"+ mLastAddressbookSync.toString() ); 2791 addresseeLSync.setOrganization("!"+ mLastAddressbookSync.toString() );
2792 addresseeRSync.setNote( "" ) ; 2792 addresseeRSync.setNote( "" ) ;
2793 addresseeLSync.setNote( "" ); 2793 addresseeLSync.setNote( "" );
2794 2794
2795 if ( mGlobalSyncMode == SYNC_MODE_NORMAL) 2795 if ( mGlobalSyncMode == SYNC_MODE_NORMAL)
2796 remote->insertAddressee( addresseeRSync, false ); 2796 remote->insertAddressee( addresseeRSync, false );
2797 local->insertAddressee( addresseeLSync, false ); 2797 local->insertAddressee( addresseeLSync, false );
2798 QString mes; 2798 QString mes;
2799 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n"),addedAddressee, addedAddresseeR, changedLocal, changedRemote, deletedAddresseeL, deletedAddresseeR ); 2799 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n"),addedAddressee, addedAddresseeR, changedLocal, changedRemote, deletedAddresseeL, deletedAddresseeR );
2800 qDebug( mes ); 2800 qDebug( mes );
2801 if ( syncManager->mShowSyncSummary ) { 2801 if ( syncManager->mShowSyncSummary ) {
2802 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes, 2802 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes,
2803 i18n("KA/Pi Synchronization"),i18n("Write back"))) { 2803 i18n("KA/Pi Synchronization"),i18n("Write back"))) {
2804 qDebug("cancelled "); 2804 qDebug("cancelled ");
2805 return false; 2805 return false;
2806 } 2806 }
2807 } 2807 }
2808 return syncOK; 2808 return syncOK;
2809} 2809}
2810 2810
2811 2811
2812//this is a overwritten callbackmethods from the syncinterface 2812//this is a overwritten callbackmethods from the syncinterface
2813bool KABCore::sync(KSyncManager* manager, QString filename, int mode) 2813bool KABCore::sync(KSyncManager* manager, QString filename, int mode)
2814{ 2814{
2815 2815
2816 //pending prepare addresseeview for output 2816 //pending prepare addresseeview for output
2817 //pending detect, if remote file has REV field. if not switch to external sync 2817 //pending detect, if remote file has REV field. if not switch to external sync
2818 mGlobalSyncMode = SYNC_MODE_NORMAL; 2818 mGlobalSyncMode = SYNC_MODE_NORMAL;
2819 QString mCurrentSyncDevice = manager->getCurrentSyncDevice(); 2819 QString mCurrentSyncDevice = manager->getCurrentSyncDevice();
2820 2820
2821 AddressBook abLocal(filename,"syncContact"); 2821 AddressBook abLocal(filename,"syncContact");
2822 bool syncOK = false; 2822 bool syncOK = false;
2823 if ( abLocal.load() ) { 2823 if ( abLocal.load() ) {
2824 qDebug("AB loaded %s,sync mode %d",filename.latin1(), mode ); 2824 qDebug("AB loaded %s,sync mode %d",filename.latin1(), mode );
2825 bool external = false; 2825 bool external = false;
2826 bool isXML = false; 2826 bool isXML = false;
2827 if ( filename.right(4) == ".xml") { 2827 if ( filename.right(4) == ".xml") {
2828 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 2828 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
2829 isXML = true; 2829 isXML = true;
2830 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice, true ); 2830 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice, true );
2831 } else { 2831 } else {
2832 external = !manager->mIsKapiFile; 2832 external = !manager->mIsKapiFile;
2833 if ( external ) { 2833 if ( external ) {
2834 qDebug("Setting vcf mode to external "); 2834 qDebug("Setting vcf mode to external ");
2835 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 2835 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
2836 AddressBook::Iterator it; 2836 AddressBook::Iterator it;
2837 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 2837 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
2838 (*it).setID( mCurrentSyncDevice, (*it).uid() ); 2838 (*it).setID( mCurrentSyncDevice, (*it).uid() );
2839 (*it).computeCsum( mCurrentSyncDevice ); 2839 (*it).computeCsum( mCurrentSyncDevice );
2840 } 2840 }
2841 } 2841 }
2842 } 2842 }
2843 //AddressBook::Iterator it; 2843 //AddressBook::Iterator it;
2844 //QStringList vcards; 2844 //QStringList vcards;
2845 //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 2845 //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
2846 // qDebug("Name %s ", (*it).familyName().latin1()); 2846 // qDebug("Name %s ", (*it).familyName().latin1());
2847 //} 2847 //}
2848 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode ); 2848 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode );
2849 if ( syncOK ) { 2849 if ( syncOK ) {
2850 if ( syncManager->mWriteBackFile ) 2850 if ( syncManager->mWriteBackFile )
2851 { 2851 {
2852 if ( external ) 2852 if ( external )
2853 abLocal.removeSyncAddressees( !isXML); 2853 abLocal.removeSyncAddressees( !isXML);
2854 qDebug("Saving remote AB "); 2854 qDebug("Saving remote AB ");
2855 if ( ! abLocal.saveAB()) 2855 if ( ! abLocal.saveAB())
2856 qDebug("Error writing back AB to file "); 2856 qDebug("Error writing back AB to file ");
2857 if ( external ) { 2857 if ( external ) {
2858 // afterwrite processing 2858 // afterwrite processing
2859 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice ,isXML); 2859 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice ,isXML);
2860 } 2860 }
2861 } 2861 }
2862 } 2862 }
2863 setModified(); 2863 setModified();
2864 2864
2865 } 2865 }
2866 if ( syncOK ) 2866 if ( syncOK )
2867 mViewManager->refreshView(); 2867 mViewManager->refreshView();
2868 return syncOK; 2868 return syncOK;
2869 2869
2870} 2870}
2871void KABCore::removeSyncInfo( QString syncProfile) 2871void KABCore::removeSyncInfo( QString syncProfile)
2872{ 2872{
2873 qDebug("AB:removeSyncInfo for profile %s ", syncProfile.latin1()); 2873 qDebug("AB:removeSyncInfo for profile %s ", syncProfile.latin1());
2874 mAddressBook->removeSyncInfo( syncProfile ); 2874 mAddressBook->removeSyncInfo( syncProfile );
2875 setModified(); 2875 setModified();
2876} 2876}
2877 2877
2878 2878
2879//this is a overwritten callbackmethods from the syncinterface 2879//this is a overwritten callbackmethods from the syncinterface
2880bool KABCore::syncExternal(KSyncManager* manager, QString resource) 2880bool KABCore::syncExternal(KSyncManager* manager, QString resource)
2881{ 2881{
2882 if ( resource == "phone" ) 2882 if ( resource == "phone" )
2883 return syncPhone(); 2883 return syncPhone();
2884 disableBR( true ); 2884 disableBR( true );
2885 QString mCurrentSyncDevice = manager->getCurrentSyncDevice(); 2885 QString mCurrentSyncDevice = manager->getCurrentSyncDevice();
2886 2886
2887 AddressBook abLocal( resource,"syncContact"); 2887 AddressBook abLocal( resource,"syncContact");
2888 bool syncOK = false; 2888 bool syncOK = false;
2889 if ( abLocal.load() ) { 2889 if ( abLocal.load() ) {
2890 qDebug("AB sharp loaded ,sync device %s",mCurrentSyncDevice.latin1()); 2890 qDebug("AB sharp loaded ,sync device %s",mCurrentSyncDevice.latin1());
2891 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 2891 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
2892 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice, false ); 2892 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice, false );
2893 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, syncManager->mSyncAlgoPrefs ); 2893 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, syncManager->mSyncAlgoPrefs );
2894 if ( syncOK ) { 2894 if ( syncOK ) {
2895 if ( syncManager->mWriteBackFile ) { 2895 if ( syncManager->mWriteBackFile ) {
2896 abLocal.removeSyncAddressees( false ); 2896 abLocal.removeSyncAddressees( false );
2897 abLocal.saveAB(); 2897 abLocal.saveAB();
2898 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice, true ); 2898 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice, true );
2899 } 2899 }
2900 } else 2900 } else
2901 message( i18n("Sync cancelled or failed.") ); 2901 message( i18n("Sync cancelled or failed.") );
2902 setModified(); 2902 setModified();
2903 } 2903 }
2904 if ( syncOK ) 2904 if ( syncOK )
2905 mViewManager->refreshView(); 2905 mViewManager->refreshView();
2906 disableBR( false ); 2906 disableBR( false );
2907 return syncOK; 2907 return syncOK;
2908 2908
2909} 2909}
2910void KABCore::message( QString m ) 2910void KABCore::message( QString m )
2911{ 2911{
2912 topLevelWidget()->setCaption( m ); 2912 topLevelWidget()->setCaption( m );
2913 mMessageTimer->start( 15000, true ); 2913 mMessageTimer->start( 15000, true );
2914} 2914}
2915bool KABCore::syncPhone() 2915bool KABCore::syncPhone()
2916{ 2916{
2917 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice(); 2917 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice();
2918 QString fileName = getPhoneFile(); 2918 QString fileName = getPhoneFile();
2919 if ( !PhoneAccess::readFromPhone( fileName) ) { 2919 if ( !PhoneAccess::readFromPhone( fileName) ) {
2920 message(i18n("Phone access failed!")); 2920 message(i18n("Phone access failed!"));
2921 return false; 2921 return false;
2922 } 2922 }
2923 AddressBook abLocal( fileName,"syncContact"); 2923 AddressBook abLocal( fileName,"syncContact");
2924 bool syncOK = false; 2924 bool syncOK = false;
2925 { 2925 {
2926 abLocal.importFromFile( fileName ); 2926 abLocal.importFromFile( fileName );
2927 qDebug("AB phone loaded ,sync device %s",mCurrentSyncDevice.latin1()); 2927 qDebug("AB phone loaded ,sync device %s",mCurrentSyncDevice.latin1());
2928 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 2928 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
2929 abLocal.preparePhoneSync( mCurrentSyncDevice, true ); 2929 abLocal.preparePhoneSync( mCurrentSyncDevice, true );
2930 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice, true ); 2930 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice, true );
2931 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, syncManager->mSyncAlgoPrefs ); 2931 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, syncManager->mSyncAlgoPrefs );
2932 if ( syncOK ) { 2932 if ( syncOK ) {
2933 if ( syncManager->mWriteBackFile ) { 2933 if ( syncManager->mWriteBackFile ) {
2934 abLocal.removeSyncAddressees( true ); 2934 abLocal.removeSyncAddressees( true );
2935 abLocal.saveABphone( fileName ); 2935 abLocal.saveABphone( fileName );
2936 abLocal.findNewExtIds( fileName, mCurrentSyncDevice ); 2936 abLocal.findNewExtIds( fileName, mCurrentSyncDevice );
2937 //abLocal.preparePhoneSync( mCurrentSyncDevice, false ); 2937 //abLocal.preparePhoneSync( mCurrentSyncDevice, false );
2938 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice, true ); 2938 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice, true );
2939 } 2939 }
2940 } 2940 }
2941 setModified(); 2941 setModified();
2942 } 2942 }
2943 if ( syncOK ) 2943 if ( syncOK )
2944 mViewManager->refreshView(); 2944 mViewManager->refreshView();
2945 return syncOK; 2945 return syncOK;
2946} 2946}
2947void KABCore::getFile( bool success ) 2947void KABCore::getFile( bool success )
2948{ 2948{
2949 if ( ! success ) { 2949 if ( ! success ) {
2950 message( i18n("Error receiving file. Nothing changed!") ); 2950 message( i18n("Error receiving file. Nothing changed!") );
2951 return; 2951 return;
2952 } 2952 }
2953 int count = mAddressBook->importFromFile( sentSyncFile() , false, true ); 2953 int count = mAddressBook->importFromFile( sentSyncFile() , false, true );
2954 if ( count ) 2954 if ( count )
2955 setModified( true ); 2955 setModified( true );
2956 message( i18n("Pi-Sync successful!") ); 2956 message( i18n("Pi-Sync successful!") );
2957 mViewManager->refreshView(); 2957 mViewManager->refreshView();
2958} 2958}
2959void KABCore::syncFileRequest() 2959void KABCore::syncFileRequest()
2960{ 2960{
2961 if ( KABPrefs::instance()->mPassiveSyncWithDesktop ) { 2961 if ( KABPrefs::instance()->mPassiveSyncWithDesktop ) {
2962 syncManager->slotSyncMenu( 999 ); 2962 syncManager->slotSyncMenu( 999 );
2963 } 2963 }
2964 mAddressBook->export2File( sentSyncFile() ); 2964 mAddressBook->export2File( sentSyncFile() );
2965} 2965}
2966QString KABCore::sentSyncFile() 2966QString KABCore::sentSyncFile()
2967{ 2967{
2968#ifdef DESKTOP_VERSION 2968#ifdef DESKTOP_VERSION
2969 return locateLocal( "tmp", "copysyncab.vcf" ); 2969 return locateLocal( "tmp", "copysyncab.vcf" );
2970#else 2970#else
2971 return QString( "/tmp/copysyncab.vcf" ); 2971 return QString( "/tmp/copysyncab.vcf" );
2972#endif 2972#endif
2973} 2973}
2974 2974
2975void KABCore::setCaptionBack() 2975void KABCore::setCaptionBack()
2976{ 2976{
2977 mMessageTimer->stop(); 2977 mMessageTimer->stop();
2978 topLevelWidget()->setCaption( i18n("KAddressbook/Pi") ); 2978 topLevelWidget()->setCaption( i18n("KAddressbook/Pi") );
2979} 2979}