Beispiel #1
0
 private bool TrySaveToParent(Part part, out Part parent)
 {
     if (_stack.Count == 0) {
         parent = null;
         return false;
     }
     var parent_ = _stack.Peek();
     parent_.Children.Add(part);
     parent = parent_;
     return true;
 }
Beispiel #2
0
        private static void ProcessChild(MessageInfo message, Part current, string token, int sn, string original)
        {
            if (current is BodyPart) {
                var body = (BodyPart) current;
                switch (body.BodyType.ToLower()) {
                    case "text":
                        AddView(message, current as BodyPart, token, sn);
                        break;
                    case "audio":
                    case "video":
                    case "image":
                    case "application":
                        AddAttachment(message, current as BodyPart, token, sn);
                        break;
                    case "message":
                        if (body.SubType.ToLower() == "rfc822") {
                            AddNestedMessage(message, body, token, sn, original);
                            return;
                        }
                        AddView(message, current as BodyPart, token, sn);
                        break;
                    default:
                        AddView(message, current as BodyPart, token, sn);
                        break;
                }
            }

            var i = 0;
            foreach (var child in current.Children) {
                i += 1;
                var childToken = (token + "." + i).TrimStart('.');
                ProcessChild(message, child, childToken, sn, original);
            }
        }
Beispiel #3
0
 private void PushPart(Part part)
 {
     if (_stack.Count == 0) {
         Root = part;
     }
     _stack.Push(part);
 }
Beispiel #4
0
        internal static MessageInfo FromBodyPart(Part part, int sn, string original)
        {
            var rootToken = string.Empty;
            var message = new MessageInfo {SequenceNumber = sn, Token = rootToken, OriginalString = original};
            if (part is BodyPart) {
                var body = (BodyPart) part;
                switch (body.BodyType.ToLower()) {
                    case "text":
                        AddView(message, part as BodyPart, rootToken, sn);
                        break;
                    case "audio":
                    case "video":
                    case "image":
                    case "application":
                        AddAttachment(message, part as BodyPart, rootToken, sn);
                        break;
                    case "message":
                        if (body.SubType == "rfc822") {
                            AddNestedMessage(message, part as BodyPart, rootToken, sn, original);
                        } else {
                            AddView(message, part as BodyPart, rootToken, sn);
                        }
                        break;
                    default:
                        AddView(message, part as BodyPart, string.Empty, sn);
                        break;
                }
            }

            var i = 0;
            foreach (var child in part.Children) {
                i += 1;
                ProcessChild(message, child, i.ToString(), sn, original);
            }

            return message;
        }