/// <summary>
/// Queries the namespaces.
/// </summary>
/// <returns>The command result.</returns>
/// <param name="cancellationToken">The cancellation token.</param>
public ImapCommandResult QueryNamespaces(CancellationToken cancellationToken)
{
if (stream == null)
throw new InvalidOperationException ();
ImapCommand ic;
if ((Capabilities & ImapCapabilities.Namespace) != 0) {
ic = QueueCommand (cancellationToken, null, "NAMESPACE\r\n");
Wait (ic);
} else {
var list = new List<ImapFolder> ();
ic = new ImapCommand (this, cancellationToken, null, "LIST \"\" \"\"\r\n");
ic.RegisterUntaggedHandler ("LIST", ImapUtils.ParseFolderList);
ic.UserData = list;
QueueCommand (ic);
Wait (ic);
PersonalNamespaces.Clear ();
SharedNamespaces.Clear ();
OtherNamespaces.Clear ();
if (list.Count > 0) {
PersonalNamespaces.Add (new FolderNamespace (list[0].DirectorySeparator, ""));
list[0].IsNamespace = true;
}
LookupParentFolders (list, cancellationToken);
}
return ic.Result;
}