Exemplo n.º 1
0
        protected virtual void AddNameValueProperty(TrackMetadata trackMetadata, string name, string value)
        {
            Debug.WriteLine("ShoutcastMetadataFilter.AddNameValueProperty(): " + name + "=" + value);

            value = string.IsNullOrWhiteSpace(value) ? null : value.Trim();

            switch (name.ToLowerInvariant())
            {
                case "streamtitle":
                    trackMetadata.Title = value;
                    break;
                case "streamurl":
                    {
                        // Scope
                        Uri url;
                        if (Uri.TryCreate(value, UriKind.Absolute, out url))
                            trackMetadata.Website = url;
                    }
                    break;
            }
        }
Exemplo n.º 2
0
        protected virtual void ParseByQuotes(string metadata, TrackMetadata trackMetadata)
        {
            var index = 0;

            for (; ; )
            {
                var equalSign = metadata.IndexOf('=', index);

                if (equalSign <= index)
                    break;

                var name = metadata.Substring(index, equalSign - index).Trim();

                var firstQuote = metadata.IndexOf('\'', equalSign);

                if (firstQuote < 0 || firstQuote + 1 >= metadata.Length)
                    break;

                var lastQuote = metadata.IndexOf('\'', firstQuote + 1);

                if (lastQuote < 0)
                    break;

                var value = metadata.Substring(firstQuote + 1, lastQuote - firstQuote - 1);

                AddNameValueProperty(trackMetadata, name, value);

                var semicolon = metadata.IndexOf(';', lastQuote);

                if (semicolon < 0)
                    break;

                index = semicolon + 1;

                if (index >= metadata.Length)
                    break;
            }
        }
Exemplo n.º 3
0
        protected virtual void ParseByPairs(string metadata, TrackMetadata trackMetadata)
        {
            var index = 0;

            for (; ; )
            {
                var equalQuote = metadata.IndexOf("='", index, StringComparison.Ordinal);

                if (equalQuote <= index)
                    break;

                var name = metadata.Substring(index, equalQuote - index).Trim();

                var quoteSemi = metadata.IndexOf("';", equalQuote, StringComparison.Ordinal);

                var isLast = false;

                if (quoteSemi < 0)
                {
                    quoteSemi = metadata.LastIndexOf('\'');

                    if (quoteSemi < 0 || quoteSemi <= equalQuote + 1)
                        break;

                    isLast = true;
                }

                var valueStart = equalQuote + 2;

                var value = metadata.Substring(valueStart, quoteSemi - valueStart);

                AddNameValueProperty(trackMetadata, name, value);

                if (isLast)
                    break;

                index = quoteSemi + 2;

                if (index >= metadata.Length)
                    break;
            }
        }
Exemplo n.º 4
0
        protected virtual void ParseStringMetadata(string metadata)
        {
            Debug.WriteLine("ShoutcastMetadataFilter.ParseStringMetadata(): " + metadata);

            var trackMetadata = new TrackMetadata { TimeStamp = _audioParser.Position };

            if (UseParseByPairs)
                ParseByPairs(metadata, trackMetadata);
            else
                ParseByQuotes(metadata, trackMetadata);

            _reportMetadata(trackMetadata);
        }