зеркало из https://github.com/mozilla/gecko-dev.git
sort by sender correctly, fix ptr/ref idl stuff in nsIMsgDatabase
This commit is contained in:
Родитель
447605d0a7
Коммит
98bc602428
|
@ -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)
|
||||
|
|
Загрузка…
Ссылка в новой задаче