summaryrefslogtreecommitdiff
authoralwin <alwin>2004-01-06 12:57:52 (UTC)
committer alwin <alwin>2004-01-06 12:57:52 (UTC)
commit46753cb77877f4807ab9b1ba3e6c7a4eed7bc1bd (patch) (side-by-side diff)
treecd0b99b0856f65499f7d15aaf5670822183dd660
parent71b6178795294dcdc85dee7a8ec8e8470c5b06e0 (diff)
downloadopie-46753cb77877f4807ab9b1ba3e6c7a4eed7bc1bd.zip
opie-46753cb77877f4807ab9b1ba3e6c7a4eed7bc1bd.tar.gz
opie-46753cb77877f4807ab9b1ba3e6c7a4eed7bc1bd.tar.bz2
status of pop3 accounts slightly reworked
when starting opiemail from taskbar applet the status will be reset
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/net/mail/libmailwrapper/mailtypes.cpp9
-rw-r--r--noncore/net/mail/libmailwrapper/mailtypes.h1
-rw-r--r--noncore/net/mail/libmailwrapper/statusmail.cpp8
-rw-r--r--noncore/net/mail/taskbarapplet/mailapplet.cpp2
4 files changed, 16 insertions, 4 deletions
diff --git a/noncore/net/mail/libmailwrapper/mailtypes.cpp b/noncore/net/mail/libmailwrapper/mailtypes.cpp
index d8a36e7..bf91c63 100644
--- a/noncore/net/mail/libmailwrapper/mailtypes.cpp
+++ b/noncore/net/mail/libmailwrapper/mailtypes.cpp
@@ -80,256 +80,265 @@ void RecMail::setBcc(const QStringList&list)
}
const QStringList& RecMail::Bcc()const
{
return bcc;
}
RecPart::RecPart()
: m_type(""),m_subtype(""),m_identifier(""),m_encoding(""),m_description(""),m_lines(0),m_size(0)
{
m_Parameters.clear();
m_poslist.clear();
}
RecPart::~RecPart()
{
}
void RecPart::setSize(unsigned int size)
{
m_size = size;
}
const unsigned int RecPart::Size()const
{
return m_size;
}
void RecPart::setLines(unsigned int lines)
{
m_lines = lines;
}
const unsigned int RecPart::Lines()const
{
return m_lines;
}
const QString& RecPart::Type()const
{
return m_type;
}
void RecPart::setType(const QString&type)
{
m_type = type;
}
const QString& RecPart::Subtype()const
{
return m_subtype;
}
void RecPart::setSubtype(const QString&subtype)
{
m_subtype = subtype;
}
const QString& RecPart::Identifier()const
{
return m_identifier;
}
void RecPart::setIdentifier(const QString&identifier)
{
m_identifier = identifier;
}
const QString& RecPart::Encoding()const
{
return m_encoding;
}
void RecPart::setEncoding(const QString&encoding)
{
m_encoding = encoding;
}
const QString& RecPart::Description()const
{
return m_description;
}
void RecPart::setDescription(const QString&desc)
{
m_description = desc;
}
void RecPart::setParameters(const part_plist_t&list)
{
m_Parameters = list;
}
const part_plist_t& RecPart::Parameters()const
{
return m_Parameters;
}
void RecPart::addParameter(const QString&key,const QString&value)
{
m_Parameters[key]=value;
}
const QString RecPart::searchParamter(const QString&key)const
{
QString value("");
part_plist_t::ConstIterator it = m_Parameters.find(key);
if (it != m_Parameters.end()) {
value = it.data();
}
return value;
}
void RecPart::setPositionlist(const QValueList<int>&poslist)
{
m_poslist = poslist;
}
const QValueList<int>& RecPart::Positionlist()const
{
return m_poslist;
}
RecBody::RecBody()
: m_BodyText(),m_PartsList(),m_description()
{
m_PartsList.clear();
}
RecBody::~RecBody()
{
}
void RecBody::setBodytext(const QString&bodyText)
{
m_BodyText = bodyText;
}
const QString& RecBody::Bodytext()const
{
return m_BodyText;
}
void RecBody::setParts(const QValueList<RecPart>&parts)
{
m_PartsList.clear();
m_PartsList = parts;
}
const QValueList<RecPart>& RecBody::Parts()const
{
return m_PartsList;
}
void RecBody::addPart(const RecPart& part)
{
m_PartsList.append(part);
}
void RecBody::setDescription(const RecPart&des)
{
m_description = des;
}
const RecPart& RecBody::Description()const
{
return m_description;
}
/* handling encoded content */
encodedString::encodedString()
{
init();
}
encodedString::encodedString(const char*nContent,unsigned int nSize)
{
init();
setContent(nContent,nSize);
}
encodedString::encodedString(char*nContent,unsigned int nSize)
{
init();
setContent(nContent,nSize);
}
encodedString::encodedString(const encodedString&old)
{
init();
copy_old(old);
qDebug("encodedeString: copy constructor!");
}
encodedString& encodedString::operator=(const encodedString&old)
{
init();
copy_old(old);
qDebug("encodedString: assign operator!");
return *this;
}
encodedString::~encodedString()
{
clean();
}
void encodedString::init()
{
content = 0;
size = 0;
}
void encodedString::clean()
{
if (content) {
free(content);
}
content = 0;
size = 0;
}
void encodedString::copy_old(const encodedString&old)
{
clean();
if (old.size>0 && old.content) {
content = (char*)malloc(old.size*sizeof(char));
memcpy(content,old.content,size);
size = old.size;
}
}
const char*encodedString::Content()const
{
return content;
}
const int encodedString::Length()const
{
return size;
}
void encodedString::setContent(const char*nContent,int nSize)
{
if (nSize>0 && nContent) {
content = (char*)malloc(nSize*sizeof(char));
memcpy(content,nContent,nSize);
size = nSize;
}
}
void encodedString::setContent(char*nContent,int nSize)
{
content = nContent;
size = nSize;
}
+
+folderStat&folderStat::operator=(const folderStat&old)
+{
+ message_count = old.message_count;
+ message_unseen = old.message_unseen;
+ message_recent = old.message_recent;
+ return *this;
+}
+
diff --git a/noncore/net/mail/libmailwrapper/mailtypes.h b/noncore/net/mail/libmailwrapper/mailtypes.h
index 05c4816..b2047cb 100644
--- a/noncore/net/mail/libmailwrapper/mailtypes.h
+++ b/noncore/net/mail/libmailwrapper/mailtypes.h
@@ -1,192 +1,193 @@
#ifndef __MAIL_TYPES_H
#define __MAIL_TYPES_H
#define FLAG_ANSWERED 0
#define FLAG_FLAGGED 1
#define FLAG_DELETED 2
#define FLAG_SEEN 3
#define FLAG_DRAFT 4
#define FLAG_RECENT 5
#include <qlist.h>
#include <qbitarray.h>
#include <qstring.h>
#include <qstringlist.h>
#include <qmap.h>
#include <qvaluelist.h>
class AbstractMail;
/* a class to describe mails in a mailbox */
/* Attention!
From programmers point of view it would make sense to
store the mail body into this class, too.
But: not from the point of view of the device.
Mailbodies can be real large. So we request them when
needed from the mail-wrapper class direct from the server itself
(imap) or from a file-based cache (pop3?)
So there is no interface "const QString&body()" but you should
make a request to the mailwrapper with this class as parameter to
get the body. Same words for the attachments.
*/
class RecMail
{
public:
RecMail();
RecMail(const RecMail&old);
virtual ~RecMail();
const int getNumber()const{return msg_number;}
void setNumber(int number){msg_number=number;}
const QString&getDate()const{ return date; }
void setDate( const QString&a ) { date = a; }
const QString&getFrom()const{ return from; }
void setFrom( const QString&a ) { from = a; }
const QString&getSubject()const { return subject; }
void setSubject( const QString&s ) { subject = s; }
const QString&getMbox()const{return mbox;}
void setMbox(const QString&box){mbox = box;}
void setMsgid(const QString&id){msg_id=id;}
const QString&Msgid()const{return msg_id;}
void setReplyto(const QString&reply){replyto=reply;}
const QString&Replyto()const{return replyto;}
void setMsgsize(int size){msg_size = size;}
const int Msgsize()const{return msg_size;}
void setTo(const QStringList&list);
const QStringList&To()const;
void setCC(const QStringList&list);
const QStringList&CC()const;
void setBcc(const QStringList&list);
const QStringList&Bcc()const;
const QBitArray&getFlags()const{return msg_flags;}
void setFlags(const QBitArray&flags){msg_flags = flags;}
void setWrapper(AbstractMail*wrapper);
AbstractMail* Wrapper();
protected:
QString subject,date,from,mbox,msg_id,replyto;
int msg_number,msg_size;
QBitArray msg_flags;
QStringList to,cc,bcc;
AbstractMail*wrapper;
void init();
void copy_old(const RecMail&old);
};
typedef QMap<QString,QString> part_plist_t;
class RecPart
{
protected:
QString m_type,m_subtype,m_identifier,m_encoding,m_description;
unsigned int m_lines,m_size;
part_plist_t m_Parameters;
/* describes the position in the mail */
QValueList<int> m_poslist;
public:
RecPart();
virtual ~RecPart();
const QString&Type()const;
void setType(const QString&type);
const QString&Subtype()const;
void setSubtype(const QString&subtype);
const QString&Identifier()const;
void setIdentifier(const QString&identifier);
const QString&Encoding()const;
void setEncoding(const QString&encoding);
const QString&Description()const;
void setDescription(const QString&desc);
void setLines(unsigned int lines);
const unsigned int Lines()const;
void setSize(unsigned int size);
const unsigned int Size()const;
void setParameters(const part_plist_t&list);
const part_plist_t&Parameters()const;
void addParameter(const QString&key,const QString&value);
const QString searchParamter(const QString&key)const;
void setPositionlist(const QValueList<int>&poslist);
const QValueList<int>& Positionlist()const;
};
class RecBody
{
protected:
QString m_BodyText;
QValueList<RecPart> m_PartsList;
RecPart m_description;
public:
RecBody();
virtual ~RecBody();
void setBodytext(const QString&);
const QString& Bodytext()const;
void setDescription(const RecPart&des);
const RecPart& Description()const;
void setParts(const QValueList<RecPart>&parts);
const QValueList<RecPart>& Parts()const;
void addPart(const RecPart&part);
};
class encodedString
{
public:
encodedString();
/*
creates an new content string.
it makes a deep copy of it!
*/
encodedString(const char*nContent,unsigned int length);
/*
Take over the nContent. Means: it will just copy the pointer, not the content.
so make sure: No one else frees the string, the string has allocated with
malloc for compatibility with c-based libs
*/
encodedString(char*nContent,unsigned int nSize);
/* copy construkor - makes ALWAYS a deep copy!!!! */
encodedString(const encodedString&old);
/* assign operator - makes ALWAYS a deep copy!!!! */
encodedString& operator=(const encodedString&old);
/* destructor - cleans the content */
virtual ~encodedString();
/* returns a pointer to the content - do not delete yoursel! */
const char*Content()const;
/* returns the lengths of the content 'cause it must not be a null-terminated string! */
const int Length()const;
/*
makes a deep copy of nContent!
*/
void setContent(const char*nContent,int nSize);
/*
Take over the nContent. Means: it will just copy the pointer, not the content.
so make sure: No one else frees the string, the string has allocated with
malloc for compatibility with c-based libs
*/
void setContent(char*nContent,int nSize);
protected:
char * content;
unsigned int size;
void init();
void copy_old(const encodedString&old);
void clean();
};
struct folderStat
{
unsigned int message_count;
unsigned int message_unseen;
unsigned int message_recent;
+ folderStat&operator=(const folderStat&old);
};
#endif
diff --git a/noncore/net/mail/libmailwrapper/statusmail.cpp b/noncore/net/mail/libmailwrapper/statusmail.cpp
index 98f6204..1d7d559 100644
--- a/noncore/net/mail/libmailwrapper/statusmail.cpp
+++ b/noncore/net/mail/libmailwrapper/statusmail.cpp
@@ -1,89 +1,91 @@
#include "statusmail.h"
#include <qlist.h>
StatusMail::StatusMail(QList<Account>&list)
{
currentImapStat.message_count=0;
currentImapStat.message_unseen=0;
currentImapStat.message_recent=0;
lastPop3Stat = currentImapStat;
currentPop3Stat = currentImapStat;
connectionList.setAutoDelete(true);
connectionList.clear();
initAccounts(list);
}
StatusMail::~StatusMail()
{
}
void StatusMail::initAccounts(QList<Account>&accounts)
{
Account *it;
folderStat currentStat;
AbstractMail * current = 0;
currentPop3Stat.message_count=0;
currentPop3Stat.message_recent=0;
currentPop3Stat.message_unseen=0;
for ( it = accounts.first(); it; it = accounts.next() ) {
if ( it->getType().compare( "IMAP" ) == 0 ) {
IMAPaccount*ima = static_cast<IMAPaccount *>(it);
current = AbstractMail::getWrapper(ima);
connectionList.append(current);
current->statusFolder(currentStat);
currentImapStat.message_count+=currentStat.message_unseen;
currentImapStat.message_count+=currentStat.message_recent;
currentImapStat.message_count+=currentStat.message_count;
} else if ( it->getType().compare( "POP3" ) == 0 ) {
POP3account *pop3 = static_cast<POP3account *>(it);
current = AbstractMail::getWrapper(pop3);
connectionList.append(current);
current->statusFolder(currentStat);
- currentPop3Stat.message_count+=currentStat.message_unseen;
- currentPop3Stat.message_count+=currentStat.message_recent;
currentPop3Stat.message_count+=currentStat.message_count;
}
current->logout();
}
- lastPop3Stat = currentPop3Stat;
+ qDebug("Pop3 init count: %i",currentPop3Stat.message_count);
+ currentPop3Stat.message_recent = currentPop3Stat.message_unseen = 0;
+ lastPop3Stat.message_unseen = currentPop3Stat.message_unseen;
+ lastPop3Stat.message_recent = currentPop3Stat.message_recent;
+ lastPop3Stat.message_count = currentPop3Stat.message_count;
}
void StatusMail::reset_status()
{
lastPop3Stat = currentPop3Stat;
}
void StatusMail::check_current_stat(folderStat&targetStat)
{
AbstractMail*it = 0;
folderStat currentStat;
currentPop3Stat.message_recent = 0;
currentPop3Stat.message_count = 0;
currentPop3Stat.message_unseen = 0;
currentImapStat = currentPop3Stat;
for ( it = connectionList.first(); it; it = connectionList.next() ) {
it->statusFolder(currentStat);
it->logout();
if (it->getType().lower()=="imap") {
currentImapStat.message_unseen+=currentStat.message_unseen;
currentImapStat.message_recent+=currentStat.message_recent;
currentImapStat.message_count+=currentStat.message_count;
} else if (it->getType().lower()=="pop3") {
currentPop3Stat.message_count+=currentStat.message_count;
qDebug("Pop3 count: %i",currentPop3Stat.message_count);
}
}
qDebug("Pop3 last: %i",lastPop3Stat.message_count);
if (currentPop3Stat.message_count > lastPop3Stat.message_count) {
currentPop3Stat.message_recent = currentPop3Stat.message_count - lastPop3Stat.message_count;
currentPop3Stat.message_unseen = currentPop3Stat.message_recent;
} else {
lastPop3Stat.message_count = currentPop3Stat.message_count;
currentPop3Stat.message_recent = currentPop3Stat.message_unseen = 0;
}
targetStat = currentImapStat;
targetStat.message_unseen+=currentPop3Stat.message_unseen;
targetStat.message_recent+=currentPop3Stat.message_recent;
targetStat.message_count+=currentPop3Stat.message_count;
}
diff --git a/noncore/net/mail/taskbarapplet/mailapplet.cpp b/noncore/net/mail/taskbarapplet/mailapplet.cpp
index 991b5fb..6078013 100644
--- a/noncore/net/mail/taskbarapplet/mailapplet.cpp
+++ b/noncore/net/mail/taskbarapplet/mailapplet.cpp
@@ -1,139 +1,139 @@
#include <qpainter.h>
#include <qtimer.h>
#include <qpe/qcopenvelope_qws.h>
#include <qpe/resource.h>
#include <qpe/config.h>
#include <qpe/applnk.h>
#include <opie/odevice.h>
#include <libmailwrapper/settings.h>
#include "mailapplet.h"
using namespace Opie;
MailApplet::MailApplet( QWidget *parent )
: QWidget( parent ) {
m_config = new Config( "mail" );
m_config->setGroup( "Applet" );
setFixedWidth( AppLnk::smallIconSize() );
setFixedHeight( AppLnk::smallIconSize() );
hide();
m_newMails = 0;
m_statusMail = 0l;
if ( !m_config->readBoolEntry( "Disabled", false ) ) {
// delay 5 sec until the whole mail backend gets started .-)
QTimer::singleShot( 5000, this, SLOT( startup() ) );
}
repaint( true );
}
MailApplet::~MailApplet() {
if ( m_statusMail )
delete m_statusMail;
if ( m_config )
delete m_config;
}
void MailApplet::paintEvent( QPaintEvent* ) {
QPainter p( this );
p.drawPixmap( 0, 0, Resource::loadPixmap( "mail/inbox" ) );
QFont f( "vera", AppLnk::smallIconSize() );
QFontMetrics fm( f );
p.setFont( f );
p.setPen( Qt::blue );
p.drawText( AppLnk::smallIconSize()/3, AppLnk::smallIconSize() - 2, QString::number( m_newMails ) );
return;
}
void MailApplet::mouseReleaseEvent( QMouseEvent* e ) {
slotClicked();
}
void MailApplet::slotClicked() {
QCopEnvelope e( "QPE/System", "execute(QString)" );
e << QString( "opiemail" );
ODevice *device = ODevice::inst();
if ( !device-> ledList().isEmpty() ) {
OLed led = ( device->ledList().contains( Led_Mail ) ) ? Led_Mail : device->ledList()[0];
device->setLedState( led, Led_Off );
}
- // m_statusMails->reset_status();
+ if (m_statusMail) m_statusMail->reset_status();
}
void MailApplet::startup() {
Settings *settings = new Settings();
QList<Account> ma = settings->getAccounts();
m_statusMail = new StatusMail( ma );
delete settings;
m_intervalMs = m_config->readNumEntry( "CheckEvery", 5 ) * 60000;
m_intervalTimer = new QTimer();
m_intervalTimer->start( m_intervalMs );
connect( m_intervalTimer, SIGNAL( timeout() ), this, SLOT( slotCheck() ) );
}
void MailApplet::slotCheck() {
// Check wether the check interval has been changed.
int newIntervalMs = m_config->readNumEntry( "CheckEvery", 5 ) * 60000;
if ( newIntervalMs != m_intervalMs ) {
m_intervalTimer->changeInterval( newIntervalMs );
m_intervalMs = newIntervalMs;
}
if (m_statusMail == 0) {
return;
}
folderStat stat;
m_statusMail->check_current_stat( stat );
m_newMails = stat.message_unseen;
qDebug( QString( "test %1" ).arg( m_newMails ) );
if ( m_newMails > 0 ) {
ODevice *device = ODevice::inst();
if ( isHidden() )
show();
if ( m_config->readBoolEntry( "BlinkLed", true ) ) {
if ( !device->ledList().isEmpty() ) {
OLed led = ( device->ledList().contains( Led_Mail ) ) ? Led_Mail : device->ledList()[0];
device->setLedState( led, device->ledStateList( led ).contains( Led_BlinkSlow ) ? Led_BlinkSlow : Led_On );
}
}
if ( m_config->readBoolEntry( "PlaySound", false ) )
device->alarmSound();
Config cfg( "mail" );
cfg.setGroup( "Status" );
cfg.writeEntry( "newMails", m_newMails );
QCopEnvelope env( "QPE/Pim", "newMails(int)" );
env << m_newMails;
repaint( true );
} else {
ODevice *device = ODevice::inst();
if ( !isHidden() )
hide();
if ( !device->ledList().isEmpty() ) {
OLed led = ( device->ledList().contains( Led_Mail ) ) ? Led_Mail : device->ledList()[0];
device->setLedState( led, Led_Off );
}
Config cfg( "mail" );
cfg.setGroup( "Status" );
cfg.writeEntry( "newMails", m_newMails );
QCopEnvelope env( "QPE/Pim", "newMails(int)" );
env << m_newMails;
}
}