[prev in list] [next in list] [prev in thread] [next in thread]
List: kmail-devel
Subject: Re: proposal for threading improvements
From: Till Adam <till () adam-lilienthal ! de> (by way of Till Adam <till () adam-lilienthal ! d
Date: 2003-02-24 19:09:11
[Download RAW message or body]
On Monday 24 February 2003 04:25, Don Sanders wrote:
> On Monday 24 February 2003 03:18, Ingo Kl=F6cker wrote:
> > On Sunday 23 February 2003 14:32, Till Adam wrote:
> >
> > Instead of storing the In-reply-to string we only store an MD5 hash
> > of this in the index (and we thread messages according to this hash
> > value). You should do the same for the References. As you propose
> > below it should be enough to store only the last two entries in the
> > References header. Therefore I propose to only add the last but one
> > References entry (as MD5 hash) to the index. (The last entry resp.
> > the In-reply-to header, which both should be identical, is already
> > there.)
Patch attached. I've tested mboxes and implemented, but not tested, maildir
folders. Can someone confirm that works as well, please?
> > > How about imap,
> > > what would you consider a half way clean approach to this?
> >
> > IIRC (it was mentioned a while ago by someone) one can fetch single
> > headers from the IMAP server. So the clean approach would be to
> > fetch the ENVELOPE and the References header from the IMAP server.
> > Carsten (or someone else who knows more about IMAP than me) can
> > probably give you a better answer.
I'll look into that. Don't hold your breath, though, I know next to nothing
about imap, so some reading up is necessary, unless someone else wants to
implement that.
> BTW I might be working on adding support for subject based threading
> soon.
Nice. Cheers,
Till
["replyToAuxID.diff" (text/x-diff)]
? .exrc
? Doxyfile
? diff
? kmail.kdevelop
? kmail.kdevses
? replyToAuxID.diff
? thread.diff
? thread2.diff
Index: kmfolderindex.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/kmfolderindex.cpp,v
retrieving revision 1.4
diff -u -w -r1.4 kmfolderindex.cpp
--- kmfolderindex.cpp 18 Feb 2003 19:22:21 -0000 1.4
+++ kmfolderindex.cpp 24 Feb 2003 19:08:27 -0000
@@ -15,7 +15,7 @@
#endif
// Current version of the table of contents (index) files
-#define INDEX_VERSION 1506
+#define INDEX_VERSION 1507
#ifndef MAX_LINE
#define MAX_LINE 4096
Index: kmfoldermaildir.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/kmfoldermaildir.cpp,v
retrieving revision 1.48
diff -u -w -r1.48 kmfoldermaildir.cpp
--- kmfoldermaildir.cpp 3 Feb 2003 07:03:57 -0000 1.48
+++ kmfoldermaildir.cpp 24 Feb 2003 19:08:31 -0000
@@ -557,7 +557,7 @@
QCString dateStr, fromStr, toStr, subjStr;
QCString xmarkStr, replyToIdStr, msgIdStr, referencesStr;
- QCString statusStr;
+ QCString statusStr, replyToAuxIdStr;
// iterate through this file until done
while (!atEof)
@@ -573,7 +573,10 @@
if ((replyToIdStr.isEmpty() || (replyToIdStr[0] != '<')) &&
!referencesStr.isEmpty() && referencesStr[0] == '<')
{
- replyToIdStr = referencesStr;
+ // use the last reference, instead of missing In-Reply-To
+ int leftAngle = referencesStr.findRev( '<' );
+ if (leftAngle != -1)
+ replyToIdStr = referencesStr.mid(leftAngle);
}
if (!statusStr.isEmpty())
@@ -593,8 +596,9 @@
KMMsgInfo *mi = new KMMsgInfo(this);
mi->init(subjStr, fromStr, toStr, 0, status, xmarkStr, replyToIdStr,
- msgIdStr, file.local8Bit(), KMMsgEncryptionStateUnknown,
- KMMsgSignatureStateUnknown, KMMsgMDNStateUnknown, f.size());
+ replyToAuxIdStr, msgIdStr, file.local8Bit(),
+ KMMsgEncryptionStateUnknown, KMMsgSignatureStateUnknown,
+ KMMsgMDNStateUnknown, f.size());
if (!dateStr.isEmpty())
mi->setDate(dateStr);
mi->setDirty(false);
@@ -657,12 +661,21 @@
referencesStr = QCString(line+12);
leftAngle = referencesStr.findRev('<');
+ leftAngle = referencesStr.findRev( '<', leftAngle-1);
if (leftAngle != -1)
referencesStr = referencesStr.mid(leftAngle);
+ rightAngle = referencesStr.findRev( '>' );
+ if (rightAngle != -1)
+ referencesStr.truncate( rightAngle + 1 );
+ // Store the second to last reference in the replyToAuxIdStr
+ // It is a good candidate for threading the message below if the
+ // message In-Reply-To points to is not kept in this folder,
+ // but e.g. in an Outbox
+ replyToAuxIdStr = referencesStr;
rightAngle = referencesStr.find('>');
if (rightAngle != -1)
- referencesStr.truncate(rightAngle + 1);
+ replyToAuxIdStr.truncate( rightAngle + 1 );
}
else if (strncasecmp(line, "Message-Id:", 11) == 0 && isblank(line[11]))
{
Index: kmfoldermbox.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/kmfoldermbox.cpp,v
retrieving revision 1.56
diff -u -w -r1.56 kmfoldermbox.cpp
--- kmfoldermbox.cpp 18 Feb 2003 02:13:34 -0000 1.56
+++ kmfoldermbox.cpp 24 Feb 2003 19:08:31 -0000
@@ -527,7 +527,7 @@
char line[MAX_LINE];
char status[8], xstatus[8];
QCString subjStr, dateStr, fromStr, toStr, xmarkStr, *lastStr=0;
- QCString replyToIdStr, referencesStr, msgIdStr;
+ QCString replyToIdStr, replyToAuxIdStr, referencesStr, msgIdStr;
bool atEof = FALSE;
bool inHeader = TRUE;
KMMsgInfo* mi;
@@ -554,6 +554,8 @@
*xstatus = '\0';
xmarkStr = "";
replyToIdStr = "";
+ replyToAuxIdStr = "";
+ referencesStr = "";
msgIdStr = "";
needStatus = 3;
@@ -583,10 +585,15 @@
{
if ((replyToIdStr.isEmpty() || (replyToIdStr[0] != '<')) &&
!referencesStr.isEmpty() && referencesStr[0] == '<') {
- replyToIdStr = referencesStr;
+ // use the last reference, instead of missing In-Reply-To
+ int leftAngle = referencesStr.findRev( '<' );
+ if (leftAngle != -1)
+ replyToIdStr = referencesStr.mid(leftAngle);
}
+
mi = new KMMsgInfo(this);
- mi->init(subjStr, fromStr, toStr, 0, KMMsgStatusNew, xmarkStr, replyToIdStr, msgIdStr,
+ mi->init(subjStr, fromStr, toStr, 0, KMMsgStatusNew, xmarkStr,
+ replyToIdStr, replyToAuxIdStr, msgIdStr,
KMMsgEncryptionStateUnknown, KMMsgSignatureStateUnknown,
KMMsgMDNStateUnknown, offs, size);
mi->setStatus("RO","O");
@@ -599,6 +606,7 @@
needStatus = 3;
xmarkStr = "";
replyToIdStr = "";
+ replyToAuxIdStr = "";
referencesStr = "";
msgIdStr = "";
dateStr = "";
@@ -658,11 +666,22 @@
int leftAngle, rightAngle;
referencesStr = QCString(line+12);
leftAngle = referencesStr.findRev( '<' );
+ leftAngle = referencesStr.findRev( '<', leftAngle-1);
if (leftAngle != -1)
referencesStr = referencesStr.mid( leftAngle );
- rightAngle = referencesStr.find( '>' );
+ rightAngle = referencesStr.findRev( '>' );
if (rightAngle != -1)
referencesStr.truncate( rightAngle + 1 );
+
+ // Store the second to last reference in the replyToAuxIdStr
+ // It is a good candidate for threading the message below if the
+ // message In-Reply-To points to is not kept in this folder,
+ // but e.g. in an Outbox
+ replyToAuxIdStr = referencesStr;
+ rightAngle = referencesStr.find( '>' );
+ if (rightAngle != -1)
+ replyToAuxIdStr.truncate( rightAngle + 1 );
+
}
else if (strncasecmp(line,"Message-Id:",11)==0 && isblank(line[11])) {
int rightAngle;
Index: kmheaders.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/kmheaders.cpp,v
retrieving revision 1.483
diff -u -w -r1.483 kmheaders.cpp
--- kmheaders.cpp 16 Feb 2003 16:00:09 -0000 1.483
+++ kmheaders.cpp 24 Feb 2003 19:08:41 -0000
@@ -2385,13 +2385,7 @@
}
}
}
- KMMsgBase *kmb;
- while(KMHeaderItem *i = items.pop()) {
- kmb = mFolder->getMsgBase( i->mMsgId );
- QString replymd5 = kmb->replyToIdMD5();
- int parent_id = -2; //no parent, top level
- if(!replymd5.isEmpty()) {
if(mIdTree.isEmpty()) {
QString md5;
for(int x = 0; x < mFolder->count(); x++) {
@@ -2405,12 +2399,33 @@
}
}
}
- KMHeaderItem *p = mIdTree[replymd5];
+
+ KMMsgBase *kmb;
+ while(KMHeaderItem *i = items.pop()) {
+ kmb = mFolder->getMsgBase( i->mMsgId );
+
+ QString replymd5 = kmb->replyToIdMD5();
+ int parent_id = -2; //no parent, top level
+ KMHeaderItem *p = NULL;
+ if(!replymd5.isEmpty())
+ p = mIdTree[replymd5];
+
+ if (!p) {
+ // If we dont have a replyToId, or if we have one and the
+ // corresponding message is not in this folder, as happens
+ // if you keep your outgoing messages in an OUTBOX, for
+ // example, try the list of references, because the second
+ // to last will likely be in this folder. replyToAuxIdMD5 ontains
+ // the second to last one.
+ QString ref = kmb->replyToAuxIdMD5();
+ if (!ref.isEmpty())
+ p = mIdTree[ref];
+ }
if(p)
parent_id = p->mMsgId;
else
parent_id = -1;
- }
+
internalWriteItem(sortStream, mFolder, i->mMsgId, parent_id,
i->key(mSortCol, !mSortDescending), FALSE);
//double check for magic headers
@@ -2440,7 +2455,6 @@
return TRUE;
}
-
void KMHeaders::appendUnsortedItem(KMHeaderItem *khi)
{
QString sortFile = KMAIL_SORT_FILE(mFolder);
@@ -2565,6 +2579,8 @@
return ret;
}
+
+
bool KMHeaders::readSortOrder(bool set_selection)
{
//all cases
@@ -2768,7 +2784,6 @@
if (appended && threaded && !unparented.isEmpty()) {
CREATE_TIMER(reparent);
START_TIMER(reparent);
- KMSortCacheItem *i;
QDict<KMSortCacheItem> msgs(mFolder->count() * 2);
for(int x = 0; x < mFolder->count(); x++) {
QString md5 = mFolder->getMsgBase(x)->msgIdMD5();
@@ -2776,12 +2791,28 @@
msgs.insert(md5, sortCache[x]);
}
for(QPtrListIterator<KMSortCacheItem> it(unparented); it.current(); ++it) {
- replyToIdMD5 = mFolder->getMsgBase((*it)->id())->replyToIdMD5();
- if(!replyToIdMD5.isEmpty() && (i = msgs[replyToIdMD5])) {
- i->addUnsortedChild((*it));
+ KMSortCacheItem *parent=NULL;
+ KMMsgBase *msg = mFolder->getMsgBase((*it)->id());
+ QString replyToIdMD5 = msg->replyToIdMD5();
+ if(!replyToIdMD5.isEmpty())
+ parent = msgs[replyToIdMD5];
+ if (!parent) {
+ // If we dont have a replyToId, or if we have one and the
+ // corresponding message is not in this folder, as happens
+ // if you keep your outgoing messages in an OUTBOX, for
+ // example, try the list of references, because the second
+ // to last will likely be in this folder. replyToAuxIdMD5
+ // contains the second to last one.
+ QString ref = msg->replyToAuxIdMD5();
+ if (!ref.isEmpty())
+ parent = msgs[ref];
+ }
+ if ( parent ) {
+ parent->addUnsortedChild((*it));
if(sortStream)
(*it)->updateSortFile(sortStream, mFolder);
- } else { //oh well we tried, to the root with you!
+ } else {
+ //oh well we tried, to the root with you!
root.addUnsortedChild((*it));
}
}
@@ -2911,6 +2942,7 @@
fclose(sortStream);
return TRUE;
}
+
//-----------------------------------------------------------------------------
Index: kmmessage.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/kmmessage.cpp,v
retrieving revision 1.375
diff -u -w -r1.375 kmmessage.cpp
--- kmmessage.cpp 23 Feb 2003 19:12:09 -0000 1.375
+++ kmmessage.cpp 24 Feb 2003 19:08:56 -0000
@@ -2136,6 +2136,40 @@
return result;
}
+//-----------------------------------------------------------------------------
+QString KMMessage::references(void) const
+{
+ int leftAngle, rightAngle;
+ QString references = headerField("References");
+
+ // keep the last two entries for threading
+ leftAngle = references.findRev( '<' );
+ leftAngle = references.findRev( '<', leftAngle-1 );
+ if (leftAngle != -1)
+ references = references.mid( leftAngle );
+ rightAngle = references.findRev( '>' );
+ if (rightAngle != -1)
+ references.truncate( rightAngle + 1 );
+
+ if (!references.isEmpty() && references[0] == '<')
+ return references;
+ else
+ return "";
+}
+
+//-----------------------------------------------------------------------------
+QString KMMessage::replyToAuxIdMD5(void) const
+{
+ int rightAngle;
+ QString result = references();
+ // references contains two items, use the first one
+ // (the second to last reference)
+ rightAngle = result.find( '>' );
+ if (rightAngle != -1)
+ result.truncate (rightAngle+1);
+
+ return KMMessagePart::encodeBase64( result );
+}
//-----------------------------------------------------------------------------
void KMMessage::setReplyToId(const QString& aStr)
Index: kmmessage.h
===================================================================
RCS file: /home/kde/kdepim/kmail/kmmessage.h,v
retrieving revision 1.128
diff -u -w -r1.128 kmmessage.h
--- kmmessage.h 23 Feb 2003 19:12:09 -0000 1.128
+++ kmmessage.h 24 Feb 2003 19:08:58 -0000
@@ -352,7 +352,7 @@
is found, @p newPrefix + ' ' is prepended to the subject and the
resulting string is returned. If @p replace is true, any
sequence of whitespace-delimited prefixes at the beginning of
- @ref #subject() is replaced by @p newPrefix.
+ @ref #subject() is replaced by @p newPrefix
**/
QString cleanSubject(const QStringList& prefixRegExps, bool replace,
const QString& newPrefix) const;
@@ -376,12 +376,29 @@
virtual void setReplyToId(const QString& aStr);
virtual QString replyToIdMD5(void) const;
+ /** Get the second to last id from the References header
+ field. If outgoing messages are not kept in the same
+ folder as incoming ones, this will be a good place to
+ thread the message beneath.
+ bob <- second to last reference points to this
+ |_kmailuser <- not in our folder, but Outbox
+ |_bob <- In-Reply-To points to our mail above
+
+ Thread like this:
+ bob
+ |_bob
+
+ using replyToAuxIdMD5
+ */
+ virtual QString replyToAuxIdMD5(void) const;
+
/** Get or set the 'Message-Id' header field */
virtual QString msgId(void) const;
virtual void setMsgId(const QString& aStr);
virtual QString msgIdMD5(void) const;
- /** Set the references for this message */
+ /** Get or set the references for this message */
+ virtual QString references(void) const;
virtual void setReferences(const QCString& aStr);
/** Returns the message ID, useful for followups */
Index: kmmsgbase.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/kmmsgbase.cpp,v
retrieving revision 1.137
diff -u -w -r1.137 kmmsgbase.cpp
--- kmmsgbase.cpp 18 Feb 2003 03:26:17 -0000 1.137
+++ kmmsgbase.cpp 24 Feb 2003 19:09:00 -0000
@@ -1033,6 +1033,8 @@
STORE_DATA_LEN(MsgToPart, tmp_str.unicode(), tmp_str.length() * 2, true);
tmp_str = replyToIdMD5().stripWhiteSpace();
STORE_DATA_LEN(MsgReplyToIdMD5Part, tmp_str.unicode(), tmp_str.length() * 2, true);
+ tmp_str = replyToAuxIdMD5().stripWhiteSpace();
+ STORE_DATA_LEN(MsgReplyToAuxIdMD5Part, tmp_str.unicode(), tmp_str.length() * 2, true);
tmp_str = xmark().stripWhiteSpace();
STORE_DATA_LEN(MsgXMarkPart, tmp_str.unicode(), tmp_str.length() * 2, true);
tmp_str = fileName().stripWhiteSpace();
Index: kmmsgbase.h
===================================================================
RCS file: /home/kde/kdepim/kmail/kmmsgbase.h,v
retrieving revision 1.52
diff -u -w -r1.52 kmmsgbase.h
--- kmmsgbase.h 26 Dec 2002 10:18:15 -0000 1.52
+++ kmmsgbase.h 24 Feb 2003 19:09:01 -0000
@@ -148,6 +148,7 @@
virtual QString toStrip(void) const = 0;
virtual QString replyToIdMD5(void) const = 0;
virtual QString msgIdMD5(void) const = 0;
+ virtual QString replyToAuxIdMD5(void) const = 0;
virtual time_t date(void) const = 0;
virtual QString dateStr(void) const;
virtual QString xmark(void) const = 0;
@@ -275,16 +276,17 @@
MsgSubjectPart = 2,
MsgToPart = 3,
MsgReplyToIdMD5Part = 4,
- MsgIdMD5Part = 5,
- MsgXMarkPart = 6,
+ MsgReplyToAuxIdMD5Part = 5,
+ MsgIdMD5Part = 6,
+ MsgXMarkPart = 7,
//unsigned long
- MsgOffsetPart = 7,
- MsgStatusPart = 8,
- MsgSizePart = 9,
- MsgDatePart = 10,
- MsgFilePart = 11,
- MsgCryptoStatePart = 12,
- MsgMDNSentPart = 13
+ MsgOffsetPart = 8,
+ MsgStatusPart = 9,
+ MsgSizePart = 10,
+ MsgDatePart = 11,
+ MsgFilePart = 12,
+ MsgCryptoStatePart = 13,
+ MsgMDNSentPart = 14
};
/** access to long msgparts */
off_t getLongPart(MsgPartType) const;
Index: kmmsginfo.cpp
===================================================================
RCS file: /home/kde/kdepim/kmail/kmmsginfo.cpp,v
retrieving revision 1.43
diff -u -w -r1.43 kmmsginfo.cpp
--- kmmsginfo.cpp 26 Dec 2002 10:18:15 -0000 1.43
+++ kmmsginfo.cpp 24 Feb 2003 19:09:02 -0000
@@ -17,12 +17,12 @@
SUBJECT_SET = 0x01, TO_SET = 0x02, REPLYTO_SET = 0x04, MSGID_SET=0x08,
DATE_SET = 0x10, OFFSET_SET = 0x20, SIZE_SET = 0x40,
XMARK_SET=0x100, FROM_SET=0x200, FILE_SET=0x400, ENCRYPTION_SET=0x800,
- SIGNATURE_SET=0x1000, MDN_SET=0x2000,
+ SIGNATURE_SET=0x1000, MDN_SET=0x2000, REPLYTOAUX_SET = 0x4000,
ALL_SET = 0xFFFF, NONE_SET = 0x0000
};
- ushort modifiers;
- QString subject, from, to, replyToIdMD5, msgIdMD5, xmark, file;
+ uint modifiers;
+ QString subject, from, to, replyToIdMD5, replyToAuxIdMD5, msgIdMD5, xmark, file;
off_t folderOffset;
size_t msgSize;
time_t date;
@@ -53,6 +53,11 @@
modifiers |= REPLYTO_SET;
replyToIdMD5 = other.replyToIdMD5;
}
+ if (other.modifiers & REPLYTOAUX_SET) {
+ modifiers |= REPLYTOAUX_SET;
+ replyToAuxIdMD5 = other.replyToAuxIdMD5;
+ }
+
if(other.modifiers & MSGID_SET) {
modifiers |= MSGID_SET;
msgIdMD5 = other.msgIdMD5;
@@ -143,6 +148,7 @@
kd->from = msg.fromStrip();
kd->to = msg.toStrip();
kd->replyToIdMD5 = msg.replyToIdMD5();
+ kd->replyToAuxIdMD5 = msg.replyToAuxIdMD5();
kd->msgIdMD5 = msg.msgIdMD5();
kd->xmark = msg.xmark();
mStatus = msg.status();
@@ -161,7 +167,8 @@
void KMMsgInfo::init(const QCString& aSubject, const QCString& aFrom,
const QCString& aTo, time_t aDate,
KMMsgStatus aStatus, const QCString& aXMark,
- const QCString& replyToId, const QCString& msgId,
+ const QCString& replyToId, const QCString& replyToAuxId,
+ const QCString& msgId,
KMMsgEncryptionState encryptionState,
KMMsgSignatureState signatureState,
KMMsgMDNSentState mdnSentState,
@@ -176,6 +183,7 @@
kd->from = KMMessage::stripEmailAddr( decodeRFC2047String(aFrom) );
kd->to = KMMessage::stripEmailAddr( decodeRFC2047String(aTo) );
kd->replyToIdMD5 = KMMessagePart::encodeBase64( replyToId );
+ kd->replyToAuxIdMD5 = KMMessagePart::encodeBase64( replyToAuxId );
kd->msgIdMD5 = KMMessagePart::encodeBase64( msgId );
kd->xmark = aXMark;
kd->folderOffset = aFolderOffset;
@@ -192,7 +200,8 @@
void KMMsgInfo::init(const QCString& aSubject, const QCString& aFrom,
const QCString& aTo, time_t aDate,
KMMsgStatus aStatus, const QCString& aXMark,
- const QCString& replyToId, const QCString& msgId,
+ const QCString& replyToId, const QCString& replyToAuxId,
+ const QCString& msgId,
const QCString& aFileName,
KMMsgEncryptionState encryptionState,
KMMsgSignatureState signatureState,
@@ -200,8 +209,9 @@
unsigned long aMsgSize)
{
// use the "normal" init for most stuff
- init(aSubject, aFrom, aTo, aDate, aStatus, aXMark, replyToId, msgId,
- encryptionState, signatureState, mdnSentState, (unsigned long)0, aMsgSize);
+ init(aSubject, aFrom, aTo, aDate, aStatus, aXMark, replyToId, replyToAuxId,
+ msgId, encryptionState, signatureState, mdnSentState,
+ (unsigned long)0, aMsgSize);
kd->file = aFileName;
}
@@ -257,6 +267,14 @@
return getStringPart(MsgReplyToIdMD5Part);
}
+//-----------------------------------------------------------------------------
+QString KMMsgInfo::replyToAuxIdMD5(void) const
+{
+ if (kd && kd->modifiers & KMMsgInfoPrivate::REPLYTOAUX_SET)
+ return kd->replyToAuxIdMD5;
+ return getStringPart(MsgReplyToAuxIdMD5Part);
+}
+
//-----------------------------------------------------------------------------
QString KMMsgInfo::msgIdMD5(void) const
@@ -307,6 +325,20 @@
kd->replyToIdMD5 = aReplyToIdMD5;
mDirty = TRUE;
}
+
+//-----------------------------------------------------------------------------
+void KMMsgInfo::setReplyToAuxIdMD5(const QString& aReplyToAuxIdMD5)
+{
+ if (aReplyToAuxIdMD5 == replyToAuxIdMD5())
+ return;
+
+ if (!kd)
+ kd = new KMMsgInfoPrivate;
+ kd->modifiers |= KMMsgInfoPrivate::REPLYTOAUX_SET;
+ kd->replyToAuxIdMD5 = aReplyToAuxIdMD5;
+ mDirty = TRUE;
+}
+
//-----------------------------------------------------------------------------
Index: kmmsginfo.h
===================================================================
RCS file: /home/kde/kdepim/kmail/kmmsginfo.h,v
retrieving revision 1.30
diff -u -w -r1.30 kmmsginfo.h
--- kmmsginfo.h 26 Dec 2002 10:18:15 -0000 1.30
+++ kmmsginfo.h 24 Feb 2003 19:09:03 -0000
@@ -27,7 +27,9 @@
virtual void init(const QCString& subject, const QCString& from,
const QCString& to, time_t date,
KMMsgStatus status, const QCString& xmark,
- const QCString& replyToId, const QCString& msgId,
+ const QCString& replyToId,
+ const QCString& replyToAuxId,
+ const QCString& msgId,
KMMsgEncryptionState encryptionState,
KMMsgSignatureState signatureState,
KMMsgMDNSentState mdnSentState,
@@ -37,7 +39,9 @@
virtual void init(const QCString& subject, const QCString& from,
const QCString& to, time_t date,
KMMsgStatus status, const QCString& xmark,
- const QCString& replyToId, const QCString& msgId,
+ const QCString& replyToId,
+ const QCString& replyToAuxId,
+ const QCString& msgId,
const QCString& fileName,
KMMsgEncryptionState encryptionState,
KMMsgSignatureState signatureState,
@@ -50,6 +54,7 @@
virtual QString toStrip(void) const;
virtual QString xmark(void) const;
virtual QString replyToIdMD5(void) const;
+ virtual QString replyToAuxIdMD5(void) const;
virtual QString msgIdMD5(void) const;
virtual QString fileName(void) const;
virtual KMMsgStatus status(void) const;
@@ -67,6 +72,7 @@
virtual void setSubject(const QString&);
virtual void setXMark(const QString&);
virtual void setReplyToIdMD5(const QString&);
+ virtual void setReplyToAuxIdMD5(const QString&);
virtual void setMsgIdMD5(const QString&);
virtual void setEncryptionState( const KMMsgEncryptionState, int idx = -1 );
virtual void setSignatureState( const KMMsgSignatureState, int idx = -1 );
_______________________________________________
KMail Developers mailing list
kmail@mail.kde.org
http://mail.kde.org/mailman/listinfo/kmail
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic