зеркало из https://github.com/mozilla/pjs.git
rearrange column setting and getting code as part of offline support, also fix phantom msg counts r=naving, sr=mscott
This commit is contained in:
Родитель
8307ffd935
Коммит
a25043da9b
|
@ -62,8 +62,7 @@ interface nsIDBFolderInfo : nsISupports {
|
|||
void GetTransferInfo(out nsIDBFolderInfo transferInfo);
|
||||
void InitFromTransferInfo(in nsIDBFolderInfo transferInfo);
|
||||
|
||||
[noscript] void GetCharacterSet(in nsString result);
|
||||
[noscript] void GetCharacterSet2(in nsString result, out boolean usedDefault);
|
||||
[noscript] void GetCharacterSet(in nsString result, out boolean usedDefault);
|
||||
[noscript] void SetCharacterSet(in nsString result);
|
||||
void GetCharacterSetOverride(out boolean characterSetOverride);
|
||||
void SetCharacterSetOverride(in boolean characterSetOverride);
|
||||
|
|
|
@ -88,6 +88,17 @@ public:
|
|||
nsresult RowCellColumnToMime2DecodedString(nsIMdbRow *row, mdb_token columnToken, PRUnichar **);
|
||||
nsresult RowCellColumnToCollationKey(nsIMdbRow *row, mdb_token columnToken, PRUnichar**);
|
||||
|
||||
// these methods take the property name as a string, not a token.
|
||||
// they should be used when the properties aren't accessed a lot
|
||||
nsresult GetProperty(nsIMdbRow *row, const char *propertyName, char **result);
|
||||
nsresult SetProperty(nsIMdbRow *row, const char *propertyName, char *propertyVal);
|
||||
nsresult GetPropertyAsNSString(nsIMdbRow *row, const char *propertyName, nsString *result);
|
||||
nsresult SetPropertyFromNSString(nsIMdbRow *row, const char *propertyName, nsString *propertyVal);
|
||||
nsresult GetUint32Property(nsIMdbRow *row, const char *propertyName, PRUint32 *result, PRUint32 defaultValue = 0);
|
||||
nsresult SetUint32Property(nsIMdbRow *row, const char *propertyName, PRUint32 propertyVal);
|
||||
// helper function for once we have the token.
|
||||
nsresult SetNSStringPropertyWithToken(nsIMdbRow *row, mdb_token aProperty, nsString *propertyStr);
|
||||
|
||||
// helper functions to put values in cells for the passed-in row
|
||||
nsresult UInt32ToRowCellColumn(nsIMdbRow *row, mdb_token columnToken, PRUint32 value);
|
||||
nsresult CharPtrToRowCellColumn(nsIMdbRow *row, mdb_token columnToken, const char *charPtr);
|
||||
|
|
|
@ -26,9 +26,6 @@
|
|||
#include "nsIMsgHdr.h"
|
||||
#include "nsString.h"
|
||||
#include "MailNewsTypes.h"
|
||||
#if 0
|
||||
#include "xp.h"
|
||||
#endif
|
||||
#include "mdb.h"
|
||||
|
||||
class nsMsgDatabase;
|
||||
|
|
|
@ -595,18 +595,7 @@ PRBool nsDBFolderInfo::TestFlag(PRInt32 flags)
|
|||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsDBFolderInfo::GetCharacterSet(nsString *result)
|
||||
{
|
||||
nsresult rv = GetProperty(kCharacterSetColumnName, result);
|
||||
|
||||
if (NS_SUCCEEDED(rv) && result->IsEmpty())
|
||||
result->Assign(gDefaultCharacterSet.GetUnicode());
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsDBFolderInfo::GetCharacterSet2(nsString *result, PRBool *usedDefault)
|
||||
nsDBFolderInfo::GetCharacterSet(nsString *result, PRBool *usedDefault)
|
||||
{
|
||||
nsresult rv = GetProperty(kCharacterSetColumnName, result);
|
||||
|
||||
|
@ -733,96 +722,34 @@ NS_IMETHODIMP nsDBFolderInfo::GetKnownArtsSet(nsString *newsArtSet)
|
|||
|
||||
NS_IMETHODIMP nsDBFolderInfo::GetProperty(const char *propertyName, nsString *resultProperty)
|
||||
{
|
||||
nsresult err = NS_OK;
|
||||
mdb_token property_token;
|
||||
|
||||
if (!resultProperty)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
err = m_mdb->GetStore()->StringToToken(m_mdb->GetEnv(), propertyName, &property_token);
|
||||
if (err == NS_OK)
|
||||
err = m_mdb->RowCellColumnTonsString(m_mdbRow, property_token, *resultProperty);
|
||||
|
||||
return err;
|
||||
return m_mdb->GetPropertyAsNSString(m_mdbRow, propertyName, resultProperty);
|
||||
}
|
||||
|
||||
// Caller must PR_FREEIF resultProperty.
|
||||
NS_IMETHODIMP nsDBFolderInfo::GetCharPtrProperty(const char *propertyName, char **resultProperty)
|
||||
{
|
||||
nsresult err = NS_OK;
|
||||
mdb_token property_token;
|
||||
|
||||
if (!resultProperty)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
err = m_mdb->GetStore()->StringToToken(m_mdb->GetEnv(), propertyName, &property_token);
|
||||
if (err == NS_OK)
|
||||
err = m_mdb->RowCellColumnToCharPtr(m_mdbRow, property_token, resultProperty);
|
||||
|
||||
return err;
|
||||
return m_mdb->GetProperty(m_mdbRow, propertyName, resultProperty);
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP nsDBFolderInfo::SetUint32Property(const char *propertyName, PRUint32 propertyValue)
|
||||
{
|
||||
struct mdbYarn yarn;
|
||||
char int32StrBuf[20];
|
||||
yarn.mYarn_Buf = int32StrBuf;
|
||||
yarn.mYarn_Size = sizeof(int32StrBuf);
|
||||
yarn.mYarn_Fill = sizeof(int32StrBuf);
|
||||
|
||||
mdb_token property_token;
|
||||
|
||||
nsresult err = m_mdb->GetStore()->StringToToken(m_mdb->GetEnv(), propertyName, &property_token);
|
||||
if (err == NS_OK)
|
||||
{
|
||||
nsMsgDatabase::UInt32ToYarn(&yarn, propertyValue);
|
||||
err = m_mdbRow->AddColumn(m_mdb->GetEnv(), property_token, &yarn);
|
||||
}
|
||||
return err;
|
||||
return m_mdb->SetUint32Property(m_mdbRow, propertyName, propertyValue);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsDBFolderInfo::SetProperty(const char *propertyName, nsString *propertyStr)
|
||||
{
|
||||
nsresult err = NS_OK;
|
||||
mdb_token property_token;
|
||||
|
||||
err = m_mdb->GetStore()->StringToToken(m_mdb->GetEnv(), propertyName, &property_token);
|
||||
if (err == NS_OK)
|
||||
return SetPropertyWithToken(property_token, propertyStr);
|
||||
|
||||
return err;
|
||||
return m_mdb->SetPropertyFromNSString(m_mdbRow, propertyName, propertyStr);
|
||||
}
|
||||
|
||||
nsresult nsDBFolderInfo::SetPropertyWithToken(mdb_token aProperty, nsString *propertyStr)
|
||||
{
|
||||
struct mdbYarn yarn;
|
||||
|
||||
yarn.mYarn_Grow = NULL;
|
||||
if (m_mdbRow)
|
||||
{
|
||||
nsresult err = m_mdbRow->AddColumn(m_mdb->GetEnv(), aProperty, m_mdb->nsStringToYarn(&yarn, propertyStr));
|
||||
nsMemory::Free((char *)yarn.mYarn_Buf); // won't need this when we have nsCString
|
||||
return err;
|
||||
}
|
||||
else
|
||||
{
|
||||
NS_ASSERTION(PR_FALSE, "missing row in dbfolderinfo");
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
return m_mdb->SetNSStringPropertyWithToken(m_mdbRow, aProperty, propertyStr);
|
||||
}
|
||||
|
||||
nsresult nsDBFolderInfo::SetUint32PropertyWithToken(mdb_token aProperty, PRUint32 propertyValue)
|
||||
{
|
||||
struct mdbYarn yarn;
|
||||
char int32StrBuf[20];
|
||||
yarn.mYarn_Buf = int32StrBuf;
|
||||
yarn.mYarn_Size = sizeof(int32StrBuf);
|
||||
yarn.mYarn_Fill = sizeof(int32StrBuf);
|
||||
|
||||
nsMsgDatabase::UInt32ToYarn(&yarn, propertyValue);
|
||||
if (m_mdbRow)
|
||||
return m_mdbRow->AddColumn(m_mdb->GetEnv(), aProperty, &yarn);
|
||||
else
|
||||
return NS_ERROR_FAILURE;
|
||||
return m_mdb->UInt32ToRowCellColumn(m_mdbRow, aProperty, propertyValue);
|
||||
}
|
||||
|
||||
nsresult nsDBFolderInfo::SetInt32PropertyWithToken(mdb_token aProperty, PRInt32 propertyValue)
|
||||
|
@ -851,15 +778,7 @@ nsresult nsDBFolderInfo::GetInt32PropertyWithToken(mdb_token aProperty, PRInt32
|
|||
|
||||
NS_IMETHODIMP nsDBFolderInfo::GetUint32Property(const char *propertyName, PRUint32 *propertyValue, PRUint32 defaultValue)
|
||||
{
|
||||
nsresult err = NS_OK;
|
||||
mdb_token property_token;
|
||||
|
||||
if (!propertyValue)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
err = m_mdb->GetStore()->StringToToken(m_mdb->GetEnv(), propertyName, &property_token);
|
||||
if (err == NS_OK)
|
||||
return GetUint32PropertyWithToken(property_token, *propertyValue, defaultValue);
|
||||
return err;
|
||||
return m_mdb->GetUint32Property(m_mdbRow, propertyName, propertyValue, defaultValue);
|
||||
}
|
||||
|
||||
class nsTransferDBFolderInfo : public nsDBFolderInfo
|
||||
|
|
|
@ -1562,7 +1562,6 @@ nsresult nsMsgDatabase::MarkHdrReadInDB(nsIMsgDBHdr *msgHdr, PRBool bRead,
|
|||
PRUint32 oldFlags;
|
||||
(void)msgHdr->GetMessageKey(&key);
|
||||
msgHdr->GetFlags(&oldFlags);
|
||||
SetHdrReadFlag(msgHdr, bRead);
|
||||
|
||||
if (m_newSet)
|
||||
m_newSet->Remove(key);
|
||||
|
@ -1575,6 +1574,8 @@ nsresult nsMsgDatabase::MarkHdrReadInDB(nsIMsgDBHdr *msgHdr, PRBool bRead,
|
|||
m_dbFolderInfo->ChangeNumNewMessages(1);
|
||||
}
|
||||
|
||||
SetHdrReadFlag(msgHdr, bRead); // this will cause a commit, at least for local mail, so do it after we change
|
||||
// the folder counts above, so they will get committed too.
|
||||
PRUint32 flags;
|
||||
rv = msgHdr->GetFlags(&flags);
|
||||
flags &= ~MSG_FLAG_NEW;
|
||||
|
@ -2647,7 +2648,8 @@ nsresult nsMsgDatabase::RowCellColumnToMime2DecodedString(nsIMdbRow *row, mdb_to
|
|||
{
|
||||
nsAutoString charset;
|
||||
nsAutoString decodedStr;
|
||||
m_dbFolderInfo->GetCharacterSet(&charset);
|
||||
PRBool usedDefault;
|
||||
m_dbFolderInfo->GetCharacterSet(&charset, &usedDefault);
|
||||
err = m_mimeConverter->DecodeMimePartIIStr(nakedString, charset, resultStr);
|
||||
}
|
||||
}
|
||||
|
@ -2904,6 +2906,101 @@ nsresult nsMsgDatabase::RowCellColumnToCharPtr(nsIMdbRow *row, mdb_token columnT
|
|||
}
|
||||
|
||||
|
||||
nsresult nsMsgDatabase::GetProperty(nsIMdbRow *row, const char *propertyName, char **result)
|
||||
{
|
||||
nsresult err = NS_OK;
|
||||
mdb_token property_token;
|
||||
|
||||
if (m_mdbStore)
|
||||
err = m_mdbStore->StringToToken(GetEnv(), propertyName, &property_token);
|
||||
else
|
||||
err = NS_ERROR_NULL_POINTER;
|
||||
if (err == NS_OK)
|
||||
err = RowCellColumnToCharPtr(row, property_token, result);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
nsresult nsMsgDatabase::SetProperty(nsIMdbRow *row, const char *propertyName, char *propertyVal)
|
||||
{
|
||||
nsresult err = NS_OK;
|
||||
mdb_token property_token;
|
||||
|
||||
err = m_mdbStore->StringToToken(GetEnv(), propertyName, &property_token);
|
||||
if (err == NS_OK)
|
||||
CharPtrToRowCellColumn(row, property_token, propertyVal);
|
||||
return err;
|
||||
}
|
||||
|
||||
nsresult nsMsgDatabase::GetPropertyAsNSString(nsIMdbRow *row, const char *propertyName, nsString *result)
|
||||
{
|
||||
nsresult err = NS_OK;
|
||||
mdb_token property_token;
|
||||
|
||||
NS_ENSURE_ARG(result);
|
||||
err = m_mdbStore->StringToToken(GetEnv(), propertyName, &property_token);
|
||||
if (err == NS_OK)
|
||||
err = RowCellColumnTonsString(row, property_token, *result);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
nsresult nsMsgDatabase::SetPropertyFromNSString(nsIMdbRow *row, const char *propertyName, nsString *propertyVal)
|
||||
{
|
||||
nsresult err = NS_OK;
|
||||
mdb_token property_token;
|
||||
|
||||
err = m_mdbStore->StringToToken(GetEnv(), propertyName, &property_token);
|
||||
if (err == NS_OK)
|
||||
return SetNSStringPropertyWithToken(row, property_token, propertyVal);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
nsresult nsMsgDatabase::GetUint32Property(nsIMdbRow *row, const char *propertyName, PRUint32 *result, PRUint32 defaultValue)
|
||||
{
|
||||
nsresult err = NS_OK;
|
||||
mdb_token property_token;
|
||||
|
||||
err = m_mdbStore->StringToToken(GetEnv(), propertyName, &property_token);
|
||||
if (err == NS_OK)
|
||||
err = RowCellColumnToUInt32(row, property_token, result, defaultValue);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
nsresult nsMsgDatabase::SetUint32Property(nsIMdbRow *row, const char *propertyName, PRUint32 propertyVal)
|
||||
{
|
||||
struct mdbYarn yarn;
|
||||
char int32StrBuf[20];
|
||||
yarn.mYarn_Buf = int32StrBuf;
|
||||
yarn.mYarn_Size = sizeof(int32StrBuf);
|
||||
yarn.mYarn_Fill = sizeof(int32StrBuf);
|
||||
|
||||
mdb_token property_token;
|
||||
|
||||
nsresult err = m_mdbStore->StringToToken(GetEnv(), propertyName, &property_token);
|
||||
if (err == NS_OK)
|
||||
{
|
||||
UInt32ToYarn(&yarn, propertyVal);
|
||||
err = row->AddColumn(GetEnv(), property_token, &yarn);
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
nsresult nsMsgDatabase::SetNSStringPropertyWithToken(nsIMdbRow *row, mdb_token aProperty, nsString *propertyStr)
|
||||
{
|
||||
NS_ENSURE_ARG(row);
|
||||
struct mdbYarn yarn;
|
||||
|
||||
yarn.mYarn_Grow = NULL;
|
||||
nsresult err = row->AddColumn(GetEnv(), aProperty, nsStringToYarn(&yarn, propertyStr));
|
||||
nsMemory::Free((char *)yarn.mYarn_Buf); // won't need this when we have nsCString
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
PRUint32 nsMsgDatabase::GetCurVersion()
|
||||
{
|
||||
return kMsgDBVersion;
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
* Software distributed under the License is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the License for the specific language governing
|
||||
* rights and limitations under the License.
|
||||
* rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
|
@ -41,7 +41,7 @@ static NS_DEFINE_CID(kCMimeConverterCID, NS_MIME_CONVERTER_CID);
|
|||
|
||||
nsMsgHdr::nsMsgHdr(nsMsgDatabase *db, nsIMdbRow *dbRow)
|
||||
{
|
||||
NS_INIT_REFCNT();
|
||||
NS_INIT_REFCNT();
|
||||
m_mdb = db;
|
||||
Init();
|
||||
m_mdbRow = dbRow;
|
||||
|
@ -254,51 +254,22 @@ NS_IMETHODIMP nsMsgHdr::MarkFlagged(PRBool bFlagged)
|
|||
|
||||
NS_IMETHODIMP nsMsgHdr::GetProperty(const char *propertyName, nsString &resultProperty)
|
||||
{
|
||||
nsresult err = NS_OK;
|
||||
mdb_token property_token;
|
||||
|
||||
if (m_mdb->GetStore())
|
||||
err = m_mdb->GetStore()->StringToToken(m_mdb->GetEnv(), propertyName, &property_token);
|
||||
else
|
||||
err = NS_ERROR_NULL_POINTER;
|
||||
if (err == NS_OK)
|
||||
err = m_mdb->RowCellColumnTonsString(GetMDBRow(), property_token, resultProperty);
|
||||
|
||||
return err;
|
||||
return m_mdb->GetPropertyAsNSString(GetMDBRow(), propertyName, &resultProperty);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsMsgHdr::SetProperty(const char *propertyName, nsString &propertyStr)
|
||||
{
|
||||
nsresult err = NS_OK;
|
||||
mdb_token property_token;
|
||||
|
||||
err = m_mdb->GetStore()->StringToToken(m_mdb->GetEnv(), propertyName, &property_token);
|
||||
if (err == NS_OK)
|
||||
{
|
||||
struct mdbYarn yarn;
|
||||
|
||||
yarn.mYarn_Grow = NULL;
|
||||
err = m_mdbRow->AddColumn(m_mdb->GetEnv(), property_token, m_mdb->nsStringToYarn(&yarn, &propertyStr));
|
||||
delete[] (char *)yarn.mYarn_Buf; // won't need this when we have nsCString
|
||||
}
|
||||
return err;
|
||||
return m_mdb->SetPropertyFromNSString(m_mdbRow, propertyName, &propertyStr);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsMsgHdr::GetUint32Property(const char *propertyName, PRUint32 *pResult)
|
||||
{
|
||||
nsresult err = NS_OK;
|
||||
mdb_token property_token;
|
||||
|
||||
err = m_mdb->GetStore()->StringToToken(m_mdb->GetEnv(), propertyName, &property_token);
|
||||
if (err == NS_OK)
|
||||
err = m_mdb->RowCellColumnToUInt32(GetMDBRow(), property_token, pResult);
|
||||
|
||||
return err;
|
||||
return m_mdb->GetUint32Property(GetMDBRow(), propertyName, pResult);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsMsgHdr::SetUint32Property(const char *propertyName, PRUint32 value)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
return m_mdb->SetUint32Property(GetMDBRow(), propertyName, value);
|
||||
}
|
||||
|
||||
|
||||
|
@ -734,26 +705,12 @@ NS_IMETHODIMP nsMsgHdr::GetThreadParent(nsMsgKey *result)
|
|||
|
||||
nsresult nsMsgHdr::SetStringColumn(const char *str, mdb_token token)
|
||||
{
|
||||
struct mdbYarn yarn;
|
||||
yarn.mYarn_Buf = (void *) (str ? str : "");
|
||||
yarn.mYarn_Size = PL_strlen((const char *) yarn.mYarn_Buf) + 1;
|
||||
yarn.mYarn_Fill = yarn.mYarn_Size - 1;
|
||||
yarn.mYarn_Form = 0;
|
||||
yarn.mYarn_Grow = NULL;
|
||||
return m_mdbRow->AddColumn(m_mdb->GetEnv(), token, &yarn);
|
||||
return m_mdb->CharPtrToRowCellColumn(m_mdbRow, token, str);
|
||||
}
|
||||
|
||||
nsresult nsMsgHdr::SetUInt32Column(PRUint32 value, mdb_token token)
|
||||
{
|
||||
char yarnBuf[100];
|
||||
|
||||
struct mdbYarn yarn;
|
||||
yarn.mYarn_Buf = (void *) yarnBuf;
|
||||
yarn.mYarn_Size = sizeof(yarnBuf);
|
||||
yarn.mYarn_Fill = yarn.mYarn_Size;
|
||||
yarn.mYarn_Form = 0;
|
||||
yarn.mYarn_Grow = NULL;
|
||||
return m_mdbRow->AddColumn(m_mdb->GetEnv(), token, nsMsgDatabase::UInt32ToYarn(&yarn, value));
|
||||
return m_mdb->UInt32ToRowCellColumn(m_mdbRow, token, value);
|
||||
}
|
||||
|
||||
nsresult nsMsgHdr::GetUInt32Column(mdb_token token, PRUint32 *pvalue, PRUint32 defaultValue)
|
||||
|
|
Загрузка…
Ссылка в новой задаче