-rw-r--r-- | noncore/net/mail/imapwrapper.cpp | 1 | ||||
-rw-r--r-- | noncore/net/mail/libmailwrapper/imapwrapper.cpp | 1 | ||||
-rw-r--r-- | noncore/net/mail/libmailwrapper/mailtypes.cpp | 12 | ||||
-rw-r--r-- | noncore/net/mail/libmailwrapper/mailtypes.h | 5 | ||||
-rw-r--r-- | noncore/net/mail/mailtypes.cpp | 12 | ||||
-rw-r--r-- | noncore/net/mail/mailtypes.h | 5 | ||||
-rw-r--r-- | noncore/net/mail/viewmail.cpp | 94 | ||||
-rw-r--r-- | noncore/net/mail/viewmail.h | 26 | ||||
-rw-r--r-- | noncore/net/mail/viewmailbase.cpp | 7 |
9 files changed, 120 insertions, 43 deletions
diff --git a/noncore/net/mail/imapwrapper.cpp b/noncore/net/mail/imapwrapper.cpp index 3941cec..11bf3b8 100644 --- a/noncore/net/mail/imapwrapper.cpp +++ b/noncore/net/mail/imapwrapper.cpp @@ -685,8 +685,9 @@ void IMAPwrapper::fillBodyFields(RecPart&target_part,mailimap_body_fields*which) free(t); } } target_part.setEncoding(encoding); + target_part.setSize(which->bd_size); } QString IMAPwrapper::fetchPart(const RecMail&mail,const RecPart&part) { diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.cpp b/noncore/net/mail/libmailwrapper/imapwrapper.cpp index 3941cec..11bf3b8 100644 --- a/noncore/net/mail/libmailwrapper/imapwrapper.cpp +++ b/noncore/net/mail/libmailwrapper/imapwrapper.cpp @@ -685,8 +685,9 @@ void IMAPwrapper::fillBodyFields(RecPart&target_part,mailimap_body_fields*which) free(t); } } target_part.setEncoding(encoding); + target_part.setSize(which->bd_size); } QString IMAPwrapper::fetchPart(const RecMail&mail,const RecPart&part) { diff --git a/noncore/net/mail/libmailwrapper/mailtypes.cpp b/noncore/net/mail/libmailwrapper/mailtypes.cpp index 9c312e9..5cd45ed 100644 --- a/noncore/net/mail/libmailwrapper/mailtypes.cpp +++ b/noncore/net/mail/libmailwrapper/mailtypes.cpp @@ -67,9 +67,9 @@ const QStringList& RecMail::Bcc()const return bcc; } RecPart::RecPart() - : m_type(""),m_subtype(""),m_identifier(""),m_encoding(""),m_lines(0) + : m_type(""),m_subtype(""),m_identifier(""),m_encoding(""),m_lines(0),m_size(0) { m_Parameters.clear(); m_poslist.clear(); } @@ -77,8 +77,18 @@ RecPart::RecPart() 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; } diff --git a/noncore/net/mail/libmailwrapper/mailtypes.h b/noncore/net/mail/libmailwrapper/mailtypes.h index f308bc7..24518cf 100644 --- a/noncore/net/mail/libmailwrapper/mailtypes.h +++ b/noncore/net/mail/libmailwrapper/mailtypes.h @@ -75,9 +75,9 @@ typedef QMap<QString,QString> part_plist_t; class RecPart { protected: QString m_type,m_subtype,m_identifier,m_encoding; - unsigned int m_lines; + unsigned int m_lines,m_size; part_plist_t m_Parameters; /* describes the position in the mail */ QValueList<int> m_poslist; @@ -94,8 +94,11 @@ public: const QString&Encoding()const; void setEncoding(const QString&encoding); 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); diff --git a/noncore/net/mail/mailtypes.cpp b/noncore/net/mail/mailtypes.cpp index 9c312e9..5cd45ed 100644 --- a/noncore/net/mail/mailtypes.cpp +++ b/noncore/net/mail/mailtypes.cpp @@ -67,9 +67,9 @@ const QStringList& RecMail::Bcc()const return bcc; } RecPart::RecPart() - : m_type(""),m_subtype(""),m_identifier(""),m_encoding(""),m_lines(0) + : m_type(""),m_subtype(""),m_identifier(""),m_encoding(""),m_lines(0),m_size(0) { m_Parameters.clear(); m_poslist.clear(); } @@ -77,8 +77,18 @@ RecPart::RecPart() 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; } diff --git a/noncore/net/mail/mailtypes.h b/noncore/net/mail/mailtypes.h index f308bc7..24518cf 100644 --- a/noncore/net/mail/mailtypes.h +++ b/noncore/net/mail/mailtypes.h @@ -75,9 +75,9 @@ typedef QMap<QString,QString> part_plist_t; class RecPart { protected: QString m_type,m_subtype,m_identifier,m_encoding; - unsigned int m_lines; + unsigned int m_lines,m_size; part_plist_t m_Parameters; /* describes the position in the mail */ QValueList<int> m_poslist; @@ -94,8 +94,11 @@ public: const QString&Encoding()const; void setEncoding(const QString&encoding); 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); diff --git a/noncore/net/mail/viewmail.cpp b/noncore/net/mail/viewmail.cpp index 7b8494d..39c9820 100644 --- a/noncore/net/mail/viewmail.cpp +++ b/noncore/net/mail/viewmail.cpp @@ -1,34 +1,102 @@ #include <qtextbrowser.h> #include <qmessagebox.h> +#include <qtextstream.h> #include <qaction.h> #include <qapplication.h> #include "settings.h" #include "composemail.h" #include "viewmail.h" -AttachItem::AttachItem(QListView *parent, AttachItemStore &attachItemStore) - : QListViewItem(parent), _attachItemStore(attachItemStore) +AttachItem::AttachItem(QListView * parent,QListViewItem *after, const QString&mime,const QString&file,const QString&desc,int num) + : QListViewItem(parent,after),_partNum(num) { - setText(0, _attachItemStore.mimeType()); - setText(1, _attachItemStore.fileName()); - setText(2, _attachItemStore.description()); -} - -AttachItem::AttachItem(QListViewItem *parent, AttachItemStore &attachItemStore) - : QListViewItem(parent), _attachItemStore(attachItemStore) -{ - setText(0, _attachItemStore.mimeType()); - setText(1, _attachItemStore.fileName()); - setText(2, _attachItemStore.description()); + setText(0, mime); + setText(1, file); + setText(2, desc); } void ViewMail::setBody( RecBody body ) { m_mail[2] = body.Bodytext(); +attachbutton->setEnabled(body.Parts().count()>0); +attachments->setEnabled(body.Parts().count()>0); +if (body.Parts().count()==0) { + return; +} +AttachItem * curItem=0; +QString type=body.Description().Type()+"/"+body.Description().Subtype(); +QString desc; +double s = body.Description().Size(); +int w; +w=0; + +while (s>1024) { + s/=1024; + ++w; + if (w>=2) break; +} +QString q=""; +switch(w) { +case 1: + q="k"; + break; +case 2: + q="M"; + break; +default: + break; +} + +{ + /* I did not found a method to make a CONTENT reset on a QTextStream + so I use this construct that the stream will re-constructed in each + loop. To let it work, the textstream is packed into a own area of + code is it will be destructed after finishing its small job. + */ + QTextOStream o(&desc); + if (w>0) o.precision(2); else o.precision(0); + o.setf(QTextStream::fixed); + o << s << " " << q << "Byte"; +} + +curItem=new AttachItem(attachments,curItem,type,"Mailbody",desc,-1); +QString filename = ""; +for (unsigned int i = 0; i < body.Parts().count();++i) { + type = body.Parts()[i].Type()+"/"+body.Parts()[i].Subtype(); + part_plist_t::ConstIterator it = body.Parts()[i].Parameters().begin(); + for (;it!=body.Parts()[i].Parameters().end();++it) { + if (it.key().lower()=="name") { + filename=it.data(); + } + } + s = body.Parts()[i].Size(); + w = 0; + while (s>1024) { + s/=1024; + ++w; + if (w>=2) break; + } + switch(w) { + case 1: + q="k"; + break; + case 2: + q="M"; + break; + default: + q=""; + break; + } + QTextOStream o(&desc); + if (w>0) o.precision(2); else o.precision(0); + o.setf(QTextStream::fixed); + o << s << " " << q << "Byte"; + curItem=new AttachItem(attachments,curItem,type,filename,desc,i); +} } void ViewMail::setMail( RecMail mail ) { diff --git a/noncore/net/mail/viewmail.h b/noncore/net/mail/viewmail.h index 61baa1d..b497434 100644 --- a/noncore/net/mail/viewmail.h +++ b/noncore/net/mail/viewmail.h @@ -7,36 +7,16 @@ #include "viewmailbase.h" #include "mailtypes.h" -class AttachItemStore -{ -public: - void setMimeType(QString mimeType) { _mimeType = mimeType; } - QString mimeType() { return _mimeType; } - void setFileName(QString fileName) { _fileName = fileName; } - QString fileName() { return _fileName; } - void setDescription(QString description) { _description = description; } - QString description() { return _description; } - void setPartNum(QString partNum) { _partNum = partNum; } - QString partNum() { return _partNum; } - -private: - QString _mimeType, _fileName, _description, _partNum; - -}; - class AttachItem : public QListViewItem { public: - AttachItem(QListView *parent, AttachItemStore &attachment); - AttachItem(QListViewItem *parent, AttachItemStore &attachment); - - AttachItemStore attachItemStore() { return _attachItemStore; } + AttachItem(QListView * parent,QListViewItem *after, const QString&mime,const QString&file,const QString&desc,int num); + int Partnumber() { return _partNum; } private: - AttachItemStore _attachItemStore; - + int _partNum; }; class ViewMail : public ViewMailBase { diff --git a/noncore/net/mail/viewmailbase.cpp b/noncore/net/mail/viewmailbase.cpp index 197a665..38f92b4 100644 --- a/noncore/net/mail/viewmailbase.cpp +++ b/noncore/net/mail/viewmailbase.cpp @@ -53,11 +53,12 @@ ViewMailBase::ViewMailBase(QWidget *parent, const char *name, WFlags fl) attachments = new QListView(view); attachments->setMinimumHeight(90); attachments->setMaximumHeight(90); attachments->setAllColumnsShowFocus(true); - attachments->addColumn("Mime Type", 100); - attachments->addColumn("Filename", 100); - attachments->addColumn("Description", 100); + attachments->addColumn("Mime Type", 60); + attachments->addColumn(tr("Filename"), 100); + attachments->addColumn(tr("Size"), 80); + attachments->setSorting(-1); attachments->hide(); browser = new QTextBrowser(view); |