зеркало из https://github.com/mozilla/pjs.git
fix 19229, imap hierarchy separator,r=jefft,a=chofmann
This commit is contained in:
Родитель
dafa45dbaf
Коммит
47e39cb52c
|
@ -51,62 +51,7 @@ public:
|
|||
|
||||
NS_DECL_ISUPPORTS
|
||||
// interface methods.
|
||||
NS_IMETHOD GetFlags(PRInt32 *result);
|
||||
NS_IMETHOD SetFlags(PRInt32 flags);
|
||||
NS_IMETHOD OrFlags(PRInt32 flags, PRInt32 *result);
|
||||
NS_IMETHOD AndFlags(PRInt32 flags, PRInt32 *result);
|
||||
NS_IMETHOD SetHighWater(nsMsgKey highWater, PRBool force) ;
|
||||
NS_IMETHOD SetHighWater(nsMsgKey aHighWater);
|
||||
NS_IMETHOD GetHighWater(nsMsgKey *result) ;
|
||||
NS_IMETHOD SetExpiredMark(nsMsgKey expiredKey);
|
||||
NS_IMETHOD GetExpiredMark(nsMsgKey *aExpiredMark);
|
||||
NS_IMETHOD ChangeNumNewMessages(PRInt32 delta);
|
||||
NS_IMETHOD ChangeNumMessages(PRInt32 delta);
|
||||
NS_IMETHOD ChangeNumVisibleMessages(PRInt32 delta);
|
||||
NS_IMETHOD GetNumNewMessages(PRInt32 *result) ;
|
||||
NS_IMETHOD GetNumMessages(PRInt32 *result) ;
|
||||
NS_IMETHOD GetNumVisibleMessages(PRInt32 *result) ;
|
||||
NS_IMETHOD SetNumMessages(PRInt32 aNumMessages);
|
||||
NS_IMETHOD SetNumNewMessages(PRInt32 aNumNewMessages);
|
||||
NS_IMETHOD SetNumVisibleMessages(PRInt32 aNumVisibleMessages);
|
||||
NS_IMETHOD GetImapUidValidity(PRInt32 *result) ;
|
||||
NS_IMETHOD SetImapUidValidity(PRInt32 uidValidity) ;
|
||||
NS_IMETHOD GetImapTotalPendingMessages(PRInt32 *result) ;
|
||||
NS_IMETHOD GetImapUnreadPendingMessages(PRInt32 *result) ;
|
||||
NS_IMETHOD SetImapTotalPendingMessages(PRInt32 totalPending) ;
|
||||
NS_IMETHOD SetImapUnreadPendingMessages(PRInt32 unreadPending) ;
|
||||
NS_IMETHOD GetCharacterSet(nsString *result) ;
|
||||
NS_IMETHOD SetCharacterSet(nsString *charSet) ;
|
||||
NS_IMETHOD GetCharPtrCharacterSet(char **result);
|
||||
|
||||
NS_IMETHOD GetLocale(nsString *result) ;
|
||||
NS_IMETHOD SetLocale(nsString *locale) ;
|
||||
|
||||
NS_IMETHOD SetMailboxName(nsString *newBoxName);
|
||||
NS_IMETHOD GetMailboxName(nsString *boxName);
|
||||
|
||||
NS_IMETHOD SetVersion(PRUint32 version) ;
|
||||
NS_IMETHOD GetVersion(PRUint32 *result);
|
||||
|
||||
NS_IMETHOD GetLastMessageLoaded(nsMsgKey *result);
|
||||
NS_IMETHOD SetLastMessageLoaded(nsMsgKey lastLoaded);
|
||||
|
||||
NS_IMETHOD GetFolderSize(PRUint32 *size);
|
||||
NS_IMETHOD SetFolderSize(PRUint32 size);
|
||||
NS_IMETHOD GetFolderDate(PRUint32 *date);
|
||||
NS_IMETHOD SetFolderDate(PRUint32 date);
|
||||
|
||||
NS_IMETHOD ChangeExpungedBytes(PRInt32 delta);
|
||||
|
||||
NS_IMETHOD GetProperty(const char *propertyName, nsString *resultProperty);
|
||||
NS_IMETHOD SetProperty(const char *propertyName, nsString *propertyStr);
|
||||
NS_IMETHOD GetCharPtrProperty(const char *propertyName, char **resultProperty);
|
||||
NS_IMETHOD SetUint32Property(const char *propertyName, PRUint32 propertyValue);
|
||||
NS_IMETHOD GetUint32Property(const char *propertyName, PRUint32 *propertyValue);
|
||||
|
||||
NS_IMETHOD SetKnownArtsSet(nsString *newsArtSet);
|
||||
NS_IMETHOD GetKnownArtsSet(nsString *newsArtSet);
|
||||
|
||||
NS_DECL_NSIDBFOLDERINFO
|
||||
// create the appropriate table and row in a new db.
|
||||
nsresult AddToNewMDB();
|
||||
// accessor methods.
|
||||
|
|
|
@ -50,8 +50,10 @@ interface nsIDBFolderInfo : nsISupports {
|
|||
attribute unsigned long Version;
|
||||
attribute long ImapTotalPendingMessages;
|
||||
attribute long ImapUnreadPendingMessages;
|
||||
attribute wchar IMAPHierarchySeparator;
|
||||
void ChangeExpungedBytes(in long delta);
|
||||
|
||||
void GetCharPtrProperty(in string propertyName, out string resultProperty);
|
||||
void SetUint32Property(in string propertyName, in unsigned long propertyValue);
|
||||
unsigned long GetUint32Property(in string propertyName);
|
||||
|
||||
|
|
|
@ -564,14 +564,18 @@ NS_IMETHODIMP nsDBFolderInfo::SetLocale(nsString *locale)
|
|||
}
|
||||
|
||||
|
||||
PRInt16 nsDBFolderInfo::GetIMAPHierarchySeparator()
|
||||
NS_IMETHODIMP nsDBFolderInfo::GetIMAPHierarchySeparator(PRUnichar *hierarchySeparator)
|
||||
{
|
||||
return m_IMAPHierarchySeparator;
|
||||
if (!hierarchySeparator)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
*hierarchySeparator = m_IMAPHierarchySeparator;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
void nsDBFolderInfo::SetIMAPHierarchySeparator(PRInt16 hierarchySeparator)
|
||||
NS_IMETHODIMP nsDBFolderInfo::SetIMAPHierarchySeparator(PRUnichar hierarchySeparator)
|
||||
{
|
||||
m_IMAPHierarchySeparator = hierarchySeparator;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
|
|
@ -977,17 +977,22 @@ NS_IMETHODIMP nsMsgDatabase::DeleteMessages(nsMsgKeyArray* nsMsgKeys, nsIDBChang
|
|||
nsMsgKey key = nsMsgKeys->ElementAt(kindex);
|
||||
nsIMsgDBHdr *msgHdr = NULL;
|
||||
|
||||
err = GetMsgHdrForKey(key, &msgHdr);
|
||||
if (NS_FAILED(err))
|
||||
PRBool hasKey;
|
||||
|
||||
if (NS_SUCCEEDED(ContainsKey(key, &hasKey)) && hasKey)
|
||||
{
|
||||
err = NS_MSG_MESSAGE_NOT_FOUND;
|
||||
break;
|
||||
err = GetMsgHdrForKey(key, &msgHdr);
|
||||
if (NS_FAILED(err))
|
||||
{
|
||||
err = NS_MSG_MESSAGE_NOT_FOUND;
|
||||
break;
|
||||
}
|
||||
if (msgHdr)
|
||||
err = DeleteHeader(msgHdr, instigator, kindex % 300 == 0, PR_TRUE);
|
||||
NS_IF_RELEASE(msgHdr);
|
||||
if (err != NS_OK)
|
||||
break;
|
||||
}
|
||||
if (msgHdr)
|
||||
err = DeleteHeader(msgHdr, instigator, kindex % 300 == 0, PR_TRUE);
|
||||
NS_IF_RELEASE(msgHdr);
|
||||
if (err != NS_OK)
|
||||
break;
|
||||
}
|
||||
Commit(nsMsgDBCommitType::kSmallCommit);
|
||||
return err;
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
[scriptable, uuid(8ec49a08-5cb0-11d3-a52c-0060b0fc04b7)]
|
||||
|
||||
interface nsIImapServerSink : nsISupports {
|
||||
void PossibleImapMailbox(in string folderPath);
|
||||
void PossibleImapMailbox(in string folderPath, in wchar hierarchyDelim, in long boxFlags);
|
||||
void DiscoveryDone();
|
||||
void OnlineFolderDelete(in string aFolderName);
|
||||
void OnlineFolderCreateFailed(in string aFolderName);
|
||||
|
|
|
@ -533,7 +533,7 @@ nsImapIncomingServer::CloseCachedConnections()
|
|||
}
|
||||
|
||||
// nsIImapServerSink impl
|
||||
NS_IMETHODIMP nsImapIncomingServer::PossibleImapMailbox(const char *folderPath)
|
||||
NS_IMETHODIMP nsImapIncomingServer::PossibleImapMailbox(const char *folderPath, PRUnichar hierarchyDelimiter, PRInt32 boxFlags)
|
||||
{
|
||||
nsresult rv;
|
||||
PRBool found = PR_FALSE;
|
||||
|
@ -592,14 +592,18 @@ NS_IMETHODIMP nsImapIncomingServer::PossibleImapMailbox(const char *folderPath)
|
|||
if (!found)
|
||||
{
|
||||
hostFolder->CreateClientSubfolderInfo(folderPath);
|
||||
a_nsIFolder->GetChildWithURI(uri, PR_TRUE, getter_AddRefs(child));
|
||||
}
|
||||
else
|
||||
if (child)
|
||||
{
|
||||
nsCOMPtr <nsIMsgImapMailFolder> imapFolder = do_QueryInterface(child);
|
||||
if (imapFolder)
|
||||
{
|
||||
imapFolder->SetVerifiedAsOnlineFolder(PR_TRUE);
|
||||
}
|
||||
|
||||
imapFolder->SetHierarchyDelimiter(hierarchyDelimiter);
|
||||
imapFolder->SetBoxFlags(boxFlags);
|
||||
}
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
#include "nsIMsgCopyService.h"
|
||||
#include "nsICopyMsgStreamListener.h"
|
||||
#include "nsImapStringBundle.h"
|
||||
|
||||
#include "nsIMsgFolderCacheElement.h"
|
||||
#include "nsIMsgStatusFeedback.h"
|
||||
|
||||
#include "nsIMsgFilter.h"
|
||||
|
@ -96,6 +96,8 @@ nsImapMailFolder::nsImapMailFolder() :
|
|||
pEventQService->GetThreadEventQueue(NS_CURRENT_THREAD,
|
||||
getter_AddRefs(m_eventQueue));
|
||||
m_moveCoalescer = nsnull;
|
||||
m_boxFlags = 0;
|
||||
m_hierarchyDelimiter = kOnlineHierarchySeparatorUnknown;
|
||||
|
||||
}
|
||||
|
||||
|
@ -662,6 +664,40 @@ NS_IMETHODIMP nsImapMailFolder::SetVerifiedAsOnlineFolder(PRBool aVerifiedAsOnli
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsImapMailFolder::SetHierarchyDelimiter(PRUnichar aHierarchyDelimiter)
|
||||
{
|
||||
m_hierarchyDelimiter = aHierarchyDelimiter;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsImapMailFolder::GetHierarchyDelimiter(PRUnichar *aHierarchyDelimiter)
|
||||
{
|
||||
if (!aHierarchyDelimiter)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
*aHierarchyDelimiter = m_hierarchyDelimiter;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsImapMailFolder::SetBoxFlags(PRInt32 aBoxFlags)
|
||||
{
|
||||
m_boxFlags = aBoxFlags;
|
||||
if (m_boxFlags & kNoinferiors)
|
||||
mFlags |= MSG_FOLDER_FLAG_IMAP_NOINFERIORS;
|
||||
else
|
||||
mFlags &= ~MSG_FOLDER_FLAG_IMAP_NOINFERIORS;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsImapMailFolder::GetBoxFlags(PRInt32 *aBoxFlags)
|
||||
{
|
||||
if (!aBoxFlags)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
*aBoxFlags = m_boxFlags;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP nsImapMailFolder::GetExplicitlyVerify(PRBool *aExplicitlyVerify)
|
||||
{
|
||||
if (!aExplicitlyVerify)
|
||||
|
@ -884,9 +920,7 @@ NS_IMETHODIMP
|
|||
nsImapMailFolder::GetCanCreateSubfolders(PRBool *aResult)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aResult);
|
||||
// if it's the Inbox, then you can't create a subfolder.
|
||||
// yes, I know this isn't true for all IMAP servers, but it works for now
|
||||
*aResult = !(mFlags & MSG_FOLDER_FLAG_INBOX);
|
||||
*aResult = !(mFlags & MSG_FOLDER_FLAG_IMAP_NOINFERIORS);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -961,6 +995,27 @@ nsImapMailFolder::MarkAllMessagesRead(void)
|
|||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsImapMailFolder::ReadFromFolderCacheElem(nsIMsgFolderCacheElement *element)
|
||||
{
|
||||
nsresult rv = nsMsgDBFolder::ReadFromFolderCacheElem(element);
|
||||
PRInt32 hierarchyDelimiter = kOnlineHierarchySeparatorUnknown;
|
||||
|
||||
element->GetInt32Property("boxFlags", &m_boxFlags);
|
||||
if (NS_SUCCEEDED(element->GetInt32Property("hierDelim", &hierarchyDelimiter)))
|
||||
m_hierarchyDelimiter = (PRUnichar) hierarchyDelimiter;
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsImapMailFolder::WriteToFolderCacheElem(nsIMsgFolderCacheElement *element)
|
||||
{
|
||||
nsresult rv = nsMsgDBFolder::WriteToFolderCacheElem(element);
|
||||
element->SetInt32Property("boxFlags", m_boxFlags);
|
||||
element->SetInt32Property("hierDelim", (PRInt32) m_hierarchyDelimiter);
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsImapMailFolder::MarkMessagesFlagged(nsISupportsArray *messages, PRBool markFlagged)
|
||||
{
|
||||
|
@ -3017,10 +3072,11 @@ nsImapMailFolder::PercentProgress(nsIImapProtocol* aProtocol,
|
|||
{
|
||||
nsCOMPtr <nsIMsgStatusFeedback> feedback;
|
||||
mailnewsUrl->GetStatusFeedback(getter_AddRefs(feedback));
|
||||
if (feedback && aInfo->message)
|
||||
if (feedback)
|
||||
{
|
||||
feedback->ShowProgress(aInfo->percent);
|
||||
feedback->ShowStatusString(aInfo->message);
|
||||
if (aInfo->message)
|
||||
feedback->ShowStatusString(aInfo->message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -144,6 +144,8 @@ public:
|
|||
NS_IMETHOD MarkMessagesFlagged(nsISupportsArray *messages, PRBool markFlagged);
|
||||
|
||||
NS_IMETHOD DeleteSubFolders(nsISupportsArray *folders);
|
||||
NS_IMETHOD ReadFromFolderCacheElem(nsIMsgFolderCacheElement *element);
|
||||
NS_IMETHOD WriteToFolderCacheElem(nsIMsgFolderCacheElement *element);
|
||||
|
||||
virtual nsresult GetDBFolderInfoAndDB(nsIDBFolderInfo **folderInfo,
|
||||
nsIMsgDatabase **db);
|
||||
|
@ -339,6 +341,8 @@ protected:
|
|||
PRMonitor *m_appendMsgMonitor;
|
||||
PRBool m_verifiedAsOnlineFolder;
|
||||
PRBool m_explicitlyVerify; // whether or not we need to explicitly verify this through LIST
|
||||
PRUnichar m_hierarchyDelimiter;
|
||||
PRInt32 m_boxFlags;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -3824,7 +3824,8 @@ nsImapProtocol::DiscoverMailboxSpec(mailbox_spec * adoptedBoxSpec)
|
|||
|
||||
if (m_imapServerSink)
|
||||
{
|
||||
m_imapServerSink->PossibleImapMailbox(boxNameCopy);
|
||||
m_imapServerSink->PossibleImapMailbox(boxNameCopy,
|
||||
adoptedBoxSpec->hierarchySeparator, adoptedBoxSpec->box_flags);
|
||||
// WaitForFEEventCompletion();
|
||||
|
||||
PRBool useSubscription = PR_FALSE;
|
||||
|
|
|
@ -1840,12 +1840,13 @@ ProgressStatusProxyEvent::ProgressStatusProxyEvent(
|
|||
nsImapMiscellaneousSinkProxyEvent(aProxy)
|
||||
{
|
||||
m_statusMsgId = aMsgId;
|
||||
m_extraInfo = nsCRT::strdup(extraInfo);
|
||||
m_extraInfo = (extraInfo) ? nsCRT::strdup(extraInfo) : nsnull;
|
||||
}
|
||||
|
||||
ProgressStatusProxyEvent::~ProgressStatusProxyEvent()
|
||||
{
|
||||
PR_FREEIF(m_extraInfo);
|
||||
if (m_extraInfo)
|
||||
nsCRT::free(m_extraInfo);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
|
|
@ -119,7 +119,8 @@ nsImapService::SelectFolder(nsIEventQueue * aClientEventQueue,
|
|||
nsCOMPtr<nsIImapUrl> imapUrl;
|
||||
nsCAutoString urlSpec;
|
||||
nsresult rv;
|
||||
rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl), aImapMailFolder, aUrlListener, urlSpec);
|
||||
PRUnichar hierarchySeparator = '/';
|
||||
rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl), aImapMailFolder, aUrlListener, urlSpec, hierarchySeparator);
|
||||
|
||||
if (NS_SUCCEEDED(rv) && imapUrl)
|
||||
{
|
||||
|
@ -137,7 +138,8 @@ nsImapService::SelectFolder(nsIEventQueue * aClientEventQueue,
|
|||
{
|
||||
nsXPIDLCString folderName;
|
||||
GetFolderName(aImapMailFolder, getter_Copies(folderName));
|
||||
urlSpec.Append("/select>/");
|
||||
urlSpec.Append("/select>");
|
||||
urlSpec.Append(hierarchySeparator);
|
||||
urlSpec.Append((const char *) folderName);
|
||||
rv = mailNewsUrl->SetSpec((char *) urlSpec.GetBuffer());
|
||||
if (NS_SUCCEEDED(rv))
|
||||
|
@ -172,7 +174,8 @@ nsImapService::LiteSelectFolder(nsIEventQueue * aClientEventQueue,
|
|||
|
||||
nsresult rv;
|
||||
|
||||
rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl), aImapMailFolder, aUrlListener, urlSpec);
|
||||
PRUnichar hierarchySeparator = '/';
|
||||
rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl), aImapMailFolder, aUrlListener, urlSpec, hierarchySeparator);
|
||||
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
|
@ -180,7 +183,6 @@ nsImapService::LiteSelectFolder(nsIEventQueue * aClientEventQueue,
|
|||
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
char hierarchySeparator = '/';
|
||||
nsCOMPtr<nsIURI> uri = do_QueryInterface(imapUrl);
|
||||
|
||||
urlSpec.Append("/liteselect>");
|
||||
|
@ -213,7 +215,8 @@ NS_IMETHODIMP nsImapService::GetUrlForUri(const char *aMessageURI, nsIURI **aURL
|
|||
{
|
||||
nsCOMPtr<nsIImapUrl> imapUrl;
|
||||
nsCAutoString urlSpec;
|
||||
rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl), folder, nsnull, urlSpec);
|
||||
PRUnichar hierarchySeparator = '/';
|
||||
rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl), folder, nsnull, urlSpec, hierarchySeparator);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
imapUrl->SetImapMessageSink(imapMessageSink);
|
||||
|
||||
|
@ -222,7 +225,6 @@ NS_IMETHODIMP nsImapService::GetUrlForUri(const char *aMessageURI, nsIURI **aURL
|
|||
url->GetSpec(getter_Copies(currentSpec));
|
||||
urlSpec = currentSpec;
|
||||
|
||||
char hierarchySeparator = '/'; // ### fixme - should get from folder
|
||||
urlSpec.Append("fetch>");
|
||||
urlSpec.Append(uidString);
|
||||
urlSpec.Append(">");
|
||||
|
@ -258,9 +260,11 @@ NS_IMETHODIMP nsImapService::DisplayMessage(const char* aMessageURI,
|
|||
{
|
||||
nsCOMPtr<nsIImapUrl> imapUrl;
|
||||
nsCAutoString urlSpec;
|
||||
rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl), folder, aUrlListener, urlSpec);
|
||||
PRUnichar hierarchySeparator = '/';
|
||||
rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl), folder, aUrlListener, urlSpec, hierarchySeparator);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
imapUrl->AddChannelToLoadGroup();
|
||||
rv = FetchMessage(imapUrl, nsIImapUrl::nsImapMsgFetch, folder, imapMessageSink,
|
||||
aURL, aDisplayConsumer, msgKey, PR_TRUE);
|
||||
}
|
||||
|
@ -289,7 +293,8 @@ nsImapService::CopyMessage(const char * aSrcMailboxURI, nsIStreamListener *
|
|||
{
|
||||
nsCOMPtr<nsIImapUrl> imapUrl;
|
||||
nsCAutoString urlSpec;
|
||||
rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl), folder, aUrlListener, urlSpec);
|
||||
PRUnichar hierarchySeparator = '/';
|
||||
rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl), folder, aUrlListener, urlSpec, hierarchySeparator);
|
||||
|
||||
// now try to display the message
|
||||
rv = FetchMessage(imapUrl, nsIImapUrl::nsImapMsgFetch, folder, imapMessageSink,
|
||||
|
@ -365,7 +370,8 @@ NS_IMETHODIMP nsImapService::SaveMessageToDisk(const char *aMessageURI,
|
|||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsCAutoString urlSpec;
|
||||
rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl), folder, aUrlListener, urlSpec);
|
||||
PRUnichar hierarchySeparator = '/';
|
||||
rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl), folder, aUrlListener, urlSpec, hierarchySeparator);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
nsCOMPtr<nsIImapMessageSink> imapMessageSink(do_QueryInterface(folder, &rv));
|
||||
|
@ -408,25 +414,28 @@ nsImapService::FetchMessage(nsIImapUrl * aImapUrl,
|
|||
nsresult rv = aImapUrl->SetImapAction(aImapAction /* nsIImapUrl::nsImapMsgFetch */);
|
||||
rv = SetImapUrlSink(aImapMailFolder, aImapUrl);
|
||||
|
||||
rv = aImapUrl->SetImapMessageSink(aImapMessage);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
rv = aImapUrl->SetImapMessageSink(aImapMessage);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
nsXPIDLCString currentSpec;
|
||||
nsCOMPtr<nsIURI> url = do_QueryInterface(aImapUrl);
|
||||
url->GetSpec(getter_Copies(currentSpec));
|
||||
urlSpec = currentSpec;
|
||||
|
||||
char hierarchySeparator = '/'; // ### fixme - should get from folder
|
||||
urlSpec.Append("fetch>");
|
||||
urlSpec.Append(messageIdsAreUID ? uidString : sequenceString);
|
||||
urlSpec.Append(">");
|
||||
urlSpec.Append(hierarchySeparator);
|
||||
PRUnichar hierarchySeparator = '/';
|
||||
nsCOMPtr <nsIMsgImapMailFolder> imapFolder = do_QueryInterface(aImapMailFolder);
|
||||
if (imapFolder)
|
||||
imapFolder->GetHierarchyDelimiter(&hierarchySeparator);
|
||||
urlSpec.Append("fetch>");
|
||||
urlSpec.Append(messageIdsAreUID ? uidString : sequenceString);
|
||||
urlSpec.Append(">");
|
||||
urlSpec.Append(hierarchySeparator);
|
||||
|
||||
nsXPIDLCString folderName;
|
||||
GetFolderName(aImapMailFolder, getter_Copies(folderName));
|
||||
urlSpec.Append((const char *) folderName);
|
||||
urlSpec.Append(">");
|
||||
urlSpec.Append(messageIdentifierList);
|
||||
nsXPIDLCString folderName;
|
||||
GetFolderName(aImapMailFolder, getter_Copies(folderName));
|
||||
urlSpec.Append((const char *) folderName);
|
||||
urlSpec.Append(">");
|
||||
urlSpec.Append(messageIdentifierList);
|
||||
|
||||
|
||||
// mscott - this cast to a char * is okay...there's a bug in the XPIDL
|
||||
|
@ -500,7 +509,8 @@ nsresult
|
|||
nsImapService::CreateStartOfImapUrl(nsIImapUrl ** imapUrl,
|
||||
nsIMsgFolder* aImapMailFolder,
|
||||
nsIUrlListener * aUrlListener,
|
||||
nsCString & urlSpec)
|
||||
nsCString & urlSpec,
|
||||
PRUnichar &hierarchyDelimiter)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
char *hostname = nsnull;
|
||||
|
@ -539,6 +549,10 @@ nsImapService::CreateStartOfImapUrl(nsIImapUrl ** imapUrl,
|
|||
// const char *. hopefully they will fix it soon.
|
||||
rv = mailnewsUrl->SetSpec((char *) urlSpec.GetBuffer());
|
||||
|
||||
hierarchyDelimiter = kOnlineHierarchySeparatorUnknown;
|
||||
nsCOMPtr <nsIMsgImapMailFolder> imapFolder = do_QueryInterface(aImapMailFolder);
|
||||
if (imapFolder)
|
||||
imapFolder->GetHierarchyDelimiter(&hierarchyDelimiter);
|
||||
}
|
||||
|
||||
PR_FREEIF(hostname);
|
||||
|
@ -568,8 +582,9 @@ nsImapService::GetHeaders(nsIEventQueue * aClientEventQueue,
|
|||
|
||||
nsCOMPtr<nsIImapUrl> imapUrl;
|
||||
nsCAutoString urlSpec;
|
||||
PRUnichar hierarchySeparator = '/'; // ### fixme - should get from folder
|
||||
|
||||
nsresult rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl),aImapMailFolder, aUrlListener, urlSpec);
|
||||
nsresult rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl),aImapMailFolder, aUrlListener, urlSpec, hierarchySeparator);
|
||||
if (NS_SUCCEEDED(rv) && imapUrl)
|
||||
{
|
||||
nsCOMPtr<nsIURI> uri = do_QueryInterface(imapUrl);
|
||||
|
@ -579,7 +594,6 @@ nsImapService::GetHeaders(nsIEventQueue * aClientEventQueue,
|
|||
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
char hierarchySeparator = '/'; // ### fixme - should get from folder
|
||||
|
||||
urlSpec.Append("/header>");
|
||||
urlSpec.Append(messageIdsAreUID ? uidString : sequenceString);
|
||||
|
@ -619,9 +633,10 @@ nsImapService::Noop(nsIEventQueue * aClientEventQueue,
|
|||
nsCOMPtr<nsIImapUrl> imapUrl;
|
||||
nsCAutoString urlSpec;
|
||||
|
||||
PRUnichar hierarchySeparator = '/';
|
||||
nsresult rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl),
|
||||
aImapMailFolder,
|
||||
aUrlListener, urlSpec);
|
||||
aUrlListener, urlSpec, hierarchySeparator);
|
||||
if (NS_SUCCEEDED(rv) && imapUrl)
|
||||
{
|
||||
|
||||
|
@ -631,8 +646,6 @@ nsImapService::Noop(nsIEventQueue * aClientEventQueue,
|
|||
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
char hierarchySeparator = '/'; // ### fixme - should get from folder
|
||||
|
||||
urlSpec.Append("/selectnoop>");
|
||||
urlSpec.Append(hierarchySeparator);
|
||||
|
||||
|
@ -664,9 +677,10 @@ nsImapService::Expunge(nsIEventQueue * aClientEventQueue,
|
|||
nsCOMPtr<nsIImapUrl> imapUrl;
|
||||
nsCAutoString urlSpec;
|
||||
|
||||
PRUnichar hierarchySeparator = '/'; // ### fixme - should get from folder
|
||||
nsresult rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl),
|
||||
aImapMailFolder,
|
||||
aUrlListener, urlSpec);
|
||||
aUrlListener, urlSpec, hierarchySeparator);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
|
||||
|
@ -677,7 +691,6 @@ nsImapService::Expunge(nsIEventQueue * aClientEventQueue,
|
|||
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
char hierarchySeparator = '/'; // ### fixme - should get from folder
|
||||
|
||||
urlSpec.Append("/Expunge>");
|
||||
urlSpec.Append(hierarchySeparator);
|
||||
|
@ -713,9 +726,10 @@ nsImapService::Biff(nsIEventQueue * aClientEventQueue,
|
|||
nsCOMPtr<nsIImapUrl> imapUrl;
|
||||
nsCAutoString urlSpec;
|
||||
|
||||
PRUnichar hierarchySeparator = '/';
|
||||
nsresult rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl),
|
||||
aImapMailFolder,
|
||||
aUrlListener, urlSpec);
|
||||
aUrlListener, urlSpec, hierarchySeparator);
|
||||
if (NS_SUCCEEDED(rv) && imapUrl)
|
||||
{
|
||||
|
||||
|
@ -726,8 +740,6 @@ nsImapService::Biff(nsIEventQueue * aClientEventQueue,
|
|||
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
char hierarchySeparator = '/'; // ### fixme - should get from folder
|
||||
|
||||
urlSpec.Append("/Biff>");
|
||||
urlSpec.Append(hierarchySeparator);
|
||||
|
||||
|
@ -760,13 +772,13 @@ nsImapService::DeleteFolder(nsIEventQueue* eventQueue,
|
|||
nsCOMPtr<nsIImapUrl> imapUrl;
|
||||
nsCAutoString urlSpec;
|
||||
|
||||
rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl), folder, urlListener, urlSpec);
|
||||
PRUnichar hierarchySeparator = '/';
|
||||
rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl), folder, urlListener, urlSpec, hierarchySeparator);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
rv = SetImapUrlSink(folder, imapUrl);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
char hierarchySeparator = kOnlineHierarchySeparatorUnknown;
|
||||
nsCOMPtr<nsIURI> uri = do_QueryInterface(imapUrl);
|
||||
|
||||
urlSpec.Append("/delete>");
|
||||
|
@ -811,9 +823,10 @@ nsImapService::DeleteMessages(nsIEventQueue * aClientEventQueue,
|
|||
nsCOMPtr<nsIImapUrl> imapUrl;
|
||||
nsCAutoString urlSpec;
|
||||
|
||||
PRUnichar hierarchySeparator = '/';
|
||||
nsresult rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl),
|
||||
aImapMailFolder,
|
||||
aUrlListener, urlSpec);
|
||||
aUrlListener, urlSpec, hierarchySeparator);
|
||||
if (NS_SUCCEEDED(rv) && imapUrl)
|
||||
{
|
||||
|
||||
|
@ -822,7 +835,6 @@ nsImapService::DeleteMessages(nsIEventQueue * aClientEventQueue,
|
|||
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
char hierarchySeparator = '/'; // ### fixme - should get from folder
|
||||
nsCOMPtr<nsIURI> uri = do_QueryInterface(imapUrl);
|
||||
|
||||
urlSpec.Append("/deletemsg>");
|
||||
|
@ -861,9 +873,10 @@ nsImapService::DeleteAllMessages(nsIEventQueue * aClientEventQueue,
|
|||
nsCOMPtr<nsIImapUrl> imapUrl;
|
||||
nsCAutoString urlSpec;
|
||||
|
||||
PRUnichar hierarchySeparator = '/';
|
||||
nsresult rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl),
|
||||
aImapMailFolder,
|
||||
aUrlListener, urlSpec);
|
||||
aUrlListener, urlSpec, hierarchySeparator);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
|
||||
|
@ -872,7 +885,6 @@ nsImapService::DeleteAllMessages(nsIEventQueue * aClientEventQueue,
|
|||
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
char hierarchySeparator = '/'; // ### fixme - should get from folder
|
||||
nsCOMPtr<nsIURI> uri = do_QueryInterface(imapUrl);
|
||||
|
||||
urlSpec.Append("/deleteallmsgs>");
|
||||
|
@ -952,9 +964,10 @@ nsresult nsImapService::DiddleFlags(nsIEventQueue * aClientEventQueue,
|
|||
nsCOMPtr<nsIImapUrl> imapUrl;
|
||||
nsCAutoString urlSpec;
|
||||
|
||||
PRUnichar hierarchySeparator = '/';
|
||||
nsresult rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl),
|
||||
aImapMailFolder,
|
||||
aUrlListener, urlSpec);
|
||||
aUrlListener, urlSpec, hierarchySeparator);
|
||||
if (NS_SUCCEEDED(rv) && imapUrl)
|
||||
{
|
||||
|
||||
|
@ -963,7 +976,6 @@ nsresult nsImapService::DiddleFlags(nsIEventQueue * aClientEventQueue,
|
|||
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
char hierarchySeparator = '/'; // ### fixme - should get from folder
|
||||
nsCOMPtr<nsIURI> uri = do_QueryInterface(imapUrl);
|
||||
|
||||
urlSpec.Append('/');
|
||||
|
@ -1059,9 +1071,10 @@ nsImapService::DiscoverAllFolders(nsIEventQueue* aClientEventQueue,
|
|||
nsCOMPtr<nsIImapUrl> aImapUrl;
|
||||
nsCAutoString urlSpec;
|
||||
|
||||
PRUnichar hierarchySeparator = '/';
|
||||
nsresult rv = CreateStartOfImapUrl(getter_AddRefs(aImapUrl),
|
||||
aImapMailFolder,
|
||||
aUrlListener, urlSpec);
|
||||
aUrlListener, urlSpec, hierarchySeparator);
|
||||
if (NS_SUCCEEDED (rv))
|
||||
{
|
||||
rv = SetImapUrlSink(aImapMailFolder, aImapUrl);
|
||||
|
@ -1095,9 +1108,10 @@ nsImapService::DiscoverAllAndSubscribedFolders(nsIEventQueue* aClientEventQueue,
|
|||
nsCOMPtr<nsIImapUrl> aImapUrl;
|
||||
nsCAutoString urlSpec;
|
||||
|
||||
PRUnichar hierarchySeparator = '/';
|
||||
nsresult rv = CreateStartOfImapUrl(getter_AddRefs(aImapUrl),
|
||||
aImapMailFolder,
|
||||
aUrlListener, urlSpec);
|
||||
aUrlListener, urlSpec, hierarchySeparator);
|
||||
if (NS_SUCCEEDED (rv) && aImapUrl)
|
||||
{
|
||||
rv = SetImapUrlSink(aImapMailFolder, aImapUrl);
|
||||
|
@ -1130,9 +1144,10 @@ nsImapService::DiscoverChildren(nsIEventQueue* aClientEventQueue,
|
|||
nsCOMPtr<nsIImapUrl> aImapUrl;
|
||||
nsCAutoString urlSpec;
|
||||
|
||||
PRUnichar hierarchySeparator = '/';
|
||||
nsresult rv = CreateStartOfImapUrl(getter_AddRefs(aImapUrl),
|
||||
aImapMailFolder,
|
||||
aUrlListener, urlSpec);
|
||||
aUrlListener, urlSpec, hierarchySeparator);
|
||||
if (NS_SUCCEEDED (rv))
|
||||
{
|
||||
rv = SetImapUrlSink(aImapMailFolder, aImapUrl);
|
||||
|
@ -1145,8 +1160,8 @@ nsImapService::DiscoverChildren(nsIEventQueue* aClientEventQueue,
|
|||
{
|
||||
nsCOMPtr<nsIURI> uri = do_QueryInterface(aImapUrl);
|
||||
|
||||
// **** fix me with host specific hierarchySeparator please
|
||||
urlSpec.Append("/discoverchildren>/");
|
||||
urlSpec.Append("/discoverchildren>");
|
||||
urlSpec.Append(hierarchySeparator);
|
||||
urlSpec.Append((const char *) folderName);
|
||||
// mscott - this cast to a char * is okay...there's a bug in the XPIDL
|
||||
// compiler that is preventing in string parameters from showing up as
|
||||
|
@ -1181,8 +1196,9 @@ nsImapService::DiscoverLevelChildren(nsIEventQueue* aClientEventQueue,
|
|||
nsCOMPtr<nsIImapUrl> aImapUrl;
|
||||
nsCAutoString urlSpec;
|
||||
|
||||
PRUnichar hierarchySeparator = '/';
|
||||
nsresult rv = CreateStartOfImapUrl(getter_AddRefs(aImapUrl),
|
||||
aImapMailFolder,aUrlListener, urlSpec);
|
||||
aImapMailFolder,aUrlListener, urlSpec, hierarchySeparator);
|
||||
if (NS_SUCCEEDED (rv) && aImapUrl)
|
||||
{
|
||||
rv = SetImapUrlSink(aImapMailFolder, aImapUrl);
|
||||
|
@ -1196,8 +1212,7 @@ nsImapService::DiscoverLevelChildren(nsIEventQueue* aClientEventQueue,
|
|||
nsCOMPtr<nsIURI> uri = do_QueryInterface(aImapUrl);
|
||||
urlSpec.Append("/discoverlevelchildren>");
|
||||
urlSpec.Append(level);
|
||||
// **** fix me with host specific hierarchySeparator please
|
||||
urlSpec.Append("/"); // hierarchySeparator "/"
|
||||
urlSpec.Append(hierarchySeparator); // hierarchySeparator "/"
|
||||
urlSpec.Append((const char *) folderName);
|
||||
|
||||
rv = uri->SetSpec((char *) urlSpec.GetBuffer());
|
||||
|
@ -1270,11 +1285,10 @@ nsImapService::OnlineMessageCopy(nsIEventQueue* aClientEventQueue,
|
|||
nsCOMPtr<nsIImapUrl> imapUrl;
|
||||
nsCAutoString urlSpec;
|
||||
|
||||
rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl), aSrcFolder, aUrlListener, urlSpec);
|
||||
PRUnichar hierarchySeparator = '/';
|
||||
rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl), aSrcFolder, aUrlListener, urlSpec, hierarchySeparator);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
// **** fix me with real host hierarchy separator
|
||||
char hierarchySeparator = kOnlineHierarchySeparatorUnknown;
|
||||
SetImapUrlSink(aSrcFolder, imapUrl);
|
||||
imapUrl->SetCopyState(copyState);
|
||||
|
||||
|
@ -1335,11 +1349,10 @@ nsImapService::AppendMessageFromFile(nsIEventQueue* aClientEventQueue,
|
|||
nsCOMPtr<nsIImapUrl> imapUrl;
|
||||
nsCAutoString urlSpec;
|
||||
|
||||
rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl), aDstFolder, aListener, urlSpec);
|
||||
PRUnichar hierarchySeparator = '/';
|
||||
rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl), aDstFolder, aListener, urlSpec, hierarchySeparator);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
// **** fix me with real host hierarchy separator
|
||||
char hierarchySeparator = kOnlineHierarchySeparatorUnknown;
|
||||
SetImapUrlSink(aDstFolder, imapUrl);
|
||||
imapUrl->SetMsgFileSpec(aFileSpec);
|
||||
imapUrl->SetCopyState(aCopyState);
|
||||
|
@ -1439,7 +1452,8 @@ nsImapService::MoveFolder(nsIEventQueue* eventQueue, nsIMsgFolder* srcFolder,
|
|||
nsCAutoString urlSpec;
|
||||
nsresult rv;
|
||||
|
||||
rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl), dstFolder, urlListener, urlSpec);
|
||||
PRUnichar hierarchySeparator = '/';
|
||||
rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl), dstFolder, urlListener, urlSpec, hierarchySeparator);
|
||||
if (NS_SUCCEEDED(rv) && imapUrl)
|
||||
{
|
||||
rv = SetImapUrlSink(dstFolder, imapUrl);
|
||||
|
@ -1486,13 +1500,13 @@ nsImapService::RenameLeaf(nsIEventQueue* eventQueue, nsIMsgFolder* srcFolder,
|
|||
nsCAutoString urlSpec;
|
||||
nsresult rv;
|
||||
|
||||
rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl), srcFolder, urlListener, urlSpec);
|
||||
PRUnichar hierarchySeparator = '/';
|
||||
rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl), srcFolder, urlListener, urlSpec, hierarchySeparator);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
rv = SetImapUrlSink(srcFolder, imapUrl);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
char hierarchySeparator = '/';
|
||||
nsCOMPtr<nsIURI> uri = do_QueryInterface(imapUrl);
|
||||
|
||||
nsXPIDLCString folderName;
|
||||
|
@ -1537,13 +1551,13 @@ nsImapService::CreateFolder(nsIEventQueue* eventQueue, nsIMsgFolder* parent,
|
|||
nsCAutoString urlSpec;
|
||||
nsresult rv;
|
||||
|
||||
rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl), parent, urlListener, urlSpec);
|
||||
PRUnichar hierarchySeparator = '/';
|
||||
rv = CreateStartOfImapUrl(getter_AddRefs(imapUrl), parent, urlListener, urlSpec, hierarchySeparator);
|
||||
if (NS_SUCCEEDED(rv) && imapUrl)
|
||||
{
|
||||
rv = SetImapUrlSink(parent, imapUrl);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
char hierarchySeparator = '/';
|
||||
nsCOMPtr<nsIURI> uri = do_QueryInterface(imapUrl);
|
||||
|
||||
nsXPIDLCString folderName;
|
||||
|
|
|
@ -201,7 +201,8 @@ protected:
|
|||
nsresult CreateStartOfImapUrl(nsIImapUrl **imapUrl,
|
||||
nsIMsgFolder* aImapFolder,
|
||||
nsIUrlListener * aUrlListener,
|
||||
nsCString & urlSpec);
|
||||
nsCString & urlSpec,
|
||||
PRUnichar &hierarchyDelimiter);
|
||||
nsresult GetImapConnectionAndLoadUrl(nsIEventQueue* aClientEventQueue,
|
||||
nsIImapUrl* aImapUrl,
|
||||
nsISupports* aConsumer,
|
||||
|
|
Загрузка…
Ссылка в новой задаче