reference list management redesigned

This commit is contained in:
hbeham
2013-04-03 23:26:09 +02:00
parent 1cb8389d7a
commit c6e0a60e70
16 changed files with 274 additions and 213 deletions

View File

@@ -43,9 +43,8 @@ namespace ChanSort.Loader.TllFile
protected void InitCommonData(int slot, SignalSource signalSource, DataMapping data)
{
this.RecordIndex = slot;
this.SignalSource = signalSource;
var nr = data.GetWord(_ProgramNr);
this.SignalType = this.GetSignalType(nr);
this.SignalSource = signalSource | ((nr & 0x4000) == 0 ? SignalSource.Tv : SignalSource.Radio);
this.OldProgramNr = (nr & 0x3FFF);
this.ParseNames();
@@ -72,15 +71,6 @@ namespace ChanSort.Loader.TllFile
}
#endregion
#region GetSignalType()
protected SignalType GetSignalType(uint programNr)
{
if ((programNr & 0x4000) != 0)
return SignalType.Radio;
return SignalType.Tv;
}
#endregion
#region ParseNames()
private void ParseNames()
{
@@ -98,7 +88,7 @@ namespace ChanSort.Loader.TllFile
public override void UpdateRawData()
{
mapping.SetDataPtr(this.rawData, this.baseOffset);
mapping.SetWord(_ProgramNr, this.NewProgramNr + (this.SignalType == SignalType.Radio ? 0x4000 : 0));
mapping.SetWord(_ProgramNr, this.NewProgramNr | ((this.SignalSource & SignalSource.Radio) != 0 ? 0x4000 : 0));
mapping.SetWord(_ProgramNr2, (mapping.GetWord(_ProgramNr2) & 0x0003) | (this.NewProgramNr << 2));
if (this.IsNameModified)
{

View File

@@ -20,10 +20,16 @@ namespace ChanSort.Loader.TllFile
private readonly string ERR_wrongChecksum = Resource.TllFileSerializer_ERR_wrongChecksum;
private readonly string ERR_dupeChannel = Resource.TllFileSerializer_ERR_dupeChannel;
private readonly Dictionary<int, DvbsDataLayout> satConfigs = new Dictionary<int, DvbsDataLayout>();
private readonly MappingPool<DataMapping> actMappings = new MappingPool<DataMapping>("Analog and DVB-C/T");
private readonly MappingPool<DataMapping> dvbsMappings = new MappingPool<DataMapping>("DVB-S");
private readonly MappingPool<FirmwareData> firmwareMappings = new MappingPool<FirmwareData>("Firmware");
private readonly Dictionary<int, DvbsDataLayout> satConfigs = new Dictionary<int, DvbsDataLayout>();
private readonly ChannelList atvChannels = new ChannelList(SignalSource.AnalogCT | SignalSource.Tv, "Analog TV");
private readonly ChannelList dtvChannels = new ChannelList(SignalSource.DvbCT | SignalSource.Tv, "DTV");
private readonly ChannelList radioChannels = new ChannelList(SignalSource.DvbCT | SignalSource.Radio, "Radio");
private readonly ChannelList satTvChannels = new ChannelList(SignalSource.DvbS | SignalSource.Tv, "Sat-DTV");
private readonly ChannelList satRadioChannels = new ChannelList(SignalSource.DvbS | SignalSource.Radio, "Sat-Radio");
private byte[] fileContent;
@@ -60,7 +66,6 @@ namespace ChanSort.Loader.TllFile
#region ctor()
public TllFileSerializer(string inputFile) : base(inputFile)
{
this.Features.ChannelNameEdit = true;
this.Features.EraseChannelData = true;
this.Features.FileInformation = true;
@@ -74,6 +79,12 @@ namespace ChanSort.Loader.TllFile
};
this.ReadConfigurationFromIniFile();
this.DataRoot.AddChannelList(atvChannels);
this.DataRoot.AddChannelList(dtvChannels);
this.DataRoot.AddChannelList(radioChannels);
this.DataRoot.AddChannelList(satTvChannels);
this.DataRoot.AddChannelList(satRadioChannels);
}
#endregion
@@ -235,7 +246,7 @@ namespace ChanSort.Loader.TllFile
actMapping.SetDataPtr(fileContent, off);
ChannelInfo ci = channelFactory(i, actMapping);
var list = this.DataRoot.GetChannelList(ci.SignalSource, ci.SignalType, true);
var list = this.DataRoot.GetChannelList(ci.SignalSource);
this.DataRoot.AddChannel(list, ci);
off += recordSize;
@@ -415,7 +426,7 @@ namespace ChanSort.Loader.TllFile
++this.deletedChannelsSoft;
else
{
var list = this.DataRoot.GetChannelList(ci.SignalSource, ci.SignalType, true);
var list = this.DataRoot.GetChannelList(ci.SignalSource);
var dupes = list.GetChannelByUid(ci.Uid);
if (dupes.Count == 0)
{
@@ -531,14 +542,9 @@ namespace ChanSort.Loader.TllFile
#region ReorderActChannelsPhysically()
private void ReorderActChannelsPhysically()
{
var analogTv = this.DataRoot.GetChannelList(SignalSource.AnalogCT, SignalType.Tv, false);
var analogRadio = this.DataRoot.GetChannelList(SignalSource.AnalogCT, SignalType.Radio, false);
var analog = analogTv.Channels.Union(analogRadio.Channels).ToList();
this.ReorderChannelData(this.analogBlockOffset + 8, this.actChannelSize, this.analogChannelCount, analog);
this.ReorderChannelData(this.analogBlockOffset + 8, this.actChannelSize, this.analogChannelCount, this.atvChannels.Channels);
var dvbCtTv = this.DataRoot.GetChannelList(SignalSource.DvbCT, SignalType.Tv, false);
var dvbCtRadio = this.DataRoot.GetChannelList(SignalSource.DvbCT, SignalType.Radio, false);
var dvbCt = dvbCtTv.Channels.Union(dvbCtRadio.Channels).ToList();
var dvbCt = this.dtvChannels.Channels.Union(this.radioChannels.Channels).ToList();
this.ReorderChannelData(this.dvbctBlockOffset + 8, this.actChannelSize, this.dvbctChannelCount, dvbCt);
}
#endregion

View File

@@ -63,8 +63,8 @@ from channel c inner join chanseq s on s.listid=c.listid and s.slot=c.slot
if (this.dvbsBlockSize == 0)
return;
var list = this.DataRoot.GetChannelList(SignalSource.DvbS, SignalType.Tv, false);
if (list == null)
var list = this.DataRoot.GetChannelList(SignalSource.DvbS|SignalSource.Tv);
if (list == null || list.Count == 0)
return;
using (var conn = SqlClientFactory.Instance.CreateConnection())