Diffstat (limited to 'noncore/net/mail/pop3wrapper.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/net/mail/pop3wrapper.cpp | 229 |
1 files changed, 0 insertions, 229 deletions
diff --git a/noncore/net/mail/pop3wrapper.cpp b/noncore/net/mail/pop3wrapper.cpp deleted file mode 100644 index d76d82a..0000000 --- a/noncore/net/mail/pop3wrapper.cpp +++ b/dev/null | |||
@@ -1,229 +0,0 @@ | |||
1 | #include <stdlib.h> | ||
2 | #include "pop3wrapper.h" | ||
3 | #include "mailtypes.h" | ||
4 | #include "logindialog.h" | ||
5 | #include <libetpan/libetpan.h> | ||
6 | #include <qpe/global.h> | ||
7 | #include <qfile.h> | ||
8 | #include <qstring.h> | ||
9 | |||
10 | /* we don't fetch messages larger than 5 MB */ | ||
11 | #define HARD_MSG_SIZE_LIMIT 5242880 | ||
12 | |||
13 | POP3wrapper::POP3wrapper( POP3account *a ) | ||
14 | : Genericwrapper() | ||
15 | { | ||
16 | account = a; | ||
17 | m_pop3 = NULL; | ||
18 | m_folder = NULL; | ||
19 | msgTempName = a->getFileName()+"_msg_cache"; | ||
20 | last_msg_id = 0; | ||
21 | } | ||
22 | |||
23 | POP3wrapper::~POP3wrapper() | ||
24 | { | ||
25 | logout(); | ||
26 | QFile msg_cache(msgTempName); | ||
27 | if (msg_cache.exists()) { | ||
28 | msg_cache.remove(); | ||
29 | } | ||
30 | } | ||
31 | |||
32 | void POP3wrapper::pop3_progress( size_t current, size_t maximum ) | ||
33 | { | ||
34 | qDebug( "POP3: %i of %i", current, maximum ); | ||
35 | } | ||
36 | |||
37 | RecBody POP3wrapper::fetchBody( const RecMail &mail ) | ||
38 | { | ||
39 | int err = MAILPOP3_NO_ERROR; | ||
40 | char *message = 0; | ||
41 | size_t length = 0; | ||
42 | |||
43 | login(); | ||
44 | if ( !m_pop3 ) { | ||
45 | return RecBody(); | ||
46 | } | ||
47 | |||
48 | RecBody body; | ||
49 | mailmessage * mailmsg; | ||
50 | if (mail.Msgsize()>HARD_MSG_SIZE_LIMIT) { | ||
51 | qDebug("Message to large: %i",mail.Msgsize()); | ||
52 | return body; | ||
53 | } | ||
54 | |||
55 | QFile msg_cache(msgTempName); | ||
56 | |||
57 | cleanMimeCache(); | ||
58 | |||
59 | if (mail.getNumber()!=last_msg_id) { | ||
60 | if (msg_cache.exists()) { | ||
61 | msg_cache.remove(); | ||
62 | } | ||
63 | msg_cache.open(IO_ReadWrite|IO_Truncate); | ||
64 | last_msg_id = mail.getNumber(); | ||
65 | err = mailsession_get_message(m_folder->fld_session, mail.getNumber(), &mailmsg); | ||
66 | err = mailmessage_fetch(mailmsg,&message,&length); | ||
67 | msg_cache.writeBlock(message,length); | ||
68 | } else { | ||
69 | QString msg=""; | ||
70 | msg_cache.open(IO_ReadOnly); | ||
71 | message = new char[4096]; | ||
72 | memset(message,0,4096); | ||
73 | while (msg_cache.readBlock(message,4095)>0) { | ||
74 | msg+=message; | ||
75 | memset(message,0,4096); | ||
76 | } | ||
77 | delete message; | ||
78 | message = (char*)malloc(msg.length()+1*sizeof(char)); | ||
79 | memset(message,0,msg.length()+1); | ||
80 | memcpy(message,msg.latin1(),msg.length()); | ||
81 | /* transform to libetpan stuff */ | ||
82 | mailmsg = mailmessage_new(); | ||
83 | mailmessage_init(mailmsg, NULL, data_message_driver, 0, strlen(message)); | ||
84 | generic_message_t * msg_data; | ||
85 | msg_data = (generic_message_t *)mailmsg->msg_data; | ||
86 | msg_data->msg_fetched = 1; | ||
87 | msg_data->msg_message = message; | ||
88 | msg_data->msg_length = strlen(message); | ||
89 | } | ||
90 | body = parseMail(mailmsg); | ||
91 | |||
92 | /* clean up */ | ||
93 | if (mailmsg) mailmessage_free(mailmsg); | ||
94 | if (message) free(message); | ||
95 | |||
96 | return body; | ||
97 | } | ||
98 | |||
99 | void POP3wrapper::listMessages(const QString &, QList<RecMail> &target ) | ||
100 | { | ||
101 | login(); | ||
102 | if (!m_pop3) return; | ||
103 | uint32_t res_messages,res_recent,res_unseen; | ||
104 | mailsession_status_folder(m_folder->fld_session,"INBOX",&res_messages,&res_recent,&res_unseen); | ||
105 | parseList(target,m_folder->fld_session,"INBOX"); | ||
106 | Global::statusMessage( tr("Mailbox contains %1 mail(s)").arg(res_messages)); | ||
107 | } | ||
108 | |||
109 | void POP3wrapper::login() | ||
110 | { | ||
111 | /* we'll hold the line */ | ||
112 | if ( m_pop3 != NULL ) return; | ||
113 | |||
114 | const char *server, *user, *pass; | ||
115 | uint16_t port; | ||
116 | int err = MAILPOP3_NO_ERROR; | ||
117 | |||
118 | server = account->getServer().latin1(); | ||
119 | port = account->getPort().toUInt(); | ||
120 | |||
121 | if ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) { | ||
122 | LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true ); | ||
123 | login.show(); | ||
124 | if ( QDialog::Accepted == login.exec() ) { | ||
125 | // ok | ||
126 | user = login.getUser().latin1(); | ||
127 | pass = login.getPassword().latin1(); | ||
128 | } else { | ||
129 | // cancel | ||
130 | qDebug( "POP3: Login canceled" ); | ||
131 | return; | ||
132 | } | ||
133 | } else { | ||
134 | user = account->getUser().latin1(); | ||
135 | pass = account->getPassword().latin1(); | ||
136 | } | ||
137 | |||
138 | bool ssl = account->getSSL(); | ||
139 | |||
140 | m_pop3=mailstorage_new(NULL); | ||
141 | pop3_mailstorage_init(m_pop3,(char*)server,port,NULL,CONNECTION_TYPE_TRY_STARTTLS,POP3_AUTH_TYPE_TRY_APOP, | ||
142 | (char*)user,(char*)pass,0,0,0); | ||
143 | |||
144 | m_folder = mailfolder_new(m_pop3, NULL, NULL); | ||
145 | |||
146 | if (m_folder==0) { | ||
147 | Global::statusMessage(tr("Error initializing folder")); | ||
148 | mailstorage_free(m_pop3); | ||
149 | m_pop3 = NULL; | ||
150 | return; | ||
151 | } | ||
152 | err = mailfolder_connect(m_folder); | ||
153 | if (err != MAIL_NO_ERROR) { | ||
154 | Global::statusMessage(tr("Error initializing folder")); | ||
155 | mailfolder_free(m_folder); | ||
156 | m_folder = 0; | ||
157 | mailstorage_free(m_pop3); | ||
158 | m_pop3 = 0; | ||
159 | } | ||
160 | qDebug( "POP3: logged in!" ); | ||
161 | } | ||
162 | |||
163 | void POP3wrapper::logout() | ||
164 | { | ||
165 | int err = MAILPOP3_NO_ERROR; | ||
166 | if ( m_pop3 == NULL ) return; | ||
167 | mailfolder_free(m_folder); | ||
168 | m_folder = 0; | ||
169 | mailstorage_free(m_pop3); | ||
170 | m_pop3 = 0; | ||
171 | } | ||
172 | |||
173 | |||
174 | QList<Folder>* POP3wrapper::listFolders() | ||
175 | { | ||
176 | QList<Folder> * folders = new QList<Folder>(); | ||
177 | folders->setAutoDelete( false ); | ||
178 | Folder*inb=new Folder("INBOX","/"); | ||
179 | folders->append(inb); | ||
180 | return folders; | ||
181 | } | ||
182 | |||
183 | void POP3wrapper::deleteMail(const RecMail&mail) | ||
184 | { | ||
185 | login(); | ||
186 | if (!m_pop3) return; | ||
187 | int err = mailsession_remove_message(m_folder->fld_session,mail.getNumber()); | ||
188 | if (err != MAIL_NO_ERROR) { | ||
189 | Global::statusMessage(tr("error deleting mail")); | ||
190 | } | ||
191 | } | ||
192 | |||
193 | void POP3wrapper::answeredMail(const RecMail&) | ||
194 | { | ||
195 | } | ||
196 | |||
197 | int POP3wrapper::deleteAllMail(const Folder*) | ||
198 | { | ||
199 | login(); | ||
200 | if (!m_pop3) return 0; | ||
201 | int res = 1; | ||
202 | |||
203 | uint32_t result = 0; | ||
204 | int err = mailsession_messages_number(m_folder->fld_session,NULL,&result); | ||
205 | if (err != MAIL_NO_ERROR) { | ||
206 | Global::statusMessage(tr("Error getting folder info")); | ||
207 | return 0; | ||
208 | } | ||
209 | for (unsigned int i = 0; i < result; ++i) { | ||
210 | err = mailsession_remove_message(m_folder->fld_session,i+1); | ||
211 | if (err != MAIL_NO_ERROR) { | ||
212 | Global::statusMessage(tr("Error deleting mail %1").arg(i+1)); | ||
213 | res=0; | ||
214 | } | ||
215 | break; | ||
216 | } | ||
217 | return res; | ||
218 | } | ||
219 | |||
220 | void POP3wrapper::statusFolder(folderStat&target_stat,const QString&) | ||
221 | { | ||
222 | login(); | ||
223 | target_stat.message_count = 0; | ||
224 | target_stat.message_unseen = 0; | ||
225 | target_stat.message_recent = 0; | ||
226 | if (!m_pop3) return; | ||
227 | int r = mailsession_status_folder(m_folder->fld_session,0,&target_stat.message_count, | ||
228 | &target_stat.message_recent,&target_stat.message_unseen); | ||
229 | } | ||