Beispiel #1
0
        private void ParseMPDElement()
        {
            Windows.Data.Xml.Dom.XmlElement root = document.DocumentElement;
            if (root.GetAttribute("type").ToLower().Equals("dynamic"))
            {
                manifest.IsLive = true;
            }
            if (root.GetAttribute("profiles").ToLower().Contains(LiveProfile))
            {
                manifest.IsSupportedProfile = true;
            }
            if (!root.GetAttribute("availabilityStartTime").Equals(""))
            {
                string availabilityStartTime = root.GetAttribute("availabilityStartTime");
                manifest.AvailibilityStartTime = XmlConvert.ToDateTimeOffset(availabilityStartTime);
            }
            if (!root.GetAttribute("minBufferTime").Equals(""))
            {
                string minBufferTime = root.GetAttribute("minBufferTime");
                manifest.MinBufferTime = XmlConvert.ToTimeSpan(minBufferTime);
            }
            if (!root.GetAttribute("minimumUpdatePeriod").Equals(""))
            {
                manifest.HasMinimumUpdatePeriod = true;
                string minUpdatePeriod = root.GetAttribute("minimumUpdatePeriod");
                manifest.MinimumUpdatePeriod = XmlConvert.ToTimeSpan(minUpdatePeriod);
            }
            if (!root.GetAttribute("mediaPresentationDuration").Equals(""))
            {
                manifest.HasPresentationDuration = true;
                string mediaPresentationDuration = root.GetAttribute("mediaPresentationDuration");
                manifest.MediaPresentationDuration = XmlConvert.ToTimeSpan(mediaPresentationDuration);
            }
            if (!root.GetAttribute("timeShiftBufferDepth").Equals(""))
            {
                string timeShiftBufferDepth = root.GetAttribute("timeShiftBufferDepth");
                manifest.TimeShiftBufferDepth = XmlConvert.ToTimeSpan(timeShiftBufferDepth);
            }
            if (!root.GetAttribute("publishTime").Equals(""))
            {
                string publishTime = root.GetAttribute("publishTime");
                manifest.PublishTime = XmlConvert.ToDateTimeOffset(publishTime);
            }
            else
            {
                manifest.PublishTime = DateTimeOffset.MinValue;
            }
            Windows.Data.Xml.Dom.XmlNodeList periods = root.GetElementsByTagName("Period");
            if (periods.Count() > 1)
            {
                manifest.HasMultiplePeriods = true;
            }

            IXmlNode lastPeriod = periods.Last <IXmlNode>();

            if (lastPeriod.Attributes.GetNamedItem("duration") != null)
            {
                manifest.LastPeriodDuration = XmlConvert.ToTimeSpan(lastPeriod.Attributes.GetNamedItem("duration").InnerText);
            }
        }
