-rw-r--r-- | bin/kdepim/korganizer/Migration-HowTo.txt | 77 | ||||
-rw-r--r-- | libkcal/incidencebase.cpp | 10 |
2 files changed, 71 insertions, 16 deletions
diff --git a/bin/kdepim/korganizer/Migration-HowTo.txt b/bin/kdepim/korganizer/Migration-HowTo.txt index ca767c6..a5fa02c 100644 --- a/bin/kdepim/korganizer/Migration-HowTo.txt +++ b/bin/kdepim/korganizer/Migration-HowTo.txt | |||
@@ -1,299 +1,350 @@ | |||
1 | 1 | ||
2 | Migration HowTo Outlook 200X -> KDE | 2 | Migration HowTo Outlook 200X -> KDE |
3 | 3 | ||
4 | Version 1.0.1 | ||
5 | The latest version of this file can be downloaded from | ||
6 | http://sourceforge.net/projects/kdepimpi/ | ||
7 | Please choose there package/project/file: | ||
8 | general Files for KDE/Pim | ||
9 | MigrationHowTo_OL2KDE | ||
10 | MigrationHowTo_OL2KDE.txt | ||
11 | |||
12 | |||
4 | This HowTo describes the process of migrating data ( contact and calendar data ) from Outlook 200X to the PIM programs of the KDE-Desktop-Environment. | 13 | This HowTo describes the process of migrating data ( contact and calendar data ) from Outlook 200X to the PIM programs of the KDE-Desktop-Environment. |
5 | The PIM programs are KAdddressbook and KOrganizer, which may be used embedded in the Kontact PIM management framework. | 14 | The PIM programs are KAdddressbook and KOrganizer, which may be used embedded in the Kontact PIM management framework. |
6 | This HowTo describes version 1.9.3a of the migration tools. | 15 | This HowTo describes version 1.9.3a of the migration tools. |
7 | The migration tools are the platform independent versions of KAdddressbook and KOrganizer: KAdddressbook/Pi and KOrganizer/Pi. | 16 | The migration tools are the platform independent versions of KAdddressbook and KOrganizer: KAdddressbook/Pi and KOrganizer/Pi. |
8 | 17 | ||
9 | Content: | 18 | Content: |
10 | 19 | ||
11 | 1) How to start | 20 | 1) How to start |
12 | 2) How to import pst files in Outlook | 21 | 2) How to import pst files in Outlook |
13 | 3) Where to get the migration tools | 22 | 3) Where to get the migration tools |
14 | 4) How to install the migration tools | 23 | 4) How to install the migration tools |
15 | 5) How to get the contact data out of Outlook200X | 24 | 5) How to get the contact data out of Outlook200X |
16 | 6) How to get the calendar data out of Outlook200X | 25 | 6) How to get the calendar data out of Outlook200X |
26 | 7) How to import your contact data into Kontact | ||
27 | 8) How to import your calendar data into Kontact | ||
17 | 28 | ||
18 | APPENDIX A) Problems and solutions when reading contact data | 29 | APPENDIX A) Problems and solutions when reading contact data |
19 | APPENDIX B) Problems and solutions when reading calendar data | 30 | APPENDIX B) Problems and solutions when reading calendar data |
20 | 31 | ||
21 | **************************************** | 32 | **************************************** |
22 | 1) How to start | 33 | 1) How to start |
23 | **************************************** | 34 | **************************************** |
24 | 35 | ||
25 | For the migration we need the actual Outlook 200X data, which Outlook stores in *.pst files. | 36 | For the migration we need the actual Outlook 200X data, which Outlook stores in *.pst files. |
26 | Then we need an installed version of Outlook 200X to access these *.pst files. | 37 | Then we need an installed version of Outlook 200X to access these *.pst files. |
27 | When we have an Outllook 200X running with all data accessable, we need the migration tools. | 38 | When we have an Outllook 200X running with all data accessable, we need the migration tools. |
28 | 39 | ||
29 | If you have no Outlook200X installed please install the Outlook version, you need to a import your *.pst files. | 40 | If you have no Outlook200X installed please install the Outlook version, you need to a import your *.pst files. |
30 | If you have an Outlook200X installed with no contact/calendar data available, and you have some *.pst files please continue with: 2) How to import pst files in Outlook. | 41 | If you have an Outlook200X installed with no contact/calendar data available, and you have some *.pst files please continue with: 2) How to import pst files in Outlook. |
31 | If you have a running Outlook200X already with contact/calendar data available, please continue with: 3) Where to get the migration tools. | 42 | If you have a running Outlook200X already with contact/calendar data available, please continue with: 3) Where to get the migration tools. |
32 | 43 | ||
33 | 44 | ||
34 | **************************************** | 45 | **************************************** |
35 | 2) How to import pst files in Outlook | 46 | 2) How to import pst files in Outlook |
36 | **************************************** | 47 | **************************************** |
37 | 48 | ||
38 | MISSING | 49 | To open a local *.pst file in Outlook2003, choose menu: |
50 | File - Open - Outlook Data File ... | ||
51 | Now the data included in this file is shown | ||
52 | as folders of a newly added root folder in the Outlook folder view. | ||
53 | This root folder is probably not accessable from | ||
54 | the migration tools via OLE. | ||
55 | To access data stored in one of the subfolders, | ||
56 | copy this subfolder to a root folder, | ||
57 | which can be accessed from the migration tools via OLE. | ||
58 | (To know, which folder can be accessed, just perform 5.) or 6.) until | ||
59 | you get the Oulook import dialog!) | ||
60 | |||
61 | To copy it, right click on that subfolder and choose | ||
62 | Copy "<subfoldername>"... | ||
63 | in the popup menu. | ||
39 | 64 | ||
40 | **************************************** | 65 | **************************************** |
41 | 3) Where to get the migration tools | 66 | 3) Where to get the migration tools |
42 | **************************************** | 67 | **************************************** |
43 | 68 | ||
44 | The data migration is is performed with the Windows versions of KAdddressbook/Pi and KOrganizer/Pi. | 69 | The data migration is is performed with the Windows versions of KAdddressbook/Pi and KOrganizer/Pi. |
45 | Pi stands for platform-independend - platform-independend because the same program is available for different platforms, like Windows, Linux desktop and Sharp-Zaurus PDA. | 70 | Pi stands for platform-independend - platform-independend because the same program is available for different platforms, like Windows, Linux desktop and Sharp-Zaurus PDA. |
46 | Note: The Linux desktop versions of KOrganizer/Pi and KOrganizer/KDE-desktop are two different programs! You cannot use KOrganizer/Pi together with or embedded in the KDE-desktop environment. The same is valid for KAdddressbook/Pi. | 71 | Note: The Linux desktop versions of KOrganizer/Pi and KOrganizer/KDE-desktop are two different programs! You cannot use KOrganizer/Pi together with, or embedded in, the KDE-desktop environment. The same is valid for KAdddressbook/Pi. |
47 | 72 | ||
48 | The programs you need for the migration are: | 73 | The programs you need for the migration are: |
49 | a) KAdddressbook/Pi executeable + 2dlls + icons | 74 | a) KAdddressbook/Pi executeable + 2dlls + icons |
50 | b) KOrganizer/Pi executeable + icons | 75 | b) KOrganizer/Pi executeable + icons |
51 | c) The Qt3 library qt-mt331.dll and the MSVC library msvcr71.dll | 76 | c) The Qt3 library qt-mt331.dll and the MSVC library msvcr71.dll and the MSVC library mfc71u.dll |
52 | |||
53 | You can download all of them at: | 77 | You can download all of them at: |
54 | 78 | ||
55 | http://sourceforge.net/projects/kdepimpi/ | 79 | http://sourceforge.net/projects/kdepimpi/ |
56 | 80 | ||
57 | Download of a) and b) | 81 | Download of a) and b) |
58 | Please choose there package/project with name KDE/Pim | 82 | Please choose there package/project with name KDE/Pim |
59 | (Direct link: http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=112604 ) | 83 | (Direct link: http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=112604 ) |
60 | Choose there the topmost latest version and the files | 84 | Choose there the topmost latest version and the files |
61 | kapixxx-exe.zip | 85 | kapixxx-exe.zip |
62 | kopixxx-exe.zip | 86 | kopixxx-exe.zip |
63 | The latest version is currently ( 2004-07-13 ) 1.9.3a. | 87 | The latest version is currently ( 2004-07-13 ) 1.9.3a. |
64 | Such that the files to download are | 88 | Such that the files to download are |
65 | kapi193a-exe.zip | 89 | kapi193a-exe.zip |
66 | kopi193a-exe.zip | 90 | kopi193a-exe.zip |
67 | 91 | ||
68 | To download b) | 92 | To download b) |
69 | Please choose there package/project with name KO/Pi - general files. | 93 | Please choose there package/project/file: |
70 | (Direct link: http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=116719 ) | 94 | general Files for KDE/Pim |
95 | Needed Windows Dlls | ||
96 | kdepimdll.zip | ||
97 | |||
98 | (Direct link: http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=122438&release_id=256700 ) | ||
71 | Choose there the file: | 99 | Choose there the file: |
72 | kopidll.zip | 100 | kdepimdll.zip |
73 | 101 | ||
74 | Now you have downloaded the files | 102 | Now you have downloaded the files |
75 | 103 | ||
76 | kapi193a-exe.zip | 104 | kapi193a-exe.zip |
77 | kopi193a-exe.zip | 105 | kopi193a-exe.zip |
78 | kopidll.zip | 106 | kdepimdll.zip |
79 | 107 | ||
80 | and we can continue to install the files, which is simply unzipping them. | 108 | and we can continue to install the files, which is simply unzipping them. |
81 | 109 | ||
82 | 110 | ||
83 | **************************************** | 111 | **************************************** |
84 | 4) How to install the migration tools | 112 | 4) How to install the migration tools |
85 | **************************************** | 113 | **************************************** |
86 | 114 | ||
87 | You have downloaded the files | 115 | You have downloaded the files |
88 | 116 | ||
89 | kapi193a-exe.zip | 117 | kapi193a-exe.zip |
90 | kopi193a-exe.zip | 118 | kopi193a-exe.zip |
91 | kopidll.zip | 119 | kdepimdll.zip |
92 | 120 | ||
93 | Unzip these files. | 121 | Unzip these files. |
94 | The directory "pics" of the kopidll.zip is useless now and can be completely ignored. | ||
95 | Now choose an arbitrary installation directory, where to copy all the needed files together. | 122 | Now choose an arbitrary installation directory, where to copy all the needed files together. |
96 | You should have now the following files and the directory "kdepim" in the same directory: | 123 | You should have now the following files and the directory "kdepim" in the same directory: |
97 | kopi.exe | 124 | kopi.exe |
98 | kapi.exe | 125 | kapi.exe |
99 | microkabc_dir.dll | 126 | microkabc_dir.dll |
100 | microkabc_file.dll | 127 | microkabc_file.dll |
101 | msvcr71.dll | 128 | msvcr71.dll |
129 | mfc71u.dll | ||
102 | qt-mt331.dll | 130 | qt-mt331.dll |
103 | ReadMich.txt | 131 | ReadMich.txt |
104 | kdepim (directory) | 132 | kdepim (directory) |
105 | 133 | ||
106 | The directory "kdepim" should contain subdirectories | 134 | The directory "kdepim" should contain subdirectories |
107 | kaddressbook | 135 | kaddressbook |
108 | korganizer | 136 | korganizer |
109 | which itself contain some subdirectories with icons and help text. | 137 | which itself contain some subdirectories with icons and help text. |
110 | 138 | ||
111 | Now the migration tools are ready for use. | 139 | Now the migration tools are ready for use. |
112 | 140 | ||
113 | 141 | ||
114 | NOTE AND HINT for performing migration on many workstations: | 142 | NOTE AND HINT for performing migration on many workstations: |
115 | Just burn the content of the installation dir on a CD. | 143 | Just burn the content of the installation dir on a CD. |
116 | Then you can put the CD in every workstation and execute the migration tools from that CD directly. | 144 | Then you can put the CD in every workstation and execute the migration tools from that CD directly. |
117 | 145 | ||
118 | 146 | ||
119 | ************************************************************* | 147 | ************************************************************* |
120 | 5) How to get the contact data out of Outlook200X | 148 | 5) How to get the contact data out of Outlook200X |
121 | ************************************************************* | 149 | ************************************************************* |
122 | 150 | ||
123 | Note: When accessing Outlook to read the data, it should not be possible, that there is any data lost in Outlook, because the progam accesses Outlook only Read-Only. | 151 | Note: When accessing Outlook to read the data, it should not be possible, that there is any data lost in Outlook, because the progam accesses Outlook only Read-Only. |
124 | 152 | ||
125 | You have the file | 153 | You have the file |
126 | kapi.exe | 154 | kapi.exe |
127 | and the other needed files accessable on your workstation. | 155 | and the other needed files accessable on your workstation. |
128 | 156 | ||
129 | Getting the contact data | 157 | Getting the contact data |
130 | 158 | ||
131 | Please start kapi.exe. | 159 | Please start kapi.exe. |
132 | Choose menu: | 160 | Choose menu: |
133 | File - Import - Import from OL... | 161 | File - Import - Import from OL... |
134 | You will get a dialog which shows all "Personal Folders" of Outlook. | 162 | You will get a dialog which shows all "Personal Folders" of Outlook. |
135 | Choose the Contact Folder(s) you want to import and select them with a hook. | 163 | Choose the Contact Folder(s) you want to import and select them with a hook. |
136 | (All other folder but the contact containing folders are shown, but disabled) | 164 | (All other folder but the contact containing folders are shown, but disabled). |
165 | (If the data you want to import is not stored in one of the shown folders, | ||
166 | please read step 2.) and click on "close" ). | ||
137 | Click the "import" button. | 167 | Click the "import" button. |
138 | Now Outlook asks you to allow access to the contact data. | 168 | Now Outlook asks you to allow access to the contact data. |
139 | Select "Allow access" amd click "Yes" in this dialog. | 169 | Select "Allow access" amd click "Yes" in this dialog. |
140 | Now the importing is performed and KA/Pi will show a progress bar. | 170 | Now the importing is performed and KA/Pi will show a progress bar. |
141 | After importing, KA/Pi shows a dialog, how much contacts are imported. | 171 | After importing, KA/Pi shows a dialog, how much contacts are imported. |
142 | If you press a second time "import" , already imported contacts are not imported again. | 172 | If you press a second time "import" , already imported contacts are not imported again. |
143 | After importing you can choose another "Contact Folder" to import or close the import dialog. | 173 | After importing you can choose another "Contact Folder" to import or close the import dialog. |
144 | Please close the import dialog. | 174 | Please close the import dialog. |
145 | Now you see the imported contacts in KA/Pi on the left in the list view. | 175 | Now you see the imported contacts in KA/Pi on the left in the list view. |
146 | Please verify, that the import was correct. | 176 | Please verify, that the import was correct. |
147 | About problems of mapping particular Outlook-data-fields to KAdressbook-data-fields see Appendix A). | 177 | About problems of mapping particular Outlook-data-fields to KAdressbook-data-fields see Appendix A). |
148 | 178 | ||
149 | Choose menu: | 179 | Choose menu: |
150 | File - Save | 180 | File - Save |
151 | and close KA/Pi. | 181 | and close KA/Pi. |
152 | Now you should have the contact data in the file std.vcf in your home directory in the path | 182 | Now you should have the contact data in the file std.vcf in your home directory in the path |
153 | (YOURHOMEDIR)\kdepim\apps\kabc\std.vcf | 183 | (YOURHOMEDIR)\kdepim\apps\kabc\std.vcf |
154 | 184 | ||
155 | Copy that file to a moveable disk or memory stick or just copy it via network to the destination. | 185 | Copy that file to a moveable disk or memory stick or just copy it via network to the destination. |
156 | Import that file into KAddressbook/Kontact via Import - Import vcard. | 186 | Import that file into KAddressbook/Kontact via Import - Import vcard. |
187 | Details about importing you can read at: 7) How to import your contact data into Kontact | ||
157 | 188 | ||
158 | Now you have your Outlook200X contact data on the KDE desktop available and you are done with the migration of contacts. | 189 | Now you have your Outlook200X contact data on the KDE desktop available and you are done with the migration of contacts. |
159 | 190 | ||
160 | ************************************************************* | 191 | ************************************************************* |
161 | 6) How to get the calendar data out of Outlook200X | 192 | 6) How to get the calendar data out of Outlook200X |
162 | ************************************************************* | 193 | ************************************************************* |
163 | 194 | ||
164 | Note: When accessing Outlook to read the data, it should not be possible, that there is any data lost in Outlook, because the progam accesses Outlook only Read-Only. | 195 | Note: When accessing Outlook to read the data, it should not be possible, that there is any data lost in Outlook, because the progam accesses Outlook only Read-Only. |
165 | 196 | ||
166 | You have the file | 197 | You have the file |
167 | kopi.exe | 198 | kopi.exe |
168 | and the other needed files accessable on your workstation. | 199 | and the other needed files accessable on your workstation. |
169 | 200 | ||
170 | Getting the calendar data | 201 | Getting the calendar data |
171 | 202 | ||
172 | NOTE: Before extracting the calendar data, it is recommended to extract the contact data first. | 203 | NOTE: Before extracting the calendar data, it is recommended to extract the contact data first. |
173 | If you extract the contact data first, the identity (UID) of attendees of a meeting can be mapped correctly in the newly created appointments, such that you can access the attendee contact data later directly from KOrganizer. | 204 | If you extract the contact data first, the identity (UID) of attendees of a meeting can be mapped correctly in the newly created appointments, such that you can access the attendee contact data later directly from KOrganizer. |
174 | 205 | ||
175 | Please start kopi.exe. | 206 | Please start kopi.exe. |
176 | 207 | ||
177 | You will see a dialog, that you started KO/Pi for the first time and that the timezone configuration will be shown now. Confirm with "Ok". | 208 | You will see a dialog, that you started KO/Pi for the first time and that the timezone configuration will be shown now. Confirm with "Ok". |
178 | 209 | ||
179 | Now you will see the configuration dialog of KO/Pi. | 210 | Now you will see the configuration dialog of KO/Pi. |
180 | Please choose your timezone and adjust the daylight saving settings. | 211 | Please choose your timezone and adjust the daylight saving settings. |
181 | The dialog shows defaults for CET (Central European Time), such that users located in central Europe simply can press "OK" in that dialog. | 212 | The dialog shows defaults for CET (Central European Time), such that users located in central Europe simply can press "OK" in that dialog. |
182 | (Note: Don't forget to set the timezone in KDE KOrganizer before importing data there. The timezone in KDE KOrganizer is set per default to UTC (GMT), that is -1h of CET). | 213 | (Note: Don't forget to set the timezone in KDE KOrganizer before importing data there. The timezone in KDE KOrganizer is set per default to UTC (GMT), that is -1h of CET). |
183 | 214 | ||
184 | Now you will see the KO/Pi main window. | 215 | Now you will see the KO/Pi main window. |
185 | Choose menu: | 216 | Choose menu: |
186 | File - Import from OL | 217 | File - Import from OL |
187 | You will get a dialog which shows all "Personal Folders" of Outlook. | 218 | You will get a dialog which shows all "Personal Folders" of Outlook. |
188 | Choose the Calendar Folder(s) you want to import and select them with a hook. | 219 | Choose the Calendar Folder(s) you want to import and select them with a hook. |
189 | (All other folder but the calendar data containing folders are shown, but disabled) | 220 | (All other folder but the calendar data containing folders are shown, but disabled). |
221 | (If the data you want to import is not stored in one of the shown folders, | ||
222 | please read step 2.) and click on "close" ). | ||
190 | Click the "import" button. | 223 | Click the "import" button. |
191 | Now Outllok asks you to allow access to the contact data. | 224 | Now Outllok asks you to allow access to the contact data. |
192 | Select "Allow access" amd click "Yes" in this dialog. | 225 | Select "Allow access" amd click "Yes" in this dialog. |
193 | Now the importing is performed and KO/Pi will show a progress bar. | 226 | Now the importing is performed and KO/Pi will show a progress bar. |
194 | After importing, KO/Pi shows a dialog, how much calendar items are imported. | 227 | After importing, KO/Pi shows a dialog, how much calendar items are imported. |
195 | If you press a second time "import" , already imported calendar items are not imported again. | 228 | If you press a second time "import" , already imported calendar items are not imported again. |
196 | After importing you can choose another "Calendar Folder" to import or close the import dialog. | 229 | After importing you can choose another "Calendar Folder" to import or close the import dialog. |
197 | Please close the import dialog. | 230 | Please close the import dialog. |
198 | Now you see the imported calendar items in KO/Pi. | 231 | Now you see the imported calendar items in KO/Pi. |
199 | Please verify, that the import was correct. | 232 | Please verify, that the import was correct. |
200 | About problems of mapping particular Outlook-data-fields to KOrganizer-data-fields see Appendix B). | 233 | About problems of mapping particular Outlook-data-fields to KOrganizer-data-fields see Appendix B). |
201 | Close KO/Pi - data will be saved automatically. | 234 | Close KO/Pi - data will be saved automatically. |
202 | 235 | ||
203 | Now you should have the calendar data in the file mycalendar.ics in your home directory in the path | 236 | Now you should have the calendar data in the file mycalendar.ics in your home directory in the path |
204 | (YOURHOMEDIR)\kdepim\apps\korganizer\mycalendar.ics | 237 | (YOURHOMEDIR)\kdepim\apps\korganizer\mycalendar.ics |
205 | 238 | ||
206 | Copy that file to a moveable disk or memory stick or just copy it via network to the destination. | 239 | Copy that file to a moveable disk or memory stick or just copy it via network to the destination. |
207 | Import that file into KOrganizer/Kontact via Import - Import iCal/ics file. | 240 | Import that file into KOrganizer/Kontact. |
241 | Details about importing your calendar data you can read at: 8) How to import your calendar data into Kontact. | ||
208 | (Warning again: Don't forget to set the timezone in KDE KOrganizer before importing data there. The timezone in KDE KOrganizer is set per default to UTC (GMT), that is -1h of CET). | 242 | (Warning again: Don't forget to set the timezone in KDE KOrganizer before importing data there. The timezone in KDE KOrganizer is set per default to UTC (GMT), that is -1h of CET). |
209 | Now you have your Outlook200X calendar data on the KDE desktop available and you are done with the migration. | 243 | Now you have your Outlook200X calendar data on the KDE desktop available and you are done with the migration. |
210 | 244 | ||
211 | Hint: | 245 | Hint: |
212 | If you want to use KO/Pi and KA/Pi on your windows desktop, you should read all the help information available in the KO/Pi Help menu. One Highlight of KO/Pi is the easy syncing with another *.ics file. | 246 | If you want to use KO/Pi and KA/Pi on your windows desktop, you should read all the help information available in the KO/Pi Help menu. One Highlight of KO/Pi is the easy syncing with another *.ics file. |
213 | (Information about syncing available in the KO/Pi help menu). | 247 | (Information about syncing available in the KO/Pi help menu). |
214 | Another hint: | 248 | Another hint: |
215 | KO/Pi + KA/Pi ( = KDE-Pim/Pi ) are available for the Sharp Zaurus PDA. | 249 | KO/Pi + KA/Pi ( = KDE-Pim/Pi ) are available for the Sharp Zaurus PDA. |
216 | Syncing data works for KO/Pi ( version 1.9.3) but not yet for KA/Pi. | 250 | Syncing data works for KO/Pi ( version 1.9.3) but not yet for KA/Pi. |
217 | 251 | ||
218 | 252 | ||
253 | ************************************************************* | ||
254 | 7) How to import your contact data into Kontact | ||
255 | ************************************************************* | ||
256 | |||
257 | |||
258 | |||
259 | MISSING | ||
260 | |||
261 | |||
262 | |||
263 | ************************************************************* | ||
264 | 8) How to import your calendar data into Kontact | ||
265 | ************************************************************* | ||
266 | |||
267 | |||
268 | MISSING | ||
269 | |||
219 | 270 | ||
220 | ************************************************************* | 271 | ************************************************************* |
221 | APPENDIX A) Problems and solutions when reading contact data | 272 | APPENDIX A) Problems and solutions when reading contact data |
222 | ************************************************************* | 273 | ************************************************************* |
223 | 274 | ||
224 | All data, which can be displayed and accessed in KAddressbook is imported from Outlook. | 275 | All data, which can be displayed and accessed in KAddressbook is imported from Outlook. |
225 | In Outlook you can assign an attribute "This is the mailing address" to one of the addresses. | 276 | In Outlook you can assign an attribute "This is the mailing address" to one of the addresses. |
226 | This address shows up in KAddressbook twice. | 277 | This address shows up in KAddressbook twice. |
227 | The first time with the original attribute from Outlook ( e.g. "work" for "business" in OL ). | 278 | The first time with the original attribute from Outlook ( e.g. "work" for "business" in OL ). |
228 | The second time with the attribute "postal". | 279 | The second time with the attribute "postal". |
229 | 280 | ||
230 | All telephone numbers of OL are imported. | 281 | All telephone numbers of OL are imported. |
231 | OL offers special case telephone numbers, like "Assistant", which have no counterpart in KAdressbook. | 282 | OL offers special case telephone numbers, like "Assistant", which have no counterpart in KAdressbook. |
232 | In that case, the imported number has special combined attributes in KAddressbook. | 283 | In that case, the imported number has special combined attributes in KAddressbook. |
233 | Here is the mapping of types in OL to attributes in KA: | 284 | Here is the mapping of types in OL to attributes in KA: |
234 | 285 | ||
235 | OL type Attributes in KA | 286 | OL type Attributes in KA |
236 | 287 | ||
237 | Assistant Work + Voice | 288 | Assistant Work + Voice |
238 | Business Work | 289 | Business Work |
239 | Business2 Work | 290 | Business2 Work |
240 | BusinessFax Work + Fax | 291 | BusinessFax Work + Fax |
241 | Car Car | 292 | Car Car |
242 | Home Home | 293 | Home Home |
243 | Home2 Home | 294 | Home2 Home |
244 | HomeFax Home + Fax | 295 | HomeFax Home + Fax |
245 | ISDN Isdn | 296 | ISDN Isdn |
246 | Mobile Cell (displayed as Mobile Phone) | 297 | Mobile Cell (displayed as Mobile Phone) |
247 | OtherFax Fax | 298 | OtherFax Fax |
248 | OtherTelephone Voice | 299 | OtherTelephone Voice |
249 | Pager Pager | 300 | Pager Pager |
250 | PrimaryTelephone Pref ( displayed as typeless, with attribute preferred ) | 301 | PrimaryTelephone Pref ( displayed as typeless, with attribute preferred ) |
251 | TTYTDD Modem | 302 | TTYTDD Modem |
252 | Telex Fax + Bbs (Bbs displayed as MailBox - not very senseful, sorry ...) | 303 | Telex Fax + Bbs (Bbs displayed as MailBox - not very senseful, sorry ...) |
253 | CompanyMain Work + Pref | 304 | CompanyMain Work + Pref |
254 | Radio Video | 305 | Radio Video |
255 | Callback Voice + Pref | 306 | Callback Voice + Pref |
256 | 307 | ||
257 | Some mapping may not be very senseful, but it helps to identify the original OL types. | 308 | Some mapping may not be very senseful, but it helps to identify the original OL types. |
258 | 309 | ||
259 | 310 | ||
260 | ************************************************************* | 311 | ************************************************************* |
261 | APPENDIX B) Problems and solutions when reading calendar data | 312 | APPENDIX B) Problems and solutions when reading calendar data |
262 | ************************************************************* | 313 | ************************************************************* |
263 | 314 | ||
264 | Almost all data, which can be displayed and accessed in KOrganizer is imported from Outlook. | 315 | Almost all data, which can be displayed and accessed in KOrganizer is imported from Outlook. |
265 | Attachments of appointments are not imported. | 316 | Attachments of appointments are not imported. |
266 | KOrganizer may crash, when reading some kinds of attachments. | 317 | KOrganizer may crash, when reading some kinds of attachments. |
267 | These may be changed in future versions. | 318 | These may be changed in future versions. |
268 | 319 | ||
269 | Attendee lists of meetings and their state are imported in KOrganizer. | 320 | Attendee lists of meetings and their state are imported in KOrganizer. |
270 | 321 | ||
271 | A problem is importing some kinds of recurring events: | 322 | A problem is importing some kinds of recurring events: |
272 | 323 | ||
273 | First problem: | 324 | First problem: |
274 | OL offers a recurrence like | 325 | OL offers a recurrence like |
275 | - Yearly recurrence, every second Tuesday of July. | 326 | - Yearly recurrence, every second Tuesday of July. |
276 | KOrganizer ( in versions < 3.3.0 ) does not offer that kind of recurrence. | 327 | KOrganizer ( in versions < 3.3.0 ) does not offer that kind of recurrence. |
277 | Such that | 328 | Such that |
278 | "Yearly recurrence, every second Tuesday of July." | 329 | "Yearly recurrence, every second Tuesday of July." |
279 | is converted to | 330 | is converted to |
280 | "Monthly recurrence, every 12. month, second Tuesday in month, StartMonth = July." | 331 | "Monthly recurrence, every 12. month, second Tuesday in month, StartMonth = July." |
281 | which can be edited in KO. | 332 | which can be edited in KO. |
282 | 333 | ||
283 | Second problem: | 334 | Second problem: |
284 | OL offers an exception in a recurrence with other data/time. | 335 | OL offers an exception in a recurrence with other data/time. |
285 | KO offers only an exception in a recurrence , where the exception is deleted from the row of all occurences. | 336 | KO offers only an exception in a recurrence , where the exception is deleted from the row of all occurences. |
286 | Such that | 337 | Such that |
287 | "Recurring event with exception, that date XX should be at date YY" | 338 | "Recurring event with exception, that date XX should be at date YY" |
288 | in OL is converted to two events in KO: | 339 | in OL is converted to two events in KO: |
289 | "Recurring event with exception, that date XX is not included" | 340 | "Recurring event with exception, that date XX is not included" |
290 | "Non-recurring event at date YY with same data like the recurring event (e.g. Summary, location, attendee list, ...)" | 341 | "Non-recurring event at date YY with same data like the recurring event (e.g. Summary, location, attendee list, ...)" |
291 | 342 | ||
292 | 343 | ||
293 | 344 | ||
294 | 345 | ||
295 | 346 | ||
296 | 347 | ||
297 | 348 | ||
298 | 349 | ||
299 | 350 | ||
diff --git a/libkcal/incidencebase.cpp b/libkcal/incidencebase.cpp index d7c4595..f1db8b7 100644 --- a/libkcal/incidencebase.cpp +++ b/libkcal/incidencebase.cpp | |||
@@ -293,178 +293,182 @@ Attendee *IncidenceBase::attendeeByMails(const QStringList &emails, const QStrin | |||
293 | for ( QStringList::Iterator it = mails.begin(); it != mails.end(); ++it ) { | 293 | for ( QStringList::Iterator it = mails.begin(); it != mails.end(); ++it ) { |
294 | if (qli.current()->email() == *it) | 294 | if (qli.current()->email() == *it) |
295 | return qli.current(); | 295 | return qli.current(); |
296 | } | 296 | } |
297 | 297 | ||
298 | ++qli; | 298 | ++qli; |
299 | } | 299 | } |
300 | return 0L; | 300 | return 0L; |
301 | } | 301 | } |
302 | 302 | ||
303 | void IncidenceBase::setDuration(int seconds) | 303 | void IncidenceBase::setDuration(int seconds) |
304 | { | 304 | { |
305 | mDuration = seconds; | 305 | mDuration = seconds; |
306 | setHasDuration(true); | 306 | setHasDuration(true); |
307 | } | 307 | } |
308 | 308 | ||
309 | int IncidenceBase::duration() const | 309 | int IncidenceBase::duration() const |
310 | { | 310 | { |
311 | return mDuration; | 311 | return mDuration; |
312 | } | 312 | } |
313 | 313 | ||
314 | void IncidenceBase::setHasDuration(bool b) | 314 | void IncidenceBase::setHasDuration(bool b) |
315 | { | 315 | { |
316 | mHasDuration = b; | 316 | mHasDuration = b; |
317 | } | 317 | } |
318 | 318 | ||
319 | bool IncidenceBase::hasDuration() const | 319 | bool IncidenceBase::hasDuration() const |
320 | { | 320 | { |
321 | return mHasDuration; | 321 | return mHasDuration; |
322 | } | 322 | } |
323 | 323 | ||
324 | void IncidenceBase::setSyncStatus(int stat) | 324 | void IncidenceBase::setSyncStatus(int stat) |
325 | { | 325 | { |
326 | if (mReadOnly) return; | 326 | if (mReadOnly) return; |
327 | mSyncStatus = stat; | 327 | mSyncStatus = stat; |
328 | } | 328 | } |
329 | 329 | ||
330 | int IncidenceBase::syncStatus() const | 330 | int IncidenceBase::syncStatus() const |
331 | { | 331 | { |
332 | return mSyncStatus; | 332 | return mSyncStatus; |
333 | } | 333 | } |
334 | 334 | ||
335 | void IncidenceBase::setPilotId( int id ) | 335 | void IncidenceBase::setPilotId( int id ) |
336 | { | 336 | { |
337 | if (mReadOnly) return; | 337 | if (mReadOnly) return; |
338 | mPilotId = id; | 338 | mPilotId = id; |
339 | } | 339 | } |
340 | 340 | ||
341 | int IncidenceBase::pilotId() const | 341 | int IncidenceBase::pilotId() const |
342 | { | 342 | { |
343 | return mPilotId; | 343 | return mPilotId; |
344 | } | 344 | } |
345 | void IncidenceBase::setZaurusId( int id ) | 345 | void IncidenceBase::setZaurusId( int id ) |
346 | { | 346 | { |
347 | if (mReadOnly) return; | 347 | if (mReadOnly) return; |
348 | mZaurusId = id; | 348 | mZaurusId = id; |
349 | } | 349 | } |
350 | 350 | ||
351 | int IncidenceBase::zaurusId() const | 351 | int IncidenceBase::zaurusId() const |
352 | { | 352 | { |
353 | return mZaurusId; | 353 | return mZaurusId; |
354 | } | 354 | } |
355 | 355 | ||
356 | int IncidenceBase::zaurusUid() const | 356 | int IncidenceBase::zaurusUid() const |
357 | { | 357 | { |
358 | return mZaurusUid; | 358 | return mZaurusUid; |
359 | } | 359 | } |
360 | void IncidenceBase::setZaurusUid( int id ) | 360 | void IncidenceBase::setZaurusUid( int id ) |
361 | { | 361 | { |
362 | if (mReadOnly) return; | 362 | if (mReadOnly) return; |
363 | mZaurusUid = id; | 363 | mZaurusUid = id; |
364 | } | 364 | } |
365 | 365 | ||
366 | int IncidenceBase::tempSyncStat() const | 366 | int IncidenceBase::tempSyncStat() const |
367 | { | 367 | { |
368 | return mTempSyncStat; | 368 | return mTempSyncStat; |
369 | } | 369 | } |
370 | void IncidenceBase::setTempSyncStat( int id ) | 370 | void IncidenceBase::setTempSyncStat( int id ) |
371 | { | 371 | { |
372 | if (mReadOnly) return; | 372 | if (mReadOnly) return; |
373 | mTempSyncStat = id; | 373 | mTempSyncStat = id; |
374 | } | 374 | } |
375 | 375 | ||
376 | void IncidenceBase::setID( const QString & prof , int id ) | 376 | void IncidenceBase::setID( const QString & prof , int id ) |
377 | { | 377 | { |
378 | int num = mExternalId.find( ":"+prof+";" ); | 378 | int num = mExternalId.find( ":"+prof+";" ); |
379 | if ( num >= 0 ) { | 379 | if ( num >= 0 ) { |
380 | int len = prof.length()+2; | 380 | int len = prof.length()+2; |
381 | int end = mExternalId.find( ";", num+len ); | 381 | int end = mExternalId.find( ";", num+len ); |
382 | if ( end > 0 ) { | 382 | if ( end > 0 ) { |
383 | mExternalId = mExternalId.left( num+len ) +QString::number( id)+mExternalId.mid( end ); | 383 | mExternalId = mExternalId.left( num+len ) +QString::number( id)+mExternalId.mid( end ); |
384 | } else | 384 | } else |
385 | qDebug("Error in IncidenceBase::setID "); | 385 | qDebug("Error in IncidenceBase::setID "); |
386 | } else { | 386 | } else { |
387 | mExternalId += prof+";"+QString::number( id) +";0:"; | 387 | mExternalId += prof+";"+QString::number( id) +";0:"; |
388 | } | 388 | } |
389 | qDebug("setID*%s*%d*%s* ", prof.latin1(), id,mExternalId.latin1() ); | ||
389 | } | 390 | } |
390 | int IncidenceBase::getID( const QString & prof) | 391 | int IncidenceBase::getID( const QString & prof) |
391 | { | 392 | { |
392 | int ret = -1; | 393 | int ret = -1; |
393 | int num = mExternalId.find(":"+ prof+";" ); | 394 | int num = mExternalId.find(":"+ prof+";" ); |
394 | if ( num >= 0 ) { | 395 | if ( num >= 0 ) { |
395 | int len = prof.length()+2; | 396 | int len = prof.length()+2; |
396 | int end = mExternalId.find( ";", num+len ); | 397 | int end = mExternalId.find( ";", num+len ); |
397 | if ( end > 0 ) { | 398 | if ( end > 0 ) { |
398 | bool ok; | 399 | bool ok; |
399 | ret = mExternalId.mid ( num + len,end-len-num).toInt( &ok ); | 400 | ret = mExternalId.mid ( num + len,end-len-num).toInt( &ok ); |
400 | if (!ok) | 401 | if (!ok) |
401 | return -1; | 402 | ret = -1; |
402 | } | 403 | } |
403 | } | 404 | } |
404 | return ret; | 405 | qDebug("getID*%s*%d*%s* ", prof.latin1(), ret,mExternalId.latin1() ); |
406 | return ret; | ||
405 | } | 407 | } |
406 | 408 | ||
407 | // example :Sharp_DTM;22;23566:TP;-1;8654:TPP;18;0: | 409 | // example :Sharp_DTM;22;23566:TP;-1;8654:TPP;18;0: |
408 | // format name;III;JJJ: III >= 0, may be -1. JJJ always >= 0 | 410 | // format name;III;JJJ: III >= 0, may be -1. JJJ always >= 0 |
409 | void IncidenceBase::setCsum( const QString & prof , int id ) | 411 | void IncidenceBase::setCsum( const QString & prof , int id ) |
410 | { | 412 | { |
411 | int num = mExternalId.find( ":"+prof+";"); | 413 | int num = mExternalId.find( ":"+prof+";"); |
412 | if ( num >= 0 ) { | 414 | if ( num >= 0 ) { |
413 | int len = prof.length()+2; | 415 | int len = prof.length()+2; |
414 | num = mExternalId.find( ";", num+len ); | 416 | num = mExternalId.find( ";", num+len ); |
415 | int end = mExternalId.find( ":", num+1 ); | 417 | int end = mExternalId.find( ":", num+1 ); |
416 | if ( end > 0 ) { | 418 | if ( end > 0 ) { |
417 | mExternalId = mExternalId.left( num ) +QString::number(id)+mExternalId.mid( end ); | 419 | mExternalId = mExternalId.left( num ) +QString::number(id)+mExternalId.mid( end ); |
418 | } else | 420 | } else |
419 | qDebug("Error in IncidenceBase::setCsum "); | 421 | qDebug("Error in IncidenceBase::setCsum "); |
420 | } else { | 422 | } else { |
421 | mExternalId += prof+";-1;"+QString::number( id) +":"; | 423 | mExternalId += prof+";-1;"+QString::number( id) +":"; |
422 | } | 424 | } |
425 | qDebug("setCsum*%s*%d*%s* ", prof.latin1(), id,mExternalId.latin1() ); | ||
423 | } | 426 | } |
424 | int IncidenceBase::getCsum( const QString & prof) | 427 | int IncidenceBase::getCsum( const QString & prof) |
425 | { | 428 | { |
426 | int ret = -1; | 429 | int ret = -1; |
427 | int num = mExternalId.find( ":"+prof+";" ); | 430 | int num = mExternalId.find( ":"+prof+";" ); |
428 | if ( num >= 0 ) { | 431 | if ( num >= 0 ) { |
429 | int len = prof.length()+2; | 432 | int len = prof.length()+2; |
430 | num = mExternalId.find( ";", num+len ); | 433 | num = mExternalId.find( ";", num+len ); |
431 | int end = mExternalId.find( ":", num+1 ); | 434 | int end = mExternalId.find( ":", num+1 ); |
432 | if ( end > 0 ) { | 435 | if ( end > 0 ) { |
433 | bool ok; | 436 | bool ok; |
434 | ret = mExternalId.mid ( num ,end-num).toInt( &ok ); | 437 | ret = mExternalId.mid ( num ,end-num).toInt( &ok ); |
435 | if (!ok) | 438 | if (!ok) |
436 | return -1; | 439 | ret = -1; |
437 | } | 440 | } |
438 | } | 441 | } |
442 | qDebug("getCsum*%s*%d*%s* ", prof.latin1(), ret,mExternalId.latin1() ); | ||
439 | return ret; | 443 | return ret; |
440 | } | 444 | } |
441 | 445 | ||
442 | void IncidenceBase::setIDStr( const QString & s ) | 446 | void IncidenceBase::setIDStr( const QString & s ) |
443 | { | 447 | { |
444 | if (mReadOnly) return; | 448 | if (mReadOnly) return; |
445 | mExternalId = s; | 449 | mExternalId = s; |
446 | } | 450 | } |
447 | 451 | ||
448 | QString IncidenceBase::IDStr() const | 452 | QString IncidenceBase::IDStr() const |
449 | { | 453 | { |
450 | return mExternalId ; | 454 | return mExternalId ; |
451 | } | 455 | } |
452 | void IncidenceBase::registerObserver( IncidenceBase::Observer *observer ) | 456 | void IncidenceBase::registerObserver( IncidenceBase::Observer *observer ) |
453 | { | 457 | { |
454 | if( !mObservers.contains(observer) ) mObservers.append( observer ); | 458 | if( !mObservers.contains(observer) ) mObservers.append( observer ); |
455 | } | 459 | } |
456 | 460 | ||
457 | void IncidenceBase::unRegisterObserver( IncidenceBase::Observer *observer ) | 461 | void IncidenceBase::unRegisterObserver( IncidenceBase::Observer *observer ) |
458 | { | 462 | { |
459 | mObservers.remove( observer ); | 463 | mObservers.remove( observer ); |
460 | } | 464 | } |
461 | 465 | ||
462 | void IncidenceBase::updated() | 466 | void IncidenceBase::updated() |
463 | { | 467 | { |
464 | QPtrListIterator<Observer> it(mObservers); | 468 | QPtrListIterator<Observer> it(mObservers); |
465 | while( it.current() ) { | 469 | while( it.current() ) { |
466 | Observer *o = it.current(); | 470 | Observer *o = it.current(); |
467 | ++it; | 471 | ++it; |
468 | o->incidenceUpdated( this ); | 472 | o->incidenceUpdated( this ); |
469 | } | 473 | } |
470 | } | 474 | } |