示例#1
0
 internal Message(ImapClient client, Folder folder)
     : this()
 {
     Flags = new MessageFlagCollection(client, this);
     Labels = new GMailMessageLabelCollection(client, this);
     _client = client;
     Folder = folder;
 }
示例#2
0
 internal Folder(string path, IEnumerable<string> flags, ref Folder parent, ImapClient client)
 {
     _path = path;
     _name = ImapUTF7.Decode(_path.Split(client.Behavior.FolderDelimeter).Last());
     UpdateFlags(flags);
     _parent = parent;
     _client = client;
     GMailThreads = new GMailThreadCollection();
 }
 internal GMailMessageThread(ImapClient client, Folder folder, long threadId)
 {
     Id = threadId;
     Messages = new MessageCollection(client, folder);
 }
示例#4
0
        internal static Folder Parse(string commandResult, ref Folder parent, ImapClient client)
        {
            Match match = Expressions.FolderParseRex.Match(commandResult);

            if (match.Success && match.Groups.Count == 4)
            {
                string[] flags = match.Groups[1].Value.Split(' ');
                string path = match.Groups[3].Value;

                if (client.Behavior.FolderDelimeter == '\0')
                {
                    client.Behavior.FolderDelimeter = string.IsNullOrEmpty(match.Groups[2].Value) ? '"' : match.Groups[2].Value.ToCharArray()[0];
                }

                return new Folder(path, flags, ref parent, client);
            }

            return null;
        }
示例#5
0
        internal FolderCollection GetFolders(string path, CommonFolderCollection commonFolders, Folder parent = null, bool isFirstLevel = false)
        {
            var result = new FolderCollection(this, parent);
            var cmd = string.Format(Capabilities.XList && !Capabilities.XGMExt1 ? ImapCommands.XList : ImapCommands.List, path, Behavior.FolderTreeBrowseMode == FolderTreeBrowseMode.Full || (parent != null && Behavior.LazyFolderBrowsingNotSupported) ? "*" : "%");
            IList<string> data = new List<string>();

            if (!SendAndReceive(cmd, ref data))
            {
                return result;
            }

            for (var i = 0; i < data.Count - 1; i++)
            {
                var folder = Folder.Parse(data[i], ref parent, this);
                commonFolders.TryBind(ref folder);

                if (Behavior.ExamineFolders)
                {
                    folder.Examine();
                }

                if (folder.HasChildren && (isFirstLevel || Behavior.FolderTreeBrowseMode == FolderTreeBrowseMode.Full))
                {
                    folder.SubFolders = GetFolders(folder.Path + Behavior.FolderDelimeter, commonFolders, folder);
                }

                result.AddInternal(folder);
            }

            return result;
        }
示例#6
0
 internal Message(long uId, ImapClient client, Folder folder)
     : this(client, folder)
 {
     UId = uId;
 }
示例#7
0
        public bool MoveTo(Folder folder, bool downloadCopy = false)
        {
            if (folder == null)
            {
                throw new ArgumentNullException("folder");
            }

            return CopyTo(folder, downloadCopy) && Remove();
        }
示例#8
0
        public bool CopyTo(Folder folder, bool downloadCopy = false)
        {
            if (folder == null)
            {
                throw new ArgumentNullException("folder");
            }

            IList<string> data = new List<string>();
            if (!_client.SendAndReceive(string.Format(ImapCommands.Copy, UId, folder.Path), ref data, this))
            {
                return false;
            }

            var m = Expressions.CopyUIdRex.Match(data.FirstOrDefault() ?? "");

            if (m.Success)
            {
                folder.Search("UID " + m.Groups[3].Value);
            }

            return true;
        }