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:
bienvenu%netscape.com 2001-01-18 00:42:02 +00:00
Родитель 8307ffd935
Коммит a25043da9b
6 изменённых файлов: 127 добавлений и 147 удалений

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

@ -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)