summaryrefslogtreecommitdiff
authorjgf <jgf>2003-12-09 21:36:56 (UTC)
committer jgf <jgf>2003-12-09 21:36:56 (UTC)
commit6b45c1f8e0293914c1328f15a665d2ea0fba7b43 (patch) (side-by-side diff)
treed87ef7d3147a52429849a6921e7a8f31fde89aa8
parent0a1f6405780b18c9f3d953adcfd072de8fd4dc18 (diff)
downloadopie-6b45c1f8e0293914c1328f15a665d2ea0fba7b43.zip
opie-6b45c1f8e0293914c1328f15a665d2ea0fba7b43.tar.gz
opie-6b45c1f8e0293914c1328f15a665d2ea0fba7b43.tar.bz2
POP3 support - first steps
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/net/mail/accountview.cpp45
-rw-r--r--noncore/net/mail/accountview.h16
-rw-r--r--noncore/net/mail/defines.h2
-rw-r--r--noncore/net/mail/libmailwrapper/pop3wrapper.cpp74
-rw-r--r--noncore/net/mail/libmailwrapper/pop3wrapper.h28
-rw-r--r--noncore/net/mail/libmailwrapper/settings.cpp4
-rw-r--r--noncore/net/mail/mail.pro6
-rw-r--r--noncore/net/mail/opie-mail.control2
-rw-r--r--noncore/net/mail/pop3wrapper.cpp74
-rw-r--r--noncore/net/mail/pop3wrapper.h28
-rw-r--r--noncore/net/mail/settings.cpp4
11 files changed, 272 insertions, 11 deletions
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,9 +1,46 @@
#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<RecMail> &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 )
{
account = a;
@@ -68,8 +105,12 @@ 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 )
{
connect( this, SIGNAL( clicked( QListViewItem * ) ),
@@ -85,8 +126,12 @@ void AccountView::populate( QList<Account> list )
if ( it->getType().compare( "IMAP" ) == 0 ) {
IMAPaccount *imap = static_cast<IMAPaccount *>(it);
qDebug( "added IMAP " + imap->getAccountName() );
(void) new IMAPviewItem( imap, this );
+ } else if ( it->getType().compare( "POP3" ) == 0 ) {
+ POP3account *pop3 = static_cast<POP3account *>(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
@@ -7,8 +7,9 @@
#include "settings.h"
#include "mailwrapper.h"
class IMAPwrapper;
+class POP3wrapper;
class RecMail;
class RecBody;
class AccountViewItem : public QListViewItem
@@ -20,8 +21,23 @@ public:
virtual void refresh(QList<RecMail>&)=0;
virtual RecBody fetchBody(const RecMail&)=0;
};
+class POP3viewItem : public AccountViewItem
+{
+
+public:
+ POP3viewItem( POP3account *a, QListView *parent );
+ ~POP3viewItem();
+ virtual void refresh( QList<RecMail> &target );
+ virtual RecBody fetchBody(const RecMail & );
+
+private:
+ POP3account *account;
+ POP3wrapper *wrapper;
+
+};
+
class IMAPviewItem : public AccountViewItem
{
public:
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
@@ -12,8 +12,9 @@
#define PIC_EDITSETTINGS "opiemail/editsettings"
#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 ) )
#define ICON_SHOWFOLDERS QIconSet( Resource::loadPixmap( PIC_SHOWFOLDERS ) )
@@ -22,8 +23,9 @@
#define ICON_EDITACCOUNTS QIconSet( Resource::loadPixmap( PIC_EDITACCOUNTS ) )
#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"
#define SMTP_PORT "25"
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 <libetpan/mailpop3.h>
+
+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<RecMail> &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<RecMail> &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
@@ -131,9 +131,8 @@ QString IMAPaccount::getUniqueFileName()
int num = 0;
QString unique;
QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" );
- QStringList::Iterator it;
QStringList imap = dir.entryList( "imap-*" );
do {
unique.setNum( num++ );
@@ -209,9 +208,8 @@ QString POP3account::getUniqueFileName()
int num = 0;
QString unique;
QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" );
- QStringList::Iterator it;
QStringList imap = dir.entryList( "pop3-*" );
do {
unique.setNum( num++ );
@@ -287,9 +285,8 @@ QString SMTPaccount::getUniqueFileName()
int num = 0;
QString unique;
QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" );
- QStringList::Iterator it;
QStringList imap = dir.entryList( "smtp-*" );
do {
unique.setNum( num++ );
@@ -383,9 +380,8 @@ QString NNTPaccount::getUniqueFileName()
int num = 0;
QString unique;
QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" );
- QStringList::Iterator it;
QStringList imap = dir.entryList( "nntp-*" );
do {
unique.setNum( num++ );
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
@@ -12,9 +12,10 @@ HEADERS = defines.h \
viewmailbase.h \
opiemail.h \
imapwrapper.h \
mailtypes.h \
- mailistviewitem.h
+ mailistviewitem.h \
+ pop3wrapper.h
SOURCES = main.cpp \
opiemail.cpp \
mainwindow.cpp \
@@ -27,9 +28,10 @@ SOURCES = main.cpp \
logindialog.cpp \
viewmail.cpp \
viewmailbase.cpp \
settings.cpp \
- mailtypes.cpp
+ mailtypes.cpp \
+ pop3wrapper.cpp
INTERFACES = editaccountsui.ui \
selectmailtypeui.ui \
imapconfigui.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
@@ -1,9 +1,9 @@
Package: opie-mail
Files: bin/opiemail apps/1Pim/opiemail.desktop pics/mail/*.png
Priority: optional
Section: opie/applications
-Maintainer: Juergen Graf <jgf@openbsd.de>
+Maintainer: Juergen Graf <jgf@handhelds.org>
Architecture: arm
Version: 0.0.1-$SUB_VERSION
Depends: task-opie-minimal, libopie1
Description: Opie's mail and news client (POP3, IMAP and NNTP)
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 <libetpan/mailpop3.h>
+
+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<RecMail> &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<RecMail> &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
@@ -131,9 +131,8 @@ QString IMAPaccount::getUniqueFileName()
int num = 0;
QString unique;
QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" );
- QStringList::Iterator it;
QStringList imap = dir.entryList( "imap-*" );
do {
unique.setNum( num++ );
@@ -209,9 +208,8 @@ QString POP3account::getUniqueFileName()
int num = 0;
QString unique;
QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" );
- QStringList::Iterator it;
QStringList imap = dir.entryList( "pop3-*" );
do {
unique.setNum( num++ );
@@ -287,9 +285,8 @@ QString SMTPaccount::getUniqueFileName()
int num = 0;
QString unique;
QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" );
- QStringList::Iterator it;
QStringList imap = dir.entryList( "smtp-*" );
do {
unique.setNum( num++ );
@@ -383,9 +380,8 @@ QString NNTPaccount::getUniqueFileName()
int num = 0;
QString unique;
QDir dir( (QString) getenv( "HOME" ) + "/Applications/opiemail" );
- QStringList::Iterator it;
QStringList imap = dir.entryList( "nntp-*" );
do {
unique.setNum( num++ );