summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-03-10 21:14:19 (UTC)
committer zautrix <zautrix>2005-03-10 21:14:19 (UTC)
commit6e3c3178fa8e0c421753c08506b4a91bbcecc26f (patch) (unidiff)
treeff9c2b22376e71e135f59154c6aeeb8ed95f10ce
parent3a1891136e7b1290a6b3ddd573a863e51bd3047b (diff)
downloadkdepimpi-6e3c3178fa8e0c421753c08506b4a91bbcecc26f.zip
kdepimpi-6e3c3178fa8e0c421753c08506b4a91bbcecc26f.tar.gz
kdepimpi-6e3c3178fa8e0c421753c08506b4a91bbcecc26f.tar.bz2
smtp ompi fix
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt5
-rw-r--r--kmicromail/editaccounts.cpp24
-rw-r--r--kmicromail/libetpan/tools/mailstream_socket.c2
-rw-r--r--kmicromail/libmailwrapper/smtpwrapper.cpp8
4 files changed, 25 insertions, 14 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 5661955..65f9168 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,407 +1,412 @@
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.15 ************ 3********** VERSION 2.0.15 ************
4 4
5PwM/Pi: 5PwM/Pi:
6Added keyboard shorcuts for 6Added keyboard shorcuts for
7- toggling summary view (space bar) 7- toggling summary view (space bar)
8- delete item (delete + backspace key) 8- delete item (delete + backspace key)
9- add new item ( i + n key) 9- add new item ( i + n key)
10Fixed length of info in the title. 10Fixed length of info in the title.
11 11
12KO/Pi-KA/Pi: 12KO/Pi-KA/Pi:
13Changed "ME" menu bar entry to an icon. 13Changed "ME" menu bar entry to an icon.
14 14
15KO/Pi: 15KO/Pi:
16Fixed two minor bugs in displaying todos. 16Fixed two minor bugs in displaying todos.
17If in month view a cell is selected, the key shortcut "d" shows now that date. 17If in month view a cell is selected, the key shortcut "d" shows now that date.
18Added complete info for a todo in month view as an icon left of the text. 18Added complete info for a todo in month view as an icon left of the text.
19Fixed problems of displaying data when "<" or ">" were used in summary/location/description. 19Fixed problems of displaying data when "<" or ">" were used in summary/location/description.
20Fixed problem of search dialog size when switching displays. 20Fixed problem of search dialog size when switching displays.
21Cancel key now closes date picker. 21Cancel key now closes date picker.
22Rearranged KO/Pi file menu structure. 22Rearranged KO/Pi file menu structure.
23 23
24OM/Pi:
25Added to the SMTP account setting the option
26"No secure connection".
27You have to configure your SMTP accounts again, sorry.
28
24 29
25********** VERSION 2.0.14 ************ 30********** VERSION 2.0.14 ************
26 31
27Made Passwordmanager PwM/Pi more userfriendly: 32Made Passwordmanager PwM/Pi more userfriendly:
28Rearranged some toolbar icons, optimized setting of focus, fixed layout problems and more. 33Rearranged some toolbar icons, optimized setting of focus, fixed layout problems and more.
29Fixed bug in KO/Pi todo printing. 34Fixed bug in KO/Pi todo printing.
30Made Qtopia calendar import possible on desktop . 35Made Qtopia calendar import possible on desktop .
31 36
32********** VERSION 2.0.13 ************ 37********** VERSION 2.0.13 ************
33 38
34Fixed a problem in the addressee select dialog and made it more user friendly by adding a minimize splitter. 39Fixed a problem in the addressee select dialog and made it more user friendly by adding a minimize splitter.
35 40
36In the search dialog you can switch now the focus from search line edit to the list view by pressing key "arrow down". 41In the search dialog you can switch now the focus from search line edit to the list view by pressing key "arrow down".
37 42
38OM/Pi: 43OM/Pi:
39Fixed a refresh problem of outgoing/sent/sendfailed folders after sending mails. 44Fixed a refresh problem of outgoing/sent/sendfailed folders after sending mails.
40Added missing German translation. 45Added missing German translation.
41Added warning if path is specified in local folder settings of account config. 46Added warning if path is specified in local folder settings of account config.
42 47
43********** VERSION 2.0.12 ************ 48********** VERSION 2.0.12 ************
44 49
45KO/Pi: 50KO/Pi:
46Fixed a bug in todo start/due date handling for non recurring todos with a start and due date. 51Fixed a bug in todo start/due date handling for non recurring todos with a start and due date.
47Fixed some layout problems in the KO/Pi agenda view when there were many conflicting itmes. 52Fixed some layout problems in the KO/Pi agenda view when there were many conflicting itmes.
48Fixed several problems of the keyboard focus in the desktop versions when opening the search dialog/event viewer. 53Fixed several problems of the keyboard focus in the desktop versions when opening the search dialog/event viewer.
49 54
50Fixed problem in pi-sync mode when wrong password was sent. 55Fixed problem in pi-sync mode when wrong password was sent.
51 56
52OM/Pi: 57OM/Pi:
53Fixed a crash when displaying mails with "Show mail as html" was checked in the config. 58Fixed a crash when displaying mails with "Show mail as html" was checked in the config.
54Added a check before displaying the mail if the mail is in html format, if "Show mail as html" is enabled. 59Added a check before displaying the mail if the mail is in html format, if "Show mail as html" is enabled.
55 60
56********** VERSION 2.0.11 ************ 61********** VERSION 2.0.11 ************
57 62
58Fixed some problems in pi-sync mode 63Fixed some problems in pi-sync mode
59(e.g. details of events were not synced properly) 64(e.g. details of events were not synced properly)
60 65
61********** VERSION 2.0.10 ************ 66********** VERSION 2.0.10 ************
62 67
63KO/Pi: 68KO/Pi:
64In the desktop versions the context menu in the search dialog was broken after introducing the What'sThis info for the list view. 69In the desktop versions the context menu in the search dialog was broken after introducing the What'sThis info for the list view.
65This is fixed. 70This is fixed.
66Changed the search dialog a bit to make it more user friendly. 71Changed the search dialog a bit to make it more user friendly.
67(E.g.: Removed message box about "no items found" and set key focus to search line edit after search). 72(E.g.: Removed message box about "no items found" and set key focus to search line edit after search).
68 73
69Added config option to hide the week number in KO/Pi toolbar. 74Added config option to hide the week number in KO/Pi toolbar.
70 75
71********** VERSION 2.0.9 ************ 76********** VERSION 2.0.9 ************
72 77
73Made month view icons for multiday events a bit nicer. 78Made month view icons for multiday events a bit nicer.
74Some minor fixes in KO/Pi 79Some minor fixes in KO/Pi
75(e.g. go to today did not work for new week view properly). 80(e.g. go to today did not work for new week view properly).
76 81
77 82
78********** VERSION 2.0.8 ************ 83********** VERSION 2.0.8 ************
79 84
80Fixed a problem in dependency info in the ipk files for the Zaurus. 85Fixed a problem in dependency info in the ipk files for the Zaurus.
81 86
82Added 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. 87Added 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.
83 88
84Added a "go today" button to the datepicker. 89Added a "go today" button to the datepicker.
85 90
86Added "created" and "last modified" to event/todo viewer (and What'sThis viewer) 91Added "created" and "last modified" to event/todo viewer (and What'sThis viewer)
87and made it configureable to show these values. 92and made it configureable to show these values.
88 93
89Fixed a problem for events (from external iCal files) that do have a duration but no end date. 94Fixed a problem for events (from external iCal files) that do have a duration but no end date.
90 95
91 96
92********** VERSION 2.0.7 ************ 97********** VERSION 2.0.7 ************
93 98
94Added global application font settings 99Added global application font settings
95(for all KDE-Pim/Pi apps) to the general settings. 100(for all KDE-Pim/Pi apps) to the general settings.
96 101
97Fixed a problem in OM/Pi when trying to login to some IMAP servers 102Fixed a problem in OM/Pi when trying to login to some IMAP servers
98(like the IMAP server of Apple: mail.mac.com ) 103(like the IMAP server of Apple: mail.mac.com )
99 104
100Added recurring todos to KO/Pi. 105Added recurring todos to KO/Pi.
101 106
102 107
103********** VERSION 2.0.6 ************ 108********** VERSION 2.0.6 ************
104 109
105Some bugfixes in the pi-sync mode. 110Some bugfixes in the pi-sync mode.
106Added German translation for pi-sync mode. 111Added German translation for pi-sync mode.
107 112
108KO/Pi: 113KO/Pi:
109Made the todolist using alternate background. 114Made the todolist using alternate background.
110 115
111Other minor fixes in KO/Pi. 116Other minor fixes in KO/Pi.
112 117
113 118
114********** VERSION 2.0.5 ************ 119********** VERSION 2.0.5 ************
115 120
116Bugfixes in KO/Pi. 121Bugfixes in KO/Pi.
117 122
118********** VERSION 2.0.4 ************ 123********** VERSION 2.0.4 ************
119 124
120KO/Pi: 125KO/Pi:
121Fixed problem loading translations for summary/location edit boxes in event/todo editor. 126Fixed problem loading translations for summary/location edit boxes in event/todo editor.
122 127
123Added a general "select week number" to the toolbar. 128Added a general "select week number" to the toolbar.
124 129
125Fixed some small problem of the new features introduced in version 2.0.3. 130Fixed some small problem of the new features introduced in version 2.0.3.
126 131
127Made it possible to specify one specific category as category color, 132Made it possible to specify one specific category as category color,
128if more than one categories are selected. 133if more than one categories are selected.
129 134
130Fixed a bug in saving colors for categories with non-ascii characters. 135Fixed a bug in saving colors for categories with non-ascii characters.
131(Like, e.g. German Umlauts). 136(Like, e.g. German Umlauts).
132Propably you have to set your colors again for those categories. 137Propably you have to set your colors again for those categories.
133 138
134 139
135********** VERSION 2.0.3 ************ 140********** VERSION 2.0.3 ************
136 141
137KO/Pi: 142KO/Pi:
138Added feature for changing alarm settings for many items at once: 143Added feature for changing alarm settings for many items at once:
139Open list view (or search dialog), select the desired items and choose in 144Open list view (or search dialog), select the desired items and choose in
140the popup menu: Set alarm for selected... 145the popup menu: Set alarm for selected...
141 146
142Added to the event/todo viewer the option to send an email to 147Added to the event/todo viewer the option to send an email to
143all attendees or all selected (with RSVP) attendees. 148all attendees or all selected (with RSVP) attendees.
144 149
145Made the week-month mode changing in month view faster. 150Made the week-month mode changing in month view faster.
146 151
147Made month view better useable with keyboard. 152Made month view better useable with keyboard.
148Now TAB key jumps to next cell with an event/todo. 153Now TAB key jumps to next cell with an event/todo.
149Scroll in cell with coursor keys, scroll in time (next week) with 154Scroll in cell with coursor keys, scroll in time (next week) with
150Shift/Control + coursorkeys. 155Shift/Control + coursorkeys.
151 156
152Fixed bug that the todo view flat mode was reset after first view update. 157Fixed bug that the todo view flat mode was reset after first view update.
153 158
154If a todo is displayed closed in the todo view, 159If a todo is displayed closed in the todo view,
155it is now displayed in overdue/due today color depending on the subtodos overdue/due today properties. 160it is now displayed in overdue/due today color depending on the subtodos overdue/due today properties.
156 161
157Added info about the numbers of years to the caption (title) information about a birthday event. 162Added info about the numbers of years to the caption (title) information about a birthday event.
158 163
159Made completion date in todo editor editable. 164Made completion date in todo editor editable.
160 165
161Added possibility to save/load templates for journals. 166Added possibility to save/load templates for journals.
162(Which is just a simple "save text to file" or "insert text from file". 167(Which is just a simple "save text to file" or "insert text from file".
163 168
164********** VERSION 2.0.2 ************ 169********** VERSION 2.0.2 ************
165 170
166KO/Pi: 171KO/Pi:
167Fixed the layout problem of the day label buttons 172Fixed the layout problem of the day label buttons
168of the agenda view introduced in version 2.0.1. 173of the agenda view introduced in version 2.0.1.
169 174
170Added WhatsThis support for the todo view and the list view. 175Added WhatsThis support for the todo view and the list view.
171 176
172Added a quite useful feature to the montview. 177Added a quite useful feature to the montview.
173Just click on the week numbers on the left. 178Just click on the week numbers on the left.
174And in the top right corner of month view/agenda view 179And in the top right corner of month view/agenda view
175there is now a "week number quick selector". 180there is now a "week number quick selector".
176(Click on the black triangle). 181(Click on the black triangle).
177 182
178Made the quite difficult timezone change in KO/Pi easy. 183Made the quite difficult timezone change in KO/Pi easy.
179 184
180OM/Pi: 185OM/Pi:
181Fixed too small icons on desktop. 186Fixed too small icons on desktop.
182Fixed non visible icons in mainwindow on Z with fastload enabled. 187Fixed non visible icons in mainwindow on Z with fastload enabled.
183Added signature file setting to smtp account config. 188Added signature file setting to smtp account config.
184And the signature can be edited and saved in the edit mail dialog. 189And the signature can be edited and saved in the edit mail dialog.
185That does mean: 190That does mean:
186Simply edit the signature for the selected smtp account in the 191Simply edit the signature for the selected smtp account in the
187edit new mail dialog and press the "save signature" button there. 192edit new mail dialog and press the "save signature" button there.
188Then the signature is saved to the file specified in the smtp account settings. 193Then the signature is saved to the file specified in the smtp account settings.
189If there is no file specified, it is saved automatically to the file 194If there is no file specified, it is saved automatically to the file
190kdepim/apps/kopiemail/<accountname>.sig. 195kdepim/apps/kopiemail/<accountname>.sig.
191 196
192 197
193 198
194********** VERSION 2.0.1 ************ 199********** VERSION 2.0.1 ************
195 200
196Oooops ... I forgot to test on the Zaurus 5500 ... 201Oooops ... I forgot to test on the Zaurus 5500 ...
197 202
198Fixed many problems of new (english) strings (and german translations) 203Fixed many problems of new (english) strings (and german translations)
199introduced in the latest versions, where the text was not fitting on the 204introduced in the latest versions, where the text was not fitting on the
200240x320 display of the Zaurus 5500. 205240x320 display of the Zaurus 5500.
201 206
202KO/Pi: 207KO/Pi:
203Added a popup menu ( press pen and hold to get popup ) to the agenda view 208Added a popup menu ( press pen and hold to get popup ) to the agenda view
204with many useful items (add event/todo, show next week, two weeks, month, journal). 209with many useful items (add event/todo, show next week, two weeks, month, journal).
205 210
206Added items to the todolist popup menu for: 211Added items to the todolist popup menu for:
207Display all opened, all closed or all todos flat. 212Display all opened, all closed or all todos flat.
208The "flat" view makes is possible to sort all todos after ,e.g., prio or date. 213The "flat" view makes is possible to sort all todos after ,e.g., prio or date.
209Made the reparenting of todos on the desktop possible via Drag&Drop. 214Made the reparenting of todos on the desktop possible via Drag&Drop.
210Fixed several bugs in setting the completed datetime for todos. 215Fixed several bugs in setting the completed datetime for todos.
211Added info about completed datetime of todos to the todo viewer. 216Added info about completed datetime of todos to the todo viewer.
212Now displaying a completed todo (with completed datetime set) in the agenda view 217Now displaying a completed todo (with completed datetime set) in the agenda view
213at the time of the completion. Such that now it is possible to see in the agenda view 218at the time of the completion. Such that now it is possible to see in the agenda view
214when what todo was completed. 219when what todo was completed.
215Fixed behaviour of automatic setting completion of todos with sub-todos/parent todos. 220Fixed behaviour of automatic setting completion of todos with sub-todos/parent todos.
216Now the behaviour is: 221Now the behaviour is:
217Setting a parent to complete sets all (sub)childs to complete. 222Setting a parent to complete sets all (sub)childs to complete.
218Setting a parent to uncomplete does not change the childs. 223Setting a parent to uncomplete does not change the childs.
219Setting a child to uncomplete sets all parent to uncomplete. 224Setting a child to uncomplete sets all parent to uncomplete.
220Setting a child to complete does not change the parents. 225Setting a child to complete does not change the parents.
221 226
222Smart updating and double buffering of the daymatrix. 227Smart updating and double buffering of the daymatrix.
223Showing holidays in the day matrix. 228Showing holidays in the day matrix.
224Many other small performance updates. 229Many other small performance updates.
225 230
226Made day labels in agenda clickable. By clicking a label, the day is displayed in single day mode. 231Made day labels in agenda clickable. By clicking a label, the day is displayed in single day mode.
227 232
228Now the translation file usertranslation.txt is supposed to be in utf8 format. 233Now the translation file usertranslation.txt is supposed to be in utf8 format.
229If 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. 234If 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.
230 235
231 236
232********** VERSION 2.0.0 ************ 237********** VERSION 2.0.0 ************
233 238
234Stable release 2.0.0! 239Stable release 2.0.0!
235 240
236KO/Pi: 241KO/Pi:
237Fixed problem in edit dialog recreation at startup. 242Fixed problem in edit dialog recreation at startup.
238Made "toggle view*" menu items enabled context sensitive. 243Made "toggle view*" menu items enabled context sensitive.
239Changed agenda size menu to items 1-10. 244Changed agenda size menu to items 1-10.
240Made it possible to change agenda size quickly by pressing mouse on timelabels in agenda view and move mouse up/down. 245Made it possible to change agenda size quickly by pressing mouse on timelabels in agenda view and move mouse up/down.
241Usebility enhancements in the KO/Pi menus. 246Usebility enhancements in the KO/Pi menus.
242Birthday import now adds year to summary. 247Birthday import now adds year to summary.
243What's Next view shows age in years for birthday. 248What's Next view shows age in years for birthday.
244 249
245OM/Pi: 250OM/Pi:
246Added three info lines to display subject, from and to of selected mails. 251Added three info lines to display subject, from and to of selected mails.
247 252
248KA/Pi: 253KA/Pi:
249Fixed jump bar behaviour on Zaurus. 254Fixed jump bar behaviour on Zaurus.
250Now KA/Pi search field supports searching for a range of starting characters. 255Now KA/Pi search field supports searching for a range of starting characters.
251E.g. to search for all contact beginning with b to n, type 256E.g. to search for all contact beginning with b to n, type
252b-n 257b-n
253in the search field. 258in the search field.
254 259
255********** VERSION 1.9.20 ************ 260********** VERSION 1.9.20 ************
256 261
257KO/Pi: 262KO/Pi:
258Added for the "dislplay one day" agenda mode 263Added for the "dislplay one day" agenda mode
259info in the caption and in the day lables: 264info in the caption and in the day lables:
260Now it is displayed, if the selected day is from "day before yesterday" 265Now it is displayed, if the selected day is from "day before yesterday"
261to "day after tomorrow". 266to "day after tomorrow".
262Made it possible to delete a Todo, which has sub-todos. 267Made it possible to delete a Todo, which has sub-todos.
263Fixed two small problems in the todo view. 268Fixed two small problems in the todo view.
264Added missing German translation for filter edit and print dialog. 269Added missing German translation for filter edit and print dialog.
265Made search dialog closeable by cancel key. 270Made search dialog closeable by cancel key.
266 271
267Made it possible to select in the date picker the (ligt grey ) 272Made it possible to select in the date picker the (ligt grey )
268dates of the prev./next month with the mouse. 273dates of the prev./next month with the mouse.
269 274
270OM/Pi: 275OM/Pi:
271"Delete mail" icon in main window now deletes all selected mails. 276"Delete mail" icon in main window now deletes all selected mails.
272Fixed the problem, that the state flag of imap mails was ignored. 277Fixed the problem, that the state flag of imap mails was ignored.
273Now mails with "FLAG_SEEN" on the imap server get no icon in the list view 278Now mails with "FLAG_SEEN" on the imap server get no icon in the list view
274to indecate that they are already seen. 279to indecate that they are already seen.
275Fixed the problem that the body of some mails was not displayed in the 280Fixed the problem that the body of some mails was not displayed in the
276mail viewer when fetching them from the imap server directly to read them. 281mail viewer when fetching them from the imap server directly to read them.
277Made it (configurable) possible to show the "To:" field in the list view. 282Made it (configurable) possible to show the "To:" field in the list view.
278Added to the mail viewer the option "View Source" to make it possible to see the raw mail data. 283Added to the mail viewer the option "View Source" to make it possible to see the raw mail data.
279Added a "Download Mail" button to the mail viewer to quickly download the viewed mail to the 284Added a "Download Mail" button to the mail viewer to quickly download the viewed mail to the
280local storage folder (specified in account settings) of the account of the mail. 285local storage folder (specified in account settings) of the account of the mail.
281Removed some memory leaks in OM/Pi. 286Removed some memory leaks in OM/Pi.
282 287
283 288
284********** VERSION 1.9.19 ************ 289********** VERSION 1.9.19 ************
285 290
286Added a lot of missing translations to KA/Pi, 291Added a lot of missing translations to KA/Pi,
287Added some missing translations to KO/Pi and OM/Pi. 292Added some missing translations to KO/Pi and OM/Pi.
288 293
289Fixed some minor problems in KA/Pi + KO/Pi. 294Fixed some minor problems in KA/Pi + KO/Pi.
290 295
291Fixed a crash when closing PwM/Pi. 296Fixed a crash when closing PwM/Pi.
292Added German translation for PwM/Pi. 297Added German translation for PwM/Pi.
293 298
294Made view change and Month View update faster in KO/Pi. 299Made view change and Month View update faster in KO/Pi.
295 300
296 301
297********** VERSION 1.9.18 ************ 302********** VERSION 1.9.18 ************
298 303
299FYI: The VERSION 1.9.17 was a testing release only. 304FYI: The VERSION 1.9.17 was a testing release only.
300Please read the changelog of VERSION 1.9.17 as well. 305Please read the changelog of VERSION 1.9.17 as well.
301 306
302Cleaned up the syncing config dialog. 307Cleaned up the syncing config dialog.
303Added sync config options for date range for events. 308Added sync config options for date range for events.
304Added sync config options for filters on incoming data. 309Added sync config options for filters on incoming data.
305Added sync config options for filters on outgoing data. 310Added sync config options for filters on outgoing data.
306Please read the updated SyncHowTo about the new filter settings. 311Please read the updated SyncHowTo about the new filter settings.
307These filter settings make it now possible to sync with shared 312These filter settings make it now possible to sync with shared
308calendars without writing back private or confidential data 313calendars without writing back private or confidential data
309(via the outgoing filters). 314(via the outgoing filters).
310To sync only with particular parts of a shared calendar, 315To sync only with particular parts of a shared calendar,
311the incoming filter settings can be used. 316the incoming filter settings can be used.
312An example can be found in the SyncHowTo. 317An example can be found in the SyncHowTo.
313Same for shared addressbooks. 318Same for shared addressbooks.
314 319
315Added a setting for the global kdepim data storage. 320Added a setting for the global kdepim data storage.
316Usually the data is stored in (yourhomedir/kdepim). 321Usually the data is stored in (yourhomedir/kdepim).
317Now you can set in the Global config dialog TAB, subTAB "Data storage path" 322Now you can set in the Global config dialog TAB, subTAB "Data storage path"
318a directory where all the kdepim data is stored. 323a directory where all the kdepim data is stored.
319That makes it easy to save all kdepim data on a SD card on the Z, for example. 324That makes it easy to save all kdepim data on a SD card on the Z, for example.
320 325
321KO/Pi: 326KO/Pi:
322The timeedit input has a pulldown list for times. 327The timeedit input has a pulldown list for times.
323If opened, this pulldown list should now has the right time highlighted. 328If opened, this pulldown list should now has the right time highlighted.
324Added the possibility to exclude events/todos/journals in a filter. 329Added the possibility to exclude events/todos/journals in a filter.
325You should exclude journals, if you do not want them to sync with a public calendar. 330You should exclude journals, if you do not want them to sync with a public calendar.
326 331
327KA/Pi: 332KA/Pi:
328Added the possibility to in/exclude public/private/confidential contacts to a filter. 333Added the possibility to in/exclude public/private/confidential contacts to a filter.
329If 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 ... 334If 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 ...
330Added printing of card view and details view on desktop. 335Added printing of card view and details view on desktop.
331Printing of list view is not working... 336Printing of list view is not working...
332Added button for removing pictures in contact editor. 337Added button for removing pictures in contact editor.
333Parsing data fix of KA/Pi version 1.9.17. 338Parsing data fix of KA/Pi version 1.9.17.
334Fixed the "parse name automatically" problem of KA/Pi version 1.9.17. 339Fixed the "parse name automatically" problem of KA/Pi version 1.9.17.
335Fixed some syncing merging problems. 340Fixed some syncing merging problems.
336 341
337 342
338********** VERSION 1.9.17 ************ 343********** VERSION 1.9.17 ************
339 344
340KO/Pi: 345KO/Pi:
341Fixed that tooltips were not updated after moving an item in agenda view. 346Fixed that tooltips were not updated after moving an item in agenda view.
342Fixed a bug in sorting start date for recurring events in list view. 347Fixed a bug in sorting start date for recurring events in list view.
343Changed the left button in todo viewer from "Agenda" to "Set completed". 348Changed the left button in todo viewer from "Agenda" to "Set completed".
344This 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. 349This 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.
345Added more info in the todo viewer: Startdate, parent/sub todos. 350Added more info in the todo viewer: Startdate, parent/sub todos.
346 351
347 352
348KA/Pi: 353KA/Pi:
349All fields search does now actually search all the (possible) fields, 354All fields search does now actually search all the (possible) fields,
350not only those listed in the contact list. 355not only those listed in the contact list.
351Made is possible to inline a picture in a vcard on the Z. 356Made is possible to inline a picture in a vcard on the Z.
352This was only possible on the desktop, now is it possible on the Z as well. 357This was only possible on the desktop, now is it possible on the Z as well.
353Fixed of missing save settings after filter configuration. 358Fixed of missing save settings after filter configuration.
354Made saving of addressbook much faster. 359Made saving of addressbook much faster.
355Fixed extension widget layout problem. 360Fixed extension widget layout problem.
356Fixed saving of default formatted name settings. 361Fixed saving of default formatted name settings.
357Fixed formatted name handling in edit dialog. 362Fixed formatted name handling in edit dialog.
358Added an option for changing formatted names of many contacts 363Added an option for changing formatted names of many contacts
359(menu: File - Change - Set formatted name). 364(menu: File - Change - Set formatted name).
360 365
361QWhatsThis was not working on the Z ( only black rectangle was shown). 366QWhatsThis was not working on the Z ( only black rectangle was shown).
362This is Fixed. 367This is Fixed.
363 368
364KDE-Sync: 369KDE-Sync:
365Now readonly KDE resources are synced as well. 370Now readonly KDE resources are synced as well.
366(They are not changed in KDE itself, of course). 371(They are not changed in KDE itself, of course).
367 372
368 373
369 374
370********** VERSION 1.9.16 ************ 375********** VERSION 1.9.16 ************
371 376
372KO/Pi: 377KO/Pi:
373Fixed search dialog size on Z 6000 (480x640 display). 378Fixed search dialog size on Z 6000 (480x640 display).
374Added setting to hide/show time in agenda items. 379Added setting to hide/show time in agenda items.
375Added setting to hide not running todos in todo view. 380Added setting to hide not running todos in todo view.
376Added columns for start date/time in todo view. 381Added columns for start date/time in todo view.
377Replaced the solid half-hour lines in agenda view by dot lines. 382Replaced the solid half-hour lines in agenda view by dot lines.
378Added possibility of printing the What's Next View on the desktop 383Added possibility of printing the What's Next View on the desktop
379(i.e. Windows and Linux). 384(i.e. Windows and Linux).
380Fixed a crash in KO/Pi when starting KO/Pi with What's Next view. 385Fixed a crash in KO/Pi when starting KO/Pi with What's Next view.
381Added tooltips in month view.(Tooltips only available on desktop) 386Added tooltips in month view.(Tooltips only available on desktop)
382 387
383Fixed a strange problem in KO/Pi alarm applet. 388Fixed a strange problem in KO/Pi alarm applet.
384Did not find the actual problem, 389Did not find the actual problem,
385such that now Qtopia reboots again if deinstalling the alarm applet. 390such that now Qtopia reboots again if deinstalling the alarm applet.
386But the alarm applet should work again. 391But the alarm applet should work again.
387 392
388KA/Pi: 393KA/Pi:
389Fixed the problem, that internal pictures were not saved. 394Fixed the problem, that internal pictures were not saved.
390 395
391Fixed a problem in the pi-sync mode by increasing the timeout for data transfer from 20 seconds to 5 minutes. 396Fixed a problem in the pi-sync mode by increasing the timeout for data transfer from 20 seconds to 5 minutes.
392 397
393Fixed some minor problems. (Like word wrap in help text windows). 398Fixed some minor problems. (Like word wrap in help text windows).
394 399
395Fixed a compiling problem in microkde/kresources. 400Fixed a compiling problem in microkde/kresources.
396 401
397KO/Pi is using zdbat (renamed to db2file) for syncing with Sharp DTM. 402KO/Pi is using zdbat (renamed to db2file) for syncing with Sharp DTM.
398This version now includes zdbat 1.0.0 (old version was zdbat 0.2.9) 403This version now includes zdbat 1.0.0 (old version was zdbat 0.2.9)
399such that now syncing KO/Pi with Sharp DTM should work on the 404such that now syncing KO/Pi with Sharp DTM should work on the
400Zaurus C 3000 model. 405Zaurus C 3000 model.
401 406
402********** VERSION 1.9.15 ************ 407********** VERSION 1.9.15 ************
403 408
404Usebilty enhancements in KO/Pi: 409Usebilty enhancements in KO/Pi:
405When clicking on the date in a month view cell, the day view is shown. 410When clicking on the date in a month view cell, the day view is shown.
406Old behaviour was, that the "new event" dialog popped up. 411Old behaviour was, that the "new event" dialog popped up.
407 412
diff --git a/kmicromail/editaccounts.cpp b/kmicromail/editaccounts.cpp
index f1075c0..49049f6 100644
--- a/kmicromail/editaccounts.cpp
+++ b/kmicromail/editaccounts.cpp
@@ -1,693 +1,697 @@
1 1
2#include <qdialog.h> 2#include <qdialog.h>
3#include "kapplication.h" 3#include "kapplication.h"
4#include "defines.h" 4#include "defines.h"
5#include "editaccounts.h" 5#include "editaccounts.h"
6/* OPIE */ 6/* OPIE */
7#include <qpe/qpeapplication.h> 7#include <qpe/qpeapplication.h>
8 8
9/* QT */ 9/* QT */
10#include <qstringlist.h> 10#include <qstringlist.h>
11 11
12#include <qcombobox.h> 12#include <qcombobox.h>
13#include <qcheckbox.h> 13#include <qcheckbox.h>
14#include <qmessagebox.h> 14#include <qmessagebox.h>
15#include <qpushbutton.h> 15#include <qpushbutton.h>
16#include <qlineedit.h> 16#include <qlineedit.h>
17#include <qlabel.h> 17#include <qlabel.h>
18#include <qtabwidget.h> 18#include <qtabwidget.h>
19#include <qlistview.h> 19#include <qlistview.h>
20#include <qspinbox.h> 20#include <qspinbox.h>
21#include <klocale.h> 21#include <klocale.h>
22#include <kfiledialog.h> 22#include <kfiledialog.h>
23 23
24#include <libmailwrapper/nntpwrapper.h> 24#include <libmailwrapper/nntpwrapper.h>
25 25
26using namespace Opie::Core; 26using namespace Opie::Core;
27 27
28AccountListItem::AccountListItem( QListView *parent, Account *a) 28AccountListItem::AccountListItem( QListView *parent, Account *a)
29 : QListViewItem( parent ) 29 : QListViewItem( parent )
30{ 30{
31 account = a; 31 account = a;
32 setText( 0, account->getAccountName() ); 32 setText( 0, account->getAccountName() );
33 QString ttext = ""; 33 QString ttext = "";
34 switch (account->getType()) { 34 switch (account->getType()) {
35 case MAILLIB::A_NNTP: 35 case MAILLIB::A_NNTP:
36 ttext="NNTP"; 36 ttext="NNTP";
37 break; 37 break;
38 case MAILLIB::A_POP3: 38 case MAILLIB::A_POP3:
39 ttext = "POP3"; 39 ttext = "POP3";
40 break; 40 break;
41 case MAILLIB::A_IMAP: 41 case MAILLIB::A_IMAP:
42 ttext = "IMAP"; 42 ttext = "IMAP";
43 break; 43 break;
44 case MAILLIB::A_SMTP: 44 case MAILLIB::A_SMTP:
45 ttext = "SMTP"; 45 ttext = "SMTP";
46 break; 46 break;
47 default: 47 default:
48 ttext = "UNKNOWN"; 48 ttext = "UNKNOWN";
49 break; 49 break;
50 } 50 }
51 setText( 1, ttext); 51 setText( 1, ttext);
52} 52}
53 53
54EditAccounts::EditAccounts( Settings *s, QWidget *parent, const char *name, bool modal, WFlags flags ) 54EditAccounts::EditAccounts( Settings *s, QWidget *parent, const char *name, bool modal, WFlags flags )
55 : EditAccountsUI( parent, name, modal, flags ) 55 : EditAccountsUI( parent, name, modal, flags )
56{ 56{
57 settings = s; 57 settings = s;
58 58
59 mailList->addColumn( i18n( "Account" ) ); 59 mailList->addColumn( i18n( "Account" ) );
60 mailList->addColumn( i18n( "Type" ) ); 60 mailList->addColumn( i18n( "Type" ) );
61 61
62 newsList->addColumn( i18n( "Account" ) ); 62 newsList->addColumn( i18n( "Account" ) );
63 63
64 connect( newMail, SIGNAL( clicked() ), SLOT( slotNewMail() ) ); 64 connect( newMail, SIGNAL( clicked() ), SLOT( slotNewMail() ) );
65 connect( editMail, SIGNAL( clicked() ), SLOT( slotEditMail() ) ); 65 connect( editMail, SIGNAL( clicked() ), SLOT( slotEditMail() ) );
66 connect( deleteMail, SIGNAL( clicked() ), SLOT( slotDeleteMail() ) ); 66 connect( deleteMail, SIGNAL( clicked() ), SLOT( slotDeleteMail() ) );
67 connect( newNews, SIGNAL( clicked() ), SLOT( slotNewNews() ) ); 67 connect( newNews, SIGNAL( clicked() ), SLOT( slotNewNews() ) );
68 connect( editNews, SIGNAL( clicked() ), SLOT( slotEditNews() ) ); 68 connect( editNews, SIGNAL( clicked() ), SLOT( slotEditNews() ) );
69 connect( deleteNews, SIGNAL( clicked() ), SLOT( slotDeleteNews() ) ); 69 connect( deleteNews, SIGNAL( clicked() ), SLOT( slotDeleteNews() ) );
70 70
71 slotFillLists(); 71 slotFillLists();
72} 72}
73 73
74void EditAccounts::slotFillLists() 74void EditAccounts::slotFillLists()
75{ 75{
76 mailList->clear(); 76 mailList->clear();
77 newsList->clear(); 77 newsList->clear();
78 78
79 QList<Account> accounts = settings->getAccounts(); 79 QList<Account> accounts = settings->getAccounts();
80 Account *it; 80 Account *it;
81 for ( it = accounts.first(); it; it = accounts.next() ) 81 for ( it = accounts.first(); it; it = accounts.next() )
82 { 82 {
83 if ( it->getType()==MAILLIB::A_NNTP ) 83 if ( it->getType()==MAILLIB::A_NNTP )
84 { 84 {
85 (void) new AccountListItem( newsList, it ); 85 (void) new AccountListItem( newsList, it );
86 } 86 }
87 else 87 else
88 { 88 {
89 (void) new AccountListItem( mailList, it ); 89 (void) new AccountListItem( mailList, it );
90 } 90 }
91 } 91 }
92} 92}
93 93
94void EditAccounts::slotNewMail() 94void EditAccounts::slotNewMail()
95{ 95{
96 QString *selection = new QString(); 96 QString *selection = new QString();
97 SelectMailType selType( selection, this, 0, true ); 97 SelectMailType selType( selection, this, 0, true );
98 selType.show(); 98 selType.show();
99 if ( QDialog::Accepted == selType.exec() ) 99 if ( QDialog::Accepted == selType.exec() )
100 { 100 {
101 slotNewAccount( *selection ); 101 slotNewAccount( *selection );
102 } 102 }
103} 103}
104 104
105void EditAccounts::slotNewAccount( const QString &type ) 105void EditAccounts::slotNewAccount( const QString &type )
106{ 106{
107 if ( type.compare( i18n("IMAP") ) == 0 ) 107 if ( type.compare( i18n("IMAP") ) == 0 )
108 { 108 {
109 IMAPaccount *account = new IMAPaccount(); 109 IMAPaccount *account = new IMAPaccount();
110 IMAPconfig imap( account, this, 0, true ); 110 IMAPconfig imap( account, this, 0, true );
111 111
112#ifndef DESKTOP_VERSION 112#ifndef DESKTOP_VERSION
113 imap.showMaximized(); 113 imap.showMaximized();
114#endif 114#endif
115 if ( QDialog::Accepted == imap.exec() ) 115 if ( QDialog::Accepted == imap.exec() )
116 { 116 {
117 settings->addAccount( account ); 117 settings->addAccount( account );
118 account->save(); 118 account->save();
119 slotFillLists(); 119 slotFillLists();
120 } 120 }
121 else 121 else
122 { 122 {
123 account->remove(); 123 account->remove();
124 } 124 }
125 } 125 }
126 else if ( type.compare( i18n("POP3") ) == 0 ) 126 else if ( type.compare( i18n("POP3") ) == 0 )
127 { 127 {
128 POP3account *account = new POP3account(); 128 POP3account *account = new POP3account();
129 POP3config pop3( account, this, 0, true, WStyle_ContextHelp ); 129 POP3config pop3( account, this, 0, true, WStyle_ContextHelp );
130 if ( QDialog::Accepted == KApplication::execDialog( &pop3 ) ) 130 if ( QDialog::Accepted == KApplication::execDialog( &pop3 ) )
131 { 131 {
132 settings->addAccount( account ); 132 settings->addAccount( account );
133 account->save(); 133 account->save();
134 slotFillLists(); 134 slotFillLists();
135 } 135 }
136 else 136 else
137 { 137 {
138 account->remove(); 138 account->remove();
139 } 139 }
140 } 140 }
141 else if ( type.compare( i18n("SMTP") ) == 0 ) 141 else if ( type.compare( i18n("SMTP") ) == 0 )
142 { 142 {
143 SMTPaccount *account = new SMTPaccount(); 143 SMTPaccount *account = new SMTPaccount();
144 SMTPconfig smtp( account, this, 0, true, WStyle_ContextHelp ); 144 SMTPconfig smtp( account, this, 0, true, WStyle_ContextHelp );
145 if ( QDialog::Accepted == KApplication::execDialog( &smtp ) ) 145 if ( QDialog::Accepted == KApplication::execDialog( &smtp ) )
146 { 146 {
147 settings->addAccount( account ); 147 settings->addAccount( account );
148 account->save(); 148 account->save();
149 slotFillLists(); 149 slotFillLists();
150 150
151 } 151 }
152 else 152 else
153 { 153 {
154 account->remove(); 154 account->remove();
155 } 155 }
156 } 156 }
157 else if ( type.compare( i18n("NNTP") ) == 0 ) 157 else if ( type.compare( i18n("NNTP") ) == 0 )
158 { 158 {
159 NNTPaccount *account = new NNTPaccount(); 159 NNTPaccount *account = new NNTPaccount();
160 NNTPconfig nntp( account, this, 0, true, WStyle_ContextHelp ); 160 NNTPconfig nntp( account, this, 0, true, WStyle_ContextHelp );
161 if ( QDialog::Accepted == KApplication::execDialog( &nntp ) ) 161 if ( QDialog::Accepted == KApplication::execDialog( &nntp ) )
162 { 162 {
163 settings->addAccount( account ); 163 settings->addAccount( account );
164 account->save(); 164 account->save();
165 slotFillLists(); 165 slotFillLists();
166 } 166 }
167 else 167 else
168 { 168 {
169 account->remove(); 169 account->remove();
170 } 170 }
171 } 171 }
172} 172}
173 173
174void EditAccounts::slotEditAccount( Account *account ) 174void EditAccounts::slotEditAccount( Account *account )
175{ 175{
176 if ( account->getType() == MAILLIB::A_IMAP ) 176 if ( account->getType() == MAILLIB::A_IMAP )
177 { 177 {
178 IMAPaccount *imapAcc = static_cast<IMAPaccount *>(account); 178 IMAPaccount *imapAcc = static_cast<IMAPaccount *>(account);
179 IMAPconfig imap( imapAcc, this, 0, true, WStyle_ContextHelp ); 179 IMAPconfig imap( imapAcc, this, 0, true, WStyle_ContextHelp );
180 if ( QDialog::Accepted == KApplication::execDialog( &imap ) ) 180 if ( QDialog::Accepted == KApplication::execDialog( &imap ) )
181 { 181 {
182 slotFillLists(); 182 slotFillLists();
183 } 183 }
184 } 184 }
185 else if ( account->getType()==MAILLIB::A_POP3 ) 185 else if ( account->getType()==MAILLIB::A_POP3 )
186 { 186 {
187 POP3account *pop3Acc = static_cast<POP3account *>(account); 187 POP3account *pop3Acc = static_cast<POP3account *>(account);
188 POP3config pop3( pop3Acc, this, 0, true, WStyle_ContextHelp ); 188 POP3config pop3( pop3Acc, this, 0, true, WStyle_ContextHelp );
189 if ( QDialog::Accepted == KApplication::execDialog( &pop3 ) ) 189 if ( QDialog::Accepted == KApplication::execDialog( &pop3 ) )
190 { 190 {
191 slotFillLists(); 191 slotFillLists();
192 } 192 }
193 } 193 }
194 else if ( account->getType()==MAILLIB::A_SMTP ) 194 else if ( account->getType()==MAILLIB::A_SMTP )
195 { 195 {
196 SMTPaccount *smtpAcc = static_cast<SMTPaccount *>(account); 196 SMTPaccount *smtpAcc = static_cast<SMTPaccount *>(account);
197 SMTPconfig smtp( smtpAcc, this, 0, true, WStyle_ContextHelp ); 197 SMTPconfig smtp( smtpAcc, this, 0, true, WStyle_ContextHelp );
198 if ( QDialog::Accepted == KApplication::execDialog( &smtp ) ) 198 if ( QDialog::Accepted == KApplication::execDialog( &smtp ) )
199 { 199 {
200 slotFillLists(); 200 slotFillLists();
201 } 201 }
202 } 202 }
203 else if ( account->getType()==MAILLIB::A_NNTP) 203 else if ( account->getType()==MAILLIB::A_NNTP)
204 { 204 {
205 NNTPaccount *nntpAcc = static_cast<NNTPaccount *>(account); 205 NNTPaccount *nntpAcc = static_cast<NNTPaccount *>(account);
206 NNTPconfig nntp( nntpAcc, this, 0, true, WStyle_ContextHelp ); 206 NNTPconfig nntp( nntpAcc, this, 0, true, WStyle_ContextHelp );
207 if ( QDialog::Accepted == KApplication::execDialog( &nntp ) ) 207 if ( QDialog::Accepted == KApplication::execDialog( &nntp ) )
208 { 208 {
209 slotFillLists(); 209 slotFillLists();
210 } 210 }
211 } 211 }
212} 212}
213 213
214void EditAccounts::slotDeleteAccount( Account *account ) 214void EditAccounts::slotDeleteAccount( Account *account )
215{ 215{
216 if ( QMessageBox::information( this, i18n( "Question" ), 216 if ( QMessageBox::information( this, i18n( "Question" ),
217 i18n( "<p>Do you really want to delete the selected Account?</p>" ), 217 i18n( "<p>Do you really want to delete the selected Account?</p>" ),
218 i18n( "Yes" ), i18n( "No" ) ) == 0 ) 218 i18n( "Yes" ), i18n( "No" ) ) == 0 )
219 { 219 {
220 settings->delAccount( account ); 220 settings->delAccount( account );
221 slotFillLists(); 221 slotFillLists();
222 } 222 }
223} 223}
224 224
225void EditAccounts::slotEditMail() 225void EditAccounts::slotEditMail()
226{ 226{
227 if ( !mailList->currentItem() ) 227 if ( !mailList->currentItem() )
228 { 228 {
229 QMessageBox::information( this, i18n( "Error" ), 229 QMessageBox::information( this, i18n( "Error" ),
230 i18n( "<p>Please select an account.</p>" ), 230 i18n( "<p>Please select an account.</p>" ),
231 i18n( "Ok" ) ); 231 i18n( "Ok" ) );
232 return; 232 return;
233 } 233 }
234 234
235 Account *a = ((AccountListItem *) mailList->currentItem())->getAccount(); 235 Account *a = ((AccountListItem *) mailList->currentItem())->getAccount();
236 slotEditAccount( a ); 236 slotEditAccount( a );
237} 237}
238 238
239void EditAccounts::slotDeleteMail() 239void EditAccounts::slotDeleteMail()
240{ 240{
241 if ( !mailList->currentItem() ) 241 if ( !mailList->currentItem() )
242 { 242 {
243 QMessageBox::information( this, i18n( "Error" ), 243 QMessageBox::information( this, i18n( "Error" ),
244 i18n( "<p>Please select an account.</p>" ), 244 i18n( "<p>Please select an account.</p>" ),
245 i18n( "Ok" ) ); 245 i18n( "Ok" ) );
246 return; 246 return;
247 } 247 }
248 248
249 Account *a = ((AccountListItem *) mailList->currentItem())->getAccount(); 249 Account *a = ((AccountListItem *) mailList->currentItem())->getAccount();
250 slotDeleteAccount( a ); 250 slotDeleteAccount( a );
251} 251}
252 252
253void EditAccounts::slotNewNews() 253void EditAccounts::slotNewNews()
254{ 254{
255 slotNewAccount( "NNTP" ); 255 slotNewAccount( "NNTP" );
256} 256}
257 257
258void EditAccounts::slotEditNews() 258void EditAccounts::slotEditNews()
259{ 259{
260 if ( !newsList->currentItem() ) 260 if ( !newsList->currentItem() )
261 { 261 {
262 QMessageBox::information( this, i18n( "Error" ), 262 QMessageBox::information( this, i18n( "Error" ),
263 i18n( "<p>Please select an account.</p>" ), 263 i18n( "<p>Please select an account.</p>" ),
264 i18n( "Ok" ) ); 264 i18n( "Ok" ) );
265 return; 265 return;
266 } 266 }
267 267
268 Account *a = ((AccountListItem *) newsList->currentItem())->getAccount(); 268 Account *a = ((AccountListItem *) newsList->currentItem())->getAccount();
269 slotEditAccount( a ); 269 slotEditAccount( a );
270} 270}
271 271
272void EditAccounts::slotDeleteNews() 272void EditAccounts::slotDeleteNews()
273{ 273{
274 if ( !newsList->currentItem() ) 274 if ( !newsList->currentItem() )
275 { 275 {
276 QMessageBox::information( this, i18n( "Error" ), 276 QMessageBox::information( this, i18n( "Error" ),
277 i18n( "<p>Please select an account.</p>" ), 277 i18n( "<p>Please select an account.</p>" ),
278 i18n( "Ok" ) ); 278 i18n( "Ok" ) );
279 return; 279 return;
280 } 280 }
281 281
282 Account *a = ((AccountListItem *) newsList->currentItem())->getAccount(); 282 Account *a = ((AccountListItem *) newsList->currentItem())->getAccount();
283 slotDeleteAccount( a ); 283 slotDeleteAccount( a );
284} 284}
285 285
286void EditAccounts::slotAdjustColumns() 286void EditAccounts::slotAdjustColumns()
287{ 287{
288 int currPage = configTab->currentPageIndex(); 288 int currPage = configTab->currentPageIndex();
289 289
290 configTab->showPage( mailTab ); 290 configTab->showPage( mailTab );
291 mailList->setColumnWidth( 0, mailList->visibleWidth() - 50 ); 291 mailList->setColumnWidth( 0, mailList->visibleWidth() - 50 );
292 mailList->setColumnWidth( 1, 50 ); 292 mailList->setColumnWidth( 1, 50 );
293 293
294 configTab->showPage( newsTab ); 294 configTab->showPage( newsTab );
295 newsList->setColumnWidth( 0, newsList->visibleWidth() ); 295 newsList->setColumnWidth( 0, newsList->visibleWidth() );
296 296
297 configTab->setCurrentPage( currPage ); 297 configTab->setCurrentPage( currPage );
298} 298}
299 299
300void EditAccounts::accept() 300void EditAccounts::accept()
301{ 301{
302 settings->saveAccounts(); 302 settings->saveAccounts();
303 303
304 QDialog::accept(); 304 QDialog::accept();
305} 305}
306 306
307/** 307/**
308 * SelectMailType 308 * SelectMailType
309 */ 309 */
310 310
311SelectMailType::SelectMailType( QString *selection, QWidget *parent, const char *name, bool modal, WFlags flags ) 311SelectMailType::SelectMailType( QString *selection, QWidget *parent, const char *name, bool modal, WFlags flags )
312 : SelectMailTypeUI( parent, name, modal, flags ) 312 : SelectMailTypeUI( parent, name, modal, flags )
313{ 313{
314 selected = selection; 314 selected = selection;
315 selected->replace( 0, selected->length(), typeBox->currentText() ); 315 selected->replace( 0, selected->length(), typeBox->currentText() );
316 connect( typeBox, SIGNAL( activated(const QString&) ), SLOT( slotSelection(const QString&) ) ); 316 connect( typeBox, SIGNAL( activated(const QString&) ), SLOT( slotSelection(const QString&) ) );
317} 317}
318 318
319void SelectMailType::slotSelection( const QString &sel ) 319void SelectMailType::slotSelection( const QString &sel )
320{ 320{
321 selected->replace( 0, selected->length(), sel ); 321 selected->replace( 0, selected->length(), sel );
322} 322}
323 323
324/** 324/**
325 * IMAPconfig 325 * IMAPconfig
326 */ 326 */
327 327
328IMAPconfig::IMAPconfig( IMAPaccount *account, QWidget *parent, const char *name, bool modal, WFlags flags ) 328IMAPconfig::IMAPconfig( IMAPaccount *account, QWidget *parent, const char *name, bool modal, WFlags flags )
329 : IMAPconfigUI( parent, name, modal, flags ) 329 : IMAPconfigUI( parent, name, modal, flags )
330{ 330{
331 data = account; 331 data = account;
332 332
333 fillValues(); 333 //fillValues();
334 334
335 connect( ComboBox1, SIGNAL( activated(int) ), SLOT( slotConnectionToggle(int) ) ); 335 connect( ComboBox1, SIGNAL( activated(int) ), SLOT( slotConnectionToggle(int) ) );
336 ComboBox1->insertItem( "Only if available", 0 ); 336 ComboBox1->insertItem( "Only if available", 0 );
337 ComboBox1->insertItem( "Always, Negotiated", 1 ); 337 ComboBox1->insertItem( "Always, Negotiated", 1 );
338 ComboBox1->insertItem( "Connect on secure port", 2 ); 338 ComboBox1->insertItem( "Connect on secure port", 2 );
339 ComboBox1->insertItem( "Run command instead", 3 ); 339 ComboBox1->insertItem( "Run command instead", 3 );
340 CommandEdit->hide(); 340 CommandEdit->hide();
341 ComboBox1->setCurrentItem( data->ConnectionType() ); 341 fillValues();
342 // ComboBox1->setCurrentItem( data->ConnectionType() );
342} 343}
343 344
344void IMAPconfig::slotConnectionToggle( int index ) 345void IMAPconfig::slotConnectionToggle( int index )
345{ 346{
346 if ( index == 2 ) 347 if ( index == 2 )
347 { 348 {
348 portLine->setText( IMAP_SSL_PORT ); 349 portLine->setText( IMAP_SSL_PORT );
349 } 350 }
350 else if ( index == 3 ) 351 else if ( index == 3 )
351 { 352 {
352 portLine->setText( IMAP_PORT ); 353 portLine->setText( IMAP_PORT );
353 CommandEdit->show(); 354 CommandEdit->show();
354 } 355 }
355 else 356 else
356 { 357 {
357 portLine->setText( IMAP_PORT ); 358 portLine->setText( IMAP_PORT );
358 } 359 }
359} 360}
360 361
361void IMAPconfig::fillValues() 362void IMAPconfig::fillValues()
362{ 363{
363 accountLine->setText( data->getAccountName() ); 364 accountLine->setText( data->getAccountName() );
364 serverLine->setText( data->getServer() ); 365 serverLine->setText( data->getServer() );
365 portLine->setText( data->getPort() ); 366 portLine->setText( data->getPort() );
366 ComboBox1->setCurrentItem( data->ConnectionType() ); 367 ComboBox1->setCurrentItem( data->ConnectionType() );
367 userLine->setText( data->getUser() ); 368 userLine->setText( data->getUser() );
368 passLine->setText( data->getPassword() ); 369 passLine->setText( data->getPassword() );
369 prefixLine->setText(data->getPrefix()); 370 prefixLine->setText(data->getPrefix());
370 localFolder->setText( data->getLocalFolder() ); 371 localFolder->setText( data->getLocalFolder() );
371 int max = data->getMaxMailSize() ; 372 int max = data->getMaxMailSize() ;
372 if ( max ) { 373 if ( max ) {
373 CheckBoxDown->setChecked( true ); 374 CheckBoxDown->setChecked( true );
374 SpinBoxDown->setValue ( max ); 375 SpinBoxDown->setValue ( max );
375 } else { 376 } else {
376 CheckBoxDown->setChecked( false ); 377 CheckBoxDown->setChecked( false );
377 SpinBoxDown->setValue ( 5 ); 378 SpinBoxDown->setValue ( 5 );
378 } 379 }
379 CheckBoxLeaveOn->setChecked( data->getLeaveOnServer() ); 380 CheckBoxLeaveOn->setChecked( data->getLeaveOnServer() );
380} 381}
381 382
382void IMAPconfig::accept() 383void IMAPconfig::accept()
383{ 384{
384 if ( localFolder->text().contains("/") ||localFolder->text().contains("\\") ) { 385 if ( localFolder->text().contains("/") ||localFolder->text().contains("\\") ) {
385 QMessageBox::information( this, i18n( "Error" ), 386 QMessageBox::information( this, i18n( "Error" ),
386 i18n( "No paths allowed in\nlocal folder settings.\nPlease specify a folder\nname or leave empty\nto create local folder\nwith account name\nautomatically." ), 387 i18n( "No paths allowed in\nlocal folder settings.\nPlease specify a folder\nname or leave empty\nto create local folder\nwith account name\nautomatically." ),
387 i18n( "Ok" ) ); 388 i18n( "Ok" ) );
388 return; 389 return;
389 } 390 }
390 data->setAccountName( accountLine->text() ); 391 data->setAccountName( accountLine->text() );
391 data->setServer( serverLine->text() ); 392 data->setServer( serverLine->text() );
392 data->setPort( portLine->text() ); 393 data->setPort( portLine->text() );
393 data->setConnectionType( ComboBox1->currentItem() ); 394 data->setConnectionType( ComboBox1->currentItem() );
394 data->setUser( userLine->text() ); 395 data->setUser( userLine->text() );
395 data->setPassword( passLine->text() ); 396 data->setPassword( passLine->text() );
396 data->setPrefix(prefixLine->text()); 397 data->setPrefix(prefixLine->text());
397 data->setLocalFolder( localFolder->text() ); 398 data->setLocalFolder( localFolder->text() );
398 data->setMaxMailSize( CheckBoxDown->isChecked()?SpinBoxDown->value():0 ) ; 399 data->setMaxMailSize( CheckBoxDown->isChecked()?SpinBoxDown->value():0 ) ;
399 data->setLeaveOnServer( CheckBoxLeaveOn->isChecked() ); 400 data->setLeaveOnServer( CheckBoxLeaveOn->isChecked() );
400 401
401 QDialog::accept(); 402 QDialog::accept();
402} 403}
403 404
404/** 405/**
405 * POP3config 406 * POP3config
406 */ 407 */
407 408
408POP3config::POP3config( POP3account *account, QWidget *parent, const char *name, bool modal, WFlags flags ) 409POP3config::POP3config( POP3account *account, QWidget *parent, const char *name, bool modal, WFlags flags )
409 : POP3configUI( parent, name, modal, flags ) 410 : POP3configUI( parent, name, modal, flags )
410{ 411{
411 data = account; 412 data = account;
412 fillValues(); 413 //fillValues();
413 414
414 connect( ComboBox1, SIGNAL( activated(int) ), SLOT( slotConnectionToggle(int) ) ); 415 connect( ComboBox1, SIGNAL( activated(int) ), SLOT( slotConnectionToggle(int) ) );
415 ComboBox1->insertItem( "Only if available", 0 ); 416 ComboBox1->insertItem( "Only if available", 0 );
416 ComboBox1->insertItem( "Always, Negotiated", 1 ); 417 ComboBox1->insertItem( "Always, Negotiated", 1 );
417 ComboBox1->insertItem( "Connect on secure port", 2 ); 418 ComboBox1->insertItem( "Connect on secure port", 2 );
418 ComboBox1->insertItem( "Run command instead", 3 ); 419 ComboBox1->insertItem( "Run command instead", 3 );
419 CommandEdit->hide(); 420 CommandEdit->hide();
420 ComboBox1->setCurrentItem( data->ConnectionType() ); 421 fillValues();
422 //ComboBox1->setCurrentItem( data->ConnectionType() );
421} 423}
422 424
423void POP3config::slotConnectionToggle( int index ) 425void POP3config::slotConnectionToggle( int index )
424{ 426{
425 // 2 is ssl connection 427 // 2 is ssl connection
426 if ( index == 2 ) 428 if ( index == 2 )
427 { 429 {
428 portLine->setText( POP3_SSL_PORT ); 430 portLine->setText( POP3_SSL_PORT );
429 } 431 }
430 else if ( index == 3 ) 432 else if ( index == 3 )
431 { 433 {
432 portLine->setText( POP3_PORT ); 434 portLine->setText( POP3_PORT );
433 CommandEdit->show(); 435 CommandEdit->show();
434 } 436 }
435 else 437 else
436 { 438 {
437 portLine->setText( POP3_PORT ); 439 portLine->setText( POP3_PORT );
438 } 440 }
439} 441}
440 442
441void POP3config::fillValues() 443void POP3config::fillValues()
442{ 444{
443 accountLine->setText( data->getAccountName() ); 445 accountLine->setText( data->getAccountName() );
444 serverLine->setText( data->getServer() ); 446 serverLine->setText( data->getServer() );
445 portLine->setText( data->getPort() ); 447 portLine->setText( data->getPort() );
446 ComboBox1->setCurrentItem( data->ConnectionType() ); 448 ComboBox1->setCurrentItem( data->ConnectionType() );
447 userLine->setText( data->getUser() ); 449 userLine->setText( data->getUser() );
448 passLine->setText( data->getPassword() ); 450 passLine->setText( data->getPassword() );
449 localFolder->setText( data->getLocalFolder() ); 451 localFolder->setText( data->getLocalFolder() );
450 int max = data->getMaxMailSize() ; 452 int max = data->getMaxMailSize() ;
451 if ( max ) { 453 if ( max ) {
452 CheckBoxDown->setChecked( true ); 454 CheckBoxDown->setChecked( true );
453 SpinBoxDown->setValue ( max ); 455 SpinBoxDown->setValue ( max );
454 } else { 456 } else {
455 CheckBoxDown->setChecked( false ); 457 CheckBoxDown->setChecked( false );
456 SpinBoxDown->setValue ( 5 ); 458 SpinBoxDown->setValue ( 5 );
457 } 459 }
458 CheckBoxLeaveOn->setChecked( data->getLeaveOnServer() ); 460 CheckBoxLeaveOn->setChecked( data->getLeaveOnServer() );
459} 461}
460 462
461void POP3config::accept() 463void POP3config::accept()
462{ 464{
463 if ( localFolder->text().contains("/") ||localFolder->text().contains("\\") ) { 465 if ( localFolder->text().contains("/") ||localFolder->text().contains("\\") ) {
464 QMessageBox::information( this, i18n( "Error" ), 466 QMessageBox::information( this, i18n( "Error" ),
465 i18n( "No paths allowed in\nlocal folder settings.\nPlease specify a folder\nname or leave empty\nto create local folder\nwith account name\nautomatically." ), 467 i18n( "No paths allowed in\nlocal folder settings.\nPlease specify a folder\nname or leave empty\nto create local folder\nwith account name\nautomatically." ),
466 i18n( "Ok" ) ); 468 i18n( "Ok" ) );
467 return; 469 return;
468 } 470 }
469 data->setAccountName( accountLine->text() ); 471 data->setAccountName( accountLine->text() );
470 data->setServer( serverLine->text() ); 472 data->setServer( serverLine->text() );
471 data->setPort( portLine->text() ); 473 data->setPort( portLine->text() );
472 data->setConnectionType( ComboBox1->currentItem() ); 474 data->setConnectionType( ComboBox1->currentItem() );
473 data->setUser( userLine->text() ); 475 data->setUser( userLine->text() );
474 data->setPassword( passLine->text() ); 476 data->setPassword( passLine->text() );
475 data->setLocalFolder( localFolder->text() ); 477 data->setLocalFolder( localFolder->text() );
476 data->setMaxMailSize( CheckBoxDown->isChecked()?SpinBoxDown->value():0 ) ; 478 data->setMaxMailSize( CheckBoxDown->isChecked()?SpinBoxDown->value():0 ) ;
477 data->setLeaveOnServer( CheckBoxLeaveOn->isChecked() ); 479 data->setLeaveOnServer( CheckBoxLeaveOn->isChecked() );
478 480
479 QDialog::accept(); 481 QDialog::accept();
480} 482}
481 483
482/** 484/**
483 * SMTPconfig 485 * SMTPconfig
484 */ 486 */
485 487
486SMTPconfig::SMTPconfig( SMTPaccount *account, QWidget *parent, const char *name, bool modal, WFlags flags ) 488SMTPconfig::SMTPconfig( SMTPaccount *account, QWidget *parent, const char *name, bool modal, WFlags flags )
487 : SMTPconfigUI( parent, name, modal, flags ) 489 : SMTPconfigUI( parent, name, modal, flags )
488{ 490{
489 data = account; 491 data = account;
490 492
491 connect( loginBox, SIGNAL( toggled(bool) ), userLine, SLOT( setEnabled(bool) ) ); 493 connect( loginBox, SIGNAL( toggled(bool) ), userLine, SLOT( setEnabled(bool) ) );
492 connect( loginBox, SIGNAL( toggled(bool) ), passLine, SLOT( setEnabled(bool) ) ); 494 connect( loginBox, SIGNAL( toggled(bool) ), passLine, SLOT( setEnabled(bool) ) );
493 495
494 fillValues(); 496 // fillValues();
495 QIconSet icon; 497 QIconSet icon;
496 //icon = SmallIcon("fileexport"); 498 //icon = SmallIcon("fileexport");
497 icon = SmallIcon("fileopen"); 499 icon = SmallIcon("fileopen");
498 SignaturButton->setText(""); 500 SignaturButton->setText("");
499 SignaturButton->setIconSet (icon ) ; 501 SignaturButton->setIconSet (icon ) ;
500 SignaturButton->setMaximumSize ( SignaturButton->sizeHint().height()+4,SignaturButton->sizeHint().height()) ; 502 SignaturButton->setMaximumSize ( SignaturButton->sizeHint().height()+4,SignaturButton->sizeHint().height()) ;
501 connect( SignaturButton, SIGNAL( clicked() ), this, SLOT( chooseSig() ) ); 503 connect( SignaturButton, SIGNAL( clicked() ), this, SLOT( chooseSig() ) );
502 connect( ComboBox1, SIGNAL( activated(int) ), SLOT( slotConnectionToggle(int) ) ); 504 connect( ComboBox1, SIGNAL( activated(int) ), SLOT( slotConnectionToggle(int) ) );
503 ComboBox1->insertItem( "Only if available", 0 ); 505 ComboBox1->insertItem( "No secure connection, no TLS", 0 );
504 ComboBox1->insertItem( "Always, Negotiated", 1 ); 506 ComboBox1->insertItem( "Only if available, try TLS", 1 );
505 ComboBox1->insertItem( "Connect on secure port", 2 ); 507 ComboBox1->insertItem( "Always, use TLS", 2 );
506 ComboBox1->insertItem( "Run command instead", 3 ); 508 ComboBox1->insertItem( "Connect on secure port (SSL)", 3 );
509 ComboBox1->insertItem( "Run command instead", 4 );
507 CommandEdit->hide(); 510 CommandEdit->hide();
508 ComboBox1->setCurrentItem( data->ConnectionType() ); 511 fillValues();
512 //ComboBox1->setCurrentItem( data->ConnectionType() );
509} 513}
510void SMTPconfig::chooseSig() 514void SMTPconfig::chooseSig()
511{ 515{
512 QString lnk = KFileDialog::getOpenFileName( "", "Choose Signatur File", this ); 516 QString lnk = KFileDialog::getOpenFileName( "", "Choose Signatur File", this );
513 if ( !lnk.isEmpty() ) { 517 if ( !lnk.isEmpty() ) {
514 SignaturEdit->setText( lnk ); 518 SignaturEdit->setText( lnk );
515 } 519 }
516} 520}
517void SMTPconfig::slotConnectionToggle( int index ) 521void SMTPconfig::slotConnectionToggle( int index )
518{ 522{
519 // 2 is ssl connection 523 // 2 is ssl connection
520 if ( index == 2 ) 524 if ( index == 2 )
521 { 525 {
522 portLine->setText( SMTP_SSL_PORT ); 526 portLine->setText( SMTP_SSL_PORT );
523 } 527 }
524 else if ( index == 3 ) 528 else if ( index == 3 )
525 { 529 {
526 portLine->setText( SMTP_PORT ); 530 portLine->setText( SMTP_PORT );
527 CommandEdit->show(); 531 CommandEdit->show();
528 } 532 }
529 else 533 else
530 { 534 {
531 portLine->setText( SMTP_PORT ); 535 portLine->setText( SMTP_PORT );
532 } 536 }
533} 537}
534 538
535void SMTPconfig::fillValues() 539void SMTPconfig::fillValues()
536{ 540{
537 accountLine->setText( data->getAccountName() ); 541 accountLine->setText( data->getAccountName() );
538 serverLine->setText( data->getServer() ); 542 serverLine->setText( data->getServer() );
539 portLine->setText( data->getPort() ); 543 portLine->setText( data->getPort() );
540 ComboBox1->setCurrentItem( data->ConnectionType() ); 544 ComboBox1->setCurrentItem( data->ConnectionType() );
541 loginBox->setChecked( data->getLogin() ); 545 loginBox->setChecked( data->getLogin() );
542 userLine->setText( data->getUser() ); 546 userLine->setText( data->getUser() );
543 passLine->setText( data->getPassword() ); 547 passLine->setText( data->getPassword() );
544 SignaturEdit->setText( data->getSigFile() ); 548 SignaturEdit->setText( data->getSigFile() );
545} 549}
546 550
547void SMTPconfig::accept() 551void SMTPconfig::accept()
548{ 552{
549 data->setAccountName( accountLine->text() ); 553 data->setAccountName( accountLine->text() );
550 data->setServer( serverLine->text() ); 554 data->setServer( serverLine->text() );
551 data->setPort( portLine->text() ); 555 data->setPort( portLine->text() );
552 data->setConnectionType( ComboBox1->currentItem() ); 556 data->setConnectionType( ComboBox1->currentItem() );
553 data->setLogin( loginBox->isChecked() ); 557 data->setLogin( loginBox->isChecked() );
554 data->setUser( userLine->text() ); 558 data->setUser( userLine->text() );
555 data->setPassword( passLine->text() ); 559 data->setPassword( passLine->text() );
556 data->setSigFile( SignaturEdit->text() ); 560 data->setSigFile( SignaturEdit->text() );
557 561
558 QDialog::accept(); 562 QDialog::accept();
559} 563}
560 564
561/** 565/**
562 * NNTPconfig 566 * NNTPconfig
563 */ 567 */
564 568
565NNTPconfig::NNTPconfig( NNTPaccount *account, QWidget *parent, const char *name, bool modal, WFlags flags ) 569NNTPconfig::NNTPconfig( NNTPaccount *account, QWidget *parent, const char *name, bool modal, WFlags flags )
566 : NNTPconfigUI( parent, name, modal, flags ) 570 : NNTPconfigUI( parent, name, modal, flags )
567{ 571{
568 data = account; 572 data = account;
569 573
570 connect( loginBox, SIGNAL( toggled(bool) ), userLine, SLOT( setEnabled(bool) ) ); 574 connect( loginBox, SIGNAL( toggled(bool) ), userLine, SLOT( setEnabled(bool) ) );
571 connect( loginBox, SIGNAL( toggled(bool) ), passLine, SLOT( setEnabled(bool) ) ); 575 connect( loginBox, SIGNAL( toggled(bool) ), passLine, SLOT( setEnabled(bool) ) );
572 connect( GetNGButton, SIGNAL( clicked() ), this, SLOT( slotGetNG() ) ); 576 connect( GetNGButton, SIGNAL( clicked() ), this, SLOT( slotGetNG() ) );
573 connect( ShowSubcribed, SIGNAL( clicked() ), this, SLOT( slotShowSub() ) ); 577 connect( ShowSubcribed, SIGNAL( clicked() ), this, SLOT( slotShowSub() ) );
574 connect( FilterButton, SIGNAL( clicked() ), this, SLOT( slotShowFilter() ) ); 578 connect( FilterButton, SIGNAL( clicked() ), this, SLOT( slotShowFilter() ) );
575 fillValues(); 579 fillValues();
576 580
577 connect( sslBox, SIGNAL( toggled(bool) ), SLOT( slotSSL(bool) ) ); 581 connect( sslBox, SIGNAL( toggled(bool) ), SLOT( slotSSL(bool) ) );
578} 582}
579 583
580void NNTPconfig::slotShowSub() 584void NNTPconfig::slotShowSub()
581{ 585{
582 save(); 586 save();
583 data->save(); 587 data->save();
584 ListViewGroups->clear(); 588 ListViewGroups->clear();
585 for ( QStringList::Iterator it = subscribedGroups.begin(); it != subscribedGroups.end(); ++it ) { 589 for ( QStringList::Iterator it = subscribedGroups.begin(); it != subscribedGroups.end(); ++it ) {
586 QCheckListItem *item; 590 QCheckListItem *item;
587 item = new QCheckListItem( ListViewGroups, (*it), QCheckListItem::CheckBox ); 591 item = new QCheckListItem( ListViewGroups, (*it), QCheckListItem::CheckBox );
588 item->setOn( true ); 592 item->setOn( true );
589 } 593 }
590 topLevelWidget()->setCaption( i18n("%1 groups subscribed").arg( subscribedGroups.count())); 594 topLevelWidget()->setCaption( i18n("%1 groups subscribed").arg( subscribedGroups.count()));
591} 595}
592void NNTPconfig::slotShowFilter() 596void NNTPconfig::slotShowFilter()
593{ 597{
594 save(); 598 save();
595 data->save(); 599 data->save();
596 ListViewGroups->clear(); 600 ListViewGroups->clear();
597 int count = 0; 601 int count = 0;
598 for ( QStringList::Iterator it = allGroups.begin(); it != allGroups.end(); ++it ) { 602 for ( QStringList::Iterator it = allGroups.begin(); it != allGroups.end(); ++it ) {
599 QCheckListItem *item; 603 QCheckListItem *item;
600 if ( GroupFilter->text().isEmpty() || (*it).find( GroupFilter->text() ) >= 0 ) { 604 if ( GroupFilter->text().isEmpty() || (*it).find( GroupFilter->text() ) >= 0 ) {
601 item = new QCheckListItem( ListViewGroups, (*it), QCheckListItem::CheckBox ); 605 item = new QCheckListItem( ListViewGroups, (*it), QCheckListItem::CheckBox );
602 ++count; 606 ++count;
603 if ( subscribedGroups.contains( (*it) ) >= 1 ) { 607 if ( subscribedGroups.contains( (*it) ) >= 1 ) {
604 item->setOn( true ); 608 item->setOn( true );
605 } 609 }
606 } 610 }
607 } 611 }
608 topLevelWidget()->setCaption( i18n("Filter found %1 groups").arg( count)); 612 topLevelWidget()->setCaption( i18n("Filter found %1 groups").arg( count));
609} 613}
610void NNTPconfig::slotGetNG() { 614void NNTPconfig::slotGetNG() {
611 save(); 615 save();
612 data->save(); 616 data->save();
613 topLevelWidget()->setCaption( i18n("Fetching group list...")); 617 topLevelWidget()->setCaption( i18n("Fetching group list..."));
614 qApp->processEvents(); 618 qApp->processEvents();
615 NNTPwrapper* tmp = new NNTPwrapper( data ); 619 NNTPwrapper* tmp = new NNTPwrapper( data );
616 allGroups = tmp->listAllNewsgroups(); 620 allGroups = tmp->listAllNewsgroups();
617 topLevelWidget()->setCaption( i18n("Downloaded %1 group names").arg( allGroups.count())); 621 topLevelWidget()->setCaption( i18n("Downloaded %1 group names").arg( allGroups.count()));
618 622
619 ListViewGroups->clear(); 623 ListViewGroups->clear();
620 624
621 for ( QStringList::Iterator it = allGroups.begin(); it != allGroups.end(); ++it ) { 625 for ( QStringList::Iterator it = allGroups.begin(); it != allGroups.end(); ++it ) {
622 QCheckListItem *item; 626 QCheckListItem *item;
623 item = new QCheckListItem( ListViewGroups, (*it), QCheckListItem::CheckBox ); 627 item = new QCheckListItem( ListViewGroups, (*it), QCheckListItem::CheckBox );
624 if ( subscribedGroups.contains( (*it) ) >= 1 ) { 628 if ( subscribedGroups.contains( (*it) ) >= 1 ) {
625 item->setOn( true ); 629 item->setOn( true );
626 630
627 } 631 }
628 } 632 }
629 delete tmp; 633 delete tmp;
630} 634}
631 635
632void NNTPconfig::slotSSL( bool enabled ) 636void NNTPconfig::slotSSL( bool enabled )
633{ 637{
634 if ( enabled ) 638 if ( enabled )
635 { 639 {
636 portLine->setText( NNTP_SSL_PORT ); 640 portLine->setText( NNTP_SSL_PORT );
637 } 641 }
638 else 642 else
639 { 643 {
640 portLine->setText( NNTP_PORT ); 644 portLine->setText( NNTP_PORT );
641 } 645 }
642} 646}
643 647
644void NNTPconfig::fillValues() 648void NNTPconfig::fillValues()
645{ 649{
646 accountLine->setText( data->getAccountName() ); 650 accountLine->setText( data->getAccountName() );
647 serverLine->setText( data->getServer() ); 651 serverLine->setText( data->getServer() );
648 portLine->setText( data->getPort() ); 652 portLine->setText( data->getPort() );
649 sslBox->setChecked( data->getSSL() ); 653 sslBox->setChecked( data->getSSL() );
650 loginBox->setChecked( data->getLogin() ); 654 loginBox->setChecked( data->getLogin() );
651 userLine->setText( data->getUser() ); 655 userLine->setText( data->getUser() );
652 passLine->setText( data->getPassword() ); 656 passLine->setText( data->getPassword() );
653 subscribedGroups = data->getGroups(); 657 subscribedGroups = data->getGroups();
654 /* don't forget that - you will overwrite values if user clicks cancel! */ 658 /* don't forget that - you will overwrite values if user clicks cancel! */
655 for ( QStringList::Iterator it = subscribedGroups.begin(); it != subscribedGroups.end(); ++it ) { 659 for ( QStringList::Iterator it = subscribedGroups.begin(); it != subscribedGroups.end(); ++it ) {
656 QCheckListItem *item; 660 QCheckListItem *item;
657 item = new QCheckListItem( ListViewGroups, (*it), QCheckListItem::CheckBox ); 661 item = new QCheckListItem( ListViewGroups, (*it), QCheckListItem::CheckBox );
658 item->setOn( true ); 662 item->setOn( true );
659 } 663 }
660} 664}
661 665
662void NNTPconfig::save() 666void NNTPconfig::save()
663{ 667{
664 data->setAccountName( accountLine->text() ); 668 data->setAccountName( accountLine->text() );
665 data->setServer( serverLine->text() ); 669 data->setServer( serverLine->text() );
666 data->setPort( portLine->text() ); 670 data->setPort( portLine->text() );
667 data->setSSL( sslBox->isChecked() ); 671 data->setSSL( sslBox->isChecked() );
668 data->setLogin( loginBox->isChecked() ); 672 data->setLogin( loginBox->isChecked() );
669 data->setUser( userLine->text() ); 673 data->setUser( userLine->text() );
670 data->setPassword( passLine->text() ); 674 data->setPassword( passLine->text() );
671 675
672 QListViewItemIterator list_it( ListViewGroups ); 676 QListViewItemIterator list_it( ListViewGroups );
673 677
674 for ( ; list_it.current(); ++list_it ) { 678 for ( ; list_it.current(); ++list_it ) {
675 679
676 if ( ( (QCheckListItem*)list_it.current() )->isOn() ) { 680 if ( ( (QCheckListItem*)list_it.current() )->isOn() ) {
677 if ( subscribedGroups.contains( list_it.current()->text(0) ) < 1 ) 681 if ( subscribedGroups.contains( list_it.current()->text(0) ) < 1 )
678 subscribedGroups.append( list_it.current()->text(0) ); 682 subscribedGroups.append( list_it.current()->text(0) );
679 } else { 683 } else {
680 if ( subscribedGroups.contains( list_it.current()->text(0) ) >= 1 ) 684 if ( subscribedGroups.contains( list_it.current()->text(0) ) >= 1 )
681 subscribedGroups.remove( list_it.current()->text(0) ); 685 subscribedGroups.remove( list_it.current()->text(0) );
682 } 686 }
683 687
684 } 688 }
685 data->setGroups( subscribedGroups ); 689 data->setGroups( subscribedGroups );
686} 690}
687 691
688void NNTPconfig::accept() 692void NNTPconfig::accept()
689{ 693{
690 save(); 694 save();
691 QDialog::accept(); 695 QDialog::accept();
692} 696}
693 697
diff --git a/kmicromail/libetpan/tools/mailstream_socket.c b/kmicromail/libetpan/tools/mailstream_socket.c
index 04a6f48..fd2c758 100644
--- a/kmicromail/libetpan/tools/mailstream_socket.c
+++ b/kmicromail/libetpan/tools/mailstream_socket.c
@@ -1,246 +1,246 @@
1/* 1/*
2 * libEtPan! -- a mail stuff library 2 * libEtPan! -- a mail stuff library
3 * 3 *
4 * Copyright (C) 2001, 2002 - DINH Viet Hoa 4 * Copyright (C) 2001, 2002 - DINH Viet Hoa
5 * All rights reserved. 5 * All rights reserved.
6 * 6 *
7 * Redistribution and use in source and binary forms, with or without 7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions 8 * modification, are permitted provided that the following conditions
9 * are met: 9 * are met:
10 * 1. Redistributions of source code must retain the above copyright 10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer. 11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright 12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the 13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution. 14 * documentation and/or other materials provided with the distribution.
15 * 3. Neither the name of the libEtPan! project nor the names of its 15 * 3. Neither the name of the libEtPan! project nor the names of its
16 * contributors may be used to endorse or promote products derived 16 * contributors may be used to endorse or promote products derived
17 * from this software without specific prior written permission. 17 * from this software without specific prior written permission.
18 * 18 *
19 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 19 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 22 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29 * SUCH DAMAGE. 29 * SUCH DAMAGE.
30 */ 30 */
31 31
32/* 32/*
33 * $Id$ 33 * $Id$
34 */ 34 */
35 35
36#include "mailstream_socket.h" 36#include "mailstream_socket.h"
37#include <unistd.h> 37#include <unistd.h>
38#include <stdlib.h> 38#include <stdlib.h>
39#include <fcntl.h> 39#include <fcntl.h>
40 40
41/* 41/*
42 these 3 headers MUST be included before <sys/select.h> 42 these 3 headers MUST be included before <sys/select.h>
43 to insure compatibility with Mac OS X (this is true for 10.2) 43 to insure compatibility with Mac OS X (this is true for 10.2)
44*/ 44*/
45#include <sys/time.h> 45#include <sys/time.h>
46#include <sys/socket.h> 46#include <sys/socket.h>
47#include <sys/types.h> 47#include <sys/types.h>
48#include <unistd.h> 48#include <unistd.h>
49#include <sys/select.h> 49#include <sys/select.h>
50 50
51/* mailstream_low, socket */ 51/* mailstream_low, socket */
52 52
53static int mailstream_low_socket_close(mailstream_low * s); 53static int mailstream_low_socket_close(mailstream_low * s);
54static ssize_t mailstream_low_socket_read(mailstream_low * s, 54static ssize_t mailstream_low_socket_read(mailstream_low * s,
55 void * buf, size_t count); 55 void * buf, size_t count);
56static ssize_t mailstream_low_socket_write(mailstream_low * s, 56static ssize_t mailstream_low_socket_write(mailstream_low * s,
57 const void * buf, size_t count); 57 const void * buf, size_t count);
58static void mailstream_low_socket_free(mailstream_low * s); 58static void mailstream_low_socket_free(mailstream_low * s);
59static int mailstream_low_socket_get_fd(mailstream_low * s); 59static int mailstream_low_socket_get_fd(mailstream_low * s);
60 60
61static mailstream_low_driver local_mailstream_socket_driver = { 61static mailstream_low_driver local_mailstream_socket_driver = {
62 mailstream_read: mailstream_low_socket_read, 62 mailstream_read: mailstream_low_socket_read,
63 mailstream_write: mailstream_low_socket_write, 63 mailstream_write: mailstream_low_socket_write,
64 mailstream_close: mailstream_low_socket_close, 64 mailstream_close: mailstream_low_socket_close,
65 mailstream_free: mailstream_low_socket_free, 65 mailstream_free: mailstream_low_socket_free,
66 mailstream_get_fd: mailstream_low_socket_get_fd, 66 mailstream_get_fd: mailstream_low_socket_get_fd,
67}; 67};
68 68
69mailstream_low_driver * mailstream_socket_driver = 69mailstream_low_driver * mailstream_socket_driver =
70&local_mailstream_socket_driver; 70&local_mailstream_socket_driver;
71 71
72/* file descriptor must be given in (default) blocking-mode */ 72/* file descriptor must be given in (default) blocking-mode */
73 73
74static struct mailstream_socket_data * socket_data_new(int fd) 74static struct mailstream_socket_data * socket_data_new(int fd)
75{ 75{
76 struct mailstream_socket_data * socket_data; 76 struct mailstream_socket_data * socket_data;
77 77
78 socket_data = malloc(sizeof(* socket_data)); 78 socket_data = malloc(sizeof(* socket_data));
79 if (socket_data == NULL) 79 if (socket_data == NULL)
80 goto err; 80 goto err;
81 81
82 socket_data->fd = fd; 82 socket_data->fd = fd;
83 83
84 return socket_data; 84 return socket_data;
85 85
86 err: 86 err:
87 return NULL; 87 return NULL;
88} 88}
89 89
90static void socket_data_free(struct mailstream_socket_data * socket_data) 90static void socket_data_free(struct mailstream_socket_data * socket_data)
91{ 91{
92 free(socket_data); 92 free(socket_data);
93} 93}
94 94
95static void socket_data_close(struct mailstream_socket_data * socket_data) 95static void socket_data_close(struct mailstream_socket_data * socket_data)
96{ 96{
97 close(socket_data->fd); 97 close(socket_data->fd);
98 socket_data->fd = -1; 98 socket_data->fd = -1;
99} 99}
100 100
101mailstream_low * mailstream_low_socket_open(int fd) 101mailstream_low * mailstream_low_socket_open(int fd)
102{ 102{
103 mailstream_low * s; 103 mailstream_low * s;
104 struct mailstream_socket_data * socket_data; 104 struct mailstream_socket_data * socket_data;
105 105
106 socket_data = socket_data_new(fd); 106 socket_data = socket_data_new(fd);
107 if (socket_data == NULL) 107 if (socket_data == NULL)
108 goto err; 108 goto err;
109 109
110 s = mailstream_low_new(socket_data, mailstream_socket_driver); 110 s = mailstream_low_new(socket_data, mailstream_socket_driver);
111 if (s == NULL) 111 if (s == NULL)
112 goto free_socket_data; 112 goto free_socket_data;
113 113
114 return s; 114 return s;
115 115
116 free_socket_data: 116 free_socket_data:
117 socket_data_free(socket_data); 117 socket_data_free(socket_data);
118 err: 118 err:
119 return NULL; 119 return NULL;
120} 120}
121 121
122static int mailstream_low_socket_close(mailstream_low * s) 122static int mailstream_low_socket_close(mailstream_low * s)
123{ 123{
124 struct mailstream_socket_data * socket_data; 124 struct mailstream_socket_data * socket_data;
125 125
126 socket_data = (struct mailstream_socket_data *) s->data; 126 socket_data = (struct mailstream_socket_data *) s->data;
127 socket_data_close(socket_data); 127 socket_data_close(socket_data);
128 128
129 return 0; 129 return 0;
130} 130}
131 131
132static void mailstream_low_socket_free(mailstream_low * s) 132static void mailstream_low_socket_free(mailstream_low * s)
133{ 133{
134 struct mailstream_socket_data * socket_data; 134 struct mailstream_socket_data * socket_data;
135 135
136 socket_data = (struct mailstream_socket_data *) s->data; 136 socket_data = (struct mailstream_socket_data *) s->data;
137 socket_data_free(socket_data); 137 socket_data_free(socket_data);
138 s->data = NULL; 138 s->data = NULL;
139 139
140 free(s); 140 free(s);
141} 141}
142 142
143static int mailstream_low_socket_get_fd(mailstream_low * s) 143static int mailstream_low_socket_get_fd(mailstream_low * s)
144{ 144{
145 struct mailstream_socket_data * socket_data; 145 struct mailstream_socket_data * socket_data;
146 146
147 socket_data = (struct mailstream_socket_data *) s->data; 147 socket_data = (struct mailstream_socket_data *) s->data;
148 return socket_data->fd; 148 return socket_data->fd;
149} 149}
150 150
151 151
152static ssize_t mailstream_low_socket_read(mailstream_low * s, 152static ssize_t mailstream_low_socket_read(mailstream_low * s,
153 void * buf, size_t count) 153 void * buf, size_t count)
154{ 154{
155 struct mailstream_socket_data * socket_data; 155 struct mailstream_socket_data * socket_data;
156 156
157 socket_data = (struct mailstream_socket_data *) s->data; 157 socket_data = (struct mailstream_socket_data *) s->data;
158 158
159 /* timeout */ 159 /* timeout */
160 { 160 {
161 fd_set fds_read; 161 fd_set fds_read;
162 fd_set fds_excp; 162 fd_set fds_excp;
163 struct timeval timeout; 163 struct timeval timeout;
164 int r; 164 int r;
165 165
166 timeout = mailstream_network_delay; 166 timeout = mailstream_network_delay;
167 167
168 FD_ZERO(&fds_read); 168 FD_ZERO(&fds_read);
169 FD_SET(socket_data->fd, &fds_read); 169 FD_SET(socket_data->fd, &fds_read);
170 FD_ZERO(&fds_excp); 170 FD_ZERO(&fds_excp);
171 FD_SET(socket_data->fd, &fds_excp); 171 FD_SET(socket_data->fd, &fds_excp);
172 // LUTZ for safety I insert here a max val as well 172 // LUTZ for safety I insert here a max val as well
173 if ( timeout.tv_sec > DEFAULT_NETWORK_TIMEOUT ) 173 if ( timeout.tv_sec > DEFAULT_NETWORK_TIMEOUT )
174 timeout.tv_sec = DEFAULT_NETWORK_TIMEOUT; 174 timeout.tv_sec = DEFAULT_NETWORK_TIMEOUT;
175 r = select(socket_data->fd + 1, &fds_read, NULL, &fds_excp, &timeout); 175 r = select(socket_data->fd + 1, &fds_read, NULL, &fds_excp, &timeout);
176 if (r < 1 ) 176 if (r < 1 )
177 return -1; 177 return -1;
178 if (FD_ISSET(socket_data->fd, &fds_excp)) 178 if (FD_ISSET(socket_data->fd, &fds_excp))
179 return -1; 179 return -1;
180 if (!FD_ISSET(socket_data->fd, &fds_read)) 180 if (!FD_ISSET(socket_data->fd, &fds_read))
181 return 0; 181 return 0;
182 } 182 }
183 return recv(socket_data->fd,buf,count,MSG_NOSIGNAL); 183 return recv(socket_data->fd,buf,count,MSG_NOSIGNAL);
184 //return read(socket_data->fd, buf, count); 184 //return read(socket_data->fd, buf, count);
185} 185}
186#include <stdio.h> 186#include <stdio.h>
187static ssize_t mailstream_low_socket_write(mailstream_low * s, 187static ssize_t mailstream_low_socket_write(mailstream_low * s,
188 const void * buf, size_t count) 188 const void * buf, size_t count)
189{ 189{
190 struct mailstream_socket_data * socket_data; 190 struct mailstream_socket_data * socket_data;
191 191
192 socket_data = (struct mailstream_socket_data *) s->data; 192 socket_data = (struct mailstream_socket_data *) s->data;
193 /* timeout */ 193 /* timeout */
194 { 194 {
195 fd_set fds_write; 195 fd_set fds_write;
196 fd_set fds_excp; 196 fd_set fds_excp;
197 struct timeval timeout; 197 struct timeval timeout;
198 int r; 198 int r;
199 199
200 timeout = mailstream_network_delay; 200 timeout = mailstream_network_delay;
201 201
202 FD_ZERO(&fds_write); 202 FD_ZERO(&fds_write);
203 FD_SET(socket_data->fd, &fds_write); 203 FD_SET(socket_data->fd, &fds_write);
204 FD_ZERO(&fds_excp); 204 FD_ZERO(&fds_excp);
205 FD_SET(socket_data->fd, &fds_excp); 205 FD_SET(socket_data->fd, &fds_excp);
206 // LUTZ next line blocks sometimes 206 // LUTZ next line blocks sometimes
207 if ( timeout.tv_sec > DEFAULT_NETWORK_TIMEOUT ) 207 if ( timeout.tv_sec > DEFAULT_NETWORK_TIMEOUT )
208 timeout.tv_sec = DEFAULT_NETWORK_TIMEOUT; 208 timeout.tv_sec = DEFAULT_NETWORK_TIMEOUT;
209 fprintf(stderr,"fd %d to secs %d \n", socket_data->fd, timeout.tv_sec ); 209 //fprintf(stderr,"fd %d to secs %d \n", socket_data->fd, timeout.tv_sec );
210 r = select(socket_data->fd + 1, NULL, &fds_write, &fds_excp, &timeout); 210 r = select(socket_data->fd + 1, NULL, &fds_write, &fds_excp, &timeout);
211 if (r < 1) 211 if (r < 1)
212 return -1; 212 return -1;
213 if (FD_ISSET(socket_data->fd, &fds_excp)) 213 if (FD_ISSET(socket_data->fd, &fds_excp))
214 return -1; 214 return -1;
215 if (!FD_ISSET(socket_data->fd, &fds_write)) 215 if (!FD_ISSET(socket_data->fd, &fds_write))
216 return 0; 216 return 0;
217 } 217 }
218 218
219 return send(socket_data->fd,buf,count,MSG_NOSIGNAL); 219 return send(socket_data->fd,buf,count,MSG_NOSIGNAL);
220 //return write(socket_data->fd, buf, count); 220 //return write(socket_data->fd, buf, count);
221} 221}
222 222
223 223
224/* mailstream */ 224/* mailstream */
225 225
226mailstream * mailstream_socket_open(int fd) 226mailstream * mailstream_socket_open(int fd)
227{ 227{
228 mailstream_low * low; 228 mailstream_low * low;
229 mailstream * s; 229 mailstream * s;
230 230
231 low = mailstream_low_socket_open(fd); 231 low = mailstream_low_socket_open(fd);
232 if (low == NULL) 232 if (low == NULL)
233 goto err; 233 goto err;
234 234
235 s = mailstream_new(low, 8192); 235 s = mailstream_new(low, 8192);
236 if (s == NULL) 236 if (s == NULL)
237 goto free_low; 237 goto free_low;
238 238
239 return s; 239 return s;
240 240
241 free_low: 241 free_low:
242 mailstream_low_close(low); 242 mailstream_low_close(low);
243 err: 243 err:
244 return NULL; 244 return NULL;
245} 245}
246 246
diff --git a/kmicromail/libmailwrapper/smtpwrapper.cpp b/kmicromail/libmailwrapper/smtpwrapper.cpp
index 5096f67..872a460 100644
--- a/kmicromail/libmailwrapper/smtpwrapper.cpp
+++ b/kmicromail/libmailwrapper/smtpwrapper.cpp
@@ -1,470 +1,472 @@
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 // LR : not used in kde-pim 45 // LR : not used in kde-pim
46 //QCopEnvelope env( "QPE/Pim", "outgoingMails(int)" ); 46 //QCopEnvelope env( "QPE/Pim", "outgoingMails(int)" );
47 //env << queued; 47 //env << queued;
48#endif 48#endif
49} 49}
50 50
51QString SMTPwrapper::mailsmtpError( int errnum ) { 51QString SMTPwrapper::mailsmtpError( int errnum ) {
52 switch ( errnum ) { 52 switch ( errnum ) {
53 case MAILSMTP_NO_ERROR: 53 case MAILSMTP_NO_ERROR:
54 return i18n( "No error" ); 54 return i18n( "No error" );
55 case MAILSMTP_ERROR_UNEXPECTED_CODE: 55 case MAILSMTP_ERROR_UNEXPECTED_CODE:
56 return i18n( "Unexpected error code" ); 56 return i18n( "Unexpected error code" );
57 case MAILSMTP_ERROR_SERVICE_NOT_AVAILABLE: 57 case MAILSMTP_ERROR_SERVICE_NOT_AVAILABLE:
58 return i18n( "Service not available" ); 58 return i18n( "Service not available" );
59 case MAILSMTP_ERROR_STREAM: 59 case MAILSMTP_ERROR_STREAM:
60 return i18n( "Stream error" ); 60 return i18n( "Stream error" );
61 case MAILSMTP_ERROR_HOSTNAME: 61 case MAILSMTP_ERROR_HOSTNAME:
62 return i18n( "gethostname() failed" ); 62 return i18n( "gethostname() failed" );
63 case MAILSMTP_ERROR_NOT_IMPLEMENTED: 63 case MAILSMTP_ERROR_NOT_IMPLEMENTED:
64 return i18n( "Not implemented" ); 64 return i18n( "Not implemented" );
65 case MAILSMTP_ERROR_ACTION_NOT_TAKEN: 65 case MAILSMTP_ERROR_ACTION_NOT_TAKEN:
66 return i18n( "Error, action not taken" ); 66 return i18n( "Error, action not taken" );
67 case MAILSMTP_ERROR_EXCEED_STORAGE_ALLOCATION: 67 case MAILSMTP_ERROR_EXCEED_STORAGE_ALLOCATION:
68 return i18n( "Data exceeds storage allocation" ); 68 return i18n( "Data exceeds storage allocation" );
69 case MAILSMTP_ERROR_IN_PROCESSING: 69 case MAILSMTP_ERROR_IN_PROCESSING:
70 return i18n( "Error in processing" ); 70 return i18n( "Error in processing" );
71 case MAILSMTP_ERROR_STARTTLS_NOT_SUPPORTED: 71 case MAILSMTP_ERROR_STARTTLS_NOT_SUPPORTED:
72 return i18n( "Starttls not supported" ); 72 return i18n( "Starttls not supported" );
73 // case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE: 73 // case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE:
74 // return i18n( "Insufficient system storage" ); 74 // return i18n( "Insufficient system storage" );
75 case MAILSMTP_ERROR_MAILBOX_UNAVAILABLE: 75 case MAILSMTP_ERROR_MAILBOX_UNAVAILABLE:
76 return i18n( "Mailbox unavailable" ); 76 return i18n( "Mailbox unavailable" );
77 case MAILSMTP_ERROR_MAILBOX_NAME_NOT_ALLOWED: 77 case MAILSMTP_ERROR_MAILBOX_NAME_NOT_ALLOWED:
78 return i18n( "Mailbox name not allowed" ); 78 return i18n( "Mailbox name not allowed" );
79 case MAILSMTP_ERROR_BAD_SEQUENCE_OF_COMMAND: 79 case MAILSMTP_ERROR_BAD_SEQUENCE_OF_COMMAND:
80 return i18n( "Bad command sequence" ); 80 return i18n( "Bad command sequence" );
81 case MAILSMTP_ERROR_USER_NOT_LOCAL: 81 case MAILSMTP_ERROR_USER_NOT_LOCAL:
82 return i18n( "User not local" ); 82 return i18n( "User not local" );
83 case MAILSMTP_ERROR_TRANSACTION_FAILED: 83 case MAILSMTP_ERROR_TRANSACTION_FAILED:
84 return i18n( "Transaction failed" ); 84 return i18n( "Transaction failed" );
85 case MAILSMTP_ERROR_MEMORY: 85 case MAILSMTP_ERROR_MEMORY:
86 return i18n( "Memory error" ); 86 return i18n( "Memory error" );
87 case MAILSMTP_ERROR_CONNECTION_REFUSED: 87 case MAILSMTP_ERROR_CONNECTION_REFUSED:
88 return i18n( "Connection refused" ); 88 return i18n( "Connection refused" );
89 default: 89 default:
90 return i18n( "Unknown error code" ); 90 return i18n( "Unknown error code" );
91 } 91 }
92} 92}
93 93
94 94
95void SMTPwrapper::progress( size_t current, size_t maximum ) { 95void SMTPwrapper::progress( size_t current, size_t maximum ) {
96 if (SMTPwrapper::sendProgress) { 96 if (SMTPwrapper::sendProgress) {
97 SMTPwrapper::sendProgress->setSingleMail(current, maximum ); 97 SMTPwrapper::sendProgress->setSingleMail(current, maximum );
98 qApp->processEvents(); 98 qApp->processEvents();
99 } 99 }
100} 100}
101 101
102void SMTPwrapper::storeMail(const char*mail, size_t length, const QString&box) { 102void SMTPwrapper::storeMail(const char*mail, size_t length, const QString&box) {
103 if (!mail) 103 if (!mail)
104 return; 104 return;
105 QString localfolders = AbstractMail::defaultLocalfolder(); 105 QString localfolders = AbstractMail::defaultLocalfolder();
106 AbstractMail*wrap = AbstractMail::getWrapper(localfolders); 106 AbstractMail*wrap = AbstractMail::getWrapper(localfolders);
107 wrap->createMbox(box); 107 wrap->createMbox(box);
108 wrap->storeMessage(mail,length,box); 108 wrap->storeMessage(mail,length,box);
109 delete wrap; 109 delete wrap;
110} 110}
111 111
112bool SMTPwrapper::smtpSend( mailmime *mail,bool later) { 112bool SMTPwrapper::smtpSend( mailmime *mail,bool later) {
113 clist *rcpts = 0; 113 clist *rcpts = 0;
114 char *from, *data; 114 char *from, *data;
115 size_t size; 115 size_t size;
116 116
117 from = data = 0; 117 from = data = 0;
118 118
119 mailmessage * msg = 0; 119 mailmessage * msg = 0;
120 msg = mime_message_init(mail); 120 msg = mime_message_init(mail);
121 mime_message_set_tmpdir(msg,getenv( "HOME" )); 121 mime_message_set_tmpdir(msg,getenv( "HOME" ));
122 int r = mailmessage_fetch(msg,&data,&size); 122 int r = mailmessage_fetch(msg,&data,&size);
123 mime_message_detach_mime(msg); 123 mime_message_detach_mime(msg);
124 mailmessage_free(msg); 124 mailmessage_free(msg);
125 if (r != MAIL_NO_ERROR || !data) { 125 if (r != MAIL_NO_ERROR || !data) {
126 if (data) 126 if (data)
127 free(data); 127 free(data);
128 qDebug("Error fetching mime... "); 128 qDebug("Error fetching mime... ");
129 return false; 129 return false;
130 } 130 }
131 msg = 0; 131 msg = 0;
132 if (later) { 132 if (later) {
133 storeMail(data,size,"Outgoing"); 133 storeMail(data,size,"Outgoing");
134 if (data) 134 if (data)
135 free( data ); 135 free( data );
136 KConfig cfg( locateLocal("config", "kopiemailrc" ) ); 136 KConfig cfg( locateLocal("config", "kopiemailrc" ) );
137 cfg.setGroup( "Status" ); 137 cfg.setGroup( "Status" );
138 cfg.writeEntry( "outgoing", ++m_queuedMail ); 138 cfg.writeEntry( "outgoing", ++m_queuedMail );
139 emit queuedMails( m_queuedMail ); 139 emit queuedMails( m_queuedMail );
140 return true; 140 return true;
141 } 141 }
142 from = getFrom( mail ); 142 from = getFrom( mail );
143 rcpts = createRcptList( mail->mm_data.mm_message.mm_fields ); 143 rcpts = createRcptList( mail->mm_data.mm_message.mm_fields );
144 bool result = smtpSend(from,rcpts,data,size); 144 bool result = smtpSend(from,rcpts,data,size);
145 if (data) { 145 if (data) {
146 free(data); 146 free(data);
147 } 147 }
148 if (from) { 148 if (from) {
149 free(from); 149 free(from);
150 } 150 }
151 if (rcpts) 151 if (rcpts)
152 smtp_address_list_free( rcpts ); 152 smtp_address_list_free( rcpts );
153 return result; 153 return result;
154} 154}
155 155
156void SMTPwrapper::storeFailedMail(const char*data,unsigned int size, const char*failuremessage) 156void SMTPwrapper::storeFailedMail(const char*data,unsigned int size, const char*failuremessage)
157{ 157{
158 if (data) { 158 if (data) {
159 storeMail(data,size,"Sendfailed"); 159 storeMail(data,size,"Sendfailed");
160 } 160 }
161 if (failuremessage) { 161 if (failuremessage) {
162 QMessageBox::critical(0,i18n("Error sending mail"), 162 QMessageBox::critical(0,i18n("Error sending mail"),
163 failuremessage); 163 failuremessage);
164 } 164 }
165} 165}
166 166
167int SMTPwrapper::start_smtp_tls() 167int SMTPwrapper::start_smtp_tls()
168{ 168{
169 if (!m_smtp) { 169 if (!m_smtp) {
170 return MAILSMTP_ERROR_IN_PROCESSING; 170 return MAILSMTP_ERROR_IN_PROCESSING;
171 } 171 }
172 int err = mailesmtp_starttls(m_smtp); 172 int err = mailesmtp_starttls(m_smtp);
173 if (err != MAILSMTP_NO_ERROR) return err; 173 if (err != MAILSMTP_NO_ERROR) return err;
174 mailstream_low * low; 174 mailstream_low * low;
175 mailstream_low * new_low; 175 mailstream_low * new_low;
176 low = mailstream_get_low(m_smtp->stream); 176 low = mailstream_get_low(m_smtp->stream);
177 if (!low) { 177 if (!low) {
178 return MAILSMTP_ERROR_IN_PROCESSING; 178 return MAILSMTP_ERROR_IN_PROCESSING;
179 } 179 }
180 int fd = mailstream_low_get_fd(low); 180 int fd = mailstream_low_get_fd(low);
181 if (fd > -1 && (new_low = mailstream_low_ssl_open(fd))!=0) { 181 if (fd > -1 && (new_low = mailstream_low_ssl_open(fd))!=0) {
182 mailstream_low_free(low); 182 mailstream_low_free(low);
183 mailstream_set_low(m_smtp->stream, new_low); 183 mailstream_set_low(m_smtp->stream, new_low);
184 } else { 184 } else {
185 return MAILSMTP_ERROR_IN_PROCESSING; 185 return MAILSMTP_ERROR_IN_PROCESSING;
186 } 186 }
187 return err; 187 return err;
188} 188}
189 189
190void SMTPwrapper::connect_server() 190void SMTPwrapper::connect_server()
191{ 191{
192 QString server, user, pass; 192 QString server, user, pass;
193 bool ssl; 193 bool ssl;
194 uint16_t port; 194 uint16_t port;
195 ssl = false; 195 ssl = false;
196 bool try_tls = true; 196 bool try_tls = false;
197 bool force_tls=false; 197 bool force_tls=false;
198 QString failuretext = ""; 198 QString failuretext = "";
199 199
200 if (m_smtp || !m_SmtpAccount) { 200 if (m_smtp || !m_SmtpAccount) {
201 return; 201 return;
202 } 202 }
203 server = m_SmtpAccount->getServer(); 203 server = m_SmtpAccount->getServer();
204 if ( m_SmtpAccount->ConnectionType() == 2 ) { 204 if ( m_SmtpAccount->ConnectionType() == 3 ) {
205 ssl = true; 205 ssl = true;
206 try_tls = false; 206 try_tls = false;
207 } else if (m_SmtpAccount->ConnectionType() == 1) { 207 } else if (m_SmtpAccount->ConnectionType() == 2) {
208 force_tls = true; 208 force_tls = true;
209 } else if (m_SmtpAccount->ConnectionType() == 1) {
210 try_tls = true;
209 } 211 }
210 int result = 1; 212 int result = 1;
211 port = m_SmtpAccount->getPort().toUInt(); 213 port = m_SmtpAccount->getPort().toUInt();
212 214
213 m_smtp = mailsmtp_new( 20, &progress ); 215 m_smtp = mailsmtp_new( 20, &progress );
214 if ( m_smtp == NULL ) { 216 if ( m_smtp == NULL ) {
215 /* no failure message cause this happens when problems with memory - than we 217 /* no failure message cause this happens when problems with memory - than we
216 we can not display any messagebox */ 218 we can not display any messagebox */
217 return; 219 return;
218 } 220 }
219 221
220 int err = MAILSMTP_NO_ERROR; 222 int err = MAILSMTP_NO_ERROR;
221 ; // odebug << "Servername " << server << " at port " << port << "" << oendl; 223 ; // odebug << "Servername " << server << " at port " << port << "" << oendl;
222 if ( ssl ) { 224 if ( ssl ) {
223 qDebug("smtp: ssl_connect "); 225 qDebug("smtp: ssl_connect ");
224 err = mailsmtp_ssl_connect( m_smtp, server.latin1(), port ); 226 err = mailsmtp_ssl_connect( m_smtp, server.latin1(), port );
225 } else { 227 } else {
226 ; // odebug << "No SSL session" << oendl; 228 ; // odebug << "No SSL session" << oendl;
227 err = mailsmtp_socket_connect( m_smtp, server.latin1(), port ); 229 err = mailsmtp_socket_connect( m_smtp, server.latin1(), port );
228 } 230 }
229 if ( err != MAILSMTP_NO_ERROR ) { 231 if ( err != MAILSMTP_NO_ERROR ) {
230 qDebug("Error init SMTP connection" ); 232 qDebug("Error init SMTP connection" );
231 failuretext = i18n("Error init SMTP connection:\n%1").arg(mailsmtpError(err)); 233 failuretext = i18n("Error init SMTP connection:\n%1").arg(mailsmtpError(err));
232 result = 0; 234 result = 0;
233 } 235 }
234 236
235 qDebug("SMTP connection inited "); 237 qDebug("SMTP connection inited ");
236 /* switch to tls after init 'cause there it will send the ehlo */ 238 /* switch to tls after init 'cause there it will send the ehlo */
237 if (result) { 239 if (result) {
238 err = mailsmtp_init( m_smtp ); 240 err = mailsmtp_init( m_smtp );
239 if (err != MAILSMTP_NO_ERROR) { 241 if (err != MAILSMTP_NO_ERROR) {
240 result = 0; 242 result = 0;
241 qDebug("Error init SMTP connection "); 243 qDebug("Error init SMTP connection ");
242 failuretext = i18n("Error init SMTP connection:\n%1").arg(mailsmtpError(err)); 244 failuretext = i18n("Error init SMTP connection:\n%1").arg(mailsmtpError(err));
243 } 245 }
244 } 246 }
245 if (try_tls) { 247 if (try_tls) {
246 qDebug("Smpt: Try tls "); 248 qDebug("Smpt: Try tls ");
247 err = start_smtp_tls(); 249 err = start_smtp_tls();
248 if (err != MAILSMTP_NO_ERROR) { 250 if (err != MAILSMTP_NO_ERROR) {
249 try_tls = false; 251 try_tls = false;
250 qDebug("no tls "); 252 qDebug("no tls ");
251 } else { 253 } else {
252 err = mailesmtp_ehlo(m_smtp); 254 err = mailesmtp_ehlo(m_smtp);
253 } 255 }
254 } 256 }
255 //qDebug("mailesmtp_ehlo %d ",err ); 257 //qDebug("mailesmtp_ehlo %d ",err );
256 if (!try_tls && force_tls) { 258 if (!try_tls && force_tls) {
257 result = 0; 259 result = 0;
258 failuretext = i18n("Error init SMTP tls:%1").arg(mailsmtpError(err)); 260 failuretext = i18n("Error init SMTP tls:%1").arg(mailsmtpError(err));
259 } 261 }
260 262
261 if (result==1 && m_SmtpAccount->getLogin() ) { 263 if (result==1 && m_SmtpAccount->getLogin() ) {
262 ; // odebug << "smtp with auth" << oendl; 264 ; // odebug << "smtp with auth" << oendl;
263 if ( m_SmtpAccount->getUser().isEmpty() || m_SmtpAccount->getPassword().isEmpty() ) { 265 if ( m_SmtpAccount->getUser().isEmpty() || m_SmtpAccount->getPassword().isEmpty() ) {
264 // get'em 266 // get'em
265 LoginDialog login( m_SmtpAccount->getUser(), 267 LoginDialog login( m_SmtpAccount->getUser(),
266 m_SmtpAccount->getPassword(), NULL, 0, true ); 268 m_SmtpAccount->getPassword(), NULL, 0, true );
267 login.show(); 269 login.show();
268 if ( QDialog::Accepted == login.exec() ) { 270 if ( QDialog::Accepted == login.exec() ) {
269 // ok 271 // ok
270 user = login.getUser(); 272 user = login.getUser();
271 pass = login.getPassword(); 273 pass = login.getPassword();
272 } else { 274 } else {
273 result = 0; 275 result = 0;
274 failuretext=i18n("Login aborted - \nstoring mail to localfolder"); 276 failuretext=i18n("Login aborted - \nstoring mail to localfolder");
275 } 277 }
276 } else { 278 } else {
277 user = m_SmtpAccount->getUser(); 279 user = m_SmtpAccount->getUser();
278 pass = m_SmtpAccount->getPassword(); 280 pass = m_SmtpAccount->getPassword();
279 } 281 }
280 ; // odebug << "session->auth: " << m_smtp->auth << "" << oendl; 282 ; // odebug << "session->auth: " << m_smtp->auth << "" << oendl;
281 if (result) { 283 if (result) {
282 err = mailsmtp_auth( m_smtp, (char*)user.latin1(), (char*)pass.latin1() ); 284 err = mailsmtp_auth( m_smtp, (char*)user.latin1(), (char*)pass.latin1() );
283 if ( err == MAILSMTP_NO_ERROR ) { 285 if ( err == MAILSMTP_NO_ERROR ) {
284 qDebug("Smtp authentification ok "); 286 qDebug("Smtp authentification ok ");
285 } else { 287 } else {
286 failuretext = i18n("Authentification failed"); 288 failuretext = i18n("Authentification failed");
287 result = 0; 289 result = 0;
288 } 290 }
289 } 291 }
290 } 292 }
291} 293}
292 294
293void SMTPwrapper::disc_server() 295void SMTPwrapper::disc_server()
294{ 296{
295 if (m_smtp) { 297 if (m_smtp) {
296 mailsmtp_quit( m_smtp ); 298 mailsmtp_quit( m_smtp );
297 mailsmtp_free( m_smtp ); 299 mailsmtp_free( m_smtp );
298 m_smtp = 0; 300 m_smtp = 0;
299 } 301 }
300} 302}
301 303
302int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size ) 304int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size )
303{ 305{
304 int err,result; 306 int err,result;
305 QString failuretext = ""; 307 QString failuretext = "";
306 308
307 connect_server(); 309 connect_server();
308 310
309 result = 1; 311 result = 1;
310 if (m_smtp) { 312 if (m_smtp) {
311 err = mailsmtp_send( m_smtp, from, rcpts, data, size ); 313 err = mailsmtp_send( m_smtp, from, rcpts, data, size );
312 if ( err != MAILSMTP_NO_ERROR ) { 314 if ( err != MAILSMTP_NO_ERROR ) {
313 qDebug("Error sending mail"); 315 qDebug("Error sending mail");
314 failuretext=i18n("Error sending mail:\n%1").arg(mailsmtpError(err)); 316 failuretext=i18n("Error sending mail:\n%1").arg(mailsmtpError(err));
315 result = 0; 317 result = 0;
316 } 318 }
317 } else { 319 } else {
318 result = 0; 320 result = 0;
319 } 321 }
320 322
321 if (!result) { 323 if (!result) {
322 storeFailedMail(data,size,failuretext); 324 storeFailedMail(data,size,failuretext);
323 } else { 325 } else {
324 ; // odebug << "Mail sent." << oendl; 326 ; // odebug << "Mail sent." << oendl;
325 storeMail(data,size,"Sent"); 327 storeMail(data,size,"Sent");
326 } 328 }
327 return result; 329 return result;
328} 330}
329 331
330bool SMTPwrapper::sendMail(const Opie::Core::OSmartPointer<Mail>&mail,bool later ) 332bool SMTPwrapper::sendMail(const Opie::Core::OSmartPointer<Mail>&mail,bool later )
331{ 333{
332 mailmime * mimeMail; 334 mailmime * mimeMail;
333 bool result = true; 335 bool result = true;
334 mimeMail = createMimeMail(mail ); 336 mimeMail = createMimeMail(mail );
335 if ( mimeMail == 0 ) { 337 if ( mimeMail == 0 ) {
336 qDebug("SMTP wrapper:Error creating mail! "); 338 qDebug("SMTP wrapper:Error creating mail! ");
337 return false; 339 return false;
338 } else { 340 } else {
339 sendProgress = new progressMailSend(); 341 sendProgress = new progressMailSend();
340 sendProgress->show(); 342 sendProgress->show();
341 sendProgress->setMaxMails(1); 343 sendProgress->setMaxMails(1);
342 result = smtpSend( mimeMail,later); 344 result = smtpSend( mimeMail,later);
343 ; // odebug << "Clean up done" << oendl; 345 ; // odebug << "Clean up done" << oendl;
344 sendProgress->hide(); 346 sendProgress->hide();
345 delete sendProgress; 347 delete sendProgress;
346 sendProgress = 0; 348 sendProgress = 0;
347 mailmime_free( mimeMail ); 349 mailmime_free( mimeMail );
348 } 350 }
349 return result; 351 return result;
350} 352}
351 353
352int SMTPwrapper::sendQueuedMail(AbstractMail*wrap,const RecMailP&which) { 354int SMTPwrapper::sendQueuedMail(AbstractMail*wrap,const RecMailP&which) {
353 size_t curTok = 0; 355 size_t curTok = 0;
354 mailimf_fields *fields = 0; 356 mailimf_fields *fields = 0;
355 mailimf_field*ffrom = 0; 357 mailimf_field*ffrom = 0;
356 clist *rcpts = 0; 358 clist *rcpts = 0;
357 char*from = 0; 359 char*from = 0;
358 int res = 0; 360 int res = 0;
359 361
360 encodedString * data = wrap->fetchRawBody(which); 362 encodedString * data = wrap->fetchRawBody(which);
361 if (!data) 363 if (!data)
362 return 0; 364 return 0;
363 int err = mailimf_fields_parse( data->Content(), data->Length(), &curTok, &fields ); 365 int err = mailimf_fields_parse( data->Content(), data->Length(), &curTok, &fields );
364 if (err != MAILIMF_NO_ERROR) { 366 if (err != MAILIMF_NO_ERROR) {
365 delete data; 367 delete data;
366 delete wrap; 368 delete wrap;
367 return 0; 369 return 0;
368 } 370 }
369 371
370 rcpts = createRcptList( fields ); 372 rcpts = createRcptList( fields );
371 ffrom = getField(fields, MAILIMF_FIELD_FROM ); 373 ffrom = getField(fields, MAILIMF_FIELD_FROM );
372 from = getFrom(ffrom); 374 from = getFrom(ffrom);
373 375
374 if (rcpts && from) { 376 if (rcpts && from) {
375 res = smtpSend(from,rcpts,data->Content(),data->Length()); 377 res = smtpSend(from,rcpts,data->Content(),data->Length());
376 } 378 }
377 if (fields) { 379 if (fields) {
378 mailimf_fields_free(fields); 380 mailimf_fields_free(fields);
379 fields = 0; 381 fields = 0;
380 } 382 }
381 if (data) { 383 if (data) {
382 delete data; 384 delete data;
383 } 385 }
384 if (from) { 386 if (from) {
385 free(from); 387 free(from);
386 } 388 }
387 if (rcpts) { 389 if (rcpts) {
388 smtp_address_list_free( rcpts ); 390 smtp_address_list_free( rcpts );
389 } 391 }
390 return res; 392 return res;
391} 393}
392 394
393/* this is a special fun */ 395/* this is a special fun */
394bool SMTPwrapper::flushOutbox() { 396bool SMTPwrapper::flushOutbox() {
395 bool returnValue = true; 397 bool returnValue = true;
396 398
397 ; // odebug << "Sending the queue" << oendl; 399 ; // odebug << "Sending the queue" << oendl;
398 if (!m_SmtpAccount) { 400 if (!m_SmtpAccount) {
399 ; // odebug << "No smtp account given" << oendl; 401 ; // odebug << "No smtp account given" << oendl;
400 return false; 402 return false;
401 } 403 }
402 404
403 bool reset_user_value = false; 405 bool reset_user_value = false;
404 QString localfolders = AbstractMail::defaultLocalfolder(); 406 QString localfolders = AbstractMail::defaultLocalfolder();
405 AbstractMail*wrap = AbstractMail::getWrapper(localfolders); 407 AbstractMail*wrap = AbstractMail::getWrapper(localfolders);
406 if (!wrap) { 408 if (!wrap) {
407 ; // odebug << "memory error" << oendl; 409 ; // odebug << "memory error" << oendl;
408 return false; 410 return false;
409 } 411 }
410 QString oldPw, oldUser; 412 QString oldPw, oldUser;
411 QValueList<RecMailP> mailsToSend; 413 QValueList<RecMailP> mailsToSend;
412 QValueList<RecMailP> mailsToRemove; 414 QValueList<RecMailP> mailsToRemove;
413 QString mbox("Outgoing"); 415 QString mbox("Outgoing");
414 wrap->listMessages(mbox,mailsToSend); 416 wrap->listMessages(mbox,mailsToSend);
415 if (mailsToSend.count()==0) { 417 if (mailsToSend.count()==0) {
416 delete wrap; 418 delete wrap;
417 ; // odebug << "No mails to send" << oendl; 419 ; // odebug << "No mails to send" << oendl;
418 return false; 420 return false;
419 } 421 }
420 422
421 oldPw = m_SmtpAccount->getPassword(); 423 oldPw = m_SmtpAccount->getPassword();
422 oldUser = m_SmtpAccount->getUser(); 424 oldUser = m_SmtpAccount->getUser();
423 if (m_SmtpAccount->getLogin() && (m_SmtpAccount->getUser().isEmpty() || m_SmtpAccount->getPassword().isEmpty()) ) { 425 if (m_SmtpAccount->getLogin() && (m_SmtpAccount->getUser().isEmpty() || m_SmtpAccount->getPassword().isEmpty()) ) {
424 // get'em 426 // get'em
425 QString user,pass; 427 QString user,pass;
426 LoginDialog login( m_SmtpAccount->getUser(), m_SmtpAccount->getPassword(), NULL, 0, true ); 428 LoginDialog login( m_SmtpAccount->getUser(), m_SmtpAccount->getPassword(), NULL, 0, true );
427 login.show(); 429 login.show();
428 if ( QDialog::Accepted == login.exec() ) { 430 if ( QDialog::Accepted == login.exec() ) {
429 // ok 431 // ok
430 user = login.getUser().latin1(); 432 user = login.getUser().latin1();
431 pass = login.getPassword().latin1(); 433 pass = login.getPassword().latin1();
432 reset_user_value = true; 434 reset_user_value = true;
433 m_SmtpAccount->setUser(user); 435 m_SmtpAccount->setUser(user);
434 m_SmtpAccount->setPassword(pass); 436 m_SmtpAccount->setPassword(pass);
435 } else { 437 } else {
436 return true; 438 return true;
437 } 439 }
438 } 440 }
439 441
440 442
441 sendProgress = new progressMailSend(); 443 sendProgress = new progressMailSend();
442 sendProgress->show(); 444 sendProgress->show();
443 sendProgress->setMaxMails(mailsToSend.count()); 445 sendProgress->setMaxMails(mailsToSend.count());
444 446
445 while (returnValue && mailsToSend.count()>0) { 447 while (returnValue && mailsToSend.count()>0) {
446 if (sendQueuedMail(wrap, (*mailsToSend.begin()))==0) { 448 if (sendQueuedMail(wrap, (*mailsToSend.begin()))==0) {
447 QMessageBox::critical(0,i18n("Error sending mail"), 449 QMessageBox::critical(0,i18n("Error sending mail"),
448 i18n("Error sending queued mail.\nBreaking.")); 450 i18n("Error sending queued mail.\nBreaking."));
449 returnValue = false; 451 returnValue = false;
450 } 452 }
451 mailsToRemove.append((*mailsToSend.begin())); 453 mailsToRemove.append((*mailsToSend.begin()));
452 mailsToSend.remove(mailsToSend.begin()); 454 mailsToSend.remove(mailsToSend.begin());
453 sendProgress->setCurrentMails(mailsToRemove.count()); 455 sendProgress->setCurrentMails(mailsToRemove.count());
454 } 456 }
455 if (reset_user_value) { 457 if (reset_user_value) {
456 m_SmtpAccount->setUser(oldUser); 458 m_SmtpAccount->setUser(oldUser);
457 m_SmtpAccount->setPassword(oldPw); 459 m_SmtpAccount->setPassword(oldPw);
458 } 460 }
459 KConfig cfg( locateLocal("config", "kopiemailrc" ) ); 461 KConfig cfg( locateLocal("config", "kopiemailrc" ) );
460 cfg.setGroup( "Status" ); 462 cfg.setGroup( "Status" );
461 m_queuedMail = mailsToSend.count(); 463 m_queuedMail = mailsToSend.count();
462 cfg.writeEntry( "outgoing", m_queuedMail ); 464 cfg.writeEntry( "outgoing", m_queuedMail );
463 emit queuedMails( m_queuedMail ); 465 emit queuedMails( m_queuedMail );
464 sendProgress->hide(); 466 sendProgress->hide();
465 delete sendProgress; 467 delete sendProgress;
466 sendProgress = 0; 468 sendProgress = 0;
467 wrap->deleteMails(mbox,mailsToRemove); 469 wrap->deleteMails(mbox,mailsToRemove);
468 delete wrap; 470 delete wrap;
469 return returnValue; 471 return returnValue;
470} 472}