diff --git a/ChangeLog b/ChangeLog index bbc3e0ceb..c39cd3a05 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,10 @@ -1998-05-25 Stefan Taferner (KMail-0.6.8) +1998-06-07 Stefan Taferner (KMail-0.6.8) + + * Message/Headers: Email addresses like + (with the <> around the address) no longer lead to + an empty field in the message list. + + * Headers: Removed extra space in header line(s). * Headers: Empty Subject moved From and Date one column left. Fixed (hopefully). diff --git a/kmheaders.cpp b/kmheaders.cpp index 7f68007cb..78218390b 100644 --- a/kmheaders.cpp +++ b/kmheaders.cpp @@ -178,25 +178,45 @@ void KMHeaders::msgRemoved(int id) } +//----------------------------------------------------------------------------- +QString KMHeaders::msgAsLbxString(KMMsgBase* aMsg) const +{ + QString result(256); + KMMsgStatus flag; + QString fromStr, subjStr; + + assert(aMsg!=NULL); + + flag = aMsg->status(); + + fromStr = KMMessage::stripEmailAddr(aMsg->from()); + if (fromStr.isEmpty()) fromStr = i18n("Unknown"); + + subjStr = aMsg->subject(); + if (subjStr.isEmpty()) subjStr = i18n("No Subject"); + + result.sprintf("%c\n%.100s\n%.100s\n%.40s", (char)flag, + (const char*)fromStr, (const char*)subjStr, + (const char*)aMsg->dateStr()); + return result; +} + + //----------------------------------------------------------------------------- void KMHeaders::msgHeaderChanged(int msgId) { - QString hdr(256); KMMsgStatus flag; KMMsgBase* mb; + QString fromStr, subjStr; if (!autoUpdate()) return; mb = mFolder->getMsgBase(msgId); assert(mb != NULL); - flag = mb->status(); - hdr.sprintf("%c\n%.100s \n%.100s \n%.40s ", (char)flag, - (const char*)KMMessage::stripEmailAddr(mb->from()), - (const char*)mb->subject(), - (const char*)mb->dateStr()); - changeItem(hdr, msgId); + changeItem(msgAsLbxString(mb), msgId); + flag = mb->status(); if (flag==KMMsgStatusNew) changeItemColor(darkRed, msgId); else if(flag==KMMsgStatusUnread) changeItemColor(darkBlue, msgId); } @@ -612,7 +632,7 @@ void KMHeaders::selectMessage(int idx, int/*colId*/) void KMHeaders::updateMessageList(void) { long i; - QString hdr(256); + QString str(256); KMMsgStatus flag; KMMsgBase* mb; @@ -627,12 +647,9 @@ void KMHeaders::updateMessageList(void) mb = mFolder->getMsgBase(i); assert(mb != NULL); // otherwise using count() above is wrong - flag = mb->status(); - hdr.sprintf("%c\n%s\n %s\n%s", (char)flag, - (const char*)KMMessage::stripEmailAddr(mb->from()), - (const char*)mb->subject(), (const char*)mb->dateStr()); - insertItem(hdr); + insertItem(msgAsLbxString(mb)); + flag = mb->status(); if (flag==KMMsgStatusNew) changeItemColor(darkRed); else if(flag==KMMsgStatusUnread) changeItemColor(darkBlue); } @@ -640,11 +657,11 @@ void KMHeaders::updateMessageList(void) setAutoUpdate(TRUE); repaint(); - hdr.sprintf(i18n("%d Messages, %d unread."), + str.sprintf(i18n("%d Messages, %d unread."), mFolder->count(), mFolder->countUnread()); - if (mFolder->isReadOnly()) hdr += i18n("Folder is read-only."); + if (mFolder->isReadOnly()) str += i18n("Folder is read-only."); - mOwner->statusMsg(hdr); + mOwner->statusMsg(str); kbp->idle(); } diff --git a/kmheaders.h b/kmheaders.h index 27026b99d..9183246d4 100644 --- a/kmheaders.h +++ b/kmheaders.h @@ -99,11 +99,14 @@ protected: /** Write per-folder config options. */ virtual void writeFolderConfig(void); - virtual void mouseReleaseEvent (QMouseEvent*); + virtual void mouseReleaseEvent(QMouseEvent*); /** Sort message list by current sort settings. */ virtual void sort(void); + /** Returns string for listbox from given message. */ + virtual QString msgAsLbxString(KMMsgBase*) const; + private: virtual void updateMessageList(void); KMFolder* mFolder; diff --git a/kmmessage.cpp b/kmmessage.cpp index 0f231ed95..8b612df7d 100644 --- a/kmmessage.cpp +++ b/kmmessage.cpp @@ -1168,7 +1168,7 @@ void KMMessage::viewSource(const QString aCaption) const //----------------------------------------------------------------------------- const QString KMMessage::stripEmailAddr(const QString aStr) { - int i, j; + int i, j, len; QString partA, partB, result; char endCh = '>'; @@ -1179,16 +1179,21 @@ const QString KMMessage::stripEmailAddr(const QString aStr) endCh = ')'; } if (i<0) return aStr; - partA = aStr.left(i); - j = aStr.find(endCh,i); + partA = aStr.left(i).stripWhiteSpace(); + j = aStr.find(endCh,i+1); if (j<0) return aStr; - partB = aStr.mid(i+1, j-i-1); + partB = aStr.mid(i+1, j-i-1).stripWhiteSpace(); - if (partA.find('@') >= 0) - result = partB.stripWhiteSpace(); - else result = partA.stripWhiteSpace(); + if (partA.find('@') >= 0 && !partB.isEmpty()) result = partB; + else if (!partA.isEmpty()) result = partA; + else result = aStr; - if (result[0]=='"' && result[result.length()-1]=='"') + len = result.length(); + if (result[0]=='"' && result[len-1]=='"') + result = result.mid(1, result.length()-2); + else if (result[0]=='<' && result[len-1]=='>') + result = result.mid(1, result.length()-2); + else if (result[0]=='(' && result[len-1]==')') result = result.mid(1, result.length()-2); return result; }