nsresult csBlogIncomingServer::SetFlagsOnDefaultMailbox(const nsAString& aFolderName, PRUint32 flags) { nsCOMPtr<nsIMsgFolder> rootFolder; nsresult rv = GetRootFolder(getter_AddRefs(rootFolder)); NS_ENSURE_SUCCESS(rv, rv); // FindSubFolder() expects the folder name to be escaped // see bug #192043 nsCAutoString escapedFolderName; rv = NS_MsgEscapeEncodeURLPath(aFolderName, escapedFolderName); NS_ENSURE_SUCCESS(rv,rv); nsCOMPtr<nsIMsgFolder> msgFolder; rv = rootFolder->FindSubFolder(escapedFolderName, getter_AddRefs(msgFolder)); if (NS_FAILED(rv) || !msgFolder) return NS_ERROR_FAILURE; // we only want to do this if the folder *really* exists, // so check if it has a parent. Otherwise, we'll create the // .msf file when we don't want to. nsCOMPtr <nsIMsgFolder> parent; msgFolder->GetParent(getter_AddRefs(parent)); if (!parent) return NS_ERROR_FAILURE; rv = msgFolder->SetFlag(flags); NS_ENSURE_SUCCESS(rv, rv); return msgFolder->SetPrettyName(aFolderName); }
nsresult nsWMUtils::GetOEAccountFiles(nsCOMArray<nsIFile> &aFileArray) { nsCOMPtr<nsIFile> rootFolder; nsresult rv = GetRootFolder(getter_AddRefs(rootFolder)); NS_ENSURE_SUCCESS(rv, rv); return GetOEAccountFilesInFolder(rootFolder, aFileArray); }
NS_IMETHODIMP nsRssIncomingServer::SetFlagsOnDefaultMailboxes() { nsCOMPtr<nsIMsgFolder> rootFolder; nsresult rv = GetRootFolder(getter_AddRefs(rootFolder)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIMsgLocalMailFolder> localFolder = do_QueryInterface(rootFolder, &rv); NS_ENSURE_SUCCESS(rv, rv); localFolder->SetFlagsOnDefaultMailboxes(nsMsgFolderFlags::Trash); return NS_OK; }
NS_IMETHODIMP nsPop3IncomingServer::SetFlagsOnDefaultMailboxes() { nsCOMPtr<nsIMsgFolder> rootFolder; nsresult rv = GetRootFolder(getter_AddRefs(rootFolder)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIMsgLocalMailFolder> localFolder = do_QueryInterface(rootFolder, &rv); NS_ENSURE_SUCCESS(rv, rv); // pop3 gets an inbox, but no queue (unsent messages) localFolder->SetFlagsOnDefaultMailboxes(nsMsgFolderFlags::SpecialUse & ~nsMsgFolderFlags::Queue); return NS_OK; }
NS_IMETHODIMP csBlogIncomingServer::OnItemRemoved(nsIRDFResource *parentItem, nsISupports *item) { nsCOMPtr<nsIMsgDBHdr> header = do_QueryInterface(item); if (!header) return NS_OK; nsCOMPtr<nsIMsgFolder> folder; nsresult rv = header->GetFolder(getter_AddRefs(folder)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIMsgIncomingServer> server; rv = folder->GetServer(getter_AddRefs(server)); NS_ENSURE_SUCCESS(rv, rv); nsCString type; rv = server->GetType(type); NS_ENSURE_SUCCESS(rv, rv); if (type.EqualsLiteral("blog")) { /* * This item could have been removed on a different account and we still * could get this event. So, first ensure that the event occured on our * folder. */ nsCOMPtr<nsIMsgFolder> rootFolder; rv = GetRootFolder(getter_AddRefs(rootFolder)); NS_ENSURE_SUCCESS(rv, rv); PRBool isOurItem = PR_FALSE; rv = rootFolder->IsAncestorOf(folder, &isOurItem); if (NS_FAILED(rv) || !isOurItem) return NS_OK; PRUint32 flags; folder->GetFlags(&flags); if (flags & nsMsgFolderFlags::Inbox || flags & nsMsgFolderFlags::Drafts) { fprintf (stderr, "Will unpublish the blog here\n"); rv = mBlogManager->RemoveItem(header); } } return rv; }
NS_IMETHODIMP nsPop3IncomingServer::SetFlagsOnDefaultMailboxes() { nsCOMPtr<nsIMsgFolder> rootFolder; nsresult rv = GetRootFolder(getter_AddRefs(rootFolder)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIMsgLocalMailFolder> localFolder = do_QueryInterface(rootFolder, &rv); NS_ENSURE_SUCCESS(rv, rv); // pop3 gets an inbox, but no queue (unsent messages) localFolder->SetFlagsOnDefaultMailboxes(nsMsgFolderFlags::Inbox | nsMsgFolderFlags::Archive | nsMsgFolderFlags::SentMail | nsMsgFolderFlags::Drafts | nsMsgFolderFlags::Templates | nsMsgFolderFlags::Trash | nsMsgFolderFlags::Junk); return NS_OK; }
NS_IMETHODIMP nsMovemailIncomingServer::SetFlagsOnDefaultMailboxes() { nsCOMPtr<nsIMsgFolder> rootFolder; nsresult rv = GetRootFolder(getter_AddRefs(rootFolder)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIMsgLocalMailFolder> localFolder = do_QueryInterface(rootFolder, &rv); NS_ENSURE_SUCCESS(rv, rv); localFolder->SetFlagsOnDefaultMailboxes(nsMsgFolderFlags::Inbox | nsMsgFolderFlags::Archive | nsMsgFolderFlags::SentMail | nsMsgFolderFlags::Drafts | nsMsgFolderFlags::Templates | nsMsgFolderFlags::Trash | nsMsgFolderFlags::Junk | // hmm? nsMsgFolderFlags::Queue); return NS_OK; }
NS_IMETHODIMP nsPop3IncomingServer::SetDeferredToAccount(const nsACString& aAccountKey) { nsCString deferredToAccount; GetDeferredToAccount(deferredToAccount); m_rootMsgFolder = nullptr; // clear this so we'll recalculate it on demand. //Notify listeners who listen to every folder nsresult rv = SetCharValue("deferred_to_account", aAccountKey); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIFolderListener> folderListenerManager = do_GetService(NS_MSGMAILSESSION_CONTRACTID, &rv); if (NS_SUCCEEDED(rv)) { nsCOMPtr<nsIMsgFolder> rootFolder; // use GetRootFolder, because that returns the real // root, not the deferred to root. rv = GetRootFolder(getter_AddRefs(rootFolder)); if (rootFolder) { // if isDeferred state has changed, send notification if (aAccountKey.IsEmpty() != deferredToAccount.IsEmpty()) { nsCOMPtr <nsIAtom> deferAtom = MsgGetAtom("isDeferred"); nsCOMPtr <nsIAtom> canFileAtom = MsgGetAtom("CanFileMessages"); folderListenerManager->OnItemBoolPropertyChanged(rootFolder, deferAtom, !deferredToAccount.IsEmpty(), deferredToAccount.IsEmpty()); folderListenerManager->OnItemBoolPropertyChanged(rootFolder, canFileAtom, deferredToAccount.IsEmpty(), !deferredToAccount.IsEmpty()); // this hack causes the account manager ds to send notifications to the // xul content builder that make the changed acct appear or disappear // from the folder pane and related menus. nsCOMPtr<nsIMsgAccountManager> acctMgr = do_GetService(NS_MSGACCOUNTMANAGER_CONTRACTID); if (acctMgr) { acctMgr->NotifyServerUnloaded(this); acctMgr->NotifyServerLoaded(this); // check if this newly deferred to account is the local folders account // and needs to have a newly created INBOX. if (!aAccountKey.IsEmpty()) { nsCOMPtr <nsIMsgAccount> account; acctMgr->GetAccount(aAccountKey, getter_AddRefs(account)); if (account) { nsCOMPtr <nsIMsgIncomingServer> server; account->GetIncomingServer(getter_AddRefs(server)); if (server) { nsCOMPtr <nsILocalMailIncomingServer> incomingLocalServer = do_QueryInterface(server); if (incomingLocalServer) { nsCOMPtr <nsIMsgFolder> rootFolder; rv = server->GetRootFolder(getter_AddRefs(rootFolder)); NS_ENSURE_SUCCESS(rv, rv); // this will fail if it already exists, which is fine. rootFolder->CreateSubfolder(NS_LITERAL_STRING("Inbox"), nullptr); } } } } } } } } return rv; }
// Purpose: Create the shellfolderviewcb that will be used to catch callback events // generated by the system folder view. CComPtr<IShellFolderViewCB> CreateShellFolderViewCB() { return CShellFolderViewCB::CreateInstance(GetRootFolder()); }