private bool getListToIndex(System.Collections.Hashtable msgs, int total, anmar.SharpWebMail.CTNInbox inbox, int npage, int npagesize)
        {
            bool error = false;

            System.Int32[]  list    = new System.Int32[total];
            System.String[] uidlist = new System.String[total];
            if (total > 0)
            {
                // Get uid list
                error = (error)?error:!this.uidl(uidlist, 0);
                //Get messages list
                error = (error)?error:!this.list(list);
            }
            // Prepare message table with new messages
            error = (error)?error:!inbox.buildMessageTable(list, uidlist);

            list    = null;
            uidlist = null;

            //Determine what messages we have to index
            if (msgs != null)
            {
                error = (error)?error:!inbox.buildMessageList(msgs, npage, npagesize);
            }

            return(!error);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="inbox"></param>
        /// <param name="npage"></param>
        /// <param name="npagesize"></param>
        /// <param name="askserver"></param>
        /// <returns></returns>
        public virtual bool GetFolderIndex(anmar.SharpWebMail.CTNInbox inbox, int npage, int npagesize, bool askserver)
        {
            bool error      = false;
            int  total      = 0;
            int  totalbytes = 0;

            System.Collections.Hashtable list = new System.Collections.Hashtable();

            if (!askserver)
            {
                error     = !inbox.buildMessageList(list, npage, npagesize);
                askserver = (!error && list.Count > 0)?!askserver:askserver;
            }
            if (askserver)
            {
                System.Collections.Hashtable messages = new System.Collections.Hashtable();
                error = !this.connect();
                error = (error)?error:!this.login(this.username, this.password);
                error = (error)?error:!this.status(ref total, ref totalbytes);

                error = (error)?error:!this.getListToIndex(list, total, inbox, npage, npagesize);

                if (!error && total > 0 && list.Count > 0)
                {
                    System.IO.MemoryStream header = null;
                    foreach (System.Collections.DictionaryEntry msg in list)
                    {
                        error = (error)?error:!this.getMessageHeader(out header, (int)msg.Key);
                        if (!error)
                        {
                            messages.Add(msg.Value, header);
                        }
                    }
                }
                this.quit();
                foreach (System.Collections.DictionaryEntry item in messages)
                {
                    System.IO.MemoryStream stream = this.getStreamDataPortion(item.Value as System.IO.MemoryStream);
                    anmar.SharpMimeTools.SharpMimeHeader header = new anmar.SharpMimeTools.SharpMimeHeader(stream, stream.Position);
                    header.Close();
                    if (log.IsDebugEnabled)
                    {
                        log.Debug(System.String.Concat("Parsed message header uidl[", item.Key, "] msgid[", header.MessageID, "], now adding to inbox."));
                    }
                    inbox.newMessage(item.Key.ToString(), header);
                }
            }
            return(!error);
        }