mirror of https://github.com/ErsatzTV/ErsatzTV.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.4 KiB
47 lines
1.4 KiB
using System.Globalization; |
|
using System.Text; |
|
using System.Xml; |
|
using Microsoft.IO; |
|
|
|
namespace ErsatzTV.Core.Iptv; |
|
|
|
public class ChannelGuide |
|
{ |
|
private readonly Dictionary<string, string> _channelDataFragments; |
|
private readonly string _channelsFragment; |
|
private readonly RecyclableMemoryStreamManager _recyclableMemoryStreamManager; |
|
|
|
public ChannelGuide( |
|
RecyclableMemoryStreamManager recyclableMemoryStreamManager, |
|
string channelsFragment, |
|
Dictionary<string, string> channelDataFragments) |
|
{ |
|
_recyclableMemoryStreamManager = recyclableMemoryStreamManager; |
|
_channelsFragment = channelsFragment; |
|
_channelDataFragments = channelDataFragments; |
|
} |
|
|
|
public string ToXml() |
|
{ |
|
using RecyclableMemoryStream ms = _recyclableMemoryStreamManager.GetStream(); |
|
using var xml = XmlWriter.Create(ms); |
|
xml.WriteStartDocument(); |
|
|
|
xml.WriteStartElement("tv"); |
|
xml.WriteAttributeString("generator-info-name", "ersatztv"); |
|
|
|
xml.WriteRaw(_channelsFragment); |
|
|
|
foreach ((string channelNumber, string channelDataFragment) in _channelDataFragments.OrderBy( |
|
kvp => decimal.Parse(kvp.Key, CultureInfo.InvariantCulture))) |
|
{ |
|
xml.WriteRaw(channelDataFragment); |
|
} |
|
|
|
xml.WriteEndElement(); // tv |
|
xml.WriteEndDocument(); |
|
|
|
xml.Flush(); |
|
return Encoding.UTF8.GetString(ms.ToArray()); |
|
} |
|
}
|
|
|