fix 256332 compact breaks rss folders, also fix runtime warnings in account manager sr=mscott
git-svn-id: svn://10.0.0.236/trunk@161135 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
3f97b40857
commit
06de48dcbb
@ -2915,7 +2915,9 @@ NS_IMETHODIMP nsMsgAccountManager::SaveVirtualFolders()
|
||||
NS_IMETHODIMP nsMsgAccountManager::OnItemAdded(nsIRDFResource *parentItem, nsISupports *item)
|
||||
{
|
||||
nsCOMPtr<nsIMsgFolder> folder = do_QueryInterface(item);
|
||||
NS_ENSURE_TRUE(folder, NS_OK); // just kick out with a success code if the item in question is not a folder
|
||||
// just kick out with a success code if the item in question is not a folder
|
||||
if (!folder)
|
||||
return NS_OK;
|
||||
PRUint32 folderFlags;
|
||||
folder->GetFlags(&folderFlags);
|
||||
nsresult rv = NS_OK;
|
||||
@ -2950,7 +2952,9 @@ NS_IMETHODIMP nsMsgAccountManager::OnItemAdded(nsIRDFResource *parentItem, nsISu
|
||||
NS_IMETHODIMP nsMsgAccountManager::OnItemRemoved(nsIRDFResource *parentItem, nsISupports *item)
|
||||
{
|
||||
nsCOMPtr<nsIMsgFolder> folder = do_QueryInterface(item);
|
||||
NS_ENSURE_TRUE(folder, NS_OK); // just kick out with a success code if the item in question is not a folder
|
||||
// just kick out with a success code if the item in question is not a folder
|
||||
if (!folder)
|
||||
return NS_OK;
|
||||
nsresult rv = NS_OK;
|
||||
PRUint32 folderFlags;
|
||||
folder->GetFlags(&folderFlags);
|
||||
|
||||
@ -396,7 +396,8 @@ nsFolderCompactState::FinishCompact()
|
||||
delete m_fileStream;
|
||||
m_fileStream = nsnull;
|
||||
|
||||
// make sure the new database is valid
|
||||
// make sure the new database is valid.
|
||||
// Close it so we can rename the .msf file.
|
||||
m_db->SetSummaryValid(PR_TRUE);
|
||||
m_db->Commit(nsMsgDBCommitType::kLargeCommit);
|
||||
m_db->ForceClosed();
|
||||
@ -422,6 +423,17 @@ nsFolderCompactState::FinishCompact()
|
||||
NS_ASSERTION(NS_SUCCEEDED(rv),"folder lock not released successfully");
|
||||
m_folder->SetDBTransferInfo(transferInfo);
|
||||
|
||||
nsCOMPtr <nsIDBFolderInfo> dbFolderInfo;
|
||||
|
||||
m_folder->GetDBFolderInfoAndDB(getter_AddRefs(dbFolderInfo), getter_AddRefs(m_db));
|
||||
|
||||
// since we're transferring info from the old db, we need to reset the expunged bytes,
|
||||
// and set the summary valid again.
|
||||
if(dbFolderInfo)
|
||||
dbFolderInfo->SetExpungedBytes(0);
|
||||
m_db->Close(PR_TRUE);
|
||||
m_db = nsnull;
|
||||
|
||||
m_folder->NotifyCompactCompleted();
|
||||
|
||||
if (m_compactAll)
|
||||
|
||||
@ -937,25 +937,9 @@ class nsTransferDBFolderInfo : public nsDBFolderInfo
|
||||
public:
|
||||
nsTransferDBFolderInfo();
|
||||
virtual ~nsTransferDBFolderInfo();
|
||||
NS_IMETHOD GetMailboxName(nsAString &boxName);
|
||||
NS_IMETHOD SetMailboxName(const nsAString &boxName);
|
||||
NS_IMETHOD GetViewType(nsMsgViewTypeValue *aViewType);
|
||||
NS_IMETHOD SetViewType(nsMsgViewTypeValue aViewType);
|
||||
NS_IMETHOD GetViewFlags(nsMsgViewFlagsTypeValue *aViewFlags);
|
||||
NS_IMETHOD SetViewFlags(nsMsgViewFlagsTypeValue aViewFlags);
|
||||
NS_IMETHOD GetSortType(nsMsgViewSortTypeValue *aSortType);
|
||||
NS_IMETHOD SetSortType(nsMsgViewSortTypeValue aSortType);
|
||||
NS_IMETHOD GetSortOrder(nsMsgViewSortOrderValue *aSortOrder);
|
||||
NS_IMETHOD SetSortOrder(nsMsgViewSortOrderValue aSortOrder);
|
||||
NS_IMETHOD GetFolderName(char **folderName);
|
||||
NS_IMETHOD SetFolderName(const char *folderName);
|
||||
nsString m_boxName;
|
||||
nsCString m_folderName;
|
||||
nsMsgViewTypeValue m_viewType;
|
||||
nsMsgViewFlagsTypeValue m_viewFlags;
|
||||
nsMsgViewSortTypeValue m_sortType;
|
||||
nsMsgViewSortOrderValue m_sortOrder;
|
||||
|
||||
// parallel arrays of properties and values
|
||||
nsCStringArray m_properties;
|
||||
nsCStringArray m_values;
|
||||
};
|
||||
|
||||
nsTransferDBFolderInfo::nsTransferDBFolderInfo() : nsDBFolderInfo(nsnull)
|
||||
@ -974,95 +958,48 @@ NS_IMETHODIMP nsDBFolderInfo::GetTransferInfo(nsIDBFolderInfo **transferInfo)
|
||||
nsTransferDBFolderInfo *newInfo = new nsTransferDBFolderInfo;
|
||||
*transferInfo = newInfo;
|
||||
NS_ADDREF(newInfo);
|
||||
newInfo->m_flags = m_flags;
|
||||
|
||||
nsAutoString folderNameStr;
|
||||
GetMailboxName(folderNameStr);
|
||||
newInfo->SetMailboxName(folderNameStr);
|
||||
// ### add whatever other fields we want to copy here.
|
||||
nsMsgViewTypeValue viewType;
|
||||
nsMsgViewFlagsTypeValue viewFlags;
|
||||
nsMsgViewSortTypeValue sortType;
|
||||
nsMsgViewSortOrderValue sortOrder;
|
||||
|
||||
GetViewType(&viewType);
|
||||
GetViewFlags(&viewFlags);
|
||||
GetSortType(&sortType);
|
||||
GetSortOrder(&sortOrder);
|
||||
newInfo->SetViewType(viewType);
|
||||
newInfo->SetViewFlags(viewFlags);
|
||||
newInfo->SetSortType(sortType);
|
||||
newInfo->SetSortOrder(sortOrder);
|
||||
|
||||
nsXPIDLCString utf8Name;
|
||||
GetFolderName(getter_Copies(utf8Name));
|
||||
newInfo->SetFolderName(utf8Name.get());
|
||||
|
||||
mdb_count numCells;
|
||||
mdbYarn cellYarn;
|
||||
mdb_column cellColumn;
|
||||
char columnName[100];
|
||||
mdbYarn cellName = { columnName, 0, sizeof(columnName), 0, 0, nsnull };
|
||||
|
||||
m_mdbRow->GetCount(m_mdb->GetEnv(), &numCells);
|
||||
// iterate over the cells in the dbfolderinfo remembering attribute names and values.
|
||||
for (mdb_count cellIndex = 0; cellIndex < numCells; cellIndex++)
|
||||
{
|
||||
mdb_err err = m_mdbRow->SeekCellYarn(m_mdb->GetEnv(), cellIndex, &cellColumn, nsnull);
|
||||
if (!err)
|
||||
{
|
||||
err = m_mdbRow->AliasCellYarn(m_mdb->GetEnv(), cellColumn, &cellYarn);
|
||||
if (!err)
|
||||
{
|
||||
m_mdb->GetStore()->TokenToString(m_mdb->GetEnv(), cellColumn, &cellName);
|
||||
newInfo->m_values.AppendCString(Substring((const char *)cellYarn.mYarn_Buf,
|
||||
(const char *) cellYarn.mYarn_Buf + cellYarn.mYarn_Fill));
|
||||
newInfo->m_properties.AppendCString(Substring((const char *) cellName.mYarn_Buf,
|
||||
(const char *) cellName.mYarn_Buf + cellName.mYarn_Fill));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsTransferDBFolderInfo::SetFolderName(const char *folderName)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(folderName);
|
||||
m_folderName = folderName;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsTransferDBFolderInfo::GetFolderName(char **folderName)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(folderName);
|
||||
*folderName = ToNewCString(m_folderName);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsTransferDBFolderInfo::GetMailboxName(nsAString &boxName)
|
||||
{
|
||||
boxName = m_boxName;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsTransferDBFolderInfo::SetMailboxName(const nsAString &boxName)
|
||||
{
|
||||
m_boxName = boxName;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMPL_GETSET(nsTransferDBFolderInfo, ViewType, nsMsgViewTypeValue, m_viewType)
|
||||
NS_IMPL_GETSET(nsTransferDBFolderInfo, ViewFlags, nsMsgViewFlagsTypeValue, m_viewFlags)
|
||||
NS_IMPL_GETSET(nsTransferDBFolderInfo, SortType, nsMsgViewSortTypeValue, m_sortType)
|
||||
NS_IMPL_GETSET(nsTransferDBFolderInfo, SortOrder, nsMsgViewSortOrderValue, m_sortOrder)
|
||||
|
||||
/* void InitFromTransferInfo (in nsIDBFolderInfo transferInfo); */
|
||||
NS_IMETHODIMP nsDBFolderInfo::InitFromTransferInfo(nsIDBFolderInfo *transferInfo)
|
||||
NS_IMETHODIMP nsDBFolderInfo::InitFromTransferInfo(nsIDBFolderInfo *aTransferInfo)
|
||||
{
|
||||
NS_ENSURE_ARG(transferInfo);
|
||||
PRInt32 flags;
|
||||
nsAutoString folderNameStr;
|
||||
NS_ENSURE_ARG(aTransferInfo);
|
||||
|
||||
transferInfo->GetFlags(&flags);
|
||||
SetFlags(flags);
|
||||
transferInfo->GetMailboxName(folderNameStr);
|
||||
SetMailboxName(folderNameStr);
|
||||
nsTransferDBFolderInfo *transferInfo = NS_STATIC_CAST(nsTransferDBFolderInfo *, aTransferInfo);
|
||||
|
||||
nsXPIDLCString utf8Name;
|
||||
transferInfo->GetFolderName(getter_Copies(utf8Name));
|
||||
SetFolderName(utf8Name.get());
|
||||
for (PRInt32 i = 0; i < transferInfo->m_values.Count(); i++)
|
||||
SetCharPtrProperty(transferInfo->m_properties[i]->get(), transferInfo->m_values[i]->get());
|
||||
|
||||
// ### add whatever other fields we want to copy here.
|
||||
LoadMemberVariables();
|
||||
|
||||
nsMsgViewTypeValue viewType;
|
||||
nsMsgViewFlagsTypeValue viewFlags;
|
||||
nsMsgViewSortTypeValue sortType;
|
||||
nsMsgViewSortOrderValue sortOrder;
|
||||
|
||||
transferInfo->GetViewType(&viewType);
|
||||
transferInfo->GetViewFlags(&viewFlags);
|
||||
transferInfo->GetSortType(&sortType);
|
||||
transferInfo->GetSortOrder(&sortOrder);
|
||||
SetViewType(viewType);
|
||||
SetViewFlags(viewFlags);
|
||||
SetSortType(sortType);
|
||||
SetSortOrder(sortOrder);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
@ -1015,9 +1015,9 @@ NS_IMETHODIMP nsMsgLocalMailFolder::EmptyTrash(nsIMsgWindow *msgWindow,
|
||||
if (NS_SUCCEEDED(rv) && newTrashFolder)
|
||||
{
|
||||
nsCOMPtr <nsIMsgLocalMailFolder> localTrash = do_QueryInterface(newTrashFolder);
|
||||
newTrashFolder->SetDBTransferInfo(transferInfo);
|
||||
if (localTrash)
|
||||
localTrash->RefreshSizeOnDisk();
|
||||
newTrashFolder->SetDBTransferInfo(transferInfo);
|
||||
// update the summary totals so the front end will
|
||||
// show the right thing for the new trash folder
|
||||
// see bug #161999
|
||||
|
||||
@ -269,7 +269,9 @@ NS_IMETHODIMP nsRssIncomingServer::GetCanSearchMessages(PRBool *canSearchMessage
|
||||
NS_IMETHODIMP nsRssIncomingServer::OnItemAdded(nsIRDFResource *parentItem, nsISupports *item)
|
||||
{
|
||||
nsCOMPtr<nsIMsgFolder> folder = do_QueryInterface(item);
|
||||
NS_ENSURE_TRUE(folder, NS_OK); // just kick out with a success code if the item in question is not a folder
|
||||
// just kick out with a success code if the item in question is not a folder
|
||||
if (!folder)
|
||||
return NS_OK;
|
||||
|
||||
nsCOMPtr<nsIMsgIncomingServer> server;
|
||||
nsresult rv = folder->GetServer(getter_AddRefs(server));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user