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; }
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); } }
private void PushPart(Part part) { if (_stack.Count == 0) { Root = part; } _stack.Push(part); }
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; }