summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-02-12 22:58:10 (UTC)
committer zautrix <zautrix>2005-02-12 22:58:10 (UTC)
commit00ec9899a4727a4c9100d320935dde7da4803801 (patch) (unidiff)
tree22c5100623497bc135d13e65a1da993ed5999d4b
parentd45d293d045a8d0f68e09ff9414e2dd6d18dd651 (diff)
downloadkdepimpi-00ec9899a4727a4c9100d320935dde7da4803801.zip
kdepimpi-00ec9899a4727a4c9100d320935dde7da4803801.tar.gz
kdepimpi-00ec9899a4727a4c9100d320935dde7da4803801.tar.bz2
imap login fix
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt4
-rw-r--r--kmicromail/libmailwrapper/imapwrapper.cpp17
-rw-r--r--kmicromail/libmailwrapper/imapwrapper.h2
3 files changed, 17 insertions, 6 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 77f5829..1a3f827 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,199 +1,203 @@
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.7 ************ 3********** VERSION 2.0.7 ************
4 4
5Added global application font settings 5Added global application font settings
6(for all KDE-Pim/Pi apps) to the general settings. 6(for all KDE-Pim/Pi apps) to the general settings.
7 7
8Fixed a problem in OM/Pi when trying to login to some IMAP servers
9(like the IMAP server of Apple: mail.mac.com )
10
11
8********** VERSION 2.0.6 ************ 12********** VERSION 2.0.6 ************
9 13
10Some bugfixes in the pi-sync mode. 14Some bugfixes in the pi-sync mode.
11Added German translation for pi-sync mode. 15Added German translation for pi-sync mode.
12 16
13KO/Pi: 17KO/Pi:
14Made the todolist using alternate background. 18Made the todolist using alternate background.
15 19
16Other minor fixes in KO/Pi. 20Other minor fixes in KO/Pi.
17 21
18 22
19********** VERSION 2.0.5 ************ 23********** VERSION 2.0.5 ************
20 24
21Bugfixes in KO/Pi. 25Bugfixes in KO/Pi.
22 26
23********** VERSION 2.0.4 ************ 27********** VERSION 2.0.4 ************
24 28
25KO/Pi: 29KO/Pi:
26Fixed problem loading translations for summary/location edit boxes in event/todo editor. 30Fixed problem loading translations for summary/location edit boxes in event/todo editor.
27 31
28Added a general "select week number" to the toolbar. 32Added a general "select week number" to the toolbar.
29 33
30Fixed some small problem of the new features introduced in version 2.0.3. 34Fixed some small problem of the new features introduced in version 2.0.3.
31 35
32Made it possible to specify one specific category as category color, 36Made it possible to specify one specific category as category color,
33if more than one categories are selected. 37if more than one categories are selected.
34 38
35Fixed a bug in saving colors for categories with non-ascii characters. 39Fixed a bug in saving colors for categories with non-ascii characters.
36(Like, e.g. German Umlauts). 40(Like, e.g. German Umlauts).
37Propably you have to set your colors again for those categories. 41Propably you have to set your colors again for those categories.
38 42
39 43
40********** VERSION 2.0.3 ************ 44********** VERSION 2.0.3 ************
41 45
42KO/Pi: 46KO/Pi:
43Added feature for changing alarm settings for many items at once: 47Added feature for changing alarm settings for many items at once:
44Open list view (or search dialog), select the desired items and choose in 48Open list view (or search dialog), select the desired items and choose in
45the popup menu: Set alarm for selected... 49the popup menu: Set alarm for selected...
46 50
47Added to the event/todo viewer the option to send an email to 51Added to the event/todo viewer the option to send an email to
48all attendees or all selected (with RSVP) attendees. 52all attendees or all selected (with RSVP) attendees.
49 53
50Made the week-month mode changing in month view faster. 54Made the week-month mode changing in month view faster.
51 55
52Made month view better useable with keyboard. 56Made month view better useable with keyboard.
53Now TAB key jumps to next cell with an event/todo. 57Now TAB key jumps to next cell with an event/todo.
54Scroll in cell with coursor keys, scroll in time (next week) with 58Scroll in cell with coursor keys, scroll in time (next week) with
55Shift/Control + coursorkeys. 59Shift/Control + coursorkeys.
56 60
57Fixed bug that the todo view flat mode was reset after first view update. 61Fixed bug that the todo view flat mode was reset after first view update.
58 62
59If a todo is displayed closed in the todo view, 63If a todo is displayed closed in the todo view,
60it is now displayed in overdue/due today color depending on the subtodos overdue/due today properties. 64it is now displayed in overdue/due today color depending on the subtodos overdue/due today properties.
61 65
62Added info about the numbers of years to the caption (title) information about a birthday event. 66Added info about the numbers of years to the caption (title) information about a birthday event.
63 67
64Made completion date in todo editor editable. 68Made completion date in todo editor editable.
65 69
66Added possibility to save/load templates for journals. 70Added possibility to save/load templates for journals.
67(Which is just a simple "save text to file" or "insert text from file". 71(Which is just a simple "save text to file" or "insert text from file".
68 72
69********** VERSION 2.0.2 ************ 73********** VERSION 2.0.2 ************
70 74
71KO/Pi: 75KO/Pi:
72Fixed the layout problem of the day label buttons 76Fixed the layout problem of the day label buttons
73of the agenda view introduced in version 2.0.1. 77of the agenda view introduced in version 2.0.1.
74 78
75Added WhatsThis support for the todo view and the list view. 79Added WhatsThis support for the todo view and the list view.
76 80
77Added a quite useful feature to the montview. 81Added a quite useful feature to the montview.
78Just click on the week numbers on the left. 82Just click on the week numbers on the left.
79And in the top right corner of month view/agenda view 83And in the top right corner of month view/agenda view
80there is now a "week number quick selector". 84there is now a "week number quick selector".
81(Click on the black triangle). 85(Click on the black triangle).
82 86
83Made the quite difficult timezone change in KO/Pi easy. 87Made the quite difficult timezone change in KO/Pi easy.
84 88
85OM/Pi: 89OM/Pi:
86Fixed too small icons on desktop. 90Fixed too small icons on desktop.
87Fixed non visible icons in mainwindow on Z with fastload enabled. 91Fixed non visible icons in mainwindow on Z with fastload enabled.
88Added signature file setting to smtp account config. 92Added signature file setting to smtp account config.
89And the signature can be edited and saved in the edit mail dialog. 93And the signature can be edited and saved in the edit mail dialog.
90That does mean: 94That does mean:
91Simply edit the signature for the selected smtp account in the 95Simply edit the signature for the selected smtp account in the
92edit new mail dialog and press the "save signature" button there. 96edit new mail dialog and press the "save signature" button there.
93Then the signature is saved to the file specified in the smtp account settings. 97Then the signature is saved to the file specified in the smtp account settings.
94If there is no file specified, it is saved automatically to the file 98If there is no file specified, it is saved automatically to the file
95kdepim/apps/kopiemail/<accountname>.sig. 99kdepim/apps/kopiemail/<accountname>.sig.
96 100
97 101
98 102
99********** VERSION 2.0.1 ************ 103********** VERSION 2.0.1 ************
100 104
101Oooops ... I forgot to test on the Zaurus 5500 ... 105Oooops ... I forgot to test on the Zaurus 5500 ...
102 106
103Fixed many problems of new (english) strings (and german translations) 107Fixed many problems of new (english) strings (and german translations)
104introduced in the latest versions, where the text was not fitting on the 108introduced in the latest versions, where the text was not fitting on the
105240x320 display of the Zaurus 5500. 109240x320 display of the Zaurus 5500.
106 110
107KO/Pi: 111KO/Pi:
108Added a popup menu ( press pen and hold to get popup ) to the agenda view 112Added a popup menu ( press pen and hold to get popup ) to the agenda view
109with many useful items (add event/todo, show next week, two weeks, month, journal). 113with many useful items (add event/todo, show next week, two weeks, month, journal).
110 114
111Added items to the todolist popup menu for: 115Added items to the todolist popup menu for:
112Display all opened, all closed or all todos flat. 116Display all opened, all closed or all todos flat.
113The "flat" view makes is possible to sort all todos after ,e.g., prio or date. 117The "flat" view makes is possible to sort all todos after ,e.g., prio or date.
114Made the reparenting of todos on the desktop possible via Drag&Drop. 118Made the reparenting of todos on the desktop possible via Drag&Drop.
115Fixed several bugs in setting the completed datetime for todos. 119Fixed several bugs in setting the completed datetime for todos.
116Added info about completed datetime of todos to the todo viewer. 120Added info about completed datetime of todos to the todo viewer.
117Now displaying a completed todo (with completed datetime set) in the agenda view 121Now displaying a completed todo (with completed datetime set) in the agenda view
118at the time of the completion. Such that now it is possible to see in the agenda view 122at the time of the completion. Such that now it is possible to see in the agenda view
119when what todo was completed. 123when what todo was completed.
120Fixed behaviour of automatic setting completion of todos with sub-todos/parent todos. 124Fixed behaviour of automatic setting completion of todos with sub-todos/parent todos.
121Now the behaviour is: 125Now the behaviour is:
122Setting a parent to complete sets all (sub)childs to complete. 126Setting a parent to complete sets all (sub)childs to complete.
123Setting a parent to uncomplete does not change the childs. 127Setting a parent to uncomplete does not change the childs.
124Setting a child to uncomplete sets all parent to uncomplete. 128Setting a child to uncomplete sets all parent to uncomplete.
125Setting a child to complete does not change the parents. 129Setting a child to complete does not change the parents.
126 130
127Smart updating and double buffering of the daymatrix. 131Smart updating and double buffering of the daymatrix.
128Showing holidays in the day matrix. 132Showing holidays in the day matrix.
129Many other small performance updates. 133Many other small performance updates.
130 134
131Made day labels in agenda clickable. By clicking a label, the day is displayed in single day mode. 135Made day labels in agenda clickable. By clicking a label, the day is displayed in single day mode.
132 136
133Now the translation file usertranslation.txt is supposed to be in utf8 format. 137Now the translation file usertranslation.txt is supposed to be in utf8 format.
134If 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. 138If 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.
135 139
136 140
137********** VERSION 2.0.0 ************ 141********** VERSION 2.0.0 ************
138 142
139Stable release 2.0.0! 143Stable release 2.0.0!
140 144
141KO/Pi: 145KO/Pi:
142Fixed problem in edit dialog recreation at startup. 146Fixed problem in edit dialog recreation at startup.
143Made "toggle view*" menu items enabled context sensitive. 147Made "toggle view*" menu items enabled context sensitive.
144Changed agenda size menu to items 1-10. 148Changed agenda size menu to items 1-10.
145Made it possible to change agenda size quickly by pressing mouse on timelabels in agenda view and move mouse up/down. 149Made it possible to change agenda size quickly by pressing mouse on timelabels in agenda view and move mouse up/down.
146Usebility enhancements in the KO/Pi menus. 150Usebility enhancements in the KO/Pi menus.
147Birthday import now adds year to summary. 151Birthday import now adds year to summary.
148What's Next view shows age in years for birthday. 152What's Next view shows age in years for birthday.
149 153
150OM/Pi: 154OM/Pi:
151Added three info lines to display subject, from and to of selected mails. 155Added three info lines to display subject, from and to of selected mails.
152 156
153KA/Pi: 157KA/Pi:
154Fixed jump bar behaviour on Zaurus. 158Fixed jump bar behaviour on Zaurus.
155Now KA/Pi search field supports searching for a range of starting characters. 159Now KA/Pi search field supports searching for a range of starting characters.
156E.g. to search for all contact beginning with b to n, type 160E.g. to search for all contact beginning with b to n, type
157b-n 161b-n
158in the search field. 162in the search field.
159 163
160********** VERSION 1.9.20 ************ 164********** VERSION 1.9.20 ************
161 165
162KO/Pi: 166KO/Pi:
163Added for the "dislplay one day" agenda mode 167Added for the "dislplay one day" agenda mode
164info in the caption and in the day lables: 168info in the caption and in the day lables:
165Now it is displayed, if the selected day is from "day before yesterday" 169Now it is displayed, if the selected day is from "day before yesterday"
166to "day after tomorrow". 170to "day after tomorrow".
167Made it possible to delete a Todo, which has sub-todos. 171Made it possible to delete a Todo, which has sub-todos.
168Fixed two small problems in the todo view. 172Fixed two small problems in the todo view.
169Added missing German translation for filter edit and print dialog. 173Added missing German translation for filter edit and print dialog.
170Made search dialog closeable by cancel key. 174Made search dialog closeable by cancel key.
171 175
172Made it possible to select in the date picker the (ligt grey ) 176Made it possible to select in the date picker the (ligt grey )
173dates of the prev./next month with the mouse. 177dates of the prev./next month with the mouse.
174 178
175OM/Pi: 179OM/Pi:
176"Delete mail" icon in main window now deletes all selected mails. 180"Delete mail" icon in main window now deletes all selected mails.
177Fixed the problem, that the state flag of imap mails was ignored. 181Fixed the problem, that the state flag of imap mails was ignored.
178Now mails with "FLAG_SEEN" on the imap server get no icon in the list view 182Now mails with "FLAG_SEEN" on the imap server get no icon in the list view
179to indecate that they are already seen. 183to indecate that they are already seen.
180Fixed the problem that the body of some mails was not displayed in the 184Fixed the problem that the body of some mails was not displayed in the
181mail viewer when fetching them from the imap server directly to read them. 185mail viewer when fetching them from the imap server directly to read them.
182Made it (configurable) possible to show the "To:" field in the list view. 186Made it (configurable) possible to show the "To:" field in the list view.
183Added to the mail viewer the option "View Source" to make it possible to see the raw mail data. 187Added to the mail viewer the option "View Source" to make it possible to see the raw mail data.
184Added a "Download Mail" button to the mail viewer to quickly download the viewed mail to the 188Added a "Download Mail" button to the mail viewer to quickly download the viewed mail to the
185local storage folder (specified in account settings) of the account of the mail. 189local storage folder (specified in account settings) of the account of the mail.
186Removed some memory leaks in OM/Pi. 190Removed some memory leaks in OM/Pi.
187 191
188 192
189********** VERSION 1.9.19 ************ 193********** VERSION 1.9.19 ************
190 194
191Added a lot of missing translations to KA/Pi, 195Added a lot of missing translations to KA/Pi,
192Added some missing translations to KO/Pi and OM/Pi. 196Added some missing translations to KO/Pi and OM/Pi.
193 197
194Fixed some minor problems in KA/Pi + KO/Pi. 198Fixed some minor problems in KA/Pi + KO/Pi.
195 199
196Fixed a crash when closing PwM/Pi. 200Fixed a crash when closing PwM/Pi.
197Added German translation for PwM/Pi. 201Added German translation for PwM/Pi.
198 202
199Made view change and Month View update faster in KO/Pi. 203Made view change and Month View update faster in KO/Pi.
diff --git a/kmicromail/libmailwrapper/imapwrapper.cpp b/kmicromail/libmailwrapper/imapwrapper.cpp
index 93fb7de..09e52b8 100644
--- a/kmicromail/libmailwrapper/imapwrapper.cpp
+++ b/kmicromail/libmailwrapper/imapwrapper.cpp
@@ -1,406 +1,413 @@
1// CHANGED 2004-09-31 Lutz Rogowski 1// CHANGED 2004-09-31 Lutz Rogowski
2#include <stdlib.h> 2#include <stdlib.h>
3#include <libetpan/libetpan.h> 3#include <libetpan/libetpan.h>
4#include <qpe/global.h> 4#include <qpe/global.h>
5#include <qapplication.h> 5#include <qapplication.h>
6#include "imapwrapper.h" 6#include "imapwrapper.h"
7#include "mailtypes.h" 7#include "mailtypes.h"
8#include "logindialog.h" 8#include "logindialog.h"
9#include <qprogressbar.h> 9#include <qprogressbar.h>
10#include "genericwrapper.h" 10#include "genericwrapper.h"
11#include <kglobal.h> 11#include <kglobal.h>
12 12
13using namespace Opie::Core; 13using namespace Opie::Core;
14int IMAPwrapper::mMax = 0; 14int IMAPwrapper::mMax = 0;
15int IMAPwrapper::mCurrent = 0; 15int IMAPwrapper::mCurrent = 0;
16 16
17IMAPwrapper::IMAPwrapper( IMAPaccount *a ) 17IMAPwrapper::IMAPwrapper( IMAPaccount *a )
18 : AbstractMail() 18 : AbstractMail()
19{ 19{
20 account = a; 20 account = a;
21 m_imap = 0; 21 m_imap = 0;
22 m_Lastmbox = ""; 22 m_Lastmbox = "";
23 mCurrent = 0; 23 mCurrent = 0;
24 mMax = 0; 24 mMax = 0;
25} 25}
26 26
27IMAPwrapper::~IMAPwrapper() 27IMAPwrapper::~IMAPwrapper()
28{ 28{
29 logout(); 29 logout();
30} 30}
31 31
32/* to avoid to often select statements in loops etc. 32/* to avoid to often select statements in loops etc.
33 we trust that we are logged in and connection is established!*/ 33 we trust that we are logged in and connection is established!*/
34int IMAPwrapper::selectMbox(const QString&mbox) 34int IMAPwrapper::selectMbox(const QString&mbox)
35{ 35{
36 if (mbox == m_Lastmbox) { 36 if (mbox == m_Lastmbox) {
37 return MAILIMAP_NO_ERROR; 37 return MAILIMAP_NO_ERROR;
38 } 38 }
39 int err = mailimap_select( m_imap, (char*)mbox.latin1()); 39 int err = mailimap_select( m_imap, (char*)mbox.latin1());
40 if ( err != MAILIMAP_NO_ERROR ) { 40 if ( err != MAILIMAP_NO_ERROR ) {
41 m_Lastmbox = ""; 41 m_Lastmbox = "";
42 return err; 42 return err;
43 } 43 }
44 m_Lastmbox = mbox; 44 m_Lastmbox = mbox;
45 return err; 45 return err;
46} 46}
47 47
48void IMAPwrapper::imap_progress( size_t current, size_t maximum ) 48void IMAPwrapper::imap_progress( size_t current, size_t maximum )
49{ 49{
50 qApp->processEvents(); 50 qApp->processEvents();
51 return; 51 return;
52 //qDebug("imap progress %d of %d ",current,maximum ); 52 //qDebug("imap progress %d of %d ",current,maximum );
53 //Global::statusMessage(i18n("Downloading message %1 of %2").arg( current).arg(maximum)); 53 //Global::statusMessage(i18n("Downloading message %1 of %2").arg( current).arg(maximum));
54 //qApp->processEvents() 54 //qApp->processEvents()
55 static unsigned int last = 0; 55 static unsigned int last = 0;
56 if ( last != current ) 56 if ( last != current )
57 IMAPwrapper::progress(); 57 IMAPwrapper::progress();
58 last = current; 58 last = current;
59} 59}
60void IMAPwrapper::progress( QString m ) 60void IMAPwrapper::progress( QString m )
61{ 61{
62 static QString mProgrMess; 62 static QString mProgrMess;
63 if ( m != QString::null ) { 63 if ( m != QString::null ) {
64 mProgrMess = m; 64 mProgrMess = m;
65 mCurrent = 1; 65 mCurrent = 1;
66 return; 66 return;
67 } 67 }
68 QString mess; 68 QString mess;
69 //qDebug("progress "); 69 //qDebug("progress ");
70 if ( mMax ) mess = mProgrMess +i18n(" message %1 of %2").arg( mCurrent++).arg(mMax); 70 if ( mMax ) mess = mProgrMess +i18n(" message %1 of %2").arg( mCurrent++).arg(mMax);
71 else mess = mProgrMess +i18n(" message %1").arg( mCurrent++); 71 else mess = mProgrMess +i18n(" message %1").arg( mCurrent++);
72 Global::statusMessage(mess); 72 Global::statusMessage(mess);
73 //qDebug("Progress %s %s", mess.latin1(), m.latin1()); 73 //qDebug("Progress %s %s", mess.latin1(), m.latin1());
74 qApp->processEvents(); 74 qApp->processEvents();
75} 75}
76bool IMAPwrapper::start_tls(bool force_tls) 76bool IMAPwrapper::start_tls(bool force_tls)
77{ 77{
78 int err; 78 int err;
79 bool try_tls = force_tls; 79 bool try_tls = force_tls;
80 mailimap_capability_data * cap_data = 0; 80 mailimap_capability_data * cap_data = 0;
81 81
82 err = mailimap_capability(m_imap,&cap_data); 82 err = mailimap_capability(m_imap,&cap_data);
83 if (err != MAILIMAP_NO_ERROR) { 83 if (err != MAILIMAP_NO_ERROR) {
84 Global::statusMessage("error getting capabilities!"); 84 Global::statusMessage("error getting capabilities!");
85 return false; 85 return false;
86 } 86 }
87 clistiter * cur; 87 clistiter * cur;
88 for(cur = clist_begin(cap_data->cap_list) ; cur != NULL;cur = clist_next(cur)) { 88 for(cur = clist_begin(cap_data->cap_list) ; cur != NULL;cur = clist_next(cur)) {
89 struct mailimap_capability * cap; 89 struct mailimap_capability * cap;
90 cap = (struct mailimap_capability *)clist_content(cur); 90 cap = (struct mailimap_capability *)clist_content(cur);
91 if (cap->cap_type == MAILIMAP_CAPABILITY_NAME) { 91 if (cap->cap_type == MAILIMAP_CAPABILITY_NAME) {
92 if (strcasecmp(cap->cap_data.cap_name, "STARTTLS") == 0) { 92 if (strcasecmp(cap->cap_data.cap_name, "STARTTLS") == 0) {
93 try_tls = true; 93 try_tls = true;
94 break; 94 break;
95 } 95 }
96 } 96 }
97 } 97 }
98 if (cap_data) { 98 if (cap_data) {
99 mailimap_capability_data_free(cap_data); 99 mailimap_capability_data_free(cap_data);
100 } 100 }
101 if (try_tls) { 101 if (try_tls) {
102 err = mailimap_starttls(m_imap); 102 err = mailimap_starttls(m_imap);
103 if (err != MAILIMAP_NO_ERROR && force_tls) { 103 if (err != MAILIMAP_NO_ERROR && force_tls) {
104 Global::statusMessage(i18n("Server has no TLS support!")); 104 Global::statusMessage(i18n("Server has no TLS support!"));
105 try_tls = false; 105 try_tls = false;
106 } else { 106 } else {
107 mailstream_low * low; 107 mailstream_low * low;
108 mailstream_low * new_low; 108 mailstream_low * new_low;
109 low = mailstream_get_low(m_imap->imap_stream); 109 low = mailstream_get_low(m_imap->imap_stream);
110 if (!low) { 110 if (!low) {
111 try_tls = false; 111 try_tls = false;
112 } else { 112 } else {
113 int fd = mailstream_low_get_fd(low); 113 int fd = mailstream_low_get_fd(low);
114 if (fd > -1 && (new_low = mailstream_low_ssl_open(fd))!=0) { 114 if (fd > -1 && (new_low = mailstream_low_ssl_open(fd))!=0) {
115 mailstream_low_free(low); 115 mailstream_low_free(low);
116 mailstream_set_low(m_imap->imap_stream, new_low); 116 mailstream_set_low(m_imap->imap_stream, new_low);
117 } else { 117 } else {
118 try_tls = false; 118 try_tls = false;
119 } 119 }
120 } 120 }
121 } 121 }
122 } 122 }
123 return try_tls; 123 return try_tls;
124} 124}
125 125
126void IMAPwrapper::login() 126void IMAPwrapper::login(bool tryTLS) // = true)
127{ 127{
128 QString server, user, pass; 128 QString server, user, pass;
129 uint16_t port; 129 uint16_t port;
130 int err = MAILIMAP_NO_ERROR; 130 int err = MAILIMAP_NO_ERROR;
131 131
132 if (account->getOffline()) return; 132 if (account->getOffline()) return;
133 /* we are connected this moment */ 133 /* we are connected this moment */
134 /* TODO: setup a timer holding the line or if connection closed - delete the value */ 134 /* TODO: setup a timer holding the line or if connection closed - delete the value */
135 if (m_imap) { 135 if (m_imap) {
136 err = mailimap_noop(m_imap); 136 err = mailimap_noop(m_imap);
137 if (err!=MAILIMAP_NO_ERROR) { 137 if (err!=MAILIMAP_NO_ERROR) {
138 logout(); 138 logout();
139 } else { 139 } else {
140 mailstream_flush(m_imap->imap_stream); 140 mailstream_flush(m_imap->imap_stream);
141 return; 141 return;
142 } 142 }
143 } 143 }
144 server = account->getServer(); 144 server = account->getServer();
145 port = account->getPort().toUInt(); 145 port = account->getPort().toUInt();
146 if ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) { 146 if ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) {
147 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true ); 147 LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true );
148 login.show(); 148 login.show();
149 if ( QDialog::Accepted == login.exec() ) { 149 if ( QDialog::Accepted == login.exec() ) {
150 // ok 150 // ok
151 user = login.getUser(); 151 user = login.getUser();
152 pass = login.getPassword(); 152 pass = login.getPassword();
153 } else { 153 } else {
154 // cancel 154 // cancel
155 return; 155 return;
156 } 156 }
157 } else { 157 } else {
158 user = account->getUser(); 158 user = account->getUser();
159 pass = account->getPassword(); 159 pass = account->getPassword();
160 } 160 }
161 161
162 m_imap = mailimap_new( 20, &imap_progress ); 162 m_imap = mailimap_new( 20, &imap_progress );
163 163
164 /* connect */ 164 /* connect */
165 bool ssl = false; 165 bool ssl = false;
166 bool try_tls = false; 166 bool try_tls = false;
167 bool force_tls = false; 167 bool force_tls = false;
168 168
169 if ( account->ConnectionType() == 2 ) { 169 if ( account->ConnectionType() == 2 ) {
170 ssl = true; 170 ssl = true;
171 } 171 }
172 if (account->ConnectionType()==1) { 172 if (account->ConnectionType()==1) {
173 force_tls = true; 173 force_tls = true;
174 } 174 }
175 175
176 if ( ssl ) { 176 if ( ssl ) {
177 qDebug("using ssl "); 177 qDebug("using ssl ");
178 err = mailimap_ssl_connect( m_imap, (char*)server.latin1(), port ); 178 err = mailimap_ssl_connect( m_imap, (char*)server.latin1(), port );
179 qDebug("back "); 179 qDebug("back ");
180 } else { 180 } else {
181 err = mailimap_socket_connect( m_imap, (char*)server.latin1(), port ); 181 err = mailimap_socket_connect( m_imap, (char*)server.latin1(), port );
182 } 182 }
183 183
184 if ( err != MAILIMAP_NO_ERROR && 184 if ( err != MAILIMAP_NO_ERROR &&
185 err != MAILIMAP_NO_ERROR_AUTHENTICATED && 185 err != MAILIMAP_NO_ERROR_AUTHENTICATED &&
186 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) { 186 err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) {
187 QString failure = ""; 187 QString failure = "";
188 if (err == MAILIMAP_ERROR_CONNECTION_REFUSED) { 188 if (err == MAILIMAP_ERROR_CONNECTION_REFUSED) {
189 failure="Connection refused"; 189 failure="Connection refused";
190 } else { 190 } else {
191 failure="Unknown failure"; 191 failure="Unknown failure";
192 } 192 }
193 Global::statusMessage(i18n("error connecting imap server: %1").arg(failure)); 193 Global::statusMessage(i18n("error connecting imap server: %1").arg(failure));
194 mailimap_free( m_imap ); 194 mailimap_free( m_imap );
195 m_imap = 0; 195 m_imap = 0;
196 return; 196 return;
197 } 197 }
198 198 if ( tryTLS ) {
199 if (!ssl) { 199 if (!ssl) {
200 try_tls = start_tls(force_tls); 200 try_tls = start_tls(force_tls);
201 }
201 } 202 }
202
203 bool ok = true; 203 bool ok = true;
204 if (force_tls && !try_tls) { 204 if (force_tls && !try_tls) {
205 Global::statusMessage(i18n("Server has no TLS support!")); 205 Global::statusMessage(i18n("Server has no TLS support!"));
206 ok = false; 206 ok = false;
207 } 207 }
208 208
209 209
210 /* login */ 210 /* login */
211 211
212 if (ok) { 212 if (ok) {
213 err = mailimap_login_simple( m_imap, (char*)user.latin1(), (char*)pass.latin1() ); 213 err = mailimap_login_simple( m_imap, (char*)user.latin1(), (char*)pass.latin1() );
214 if ( err != MAILIMAP_NO_ERROR ) { 214 if ( err != MAILIMAP_NO_ERROR ) {
215 if ( tryTLS && !force_tls && !try_tls ) {
216 err = mailimap_close( m_imap );
217 mailimap_free( m_imap );
218 m_imap = 0;
219 login( false );
220 return;
221 }
215 Global::statusMessage(i18n("error logging in imap server: %1").arg(m_imap->imap_response)); 222 Global::statusMessage(i18n("error logging in imap server: %1").arg(m_imap->imap_response));
216 ok = false; 223 ok = false;
217 } 224 }
218 } 225 }
219 if (!ok) { 226 if (!ok) {
220 err = mailimap_close( m_imap ); 227 err = mailimap_close( m_imap );
221 mailimap_free( m_imap ); 228 mailimap_free( m_imap );
222 m_imap = 0; 229 m_imap = 0;
223 } 230 }
224} 231}
225 232
226void IMAPwrapper::logout() 233void IMAPwrapper::logout()
227{ 234{
228 int err = MAILIMAP_NO_ERROR; 235 int err = MAILIMAP_NO_ERROR;
229 if (!m_imap) return; 236 if (!m_imap) return;
230 err = mailimap_logout( m_imap ); 237 err = mailimap_logout( m_imap );
231 err = mailimap_close( m_imap ); 238 err = mailimap_close( m_imap );
232 mailimap_free( m_imap ); 239 mailimap_free( m_imap );
233 m_imap = 0; 240 m_imap = 0;
234 m_Lastmbox = ""; 241 m_Lastmbox = "";
235} 242}
236 243
237void IMAPwrapper::listMessages(const QString&mailbox,QValueList<Opie::Core::OSmartPointer<RecMail> > &target , int maxSizeInKb) 244void IMAPwrapper::listMessages(const QString&mailbox,QValueList<Opie::Core::OSmartPointer<RecMail> > &target , int maxSizeInKb)
238{ 245{
239 246
240 int tryAgain = 1; 247 int tryAgain = 1;
241 while ( tryAgain >= 0 ) { 248 while ( tryAgain >= 0 ) {
242 int err = MAILIMAP_NO_ERROR; 249 int err = MAILIMAP_NO_ERROR;
243 clist *result = 0; 250 clist *result = 0;
244 clistcell *current; 251 clistcell *current;
245 mailimap_fetch_type *fetchType = 0; 252 mailimap_fetch_type *fetchType = 0;
246 mailimap_set *set = 0; 253 mailimap_set *set = 0;
247 254
248 login(); 255 login();
249 if (!m_imap) { 256 if (!m_imap) {
250 return; 257 return;
251 } 258 }
252 /* select mailbox READONLY for operations */ 259 /* select mailbox READONLY for operations */
253 err = selectMbox(mailbox); 260 err = selectMbox(mailbox);
254 if ( err != MAILIMAP_NO_ERROR ) { 261 if ( err != MAILIMAP_NO_ERROR ) {
255 return; 262 return;
256 } 263 }
257 264
258 int last = m_imap->imap_selection_info->sel_exists; 265 int last = m_imap->imap_selection_info->sel_exists;
259 266
260 if (last == 0) { 267 if (last == 0) {
261 Global::statusMessage(i18n("Mailbox has no mails")); 268 Global::statusMessage(i18n("Mailbox has no mails"));
262 return; 269 return;
263 } else { 270 } else {
264 } 271 }
265 progress( i18n("Fetch ")); 272 progress( i18n("Fetch "));
266 mMax = last; 273 mMax = last;
267 //qDebug("last %d ", last); 274 //qDebug("last %d ", last);
268 Global::statusMessage(i18n("Fetching header list")); 275 Global::statusMessage(i18n("Fetching header list"));
269 qApp->processEvents(); 276 qApp->processEvents();
270 /* the range has to start at 1!!! not with 0!!!! */ 277 /* the range has to start at 1!!! not with 0!!!! */
271 //LR the access to web.de imap server is no working with value 1 278 //LR the access to web.de imap server is no working with value 1
272 //qDebug("interval %d - %d ", tryAgain, last-1+tryAgain ); 279 //qDebug("interval %d - %d ", tryAgain, last-1+tryAgain );
273 set = mailimap_set_new_interval( tryAgain, last ); 280 set = mailimap_set_new_interval( tryAgain, last );
274 fetchType = mailimap_fetch_type_new_fetch_att_list_empty(); 281 fetchType = mailimap_fetch_type_new_fetch_att_list_empty();
275 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope()); 282 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope());
276 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags()); 283 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags());
277 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate()); 284 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate());
278 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size()); 285 mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size());
279 286
280 err = mailimap_fetch( m_imap, set, fetchType, &result ); 287 err = mailimap_fetch( m_imap, set, fetchType, &result );
281 mailimap_set_free( set ); 288 mailimap_set_free( set );
282 mailimap_fetch_type_free( fetchType ); 289 mailimap_fetch_type_free( fetchType );
283 290
284 QString date,subject,from; 291 QString date,subject,from;
285 292
286 if ( err == MAILIMAP_NO_ERROR ) { 293 if ( err == MAILIMAP_NO_ERROR ) {
287 tryAgain = -1; 294 tryAgain = -1;
288 mailimap_msg_att * msg_att; 295 mailimap_msg_att * msg_att;
289 int i = 0; 296 int i = 0;
290 for (current = clist_begin(result); current != 0; current=clist_next(current)) { 297 for (current = clist_begin(result); current != 0; current=clist_next(current)) {
291 ++i; 298 ++i;
292 //qDebug("iii %d ",i); 299 //qDebug("iii %d ",i);
293 msg_att = (mailimap_msg_att*)current->data; 300 msg_att = (mailimap_msg_att*)current->data;
294 RecMail*m = parse_list_result(msg_att); 301 RecMail*m = parse_list_result(msg_att);
295 if (m) { 302 if (m) {
296 if ( maxSizeInKb == 0 || m->Msgsize()<=(unsigned int ) maxSizeInKb*1024 ) { 303 if ( maxSizeInKb == 0 || m->Msgsize()<=(unsigned int ) maxSizeInKb*1024 ) {
297 m->setNumber(i); 304 m->setNumber(i);
298 m->setMbox(mailbox); 305 m->setMbox(mailbox);
299 m->setWrapper(this); 306 m->setWrapper(this);
300 target.append(m); 307 target.append(m);
301 } 308 }
302 } 309 }
303 } 310 }
304 Global::statusMessage(i18n("Mailbox has %1 mails").arg(target.count())); 311 Global::statusMessage(i18n("Mailbox has %1 mails").arg(target.count()));
305 } else { 312 } else {
306 --tryAgain; 313 --tryAgain;
307 --tryAgain;//disabled tryagain by adding this line 314 --tryAgain;//disabled tryagain by adding this line
308 if ( tryAgain < 0 ) 315 if ( tryAgain < 0 )
309 Global::statusMessage(i18n("Error fetching headers: %1").arg(m_imap->imap_response)); 316 Global::statusMessage(i18n("Error fetching headers: %1").arg(m_imap->imap_response));
310 else 317 else
311 qDebug("try again... "); 318 qDebug("try again... ");
312 } 319 }
313 320
314 if (result) mailimap_fetch_list_free(result); 321 if (result) mailimap_fetch_list_free(result);
315 } 322 }
316} 323}
317 324
318QValueList<Opie::Core::OSmartPointer<Folder> >* IMAPwrapper::listFolders() 325QValueList<Opie::Core::OSmartPointer<Folder> >* IMAPwrapper::listFolders()
319{ 326{
320 const char *path, *mask; 327 const char *path, *mask;
321 int err = MAILIMAP_NO_ERROR; 328 int err = MAILIMAP_NO_ERROR;
322 clist *result = 0; 329 clist *result = 0;
323 clistcell *current = 0; 330 clistcell *current = 0;
324 clistcell*cur_flag = 0; 331 clistcell*cur_flag = 0;
325 mailimap_mbx_list_flags*bflags = 0; 332 mailimap_mbx_list_flags*bflags = 0;
326 333
327 QValueList<FolderP>* folders = new QValueList<FolderP>(); 334 QValueList<FolderP>* folders = new QValueList<FolderP>();
328 login(); 335 login();
329 if (!m_imap) { 336 if (!m_imap) {
330 return folders; 337 return folders;
331 } 338 }
332 339
333/* 340/*
334 * First we have to check for INBOX 'cause it sometimes it's not inside the path. 341 * First we have to check for INBOX 'cause it sometimes it's not inside the path.
335 * We must not forget to filter them out in next loop! 342 * We must not forget to filter them out in next loop!
336 * it seems like ugly code. and yes - it is ugly code. but the best way. 343 * it seems like ugly code. and yes - it is ugly code. but the best way.
337 */ 344 */
338 Global::statusMessage(i18n("Fetching folder list")); 345 Global::statusMessage(i18n("Fetching folder list"));
339 qApp->processEvents(); 346 qApp->processEvents();
340 QString temp; 347 QString temp;
341 mask = "INBOX" ; 348 mask = "INBOX" ;
342 mailimap_mailbox_list *list; 349 mailimap_mailbox_list *list;
343 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result ); 350 err = mailimap_list( m_imap, (char*)"", (char*)mask, &result );
344 QString del; 351 QString del;
345 bool selectable = true; 352 bool selectable = true;
346 bool no_inferiors = false; 353 bool no_inferiors = false;
347 if ( err == MAILIMAP_NO_ERROR ) { 354 if ( err == MAILIMAP_NO_ERROR ) {
348 current = result->first; 355 current = result->first;
349 for ( int i = result->count; i > 0; i-- ) { 356 for ( int i = result->count; i > 0; i-- ) {
350 list = (mailimap_mailbox_list *) current->data; 357 list = (mailimap_mailbox_list *) current->data;
351 // it is better use the deep copy mechanism of qt itself 358 // it is better use the deep copy mechanism of qt itself
352 // instead of using strdup! 359 // instead of using strdup!
353 temp = list->mb_name; 360 temp = list->mb_name;
354 del = list->mb_delimiter; 361 del = list->mb_delimiter;
355 current = current->next; 362 current = current->next;
356 if ( (bflags = list->mb_flag) ) { 363 if ( (bflags = list->mb_flag) ) {
357 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&& 364 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&&
358 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT); 365 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT);
359 for(cur_flag=clist_begin(bflags->mbf_oflags);cur_flag;cur_flag=clist_next(cur_flag)) { 366 for(cur_flag=clist_begin(bflags->mbf_oflags);cur_flag;cur_flag=clist_next(cur_flag)) {
360 if ( ((mailimap_mbx_list_oflag*)cur_flag->data)->of_type==MAILIMAP_MBX_LIST_OFLAG_NOINFERIORS) { 367 if ( ((mailimap_mbx_list_oflag*)cur_flag->data)->of_type==MAILIMAP_MBX_LIST_OFLAG_NOINFERIORS) {
361 no_inferiors = true; 368 no_inferiors = true;
362 } 369 }
363 } 370 }
364 } 371 }
365 folders->append( new IMAPFolder(temp,del,selectable,no_inferiors,account->getPrefix())); 372 folders->append( new IMAPFolder(temp,del,selectable,no_inferiors,account->getPrefix()));
366 } 373 }
367 } else { 374 } else {
368 qDebug("error fetching folders: "); 375 qDebug("error fetching folders: ");
369 376
370 } 377 }
371 mailimap_list_result_free( result ); 378 mailimap_list_result_free( result );
372 379
373/* 380/*
374 * second stage - get the other then inbox folders 381 * second stage - get the other then inbox folders
375 */ 382 */
376 mask = "*" ; 383 mask = "*" ;
377 path = account->getPrefix().latin1(); 384 path = account->getPrefix().latin1();
378 if (!path) path = ""; 385 if (!path) path = "";
379 err = mailimap_list( m_imap, (char*)path, (char*)mask, &result ); 386 err = mailimap_list( m_imap, (char*)path, (char*)mask, &result );
380 if ( err == MAILIMAP_NO_ERROR ) { 387 if ( err == MAILIMAP_NO_ERROR ) {
381 current = result->first; 388 current = result->first;
382 for ( current=clist_begin(result);current!=NULL;current=clist_next(current)) { 389 for ( current=clist_begin(result);current!=NULL;current=clist_next(current)) {
383 no_inferiors = false; 390 no_inferiors = false;
384 list = (mailimap_mailbox_list *) current->data; 391 list = (mailimap_mailbox_list *) current->data;
385 // it is better use the deep copy mechanism of qt itself 392 // it is better use the deep copy mechanism of qt itself
386 // instead of using strdup! 393 // instead of using strdup!
387 temp = list->mb_name; 394 temp = list->mb_name;
388 if (temp.lower()=="inbox") 395 if (temp.lower()=="inbox")
389 continue; 396 continue;
390 if (temp.lower()==account->getPrefix().lower()) 397 if (temp.lower()==account->getPrefix().lower())
391 continue; 398 continue;
392 if ( (bflags = list->mb_flag) ) { 399 if ( (bflags = list->mb_flag) ) {
393 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&& 400 selectable = !(bflags->mbf_type==MAILIMAP_MBX_LIST_FLAGS_SFLAG&&
394 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT); 401 bflags->mbf_sflag==MAILIMAP_MBX_LIST_SFLAG_NOSELECT);
395 for(cur_flag=clist_begin(bflags->mbf_oflags);cur_flag;cur_flag=clist_next(cur_flag)) { 402 for(cur_flag=clist_begin(bflags->mbf_oflags);cur_flag;cur_flag=clist_next(cur_flag)) {
396 if ( ((mailimap_mbx_list_oflag*)cur_flag->data)->of_type==MAILIMAP_MBX_LIST_OFLAG_NOINFERIORS) { 403 if ( ((mailimap_mbx_list_oflag*)cur_flag->data)->of_type==MAILIMAP_MBX_LIST_OFLAG_NOINFERIORS) {
397 no_inferiors = true; 404 no_inferiors = true;
398 } 405 }
399 } 406 }
400 } 407 }
401 del = list->mb_delimiter; 408 del = list->mb_delimiter;
402 folders->append(new IMAPFolder(temp,del,selectable,no_inferiors,account->getPrefix())); 409 folders->append(new IMAPFolder(temp,del,selectable,no_inferiors,account->getPrefix()));
403 } 410 }
404 } else { 411 } else {
405 qDebug("error fetching folders "); 412 qDebug("error fetching folders ");
406 413
diff --git a/kmicromail/libmailwrapper/imapwrapper.h b/kmicromail/libmailwrapper/imapwrapper.h
index 5535d8d..31c60a8 100644
--- a/kmicromail/libmailwrapper/imapwrapper.h
+++ b/kmicromail/libmailwrapper/imapwrapper.h
@@ -1,85 +1,85 @@
1// CHANGED 2004-09-31 Lutz Rogowski 1// CHANGED 2004-09-31 Lutz Rogowski
2#ifndef __IMAPWRAPPER 2#ifndef __IMAPWRAPPER
3#define __IMAPWRAPPER 3#define __IMAPWRAPPER
4 4
5#include <qlist.h> 5#include <qlist.h>
6#include "mailwrapper.h" 6#include "mailwrapper.h"
7#include "abstractmail.h" 7#include "abstractmail.h"
8#include <libetpan/clist.h> 8#include <libetpan/clist.h>
9 9
10struct mailimap; 10struct mailimap;
11struct mailimap_body; 11struct mailimap_body;
12struct mailimap_body_type_1part; 12struct mailimap_body_type_1part;
13struct mailimap_body_type_text; 13struct mailimap_body_type_text;
14struct mailimap_body_type_basic; 14struct mailimap_body_type_basic;
15struct mailimap_body_type_msg; 15struct mailimap_body_type_msg;
16struct mailimap_body_type_mpart; 16struct mailimap_body_type_mpart;
17struct mailimap_body_fields; 17struct mailimap_body_fields;
18struct mailimap_msg_att; 18struct mailimap_msg_att;
19class encodedString; 19class encodedString;
20 20
21class IMAPwrapper : public AbstractMail 21class IMAPwrapper : public AbstractMail
22{ 22{
23 Q_OBJECT 23 Q_OBJECT
24public: 24public:
25 IMAPwrapper( IMAPaccount *a ); 25 IMAPwrapper( IMAPaccount *a );
26 virtual ~IMAPwrapper(); 26 virtual ~IMAPwrapper();
27 virtual QValueList<Opie::Core::OSmartPointer<Folder> >* listFolders(); 27 virtual QValueList<Opie::Core::OSmartPointer<Folder> >* listFolders();
28 virtual void listMessages(const QString & mailbox,QValueList<Opie::Core::OSmartPointer<RecMail> >&target , int sizeInKb = 0); 28 virtual void listMessages(const QString & mailbox,QValueList<Opie::Core::OSmartPointer<RecMail> >&target , int sizeInKb = 0);
29 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX"); 29 virtual void statusFolder(folderStat&target_stat,const QString & mailbox="INBOX");
30 30
31 virtual void deleteMail(const RecMailP&mail); 31 virtual void deleteMail(const RecMailP&mail);
32 void deleteMailList(const QValueList<RecMailP>&target); 32 void deleteMailList(const QValueList<RecMailP>&target);
33 virtual void answeredMail(const RecMailP&mail); 33 virtual void answeredMail(const RecMailP&mail);
34 virtual int deleteAllMail(const Opie::Core::OSmartPointer<Folder>&folder); 34 virtual int deleteAllMail(const Opie::Core::OSmartPointer<Folder>&folder);
35 virtual void storeMessage(const char*msg,size_t length, const QString&folder); 35 virtual void storeMessage(const char*msg,size_t length, const QString&folder);
36 virtual void mvcpAllMails(const Opie::Core::OSmartPointer<Folder>&fromFolder, 36 virtual void mvcpAllMails(const Opie::Core::OSmartPointer<Folder>&fromFolder,
37 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit,int sizeInKb = 0); 37 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit,int sizeInKb = 0);
38 virtual void mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit); 38 virtual void mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit);
39 39
40 virtual RecBodyP fetchBody(const RecMailP&mail); 40 virtual RecBodyP fetchBody(const RecMailP&mail);
41 virtual QString fetchTextPart(const RecMailP&mail,const RecPartP&part); 41 virtual QString fetchTextPart(const RecMailP&mail,const RecPartP&part);
42 virtual encodedString* fetchDecodedPart(const RecMailP&mail,const RecPartP&part); 42 virtual encodedString* fetchDecodedPart(const RecMailP&mail,const RecPartP&part);
43 virtual encodedString* fetchRawPart(const RecMailP&mail,const RecPartP&part); 43 virtual encodedString* fetchRawPart(const RecMailP&mail,const RecPartP&part);
44 virtual encodedString* fetchRawBody(const RecMailP&mail); 44 virtual encodedString* fetchRawBody(const RecMailP&mail);
45 45
46 virtual int createMbox(const QString&,const Opie::Core::OSmartPointer<Folder>&parentfolder=0, 46 virtual int createMbox(const QString&,const Opie::Core::OSmartPointer<Folder>&parentfolder=0,
47 const QString& delemiter="/",bool getsubfolder=false); 47 const QString& delemiter="/",bool getsubfolder=false);
48 virtual int deleteMbox(const Opie::Core::OSmartPointer<Folder>&folder); 48 virtual int deleteMbox(const Opie::Core::OSmartPointer<Folder>&folder);
49 49
50 static void imap_progress( size_t current, size_t maximum ); 50 static void imap_progress( size_t current, size_t maximum );
51 51
52 virtual void logout(); 52 virtual void logout();
53 virtual MAILLIB::ATYPE getType()const; 53 virtual MAILLIB::ATYPE getType()const;
54 virtual const QString&getName()const; 54 virtual const QString&getName()const;
55 virtual Account* getAccount() { return account; }; 55 virtual Account* getAccount() { return account; };
56 56
57protected: 57protected:
58 RecMail*parse_list_result(mailimap_msg_att*); 58 RecMail*parse_list_result(mailimap_msg_att*);
59 void login(); 59 void login(bool tryTLS = true);
60 bool start_tls(bool force=true); 60 bool start_tls(bool force=true);
61 61
62 virtual QString fetchTextPart(const RecMailP&mail,const QValueList<int>&path,bool internal_call=false,const QString&enc=""); 62 virtual QString fetchTextPart(const RecMailP&mail,const QValueList<int>&path,bool internal_call=false,const QString&enc="");
63 virtual encodedString*fetchRawPart(const RecMailP&mail,const QValueList<int>&path,bool internal_call); 63 virtual encodedString*fetchRawPart(const RecMailP&mail,const QValueList<int>&path,bool internal_call);
64 int selectMbox(const QString&mbox); 64 int selectMbox(const QString&mbox);
65 65
66 void fillSinglePart(RecPartP&target_part,mailimap_body_type_1part*Description); 66 void fillSinglePart(RecPartP&target_part,mailimap_body_type_1part*Description);
67 void fillSingleTextPart(RecPartP&target_part,mailimap_body_type_text*which); 67 void fillSingleTextPart(RecPartP&target_part,mailimap_body_type_text*which);
68 void fillSingleBasicPart(RecPartP&target_part,mailimap_body_type_basic*which); 68 void fillSingleBasicPart(RecPartP&target_part,mailimap_body_type_basic*which);
69 void fillSingleMsgPart(RecPartP&target_part,mailimap_body_type_msg*which); 69 void fillSingleMsgPart(RecPartP&target_part,mailimap_body_type_msg*which);
70 void fillMultiPart(RecPartP&target_part,mailimap_body_type_mpart*which); 70 void fillMultiPart(RecPartP&target_part,mailimap_body_type_mpart*which);
71 void traverseBody(const RecMailP&mail,mailimap_body*body,RecBodyP&target_body,int current_recursion,QValueList<int>recList,int current_count=1); 71 void traverseBody(const RecMailP&mail,mailimap_body*body,RecBodyP&target_body,int current_recursion,QValueList<int>recList,int current_count=1);
72 72
73 /* just helpers */ 73 /* just helpers */
74 static void fillBodyFields(RecPartP&target_part,mailimap_body_fields*which); 74 static void fillBodyFields(RecPartP&target_part,mailimap_body_fields*which);
75 static QStringList address_list_to_stringlist(clist*list); 75 static QStringList address_list_to_stringlist(clist*list);
76 76
77 static void progress(QString mess = QString::null); 77 static void progress(QString mess = QString::null);
78 static int mCurrent; 78 static int mCurrent;
79 static int mMax; 79 static int mMax;
80 IMAPaccount *account; 80 IMAPaccount *account;
81 mailimap *m_imap; 81 mailimap *m_imap;
82 QString m_Lastmbox; 82 QString m_Lastmbox;
83}; 83};
84 84
85#endif 85#endif