Joshi.Utils.Imap.Imap.SelectFolder C# (CSharp) Method

SelectFolder() public method

Select the sFolder/mailbox after login
public SelectFolder ( string sFolder ) : void
sFolder string mailbox folder
return void
        public void SelectFolder(string sFolder)
        {
            if (!m_bIsLoggedIn)
            {
                try
                {
                    Restore(false);
                }
                catch (ImapException e)
                {
                    if (e.Type!= ImapException.ImapErrorEnum.IMAP_ERR_INSUFFICIENT_DATA)
                        throw e;
                    throw new ImapException(ImapException.ImapErrorEnum.IMAP_ERR_NOTCONNECTED,e.Message);	}

            }
            ImapResponseEnum eImapResponse = ImapResponseEnum.IMAP_SUCCESS_RESPONSE;
            ImapException e_select   = new ImapException (ImapException.ImapErrorEnum.IMAP_ERR_SELECT, sFolder);
            ImapException e_invalidparam = new ImapException(ImapException.ImapErrorEnum.IMAP_ERR_INVALIDPARAM);
            if (sFolder.Length == 0)
            {
                throw e_invalidparam;
            }
            if (m_bIsFolderSelected)
            {
                if (m_sMailboxName == sFolder)
                {
                    Log(LogTypeEnum.INFO,"Folder is already selected");
                    return ;
                }
                else m_bIsFolderSelected = false;
            }
            ArrayList asResultArray = new ArrayList();
            string sCommand = IMAP_SELECT_COMMAND;
            sCommand += " " + sFolder +IMAP_COMMAND_EOL;
            try
            {
                eImapResponse = SendAndReceive(sCommand, ref asResultArray);
                if (eImapResponse == ImapResponseEnum.IMAP_SUCCESS_RESPONSE)
                {
                    m_sMailboxName = sFolder;
                    m_bIsFolderSelected = true;
                }
                else throw e_select;
            }
            catch (Exception e)
            {
                throw e;
            }

            //-------------------------
            // PARSE RESPONSE

            bool bResult = false;
            foreach (string sLine in  asResultArray)
            {
                // If this is an unsolicited response starting with '*'
                if (sLine.IndexOf(IMAP_UNTAGGED_RESPONSE_PREFIX) != -1)
                {
                    // parse the line by space
                    string [] asTokens;
                    asTokens = sLine.Split(' ');
                    if (asTokens[2] == "EXISTS")
                    {
                        // The line will look like "* 2 EXISTS"
                        m_nTotalMessages = Convert.ToInt32(asTokens[1]);
                    }
                    else if (asTokens[2] == "RECENT")
                    {
                        // The line will look like "* 2 RECENT"
                        m_nRecentMessages = Convert.ToInt32(asTokens[1]);
                    }
                    else if (asTokens[2] == "[UNSEEN")
                    {
                        // The line will look like "* OK [UNSEEN 2]"
                        string sUIDPart = asTokens[3].Substring(0, asTokens[3].Length-1);
                        m_nFirstUnSeenMsgUID = Convert.ToInt32(sUIDPart);
                    }
                }
                    // If this line looks like "<command-tag> OK ..."
                else if (sLine.IndexOf(IMAP_SERVER_RESPONSE_OK) != -1)
                {
                    bResult = true;
                    break;
                }
            }

            if (!bResult)
                throw e_select;

            string sLogStr = "TotalMessages[" + m_nTotalMessages.ToString() + "] ,";
            sLogStr += "RecentMessages[" + m_nRecentMessages.ToString() + "] ,";
            if (m_nFirstUnSeenMsgUID > 0 )
                sLogStr += "FirstUnSeenMsgUID[" + m_nFirstUnSeenMsgUID.ToString() + "] ,";
            //Log(LogTypeEnum.INFO, sLogStr);
        }