NS_IMETHODIMP nsMailDatabase::GetOfflineOpForKey(nsMsgKey msgKey, bool create, nsIMsgOfflineImapOperation **offlineOp) { mdb_bool hasOid; mdbOid rowObjectId; mdb_err err; if (!IMAPOffline) IMAPOffline = PR_NewLogModule("IMAPOFFLINE"); nsresult rv = GetAllOfflineOpsTable(); NS_ENSURE_SUCCESS(rv, rv); if (!offlineOp || !m_mdbAllOfflineOpsTable) return NS_ERROR_NULL_POINTER; *offlineOp = NULL; rowObjectId.mOid_Id = msgKey; rowObjectId.mOid_Scope = m_offlineOpsRowScopeToken; err = m_mdbAllOfflineOpsTable->HasOid(GetEnv(), &rowObjectId, &hasOid); if (NS_SUCCEEDED(err) && m_mdbStore && (hasOid || create)) { nsCOMPtr <nsIMdbRow> offlineOpRow; err = m_mdbStore->GetRow(GetEnv(), &rowObjectId, getter_AddRefs(offlineOpRow)); if (create) { if (!offlineOpRow) { err = m_mdbStore->NewRowWithOid(GetEnv(), &rowObjectId, getter_AddRefs(offlineOpRow)); NS_ENSURE_SUCCESS(err, err); } if (offlineOpRow && !hasOid) m_mdbAllOfflineOpsTable->AddRow(GetEnv(), offlineOpRow); } if (NS_SUCCEEDED(err) && offlineOpRow) { *offlineOp = new nsMsgOfflineImapOperation(this, offlineOpRow); if (*offlineOp) (*offlineOp)->SetMessageKey(msgKey); NS_IF_ADDREF(*offlineOp); } if (!hasOid && m_dbFolderInfo) { // set initial value for flags so we don't lose them. nsCOMPtr <nsIMsgDBHdr> msgHdr; GetMsgHdrForKey(msgKey, getter_AddRefs(msgHdr)); if (msgHdr) { uint32_t flags; msgHdr->GetFlags(&flags); (*offlineOp)->SetNewFlags(flags); } int32_t newFlags; m_dbFolderInfo->OrFlags(nsMsgFolderFlags::OfflineEvents, &newFlags); } } return err; }
NS_IMETHODIMP nsMailboxUrl::GetMessageHeader(nsIMsgDBHdr ** aMsgHdr) { if (m_dummyHdr) { NS_IF_ADDREF(*aMsgHdr = m_dummyHdr); return NS_OK; } return GetMsgHdrForKey(m_messageKey, aMsgHdr); }
NS_IMETHODIMP nsMailboxUrl::GetMoveCopyMsgHdrForIndex(uint32_t msgIndex, nsIMsgDBHdr **msgHdr) { NS_ENSURE_ARG(msgHdr); if (msgIndex < m_keys.Length()) { nsMsgKey nextKey = m_keys[msgIndex]; return GetMsgHdrForKey(nextKey, msgHdr); } return NS_MSG_MESSAGE_NOT_FOUND; }