summaryrefslogtreecommitdiff
path: root/noncore/net/mail/libmailwrapper/pop3wrapper.cpp
Side-by-side diff
Diffstat (limited to 'noncore/net/mail/libmailwrapper/pop3wrapper.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mail/libmailwrapper/pop3wrapper.cpp137
1 files changed, 73 insertions, 64 deletions
diff --git a/noncore/net/mail/libmailwrapper/pop3wrapper.cpp b/noncore/net/mail/libmailwrapper/pop3wrapper.cpp
index 67bde38..f5eca4a 100644
--- a/noncore/net/mail/libmailwrapper/pop3wrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/pop3wrapper.cpp
@@ -8,37 +8,33 @@
#include <qstring.h>
/* we don't fetch messages larger than 5 MB */
#define HARD_MSG_SIZE_LIMIT 5242880
POP3wrapper::POP3wrapper( POP3account *a )
- : Genericwrapper()
-{
+: Genericwrapper() {
account = a;
m_pop3 = NULL;
m_folder = NULL;
msgTempName = a->getFileName()+"_msg_cache";
last_msg_id = 0;
}
-POP3wrapper::~POP3wrapper()
-{
+POP3wrapper::~POP3wrapper() {
logout();
QFile msg_cache(msgTempName);
if (msg_cache.exists()) {
msg_cache.remove();
}
}
-void POP3wrapper::pop3_progress( size_t current, size_t maximum )
-{
+void POP3wrapper::pop3_progress( size_t current, size_t maximum ) {
qDebug( "POP3: %i of %i", current, maximum );
}
-RecBody POP3wrapper::fetchBody( const RecMail &mail )
-{
+RecBody POP3wrapper::fetchBody( const RecMail &mail ) {
int err = MAILPOP3_NO_ERROR;
char *message = 0;
size_t length = 0;
login();
if ( !m_pop3 ) {
@@ -87,65 +83,83 @@ RecBody POP3wrapper::fetchBody( const RecMail &mail )
msg_data->msg_message = message;
msg_data->msg_length = strlen(message);
}
body = parseMail(mailmsg);
/* clean up */
- if (mailmsg) mailmessage_free(mailmsg);
- if (message) free(message);
+ if (mailmsg)
+ mailmessage_free(mailmsg);
+ if (message)
+ free(message);
return body;
}
-void POP3wrapper::listMessages(const QString &, QList<RecMail> &target )
-{
+void POP3wrapper::listMessages(const QString &, QList<RecMail> &target ) {
login();
- if (!m_pop3) return;
+ if (!m_pop3)
+ return;
uint32_t res_messages,res_recent,res_unseen;
mailsession_status_folder(m_folder->fld_session,"INBOX",&res_messages,&res_recent,&res_unseen);
parseList(target,m_folder->fld_session,"INBOX");
Global::statusMessage( tr("Mailbox contains %1 mail(s)").arg(res_messages));
}
-void POP3wrapper::login()
-{
- if (account->getOffline()) return;
+void POP3wrapper::login() {
+ if (account->getOffline())
+ return;
/* we'll hold the line */
- if ( m_pop3 != NULL ) return;
+ if ( m_pop3 != NULL )
+ return;
const char *server, *user, *pass;
uint16_t port;
int err = MAILPOP3_NO_ERROR;
server = account->getServer().latin1();
port = account->getPort().toUInt();
- if ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) {
- LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true );
- login.show();
- if ( QDialog::Accepted == login.exec() ) {
- // ok
- user = login.getUser().latin1();
- pass = login.getPassword().latin1();
- } else {
- // cancel
- qDebug( "POP3: Login canceled" );
- return;
- }
- } else {
- user = account->getUser().latin1();
- pass = account->getPassword().latin1();
- }
-
- bool ssl = account->getSSL();
+ if ( account->getUser().isEmpty() || account->getPassword().isEmpty() ) {
+ LoginDialog login( account->getUser(), account->getPassword(), NULL, 0, true );
+ login.show();
+ if ( QDialog::Accepted == login.exec() ) {
+ // ok
+ user = login.getUser().latin1();
+ pass = login.getPassword().latin1();
+ } else {
+ // cancel
+ qDebug( "POP3: Login canceled" );
+ return;
+ }
+ } else {
+ user = account->getUser().latin1();
+ pass = account->getPassword().latin1();
+ }
+
+ // bool ssl = account->getSSL();
m_pop3=mailstorage_new(NULL);
- int conntype = (ssl?CONNECTION_TYPE_TLS:CONNECTION_TYPE_PLAIN);
-
- pop3_mailstorage_init(m_pop3,(char*)server,port,NULL,conntype,POP3_AUTH_TYPE_PLAIN,
- (char*)user,(char*)pass,0,0,0);
+
+ int conntypeset = account->ConnectionType();
+ int conntype = 0;
+ if ( conntypeset == 3 ) {
+ conntype = CONNECTION_TYPE_COMMAND;
+ } else if ( conntypeset == 2 ) {
+ conntype = CONNECTION_TYPE_TLS;
+ } else if ( conntypeset == 1 ) {
+ conntype = CONNECTION_TYPE_STARTTLS;
+ } else if ( conntypeset == 0 ) {
+ conntype = CONNECTION_TYPE_TRY_STARTTLS;
+ }
+
+ //(ssl?CONNECTION_TYPE_TLS:CONNECTION_TYPE_PLAIN);
+
+ pop3_mailstorage_init(m_pop3,(char*)server, port, NULL, conntype, POP3_AUTH_TYPE_PLAIN,
+ (char*)user,(char*)pass,0,0,0);
+
+
m_folder = mailfolder_new(m_pop3, NULL, NULL);
if (m_folder==0) {
Global::statusMessage(tr("Error initializing folder"));
mailstorage_free(m_pop3);
@@ -160,50 +174,47 @@ void POP3wrapper::login()
m_folder = 0;
mailstorage_free(m_pop3);
m_pop3 = 0;
}
}
-void POP3wrapper::logout()
-{
+void POP3wrapper::logout() {
int err = MAILPOP3_NO_ERROR;
- if ( m_pop3 == NULL ) return;
+ if ( m_pop3 == NULL )
+ return;
mailfolder_free(m_folder);
m_folder = 0;
mailstorage_free(m_pop3);
m_pop3 = 0;
}
-QList<Folder>* POP3wrapper::listFolders()
-{
+QList<Folder>* POP3wrapper::listFolders() {
QList<Folder> * folders = new QList<Folder>();
folders->setAutoDelete( false );
Folder*inb=new Folder("INBOX","/");
folders->append(inb);
return folders;
}
-void POP3wrapper::deleteMail(const RecMail&mail)
-{
+void POP3wrapper::deleteMail(const RecMail&mail) {
login();
- if (!m_pop3) return;
+ if (!m_pop3)
+ return;
int err = mailsession_remove_message(m_folder->fld_session,mail.getNumber());
if (err != MAIL_NO_ERROR) {
Global::statusMessage(tr("error deleting mail"));
}
}
-void POP3wrapper::answeredMail(const RecMail&)
-{
-}
+void POP3wrapper::answeredMail(const RecMail&) {}
-int POP3wrapper::deleteAllMail(const Folder*)
-{
+int POP3wrapper::deleteAllMail(const Folder*) {
login();
- if (!m_pop3) return 0;
+ if (!m_pop3)
+ return 0;
int res = 1;
uint32_t result = 0;
int err = mailsession_messages_number(m_folder->fld_session,NULL,&result);
if (err != MAIL_NO_ERROR) {
Global::statusMessage(tr("Error getting folder info"));
@@ -217,41 +228,39 @@ int POP3wrapper::deleteAllMail(const Folder*)
}
break;
}
return res;
}
-void POP3wrapper::statusFolder(folderStat&target_stat,const QString&)
-{
+void POP3wrapper::statusFolder(folderStat&target_stat,const QString&) {
login();
target_stat.message_count = 0;
target_stat.message_unseen = 0;
target_stat.message_recent = 0;
- if (!m_pop3) return;
+ if (!m_pop3)
+ return;
int r = mailsession_status_folder(m_folder->fld_session,0,&target_stat.message_count,
- &target_stat.message_recent,&target_stat.message_unseen);
+ &target_stat.message_recent,&target_stat.message_unseen);
}
-encodedString* POP3wrapper::fetchRawBody(const RecMail&mail)
-{
+encodedString* POP3wrapper::fetchRawBody(const RecMail&mail) {
char*target=0;
size_t length=0;
encodedString*res = 0;
mailmessage * mailmsg = 0;
int err = mailsession_get_message(m_folder->fld_session, mail.getNumber(), &mailmsg);
err = mailmessage_fetch(mailmsg,&target,&length);
- if (mailmsg) mailmessage_free(mailmsg);
+ if (mailmsg)
+ mailmessage_free(mailmsg);
if (target) {
res = new encodedString(target,length);
}
return res;
}
-const QString&POP3wrapper::getType()const
-{
+const QString&POP3wrapper::getType()const {
return account->getType();
}
-const QString&POP3wrapper::getName()const
-{
+const QString&POP3wrapper::getName()const {
return account->getAccountName();
}