added DiscoverAllFolders, DiscoverAllAndSubscribedFolders, DiscoverChildren, DiscoverLevelChildren methods

This commit is contained in:
jefft%netscape.com 1999-04-27 06:29:39 +00:00
Родитель 7f48c08caa
Коммит 17024a0f8f
4 изменённых файлов: 241 добавлений и 27 удалений

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

@ -129,6 +129,25 @@ public:
const char *messageIdentifierList,
imapMessageFlagsType flags,
PRBool messageIdsAreUID) = 0;
NS_IMETHOD DiscoverAllFolders(PLEventQueue* aClientEventQueue,
nsIMsgFolder* aImapMailFolder,
nsIUrlListener* aUrlListener,
nsIURL** aURL) = 0;
NS_IMETHOD DiscoverAllAndSubscribedFolders(PLEventQueue*
aClientEventQueue,
nsIMsgFolder* aImapMailFolder,
nsIUrlListener* aUrlListener,
nsIURL** aURL) = 0;
NS_IMETHOD DiscoverChildren(PLEventQueue* aClientEventQueue,
nsIMsgFolder* aImapMailFolder,
nsIUrlListener* aUrlListener,
nsIURL** aURL) = 0;
NS_IMETHOD DiscoverLevelChildren(PLEventQueue* aClientEventQueue,
nsIMsgFolder* aImapMailFolder,
nsIUrlListener* aUrlListener,
PRInt32 level,
nsIURL** aURL) = 0;
};

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

@ -165,6 +165,9 @@ public:
NS_IMETHOD CreateListOfMessageIdsString(nsString2 *result) = 0;
NS_IMETHOD MessageIdsAreUids(PRBool *result) = 0;
NS_IMETHOD GetMsgFlags(imapMessageFlagsType *result) = 0; // kAddMsgFlags or kSubtractMsgFlags only
NS_IMETHOD GetChildDiscoveryDepth(PRInt32* discoveryDepth) = 0;
NS_IMETHOD GetOnlineSubDirSeparator(char* separator) = 0;
NS_IMETHOD SetOnlineSubDirSeparator(char onlineDirSeparator) = 0;
NS_IMETHOD SetAllowContentChange(PRBool allowContentChange) = 0;
NS_IMETHOD GetAllowContentChange(PRBool *results) = 0;

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

