From 6b45c1f8e0293914c1328f15a665d2ea0fba7b43 Mon Sep 17 00:00:00 2001 From: jgf Date: Tue, 09 Dec 2003 21:36:56 +0000 Subject: POP3 support - first steps --- (limited to 'noncore/net') diff --git a/noncore/net/mail/accountview.cpp b/noncore/net/mail/accountview.cpp index df9fc11..6963027 100644 --- a/noncore/net/mail/accountview.cpp +++ b/noncore/net/mail/accountview.cpp @@ -1,8 +1,45 @@ #include "accountview.h" #include "imapwrapper.h" +#include "pop3wrapper.h" #include "mailtypes.h" #include "defines.h" + +/** + * POP3 Account stuff + */ + +POP3viewItem::POP3viewItem( POP3account *a, QListView *parent ) + : AccountViewItem( parent ) +{ + account = a; + wrapper = new POP3wrapper( account ); + setPixmap( 0, PIXMAP_POP3FOLDER ); + setText( 0, account->getAccountName() ); +} + +POP3viewItem::~POP3viewItem() +{ + delete wrapper; +} + +void POP3viewItem::refresh( QList &target ) +{ + qDebug( "POP3: refresh" ); + wrapper->listMessages( target ); +} + + +RecBody POP3viewItem::fetchBody( const RecMail & ) +{ + qDebug( "POP3 fetchBody: IMPLEMENT ME!!" ); + return RecBody(); +} + +/** + * IMAP Account stuff + */ + IMAPviewItem::IMAPviewItem( IMAPaccount *a, QListView *parent ) : AccountViewItem( parent ) { @@ -69,6 +106,10 @@ RecBody IMAPfolderItem::fetchBody(const RecMail&aMail) return imap->getWrapper()->fetchBody(aMail); } +/** + * Generic stuff + */ + AccountView::AccountView( QWidget *parent, const char *name, WFlags flags ) : QListView( parent, name, flags ) { @@ -86,6 +127,10 @@ void AccountView::populate( QList list ) IMAPaccount *imap = static_cast(it); qDebug( "added IMAP " + imap->getAccountName() ); (void) new IMAPviewItem( imap, this ); + } else if ( it->getType().compare( "POP3" ) == 0 ) { + POP3account *pop3 = static_cast(it); + qDebug( "added POP3 " + pop3->getAccountName() ); + (void) new POP3viewItem( pop3, this ); } } } diff --git a/noncore/net/mail/accountview.h b/noncore/net/mail/accountview.h index 805c2b3..fe832ec 100644 --- a/noncore/net/mail/accountview.h +++ b/noncore/net/mail/accountview.h @@ -8,6 +8,7 @@ #include "mailwrapper.h" class IMAPwrapper; +class POP3wrapper; class RecMail; class RecBody; @@ -21,6 +22,21 @@ public: virtual RecBody fetchBody(const RecMail&)=0; }; +class POP3viewItem : public AccountViewItem +{ + +public: + POP3viewItem( POP3account *a, QListView *parent ); + ~POP3viewItem(); + virtual void refresh( QList &target ); + virtual RecBody fetchBody(const RecMail & ); + +private: + POP3account *account; + POP3wrapper *wrapper; + +}; + class IMAPviewItem : public AccountViewItem { diff --git a/noncore/net/mail/defines.h b/noncore/net/mail/defines.h index 853454d..679459d 100644 --- a/noncore/net/mail/defines.h +++ b/noncore/net/mail/defines.h @@ -13,6 +13,7 @@ #define PIC_EDITACCOUNTS "opiemail/editaccounts" #define PIC_SYNC "opiemail/sync" #define PIC_IMAPFOLDER "opiemail/imapfolder" +#define PIC_POP3FOLDER "opiemail/pop3folder" #define ICON_COMPOSEMAIL QIconSet( Resource::loadPixmap( PIC_COMPOSEMAIL ) ) #define ICON_SENDQUEUED QIconSet( Resource::loadPixmap( PIC_SENDQUEUED ) ) @@ -23,6 +24,7 @@ #define ICON_SYNC QIconSet( Resource::loadPixmap( PIC_SYNC ) ) #define PIXMAP_IMAPFOLDER QPixmap( Resource::loadPixmap( PIC_IMAPFOLDER ) ) +#define PIXMAP_POP3FOLDER QPixmap( Resource::loadPixmap( PIC_POP3FOLDER ) ) #define IMAP_PORT "143" #define IMAP_SSL_PORT "993" diff --git a/noncore/net/mail/libmailwrapper/pop3wrapper.cpp b/noncore/net/mail/libmailwrapper/pop3wrapper.cpp new file mode 100644 index 0000000..08e97f4 --- a/dev/null +++ b/noncore/net/mail/libmailwrapper/pop3wrapper.cpp @@ -0,0 +1,74 @@ + +#include "pop3wrapper.h" +#include "mailtypes.h" +#include + +POP3wrapper::POP3wrapper( POP3account *a ) +{ + account = a; +} + +POP3wrapper::~POP3wrapper() +{ + logout(); +} + +void POP3wrapper::pop3_progress( size_t current, size_t maximum ) +{ + qDebug( "POP3: %i of %i", current, maximum ); +} + +void POP3wrapper::listMessages( QList &target ) +{ + login(); + //TODO: list messages + logout(); +} + +void POP3wrapper::login() +{ + logout(); + const char *server, *user, *pass; + uint16_t port; + int err = MAILPOP3_NO_ERROR; + + server = account->getServer().latin1(); + port = account->getPort().toUInt(); + user = account->getUser().latin1(); + pass = account->getPassword().latin1(); + + m_pop3 = mailpop3_new( 20, &pop3_progress ); + + // connect + err = mailpop3_socket_connect( m_pop3, (char *) server, port ); + if ( err != MAILPOP3_NO_ERROR ) { + qDebug( "pop3: error connecting to %s\n reason: %s", server, + m_pop3->response ); + mailpop3_free( m_pop3 ); + m_pop3 = NULL; + return; + } + qDebug( "POP3: connected!" ); + + // login + // TODO: decide if apop or plain login should be used + err = mailpop3_login( m_pop3, (char *) user, (char *) pass ); + if ( err != MAILPOP3_NO_ERROR ) { + qDebug( "pop3: error logging in: %s", m_pop3->response ); + logout(); + return; + } + + qDebug( "POP3: logged in!" ); +} + +void POP3wrapper::logout() +{ + int err = MAILPOP3_NO_ERROR; + if ( !m_pop3 ) return; + err = mailpop3_quit( m_pop3 ); + mailpop3_free( m_pop3 ); + m_pop3 = NULL; +} + + diff --git a/noncore/net/mail/libmailwrapper/pop3wrapper.h b/noncore/net/mail/libmailwrapper/pop3wrapper.h new file mode 100644 index 0000000..b791409 --- a/dev/null +++ b/noncore/net/mail/libmailwrapper/pop3wrapper.h @@ -0,0 +1,28 @@ +#ifndef __POP3WRAPPER +#define __POP3WRAPPER + +#include "mailwrapper.h" + +class RecMail; + +class POP3wrapper : public QObject +{ + Q_OBJECT + +public: + POP3wrapper( POP3account *a ); + virtual ~POP3wrapper(); + void listMessages( QList &target ); + static void pop3_progress( size_t current, size_t maximum ); + +protected: + void login(); + void logout(); + +private: + POP3account *account; + mailpop3 *m_pop3; + +}; + +#endif diff --git a/noncore/net/mail/libmailwrapper/settings.cpp b/noncore/net/mail/libmailwrapper/settings.cpp index 9632301..b580954 100644 --- a/noncore/net/mail/libmailwrapper/settings.cpp +++ b/noncore/net/mail/libmailwrapper/settings.cpp @@ -132,7 +132,6 @@ QString IMAPaccount::getUniqueFileName() QString unique; QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" ); - QStringList::Iterator it; QStringList imap = dir.entryList( "imap-*" ); do { @@ -210,7 +209,6 @@ QString POP3account::getUniqueFileName() QString unique; QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" ); - QStringList::Iterator it; QStringList imap = dir.entryList( "pop3-*" ); do { @@ -288,7 +286,6 @@ QString SMTPaccount::getUniqueFileName() QString unique; QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" ); - QStringList::Iterator it; QStringList imap = dir.entryList( "smtp-*" ); do { @@ -384,7 +381,6 @@ QString NNTPaccount::getUniqueFileName() QString unique; QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" ); - QStringList::Iterator it; QStringList imap = dir.entryList( "nntp-*" ); do { diff --git a/noncore/net/mail/mail.pro b/noncore/net/mail/mail.pro index 55d95ba..d333829 100644 --- a/noncore/net/mail/mail.pro +++ b/noncore/net/mail/mail.pro @@ -8,12 +8,13 @@ HEADERS = defines.h \ composemail.h \ accountview.h \ mainwindow.h \ - viewmail.h \ - viewmailbase.h \ + viewmail.h \ + viewmailbase.h \ opiemail.h \ - imapwrapper.h \ - mailtypes.h \ - mailistviewitem.h + imapwrapper.h \ + mailtypes.h \ + mailistviewitem.h \ + pop3wrapper.h SOURCES = main.cpp \ opiemail.cpp \ @@ -25,10 +26,11 @@ SOURCES = main.cpp \ addresspicker.cpp \ editaccounts.cpp \ logindialog.cpp \ - viewmail.cpp \ - viewmailbase.cpp \ + viewmail.cpp \ + viewmailbase.cpp \ settings.cpp \ - mailtypes.cpp + mailtypes.cpp \ + pop3wrapper.cpp INTERFACES = editaccountsui.ui \ selectmailtypeui.ui \ diff --git a/noncore/net/mail/opie-mail.control b/noncore/net/mail/opie-mail.control index a93067f..afe0947 100644 --- a/noncore/net/mail/opie-mail.control +++ b/noncore/net/mail/opie-mail.control @@ -2,7 +2,7 @@ Package: opie-mail Files: bin/opiemail apps/1Pim/opiemail.desktop pics/mail/*.png Priority: optional Section: opie/applications -Maintainer: Juergen Graf +Maintainer: Juergen Graf Architecture: arm Version: 0.0.1-$SUB_VERSION Depends: task-opie-minimal, libopie1 diff --git a/noncore/net/mail/pop3wrapper.cpp b/noncore/net/mail/pop3wrapper.cpp new file mode 100644 index 0000000..08e97f4 --- a/dev/null +++ b/noncore/net/mail/pop3wrapper.cpp @@ -0,0 +1,74 @@ + +#include "pop3wrapper.h" +#include "mailtypes.h" +#include + +POP3wrapper::POP3wrapper( POP3account *a ) +{ + account = a; +} + +POP3wrapper::~POP3wrapper() +{ + logout(); +} + +void POP3wrapper::pop3_progress( size_t current, size_t maximum ) +{ + qDebug( "POP3: %i of %i", current, maximum ); +} + +void POP3wrapper::listMessages( QList &target ) +{ + login(); + //TODO: list messages + logout(); +} + +void POP3wrapper::login() +{ + logout(); + const char *server, *user, *pass; + uint16_t port; + int err = MAILPOP3_NO_ERROR; + + server = account->getServer().latin1(); + port = account->getPort().toUInt(); + user = account->getUser().latin1(); + pass = account->getPassword().latin1(); + + m_pop3 = mailpop3_new( 20, &pop3_progress ); + + // connect + err = mailpop3_socket_connect( m_pop3, (char *) server, port ); + if ( err != MAILPOP3_NO_ERROR ) { + qDebug( "pop3: error connecting to %s\n reason: %s", server, + m_pop3->response ); + mailpop3_free( m_pop3 ); + m_pop3 = NULL; + return; + } + qDebug( "POP3: connected!" ); + + // login + // TODO: decide if apop or plain login should be used + err = mailpop3_login( m_pop3, (char *) user, (char *) pass ); + if ( err != MAILPOP3_NO_ERROR ) { + qDebug( "pop3: error logging in: %s", m_pop3->response ); + logout(); + return; + } + + qDebug( "POP3: logged in!" ); +} + +void POP3wrapper::logout() +{ + int err = MAILPOP3_NO_ERROR; + if ( !m_pop3 ) return; + err = mailpop3_quit( m_pop3 ); + mailpop3_free( m_pop3 ); + m_pop3 = NULL; +} + + diff --git a/noncore/net/mail/pop3wrapper.h b/noncore/net/mail/pop3wrapper.h new file mode 100644 index 0000000..b791409 --- a/dev/null +++ b/noncore/net/mail/pop3wrapper.h @@ -0,0 +1,28 @@ +#ifndef __POP3WRAPPER +#define __POP3WRAPPER + +#include "mailwrapper.h" + +class RecMail; + +class POP3wrapper : public QObject +{ + Q_OBJECT + +public: + POP3wrapper( POP3account *a ); + virtual ~POP3wrapper(); + void listMessages( QList &target ); + static void pop3_progress( size_t current, size_t maximum ); + +protected: + void login(); + void logout(); + +private: + POP3account *account; + mailpop3 *m_pop3; + +}; + +#endif diff --git a/noncore/net/mail/settings.cpp b/noncore/net/mail/settings.cpp index 9632301..b580954 100644 --- a/noncore/net/mail/settings.cpp +++ b/noncore/net/mail/settings.cpp @@ -132,7 +132,6 @@ QString IMAPaccount::getUniqueFileName() QString unique; QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" ); - QStringList::Iterator it; QStringList imap = dir.entryList( "imap-*" ); do { @@ -210,7 +209,6 @@ QString POP3account::getUniqueFileName() QString unique; QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" ); - QStringList::Iterator it; QStringList imap = dir.entryList( "pop3-*" ); do { @@ -288,7 +286,6 @@ QString SMTPaccount::getUniqueFileName() QString unique; QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" ); - QStringList::Iterator it; QStringList imap = dir.entryList( "smtp-*" ); do { @@ -384,7 +381,6 @@ QString NNTPaccount::getUniqueFileName() QString unique; QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" ); - QStringList::Iterator it; QStringList imap = dir.entryList( "nntp-*" ); do { -- cgit v0.9.0.2