sort by sender correctly, fix ptr/ref idl stuff in nsIMsgDatabase

This commit is contained in:
bienvenu%netscape.com 1999-08-09 19:52:46 +00:00
Родитель 447605d0a7
Коммит 98bc602428
4 изменённых файлов: 49 добавлений и 18 удалений

Просмотреть файл

@ -44,7 +44,8 @@ interface nsMsgDBCommitType
};
[ref] native nsMsgKeyArray(nsMsgKeyArray);
[ref] native nsMsgKeyArrayRef(nsMsgKeyArray);
[ptr] native nsMsgKeyArrayPtr(nsMsgKeyArray);
[scriptable, uuid(9188bc83-f92e-11d2-81ef-0060083a0bcf)]
@ -74,7 +75,7 @@ interface nsIMsgDatabase : nsIDBChangeAnnouncer {
nsIMsgDBHdr CopyHdrFromExistingHdr(in nsMsgKey key, in nsIMsgDBHdr existingHdr);
void ListAllKeys(in nsMsgKeyArray outputKeys);
void ListAllKeys(in nsMsgKeyArrayRef outputKeys);
nsIEnumerator EnumerateMessages();
nsIEnumerator EnumerateThreads();
@ -122,13 +123,11 @@ interface nsIMsgDatabase : nsIDBChangeAnnouncer {
boolean IsMarked(in nsMsgKey key);
boolean HasAttachments(in nsMsgKey key);
[ptr] native nsMsgKeyArray(nsMsgKeyArray);
void MarkAllRead(in nsMsgKeyArrayPtr thoseMarked);
void MarkAllRead(in nsMsgKeyArray thoseMarked);
void MarkReadByDate (in PRTime startDate, in PRTime endDate, in nsMsgKeyArrayPtr markedIds);
void MarkReadByDate (in PRTime startDate, in PRTime endDate, in nsMsgKeyArray markedIds);
void DeleteMessages(in nsMsgKeyArray nsMsgKeys, in nsIDBChangeListener instigator);
void DeleteMessages(in nsMsgKeyArrayPtr nsMsgKeys, in nsIDBChangeListener instigator);
void DeleteMessage(in nsMsgKey key,
in nsIDBChangeListener instigator,
in boolean commit);
@ -144,7 +143,7 @@ interface nsIMsgDatabase : nsIDBChangeAnnouncer {
in nsIDBChangeListener instigator);
// returns NS_OK on success, NS_COMFALSE on failure
void AllMsgKeysImapDeleted(in nsMsgKeyArray keys);
void AllMsgKeysImapDeleted(in nsMsgKeyArrayPtr keys);
void MarkImapDeleted(in nsMsgKey key, in boolean deleted,
in nsIDBChangeListener instigator);
@ -160,8 +159,8 @@ interface nsIMsgDatabase : nsIDBChangeAnnouncer {
void SetSummaryValid(in boolean valid);
// offline operations
void ListAllOfflineOpIds(in nsMsgKeyArray offlineOpIds);
void ListAllOfflineDeletes(in nsMsgKeyArray offlineDeletes);
void ListAllOfflineOpIds(in nsMsgKeyArrayPtr offlineOpIds);
void ListAllOfflineDeletes(in nsMsgKeyArrayPtr offlineDeletes);
readonly attribute nsMsgKey LowWaterArticleNum;
readonly attribute nsMsgKey HighWaterArticleNum;

Просмотреть файл

@ -214,6 +214,9 @@ public:
nsresult UInt32ToRowCellColumn(nsIMdbRow *row, mdb_token columnToken, PRUint32 value);
nsresult CharPtrToRowCellColumn(nsIMdbRow *row, mdb_token columnToken, const char *charPtr);
nsresult RowCellColumnToCharPtr(nsIMdbRow *row, mdb_token columnToken, char **result);
nsresult CreateCollationKey(nsString &sourceString, nsString &resultString);
// helper functions to copy an nsString to a yarn, int32 to yarn, and vice versa.
static struct mdbYarn *nsStringToYarn(struct mdbYarn *yarn, nsString *str);
static struct mdbYarn *UInt32ToYarn(struct mdbYarn *yarn, PRUint32 i);
@ -221,6 +224,7 @@ public:
static void YarnTonsCString(struct mdbYarn *yarn, nsCString *str);
static void YarnToUInt32(struct mdbYarn *yarn, PRUint32 *i);
// helper functions to convert a 64bits PRTime into a 32bits value (compatible time_t) and vice versa.
static void PRTime2Seconds(PRTime prTime, PRUint32 *seconds);
static void Seconds2PRTime(PRUint32 seconds, PRTime *prTime);

Просмотреть файл

@ -2102,13 +2102,16 @@ nsresult nsMsgDatabase::RowCellColumnToCollationKey(nsIMdbRow *row, mdb_token co
err = RowCellColumnToMime2DecodedString(row, columnToken, nakedString);
if (NS_SUCCEEDED(err))
{
err = GetCollationKeyGenerator();
err = CreateCollationKey(nakedString, resultStr);
return err;
}
nsresult nsMsgDatabase::CreateCollationKey(nsString &sourceString, nsString &resultString)
{
nsresult err = GetCollationKeyGenerator();
if (NS_SUCCEEDED(err) && m_collationKeyGenerator)
{
err = m_collationKeyGenerator->CreateSortKey( kCollationCaseInSensitive, nakedString, resultStr) ;
}
}
err = m_collationKeyGenerator->CreateSortKey( kCollationCaseInSensitive, sourceString, resultString) ;
return err;
}

Просмотреть файл

@ -20,6 +20,7 @@
#include "nsMsgHdr.h"
#include "nsMsgDatabase.h"
#include "nsMsgUtils.h"
#include "nsIMsgHeaderParser.h"
NS_IMPL_ISUPPORTS(nsMsgHdr, nsIMsgDBHdr::GetIID())
@ -497,7 +498,31 @@ NS_IMETHODIMP nsMsgHdr::GetMime2DecodedRecipients(nsString *resultRecipients)
NS_IMETHODIMP nsMsgHdr::GetAuthorCollationKey(nsString *resultAuthor)
{
return m_mdb->RowCellColumnToCollationKey(GetMDBRow(), m_mdb->m_senderColumnToken, *resultAuthor);
nsCAutoString cSender;
char *name = nsnull;
nsresult ret = m_mdb->RowCellColumnTonsCString(GetMDBRow(), m_mdb->m_senderColumnToken, cSender);
if (NS_SUCCEEDED(ret))
{
nsIMsgHeaderParser *headerParser = m_mdb->GetHeaderParser();
if (headerParser)
{
//XXXOnce we get the csid, use Intl version
if(NS_SUCCEEDED(ret = headerParser->ExtractHeaderAddressName (nsnull, cSender, &name)))
*resultAuthor = name;
}
}
if (NS_SUCCEEDED(ret))
{
nsAutoString autoString(name);
ret = m_mdb->CreateCollationKey(autoString, *resultAuthor);
}
if(name)
PL_strfree(name);
return ret;
}
NS_IMETHODIMP nsMsgHdr::GetSubjectCollationKey(nsString *resultSubject)