Files
ChanSort/source/ChanSort.Api/Controller/RefSerializer.cs
hbeham 0a71f34639 CsvFileSerializer and RefSerializer are now back in the .Api project. CSV, TXT and CHL files can now be loaded and edited like any other supported channel list.
Eleminated redundant code that was used for loading/applying reference lists in CSV or TXT/CHL format.
2016-05-05 03:06:11 +02:00

140 lines
3.6 KiB
C#

using System.Collections.Generic;
using System.IO;
using System.Text;
namespace ChanSort.Api
{
public class RefSerializer : SerializerBase
{
private static readonly char[] Separators = { ';' };
private readonly ChannelList allChannels =
new ChannelList(SignalSource.DvbT | SignalSource.DvbC | SignalSource.DvbS | SignalSource.AnalogC | SignalSource.AnalogT | SignalSource.Tv | SignalSource.Radio, "All");
#region ctor()
public RefSerializer(string inputFile) : base(inputFile)
{
this.Features.ChannelNameEdit = ChannelNameEditMode.All;
this.Features.CanSkipChannels = false;
this.Features.CanDeleteChannels = true;
this.Features.CanHaveGaps = true;
this.Features.EncryptedFlagEdit = false;
this.DataRoot.SortedFavorites = false;
this.DataRoot.SupportedFavorites = 0;
this.DataRoot.AddChannelList(this.allChannels);
allChannels.VisibleColumnFieldNames = new List<string>
{
"Position",
"Name",
"OriginalNetworkId",
"TransportStreamId",
"ServiceId"
};
}
#endregion
public override string DisplayName => ".txt Reference List Loader";
#region Load()
public override void Load()
{
this.ReadChannels();
}
#endregion
#region ReadChannels()
private void ReadChannels()
{
var lineNr = 0;
using (var file = new StreamReader(this.FileName))
{
string line;
while ((line = file.ReadLine()) != null)
{
++lineNr;
var parts = line.Split(Separators);
if (parts.Length < 2)
continue;
int progNr;
if (!int.TryParse(parts[0], out progNr))
continue;
var channel = new ChannelInfo(allChannels.SignalSource, lineNr, progNr, parts[1]);
if (parts.Length >= 3)
{
var subParts = parts[2].Split('-');
if (subParts.Length >= 3)
{
int val;
if (int.TryParse(subParts[0], out val))
channel.OriginalNetworkId = val;
if (int.TryParse(subParts[1], out val))
channel.TransportStreamId = val;
if (int.TryParse(subParts[2], out val))
channel.ServiceId = val;
}
}
this.DataRoot.AddChannel(this.allChannels, channel);
lineNr++;
}
}
}
#endregion
#region GetFileInformation()
public override string GetFileInformation()
{
var sb = new StringBuilder();
sb.Append(base.GetFileInformation());
return sb.ToString();
}
#endregion
#region Save()
public override void Save(string tvOutputFile)
{
Save(tvOutputFile, this.allChannels);
this.FileName = tvOutputFile;
}
public static void Save(string fileName, ChannelList list)
{
var samToolBoxMode = (Path.GetExtension(fileName) ?? "").ToLower() == ".chl";
using (var writer = new StreamWriter(fileName, false, Encoding.UTF8))
{
foreach (var channel in list.GetChannelsByNewOrder())
{
if (channel.NewProgramNr == -1) continue;
writer.Write(channel.NewProgramNr);
writer.Write(Separators[0]);
writer.Write(channel.Name);
if (!samToolBoxMode)
{
writer.Write(Separators[0]);
writer.Write(channel.OriginalNetworkId);
writer.Write("-");
writer.Write(channel.TransportStreamId);
writer.Write("-");
writer.Write(channel.ServiceId);
}
writer.WriteLine();
}
}
}
#endregion
}
}