author | alwin <alwin> | 2004-01-06 12:57:52 (UTC) |
---|---|---|
committer | alwin <alwin> | 2004-01-06 12:57:52 (UTC) |
commit | 46753cb77877f4807ab9b1ba3e6c7a4eed7bc1bd (patch) (side-by-side diff) | |
tree | cd0b99b0856f65499f7d15aaf5670822183dd660 | |
parent | 71b6178795294dcdc85dee7a8ec8e8470c5b06e0 (diff) | |
download | opie-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
-rw-r--r-- | noncore/net/mail/libmailwrapper/mailtypes.cpp | 9 | ||||
-rw-r--r-- | noncore/net/mail/libmailwrapper/mailtypes.h | 1 | ||||
-rw-r--r-- | noncore/net/mail/libmailwrapper/statusmail.cpp | 8 | ||||
-rw-r--r-- | noncore/net/mail/taskbarapplet/mailapplet.cpp | 2 |
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; } } |