summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-02-28 15:30:47 (UTC)
committer zautrix <zautrix>2005-02-28 15:30:47 (UTC)
commit16575cca67c9047de72530080dfeb5793a66c935 (patch) (unidiff)
treefec5ada5eee13fad9c73ec04cd066ccaf2619d4a
parentb1f912cbb6a9daf050e94d337de0e0e73417284a (diff)
downloadkdepimpi-16575cca67c9047de72530080dfeb5793a66c935.zip
kdepimpi-16575cca67c9047de72530080dfeb5793a66c935.tar.gz
kdepimpi-16575cca67c9047de72530080dfeb5793a66c935.tar.bz2
mail fix
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt3
-rw-r--r--kmicromail/accountview.cpp5
-rw-r--r--kmicromail/libmailwrapper/smtpwrapper.cpp12
-rw-r--r--kmicromail/opiemail.cpp5
4 files changed, 18 insertions, 7 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index dc22fc6..a9b6c87 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,1015 +1,1018 @@
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 2.0.13 ************ 3********** VERSION 2.0.13 ************
4 4
5Fixed a problem in the addressee select dialog and made it more user friendly by adding a minimize splitter. 5Fixed a problem in the addressee select dialog and made it more user friendly by adding a minimize splitter.
6 6
7In the search dialog you can switch now the focus from search line edit to the list view by pressing key "arrow down". 7In the search dialog you can switch now the focus from search line edit to the list view by pressing key "arrow down".
8 8
9OM/Pi:
10Fixed a refresh problem of outgoing/sent/sendfailed folders after sending mails.
11
9********** VERSION 2.0.12 ************ 12********** VERSION 2.0.12 ************
10 13
11KO/Pi: 14KO/Pi:
12Fixed a bug in todo start/due date handling for non recurring todos with a start and due date. 15Fixed a bug in todo start/due date handling for non recurring todos with a start and due date.
13Fixed some layout problems in the KO/Pi agenda view when there were many conflicting itmes. 16Fixed some layout problems in the KO/Pi agenda view when there were many conflicting itmes.
14Fixed several problems of the keyboard focus in the desktop versions when opening the search dialog/event viewer. 17Fixed several problems of the keyboard focus in the desktop versions when opening the search dialog/event viewer.
15 18
16Fixed problem in pi-sync mode when wrong password was sent. 19Fixed problem in pi-sync mode when wrong password was sent.
17 20
18OM/Pi: 21OM/Pi:
19Fixed a crash when displaying mails with "Show mail as html" was checked in the config. 22Fixed a crash when displaying mails with "Show mail as html" was checked in the config.
20Added a check before displaying the mail if the mail is in html format, if "Show mail as html" is enabled. 23Added a check before displaying the mail if the mail is in html format, if "Show mail as html" is enabled.
21 24
22********** VERSION 2.0.11 ************ 25********** VERSION 2.0.11 ************
23 26
24Fixed some problems in pi-sync mode 27Fixed some problems in pi-sync mode
25(e.g. details of events were not synced properly) 28(e.g. details of events were not synced properly)
26 29
27********** VERSION 2.0.10 ************ 30********** VERSION 2.0.10 ************
28 31
29KO/Pi: 32KO/Pi:
30In the desktop versions the context menu in the search dialog was broken after introducing the What'sThis info for the list view. 33In the desktop versions the context menu in the search dialog was broken after introducing the What'sThis info for the list view.
31This is fixed. 34This is fixed.
32Changed the search dialog a bit to make it more user friendly. 35Changed the search dialog a bit to make it more user friendly.
33(E.g.: Removed message box about "no items found" and set key focus to search line edit after search). 36(E.g.: Removed message box about "no items found" and set key focus to search line edit after search).
34 37
35Added config option to hide the week number in KO/Pi toolbar. 38Added config option to hide the week number in KO/Pi toolbar.
36 39
37********** VERSION 2.0.9 ************ 40********** VERSION 2.0.9 ************
38 41
39Made month view icons for multiday events a bit nicer. 42Made month view icons for multiday events a bit nicer.
40Some minor fixes in KO/Pi 43Some minor fixes in KO/Pi
41(e.g. go to today did not work for new week view properly). 44(e.g. go to today did not work for new week view properly).
42 45
43 46
44********** VERSION 2.0.8 ************ 47********** VERSION 2.0.8 ************
45 48
46Fixed a problem in dependency info in the ipk files for the Zaurus. 49Fixed a problem in dependency info in the ipk files for the Zaurus.
47 50
48Added icon for the stealth new week view and made navigation more user friendly in monthview by adding a prev/next week button to the navigator bar. 51Added icon for the stealth new week view and made navigation more user friendly in monthview by adding a prev/next week button to the navigator bar.
49 52
50Added a "go today" button to the datepicker. 53Added a "go today" button to the datepicker.
51 54
52Added "created" and "last modified" to event/todo viewer (and What'sThis viewer) 55Added "created" and "last modified" to event/todo viewer (and What'sThis viewer)
53and made it configureable to show these values. 56and made it configureable to show these values.
54 57
55Fixed a problem for events (from external iCal files) that do have a duration but no end date. 58Fixed a problem for events (from external iCal files) that do have a duration but no end date.
56 59
57 60
58********** VERSION 2.0.7 ************ 61********** VERSION 2.0.7 ************
59 62
60Added global application font settings 63Added global application font settings
61(for all KDE-Pim/Pi apps) to the general settings. 64(for all KDE-Pim/Pi apps) to the general settings.
62 65
63Fixed a problem in OM/Pi when trying to login to some IMAP servers 66Fixed a problem in OM/Pi when trying to login to some IMAP servers
64(like the IMAP server of Apple: mail.mac.com ) 67(like the IMAP server of Apple: mail.mac.com )
65 68
66Added recurring todos to KO/Pi. 69Added recurring todos to KO/Pi.
67 70
68 71
69********** VERSION 2.0.6 ************ 72********** VERSION 2.0.6 ************
70 73
71Some bugfixes in the pi-sync mode. 74Some bugfixes in the pi-sync mode.
72Added German translation for pi-sync mode. 75Added German translation for pi-sync mode.
73 76
74KO/Pi: 77KO/Pi:
75Made the todolist using alternate background. 78Made the todolist using alternate background.
76 79
77Other minor fixes in KO/Pi. 80Other minor fixes in KO/Pi.
78 81
79 82
80********** VERSION 2.0.5 ************ 83********** VERSION 2.0.5 ************
81 84
82Bugfixes in KO/Pi. 85Bugfixes in KO/Pi.
83 86
84********** VERSION 2.0.4 ************ 87********** VERSION 2.0.4 ************
85 88
86KO/Pi: 89KO/Pi:
87Fixed problem loading translations for summary/location edit boxes in event/todo editor. 90Fixed problem loading translations for summary/location edit boxes in event/todo editor.
88 91
89Added a general "select week number" to the toolbar. 92Added a general "select week number" to the toolbar.
90 93
91Fixed some small problem of the new features introduced in version 2.0.3. 94Fixed some small problem of the new features introduced in version 2.0.3.
92 95
93Made it possible to specify one specific category as category color, 96Made it possible to specify one specific category as category color,
94if more than one categories are selected. 97if more than one categories are selected.
95 98
96Fixed a bug in saving colors for categories with non-ascii characters. 99Fixed a bug in saving colors for categories with non-ascii characters.
97(Like, e.g. German Umlauts). 100(Like, e.g. German Umlauts).
98Propably you have to set your colors again for those categories. 101Propably you have to set your colors again for those categories.
99 102
100 103
101********** VERSION 2.0.3 ************ 104********** VERSION 2.0.3 ************
102 105
103KO/Pi: 106KO/Pi:
104Added feature for changing alarm settings for many items at once: 107Added feature for changing alarm settings for many items at once:
105Open list view (or search dialog), select the desired items and choose in 108Open list view (or search dialog), select the desired items and choose in
106the popup menu: Set alarm for selected... 109the popup menu: Set alarm for selected...
107 110
108Added to the event/todo viewer the option to send an email to 111Added to the event/todo viewer the option to send an email to
109all attendees or all selected (with RSVP) attendees. 112all attendees or all selected (with RSVP) attendees.
110 113
111Made the week-month mode changing in month view faster. 114Made the week-month mode changing in month view faster.
112 115
113Made month view better useable with keyboard. 116Made month view better useable with keyboard.
114Now TAB key jumps to next cell with an event/todo. 117Now TAB key jumps to next cell with an event/todo.
115Scroll in cell with coursor keys, scroll in time (next week) with 118Scroll in cell with coursor keys, scroll in time (next week) with
116Shift/Control + coursorkeys. 119Shift/Control + coursorkeys.
117 120
118Fixed bug that the todo view flat mode was reset after first view update. 121Fixed bug that the todo view flat mode was reset after first view update.
119 122
120If a todo is displayed closed in the todo view, 123If a todo is displayed closed in the todo view,
121it is now displayed in overdue/due today color depending on the subtodos overdue/due today properties. 124it is now displayed in overdue/due today color depending on the subtodos overdue/due today properties.
122 125
123Added info about the numbers of years to the caption (title) information about a birthday event. 126Added info about the numbers of years to the caption (title) information about a birthday event.
124 127
125Made completion date in todo editor editable. 128Made completion date in todo editor editable.
126 129
127Added possibility to save/load templates for journals. 130Added possibility to save/load templates for journals.
128(Which is just a simple "save text to file" or "insert text from file". 131(Which is just a simple "save text to file" or "insert text from file".
129 132
130********** VERSION 2.0.2 ************ 133********** VERSION 2.0.2 ************
131 134
132KO/Pi: 135KO/Pi:
133Fixed the layout problem of the day label buttons 136Fixed the layout problem of the day label buttons
134of the agenda view introduced in version 2.0.1. 137of the agenda view introduced in version 2.0.1.
135 138
136Added WhatsThis support for the todo view and the list view. 139Added WhatsThis support for the todo view and the list view.
137 140
138Added a quite useful feature to the montview. 141Added a quite useful feature to the montview.
139Just click on the week numbers on the left. 142Just click on the week numbers on the left.
140And in the top right corner of month view/agenda view 143And in the top right corner of month view/agenda view
141there is now a "week number quick selector". 144there is now a "week number quick selector".
142(Click on the black triangle). 145(Click on the black triangle).
143 146
144Made the quite difficult timezone change in KO/Pi easy. 147Made the quite difficult timezone change in KO/Pi easy.
145 148
146OM/Pi: 149OM/Pi:
147Fixed too small icons on desktop. 150Fixed too small icons on desktop.
148Fixed non visible icons in mainwindow on Z with fastload enabled. 151Fixed non visible icons in mainwindow on Z with fastload enabled.
149Added signature file setting to smtp account config. 152Added signature file setting to smtp account config.
150And the signature can be edited and saved in the edit mail dialog. 153And the signature can be edited and saved in the edit mail dialog.
151That does mean: 154That does mean:
152Simply edit the signature for the selected smtp account in the 155Simply edit the signature for the selected smtp account in the
153edit new mail dialog and press the "save signature" button there. 156edit new mail dialog and press the "save signature" button there.
154Then the signature is saved to the file specified in the smtp account settings. 157Then the signature is saved to the file specified in the smtp account settings.
155If there is no file specified, it is saved automatically to the file 158If there is no file specified, it is saved automatically to the file
156kdepim/apps/kopiemail/<accountname>.sig. 159kdepim/apps/kopiemail/<accountname>.sig.
157 160
158 161
159 162
160********** VERSION 2.0.1 ************ 163********** VERSION 2.0.1 ************
161 164
162Oooops ... I forgot to test on the Zaurus 5500 ... 165Oooops ... I forgot to test on the Zaurus 5500 ...
163 166
164Fixed many problems of new (english) strings (and german translations) 167Fixed many problems of new (english) strings (and german translations)
165introduced in the latest versions, where the text was not fitting on the 168introduced in the latest versions, where the text was not fitting on the
166240x320 display of the Zaurus 5500. 169240x320 display of the Zaurus 5500.
167 170
168KO/Pi: 171KO/Pi:
169Added a popup menu ( press pen and hold to get popup ) to the agenda view 172Added a popup menu ( press pen and hold to get popup ) to the agenda view
170with many useful items (add event/todo, show next week, two weeks, month, journal). 173with many useful items (add event/todo, show next week, two weeks, month, journal).
171 174
172Added items to the todolist popup menu for: 175Added items to the todolist popup menu for:
173Display all opened, all closed or all todos flat. 176Display all opened, all closed or all todos flat.
174The "flat" view makes is possible to sort all todos after ,e.g., prio or date. 177The "flat" view makes is possible to sort all todos after ,e.g., prio or date.
175Made the reparenting of todos on the desktop possible via Drag&Drop. 178Made the reparenting of todos on the desktop possible via Drag&Drop.
176Fixed several bugs in setting the completed datetime for todos. 179Fixed several bugs in setting the completed datetime for todos.
177Added info about completed datetime of todos to the todo viewer. 180Added info about completed datetime of todos to the todo viewer.
178Now displaying a completed todo (with completed datetime set) in the agenda view 181Now displaying a completed todo (with completed datetime set) in the agenda view
179at the time of the completion. Such that now it is possible to see in the agenda view 182at the time of the completion. Such that now it is possible to see in the agenda view
180when what todo was completed. 183when what todo was completed.
181Fixed behaviour of automatic setting completion of todos with sub-todos/parent todos. 184Fixed behaviour of automatic setting completion of todos with sub-todos/parent todos.
182Now the behaviour is: 185Now the behaviour is:
183Setting a parent to complete sets all (sub)childs to complete. 186Setting a parent to complete sets all (sub)childs to complete.
184Setting a parent to uncomplete does not change the childs. 187Setting a parent to uncomplete does not change the childs.
185Setting a child to uncomplete sets all parent to uncomplete. 188Setting a child to uncomplete sets all parent to uncomplete.
186Setting a child to complete does not change the parents. 189Setting a child to complete does not change the parents.
187 190
188Smart updating and double buffering of the daymatrix. 191Smart updating and double buffering of the daymatrix.
189Showing holidays in the day matrix. 192Showing holidays in the day matrix.
190Many other small performance updates. 193Many other small performance updates.
191 194
192Made day labels in agenda clickable. By clicking a label, the day is displayed in single day mode. 195Made day labels in agenda clickable. By clicking a label, the day is displayed in single day mode.
193 196
194Now the translation file usertranslation.txt is supposed to be in utf8 format. 197Now the translation file usertranslation.txt is supposed to be in utf8 format.
195If you want to translate a language from western europe, just change the germantranslation.txt file. Please read the updated Usertranslation HowTo in KO/Pi Help menu. 198If you want to translate a language from western europe, just change the germantranslation.txt file. Please read the updated Usertranslation HowTo in KO/Pi Help menu.
196 199
197 200
198********** VERSION 2.0.0 ************ 201********** VERSION 2.0.0 ************
199 202
200Stable release 2.0.0! 203Stable release 2.0.0!
201 204
202KO/Pi: 205KO/Pi:
203Fixed problem in edit dialog recreation at startup. 206Fixed problem in edit dialog recreation at startup.
204Made "toggle view*" menu items enabled context sensitive. 207Made "toggle view*" menu items enabled context sensitive.
205Changed agenda size menu to items 1-10. 208Changed agenda size menu to items 1-10.
206Made it possible to change agenda size quickly by pressing mouse on timelabels in agenda view and move mouse up/down. 209Made it possible to change agenda size quickly by pressing mouse on timelabels in agenda view and move mouse up/down.
207Usebility enhancements in the KO/Pi menus. 210Usebility enhancements in the KO/Pi menus.
208Birthday import now adds year to summary. 211Birthday import now adds year to summary.
209What's Next view shows age in years for birthday. 212What's Next view shows age in years for birthday.
210 213
211OM/Pi: 214OM/Pi:
212Added three info lines to display subject, from and to of selected mails. 215Added three info lines to display subject, from and to of selected mails.
213 216
214KA/Pi: 217KA/Pi:
215Fixed jump bar behaviour on Zaurus. 218Fixed jump bar behaviour on Zaurus.
216Now KA/Pi search field supports searching for a range of starting characters. 219Now KA/Pi search field supports searching for a range of starting characters.
217E.g. to search for all contact beginning with b to n, type 220E.g. to search for all contact beginning with b to n, type
218b-n 221b-n
219in the search field. 222in the search field.
220 223
221********** VERSION 1.9.20 ************ 224********** VERSION 1.9.20 ************
222 225
223KO/Pi: 226KO/Pi:
224Added for the "dislplay one day" agenda mode 227Added for the "dislplay one day" agenda mode
225info in the caption and in the day lables: 228info in the caption and in the day lables:
226Now it is displayed, if the selected day is from "day before yesterday" 229Now it is displayed, if the selected day is from "day before yesterday"
227to "day after tomorrow". 230to "day after tomorrow".
228Made it possible to delete a Todo, which has sub-todos. 231Made it possible to delete a Todo, which has sub-todos.
229Fixed two small problems in the todo view. 232Fixed two small problems in the todo view.
230Added missing German translation for filter edit and print dialog. 233Added missing German translation for filter edit and print dialog.
231Made search dialog closeable by cancel key. 234Made search dialog closeable by cancel key.
232 235
233Made it possible to select in the date picker the (ligt grey ) 236Made it possible to select in the date picker the (ligt grey )
234dates of the prev./next month with the mouse. 237dates of the prev./next month with the mouse.
235 238
236OM/Pi: 239OM/Pi:
237"Delete mail" icon in main window now deletes all selected mails. 240"Delete mail" icon in main window now deletes all selected mails.
238Fixed the problem, that the state flag of imap mails was ignored. 241Fixed the problem, that the state flag of imap mails was ignored.
239Now mails with "FLAG_SEEN" on the imap server get no icon in the list view 242Now mails with "FLAG_SEEN" on the imap server get no icon in the list view
240to indecate that they are already seen. 243to indecate that they are already seen.
241Fixed the problem that the body of some mails was not displayed in the 244Fixed the problem that the body of some mails was not displayed in the
242mail viewer when fetching them from the imap server directly to read them. 245mail viewer when fetching them from the imap server directly to read them.
243Made it (configurable) possible to show the "To:" field in the list view. 246Made it (configurable) possible to show the "To:" field in the list view.
244Added to the mail viewer the option "View Source" to make it possible to see the raw mail data. 247Added to the mail viewer the option "View Source" to make it possible to see the raw mail data.
245Added a "Download Mail" button to the mail viewer to quickly download the viewed mail to the 248Added a "Download Mail" button to the mail viewer to quickly download the viewed mail to the
246local storage folder (specified in account settings) of the account of the mail. 249local storage folder (specified in account settings) of the account of the mail.
247Removed some memory leaks in OM/Pi. 250Removed some memory leaks in OM/Pi.
248 251
249 252
250********** VERSION 1.9.19 ************ 253********** VERSION 1.9.19 ************
251 254
252Added a lot of missing translations to KA/Pi, 255Added a lot of missing translations to KA/Pi,
253Added some missing translations to KO/Pi and OM/Pi. 256Added some missing translations to KO/Pi and OM/Pi.
254 257
255Fixed some minor problems in KA/Pi + KO/Pi. 258Fixed some minor problems in KA/Pi + KO/Pi.
256 259
257Fixed a crash when closing PwM/Pi. 260Fixed a crash when closing PwM/Pi.
258Added German translation for PwM/Pi. 261Added German translation for PwM/Pi.
259 262
260Made view change and Month View update faster in KO/Pi. 263Made view change and Month View update faster in KO/Pi.
261 264
262 265
263********** VERSION 1.9.18 ************ 266********** VERSION 1.9.18 ************
264 267
265FYI: The VERSION 1.9.17 was a testing release only. 268FYI: The VERSION 1.9.17 was a testing release only.
266Please read the changelog of VERSION 1.9.17 as well. 269Please read the changelog of VERSION 1.9.17 as well.
267 270
268Cleaned up the syncing config dialog. 271Cleaned up the syncing config dialog.
269Added sync config options for date range for events. 272Added sync config options for date range for events.
270Added sync config options for filters on incoming data. 273Added sync config options for filters on incoming data.
271Added sync config options for filters on outgoing data. 274Added sync config options for filters on outgoing data.
272Please read the updated SyncHowTo about the new filter settings. 275Please read the updated SyncHowTo about the new filter settings.
273These filter settings make it now possible to sync with shared 276These filter settings make it now possible to sync with shared
274calendars without writing back private or confidential data 277calendars without writing back private or confidential data
275(via the outgoing filters). 278(via the outgoing filters).
276To sync only with particular parts of a shared calendar, 279To sync only with particular parts of a shared calendar,
277the incoming filter settings can be used. 280the incoming filter settings can be used.
278An example can be found in the SyncHowTo. 281An example can be found in the SyncHowTo.
279Same for shared addressbooks. 282Same for shared addressbooks.
280 283
281Added a setting for the global kdepim data storage. 284Added a setting for the global kdepim data storage.
282Usually the data is stored in (yourhomedir/kdepim). 285Usually the data is stored in (yourhomedir/kdepim).
283Now you can set in the Global config dialog TAB, subTAB "Data storage path" 286Now you can set in the Global config dialog TAB, subTAB "Data storage path"
284a directory where all the kdepim data is stored. 287a directory where all the kdepim data is stored.
285That makes it easy to save all kdepim data on a SD card on the Z, for example. 288That makes it easy to save all kdepim data on a SD card on the Z, for example.
286 289
287KO/Pi: 290KO/Pi:
288The timeedit input has a pulldown list for times. 291The timeedit input has a pulldown list for times.
289If opened, this pulldown list should now has the right time highlighted. 292If opened, this pulldown list should now has the right time highlighted.
290Added the possibility to exclude events/todos/journals in a filter. 293Added the possibility to exclude events/todos/journals in a filter.
291You should exclude journals, if you do not want them to sync with a public calendar. 294You should exclude journals, if you do not want them to sync with a public calendar.
292 295
293KA/Pi: 296KA/Pi:
294Added the possibility to in/exclude public/private/confidential contacts to a filter. 297Added the possibility to in/exclude public/private/confidential contacts to a filter.
295If you have already defined filterrules in KA/Pi you have to adjust them all by setting the "include public/private/confidential" property manually. Sorry for that ... 298If you have already defined filterrules in KA/Pi you have to adjust them all by setting the "include public/private/confidential" property manually. Sorry for that ...
296Added printing of card view and details view on desktop. 299Added printing of card view and details view on desktop.
297Printing of list view is not working... 300Printing of list view is not working...
298Added button for removing pictures in contact editor. 301Added button for removing pictures in contact editor.
299Parsing data fix of KA/Pi version 1.9.17. 302Parsing data fix of KA/Pi version 1.9.17.
300Fixed the "parse name automatically" problem of KA/Pi version 1.9.17. 303Fixed the "parse name automatically" problem of KA/Pi version 1.9.17.
301Fixed some syncing merging problems. 304Fixed some syncing merging problems.
302 305
303 306
304********** VERSION 1.9.17 ************ 307********** VERSION 1.9.17 ************
305 308
306KO/Pi: 309KO/Pi:
307Fixed that tooltips were not updated after moving an item in agenda view. 310Fixed that tooltips were not updated after moving an item in agenda view.
308Fixed a bug in sorting start date for recurring events in list view. 311Fixed a bug in sorting start date for recurring events in list view.
309Changed the left button in todo viewer from "Agenda" to "Set completed". 312Changed the left button in todo viewer from "Agenda" to "Set completed".
310This makes it possible to change a todo in the What's Next View quickly to the completed state without leaving the What's Next View. 313This makes it possible to change a todo in the What's Next View quickly to the completed state without leaving the What's Next View.
311Added more info in the todo viewer: Startdate, parent/sub todos. 314Added more info in the todo viewer: Startdate, parent/sub todos.
312 315
313 316
314KA/Pi: 317KA/Pi:
315All fields search does now actually search all the (possible) fields, 318All fields search does now actually search all the (possible) fields,
316not only those listed in the contact list. 319not only those listed in the contact list.
317Made is possible to inline a picture in a vcard on the Z. 320Made is possible to inline a picture in a vcard on the Z.
318This was only possible on the desktop, now is it possible on the Z as well. 321This was only possible on the desktop, now is it possible on the Z as well.
319Fixed of missing save settings after filter configuration. 322Fixed of missing save settings after filter configuration.
320Made saving of addressbook much faster. 323Made saving of addressbook much faster.
321Fixed extension widget layout problem. 324Fixed extension widget layout problem.
322Fixed saving of default formatted name settings. 325Fixed saving of default formatted name settings.
323Fixed formatted name handling in edit dialog. 326Fixed formatted name handling in edit dialog.
324Added an option for changing formatted names of many contacts 327Added an option for changing formatted names of many contacts
325(menu: File - Change - Set formatted name). 328(menu: File - Change - Set formatted name).
326 329
327QWhatsThis was not working on the Z ( only black rectangle was shown). 330QWhatsThis was not working on the Z ( only black rectangle was shown).
328This is Fixed. 331This is Fixed.
329 332
330KDE-Sync: 333KDE-Sync:
331Now readonly KDE resources are synced as well. 334Now readonly KDE resources are synced as well.
332(They are not changed in KDE itself, of course). 335(They are not changed in KDE itself, of course).
333 336
334 337
335 338
336********** VERSION 1.9.16 ************ 339********** VERSION 1.9.16 ************
337 340
338KO/Pi: 341KO/Pi:
339Fixed search dialog size on Z 6000 (480x640 display). 342Fixed search dialog size on Z 6000 (480x640 display).
340Added setting to hide/show time in agenda items. 343Added setting to hide/show time in agenda items.
341Added setting to hide not running todos in todo view. 344Added setting to hide not running todos in todo view.
342Added columns for start date/time in todo view. 345Added columns for start date/time in todo view.
343Replaced the solid half-hour lines in agenda view by dot lines. 346Replaced the solid half-hour lines in agenda view by dot lines.
344Added possibility of printing the What's Next View on the desktop 347Added possibility of printing the What's Next View on the desktop
345(i.e. Windows and Linux). 348(i.e. Windows and Linux).
346Fixed a crash in KO/Pi when starting KO/Pi with What's Next view. 349Fixed a crash in KO/Pi when starting KO/Pi with What's Next view.
347Added tooltips in month view.(Tooltips only available on desktop) 350Added tooltips in month view.(Tooltips only available on desktop)
348 351
349Fixed a strange problem in KO/Pi alarm applet. 352Fixed a strange problem in KO/Pi alarm applet.
350Did not find the actual problem, 353Did not find the actual problem,
351such that now Qtopia reboots again if deinstalling the alarm applet. 354such that now Qtopia reboots again if deinstalling the alarm applet.
352But the alarm applet should work again. 355But the alarm applet should work again.
353 356
354KA/Pi: 357KA/Pi:
355Fixed the problem, that internal pictures were not saved. 358Fixed the problem, that internal pictures were not saved.
356 359
357Fixed a problem in the pi-sync mode by increasing the timeout for data transfer from 20 seconds to 5 minutes. 360Fixed a problem in the pi-sync mode by increasing the timeout for data transfer from 20 seconds to 5 minutes.
358 361
359Fixed some minor problems. (Like word wrap in help text windows). 362Fixed some minor problems. (Like word wrap in help text windows).
360 363
361Fixed a compiling problem in microkde/kresources. 364Fixed a compiling problem in microkde/kresources.
362 365
363KO/Pi is using zdbat (renamed to db2file) for syncing with Sharp DTM. 366KO/Pi is using zdbat (renamed to db2file) for syncing with Sharp DTM.
364This version now includes zdbat 1.0.0 (old version was zdbat 0.2.9) 367This version now includes zdbat 1.0.0 (old version was zdbat 0.2.9)
365such that now syncing KO/Pi with Sharp DTM should work on the 368such that now syncing KO/Pi with Sharp DTM should work on the
366Zaurus C 3000 model. 369Zaurus C 3000 model.
367 370
368********** VERSION 1.9.15 ************ 371********** VERSION 1.9.15 ************
369 372
370Usebilty enhancements in KO/Pi: 373Usebilty enhancements in KO/Pi:
371When clicking on the date in a month view cell, the day view is shown. 374When clicking on the date in a month view cell, the day view is shown.
372Old behaviour was, that the "new event" dialog popped up. 375Old behaviour was, that the "new event" dialog popped up.
373 376
374Added a one step "undo delete" in KO/Pi (Accessable in the "Action" menu). 377Added a one step "undo delete" in KO/Pi (Accessable in the "Action" menu).
375That means, you can restore the latest 378That means, you can restore the latest
376event/todo/journal you have deleted. 379event/todo/journal you have deleted.
377A journal is deleted, if you clear all the text of the journal. 380A journal is deleted, if you clear all the text of the journal.
378 381
379Fixed the bug of the editor dialogs in KO/Pi of version 1.9.14. 382Fixed the bug of the editor dialogs in KO/Pi of version 1.9.14.
380 383
381KA/Pi starting in 480x640 resolution: 384KA/Pi starting in 480x640 resolution:
382Hide the filter action in toolbar 385Hide the filter action in toolbar
383and added icons for undo/delete/redo in toolbar. 386and added icons for undo/delete/redo in toolbar.
384 387
385Change in OM/Pi ViewMail dialog: 388Change in OM/Pi ViewMail dialog:
386When clicking on the "delete" icon the mail is deleted after confirmation as usual. 389When clicking on the "delete" icon the mail is deleted after confirmation as usual.
387But the edit dialog is not closed as before, now the next mail in the folder is shown automatically (if there is any). 390But the edit dialog is not closed as before, now the next mail in the folder is shown automatically (if there is any).
388 391
389Fixed a crash when deleting mail-accounts in OM/Pi. 392Fixed a crash when deleting mail-accounts in OM/Pi.
390 393
391 394
392********** VERSION 1.9.14 ************ 395********** VERSION 1.9.14 ************
393 396
394Fixed some problems with the dialog sizes when switching 397Fixed some problems with the dialog sizes when switching
395portrait/landscape mode on 640x480 PDA display. 398portrait/landscape mode on 640x480 PDA display.
396 399
397Fixed some other small bugs in KA/Pi KO/Pi and OM/Pi and PwM/Pi. 400Fixed some other small bugs in KA/Pi KO/Pi and OM/Pi and PwM/Pi.
398 401
399Fixed an ugly bug in KOpieMail: 402Fixed an ugly bug in KOpieMail:
400KOpieMail was not able to write files (mails) to MSDOS file system, 403KOpieMail was not able to write files (mails) to MSDOS file system,
401like on an usual preformatted SD card. That should work now. 404like on an usual preformatted SD card. That should work now.
402To save your mail data on the Sd card do the following: 405To save your mail data on the Sd card do the following:
403Create a dir on the SD card: 406Create a dir on the SD card:
404mkdir /mnt/card/localmail 407mkdir /mnt/card/localmail
405Go to your home dir: 408Go to your home dir:
406cd 409cd
407Go to kopiemail data storage dir: 410Go to kopiemail data storage dir:
408cd kdepim/apps/kopiemail 411cd kdepim/apps/kopiemail
409Create a symlink to the SD card: 412Create a symlink to the SD card:
410ls -s /mnt/card/localmail 413ls -s /mnt/card/localmail
411Now KOpieMail will store all mails on the SD card. 414Now KOpieMail will store all mails on the SD card.
412 415
413KO/Pi Monthview: 416KO/Pi Monthview:
414Now "Go to Today" selects the current month from day 1-end, 417Now "Go to Today" selects the current month from day 1-end,
415not the current date + some days. 418not the current date + some days.
416I.e. "Go to Today" shows now always 419I.e. "Go to Today" shows now always
417the current month with first day of month in the first row. 420the current month with first day of month in the first row.
418 421
419Added missing German translation. 422Added missing German translation.
420 423
421Fixed icons of executeable on Wintendo. 424Fixed icons of executeable on Wintendo.
422 425
423Added a "Show next Mail" button to the OM/Pi 426Added a "Show next Mail" button to the OM/Pi
424mail viewer such that the mail below the current mail 427mail viewer such that the mail below the current mail
425in the mail list view of the current folder 428in the mail list view of the current folder
426can be read with a single click. 429can be read with a single click.
427 430
428 431
429********** VERSION 1.9.13 ************ 432********** VERSION 1.9.13 ************
430 433
431Fixed nasty PwM/Pi file reading bug, when 434Fixed nasty PwM/Pi file reading bug, when
432the used hash algo of file is different then the global 435the used hash algo of file is different then the global
433hash algo. 436hash algo.
434 437
435Added KA/Pi support for opie mailit mailapplication. 438Added KA/Pi support for opie mailit mailapplication.
436 439
437Fixed some bugs in OM/Pi. 440Fixed some bugs in OM/Pi.
438Now character conversion tables are available for the Zaurus 441Now character conversion tables are available for the Zaurus
439to make OM/Pi working properly. 442to make OM/Pi working properly.
440To get the character conversion in OM/Pi working, please download 443To get the character conversion in OM/Pi working, please download
441at the sourceforge project site the package 444at the sourceforge project site the package
442sr-character-conversion_SharpROM_arm.ipk.zip 445sr-character-conversion_SharpROM_arm.ipk.zip
443(or oz-character-conversion_OZ-gcc3xx_arm.ipk.zip for OZ roms) 446(or oz-character-conversion_OZ-gcc3xx_arm.ipk.zip for OZ roms)
444from the section "general files for KDE/Pim" 447from the section "general files for KDE/Pim"
445Instructions how to install this package are in a ReadMe in this file. 448Instructions how to install this package are in a ReadMe in this file.
446 449
447 450
448Fixed the orientation change problem in KA/Pi when switching 451Fixed the orientation change problem in KA/Pi when switching
449portrait/landscape mode. 452portrait/landscape mode.
450 453
451French translation available for KA/Pi and OM/Pi. 454French translation available for KA/Pi and OM/Pi.
452 455
453Fixed some problems with categories in KO/Pi in DTM sync. 456Fixed some problems with categories in KO/Pi in DTM sync.
454 457
455Added selection dialog for export to phone in KA/Pi. 458Added selection dialog for export to phone in KA/Pi.
456 459
457If in KO/Pi is an attendee selected to add to a meeting and this 460If in KO/Pi is an attendee selected to add to a meeting and this
458attendee is already in the list of attendees, this person is not added 461attendee is already in the list of attendees, this person is not added
459again. 462again.
460 463
461Some menu cleanup in KA/Pi. 464Some menu cleanup in KA/Pi.
462 465
463********** VERSION 1.9.12 ************ 466********** VERSION 1.9.12 ************
464 467
465Fix for the bug in KO/Pi What's Next view of version 1.9.11. 468Fix for the bug in KO/Pi What's Next view of version 1.9.11.
466 469
467Bugfix: Licence file is now shown again. 470Bugfix: Licence file is now shown again.
468 471
469OM/Pi now supports Unicode (utf8 charset). 472OM/Pi now supports Unicode (utf8 charset).
470Fixed some bugs in OM/Pi. 473Fixed some bugs in OM/Pi.
471 474
472KA/Pi has more German translation. 475KA/Pi has more German translation.
473 476
474 477
475********** VERSION 1.9.11 ************ 478********** VERSION 1.9.11 ************
476 479
477Fixed several problems in PWM/Pi, like 480Fixed several problems in PWM/Pi, like
478asking the user, if unsaved changed are pending 481asking the user, if unsaved changed are pending
479when closing the app. 482when closing the app.
480And PwM/Pi handles now different texts for the 483And PwM/Pi handles now different texts for the
481fields Description, Username, Password, configurable per category. 484fields Description, Username, Password, configurable per category.
482 485
483Fixed a crash in KO/Pi , when importing/loading vcs files 486Fixed a crash in KO/Pi , when importing/loading vcs files
484which have an entry with an attendee with state: 487which have an entry with an attendee with state:
485NEEDS ACTION 488NEEDS ACTION
486 489
487Fixed some problems in the German translation of OM/Pi, 490Fixed some problems in the German translation of OM/Pi,
488which makes some dialogs not fitting on the screen 491which makes some dialogs not fitting on the screen
489of the Z 5500. 492of the Z 5500.
490 493
491Fixed Qtopia crash, when disabling/deinstalling 494Fixed Qtopia crash, when disabling/deinstalling
492KO/Pi alarm applet. 495KO/Pi alarm applet.
493 496
494Implemented direct KDE<->KA/Pi sync for KA/Pi running 497Implemented direct KDE<->KA/Pi sync for KA/Pi running
495on Linux desktop. 498on Linux desktop.
496 499
497Added feature "remove sync info" to sync menu. 500Added feature "remove sync info" to sync menu.
498 501
499Tweaked the KO/Pi What's next view a bit, added 502Tweaked the KO/Pi What's next view a bit, added
500setting to hide events that are done. 503setting to hide events that are done.
501 504
502Disabled "beam receive enabled" on startup to 505Disabled "beam receive enabled" on startup to
503avoid problems if Fastload is enabled. 506avoid problems if Fastload is enabled.
504Please set "beam receive enabled", 507Please set "beam receive enabled",
505if you want to receive data via IR. 508if you want to receive data via IR.
506 509
507Fixed bug in direct KDE<->KO/Pi sync for KO/Pi running 510Fixed bug in direct KDE<->KO/Pi sync for KO/Pi running
508on Linux desktop. 511on Linux desktop.
509 512
510Made in KA/Pi scrolling possible, if details view is selected. 513Made in KA/Pi scrolling possible, if details view is selected.
511(The keyboard focus is set automatically to the search line) 514(The keyboard focus is set automatically to the search line)
512 515
513Fixed a bug in DMT sync, that a new entry in DTM was added 516Fixed a bug in DMT sync, that a new entry in DTM was added
514on every sync to Kx/Pi. 517on every sync to Kx/Pi.
515 518
516Fixed missing writing of KA/Pi categories to DMT entries when syncing. 519Fixed missing writing of KA/Pi categories to DMT entries when syncing.
517 520
518Fixed a bug in DMT sync with todos created in KO/Pi containing 521Fixed a bug in DMT sync with todos created in KO/Pi containing
519non-latin1 characters. 522non-latin1 characters.
520 523
521Rearranged package contents of Sharp-ipks and made all 524Rearranged package contents of Sharp-ipks and made all
522packages installable on SD again. 525packages installable on SD again.
523 526
524Fixed the writing of addressbook data in DTM sync. 527Fixed the writing of addressbook data in DTM sync.
525Empty fields in KA/Pi were not removed. 528Empty fields in KA/Pi were not removed.
526 529
527Added better category handling in KA/Pi: 530Added better category handling in KA/Pi:
528Added item 531Added item
529Edit Categories and 532Edit Categories and
530Manage new categories 533Manage new categories
531to the settings menu. 534to the settings menu.
532Possible to configure a view to display categories. 535Possible to configure a view to display categories.
533 536
534Added detailed "KDE Sync Howto" and "Multi Sync Howto" to Help menu. 537Added detailed "KDE Sync Howto" and "Multi Sync Howto" to Help menu.
535 538
536Fixed displaying of "free" days and time in KO Monthview and Agendaview. 539Fixed displaying of "free" days and time in KO Monthview and Agendaview.
537 540
538... and many other bugfixes. 541... and many other bugfixes.
539 542
540********** VERSION 1.9.10 ************ 543********** VERSION 1.9.10 ************
541 544
542Many internal small bugfixes. 545Many internal small bugfixes.
543And fix of the "big" bug in KO/Pi, 546And fix of the "big" bug in KO/Pi,
544that after Syncing the appointments had an offset by several hours. 547that after Syncing the appointments had an offset by several hours.
545That was a problem with the internal timezone setting, 548That was a problem with the internal timezone setting,
546introduced by the changed timezone configuration settings. 549introduced by the changed timezone configuration settings.
547 550
548German translation for OM/Pi is now available. 551German translation for OM/Pi is now available.
549 552
550 553
551********** VERSION 1.9.9 ************ 554********** VERSION 1.9.9 ************
552 555
553KDE-Pim/Pi has a new Member! 556KDE-Pim/Pi has a new Member!
554It is called PWM/Pi (Passwordmanager/platform-independent) 557It is called PWM/Pi (Passwordmanager/platform-independent)
555and it is available for the Zaurus. 558and it is available for the Zaurus.
556It is planned, that it will be available later for Windows. 559It is planned, that it will be available later for Windows.
557(And for Linux, of course). 560(And for Linux, of course).
558It is a port of the Passwordmanager of KDE. 561It is a port of the Passwordmanager of KDE.
559It will need the MicroKDElibs to run. 562It will need the MicroKDElibs to run.
560 563
561Made loading of addressbooks in KA/Pi up to 7 times faster! 564Made loading of addressbooks in KA/Pi up to 7 times faster!
562The bigger your addressbook file, the more starting speed 565The bigger your addressbook file, the more starting speed
563will you gain. (relatively) 566will you gain. (relatively)
564 567
565The Qtopia addressbook connector is now platform independend 568The Qtopia addressbook connector is now platform independend
566as well and should work on any platform for importing/exporting 569as well and should work on any platform for importing/exporting
567Qtopia and Opie XML files. 570Qtopia and Opie XML files.
568 571
569Added a +30min feature to the timezone settings to make 572Added a +30min feature to the timezone settings to make
570KDE-Pim/Pi useable in Australia and other parts on the 573KDE-Pim/Pi useable in Australia and other parts on the
571world with strange timezones ;-) 574world with strange timezones ;-)
572 575
573German "Umlaute" should now be sorted correctly on the Z in KA/Pi. 576German "Umlaute" should now be sorted correctly on the Z in KA/Pi.
574 577
575It is now possible to disable the 578It is now possible to disable the
576"receive data via infrared" feature, such that syncing with 579"receive data via infrared" feature, such that syncing with
577Outlook is now possible again with Kx/Pi runing. 580Outlook is now possible again with Kx/Pi runing.
578Please disable it, before syncing Sharp DTM with Outlook. 581Please disable it, before syncing Sharp DTM with Outlook.
579For your convenience, the "receive data via infrared" feature 582For your convenience, the "receive data via infrared" feature
580is disabled automatically, if you sync Kx/Pi with DTM. 583is disabled automatically, if you sync Kx/Pi with DTM.
581You have to enable it again manually after syncing. 584You have to enable it again manually after syncing.
582Enabling this feature makes it impossible to start the 585Enabling this feature makes it impossible to start the
583Sharp DTM apps. If this feature is enabled, you will only get the 586Sharp DTM apps. If this feature is enabled, you will only get the
584alarm notification from KO/Pi and not from the Sharp calendar. 587alarm notification from KO/Pi and not from the Sharp calendar.
585This is very useful if you sync KO/Pi with Sharp DTM, 588This is very useful if you sync KO/Pi with Sharp DTM,
586because after syncing you usually would get notified about 589because after syncing you usually would get notified about
587an alarm by KO/Pi and the Sharp Calendar. 590an alarm by KO/Pi and the Sharp Calendar.
588 591
589Together with the Linux desktop version of KO/Pi 592Together with the Linux desktop version of KO/Pi
590it is now possible to sync KO/Pi on the Zaurus 593it is now possible to sync KO/Pi on the Zaurus
591with the complete KDE-desktop (3.3 or later) 594with the complete KDE-desktop (3.3 or later)
592calendar data easily. 595calendar data easily.
593That makes it possible to sync the Z with one 596That makes it possible to sync the Z with one
594click of a mouse with the KDE-Desktop. 597click of a mouse with the KDE-Desktop.
595This feature it available for all Zaurus platforms KO/Pi 598This feature it available for all Zaurus platforms KO/Pi
596is running on. 599is running on.
597The only thing needed is a running KO/Pi on Linux and 600The only thing needed is a running KO/Pi on Linux and
598a compiled version of the small 601a compiled version of the small
599KDE-Pim/Pi<->KDE-Desktop access command line program, 602KDE-Pim/Pi<->KDE-Desktop access command line program,
600which is in the KDE-Pim/Pi sources available. 603which is in the KDE-Pim/Pi sources available.
601 604
602The "KDE-desktop" syncing feature for KA/Pi will follow 605The "KDE-desktop" syncing feature for KA/Pi will follow
603in the next releases. 606in the next releases.
604 607
605Fixed the vcard export bug, which had the version 1.9.8. 608Fixed the vcard export bug, which had the version 1.9.8.
606 609
607Added missing GERMAN translation to KO/Pi. 610Added missing GERMAN translation to KO/Pi.
608Hi PsionX, could you add the missing french translation?Thx! 611Hi PsionX, could you add the missing french translation?Thx!
609 612
610Translation files for KA/Pi are available as well. 613Translation files for KA/Pi are available as well.
611GERMAN translation will be available in the next release. 614GERMAN translation will be available in the next release.
612PsionX ( yres, you again ;-) ), could you start translating 615PsionX ( yres, you again ;-) ), could you start translating
613KA/Pi? Thx! 616KA/Pi? Thx!
614 617
615You can download the version 1.9.9 at 618You can download the version 1.9.9 at
616 619
617http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=112604 620http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=112604
618 621
619Note: 622Note:
620To run the mail program OM/Pi you need libopenssl. 623To run the mail program OM/Pi you need libopenssl.
621A link to a download loaction is available at 624A link to a download loaction is available at
622ZSI at www.killefiz.de 625ZSI at www.killefiz.de
623 626
624 627
625********** VERSION 1.9.8 ************ 628********** VERSION 1.9.8 ************
626 629
627Fixed character decoding in OM/Pi. 630Fixed character decoding in OM/Pi.
628(e.g. German "Umlaute" were not displayed properly.) 631(e.g. German "Umlaute" were not displayed properly.)
629 632
630Made is possible to reparent todos in KO/Pi. 633Made is possible to reparent todos in KO/Pi.
631Use contextmenu or keys (look at Help-Keys + Colors) for that. 634Use contextmenu or keys (look at Help-Keys + Colors) for that.
632 635
633Added the missing Sync-Howto and WhatsNew to the packages. 636Added the missing Sync-Howto and WhatsNew to the packages.
634 637
635KO/Pi on Linux desktop can now sync with KDE desktop. 638KO/Pi on Linux desktop can now sync with KDE desktop.
636That means: When using KO/Pi on Linux desktop for syncing with 639That means: When using KO/Pi on Linux desktop for syncing with
637KDE desktop and the Zaurus, the Zaurus can be synced now 640KDE desktop and the Zaurus, the Zaurus can be synced now
638with all KDE-Calendar resources, not only with one local file. 641with all KDE-Calendar resources, not only with one local file.
639(That makes it possible to sync the Zaurus with the 642(That makes it possible to sync the Zaurus with the
640calendar data on a Kolab server) 643calendar data on a Kolab server)
641 644
642KA/Pi syncing with KDE desktop will be available in the next version. 645KA/Pi syncing with KDE desktop will be available in the next version.
643 646
644 647
645********** VERSION 1.9.7 ************ 648********** VERSION 1.9.7 ************
646 649
647KO/Pi - KA/Pi on Windows: 650KO/Pi - KA/Pi on Windows:
648Now a directory can be defined by the user, where the 651Now a directory can be defined by the user, where the
649application/config data should be saved. 652application/config data should be saved.
650 Define your desired path in the evironment variable 653 Define your desired path in the evironment variable
651 MICROKDEHOME 654 MICROKDEHOME
652 before starting KO/Pi or KA/Pi. 655 before starting KO/Pi or KA/Pi.
653 656
654An easy Kx/Pi to Kx/Pi syncing is now possible 657An easy Kx/Pi to Kx/Pi syncing is now possible
655(it is called Pi-Sync) via network. 658(it is called Pi-Sync) via network.
656Please look at the Sync Howto. 659Please look at the Sync Howto.
657 660
658Exporting of calendar data and contacts to mobile phones is now possible. 661Exporting of calendar data and contacts to mobile phones is now possible.
659The SyncHowto is updated with information howto 662The SyncHowto is updated with information howto
660access/sync mobile phones. 663access/sync mobile phones.
661Please look at the Sync Howto. 664Please look at the Sync Howto.
662 665
663Now KO/Pi and KA/Pi on the Zaurus can receive data via infrared directly. 666Now KO/Pi and KA/Pi on the Zaurus can receive data via infrared directly.
664Please disable Fastload for the original contact/calendar applications 667Please disable Fastload for the original contact/calendar applications
665and close them. 668and close them.
666KO/Pi and KA/Pi must be running in order to receive the data. 669KO/Pi and KA/Pi must be running in order to receive the data.
667(KO/Pi and KA/Pi are always running if Fastload for them is enabled!) 670(KO/Pi and KA/Pi are always running if Fastload for them is enabled!)
668 671
669In the KA/Pi details view are now the preferred tel. numbers displayed on top 672In the KA/Pi details view are now the preferred tel. numbers displayed on top
670of the other data ( emails/tel.numbers/addresses) 673of the other data ( emails/tel.numbers/addresses)
671 674
672Fixed some syncing problems in KA/Pi. 675Fixed some syncing problems in KA/Pi.
673 676
674Added font settings for the KA/Pi details view. 677Added font settings for the KA/Pi details view.
675Added fields "children's name" and "gender" to KA/Pi. 678Added fields "children's name" and "gender" to KA/Pi.
676 679
677Made searching in KA/Pi better: 680Made searching in KA/Pi better:
678Now the first item in a view is selected after a search automatically and 681Now the first item in a view is selected after a search automatically and
679the views can be scrolled up/down when the search input field has the keyboard focus. 682the views can be scrolled up/down when the search input field has the keyboard focus.
680 683
681And, of course, fixed a bunch of reported bugs in KO/Pi and KA/Pi. 684And, of course, fixed a bunch of reported bugs in KO/Pi and KA/Pi.
682 685
683 686
684********** VERSION 1.9.6 ************ 687********** VERSION 1.9.6 ************
685 688
686Changes in the external application communication on the Zaurus 689Changes in the external application communication on the Zaurus
687in order to use less RAM when the apps are running. 690in order to use less RAM when the apps are running.
688First syncing of addressbooks (KA/Pi) is possible. 691First syncing of addressbooks (KA/Pi) is possible.
689 692
690 693
691********** VERSION 1.9.5a ************ 694********** VERSION 1.9.5a ************
692 695
693Fixed a bug in KO/Pi in the SharpDTM sync of version 1.9.5. 696Fixed a bug in KO/Pi in the SharpDTM sync of version 1.9.5.
694Fixed some small bugs. 697Fixed some small bugs.
695KA/Pi shows now the birthday in summary view. 698KA/Pi shows now the birthday in summary view.
696Now OM/Pi and KA/Pi are using the date format defined in KO/Pi 699Now OM/Pi and KA/Pi are using the date format defined in KO/Pi
697for displaying dates. 700for displaying dates.
698 701
699 702
700********** VERSION 1.9.5 ************ 703********** VERSION 1.9.5 ************
701 704
702There is still no Addressbook syncing! 705There is still no Addressbook syncing!
703 706
704New in 1.9.5: 707New in 1.9.5:
705 708
706Many bugfixes. 709Many bugfixes.
707Better searching in KA/Pi. 710Better searching in KA/Pi.
708You can configure in KA/Pi if you want to search only after 711You can configure in KA/Pi if you want to search only after
709<return> key pressed. 712<return> key pressed.
710 713
711Better mail downloading in OM/Pi. 714Better mail downloading in OM/Pi.
712 715
713First experimental alpha version of sync of KO/Pi with mobile phones. 716First experimental alpha version of sync of KO/Pi with mobile phones.
714See gammu documentation for supported phones. 717See gammu documentation for supported phones.
715You 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. 718You 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.
716Quick hint how to use: 719Quick hint how to use:
717NOTE: MOBILE PHONE SYNC IS EXPERIMENTAL! 720NOTE: MOBILE PHONE SYNC IS EXPERIMENTAL!
718Install kammu_1.9.5_arm.ipk , libbluetooth and libsdp. 721Install kammu_1.9.5_arm.ipk , libbluetooth and libsdp.
719Create syncprofile - mobile device 722Create syncprofile - mobile device
720Remove entry for model. (Leave empty ). 723Remove entry for model. (Leave empty ).
721Enable infrared on Zaurus and your Phone. 724Enable infrared on Zaurus and your Phone.
722Sync. 725Sync.
723To get a more detailed log, start kopi from konsole. 726To get a more detailed log, start kopi from konsole.
724 727
725********** VERSION 1.9.4 ************ 728********** VERSION 1.9.4 ************
726 729
727This is the version 1.9.4 of KDE-Pim/Pi for the Zaurus. 730This is the version 1.9.4 of KDE-Pim/Pi for the Zaurus.
728 731
729WARNING: 732WARNING:
730PLEASE BACKUP ALL YOUR DATA! 733PLEASE BACKUP ALL YOUR DATA!
731We have changed a lot and maybe there are some unknown problems. 734We have changed a lot and maybe there are some unknown problems.
732 735
733SYNC HANDLING HAS CHANGED! 736SYNC HANDLING HAS CHANGED!
734Such that, if you sync now with an already synded device, you will duplicated entries after the first sync. 737Such that, if you sync now with an already synded device, you will duplicated entries after the first sync.
735(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks). 738(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks).
736 739
737You need the kmicrokdelibs_1.9.4_arm.ipk as a base for the other programs. 740You need the kmicrokdelibs_1.9.4_arm.ipk as a base for the other programs.
738If 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. 741If 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.
739 742
740As programs are available: 743As programs are available:
741KO/Pi (korganizer ipk) - a calendar program. 744KO/Pi (korganizer ipk) - a calendar program.
742KA/Pi (kaddressbook ipk ) - an addressbook 745KA/Pi (kaddressbook ipk ) - an addressbook
743OM/Pi (kopiemail ipk ) an email program with pop/smtp and IMAP support. 746OM/Pi (kopiemail ipk ) an email program with pop/smtp and IMAP support.
744 747
745An alarm notification program ( korganizer-alarm ipk ) for KO/Pi that notifies you about alarms, even if the Zaurus is in suspend mode. 748An alarm notification program ( korganizer-alarm ipk ) for KO/Pi that notifies you about alarms, even if the Zaurus is in suspend mode.
746(If you do not see an icon in the taskbar after installing korganizer-alarm, please restart Qtopia) 749(If you do not see an icon in the taskbar after installing korganizer-alarm, please restart Qtopia)
747 750
748All the applications are installed in a "Pim" TAB. 751All the applications are installed in a "Pim" TAB.
749If 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 752If 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
750 753
751All the application are integrated. 754All the application are integrated.
752Such 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. 755Such 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.
753 756
754HINT: 757HINT:
755If you install KPhone/Pi 0.9.7, it will be called, if you click in KA/Pi on a phone number. 758If you install KPhone/Pi 0.9.7, it will be called, if you click in KA/Pi on a phone number.
756 759
757What's new? 760What's new?
758 761
759SYNC HANDLING HAS CHANGED! 762SYNC HANDLING HAS CHANGED!
760Such that, if you sync now with an already synded device, you will duplicated entries after the first sync. 763Such that, if you sync now with an already synded device, you will duplicated entries after the first sync.
761(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks). 764(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks).
762 765
763New in OM/Pi: 766New in OM/Pi:
764When 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. 767When 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.
765 768
766New in KO/Pi: 769New in KO/Pi:
767French is now available for KO/Pi. 770French is now available for KO/Pi.
768Choose menu:Actions - Configure:TAB locale 771Choose menu:Actions - Configure:TAB locale
769Syncing has changed. 772Syncing has changed.
770Phone sync available soon. 773Phone sync available soon.
771Not much changes, I cannot remember them ... 774Not much changes, I cannot remember them ...
772 775
773New in KA/Pi: 776New in KA/Pi:
774Beaming possible. 777Beaming possible.
775Sharp DTM readonly access possible( create a new DTM resource ); 778Sharp DTM readonly access possible( create a new DTM resource );
776Better searching possible. 779Better searching possible.
777Search is performed only after pressing the return key. 780Search is performed only after pressing the return key.
778Use wildcard * to specify parts of a name. 781Use wildcard * to specify parts of a name.
779 782
780Better 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 * . 783Better 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 * .
781 784
782A big improvement is the new management of the contact access. 785A big improvement is the new management of the contact access.
783In version 1.9.3, every application was using their own addressbook access data. 786In version 1.9.3, every application was using their own addressbook access data.
784That means, the addressbook was loaded up to three times in the memory, when accessed by KA/Pi, KO/Pi and OM/Pi. 787That means, the addressbook was loaded up to three times in the memory, when accessed by KA/Pi, KO/Pi and OM/Pi.
785That was wasting of memory, if you had several hundreds of contacts. 788That was wasting of memory, if you had several hundreds of contacts.
786 789
787Now only KA/Pi accesses the addressbook. 790Now only KA/Pi accesses the addressbook.
788If 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. 791If 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.
789If you click on an attendee in a meeting, its contact data is displayed in KA/Pi directly. 792If you click on an attendee in a meeting, its contact data is displayed in KA/Pi directly.
790That means, if KO/Pi or OM/Pi want to access contact data, KA/Pi is started first. 793That means, if KO/Pi or OM/Pi want to access contact data, KA/Pi is started first.
791 794
792New in the KO/Pi alarm applet: 795New in the KO/Pi alarm applet:
793Configure your own timer popup menu! 796Configure your own timer popup menu!
794(Text and minutes for timer countdown) 797(Text and minutes for timer countdown)
795Just edit the file 798Just edit the file
796(yourhomedir)/.kopialarmtimerrc 799(yourhomedir)/.kopialarmtimerrc
797and start/stop a timer to get a new menu with the data of this file. 800and start/stop a timer to get a new menu with the data of this file.
798 801
799********** VERSION 1.9.3 ************ 802********** VERSION 1.9.3 ************
8001) 8031)
801Now KO/Pi on Windows imports directly the calendar data of 804Now KO/Pi on Windows imports directly the calendar data of
802an installed Outlook. Should work with OL version >= 2000. 805an installed Outlook. Should work with OL version >= 2000.
803 806
804********** VERSION 1.9.2 ************ 807********** VERSION 1.9.2 ************
8051) 8081)
806KDE-Pim/Pi has got a new member: 809KDE-Pim/Pi has got a new member:
807KmicroMail (KM/Pi) is a mail program, 810KmicroMail (KM/Pi) is a mail program,
808which can handle IMAP and POP mail access. 811which can handle IMAP and POP mail access.
809It is based on Opie-Mail v3. 812It is based on Opie-Mail v3.
810All dependencies to the Opie libraries ar removed, 813All dependencies to the Opie libraries ar removed,
811such that no additional Opie lib is needed. 814such that no additional Opie lib is needed.
812It is already integrated in KO/Pi and KA/Pi. 815It is already integrated in KO/Pi and KA/Pi.
813It it now available for the Zaurus,probably it 816It it now available for the Zaurus,probably it
814will be available for other platforms later. 817will be available for other platforms later.
815Hint: 818Hint:
816Create your own contact (name + email) 819Create your own contact (name + email)
817in KA/Pi, select this contact and choose menu: 820in KA/Pi, select this contact and choose menu:
818Settings - Set Who Am I. 821Settings - Set Who Am I.
819Now the settings of this contact are used as 822Now the settings of this contact are used as
820the sender data in KM/Pi. 823the sender data in KM/Pi.
8212) 8242)
822KDE-Pim/Pi is split up in five different 825KDE-Pim/Pi is split up in five different
823packages now precompiled for Sharp Zaurus: 826packages now precompiled for Sharp Zaurus:
824--kmicrokdelibs_1.9.2_arm.ipk 827--kmicrokdelibs_1.9.2_arm.ipk
825The libs are needed for any 828The libs are needed for any
826of the following programs: 829of the following programs:
827--kaddressbook_1.9.2_arm.ipk 830--kaddressbook_1.9.2_arm.ipk
828--kmicromail_1.9.2_arm.ipk 831--kmicromail_1.9.2_arm.ipk
829--korganizer_1.9.2_arm.ipk 832--korganizer_1.9.2_arm.ipk
830Independ from that, there is the alarm applet 833Independ from that, there is the alarm applet
831available for KO/Pi, which also offers 834available for KO/Pi, which also offers
832quick access for a new mail or 835quick access for a new mail or
833showing the addressbook.: 836showing the addressbook.:
834--korganizer-alarm_1.9.2_arm.ipk 837--korganizer-alarm_1.9.2_arm.ipk
835Independend means, that the alarm applet 838Independend means, that the alarm applet
836does not need any of the libs or programs above to run. 839does not need any of the libs or programs above to run.
837But it would be quite useless without these programs. 840But it would be quite useless without these programs.
838NOTE: 841NOTE:
839If you get a 842If you get a
840"This application depends on other programs" 843"This application depends on other programs"
841during installation of 844during installation of
842--kmicrokdelibs_1.9.2_arm.ipk 845--kmicrokdelibs_1.9.2_arm.ipk
843you probably do not have to care about that. 846you probably do not have to care about that.
844kmicrokdelibs_1.9.2 will come with some 847kmicrokdelibs_1.9.2 will come with some
845resource plugins, which needs additional libraries. 848resource plugins, which needs additional libraries.
846(E.g. libopie1, if you want to use the 849(E.g. libopie1, if you want to use the
847opie resource connector in KA/Pi). 850opie resource connector in KA/Pi).
848If you do not have this libraries installed, 851If you do not have this libraries installed,
849you simply cannot use the resource. 852you simply cannot use the resource.
850To make it clear: 853To make it clear:
851If the libraries are missing, the applications 854If the libraries are missing, the applications
852using kmicrokdelibs will start, 855using kmicrokdelibs will start,
853because the resources are plugins. 856because the resources are plugins.
8543) 8573)
855KO/Pi and friends are now installable on SD-Card! 858KO/Pi and friends are now installable on SD-Card!
856It is recommended to install all libs and apps 859It is recommended to install all libs and apps
857on the SD card or all in the internal storage. 860on the SD card or all in the internal storage.
858There may be problems, if this is mixed. 861There may be problems, if this is mixed.
8594) 8624)
860Fixed two bugs in the alarm notification on Windows. 863Fixed two bugs in the alarm notification on Windows.
8615) 8645)
862Great improvement! 865Great improvement!
863KO/Pi uses now the latest version of libical. 866KO/Pi uses now the latest version of libical.
864Libical is the library which actually reads 867Libical is the library which actually reads
865the calendar files and extract the data from it. 868the calendar files and extract the data from it.
866With the old version, there were problems 869With the old version, there were problems
867(crashes or program hangs) when licical did read 870(crashes or program hangs) when licical did read
868files, which were not stored from KO/Pi. 871files, which were not stored from KO/Pi.
869I do not know, if the new libical works perfect, 872I do not know, if the new libical works perfect,
870but actually it works much better than 873but actually it works much better than
871the old version. 874the old version.
872There are no problems with compatibility with 875There are no problems with compatibility with
873old calendar files of KO/Pi, of course! 876old calendar files of KO/Pi, of course!
8746) 8776)
875New in KA/Pi: 878New in KA/Pi:
876Opie addressbook resource connector available! 879Opie addressbook resource connector available!
877You will need libopie1 and the opie addressbook, 880You will need libopie1 and the opie addressbook,
878of course. 881of course.
879With the Opie addressbook resource connector, 882With the Opie addressbook resource connector,
880you can access the Opie addressbook readonly in KA/Pi. 883you can access the Opie addressbook readonly in KA/Pi.
881If you want to edit or import the data into KA/Pi, 884If you want to edit or import the data into KA/Pi,
882do this: 885do this:
883a) Create an Opie resource. 886a) Create an Opie resource.
884 (Menu: Settings-Configure Resources). 887 (Menu: Settings-Configure Resources).
885After configuration and restarting KA/Pi you should see 888After configuration and restarting KA/Pi you should see
886the Opie contacts in KA/Pi. 889the Opie contacts in KA/Pi.
887b) Select some or all Opie contacts. 890b) Select some or all Opie contacts.
888(NOTE: +++++ 891(NOTE: +++++
889To know exactly, what contacts are Opie contacts, 892To know exactly, what contacts are Opie contacts,
890do this: Choose menu: 893do this: Choose menu:
891View-Modify View - TAB Fields. 894View-Modify View - TAB Fields.
892Select in the above list "Resource" and click 895Select in the above list "Resource" and click
893down arrow to add it to the "Selected fields". 896down arrow to add it to the "Selected fields".
894Click OK. 897Click OK.
895Now you have a new column "Resource" in your list, 898Now you have a new column "Resource" in your list,
896where you can see, what an Opie resource is. 899where you can see, what an Opie resource is.
897++++ NOTE end.) 900++++ NOTE end.)
898Ok, we do have now some Opie contacts seleted. 901Ok, we do have now some Opie contacts seleted.
899(Use SHIFT or CTRL key in order to multiple select). 902(Use SHIFT or CTRL key in order to multiple select).
900c) Choose menu: Edit-Copy. 903c) Choose menu: Edit-Copy.
901d) Choose menu: Edit-Paste. 904d) Choose menu: Edit-Paste.
902e) Select the resource, you want to add the contacts to. 905e) Select the resource, you want to add the contacts to.
903Congrats! Now you have read/write access to the copied 906Congrats! Now you have read/write access to the copied
904opie contacts as "real" KA/Pi contacts. 907opie contacts as "real" KA/Pi contacts.
905 908
906 909
907********** VERSION 1.9.1 ************ 910********** VERSION 1.9.1 ************
9081) 9111)
909 +++ IMPORTANT 1 +++ 912 +++ IMPORTANT 1 +++
910 913
911The storing place of the default calendar 914The storing place of the default calendar
912file has changed! 915file has changed!
913The default calendar file was 916The default calendar file was
914Applications/korganizer/mycalendar.ics 917Applications/korganizer/mycalendar.ics
915on Zaurus and 918on Zaurus and
916(yourHomeDir)/korganizer/mycalendar.ics 919(yourHomeDir)/korganizer/mycalendar.ics
917on Windows/Linux desktop. Now it is 920on Windows/Linux desktop. Now it is
918(yourHomeDir)/kdepim/korganizer/mycalendar.ics 921(yourHomeDir)/kdepim/korganizer/mycalendar.ics
919on Zaurus, Windows and Linux. 922on Zaurus, Windows and Linux.
920To load the old file, choose menu 923To load the old file, choose menu
921File-Load calendar backup. 924File-Load calendar backup.
922(It should be loaded automatically 925(It should be loaded automatically
923at startup with a warning message displayed). 926at startup with a warning message displayed).
924The place of the configuration file has changed too. 927The place of the configuration file has changed too.
925If you want to use your old KO/Pi config, 928If you want to use your old KO/Pi config,
926copy it to 929copy it to
927(yourHomeDir)/kdepim/config/korganizerrc 930(yourHomeDir)/kdepim/config/korganizerrc
928Please read VERSION 1.9.0 - topic 3) as well! 931Please read VERSION 1.9.0 - topic 3) as well!
929 932
930 +++ IMPORTANT 2 +++ 933 +++ IMPORTANT 2 +++
931 934
932Because of the new paths, you will need 935Because of the new paths, you will need
933a new version of the KO/Pi alarm applet 936a new version of the KO/Pi alarm applet
934for Zaurus. 937for Zaurus.
935Use version >= 1.9.1 938Use version >= 1.9.1
936 939
9372) 9402)
938Now the QWhat'sThis Icon works for items 941Now the QWhat'sThis Icon works for items
939in the month view as well. 942in the month view as well.
940(See VERSION 1.7.8 Topic 1) ). 943(See VERSION 1.7.8 Topic 1) ).
9413) 9443)
942You can import birtsdays/anniversaries 945You can import birtsdays/anniversaries
943from KA/Pi into KO/Pi. 946from KA/Pi into KO/Pi.
944Choose menu File-Import birthdays. 947Choose menu File-Import birthdays.
945If you import twice, already imported items 948If you import twice, already imported items
946will not be imported again, if they 949will not be imported again, if they
947have not been changed in KO/Pi. 950have not been changed in KO/Pi.
9484) 9514)
949When syncing with sharp DTM, now a progress 952When syncing with sharp DTM, now a progress
950is shown, when the data is written back. 953is shown, when the data is written back.
951If there is much data in KO/Pi and no data 954If there is much data in KO/Pi and no data
952in DTM, that can take a long time. 955in DTM, that can take a long time.
953(But only for the first time ). 956(But only for the first time ).
9545) 9575)
955In the search dialog, you can search 958In the search dialog, you can search
956now for the name/email of an attendee 959now for the name/email of an attendee
957of an event/todo. 960of an event/todo.
958To get more space for displaying 961To get more space for displaying
959search results, the buttons 962search results, the buttons
960for "search" and "close" on the 963for "search" and "close" on the
961bottom are removed in the PDA version. 964bottom are removed in the PDA version.
962You have to click OK in the top right 965You have to click OK in the top right
963corner to do a search. 966corner to do a search.
9646) 9676)
965Now it is possible to disable the displaying 968Now it is possible to disable the displaying
966of todo items in the Allday part of the Agenda. 969of todo items in the Allday part of the Agenda.
967Choose Menu Action-Configure, 970Choose Menu Action-Configure,
968TAB Todo View, checkbox 971TAB Todo View, checkbox
969"Allday Agenda view shows todos" 972"Allday Agenda view shows todos"
9707) 9737)
971If FastLoad is enabled, now the settings and the 974If FastLoad is enabled, now the settings and the
972calendar data are saved, when KO/Pi is closed. 975calendar data are saved, when KO/Pi is closed.
973(If no Fastload is enabled, KO/Pi saves 976(If no Fastload is enabled, KO/Pi saves
974the data as well, of course) 977the data as well, of course)
9758) 9788)
976The Agenda View has a minimize-splitter now, 979The Agenda View has a minimize-splitter now,
977such that the height of the allday part can be 980such that the height of the allday part can be
978changed quickly. 981changed quickly.
979 982
980********** VERSION 1.9.0 ************ 983********** VERSION 1.9.0 ************
9811) 9841)
982KO/Pi is now merged with the new microKDE from KA/Pi. 985KO/Pi is now merged with the new microKDE from KA/Pi.
983KO/Pi accesses now KA/Pi as the addressbook. 986KO/Pi accesses now KA/Pi as the addressbook.
984The other ddressbook-plugins are not working any longer. 987The other ddressbook-plugins are not working any longer.
985(It is planned, that later KA/Pi itself uses these plugins) 988(It is planned, that later KA/Pi itself uses these plugins)
986New versions of KO/Pi are only available 989New versions of KO/Pi are only available
987together with KA/Pi as the KDE-Pim/Pi package. 990together with KA/Pi as the KDE-Pim/Pi package.
9882) 9912)
989If you click on an attendee of a meeting in the 992If you click on an attendee of a meeting in the
990event viewer, a detailed summary of the 993event viewer, a detailed summary of the
991attendee is shown. 994attendee is shown.
9923) 9953)
993The place of the configuration file has changed. 996The place of the configuration file has changed.
994If you want to use your old KO/Pi config, copy 997If you want to use your old KO/Pi config, copy
995Applications/korganizer/config_korganizerrc 998Applications/korganizer/config_korganizerrc
996to 999to
997Applications/korganizer/config/korganizerrc 1000Applications/korganizer/config/korganizerrc
998 1001
999********** VERSION 1.7.8 ************ 1002********** VERSION 1.7.8 ************
10001) 10031)
1001Now the QWhat'sThis ist working. 1004Now the QWhat'sThis ist working.
1002Enable the QWhat'sThis icon in the toolbar. 1005Enable the QWhat'sThis icon in the toolbar.
1003(You have to restart to reload the changed toolbar config). 1006(You have to restart to reload the changed toolbar config).
1004Now click on the QWhat'sThis Icon 1007Now click on the QWhat'sThis Icon
1005in the top right corner of KO/Pi. 1008in the top right corner of KO/Pi.
1006Then click on an item in the Agenda View: 1009Then click on an item in the Agenda View:
1007You will get a detailed display of the items content. 1010You will get a detailed display of the items content.
10082) 10112)
1009Some other very minor changes. 1012Some other very minor changes.
1010But I have forgotten the details ... 1013But I have forgotten the details ...
1011For that reason I start this log here: 1014For that reason I start this log here:
1012To document my changes, when I am doing it. 1015To document my changes, when I am doing it.
1013 1016
1014********** VERSION 1.7.7 ************ 1017********** VERSION 1.7.7 ************
1015Stable Version of KO/Pi 1018Stable Version of KO/Pi
diff --git a/kmicromail/accountview.cpp b/kmicromail/accountview.cpp
index 3ad3e9b..e9be224 100644
--- a/kmicromail/accountview.cpp
+++ b/kmicromail/accountview.cpp
@@ -1,230 +1,233 @@
1 1
2#include "accountview.h" 2#include "accountview.h"
3#include "accountitem.h" 3#include "accountitem.h"
4#include "selectstore.h" 4#include "selectstore.h"
5 5
6#include <libmailwrapper/settings.h> 6#include <libmailwrapper/settings.h>
7#include <libmailwrapper/mailwrapper.h> 7#include <libmailwrapper/mailwrapper.h>
8#include <libmailwrapper/mailtypes.h> 8#include <libmailwrapper/mailtypes.h>
9#include <libmailwrapper/abstractmail.h> 9#include <libmailwrapper/abstractmail.h>
10 10
11/* OPIE */ 11/* OPIE */
12#include <qpe/qpeapplication.h> 12#include <qpe/qpeapplication.h>
13 13
14/* QT */ 14/* QT */
15#include <qmessagebox.h> 15#include <qmessagebox.h>
16#include <qpopupmenu.h> 16#include <qpopupmenu.h>
17#include <qcheckbox.h> 17#include <qcheckbox.h>
18#include <qspinbox.h> 18#include <qspinbox.h>
19#include <klocale.h> 19#include <klocale.h>
20 20
21using namespace Opie::Core; 21using namespace Opie::Core;
22AccountView::AccountView( QWidget *parent, const char *name, WFlags flags ) 22AccountView::AccountView( QWidget *parent, const char *name, WFlags flags )
23 : QListView( parent, name, flags ) 23 : QListView( parent, name, flags )
24{ 24{
25 connect( this, SIGNAL( selectionChanged(QListViewItem*) ), 25 connect( this, SIGNAL( selectionChanged(QListViewItem*) ),
26 SLOT( refresh(QListViewItem*) ) ); 26 SLOT( refresh(QListViewItem*) ) );
27 connect( this, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&,int) ),this, 27 connect( this, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&,int) ),this,
28 SLOT( slotHold(int,QListViewItem*,const QPoint&,int) ) ); 28 SLOT( slotHold(int,QListViewItem*,const QPoint&,int) ) );
29 setSorting(0); 29 setSorting(0);
30} 30}
31 31
32AccountView::~AccountView() 32AccountView::~AccountView()
33{ 33{
34 imapAccounts.clear(); 34 imapAccounts.clear();
35 mhAccounts.clear(); 35 mhAccounts.clear();
36} 36}
37 37
38void AccountView::slotContextMenu(int id) 38void AccountView::slotContextMenu(int id)
39{ 39{
40 AccountViewItem *view = static_cast<AccountViewItem *>(currentItem()); 40 AccountViewItem *view = static_cast<AccountViewItem *>(currentItem());
41 if (!view) return; 41 if (!view) return;
42 view->contextMenuSelected(id); 42 view->contextMenuSelected(id);
43} 43}
44 44
45void AccountView::slotHold(int button, QListViewItem * item,const QPoint&,int) 45void AccountView::slotHold(int button, QListViewItem * item,const QPoint&,int)
46{ 46{
47 if (button==1) {return;} 47 if (button==1) {return;}
48 if (!item) return; 48 if (!item) return;
49 AccountViewItem *view = static_cast<AccountViewItem *>(item); 49 AccountViewItem *view = static_cast<AccountViewItem *>(item);
50 QPopupMenu*m = view->getContextMenu(); 50 QPopupMenu*m = view->getContextMenu();
51 if (!m) return; 51 if (!m) return;
52 connect(m,SIGNAL(activated(int)),this,SLOT(slotContextMenu(int))); 52 connect(m,SIGNAL(activated(int)),this,SLOT(slotContextMenu(int)));
53 m->setFocus(); 53 m->setFocus();
54 m->exec( QPoint( QCursor::pos().x(), QCursor::pos().y()) ); 54 m->exec( QPoint( QCursor::pos().x(), QCursor::pos().y()) );
55 delete m; 55 delete m;
56} 56}
57 57
58void AccountView::populate( QList<Account> list ) 58void AccountView::populate( QList<Account> list )
59{ 59{
60 clear(); 60 clear();
61 61
62 imapAccounts.clear(); 62 imapAccounts.clear();
63 mhAccounts.clear(); 63 mhAccounts.clear();
64 64
65 mhAccounts.append(new MHviewItem(AbstractMail::defaultLocalfolder(),this)); 65 mhAccounts.append(new MHviewItem(AbstractMail::defaultLocalfolder(),this));
66 66
67 Account *it; 67 Account *it;
68 for ( it = list.first(); it; it = list.next() ) 68 for ( it = list.first(); it; it = list.next() )
69 { 69 {
70 if ( it->getType() == MAILLIB::A_IMAP ) 70 if ( it->getType() == MAILLIB::A_IMAP )
71 { 71 {
72 IMAPaccount *imap = static_cast<IMAPaccount *>(it); 72 IMAPaccount *imap = static_cast<IMAPaccount *>(it);
73 imapAccounts.append(new IMAPviewItem( imap, this )); 73 imapAccounts.append(new IMAPviewItem( imap, this ));
74 } 74 }
75 else if ( it->getType() == MAILLIB::A_POP3 ) 75 else if ( it->getType() == MAILLIB::A_POP3 )
76 { 76 {
77 POP3account *pop3 = static_cast<POP3account *>(it); 77 POP3account *pop3 = static_cast<POP3account *>(it);
78 /* must not be hold 'cause it isn't required */ 78 /* must not be hold 'cause it isn't required */
79 (void) new POP3viewItem( pop3, this ); 79 (void) new POP3viewItem( pop3, this );
80 } 80 }
81 else if ( it->getType() == MAILLIB::A_NNTP ) 81 else if ( it->getType() == MAILLIB::A_NNTP )
82 { 82 {
83 NNTPaccount *nntp = static_cast<NNTPaccount *>(it); 83 NNTPaccount *nntp = static_cast<NNTPaccount *>(it);
84 /* must not be hold 'cause it isn't required */ 84 /* must not be hold 'cause it isn't required */
85 (void) new NNTPviewItem( nntp, this ); 85 (void) new NNTPviewItem( nntp, this );
86 } 86 }
87 } 87 }
88} 88}
89 89
90void AccountView::refresh(QListViewItem *item) 90void AccountView::refresh(QListViewItem *item)
91{ 91{
92 if ( item ) 92 if ( item )
93 { 93 {
94 m_currentItem = item; 94 m_currentItem = item;
95 QValueList<RecMailP> headerlist; 95 QValueList<RecMailP> headerlist;
96 AccountViewItem *view = static_cast<AccountViewItem *>(item); 96 AccountViewItem *view = static_cast<AccountViewItem *>(item);
97 view->refresh(headerlist); 97 view->refresh(headerlist);
98 emit refreshMailview(headerlist); 98 emit refreshMailview(headerlist);
99 } 99 }
100} 100}
101void AccountView::refreshOutgoing() 101void AccountView::refreshOutgoing()
102{ 102{
103 m_currentItem = currentItem(); 103 m_currentItem = currentItem();
104 if ( !m_currentItem ) return; 104 if ( !m_currentItem ) return;
105 AccountViewItem *view = static_cast<AccountViewItem *>(m_currentItem); 105 AccountViewItem *view = static_cast<AccountViewItem *>(m_currentItem);
106 QString bName = view->getFolder()->getDisplayName(); 106 QString bName = view->getFolder()->getDisplayName();
107 if (bName.startsWith("/")&&bName.length()>1) 107 if (bName.startsWith("/")&&bName.length()>1)
108 { 108 {
109 bName.replace(0,1,""); 109 bName.replace(0,1,"");
110 } 110 }
111 int pos = bName.findRev("/"); 111 int pos = bName.findRev("/");
112 if (pos > 0) 112 if (pos > 0)
113 { 113 {
114 bName.replace(0,pos+1,""); 114 bName.replace(0,pos+1,"");
115 } 115 }
116 if ( bName.lower() == "outgoing" ) 116 //qDebug("name *%s* ",bName.lower().latin1() );
117 if ( bName.lower() == "outgoing" || bName.lower() == "sent" || bName.lower() == "sendfailed" ) {
117 refreshCurrent(); 118 refreshCurrent();
119 // qDebug("refresh ");
120 }
118} 121}
119 122
120void AccountView::refreshCurrent() 123void AccountView::refreshCurrent()
121{ 124{
122 m_currentItem = currentItem(); 125 m_currentItem = currentItem();
123 if ( !m_currentItem ) return; 126 if ( !m_currentItem ) return;
124 QValueList<RecMailP> headerlist; 127 QValueList<RecMailP> headerlist;
125 AccountViewItem *view = static_cast<AccountViewItem *>(m_currentItem); 128 AccountViewItem *view = static_cast<AccountViewItem *>(m_currentItem);
126 view->refresh(headerlist); 129 view->refresh(headerlist);
127 emit refreshMailview(headerlist); 130 emit refreshMailview(headerlist);
128} 131}
129 132
130void AccountView::refreshAll() 133void AccountView::refreshAll()
131{ 134{
132} 135}
133 136
134RecBodyP AccountView::fetchBody(const RecMailP&aMail) 137RecBodyP AccountView::fetchBody(const RecMailP&aMail)
135{ 138{
136 QListViewItem*item = selectedItem (); 139 QListViewItem*item = selectedItem ();
137 if (!item) return new RecBody(); 140 if (!item) return new RecBody();
138 AccountViewItem *view = static_cast<AccountViewItem *>(item); 141 AccountViewItem *view = static_cast<AccountViewItem *>(item);
139 return view->fetchBody(aMail); 142 return view->fetchBody(aMail);
140} 143}
141 144
142void AccountView::setupFolderselect(Selectstore*sels) 145void AccountView::setupFolderselect(Selectstore*sels)
143{ 146{
144 147
145#ifndef DESKTOP_VERSION 148#ifndef DESKTOP_VERSION
146 sels->showMaximized(); 149 sels->showMaximized();
147#else 150#else
148 sels->show(); 151 sels->show();
149#endif 152#endif
150 QStringList sFolders; 153 QStringList sFolders;
151 unsigned int i = 0; 154 unsigned int i = 0;
152 for (i=0; i < mhAccounts.count();++i) 155 for (i=0; i < mhAccounts.count();++i)
153 { 156 {
154 mhAccounts[i]->refresh(false); 157 mhAccounts[i]->refresh(false);
155 sFolders = mhAccounts[i]->subFolders(); 158 sFolders = mhAccounts[i]->subFolders();
156 sels->addAccounts(mhAccounts[i]->getWrapper(),sFolders); 159 sels->addAccounts(mhAccounts[i]->getWrapper(),sFolders);
157 } 160 }
158 for (i=0; i < imapAccounts.count();++i) 161 for (i=0; i < imapAccounts.count();++i)
159 { 162 {
160 if (imapAccounts[i]->offline()) 163 if (imapAccounts[i]->offline())
161 continue; 164 continue;
162 imapAccounts[i]->refreshFolders(false); 165 imapAccounts[i]->refreshFolders(false);
163 sels->addAccounts(imapAccounts[i]->getWrapper(),imapAccounts[i]->subFolders()); 166 sels->addAccounts(imapAccounts[i]->getWrapper(),imapAccounts[i]->subFolders());
164 } 167 }
165} 168}
166void AccountView::downloadMailsInbox(const FolderP&fromFolder,AbstractMail*fromWrapper) 169void AccountView::downloadMailsInbox(const FolderP&fromFolder,AbstractMail*fromWrapper)
167{ 170{
168#if 0 171#if 0
169 AbstractMail*targetMail = 0; 172 AbstractMail*targetMail = 0;
170 QString targetFolder = ""; 173 QString targetFolder = "";
171 Selectstore sels; 174 Selectstore sels;
172 setupFolderselect(&sels); 175 setupFolderselect(&sels);
173 if (!sels.exec()) return; 176 if (!sels.exec()) return;
174 targetMail = sels.currentMail(); 177 targetMail = sels.currentMail();
175 targetFolder = sels.currentFolder(); 178 targetFolder = sels.currentFolder();
176 if ( (fromWrapper==targetMail && fromFolder->getName()==targetFolder) || 179 if ( (fromWrapper==targetMail && fromFolder->getName()==targetFolder) ||
177 targetFolder.isEmpty()) 180 targetFolder.isEmpty())
178 { 181 {
179 return; 182 return;
180 } 183 }
181 if (sels.newFolder() && !targetMail->createMbox(targetFolder)) 184 if (sels.newFolder() && !targetMail->createMbox(targetFolder))
182 { 185 {
183 QMessageBox::critical(0,i18n("Error creating new Folder"), 186 QMessageBox::critical(0,i18n("Error creating new Folder"),
184 i18n("<center>Error while creating<br>new folder - breaking.</center>")); 187 i18n("<center>Error while creating<br>new folder - breaking.</center>"));
185 return; 188 return;
186 } 189 }
187 int maxsize = 0; 190 int maxsize = 0;
188 if ( sels.useSize->isChecked()) 191 if ( sels.useSize->isChecked())
189 maxsize = sels.sizeSpinBox->value(); 192 maxsize = sels.sizeSpinBox->value();
190 fromWrapper->mvcpAllMails(fromFolder,targetFolder,targetMail,sels.moveMails(), maxsize); 193 fromWrapper->mvcpAllMails(fromFolder,targetFolder,targetMail,sels.moveMails(), maxsize);
191#endif 194#endif
192 fromWrapper->downloadNewMails( fromFolder, mhAccounts[0]->getWrapper()); 195 fromWrapper->downloadNewMails( fromFolder, mhAccounts[0]->getWrapper());
193 refreshCurrent(); 196 refreshCurrent();
194 197
195} 198}
196 199
197void AccountView::downloadMails(const FolderP&fromFolder,AbstractMail*fromWrapper) 200void AccountView::downloadMails(const FolderP&fromFolder,AbstractMail*fromWrapper)
198{ 201{
199 AbstractMail*targetMail = 0; 202 AbstractMail*targetMail = 0;
200 QString targetFolder = ""; 203 QString targetFolder = "";
201 Selectstore sels; 204 Selectstore sels;
202 setupFolderselect(&sels); 205 setupFolderselect(&sels);
203 if (!sels.exec()) return; 206 if (!sels.exec()) return;
204 targetMail = sels.currentMail(); 207 targetMail = sels.currentMail();
205 targetFolder = sels.currentFolder(); 208 targetFolder = sels.currentFolder();
206 if ( (fromWrapper==targetMail && fromFolder->getName()==targetFolder) || 209 if ( (fromWrapper==targetMail && fromFolder->getName()==targetFolder) ||
207 targetFolder.isEmpty()) 210 targetFolder.isEmpty())
208 { 211 {
209 return; 212 return;
210 } 213 }
211 if (sels.newFolder() && !targetMail->createMbox(targetFolder)) 214 if (sels.newFolder() && !targetMail->createMbox(targetFolder))
212 { 215 {
213 QMessageBox::critical(0,i18n("Error creating new Folder"), 216 QMessageBox::critical(0,i18n("Error creating new Folder"),
214 i18n("<center>Error while creating<br>new folder - breaking.</center>")); 217 i18n("<center>Error while creating<br>new folder - breaking.</center>"));
215 return; 218 return;
216 } 219 }
217 int maxsize = 0; 220 int maxsize = 0;
218 if ( sels.useSize->isChecked()) 221 if ( sels.useSize->isChecked())
219 maxsize = sels.sizeSpinBox->value(); 222 maxsize = sels.sizeSpinBox->value();
220 223
221 fromWrapper->mvcpAllMails(fromFolder,targetFolder,targetMail,sels.moveMails(), maxsize); 224 fromWrapper->mvcpAllMails(fromFolder,targetFolder,targetMail,sels.moveMails(), maxsize);
222 refreshCurrent(); 225 refreshCurrent();
223} 226}
224 227
225bool AccountView::currentisDraft() 228bool AccountView::currentisDraft()
226{ 229{
227 AccountViewItem *view = static_cast<AccountViewItem *>(currentItem()); 230 AccountViewItem *view = static_cast<AccountViewItem *>(currentItem());
228 if (!view) return false; 231 if (!view) return false;
229 return view->isDraftfolder(); 232 return view->isDraftfolder();
230} 233}
diff --git a/kmicromail/libmailwrapper/smtpwrapper.cpp b/kmicromail/libmailwrapper/smtpwrapper.cpp
index 24f4786..5096f67 100644
--- a/kmicromail/libmailwrapper/smtpwrapper.cpp
+++ b/kmicromail/libmailwrapper/smtpwrapper.cpp
@@ -1,470 +1,470 @@
1#include "smtpwrapper.h" 1#include "smtpwrapper.h"
2#include "mailwrapper.h" 2#include "mailwrapper.h"
3#include "abstractmail.h" 3#include "abstractmail.h"
4#include "logindialog.h" 4#include "logindialog.h"
5#include "mailtypes.h" 5#include "mailtypes.h"
6#include "sendmailprogress.h" 6#include "sendmailprogress.h"
7 7
8//#include <opie2/odebug.h> 8//#include <opie2/odebug.h>
9//#include <qt.h> 9//#include <qt.h>
10#include <qapplication.h> 10#include <qapplication.h>
11#include <qmessagebox.h> 11#include <qmessagebox.h>
12#include <stdlib.h> 12#include <stdlib.h>
13#ifndef DESKTOP_VERSION 13#ifndef DESKTOP_VERSION
14//#include <qpe/config.h> 14//#include <qpe/config.h>
15#include <qpe/qcopenvelope_qws.h> 15#include <qpe/qcopenvelope_qws.h>
16#endif 16#endif
17#include <libetpan/libetpan.h> 17#include <libetpan/libetpan.h>
18#include <klocale.h> 18#include <klocale.h>
19#include <kglobal.h> 19#include <kglobal.h>
20#include <kconfig.h> 20#include <kconfig.h>
21 21
22 22
23using namespace Opie::Core; 23using namespace Opie::Core;
24progressMailSend*SMTPwrapper::sendProgress = 0; 24progressMailSend*SMTPwrapper::sendProgress = 0;
25 25
26SMTPwrapper::SMTPwrapper(SMTPaccount * aSmtp ) 26SMTPwrapper::SMTPwrapper(SMTPaccount * aSmtp )
27 : Generatemail() 27 : Generatemail()
28{ 28{
29 m_SmtpAccount = aSmtp; 29 m_SmtpAccount = aSmtp;
30 KConfig cfg( locateLocal("config", "kopiemailrc" ) ); 30 KConfig cfg( locateLocal("config", "kopiemailrc" ) );
31 cfg.setGroup( "Status" ); 31 cfg.setGroup( "Status" );
32 m_queuedMail = cfg.readNumEntry( "outgoing", 0 ); 32 m_queuedMail = cfg.readNumEntry( "outgoing", 0 );
33 emit queuedMails( m_queuedMail ); 33 emit queuedMails( m_queuedMail );
34 connect( this, SIGNAL( queuedMails(int) ), this, SLOT( emitQCop(int) ) ); 34 connect( this, SIGNAL( queuedMails(int) ), this, SLOT( emitQCop(int) ) );
35 m_smtp = 0; 35 m_smtp = 0;
36} 36}
37 37
38SMTPwrapper::~SMTPwrapper() 38SMTPwrapper::~SMTPwrapper()
39{ 39{
40 disc_server(); 40 disc_server();
41} 41}
42 42
43void SMTPwrapper::emitQCop( int queued ) { 43void SMTPwrapper::emitQCop( int queued ) {
44#ifndef DESKTOP_VERSION 44#ifndef DESKTOP_VERSION
45 QCopEnvelope env( "QPE/Pim", "outgoingMails(int)" ); 45 // LR : not used in kde-pim
46 env << queued; 46 //QCopEnvelope env( "QPE/Pim", "outgoingMails(int)" );
47 //env << queued;
47#endif 48#endif
48} 49}
49 50
50QString SMTPwrapper::mailsmtpError( int errnum ) { 51QString SMTPwrapper::mailsmtpError( int errnum ) {
51 switch ( errnum ) { 52 switch ( errnum ) {
52 case MAILSMTP_NO_ERROR: 53 case MAILSMTP_NO_ERROR:
53 return i18n( "No error" ); 54 return i18n( "No error" );
54 case MAILSMTP_ERROR_UNEXPECTED_CODE: 55 case MAILSMTP_ERROR_UNEXPECTED_CODE:
55 return i18n( "Unexpected error code" ); 56 return i18n( "Unexpected error code" );
56 case MAILSMTP_ERROR_SERVICE_NOT_AVAILABLE: 57 case MAILSMTP_ERROR_SERVICE_NOT_AVAILABLE:
57 return i18n( "Service not available" ); 58 return i18n( "Service not available" );
58 case MAILSMTP_ERROR_STREAM: 59 case MAILSMTP_ERROR_STREAM:
59 return i18n( "Stream error" ); 60 return i18n( "Stream error" );
60 case MAILSMTP_ERROR_HOSTNAME: 61 case MAILSMTP_ERROR_HOSTNAME:
61 return i18n( "gethostname() failed" ); 62 return i18n( "gethostname() failed" );
62 case MAILSMTP_ERROR_NOT_IMPLEMENTED: 63 case MAILSMTP_ERROR_NOT_IMPLEMENTED:
63 return i18n( "Not implemented" ); 64 return i18n( "Not implemented" );
64 case MAILSMTP_ERROR_ACTION_NOT_TAKEN: 65 case MAILSMTP_ERROR_ACTION_NOT_TAKEN:
65 return i18n( "Error, action not taken" ); 66 return i18n( "Error, action not taken" );
66 case MAILSMTP_ERROR_EXCEED_STORAGE_ALLOCATION: 67 case MAILSMTP_ERROR_EXCEED_STORAGE_ALLOCATION:
67 return i18n( "Data exceeds storage allocation" ); 68 return i18n( "Data exceeds storage allocation" );
68 case MAILSMTP_ERROR_IN_PROCESSING: 69 case MAILSMTP_ERROR_IN_PROCESSING:
69 return i18n( "Error in processing" ); 70 return i18n( "Error in processing" );
70 case MAILSMTP_ERROR_STARTTLS_NOT_SUPPORTED: 71 case MAILSMTP_ERROR_STARTTLS_NOT_SUPPORTED:
71 return i18n( "Starttls not supported" ); 72 return i18n( "Starttls not supported" );
72 // case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE: 73 // case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE:
73 // return i18n( "Insufficient system storage" ); 74 // return i18n( "Insufficient system storage" );
74 case MAILSMTP_ERROR_MAILBOX_UNAVAILABLE: 75 case MAILSMTP_ERROR_MAILBOX_UNAVAILABLE:
75 return i18n( "Mailbox unavailable" ); 76 return i18n( "Mailbox unavailable" );
76 case MAILSMTP_ERROR_MAILBOX_NAME_NOT_ALLOWED: 77 case MAILSMTP_ERROR_MAILBOX_NAME_NOT_ALLOWED:
77 return i18n( "Mailbox name not allowed" ); 78 return i18n( "Mailbox name not allowed" );
78 case MAILSMTP_ERROR_BAD_SEQUENCE_OF_COMMAND: 79 case MAILSMTP_ERROR_BAD_SEQUENCE_OF_COMMAND:
79 return i18n( "Bad command sequence" ); 80 return i18n( "Bad command sequence" );
80 case MAILSMTP_ERROR_USER_NOT_LOCAL: 81 case MAILSMTP_ERROR_USER_NOT_LOCAL:
81 return i18n( "User not local" ); 82 return i18n( "User not local" );
82 case MAILSMTP_ERROR_TRANSACTION_FAILED: 83 case MAILSMTP_ERROR_TRANSACTION_FAILED:
83 return i18n( "Transaction failed" ); 84 return i18n( "Transaction failed" );
84 case MAILSMTP_ERROR_MEMORY: 85 case MAILSMTP_ERROR_MEMORY:
85 return i18n( "Memory error" ); 86 return i18n( "Memory error" );
86 case MAILSMTP_ERROR_CONNECTION_REFUSED: 87 case MAILSMTP_ERROR_CONNECTION_REFUSED:
87 return i18n( "Connection refused" ); 88 return i18n( "Connection refused" );
88 default: 89 default:
89 return i18n( "Unknown error code" ); 90 return i18n( "Unknown error code" );
90 } 91 }
91} 92}
92 93
93 94
94void SMTPwrapper::progress( size_t current, size_t maximum ) { 95void SMTPwrapper::progress( size_t current, size_t maximum ) {
95 if (SMTPwrapper::sendProgress) { 96 if (SMTPwrapper::sendProgress) {
96 SMTPwrapper::sendProgress->setSingleMail(current, maximum ); 97 SMTPwrapper::sendProgress->setSingleMail(current, maximum );
97 qApp->processEvents(); 98 qApp->processEvents();
98 } 99 }
99} 100}
100 101
101void SMTPwrapper::storeMail(const char*mail, size_t length, const QString&box) { 102void SMTPwrapper::storeMail(const char*mail, size_t length, const QString&box) {
102 if (!mail) 103 if (!mail)
103 return; 104 return;
104 QString localfolders = AbstractMail::defaultLocalfolder(); 105 QString localfolders = AbstractMail::defaultLocalfolder();
105 AbstractMail*wrap = AbstractMail::getWrapper(localfolders); 106 AbstractMail*wrap = AbstractMail::getWrapper(localfolders);
106 wrap->createMbox(box); 107 wrap->createMbox(box);
107 wrap->storeMessage(mail,length,box); 108 wrap->storeMessage(mail,length,box);
108 delete wrap; 109 delete wrap;
109} 110}
110 111
111bool SMTPwrapper::smtpSend( mailmime *mail,bool later) { 112bool SMTPwrapper::smtpSend( mailmime *mail,bool later) {
112 clist *rcpts = 0; 113 clist *rcpts = 0;
113 char *from, *data; 114 char *from, *data;
114 size_t size; 115 size_t size;
115 116
116 from = data = 0; 117 from = data = 0;
117 118
118 mailmessage * msg = 0; 119 mailmessage * msg = 0;
119 msg = mime_message_init(mail); 120 msg = mime_message_init(mail);
120 mime_message_set_tmpdir(msg,getenv( "HOME" )); 121 mime_message_set_tmpdir(msg,getenv( "HOME" ));
121 int r = mailmessage_fetch(msg,&data,&size); 122 int r = mailmessage_fetch(msg,&data,&size);
122 mime_message_detach_mime(msg); 123 mime_message_detach_mime(msg);
123 mailmessage_free(msg); 124 mailmessage_free(msg);
124 if (r != MAIL_NO_ERROR || !data) { 125 if (r != MAIL_NO_ERROR || !data) {
125 if (data) 126 if (data)
126 free(data); 127 free(data);
127 qDebug("Error fetching mime... "); 128 qDebug("Error fetching mime... ");
128 return false; 129 return false;
129 } 130 }
130 msg = 0; 131 msg = 0;
131 if (later) { 132 if (later) {
132 storeMail(data,size,"Outgoing"); 133 storeMail(data,size,"Outgoing");
133 if (data) 134 if (data)
134 free( data ); 135 free( data );
135 KConfig cfg( locateLocal("config", "kopiemailrc" ) ); 136 KConfig cfg( locateLocal("config", "kopiemailrc" ) );
136 cfg.setGroup( "Status" ); 137 cfg.setGroup( "Status" );
137 cfg.writeEntry( "outgoing", ++m_queuedMail ); 138 cfg.writeEntry( "outgoing", ++m_queuedMail );
138 emit queuedMails( m_queuedMail ); 139 emit queuedMails( m_queuedMail );
139 return true; 140 return true;
140 } 141 }
141 from = getFrom( mail ); 142 from = getFrom( mail );
142 rcpts = createRcptList( mail->mm_data.mm_message.mm_fields ); 143 rcpts = createRcptList( mail->mm_data.mm_message.mm_fields );
143 bool result = smtpSend(from,rcpts,data,size); 144 bool result = smtpSend(from,rcpts,data,size);
144 if (data) { 145 if (data) {
145 free(data); 146 free(data);
146 } 147 }
147 if (from) { 148 if (from) {
148 free(from); 149 free(from);
149 } 150 }
150 if (rcpts) 151 if (rcpts)
151 smtp_address_list_free( rcpts ); 152 smtp_address_list_free( rcpts );
152 return result; 153 return result;
153} 154}
154 155
155void SMTPwrapper::storeFailedMail(const char*data,unsigned int size, const char*failuremessage) 156void SMTPwrapper::storeFailedMail(const char*data,unsigned int size, const char*failuremessage)
156{ 157{
157 if (data) { 158 if (data) {
158 storeMail(data,size,"Sendfailed"); 159 storeMail(data,size,"Sendfailed");
159 } 160 }
160 if (failuremessage) { 161 if (failuremessage) {
161 QMessageBox::critical(0,i18n("Error sending mail"), 162 QMessageBox::critical(0,i18n("Error sending mail"),
162 failuremessage); 163 failuremessage);
163 } 164 }
164} 165}
165 166
166int SMTPwrapper::start_smtp_tls() 167int SMTPwrapper::start_smtp_tls()
167{ 168{
168 if (!m_smtp) { 169 if (!m_smtp) {
169 return MAILSMTP_ERROR_IN_PROCESSING; 170 return MAILSMTP_ERROR_IN_PROCESSING;
170 } 171 }
171 int err = mailesmtp_starttls(m_smtp); 172 int err = mailesmtp_starttls(m_smtp);
172 if (err != MAILSMTP_NO_ERROR) return err; 173 if (err != MAILSMTP_NO_ERROR) return err;
173 mailstream_low * low; 174 mailstream_low * low;
174 mailstream_low * new_low; 175 mailstream_low * new_low;
175 low = mailstream_get_low(m_smtp->stream); 176 low = mailstream_get_low(m_smtp->stream);
176 if (!low) { 177 if (!low) {
177 return MAILSMTP_ERROR_IN_PROCESSING; 178 return MAILSMTP_ERROR_IN_PROCESSING;
178 } 179 }
179 int fd = mailstream_low_get_fd(low); 180 int fd = mailstream_low_get_fd(low);
180 if (fd > -1 && (new_low = mailstream_low_ssl_open(fd))!=0) { 181 if (fd > -1 && (new_low = mailstream_low_ssl_open(fd))!=0) {
181 mailstream_low_free(low); 182 mailstream_low_free(low);
182 mailstream_set_low(m_smtp->stream, new_low); 183 mailstream_set_low(m_smtp->stream, new_low);
183 } else { 184 } else {
184 return MAILSMTP_ERROR_IN_PROCESSING; 185 return MAILSMTP_ERROR_IN_PROCESSING;
185 } 186 }
186 return err; 187 return err;
187} 188}
188 189
189void SMTPwrapper::connect_server() 190void SMTPwrapper::connect_server()
190{ 191{
191 QString server, user, pass; 192 QString server, user, pass;
192 bool ssl; 193 bool ssl;
193 uint16_t port; 194 uint16_t port;
194 ssl = false; 195 ssl = false;
195 bool try_tls = true; 196 bool try_tls = true;
196 bool force_tls=false; 197 bool force_tls=false;
197 QString failuretext = ""; 198 QString failuretext = "";
198 199
199 if (m_smtp || !m_SmtpAccount) { 200 if (m_smtp || !m_SmtpAccount) {
200 return; 201 return;
201 } 202 }
202 server = m_SmtpAccount->getServer(); 203 server = m_SmtpAccount->getServer();
203 if ( m_SmtpAccount->ConnectionType() == 2 ) { 204 if ( m_SmtpAccount->ConnectionType() == 2 ) {
204 ssl = true; 205 ssl = true;
205 try_tls = false; 206 try_tls = false;
206 } else if (m_SmtpAccount->ConnectionType() == 1) { 207 } else if (m_SmtpAccount->ConnectionType() == 1) {
207 force_tls = true; 208 force_tls = true;
208 } 209 }
209 int result = 1; 210 int result = 1;
210 port = m_SmtpAccount->getPort().toUInt(); 211 port = m_SmtpAccount->getPort().toUInt();
211 212
212 m_smtp = mailsmtp_new( 20, &progress ); 213 m_smtp = mailsmtp_new( 20, &progress );
213 if ( m_smtp == NULL ) { 214 if ( m_smtp == NULL ) {
214 /* no failure message cause this happens when problems with memory - than we 215 /* no failure message cause this happens when problems with memory - than we
215 we can not display any messagebox */ 216 we can not display any messagebox */
216 return; 217 return;
217 } 218 }
218 219
219 int err = MAILSMTP_NO_ERROR; 220 int err = MAILSMTP_NO_ERROR;
220 ; // odebug << "Servername " << server << " at port " << port << "" << oendl; 221 ; // odebug << "Servername " << server << " at port " << port << "" << oendl;
221 if ( ssl ) { 222 if ( ssl ) {
222 qDebug("smtp: ssl_connect "); 223 qDebug("smtp: ssl_connect ");
223 err = mailsmtp_ssl_connect( m_smtp, server.latin1(), port ); 224 err = mailsmtp_ssl_connect( m_smtp, server.latin1(), port );
224 } else { 225 } else {
225 ; // odebug << "No SSL session" << oendl; 226 ; // odebug << "No SSL session" << oendl;
226 err = mailsmtp_socket_connect( m_smtp, server.latin1(), port ); 227 err = mailsmtp_socket_connect( m_smtp, server.latin1(), port );
227 } 228 }
228 if ( err != MAILSMTP_NO_ERROR ) { 229 if ( err != MAILSMTP_NO_ERROR ) {
229 qDebug("Error init SMTP connection" ); 230 qDebug("Error init SMTP connection" );
230 failuretext = i18n("Error init SMTP connection:\n%1").arg(mailsmtpError(err)); 231 failuretext = i18n("Error init SMTP connection:\n%1").arg(mailsmtpError(err));
231 result = 0; 232 result = 0;
232 } 233 }
233 234
234 qDebug("SMTP connection inited "); 235 qDebug("SMTP connection inited ");
235 /* switch to tls after init 'cause there it will send the ehlo */ 236 /* switch to tls after init 'cause there it will send the ehlo */
236 if (result) { 237 if (result) {
237 err = mailsmtp_init( m_smtp ); 238 err = mailsmtp_init( m_smtp );
238 if (err != MAILSMTP_NO_ERROR) { 239 if (err != MAILSMTP_NO_ERROR) {
239 result = 0; 240 result = 0;
240 qDebug("Error init SMTP connection "); 241 qDebug("Error init SMTP connection ");
241 failuretext = i18n("Error init SMTP connection:\n%1").arg(mailsmtpError(err)); 242 failuretext = i18n("Error init SMTP connection:\n%1").arg(mailsmtpError(err));
242 } 243 }
243 } 244 }
244 if (try_tls) { 245 if (try_tls) {
245 qDebug("Smpt: Try tls "); 246 qDebug("Smpt: Try tls ");
246 err = start_smtp_tls(); 247 err = start_smtp_tls();
247 if (err != MAILSMTP_NO_ERROR) { 248 if (err != MAILSMTP_NO_ERROR) {
248 try_tls = false; 249 try_tls = false;
249 qDebug("no tls "); 250 qDebug("no tls ");
250 } else { 251 } else {
251 err = mailesmtp_ehlo(m_smtp); 252 err = mailesmtp_ehlo(m_smtp);
252 } 253 }
253 } 254 }
254 //qDebug("mailesmtp_ehlo %d ",err ); 255 //qDebug("mailesmtp_ehlo %d ",err );
255 if (!try_tls && force_tls) { 256 if (!try_tls && force_tls) {
256 result = 0; 257 result = 0;
257 failuretext = i18n("Error init SMTP tls:%1").arg(mailsmtpError(err)); 258 failuretext = i18n("Error init SMTP tls:%1").arg(mailsmtpError(err));
258 } 259 }
259 260
260 if (result==1 && m_SmtpAccount->getLogin() ) { 261 if (result==1 && m_SmtpAccount->getLogin() ) {
261 ; // odebug << "smtp with auth" << oendl; 262 ; // odebug << "smtp with auth" << oendl;
262 if ( m_SmtpAccount->getUser().isEmpty() || m_SmtpAccount->getPassword().isEmpty() ) { 263 if ( m_SmtpAccount->getUser().isEmpty() || m_SmtpAccount->getPassword().isEmpty() ) {
263 // get'em 264 // get'em
264 LoginDialog login( m_SmtpAccount->getUser(), 265 LoginDialog login( m_SmtpAccount->getUser(),
265 m_SmtpAccount->getPassword(), NULL, 0, true ); 266 m_SmtpAccount->getPassword(), NULL, 0, true );
266 login.show(); 267 login.show();
267 if ( QDialog::Accepted == login.exec() ) { 268 if ( QDialog::Accepted == login.exec() ) {
268 // ok 269 // ok
269 user = login.getUser(); 270 user = login.getUser();
270 pass = login.getPassword(); 271 pass = login.getPassword();
271 } else { 272 } else {
272 result = 0; 273 result = 0;
273 failuretext=i18n("Login aborted - \nstoring mail to localfolder"); 274 failuretext=i18n("Login aborted - \nstoring mail to localfolder");
274 } 275 }
275 } else { 276 } else {
276 user = m_SmtpAccount->getUser(); 277 user = m_SmtpAccount->getUser();
277 pass = m_SmtpAccount->getPassword(); 278 pass = m_SmtpAccount->getPassword();
278 } 279 }
279 ; // odebug << "session->auth: " << m_smtp->auth << "" << oendl; 280 ; // odebug << "session->auth: " << m_smtp->auth << "" << oendl;
280 if (result) { 281 if (result) {
281 err = mailsmtp_auth( m_smtp, (char*)user.latin1(), (char*)pass.latin1() ); 282 err = mailsmtp_auth( m_smtp, (char*)user.latin1(), (char*)pass.latin1() );
282 if ( err == MAILSMTP_NO_ERROR ) { 283 if ( err == MAILSMTP_NO_ERROR ) {
283 qDebug("Smtp authentification ok "); 284 qDebug("Smtp authentification ok ");
284 } else { 285 } else {
285 failuretext = i18n("Authentification failed"); 286 failuretext = i18n("Authentification failed");
286 result = 0; 287 result = 0;
287 } 288 }
288 } 289 }
289 } 290 }
290} 291}
291 292
292void SMTPwrapper::disc_server() 293void SMTPwrapper::disc_server()
293{ 294{
294 if (m_smtp) { 295 if (m_smtp) {
295 mailsmtp_quit( m_smtp ); 296 mailsmtp_quit( m_smtp );
296 mailsmtp_free( m_smtp ); 297 mailsmtp_free( m_smtp );
297 m_smtp = 0; 298 m_smtp = 0;
298 } 299 }
299} 300}
300 301
301int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size ) 302int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size )
302{ 303{
303 int err,result; 304 int err,result;
304 QString failuretext = ""; 305 QString failuretext = "";
305 306
306 connect_server(); 307 connect_server();
307 308
308 result = 1; 309 result = 1;
309 if (m_smtp) { 310 if (m_smtp) {
310 err = mailsmtp_send( m_smtp, from, rcpts, data, size ); 311 err = mailsmtp_send( m_smtp, from, rcpts, data, size );
311 if ( err != MAILSMTP_NO_ERROR ) { 312 if ( err != MAILSMTP_NO_ERROR ) {
312 qDebug("Error sending mail"); 313 qDebug("Error sending mail");
313 failuretext=i18n("Error sending mail:\n%1").arg(mailsmtpError(err)); 314 failuretext=i18n("Error sending mail:\n%1").arg(mailsmtpError(err));
314 result = 0; 315 result = 0;
315 } 316 }
316 } else { 317 } else {
317 result = 0; 318 result = 0;
318 } 319 }
319 320
320 if (!result) { 321 if (!result) {
321 storeFailedMail(data,size,failuretext); 322 storeFailedMail(data,size,failuretext);
322 } else { 323 } else {
323 ; // odebug << "Mail sent." << oendl; 324 ; // odebug << "Mail sent." << oendl;
324 storeMail(data,size,"Sent"); 325 storeMail(data,size,"Sent");
325 } 326 }
326 return result; 327 return result;
327} 328}
328 329
329bool SMTPwrapper::sendMail(const Opie::Core::OSmartPointer<Mail>&mail,bool later ) 330bool SMTPwrapper::sendMail(const Opie::Core::OSmartPointer<Mail>&mail,bool later )
330{ 331{
331 mailmime * mimeMail; 332 mailmime * mimeMail;
332 bool result = true; 333 bool result = true;
333 mimeMail = createMimeMail(mail ); 334 mimeMail = createMimeMail(mail );
334 if ( mimeMail == 0 ) { 335 if ( mimeMail == 0 ) {
335 qDebug("SMTP wrapper:Error creating mail! "); 336 qDebug("SMTP wrapper:Error creating mail! ");
336 return false; 337 return false;
337 } else { 338 } else {
338 sendProgress = new progressMailSend(); 339 sendProgress = new progressMailSend();
339 sendProgress->show(); 340 sendProgress->show();
340 sendProgress->setMaxMails(1); 341 sendProgress->setMaxMails(1);
341 result = smtpSend( mimeMail,later); 342 result = smtpSend( mimeMail,later);
342 ; // odebug << "Clean up done" << oendl; 343 ; // odebug << "Clean up done" << oendl;
343 sendProgress->hide(); 344 sendProgress->hide();
344 delete sendProgress; 345 delete sendProgress;
345 sendProgress = 0; 346 sendProgress = 0;
346 mailmime_free( mimeMail ); 347 mailmime_free( mimeMail );
347 } 348 }
348 return result; 349 return result;
349} 350}
350 351
351int SMTPwrapper::sendQueuedMail(AbstractMail*wrap,const RecMailP&which) { 352int SMTPwrapper::sendQueuedMail(AbstractMail*wrap,const RecMailP&which) {
352 size_t curTok = 0; 353 size_t curTok = 0;
353 mailimf_fields *fields = 0; 354 mailimf_fields *fields = 0;
354 mailimf_field*ffrom = 0; 355 mailimf_field*ffrom = 0;
355 clist *rcpts = 0; 356 clist *rcpts = 0;
356 char*from = 0; 357 char*from = 0;
357 int res = 0; 358 int res = 0;
358 359
359 encodedString * data = wrap->fetchRawBody(which); 360 encodedString * data = wrap->fetchRawBody(which);
360 if (!data) 361 if (!data)
361 return 0; 362 return 0;
362 int err = mailimf_fields_parse( data->Content(), data->Length(), &curTok, &fields ); 363 int err = mailimf_fields_parse( data->Content(), data->Length(), &curTok, &fields );
363 if (err != MAILIMF_NO_ERROR) { 364 if (err != MAILIMF_NO_ERROR) {
364 delete data; 365 delete data;
365 delete wrap; 366 delete wrap;
366 return 0; 367 return 0;
367 } 368 }
368 369
369 rcpts = createRcptList( fields ); 370 rcpts = createRcptList( fields );
370 ffrom = getField(fields, MAILIMF_FIELD_FROM ); 371 ffrom = getField(fields, MAILIMF_FIELD_FROM );
371 from = getFrom(ffrom); 372 from = getFrom(ffrom);
372 373
373 if (rcpts && from) { 374 if (rcpts && from) {
374 res = smtpSend(from,rcpts,data->Content(),data->Length()); 375 res = smtpSend(from,rcpts,data->Content(),data->Length());
375 } 376 }
376 if (fields) { 377 if (fields) {
377 mailimf_fields_free(fields); 378 mailimf_fields_free(fields);
378 fields = 0; 379 fields = 0;
379 } 380 }
380 if (data) { 381 if (data) {
381 delete data; 382 delete data;
382 } 383 }
383 if (from) { 384 if (from) {
384 free(from); 385 free(from);
385 } 386 }
386 if (rcpts) { 387 if (rcpts) {
387 smtp_address_list_free( rcpts ); 388 smtp_address_list_free( rcpts );
388 } 389 }
389 return res; 390 return res;
390} 391}
391 392
392/* this is a special fun */ 393/* this is a special fun */
393bool SMTPwrapper::flushOutbox() { 394bool SMTPwrapper::flushOutbox() {
394 bool returnValue = true; 395 bool returnValue = true;
395 396
396 ; // odebug << "Sending the queue" << oendl; 397 ; // odebug << "Sending the queue" << oendl;
397 if (!m_SmtpAccount) { 398 if (!m_SmtpAccount) {
398 ; // odebug << "No smtp account given" << oendl; 399 ; // odebug << "No smtp account given" << oendl;
399 return false; 400 return false;
400 } 401 }
401 402
402 bool reset_user_value = false; 403 bool reset_user_value = false;
403 QString localfolders = AbstractMail::defaultLocalfolder(); 404 QString localfolders = AbstractMail::defaultLocalfolder();
404 AbstractMail*wrap = AbstractMail::getWrapper(localfolders); 405 AbstractMail*wrap = AbstractMail::getWrapper(localfolders);
405 if (!wrap) { 406 if (!wrap) {
406 ; // odebug << "memory error" << oendl; 407 ; // odebug << "memory error" << oendl;
407 return false; 408 return false;
408 } 409 }
409 QString oldPw, oldUser; 410 QString oldPw, oldUser;
410 QValueList<RecMailP> mailsToSend; 411 QValueList<RecMailP> mailsToSend;
411 QValueList<RecMailP> mailsToRemove; 412 QValueList<RecMailP> mailsToRemove;
412 QString mbox("Outgoing"); 413 QString mbox("Outgoing");
413 wrap->listMessages(mbox,mailsToSend); 414 wrap->listMessages(mbox,mailsToSend);
414 if (mailsToSend.count()==0) { 415 if (mailsToSend.count()==0) {
415 delete wrap; 416 delete wrap;
416 ; // odebug << "No mails to send" << oendl; 417 ; // odebug << "No mails to send" << oendl;
417 return false; 418 return false;
418 } 419 }
419 420
420 oldPw = m_SmtpAccount->getPassword(); 421 oldPw = m_SmtpAccount->getPassword();
421 oldUser = m_SmtpAccount->getUser(); 422 oldUser = m_SmtpAccount->getUser();
422 if (m_SmtpAccount->getLogin() && (m_SmtpAccount->getUser().isEmpty() || m_SmtpAccount->getPassword().isEmpty()) ) { 423 if (m_SmtpAccount->getLogin() && (m_SmtpAccount->getUser().isEmpty() || m_SmtpAccount->getPassword().isEmpty()) ) {
423 // get'em 424 // get'em
424 QString user,pass; 425 QString user,pass;
425 LoginDialog login( m_SmtpAccount->getUser(), m_SmtpAccount->getPassword(), NULL, 0, true ); 426 LoginDialog login( m_SmtpAccount->getUser(), m_SmtpAccount->getPassword(), NULL, 0, true );
426 login.show(); 427 login.show();
427 if ( QDialog::Accepted == login.exec() ) { 428 if ( QDialog::Accepted == login.exec() ) {
428 // ok 429 // ok
429 user = login.getUser().latin1(); 430 user = login.getUser().latin1();
430 pass = login.getPassword().latin1(); 431 pass = login.getPassword().latin1();
431 reset_user_value = true; 432 reset_user_value = true;
432 m_SmtpAccount->setUser(user); 433 m_SmtpAccount->setUser(user);
433 m_SmtpAccount->setPassword(pass); 434 m_SmtpAccount->setPassword(pass);
434 } else { 435 } else {
435 return true; 436 return true;
436 } 437 }
437 } 438 }
438 439
439 440
440 sendProgress = new progressMailSend(); 441 sendProgress = new progressMailSend();
441 sendProgress->show(); 442 sendProgress->show();
442 sendProgress->setMaxMails(mailsToSend.count()); 443 sendProgress->setMaxMails(mailsToSend.count());
443 444
444 while (mailsToSend.count()>0) { 445 while (returnValue && mailsToSend.count()>0) {
445 if (sendQueuedMail(wrap, (*mailsToSend.begin()))==0) { 446 if (sendQueuedMail(wrap, (*mailsToSend.begin()))==0) {
446 QMessageBox::critical(0,i18n("Error sending mail"), 447 QMessageBox::critical(0,i18n("Error sending mail"),
447 i18n("Error sending queued mail - breaking")); 448 i18n("Error sending queued mail.\nBreaking."));
448 returnValue = false; 449 returnValue = false;
449 break;
450 } 450 }
451 mailsToRemove.append((*mailsToSend.begin())); 451 mailsToRemove.append((*mailsToSend.begin()));
452 mailsToSend.remove(mailsToSend.begin()); 452 mailsToSend.remove(mailsToSend.begin());
453 sendProgress->setCurrentMails(mailsToRemove.count()); 453 sendProgress->setCurrentMails(mailsToRemove.count());
454 } 454 }
455 if (reset_user_value) { 455 if (reset_user_value) {
456 m_SmtpAccount->setUser(oldUser); 456 m_SmtpAccount->setUser(oldUser);
457 m_SmtpAccount->setPassword(oldPw); 457 m_SmtpAccount->setPassword(oldPw);
458 } 458 }
459 KConfig cfg( locateLocal("config", "kopiemailrc" ) ); 459 KConfig cfg( locateLocal("config", "kopiemailrc" ) );
460 cfg.setGroup( "Status" ); 460 cfg.setGroup( "Status" );
461 m_queuedMail = 0; 461 m_queuedMail = mailsToSend.count();
462 cfg.writeEntry( "outgoing", m_queuedMail ); 462 cfg.writeEntry( "outgoing", m_queuedMail );
463 emit queuedMails( m_queuedMail ); 463 emit queuedMails( m_queuedMail );
464 sendProgress->hide(); 464 sendProgress->hide();
465 delete sendProgress; 465 delete sendProgress;
466 sendProgress = 0; 466 sendProgress = 0;
467 wrap->deleteMails(mbox,mailsToRemove); 467 wrap->deleteMails(mbox,mailsToRemove);
468 delete wrap; 468 delete wrap;
469 return returnValue; 469 return returnValue;
470} 470}
diff --git a/kmicromail/opiemail.cpp b/kmicromail/opiemail.cpp
index f68467c..197f7ec 100644
--- a/kmicromail/opiemail.cpp
+++ b/kmicromail/opiemail.cpp
@@ -1,672 +1,677 @@
1// CHANGED 2004-09-31 Lutz Rogowski 1// CHANGED 2004-09-31 Lutz Rogowski
2// CHANGED 2004-08-06 Lutz Rogowski 2// CHANGED 2004-08-06 Lutz Rogowski
3 3
4 4
5#define protected public 5#define protected public
6#include <qwidget.h> 6#include <qwidget.h>
7#undef protected 7#undef protected
8#include "koprefsdialog.h" 8#include "koprefsdialog.h"
9#include <kapplication.h> 9#include <kapplication.h>
10#include <libkdepim/externalapphandler.h> 10#include <libkdepim/externalapphandler.h>
11#include <libkdepim/kpimglobalprefs.h> 11#include <libkdepim/kpimglobalprefs.h>
12#ifdef MINIKDE_KDIALOG_H 12#ifdef MINIKDE_KDIALOG_H
13#undef MINIKDE_KDIALOG_H 13#undef MINIKDE_KDIALOG_H
14#endif 14#endif
15#include "settingsdialog.h" 15#include "settingsdialog.h"
16#include "opiemail.h" 16#include "opiemail.h"
17#include "editaccounts.h" 17#include "editaccounts.h"
18#include "composemail.h" 18#include "composemail.h"
19#include "mailistviewitem.h" 19#include "mailistviewitem.h"
20#include "viewmail.h" 20#include "viewmail.h"
21#include "selectstore.h" 21#include "selectstore.h"
22#include "selectsmtp.h" 22#include "selectsmtp.h"
23#include "accountitem.h" 23#include "accountitem.h"
24#include "accountview.h" 24#include "accountview.h"
25#include "klocale.h" 25#include "klocale.h"
26 26
27#include <qmessagebox.h> 27#include <qmessagebox.h>
28#include <qtimer.h> 28#include <qtimer.h>
29#include <qcursor.h> 29#include <qcursor.h>
30#include <qtextbrowser.h> 30#include <qtextbrowser.h>
31#include <qregexp.h> 31#include <qregexp.h>
32#include <qpe/global.h> 32#include <qpe/global.h>
33 33
34#ifdef DESKTOP_VERSION 34#ifdef DESKTOP_VERSION
35#include <qapplication.h> 35#include <qapplication.h>
36#else 36#else
37#include <qpe/qpeapplication.h> 37#include <qpe/qpeapplication.h>
38#endif 38#endif
39#include <libmailwrapper/smtpwrapper.h> 39#include <libmailwrapper/smtpwrapper.h>
40#include <libmailwrapper/mailtypes.h> 40#include <libmailwrapper/mailtypes.h>
41#include <libmailwrapper/abstractmail.h> 41#include <libmailwrapper/abstractmail.h>
42#include "koprefs.h" 42#include "koprefs.h"
43 43
44//using namespace Opie::Core; 44//using namespace Opie::Core;
45 45
46OpieMail::OpieMail( QWidget *parent, const char *name ) 46OpieMail::OpieMail( QWidget *parent, const char *name )
47 : MainWindow( parent, name) //, WStyle_ContextHelp ) 47 : MainWindow( parent, name) //, WStyle_ContextHelp )
48{ 48{
49 mCurrentComposer = 0; 49 mCurrentComposer = 0;
50 settings = new Settings(); 50 settings = new Settings();
51 tb = 0; 51 tb = 0;
52 setIcon(SmallIcon( "kmicromail" ) ); 52 setIcon(SmallIcon( "kmicromail" ) );
53 folderView->populate( settings->getAccounts() ); 53 folderView->populate( settings->getAccounts() );
54 connect(ExternalAppHandler::instance(), SIGNAL(receivedNameEmailUidListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&)), 54 connect(ExternalAppHandler::instance(), SIGNAL(receivedNameEmailUidListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&)),
55 this, SLOT(insertAttendees(const QString&, const QStringList&, const QStringList&, const QStringList&))); 55 this, SLOT(insertAttendees(const QString&, const QStringList&, const QStringList&, const QStringList&)));
56} 56}
57 57
58OpieMail::~OpieMail() 58OpieMail::~OpieMail()
59{ 59{
60 if (settings) delete settings; 60 if (settings) delete settings;
61 if ( tb ) 61 if ( tb )
62 delete tb; 62 delete tb;
63} 63}
64 64
65void OpieMail::appMessage(const QCString &msg, const QByteArray &data) 65void OpieMail::appMessage(const QCString &msg, const QByteArray &data)
66{ 66{
67 67
68} 68}
69#include <stdlib.h> 69#include <stdlib.h>
70void OpieMail::message(const QCString &msg, const QByteArray &data) 70void OpieMail::message(const QCString &msg, const QByteArray &data)
71{ 71{
72 // copied from old mail2 72 // copied from old mail2
73 static int ii = 0; 73 static int ii = 0;
74 //qDebug("QCOP CALL ############################# %d ", ii); 74 //qDebug("QCOP CALL ############################# %d ", ii);
75 //QString mess ( msg ); 75 //QString mess ( msg );
76 //qDebug("Message = %s ",mess.latin1()); 76 //qDebug("Message = %s ",mess.latin1());
77 ++ii; 77 ++ii;
78 //qDebug("KM:appMessage %d *%s* %x", ii, msg.data(), this); 78 //qDebug("KM:appMessage %d *%s* %x", ii, msg.data(), this);
79 79
80 mPendingEmail = QString::null; 80 mPendingEmail = QString::null;
81 mPendingName = QString::null; 81 mPendingName = QString::null;
82 if (msg == "writeMail(QString,QString)") 82 if (msg == "writeMail(QString,QString)")
83 { 83 {
84 //qDebug("writeMail(QString,QString) "); 84 //qDebug("writeMail(QString,QString) ");
85 QDataStream stream(data,IO_ReadOnly); 85 QDataStream stream(data,IO_ReadOnly);
86 stream >> mPendingName >> mPendingEmail; 86 stream >> mPendingName >> mPendingEmail;
87 // removing the whitespaces at beginning and end is needed! 87 // removing the whitespaces at beginning and end is needed!
88 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) ); 88 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) );
89 } 89 }
90 else if (msg == "newMail()") 90 else if (msg == "newMail()")
91 { 91 {
92 //qDebug("slotComposeMail() "); 92 //qDebug("slotComposeMail() ");
93 // we cannot call slotComposeMail(); directly, because may be executing a QCOP call 93 // we cannot call slotComposeMail(); directly, because may be executing a QCOP call
94 // and a QCOP call does not like a processevents in his execution 94 // and a QCOP call does not like a processevents in his execution
95 // with the Qtimer we call slotComposeMail() after we reached the main event loop 95 // with the Qtimer we call slotComposeMail() after we reached the main event loop
96 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) ); 96 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) );
97 // slotComposeMail(); 97 // slotComposeMail();
98 } 98 }
99 else if (msg == "newMail(QString)") 99 else if (msg == "newMail(QString)")
100 { 100 {
101 //qDebug(" newMail(QString)"); 101 //qDebug(" newMail(QString)");
102 QDataStream stream(data,IO_ReadOnly); 102 QDataStream stream(data,IO_ReadOnly);
103 stream >> mPendingName; 103 stream >> mPendingName;
104 // the format is 104 // the format is
105 // NAME <EMAIL>:SUBJECT 105 // NAME <EMAIL>:SUBJECT
106 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) ); 106 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) );
107 } else { 107 } else {
108 mPendingData = data; 108 mPendingData = data;
109 mPendingMessage = msg; 109 mPendingMessage = msg;
110 QTimer::singleShot ( 50, this, SLOT(slotExtAppHandler() ) ); 110 QTimer::singleShot ( 50, this, SLOT(slotExtAppHandler() ) );
111 } 111 }
112 112
113 //qDebug("END OpieMail::message "); 113 //qDebug("END OpieMail::message ");
114} 114}
115void OpieMail::slotExtAppHandler() 115void OpieMail::slotExtAppHandler()
116{ 116{
117 ExternalAppHandler::instance()->appMessage ( mPendingMessage, mPendingData ); 117 ExternalAppHandler::instance()->appMessage ( mPendingMessage, mPendingData );
118} 118}
119void OpieMail::slotwriteMail2(const QString& namemail ) 119void OpieMail::slotwriteMail2(const QString& namemail )
120{ 120{
121 //qDebug("OpieMail::slotwriteMail2 "); 121 //qDebug("OpieMail::slotwriteMail2 ");
122 //qApp->processEvents(); 122 //qApp->processEvents();
123 ComposeMail compose( settings, this, 0, true ); 123 ComposeMail compose( settings, this, 0, true );
124 if ( !namemail.isEmpty() ) { 124 if ( !namemail.isEmpty() ) {
125 QString to = namemail; 125 QString to = namemail;
126 if ( namemail.find( " <") > 1 ) { 126 if ( namemail.find( " <") > 1 ) {
127 to = "\"" +to.replace( QRegExp( " <"), "\" <") ; 127 to = "\"" +to.replace( QRegExp( " <"), "\" <") ;
128 } else 128 } else
129 if ( namemail.find( "<") > 1 ) { 129 if ( namemail.find( "<") > 1 ) {
130 to = "\"" +to.replace( QRegExp( "<"), "\" <") ; 130 to = "\"" +to.replace( QRegExp( "<"), "\" <") ;
131 } 131 }
132 int sub = to.find( ">:"); 132 int sub = to.find( ">:");
133 if ( sub > 0 ) { 133 if ( sub > 0 ) {
134 compose.setTo( to.left(sub+1) ); 134 compose.setTo( to.left(sub+1) );
135 compose.setSubject( to.mid(sub+2) ); 135 compose.setSubject( to.mid(sub+2) );
136 } else 136 } else
137 compose.setTo( to ); 137 compose.setTo( to );
138 } 138 }
139 compose.slotAdjustColumns(); 139 compose.slotAdjustColumns();
140#ifndef DESKTOP_VERSION 140#ifndef DESKTOP_VERSION
141 compose.showMaximized(); 141 compose.showMaximized();
142#endif 142#endif
143 mCurrentComposer = &compose; 143 mCurrentComposer = &compose;
144 compose.exec(); 144 compose.exec();
145 mCurrentComposer = 0; 145 mCurrentComposer = 0;
146 folderView->refreshOutgoing();
146 raise(); 147 raise();
147 //qDebug("retttich "); 148 //qDebug("retttich ");
148} 149}
149void OpieMail::slotwriteMail(const QString&name,const QString&email) 150void OpieMail::slotwriteMail(const QString&name,const QString&email)
150{ 151{
151 // qDebug("OpieMail::slotwriteMail "); 152 // qDebug("OpieMail::slotwriteMail ");
152 ComposeMail compose( settings, this, 0, true ); 153 ComposeMail compose( settings, this, 0, true );
153 if (!email.isEmpty()) 154 if (!email.isEmpty())
154 { 155 {
155 if (!name.isEmpty()) 156 if (!name.isEmpty())
156 { 157 {
157 compose.setTo("\"" + name + "\"" + " " + "<"+ email + ">"); 158 compose.setTo("\"" + name + "\"" + " " + "<"+ email + ">");
158 } 159 }
159 else 160 else
160 { 161 {
161 compose.setTo(email); 162 compose.setTo(email);
162 } 163 }
163 } 164 }
164 compose.slotAdjustColumns(); 165 compose.slotAdjustColumns();
165#ifndef DESKTOP_VERSION 166#ifndef DESKTOP_VERSION
166 compose.showMaximized(); 167 compose.showMaximized();
167#endif 168#endif
168 169
169 mCurrentComposer = &compose; 170 mCurrentComposer = &compose;
170 compose.exec(); 171 compose.exec();
171 mCurrentComposer = 0; 172 mCurrentComposer = 0;
173 folderView->refreshOutgoing();
172 raise(); 174 raise();
173} 175}
174 176
175void OpieMail::slotComposeMail() 177void OpieMail::slotComposeMail()
176{ 178{
177 if ( mPendingEmail == QString::null && mPendingName == QString::null) 179 if ( mPendingEmail == QString::null && mPendingName == QString::null)
178 slotwriteMail2( QString () ); 180 slotwriteMail2( QString () );
179 else { 181 else {
180 if ( mPendingEmail == QString::null ) 182 if ( mPendingEmail == QString::null )
181 slotwriteMail2( mPendingName ); 183 slotwriteMail2( mPendingName );
182 else 184 else
183 slotwriteMail( mPendingName, mPendingEmail ); 185 slotwriteMail( mPendingName, mPendingEmail );
184 } 186 }
185 //slotwriteMail(0l,0l); 187 //slotwriteMail(0l,0l);
186} 188}
187 189
188void OpieMail::slotSendQueued() 190void OpieMail::slotSendQueued()
189{ 191{
190 SMTPaccount *smtp = 0; 192 SMTPaccount *smtp = 0;
191 193
192 QList<Account> list = settings->getAccounts(); 194 QList<Account> list = settings->getAccounts();
193 QList<SMTPaccount> smtpList; 195 QList<SMTPaccount> smtpList;
194 smtpList.setAutoDelete(false); 196 smtpList.setAutoDelete(false);
195 Account *it; 197 Account *it;
196 for ( it = list.first(); it; it = list.next() ) 198 for ( it = list.first(); it; it = list.next() )
197 { 199 {
198 if ( it->getType() == MAILLIB::A_SMTP ) 200 if ( it->getType() == MAILLIB::A_SMTP )
199 { 201 {
200 smtp = static_cast<SMTPaccount *>(it); 202 smtp = static_cast<SMTPaccount *>(it);
201 smtpList.append(smtp); 203 smtpList.append(smtp);
202 } 204 }
203 } 205 }
204 if (smtpList.count()==0) 206 if (smtpList.count()==0)
205 { 207 {
206 QMessageBox::information(0,i18n("Info"),i18n("Define a smtp account first!\n")); 208 QMessageBox::information(0,i18n("Info"),i18n("Define a smtp account first!\n"));
207 return; 209 return;
208 } 210 }
209 if ( QMessageBox::warning(this, i18n("Sending all mails"), i18n("Do you really want to send\nall queued mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::No ) 211 if ( QMessageBox::warning(this, i18n("Sending all mails"), i18n("Do you really want to send\nall queued mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::No )
210 return; 212 return;
211 if (smtpList.count()==1) 213 if (smtpList.count()==1)
212 { 214 {
213 smtp = smtpList.at(0); 215 smtp = smtpList.at(0);
214 } 216 }
215 else 217 else
216 { 218 {
217 smtp = 0; 219 smtp = 0;
218 selectsmtp selsmtp; 220 selectsmtp selsmtp;
219 selsmtp.setSelectionlist(&smtpList); 221 selsmtp.setSelectionlist(&smtpList);
220#ifndef DESKTOP_VERSION 222#ifndef DESKTOP_VERSION
221 selsmtp.showMaximized(); 223 selsmtp.showMaximized();
222#endif 224#endif
223 if ( selsmtp.exec() == QDialog::Accepted ) 225 if ( selsmtp.exec() == QDialog::Accepted )
224 { 226 {
225 smtp = selsmtp.selected_smtp(); 227 smtp = selsmtp.selected_smtp();
226 } 228 }
227 } 229 }
228 if (smtp) 230 if (smtp)
229 { 231 {
230 232
231 Global::statusMessage("Sending mails...!"); 233 Global::statusMessage("Sending mails...!");
232 SMTPwrapper * wrap = new SMTPwrapper(smtp); 234 SMTPwrapper * wrap = new SMTPwrapper(smtp);
233 if ( wrap->flushOutbox() ) 235 if ( wrap->flushOutbox() )
234 { 236 {
235 Global::statusMessage("Mails sent!"); 237 Global::statusMessage("Mails sent!");
236 } 238 }
237 delete wrap; 239 delete wrap;
238 } 240 }
239 folderView->refreshOutgoing(); 241 folderView->refreshOutgoing();
240} 242}
241 243
242void OpieMail::slotSearchMails() 244void OpieMail::slotSearchMails()
243{ 245{
244 qDebug("OpieMail::slotSearchMails():not implemented "); 246 qDebug("OpieMail::slotSearchMails():not implemented ");
245} 247}
246 248
247void OpieMail::slotEditSettings() 249void OpieMail::slotEditSettings()
248{ 250{
249 251
250 KOPrefsDialog settingsDialog( this, "koprefs", true ); 252 KOPrefsDialog settingsDialog( this, "koprefs", true );
251#ifndef DESKTOP_VERSION 253#ifndef DESKTOP_VERSION
252 settingsDialog.showMaximized(); 254 settingsDialog.showMaximized();
253#endif 255#endif
254 settingsDialog.exec(); 256 settingsDialog.exec();
255 257
256 slotSetCodec( KOPrefs::instance()->mCurrentCodec ); 258 slotSetCodec( KOPrefs::instance()->mCurrentCodec );
257 // KApplication::execDialog(settingsDialog); 259 // KApplication::execDialog(settingsDialog);
258} 260}
259 261
260void OpieMail::slotEditAccounts() 262void OpieMail::slotEditAccounts()
261{ 263{
262 EditAccounts eaDialog( settings, this, 0, true ); 264 EditAccounts eaDialog( settings, this, 0, true );
263 eaDialog.slotAdjustColumns(); 265 eaDialog.slotAdjustColumns();
264#ifndef DESKTOP_VERSION 266#ifndef DESKTOP_VERSION
265 eaDialog.showMaximized(); 267 eaDialog.showMaximized();
266#endif 268#endif
267 eaDialog.exec(); 269 eaDialog.exec();
268 if ( settings ) delete settings; 270 if ( settings ) delete settings;
269 settings = new Settings(); 271 settings = new Settings();
270 272
271 folderView->populate( settings->getAccounts() ); 273 folderView->populate( settings->getAccounts() );
272} 274}
273void OpieMail::replyMail() 275void OpieMail::replyMail()
274{ 276{
275 277
276 QListViewItem*item = mailView->currentItem(); 278 QListViewItem*item = mailView->currentItem();
277 if (!item) return; 279 if (!item) return;
278 RecMailP mail = ((MailListViewItem*)item)->data(); 280 RecMailP mail = ((MailListViewItem*)item)->data();
279 RecBodyP body = folderView->fetchBody(mail); 281 RecBodyP body = folderView->fetchBody(mail);
280 282
281 QString rtext; 283 QString rtext;
282 rtext += QString("* %1 wrote on %2:\n") // no i18n on purpose 284 rtext += QString("* %1 wrote on %2:\n") // no i18n on purpose
283 .arg( mail->getFrom()) 285 .arg( mail->getFrom())
284 .arg( mail->getDate()); 286 .arg( mail->getDate());
285 287
286 QString text = body->Bodytext(); 288 QString text = body->Bodytext();
287 QStringList lines = QStringList::split(QRegExp("\\n"), text); 289 QStringList lines = QStringList::split(QRegExp("\\n"), text);
288 QStringList::Iterator it; 290 QStringList::Iterator it;
289 for (it = lines.begin(); it != lines.end(); it++) 291 for (it = lines.begin(); it != lines.end(); it++)
290 { 292 {
291 rtext += "> " + *it + "\n"; 293 rtext += "> " + *it + "\n";
292 } 294 }
293 rtext += "\n"; 295 rtext += "\n";
294 296
295 QString prefix; 297 QString prefix;
296 if ( mail->getSubject().find(QRegExp("^Re: .*$")) != -1) prefix = ""; 298 if ( mail->getSubject().find(QRegExp("^Re: .*$")) != -1) prefix = "";
297 else prefix = "Re: "; // no i18n on purpose 299 else prefix = "Re: "; // no i18n on purpose
298 300
299 Settings *settings = new Settings(); 301 Settings *settings = new Settings();
300 ComposeMail composer( settings ,this, 0, true); 302 ComposeMail composer( settings ,this, 0, true);
301 if (mail->Replyto().isEmpty()) { 303 if (mail->Replyto().isEmpty()) {
302 composer.setTo( mail->getFrom()); 304 composer.setTo( mail->getFrom());
303 } else { 305 } else {
304 composer.setTo( mail->Replyto()); 306 composer.setTo( mail->Replyto());
305 } 307 }
306 composer.setSubject( prefix + mail->getSubject()); 308 composer.setSubject( prefix + mail->getSubject());
307 composer.setMessage( rtext ); 309 composer.setMessage( rtext );
308 composer.setInReplyTo( mail->Msgid()); 310 composer.setInReplyTo( mail->Msgid());
309 composer.setCharset( body->getCharset() ); 311 composer.setCharset( body->getCharset() );
310 312
311 mCurrentComposer = &composer; 313 mCurrentComposer = &composer;
312 if ( QDialog::Accepted == KApplication::execDialog( &composer ) ) 314 if ( QDialog::Accepted == KApplication::execDialog( &composer ) )
313 { 315 {
314 mail->Wrapper()->answeredMail(mail); 316 mail->Wrapper()->answeredMail(mail);
315 } 317 }
316 mCurrentComposer = 0; 318 mCurrentComposer = 0;
319 folderView->refreshOutgoing();
317 delete settings; 320 delete settings;
318 321
319} 322}
320void OpieMail::closeViewMail(ViewMail * vm) 323void OpieMail::closeViewMail(ViewMail * vm)
321{ 324{
322 vm->hide(); 325 vm->hide();
323} 326}
324 327
325void OpieMail::slotDownloadMail( ) 328void OpieMail::slotDownloadMail( )
326{ 329{
327 QListViewItem*item = mailView->currentItem(); 330 QListViewItem*item = mailView->currentItem();
328 if (!item ) { 331 if (!item ) {
329 Global::statusMessage("Error: No item slected!"); 332 Global::statusMessage("Error: No item slected!");
330 return; 333 return;
331 } 334 }
332 RecMailP mail = ((MailListViewItem*)item)->data(); 335 RecMailP mail = ((MailListViewItem*)item)->data();
333 Account * acc = mail->Wrapper()->getAccount(); 336 Account * acc = mail->Wrapper()->getAccount();
334 if ( !acc ) { 337 if ( !acc ) {
335 Global::statusMessage("Mail is already stored locally!"); 338 Global::statusMessage("Mail is already stored locally!");
336 return; 339 return;
337 } 340 }
338 QString lfName = acc->getLocalFolder(); 341 QString lfName = acc->getLocalFolder();
339 //qDebug("local folder " + lfName ); 342 //qDebug("local folder " + lfName );
340 if ( lfName.isEmpty() ) 343 if ( lfName.isEmpty() )
341 lfName = acc->getAccountName(); 344 lfName = acc->getAccountName();
342 AbstractMail* targetMail = folderView->allAccounts()[0]->getWrapper(); 345 AbstractMail* targetMail = folderView->allAccounts()[0]->getWrapper();
343 //qDebug("target %d %d ",targetMail,mail->Wrapper() ); 346 //qDebug("target %d %d ",targetMail,mail->Wrapper() );
344 if ( targetMail == mail->Wrapper() ) { 347 if ( targetMail == mail->Wrapper() ) {
345 Global::statusMessage("Mail is already locally stored!"); 348 Global::statusMessage("Mail is already locally stored!");
346 return; 349 return;
347 } 350 }
348 if ( !targetMail->createMbox(lfName)) { 351 if ( !targetMail->createMbox(lfName)) {
349 Global::statusMessage("Error creating folder!"); 352 Global::statusMessage("Error creating folder!");
350 return; 353 return;
351 } 354 }
352 Global::statusMessage("Fetching mail...please wait!"); 355 Global::statusMessage("Fetching mail...please wait!");
353 qApp->processEvents(); 356 qApp->processEvents();
354 encodedString*st = 0; 357 encodedString*st = 0;
355 st = mail->Wrapper()->fetchRawBody(mail); 358 st = mail->Wrapper()->fetchRawBody(mail);
356 if ( st ) { 359 if ( st ) {
357 targetMail->storeMessage(st->Content(),st->Length(),lfName); 360 targetMail->storeMessage(st->Content(),st->Length(),lfName);
358 Global::statusMessage("Mail stored in "+ lfName); 361 Global::statusMessage("Mail stored in "+ lfName);
359 delete st; 362 delete st;
360 } else { 363 } else {
361 Global::statusMessage("Error: Cannot fetch mail!"); 364 Global::statusMessage("Error: Cannot fetch mail!");
362 } 365 }
363} 366}
364 367
365 368
366void OpieMail::deleteAndDisplayNextMail(ViewMail * vm) 369void OpieMail::deleteAndDisplayNextMail(ViewMail * vm)
367{ 370{
368 QListViewItem*item = mailView->currentItem(); 371 QListViewItem*item = mailView->currentItem();
369 if (!item ) { 372 if (!item ) {
370 closeViewMail(vm); 373 closeViewMail(vm);
371 return; 374 return;
372 } 375 }
373 RecMailP mail = ((MailListViewItem*)item)->data(); 376 RecMailP mail = ((MailListViewItem*)item)->data();
374 mail->Wrapper()->deleteMail( mail ); 377 mail->Wrapper()->deleteMail( mail );
375 item = item->itemBelow(); 378 item = item->itemBelow();
376 if (!item ) { 379 if (!item ) {
377 closeViewMail(vm); 380 closeViewMail(vm);
378 return; 381 return;
379 } 382 }
380 mailView->setCurrentItem(item); 383 mailView->setCurrentItem(item);
381 mail = ((MailListViewItem*)item)->data(); 384 mail = ((MailListViewItem*)item)->data();
382 RecBodyP body = folderView->fetchBody(mail); 385 RecBodyP body = folderView->fetchBody(mail);
383 vm->setBody( body ); 386 vm->setBody( body );
384 vm->setMail( mail ); 387 vm->setMail( mail );
385} 388}
386void OpieMail::displayNextMail(ViewMail * vm) 389void OpieMail::displayNextMail(ViewMail * vm)
387{ 390{
388 QListViewItem*item = mailView->currentItem(); 391 QListViewItem*item = mailView->currentItem();
389 if (!item) return; 392 if (!item) return;
390 ( (MailListViewItem*)item )->setPixmap( 0, QPixmap() ); 393 ( (MailListViewItem*)item )->setPixmap( 0, QPixmap() );
391 item = item->itemBelow(); 394 item = item->itemBelow();
392 if (!item) { 395 if (!item) {
393 vm->setCaption(i18n("End of List" )); 396 vm->setCaption(i18n("End of List" ));
394 return; 397 return;
395 } 398 }
396 mailView->setCurrentItem(item); 399 mailView->setCurrentItem(item);
397 RecMailP mail = ((MailListViewItem*)item)->data(); 400 RecMailP mail = ((MailListViewItem*)item)->data();
398 RecBodyP body = folderView->fetchBody(mail); 401 RecBodyP body = folderView->fetchBody(mail);
399 vm->setBody( body ); 402 vm->setBody( body );
400 vm->setMail( mail ); 403 vm->setMail( mail );
401} 404}
402void OpieMail::displayMail() 405void OpieMail::displayMail()
403{ 406{
404 QListViewItem*item = mailView->currentItem(); 407 QListViewItem*item = mailView->currentItem();
405 if (!item) return; 408 if (!item) return;
406 RecMailP mail = ((MailListViewItem*)item)->data(); 409 RecMailP mail = ((MailListViewItem*)item)->data();
407 RecBodyP body = folderView->fetchBody(mail); 410 RecBodyP body = folderView->fetchBody(mail);
408 ViewMail readMail( this,"", Qt::WType_Modal ); 411 ViewMail readMail( this,"", Qt::WType_Modal );
409 readMail.setBody( body ); 412 readMail.setBody( body );
410 readMail.setMail( mail ); 413 readMail.setMail( mail );
411#ifndef DESKTOP_VERSION 414#ifndef DESKTOP_VERSION
412 readMail.showMaximized(); 415 readMail.showMaximized();
413#else 416#else
414 readMail.resize( 640, 480); 417 readMail.resize( 640, 480);
415#endif 418#endif
416 connect( &readMail,SIGNAL( showNextMail(ViewMail *) ), this, SLOT( displayNextMail(ViewMail *) ) ); 419 connect( &readMail,SIGNAL( showNextMail(ViewMail *) ), this, SLOT( displayNextMail(ViewMail *) ) );
417 connect( &readMail,SIGNAL( deleteAndDisplayNextMail(ViewMail *) ), this, SLOT(deleteAndDisplayNextMail(ViewMail *) ) ); 420 connect( &readMail,SIGNAL( deleteAndDisplayNextMail(ViewMail *) ), this, SLOT(deleteAndDisplayNextMail(ViewMail *) ) );
418 connect( &readMail,SIGNAL( signalDownloadMail() ), this, SLOT( slotDownloadMail() ) ); 421 connect( &readMail,SIGNAL( signalDownloadMail() ), this, SLOT( slotDownloadMail() ) );
419 422
420 readMail.exec(); 423 readMail.exec();
421 424
422 if ( readMail.deleted ) 425 if ( readMail.deleted )
423 { 426 {
424 folderView->refreshCurrent(); 427 folderView->refreshCurrent();
425 } 428 }
426 else 429 else
427 { 430 {
428 QListViewItem*item = mailView->currentItem(); 431 QListViewItem*item = mailView->currentItem();
429 if (item) 432 if (item)
430 ( (MailListViewItem*)item )->setPixmap( 0, QPixmap() ); 433 ( (MailListViewItem*)item )->setPixmap( 0, QPixmap() );
431 } 434 }
432} 435}
433void OpieMail::slotGetAllMail() 436void OpieMail::slotGetAllMail()
434{ 437{
435 QListViewItem * item = folderView->firstChild(); 438 QListViewItem * item = folderView->firstChild();
436 while ( item ){ 439 while ( item ){
437 ((AccountViewItem *)item)->contextMenuSelected( 101 ); 440 ((AccountViewItem *)item)->contextMenuSelected( 101 );
438 item = item->nextSibling (); 441 item = item->nextSibling ();
439 } 442 }
440} 443}
441void OpieMail::slotGetMail() 444void OpieMail::slotGetMail()
442{ 445{
443 QListViewItem * item = folderView->currentItem(); 446 QListViewItem * item = folderView->currentItem();
444 if ( ! item ) return; 447 if ( ! item ) return;
445 ((AccountViewItem *)item)->contextMenuSelected( 101 ); 448 ((AccountViewItem *)item)->contextMenuSelected( 101 );
446} 449}
447void OpieMail::slotDeleteMail() 450void OpieMail::slotDeleteMail()
448{ 451{
449 if (!mailView->currentItem()) return; 452 if (!mailView->currentItem()) return;
450 RecMailP mail = ((MailListViewItem*)mailView->currentItem() )->data(); 453 RecMailP mail = ((MailListViewItem*)mailView->currentItem() )->data();
451 if ( QMessageBox::warning(this, i18n("Delete Mail"), QString( i18n("<p>Do you really want to delete this mail? <br><br>" ) + mail->getFrom() + " - " + mail->getSubject() ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) 454 if ( QMessageBox::warning(this, i18n("Delete Mail"), QString( i18n("<p>Do you really want to delete this mail? <br><br>" ) + mail->getFrom() + " - " + mail->getSubject() ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes )
452 { 455 {
453 mail->Wrapper()->deleteMail( mail ); 456 mail->Wrapper()->deleteMail( mail );
454 folderView->refreshCurrent(); 457 folderView->refreshCurrent();
455 } 458 }
456} 459}
457void OpieMail::slotDeleteAllMail() 460void OpieMail::slotDeleteAllMail()
458{ 461{
459 462
460 QValueList<RecMailP> t; 463 QValueList<RecMailP> t;
461 if ( QMessageBox::warning(this, i18n("Delete All Mails"), i18n("Do you really want to delete\nall selected mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) 464 if ( QMessageBox::warning(this, i18n("Delete All Mails"), i18n("Do you really want to delete\nall selected mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes )
462 { 465 {
463 MailListViewItem* item = (MailListViewItem*)mailView->firstChild (); 466 MailListViewItem* item = (MailListViewItem*)mailView->firstChild ();
464 while ( item ) { 467 while ( item ) {
465 if ( item->isSelected() ) { 468 if ( item->isSelected() ) {
466 t.append( item->data() ); 469 t.append( item->data() );
467 } 470 }
468 item = (MailListViewItem*)item->nextSibling(); 471 item = (MailListViewItem*)item->nextSibling();
469 } 472 }
470 } 473 }
471 else 474 else
472 return; 475 return;
473 if ( t.count() == 0 ) 476 if ( t.count() == 0 )
474 return; 477 return;
475 RecMailP mail = t.first(); 478 RecMailP mail = t.first();
476 mail->Wrapper()->deleteMailList(t); 479 mail->Wrapper()->deleteMailList(t);
477 folderView->refreshCurrent(); 480 folderView->refreshCurrent();
478 481
479 482
480} 483}
481void OpieMail::clearSelection() 484void OpieMail::clearSelection()
482{ 485{
483 mailView->clearSelection(); 486 mailView->clearSelection();
484 487
485} 488}
486 489
487void OpieMail::mailHold(int button, QListViewItem *item,const QPoint&,int ) 490void OpieMail::mailHold(int button, QListViewItem *item,const QPoint&,int )
488{ 491{
489 if (!mailView->currentItem()) return; 492 if (!mailView->currentItem()) return;
490 MAILLIB::ATYPE mailtype = ((MailListViewItem*)mailView->currentItem() )->wrapperType(); 493 MAILLIB::ATYPE mailtype = ((MailListViewItem*)mailView->currentItem() )->wrapperType();
491 /* just the RIGHT button - or hold on pda */ 494 /* just the RIGHT button - or hold on pda */
492 if (button!=2) {return;} 495 if (button!=2) {return;}
493 if (!item) return; 496 if (!item) return;
494 QPopupMenu *m = new QPopupMenu(0); 497 QPopupMenu *m = new QPopupMenu(0);
495 if (m) 498 if (m)
496 { 499 {
497 if (mailtype==MAILLIB::A_NNTP) { 500 if (mailtype==MAILLIB::A_NNTP) {
498 m->insertItem(i18n("Read this posting"),this,SLOT(displayMail())); 501 m->insertItem(i18n("Read this posting"),this,SLOT(displayMail()));
499 m->insertItem(i18n("Copy this posting"),this,SLOT(slotMoveCopyMail())); 502 m->insertItem(i18n("Copy this posting"),this,SLOT(slotMoveCopyMail()));
500 m->insertSeparator(); 503 m->insertSeparator();
501 m->insertItem(i18n("Copy all selected postings"),this,SLOT(slotMoveCopyAllMail())); 504 m->insertItem(i18n("Copy all selected postings"),this,SLOT(slotMoveCopyAllMail()));
502 m->insertItem(i18n("Clear selection"),this,SLOT(clearSelection())); 505 m->insertItem(i18n("Clear selection"),this,SLOT(clearSelection()));
503 } else { 506 } else {
504 if (folderView->currentisDraft()) { 507 if (folderView->currentisDraft()) {
505 m->insertItem(i18n("Edit this mail"),this,SLOT(reEditMail())); 508 m->insertItem(i18n("Edit this mail"),this,SLOT(reEditMail()));
506 } 509 }
507 m->insertItem(i18n("Reply to this mail"),this,SLOT(replyMail())); 510 m->insertItem(i18n("Reply to this mail"),this,SLOT(replyMail()));
508 m->insertItem(i18n("Read this mail"),this,SLOT(displayMail())); 511 m->insertItem(i18n("Read this mail"),this,SLOT(displayMail()));
509 m->insertSeparator(); 512 m->insertSeparator();
510 m->insertItem(i18n("Move/Copy this mail"),this,SLOT(slotMoveCopyMail())); 513 m->insertItem(i18n("Move/Copy this mail"),this,SLOT(slotMoveCopyMail()));
511 m->insertItem(i18n("Delete this mail"),this,SLOT(slotDeleteMail())); 514 m->insertItem(i18n("Delete this mail"),this,SLOT(slotDeleteMail()));
512 m->insertSeparator(); 515 m->insertSeparator();
513 m->insertItem(i18n("Move/Copy all selected mail"),this,SLOT(slotMoveCopyAllMail())); 516 m->insertItem(i18n("Move/Copy all selected mail"),this,SLOT(slotMoveCopyAllMail()));
514 m->insertItem(i18n("Delete all selected mails"),this,SLOT(slotDeleteAllMail())); 517 m->insertItem(i18n("Delete all selected mails"),this,SLOT(slotDeleteAllMail()));
515 m->insertSeparator(); 518 m->insertSeparator();
516 m->insertItem(i18n("Clear selection"),this,SLOT(clearSelection())); 519 m->insertItem(i18n("Clear selection"),this,SLOT(clearSelection()));
517 } 520 }
518 m->setFocus(); 521 m->setFocus();
519 m->exec( QPoint( QCursor::pos().x(), QCursor::pos().y()) ); 522 m->exec( QPoint( QCursor::pos().x(), QCursor::pos().y()) );
520 delete m; 523 delete m;
521 } 524 }
522} 525}
523 526
524void OpieMail::slotShowFolders( bool show ) 527void OpieMail::slotShowFolders( bool show )
525{ 528{
526 if ( show && folderView->isHidden() ) 529 if ( show && folderView->isHidden() )
527 { 530 {
528 folderView->show(); 531 folderView->show();
529 } 532 }
530 else if ( !show && !folderView->isHidden() ) 533 else if ( !show && !folderView->isHidden() )
531 { 534 {
532 folderView->hide(); 535 folderView->hide();
533 } 536 }
534} 537}
535 538
536void OpieMail::refreshMailView(const QValueList<RecMailP>&list) 539void OpieMail::refreshMailView(const QValueList<RecMailP>&list)
537{ 540{
538 MailListViewItem*item = 0; 541 MailListViewItem*item = 0;
539 mailView->clear(); 542 mailView->clear();
540 543
541 QValueList<RecMailP>::ConstIterator it; 544 QValueList<RecMailP>::ConstIterator it;
542 for (it = list.begin(); it != list.end();++it) 545 for (it = list.begin(); it != list.end();++it)
543 { 546 {
544 item = new MailListViewItem(mailView,item); 547 item = new MailListViewItem(mailView,item);
545 item->storeData((*it)); 548 item->storeData((*it));
546 item->showEntry(); 549 item->showEntry();
547 } 550 }
548 mailView->setSorting ( 4, false ); 551 mailView->setSorting ( 4, false );
549} 552}
550 553
551void OpieMail::mailLeftClicked( QListViewItem *item ) 554void OpieMail::mailLeftClicked( QListViewItem *item )
552{ 555{
553 mailView->clearSelection(); 556 mailView->clearSelection();
554 /* just LEFT button - or tap with stylus on pda */ 557 /* just LEFT button - or tap with stylus on pda */
555 //if (button!=1) return; 558 //if (button!=1) return;
556 if (!item) return; 559 if (!item) return;
557 if (folderView->currentisDraft()) { 560 if (folderView->currentisDraft()) {
558 reEditMail(); 561 reEditMail();
559 } else { 562 } else {
560 displayMail(); 563 displayMail();
561 } 564 }
562} 565}
563 566
564void OpieMail::slotMoveCopyMail() 567void OpieMail::slotMoveCopyMail()
565{ 568{
566 if (!mailView->currentItem()) return; 569 if (!mailView->currentItem()) return;
567 RecMailP mail = ((MailListViewItem*)mailView->currentItem() )->data(); 570 RecMailP mail = ((MailListViewItem*)mailView->currentItem() )->data();
568 AbstractMail*targetMail = 0; 571 AbstractMail*targetMail = 0;
569 QString targetFolder = ""; 572 QString targetFolder = "";
570 Selectstore sels; 573 Selectstore sels;
571 folderView->setupFolderselect(&sels); 574 folderView->setupFolderselect(&sels);
572 if (!sels.exec()) return; 575 if (!sels.exec()) return;
573 targetMail = sels.currentMail(); 576 targetMail = sels.currentMail();
574 targetFolder = sels.currentFolder(); 577 targetFolder = sels.currentFolder();
575 if ( (mail->Wrapper()==targetMail && mail->getMbox()==targetFolder) || 578 if ( (mail->Wrapper()==targetMail && mail->getMbox()==targetFolder) ||
576 targetFolder.isEmpty()) 579 targetFolder.isEmpty())
577 { 580 {
578 return; 581 return;
579 } 582 }
580 if (sels.newFolder() && !targetMail->createMbox(targetFolder)) 583 if (sels.newFolder() && !targetMail->createMbox(targetFolder))
581 { 584 {
582 QMessageBox::critical(0,i18n("Error creating new Folder"), 585 QMessageBox::critical(0,i18n("Error creating new Folder"),
583 i18n("<center>Error while creating<br>new folder - breaking.</center>")); 586 i18n("<center>Error while creating<br>new folder - breaking.</center>"));
584 return; 587 return;
585 } 588 }
586 sels.hide(); 589 sels.hide();
587 qApp->processEvents(); 590 qApp->processEvents();
588 // qDebug("hiding sels "); 591 // qDebug("hiding sels ");
589 mail->Wrapper()->mvcpMail(mail,targetFolder,targetMail,sels.moveMails()); 592 mail->Wrapper()->mvcpMail(mail,targetFolder,targetMail,sels.moveMails());
590 folderView->refreshCurrent(); 593 folderView->refreshCurrent();
591} 594}
592 595
593void OpieMail::slotMoveCopyAllMail() 596void OpieMail::slotMoveCopyAllMail()
594{ 597{
595 598
596 if (!mailView->currentItem()) return; 599 if (!mailView->currentItem()) return;
597 QValueList<RecMailP> t; 600 QValueList<RecMailP> t;
598 // if ( QMessageBox::warning(this, i18n("Move/Copy all selected mails"), i18n("Do you really want to copy/move\nall selected mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) 601 // if ( QMessageBox::warning(this, i18n("Move/Copy all selected mails"), i18n("Do you really want to copy/move\nall selected mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes )
599 { 602 {
600 MailListViewItem* item = (MailListViewItem*)mailView->firstChild (); 603 MailListViewItem* item = (MailListViewItem*)mailView->firstChild ();
601 while ( item ) { 604 while ( item ) {
602 if ( item->isSelected() ) { 605 if ( item->isSelected() ) {
603 t.append( item->data() ); 606 t.append( item->data() );
604 } 607 }
605 item = (MailListViewItem*)item->nextSibling(); 608 item = (MailListViewItem*)item->nextSibling();
606 } 609 }
607 } 610 }
608 // else 611 // else
609 // return; 612 // return;
610 if ( t.count() == 0 ) 613 if ( t.count() == 0 )
611 return; 614 return;
612 RecMailP mail = t.first(); 615 RecMailP mail = t.first();
613 AbstractMail*targetMail = 0; 616 AbstractMail*targetMail = 0;
614 QString targetFolder = ""; 617 QString targetFolder = "";
615 Selectstore sels; 618 Selectstore sels;
616 folderView->setupFolderselect(&sels); 619 folderView->setupFolderselect(&sels);
617 if (!sels.exec()) return; 620 if (!sels.exec()) return;
618 targetMail = sels.currentMail(); 621 targetMail = sels.currentMail();
619 targetFolder = sels.currentFolder(); 622 targetFolder = sels.currentFolder();
620 if ( (mail->Wrapper()==targetMail && mail->getMbox()==targetFolder) || 623 if ( (mail->Wrapper()==targetMail && mail->getMbox()==targetFolder) ||
621 targetFolder.isEmpty()) 624 targetFolder.isEmpty())
622 { 625 {
623 return; 626 return;
624 } 627 }
625 if (sels.newFolder() && !targetMail->createMbox(targetFolder)) 628 if (sels.newFolder() && !targetMail->createMbox(targetFolder))
626 { 629 {
627 QMessageBox::critical(0,i18n("Error creating new Folder"), 630 QMessageBox::critical(0,i18n("Error creating new Folder"),
628 i18n("<center>Error while creating<br>new folder - breaking.</center>")); 631 i18n("<center>Error while creating<br>new folder - breaking.</center>"));
629 return; 632 return;
630 } 633 }
631 sels.hide(); 634 sels.hide();
632 qApp->processEvents(); 635 qApp->processEvents();
633 //qDebug("hiding sels "); 636 //qDebug("hiding sels ");
634 mail->Wrapper()->mvcpMailList(t,targetFolder,targetMail,sels.moveMails()); 637 mail->Wrapper()->mvcpMailList(t,targetFolder,targetMail,sels.moveMails());
635 folderView->refreshCurrent(); 638 folderView->refreshCurrent();
636} 639}
637 640
638void OpieMail::reEditMail() 641void OpieMail::reEditMail()
639{ 642{
640 if (!mailView->currentItem()) return; 643 if (!mailView->currentItem()) return;
641 644
642 ComposeMail compose( settings, this, 0, true ); 645 ComposeMail compose( settings, this, 0, true );
643 compose.reEditMail(((MailListViewItem*)mailView->currentItem() )->data()); 646 compose.reEditMail(((MailListViewItem*)mailView->currentItem() )->data());
644 compose.slotAdjustColumns(); 647 compose.slotAdjustColumns();
645#ifndef DESKTOP_VERSION 648#ifndef DESKTOP_VERSION
646 compose.showMaximized(); 649 compose.showMaximized();
647#else 650#else
648 compose.resize(640,480); 651 compose.resize(640,480);
649#endif 652#endif
650 mCurrentComposer = &compose; 653 mCurrentComposer = &compose;
651 compose.exec(); 654 compose.exec();
655 folderView->refreshOutgoing();
652 mCurrentComposer = 0; 656 mCurrentComposer = 0;
653} 657}
654 658
655void OpieMail::insertAttendees(const QString& uid,const QStringList& nameList,const QStringList& emailList,const QStringList& uidList) 659void OpieMail::insertAttendees(const QString& uid,const QStringList& nameList,const QStringList& emailList,const QStringList& uidList)
656{ 660{
657 661
658 if ( mCurrentComposer ) { 662 if ( mCurrentComposer ) {
659 mCurrentComposer->insertAttendees(uid,nameList,emailList,uidList); 663 mCurrentComposer->insertAttendees(uid,nameList,emailList,uidList);
660 } else { 664 } else {
661 ComposeMail compose( settings, this, 0, true ); 665 ComposeMail compose( settings, this, 0, true );
662 compose.slotAdjustColumns(); 666 compose.slotAdjustColumns();
663#ifndef DESKTOP_VERSION 667#ifndef DESKTOP_VERSION
664 compose.showMaximized(); 668 compose.showMaximized();
665#endif 669#endif
666 mCurrentComposer = &compose; 670 mCurrentComposer = &compose;
667 mCurrentComposer->insertAttendees(uid,nameList,emailList,uidList); 671 mCurrentComposer->insertAttendees(uid,nameList,emailList,uidList);
668 compose.exec(); 672 compose.exec();
669 mCurrentComposer = 0; 673 mCurrentComposer = 0;
674 folderView->refreshOutgoing();
670 raise(); 675 raise();
671 } 676 }
672} 677}