Beispiel #2
0
        public bool Parse()
        {
            var temp = this.Content;

            var results          = new List <string>();
            var potentialResults = new Stack <string>();
            var prefix           = string.Empty;

            var parses = Instructions.Split('|');

            foreach (var parse in parses)
            {
                var colon = parse.IndexOf(':');
                if (colon > -1)
                {
                    var cmd       = parse.Substring(0, colon);
                    var part      = parse.Substring(colon + 1);
                    var save      = cmd.Contains("?");
                    var nextToken = cmd.Contains("&");
                    var prefixed  = cmd.Contains("+");
                    var restore   = cmd.Contains("^");

                    if (nextToken)
                    {
                        results.Add(temp);
                        temp = "";
                    }

                    if (prefixed)
                    {
                        prefix += temp;
                        temp    = string.Empty;
                    }

                    if (restore)
                    {
                        temp = potentialResults.Count > 0 ? potentialResults.Pop() : this.Content;
                    }

                    if (save)
                    {
                        potentialResults.Push(prefix + temp);
                        prefix = string.Empty;
                    }

                    var contains = temp.Contains(part);

                    if (cmd.Contains("i"))
                    {
                        if (!CheckDoc(temp))
                        {
                            return(false);
                        }

                        nodes        = doc.SelectNodes(part);
                        IsDictionary = true;
                    }
                    else if (cmd.Contains("k"))
                    {
                        keypart = part;
                    }
                    else if (cmd.Contains("v"))
                    {
                        valuepart = part;
                    }
                    else if (cmd.Contains("table") && nodes != null)
                    {
                        if (part.Contains("name="))
                        {
                            Tablename = part.Substring(part.IndexOf("name=") + 5);
                            var j = Tablename.IndexOf(";");
                            if (j > -1)
                            {
                                Tablename = Tablename.Substring(0, j);
                            }
                        }

                        foreach (var node in nodes)
                        {
                            IXmlNode key = null;
                            Windows.Data.Xml.Dom.XmlNodeList valueset = null;
                            try
                            {
                                key      = node.SelectSingleNode(keypart);
                                valueset = node.SelectNodes(valuepart);
                            }
                            catch (Exception)
                            {
                                //skip if not matching
                                continue;
                            }

                            if (!string.IsNullOrWhiteSpace(key?.InnerText))
                            {
                                if (!string.IsNullOrWhiteSpace(key.InnerText) && !dictionary.ContainsKey(key.InnerText))
                                {
                                    var values = new StringBuilder();
                                    var count  = valueset.Count();
                                    foreach (var value in valueset)
                                    {
                                        values.Append(value.InnerText);
                                        if (--count > 0)
                                        {
                                            values.Append("~");
                                        }
                                    }

                                    dictionary.Add(key.InnerText, values.ToString());
                                }
                            }
                        }

                        Debug.WriteLine(string.Format("Table {0} saved count = {1}", Tablename, dictionary.Count));
                    }
                    else if (cmd.Contains("R"))
                    {
                        temp = temp.RightOf(part);
                    }
                    else if (cmd.Contains("L"))
                    {
                        temp = temp.LeftOf(part);
                    }
                    else if (cmd.Contains("B"))
                    {
                        temp = temp.Between(part);
                    }
                    else if (cmd.Contains("!"))
                    {
                        temp = part;
                    }
                    else if (cmd.Contains("J") || cmd.Contains("j"))
                    {
                        var jParsed = JToken.Parse(temp);
                        if (jParsed != null)
                        {
                            var jToken = jParsed.SelectToken(part);
                            if (jToken != null)
                            {
                                if (cmd.Contains("j"))
                                {
                                    temp = ((JProperty)jToken).Name;
                                    if (cmd.Contains("J"))
                                    {
                                        temp += ":'" + jToken.Value <string>() + "'";
                                    }
                                }
                                else
                                {
                                    temp = jToken.Value <string>();
                                }
                            }
                            else
                            {
                                temp = string.Empty;
                            }
                        }
                        else
                        {
                            temp = string.Empty;
                        }
                    }
                    else if (cmd.Contains("X"))
                    {
                        var expr         = new Regex(part);
                        var matches      = expr.Match(part);
                        var matchResults = new StringBuilder();
                        while (matches.Success)
                        {
                            contains = true;
                            matchResults.Append(matches.Value);
                            matchResults.Append("~");
                            matches = matches.NextMatch();
                        }

                        temp = matchResults.ToString();
                        if (!string.IsNullOrWhiteSpace(temp))
                        {
                            temp = temp.Substring(0, temp.Length - 1);
                        }
                    }
                    else if (cmd.Contains("F"))
                    {
                        results.Add(prefix + temp);
                        prefix = string.Empty;
                        temp   = string.Format(part, results.ToArray());
                        results.Clear();
                    }

                    if (save && !contains)
                    {
                        temp = potentialResults.Pop();
                    }
                }

                if (string.IsNullOrWhiteSpace(temp))
                {
                    break;
                }
            }

            if (!string.IsNullOrWhiteSpace(temp))
            {
                results.Add(prefix + temp);
                prefix = string.Empty;
            }

            var builder = new StringBuilder();

            for (var i = 0; i < results.Count; i++)
            {
                builder.Append(results[i]);
                if (i < results.Count - 1)
                {
                    builder.Append("|");
                }
            }

            Result = builder.Length == 0 ? string.Empty : builder.ToString();

            return(true);
        }