summaryrefslogtreecommitdiffabout
Unidiff
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,215 +1,220 @@
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.
diff --git a/kmicromail/editaccounts.cpp b/kmicromail/editaccounts.cpp
index f1075c0..49049f6 100644
--- a/kmicromail/editaccounts.cpp
+++ b/kmicromail/editaccounts.cpp
@@ -141,553 +141,557 @@ void EditAccounts::slotNewAccount( const QString &type )
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
@@ -17,230 +17,230 @@
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
@@ -4,397 +4,399 @@
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;