@ -835,6 +835,206 @@ nsImapService::SetImapUrlSink(nsIMsgFolder* aMsgFolder,
return NS_OK;
}
NS_IMETHODIMP
nsImapService::DiscoverAllFolders(PLEventQueue* aClientEventQueue,
nsIMsgFolder* aImapMailFolder,
nsIUrlListener* aUrlListener,
nsIURL** aURL)
{
NS_ASSERTION (aImapMailFolder && aClientEventQueue,
"Oops ... null aClientEventQueue or aImapMailFolder");
if (!aImapMailFolder || ! aClientEventQueue)
return NS_ERROR_NULL_POINTER;
nsIImapProtocol* aProtocol = nsnull;
nsIImapUrl* aImapUrl = nsnull;
nsString2 urlSpec(eOneByte);
nsresult rv = GetImapConnectionAndUrl(aClientEventQueue, aImapUrl,
aProtocol, urlSpec);
if (NS_SUCCEEDED (rv) && aImapUrl && aProtocol)
{
rv = SetImapUrlSink(aImapMailFolder, aImapUrl);
if (NS_SUCCEEDED(rv))
{
urlSpec.Append("/discoverallboxes");
rv = aImapUrl->SetSpec(urlSpec.GetBuffer());
if (NS_SUCCEEDED(rv))
{
aImapUrl->RegisterListener(aUrlListener);
aProtocol->LoadUrl(aImapUrl, nsnull);
if (aURL)
{
*aURL = aImapUrl;
NS_ADDREF(*aURL);
}
}
}
}
NS_IF_RELEASE(aImapUrl);
NS_IF_RELEASE(aProtocol);
return rv;
}
NS_IMETHODIMP
nsImapService::DiscoverAllAndSubscribedFolders(PLEventQueue* aClientEventQueue,
nsIMsgFolder* aImapMailFolder,
nsIUrlListener* aUrlListener,
nsIURL** aURL)
{
NS_ASSERTION (aImapMailFolder && aClientEventQueue,
"Oops ... null aClientEventQueue or aImapMailFolder");
if (!aImapMailFolder || ! aClientEventQueue)
return NS_ERROR_NULL_POINTER;
nsIImapProtocol* aProtocol = nsnull;
nsIImapUrl* aImapUrl = nsnull;
nsString2 urlSpec(eOneByte);
nsresult rv = GetImapConnectionAndUrl(aClientEventQueue, aImapUrl,
aProtocol, urlSpec);
if (NS_SUCCEEDED (rv) && aImapUrl && aProtocol)
{
rv = SetImapUrlSink(aImapMailFolder, aImapUrl);
if (NS_SUCCEEDED(rv))
{
urlSpec.Append("/discoverallandsubscribedboxes");
rv = aImapUrl->SetSpec(urlSpec.GetBuffer());
if (NS_SUCCEEDED(rv))
{
aImapUrl->RegisterListener(aUrlListener);
aProtocol->LoadUrl(aImapUrl, nsnull);
if (aURL)
{
*aURL = aImapUrl;
NS_ADDREF(*aURL);
}
}
}
}
NS_IF_RELEASE(aImapUrl);
NS_IF_RELEASE(aProtocol);
return rv;
}
NS_IMETHODIMP
nsImapService::DiscoverChildren(PLEventQueue* aClientEventQueue,
nsIMsgFolder* aImapMailFolder,
nsIUrlListener* aUrlListener,
nsIURL** aURL)
{
NS_ASSERTION (aImapMailFolder && aClientEventQueue,
"Oops ... null aClientEventQueue or aImapMailFolder");
if (!aImapMailFolder || ! aClientEventQueue)
return NS_ERROR_NULL_POINTER;
nsIImapProtocol* aProtocol = nsnull;
nsIImapUrl* aImapUrl = nsnull;
nsString2 urlSpec(eOneByte);
nsresult rv = GetImapConnectionAndUrl(aClientEventQueue, aImapUrl,
aProtocol, urlSpec);
if (NS_SUCCEEDED (rv) && aImapUrl && aProtocol)
{
rv = SetImapUrlSink(aImapMailFolder, aImapUrl);
if (NS_SUCCEEDED(rv))
{
PRBool gotFolder = PR_FALSE;
char *folderName = nsnull;
aImapMailFolder->GetName(&folderName);
if (folderName && *folderName != nsnull)
{
// **** fix me with host specific hierarchySeparator please
urlSpec.Append("/discoverchildren>/");
urlSpec.Append(folderName);
rv = aImapUrl->SetSpec(urlSpec.GetBuffer());
if (NS_SUCCEEDED(rv))
{
aImapUrl->RegisterListener(aUrlListener);
aProtocol->LoadUrl(aImapUrl, nsnull);
if (aURL)
{
*aURL = aImapUrl;
NS_ADDREF(*aURL);
}
}
}
else
{
rv = NS_ERROR_NULL_POINTER;
}
delete [] folderName;
}
}
NS_IF_RELEASE(aImapUrl);
NS_IF_RELEASE(aProtocol);
return rv;
}
NS_IMETHODIMP
nsImapService::DiscoverLevelChildren(PLEventQueue* aClientEventQueue,
nsIMsgFolder* aImapMailFolder,
nsIUrlListener* aUrlListener,
PRInt32 level,
nsIURL** aURL)
{
NS_ASSERTION (aImapMailFolder && aClientEventQueue,
"Oops ... null aClientEventQueue or aImapMailFolder");
if (!aImapMailFolder || ! aClientEventQueue)
return NS_ERROR_NULL_POINTER;
nsIImapProtocol* aProtocol = nsnull;
nsIImapUrl* aImapUrl = nsnull;
nsString2 urlSpec(eOneByte);
nsresult rv = GetImapConnectionAndUrl(aClientEventQueue, aImapUrl,
aProtocol, urlSpec);
if (NS_SUCCEEDED (rv) && aImapUrl && aProtocol)
{
rv = SetImapUrlSink(aImapMailFolder, aImapUrl);
if (NS_SUCCEEDED(rv))
{
PRBool gotFolder = PR_FALSE;
char *folderName = nsnull;
aImapMailFolder->GetName(&folderName);
if (folderName && *folderName != nsnull)
{
urlSpec.Append("/discoverlevelchildren>");
urlSpec.Append(level);
// **** fix me with host specific hierarchySeparator please
urlSpec.Append("/"); // hierarchySeparator "/"
urlSpec.Append(folderName);
rv = aImapUrl->SetSpec(urlSpec.GetBuffer());
if (NS_SUCCEEDED(rv))
{
aImapUrl->RegisterListener(aUrlListener);
aProtocol->LoadUrl(aImapUrl, nsnull);
if (aURL)
{
*aURL = aImapUrl;
NS_ADDREF(*aURL);
}
}
}
else
{
rv = NS_ERROR_NULL_POINTER;
}
delete [] folderName;
}
}
NS_IF_RELEASE(aImapUrl);
NS_IF_RELEASE(aProtocol);
return rv;
}
#ifdef HAVE_PORT
/* fetching the headers of RFC822 messages */
@ -907,33 +1107,6 @@ char *CreateImapMailboxCreateUrl(const char *imapHost, const char *mailbox,char
return returnString;
}
/* discover the mailboxes of this account */
char *CreateImapAllMailboxDiscoveryUrl(const char *imapHost)
{
static const char *formatString = "discoverallboxes";
char *returnString = createStartOfIMAPurl(imapHost, XP_STRLEN(formatString));
if (returnString)
sprintf(returnString + XP_STRLEN(returnString), formatString);
/* Reviewed 4.51 safe use of sprintf */
return returnString;
}
/* discover the mailboxes of this account, and the subscribed mailboxes */
char *CreateImapAllAndSubscribedMailboxDiscoveryUrl(const char *imapHost)
{
static const char *formatString = "discoverallandsubscribedboxes";
char *returnString = createStartOfIMAPurl(imapHost, XP_STRLEN(formatString));
if (returnString)
sprintf(returnString + XP_STRLEN(returnString), formatString);
/* Reviewed 4.51 safe use of sprintf */
return returnString;
}
/* discover the children of this mailbox */
char *CreateImapChildDiscoveryUrl(const char *imapHost, const char *mailbox,char hierarchySeparator)
{

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

@ -109,6 +109,25 @@ public:
const char *messageIdentifierList,
imapMessageFlagsType flags,
PRBool messageIdsAreUID);
NS_IMETHOD DiscoverAllFolders(PLEventQueue* aClientEventQueue,
nsIMsgFolder* aImapMailFolder,
nsIUrlListener* aUrlListener,
nsIURL** aURL);
NS_IMETHOD DiscoverAllAndSubscribedFolders(PLEventQueue*
aClientEventQueue,
nsIMsgFolder* aImapMailFolder,
nsIUrlListener* aUrlListener,
nsIURL** aURL);
NS_IMETHOD DiscoverChildren(PLEventQueue* aClientEventQueue,
nsIMsgFolder* aImapMailFolder,
nsIUrlListener* aUrlListener,
nsIURL** aURL);
NS_IMETHOD DiscoverLevelChildren(PLEventQueue* aClientEventQueue,
nsIMsgFolder* aImapMailFolder,
nsIUrlListener* aUrlListener,
PRInt32 level,
nsIURL** aURL);
////////////////////////////////////////////////////////////////////////////////////////
// End support of nsIImapService interface
////////////////////////////////////////////////////////////////////////////////////////