diff --git a/ChanSort.Api/Controller/ChlFileSerializer.cs b/ChanSort.Api/Controller/ChlFileSerializer.cs
index b02ea17..1c17f47 100644
--- a/ChanSort.Api/Controller/ChlFileSerializer.cs
+++ b/ChanSort.Api/Controller/ChlFileSerializer.cs
@@ -19,6 +19,9 @@ namespace ChanSort.Api
#region Load()
public string Load(string fileName, DataRoot root, ChannelList list)
{
+ if (list.ReadOnly)
+ return "The current channel list is read-only";
+
this.lineNumber = 0;
this.dataRoot = root;
this.channelList = list;
diff --git a/ChanSort.Api/Controller/CsvFileSerializer.cs b/ChanSort.Api/Controller/CsvFileSerializer.cs
index 59300f4..8f13962 100644
--- a/ChanSort.Api/Controller/CsvFileSerializer.cs
+++ b/ChanSort.Api/Controller/CsvFileSerializer.cs
@@ -133,7 +133,7 @@ namespace ChanSort.Api
private ChannelList GetInitiallyClearedChannelList(SignalSource signalSource)
{
var channelList = dataRoot.GetChannelList(signalSource);
- if (channelList == null)
+ if (channelList == null || channelList.ReadOnly)
return null;
if (!this.clearedLists.Contains(channelList))
{
diff --git a/ChanSort.Api/Model/ChannelList.cs b/ChanSort.Api/Model/ChannelList.cs
index 0baf409..922761e 100644
--- a/ChanSort.Api/Model/ChannelList.cs
+++ b/ChanSort.Api/Model/ChannelList.cs
@@ -28,6 +28,7 @@ namespace ChanSort.Api
public int Count { get { return channels.Count; } }
public int DuplicateUidCount { get { return duplicateUidCount; } }
public int DuplicateProgNrCount { get { return duplicateProgNrCount; } }
+ public bool ReadOnly { get; set; }
#region Caption
public string Caption
diff --git a/ChanSort.Loader.LG/PresetProgramNrDialog.Designer.cs b/ChanSort.Loader.LG/PresetProgramNrDialog.Designer.cs
index 0dad15f..980d3bb 100644
--- a/ChanSort.Loader.LG/PresetProgramNrDialog.Designer.cs
+++ b/ChanSort.Loader.LG/PresetProgramNrDialog.Designer.cs
@@ -37,42 +37,74 @@
this.labelControl7 = new DevExpress.XtraEditors.LabelControl();
this.linkDetails = new System.Windows.Forms.LinkLabel();
this.btnOk = new DevExpress.XtraEditors.SimpleButton();
+ this.labelControl2 = new DevExpress.XtraEditors.LabelControl();
this.SuspendLayout();
//
// labelControl1
//
resources.ApplyResources(this.labelControl1, "labelControl1");
+ this.labelControl1.Appearance.DisabledImage = ((System.Drawing.Image)(resources.GetObject("labelControl1.Appearance.DisabledImage")));
+ this.labelControl1.Appearance.GradientMode = ((System.Drawing.Drawing2D.LinearGradientMode)(resources.GetObject("labelControl1.Appearance.GradientMode")));
+ this.labelControl1.Appearance.HoverImage = ((System.Drawing.Image)(resources.GetObject("labelControl1.Appearance.HoverImage")));
+ this.labelControl1.Appearance.Image = ((System.Drawing.Image)(resources.GetObject("labelControl1.Appearance.Image")));
+ this.labelControl1.Appearance.PressedImage = ((System.Drawing.Image)(resources.GetObject("labelControl1.Appearance.PressedImage")));
this.labelControl1.Appearance.TextOptions.WordWrap = DevExpress.Utils.WordWrap.Wrap;
this.labelControl1.Name = "labelControl1";
//
// labelControl3
//
resources.ApplyResources(this.labelControl3, "labelControl3");
+ this.labelControl3.Appearance.DisabledImage = ((System.Drawing.Image)(resources.GetObject("labelControl3.Appearance.DisabledImage")));
this.labelControl3.Appearance.Font = ((System.Drawing.Font)(resources.GetObject("labelControl3.Appearance.Font")));
+ this.labelControl3.Appearance.GradientMode = ((System.Drawing.Drawing2D.LinearGradientMode)(resources.GetObject("labelControl3.Appearance.GradientMode")));
+ this.labelControl3.Appearance.HoverImage = ((System.Drawing.Image)(resources.GetObject("labelControl3.Appearance.HoverImage")));
+ this.labelControl3.Appearance.Image = ((System.Drawing.Image)(resources.GetObject("labelControl3.Appearance.Image")));
+ this.labelControl3.Appearance.PressedImage = ((System.Drawing.Image)(resources.GetObject("labelControl3.Appearance.PressedImage")));
this.labelControl3.Appearance.TextOptions.WordWrap = DevExpress.Utils.WordWrap.Wrap;
this.labelControl3.Name = "labelControl3";
//
// labelControl4
//
resources.ApplyResources(this.labelControl4, "labelControl4");
+ this.labelControl4.Appearance.DisabledImage = ((System.Drawing.Image)(resources.GetObject("labelControl4.Appearance.DisabledImage")));
+ this.labelControl4.Appearance.Font = ((System.Drawing.Font)(resources.GetObject("labelControl4.Appearance.Font")));
+ this.labelControl4.Appearance.GradientMode = ((System.Drawing.Drawing2D.LinearGradientMode)(resources.GetObject("labelControl4.Appearance.GradientMode")));
+ this.labelControl4.Appearance.HoverImage = ((System.Drawing.Image)(resources.GetObject("labelControl4.Appearance.HoverImage")));
+ this.labelControl4.Appearance.Image = ((System.Drawing.Image)(resources.GetObject("labelControl4.Appearance.Image")));
+ this.labelControl4.Appearance.PressedImage = ((System.Drawing.Image)(resources.GetObject("labelControl4.Appearance.PressedImage")));
this.labelControl4.Appearance.TextOptions.WordWrap = DevExpress.Utils.WordWrap.Wrap;
this.labelControl4.Name = "labelControl4";
//
// labelControl5
//
resources.ApplyResources(this.labelControl5, "labelControl5");
+ this.labelControl5.Appearance.DisabledImage = ((System.Drawing.Image)(resources.GetObject("labelControl5.Appearance.DisabledImage")));
+ this.labelControl5.Appearance.GradientMode = ((System.Drawing.Drawing2D.LinearGradientMode)(resources.GetObject("labelControl5.Appearance.GradientMode")));
+ this.labelControl5.Appearance.HoverImage = ((System.Drawing.Image)(resources.GetObject("labelControl5.Appearance.HoverImage")));
+ this.labelControl5.Appearance.Image = ((System.Drawing.Image)(resources.GetObject("labelControl5.Appearance.Image")));
+ this.labelControl5.Appearance.PressedImage = ((System.Drawing.Image)(resources.GetObject("labelControl5.Appearance.PressedImage")));
this.labelControl5.Appearance.TextOptions.WordWrap = DevExpress.Utils.WordWrap.Wrap;
this.labelControl5.Name = "labelControl5";
//
// labelControl6
//
resources.ApplyResources(this.labelControl6, "labelControl6");
+ this.labelControl6.Appearance.DisabledImage = ((System.Drawing.Image)(resources.GetObject("labelControl6.Appearance.DisabledImage")));
+ this.labelControl6.Appearance.GradientMode = ((System.Drawing.Drawing2D.LinearGradientMode)(resources.GetObject("labelControl6.Appearance.GradientMode")));
+ this.labelControl6.Appearance.HoverImage = ((System.Drawing.Image)(resources.GetObject("labelControl6.Appearance.HoverImage")));
+ this.labelControl6.Appearance.Image = ((System.Drawing.Image)(resources.GetObject("labelControl6.Appearance.Image")));
+ this.labelControl6.Appearance.PressedImage = ((System.Drawing.Image)(resources.GetObject("labelControl6.Appearance.PressedImage")));
this.labelControl6.Appearance.TextOptions.WordWrap = DevExpress.Utils.WordWrap.Wrap;
this.labelControl6.Name = "labelControl6";
//
// labelControl7
//
resources.ApplyResources(this.labelControl7, "labelControl7");
+ this.labelControl7.Appearance.DisabledImage = ((System.Drawing.Image)(resources.GetObject("labelControl7.Appearance.DisabledImage")));
+ this.labelControl7.Appearance.GradientMode = ((System.Drawing.Drawing2D.LinearGradientMode)(resources.GetObject("labelControl7.Appearance.GradientMode")));
+ this.labelControl7.Appearance.HoverImage = ((System.Drawing.Image)(resources.GetObject("labelControl7.Appearance.HoverImage")));
+ this.labelControl7.Appearance.Image = ((System.Drawing.Image)(resources.GetObject("labelControl7.Appearance.Image")));
+ this.labelControl7.Appearance.PressedImage = ((System.Drawing.Image)(resources.GetObject("labelControl7.Appearance.PressedImage")));
this.labelControl7.Appearance.TextOptions.WordWrap = DevExpress.Utils.WordWrap.Wrap;
this.labelControl7.Name = "labelControl7";
//
@@ -85,10 +117,21 @@
//
// btnOk
//
- this.btnOk.DialogResult = System.Windows.Forms.DialogResult.OK;
resources.ApplyResources(this.btnOk, "btnOk");
+ this.btnOk.DialogResult = System.Windows.Forms.DialogResult.OK;
this.btnOk.Name = "btnOk";
//
+ // labelControl2
+ //
+ resources.ApplyResources(this.labelControl2, "labelControl2");
+ this.labelControl2.Appearance.DisabledImage = ((System.Drawing.Image)(resources.GetObject("labelControl2.Appearance.DisabledImage")));
+ this.labelControl2.Appearance.GradientMode = ((System.Drawing.Drawing2D.LinearGradientMode)(resources.GetObject("labelControl2.Appearance.GradientMode")));
+ this.labelControl2.Appearance.HoverImage = ((System.Drawing.Image)(resources.GetObject("labelControl2.Appearance.HoverImage")));
+ this.labelControl2.Appearance.Image = ((System.Drawing.Image)(resources.GetObject("labelControl2.Appearance.Image")));
+ this.labelControl2.Appearance.PressedImage = ((System.Drawing.Image)(resources.GetObject("labelControl2.Appearance.PressedImage")));
+ this.labelControl2.Appearance.TextOptions.WordWrap = DevExpress.Utils.WordWrap.Wrap;
+ this.labelControl2.Name = "labelControl2";
+ //
// PresetProgramNrDialog
//
this.AcceptButton = this.btnOk;
@@ -96,6 +139,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnOk;
this.ControlBox = false;
+ this.Controls.Add(this.labelControl2);
this.Controls.Add(this.btnOk);
this.Controls.Add(this.linkDetails);
this.Controls.Add(this.labelControl7);
@@ -120,5 +164,6 @@
private DevExpress.XtraEditors.LabelControl labelControl7;
private System.Windows.Forms.LinkLabel linkDetails;
private DevExpress.XtraEditors.SimpleButton btnOk;
+ private DevExpress.XtraEditors.LabelControl labelControl2;
}
}
\ No newline at end of file
diff --git a/ChanSort.Loader.LG/PresetProgramNrDialog.de.resx b/ChanSort.Loader.LG/PresetProgramNrDialog.de.resx
index 9e06372..6aa0f48 100644
--- a/ChanSort.Loader.LG/PresetProgramNrDialog.de.resx
+++ b/ChanSort.Loader.LG/PresetProgramNrDialog.de.resx
@@ -117,31 +117,140 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
- Diese Datei enthält vordefinierte Programmnummern für Satellitenkanäle.
-
-
- Aufgrund von Fehlern in der LG Firmware 2009-2013 ist diese Liste instabil!
-
-
- Um Probleme mit der bearbeiteten Senderliste zu vermeiden, erwägen Sie bitte eine dieser Optionen:
-
-
- - Sauberen Kanalsuchlauf ausführen (ohne vordefinierte Länder-/Satelliten-/Providerlisten)
-
-
- - Hotel-Modus aktivieren (muss bereits vor dem Export der Senderliste vom TV auf USB erfolgen)
-
-
- - ChanSort's "TV-Datei bereinigen" Option aktivieren (nicht unterstützt bei 2013 LA-Serie)
+
+
+
+
+ Horizontal
+
+
+
+
+
+
+
+
+
+
+
+ Diese Datei enthält vordefinierte Programmnummern für Satellitenkanäle. Aufgrund von Eigenheiten der aktuellen LG Firmware können solche Listen nicht zuverlässig verändert werden.
+
+
+
+
+
+ Horizontal
+
+
+
+
+
+
+
+
+
+
+
+ Die Bearbeitung der Satelliten-Senderliste wurde gesperrt!
+
+
+
+
+
+ Horizontal
+
+
+
+
+
+
+
+
+
+
+
+ Um die Liste zu bearbeiten, muss ein sauberer Vollsuchlauf ausgeführt werden:
+
+
+
+
+
+ Horizontal
+
+
+
+
+
+
+
+
+
+
+
+ - Behalten Sie eine Kopie dieser TLL-Datei, um sie eventuell später als Referenzdatei zu verwenden
+
+
+
+
+
+ Horizontal
+
+
+
+
+
+
+
+
+
+
+
+ - Führen Sie einen automatischen Suchlauf mit den Optionen "Voll", "Keiner", "Blindsuche" aus
+
+
+
+
+
+ Horizontal
+
+
+
+
+
+
+
+
+
+
+
+ - Führen Sie am TV die Funktion "Werkseinstellung" aus
+
214, 13
Details hierzu gibt es auf der ChanSort Wiki
+
+
+
+
+ Horizontal
+
+
+
+
+
+
+
+
+
+
+
+ - Speichern Sie die neue Liste auf USB und öffnen Sie sie mit ChanSort
+
Wichtiger Hinweis
diff --git a/ChanSort.Loader.LG/PresetProgramNrDialog.resx b/ChanSort.Loader.LG/PresetProgramNrDialog.resx
index 1b12515..3205da2 100644
--- a/ChanSort.Loader.LG/PresetProgramNrDialog.resx
+++ b/ChanSort.Loader.LG/PresetProgramNrDialog.resx
@@ -117,263 +117,407 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- Top, Left, Right
+
+
+ 559, 13
+
+
+ 3
+
+
+
+ 3
+
+
+ True
+
+
+ 5
+
+
+ - Save the new list to USB and open it with ChanSort
+
+
+ System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 254, 224
+
+
+ DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+
+
+ 0
Vertical
-
-
- 12, 12
-
-
- 560, 13
-
-
-
- 0
-
-
- This file contains satellite channels with preset program numbers.
-
-
- labelControl1
-
-
- DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-
-
- $this
-
-
- 7
-
-
- Top, Left, Right
-
-
+
Tahoma, 8.25pt, style=Bold
-
- Vertical
+
+
+
-
- 12, 41
+
+
-
- 559, 13
-
-
- 2
-
-
- Because of errors in LG's 2009-2013 firmware this list is unstable!
-
-
- labelControl3
-
-
- DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-
-
- $this
-
-
- 6
-
-
- Top, Left, Right
-
-
- Vertical
-
-
- 13, 70
-
-
- 559, 13
-
-
- 3
-
-
- To prevent problems with your edited channel list please consider one of these options:
-
-
- labelControl4
-
-
- DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-
-
- $this
-
-
- 5
-
-
- Top, Left, Right
-
-
- Vertical
-
-
- 31, 87
-
-
- 541, 13
-
-
- 4
-
-
- - Run a clean channel search (without predefined country / satellite / provider lists)
-
-
- labelControl5
-
-
- DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-
-
- $this
-
-
- 4
+
+
Top, Left, Right
-
- Vertical
-
-
- 31, 122
-
-
- 541, 13
-
-
- 5
-
-
- - Enable Hotel-Mode (must be done before exporting the channel list from your TV)
-
-
- labelControl6
-
-
- DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-
-
+
$this
-
- 3
-
-
- Top, Left, Right
-
-
- Vertical
-
-
- 31, 104
-
-
- 541, 13
-
-
- 6
-
-
- - Enable ChanSort's "Cleanup TV Data File" option (not supported for LA-series)
-
-
- labelControl7
-
-
- DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-
-
- $this
-
-
- 2
-
-
- True
-
-
- 13, 156
-
165, 13
-
- 7
+
+ PresetProgramNrDialog
-
- See the ChanSort Wiki for details
+
+ $this
+
+
+
+
+
+
+
+
+ Top, Left, Right
+
+
+ 11, 21
+
+
+ Editing of the satellite channel list is disabled!
+
+
+ DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+
+
+
+
+
+ This file contains preset program numbers for satellite channels. Due to issues with most recent LG firmwares such lists can no longer be modified reliably.
+
+
+
+
+
+ labelControl3
+
+
+ 559, 13
+
+
+
+
+
+ 30, 122
+
+
+ $this
+
+
+ DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+
+
+ Vertical
+
+
+ 560, 26
+
+
+ 9, 199
+
+
+ Top, Left, Right
+
+
+ 4
+
+
+ 9
+
+
+ Top, Left, Right
+
+
+
+
+
+ Vertical
+
+
+
+
+
+ 29, 159
+
+
+ $this
+
+
+ labelControl5
+
+
+
+
+
+ 8
+
+
+ 541, 13
+
+
+ Top, Left, Right
+
+
+ 30, 105
+
+
+ Vertical
+
+
+ 30, 140
linkDetails
-
- System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
-
+
+ Vertical
+
+
+ Bottom, Left
+
+
+
+
+
+
+
+
+ Horizontal
+
+
+ Horizontal
+
+
+ - Execute a Factory Reset on your TV
+
+
+ Vertical
+
+
+ See the ChanSort Wiki for details
+
+
+ DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+
+
+ Horizontal
+
+
+ labelControl6
+
+
+ 2
+
+
+ 6, 13
+
+
+
+
+
+ Horizontal
+
+
+
+
+
+ 541, 13
+
+
+ 12, 88
+
+
$this
-
- 1
+
+
-
- 254, 202
+
+ $this
-
- 75, 23
+
+ labelControl7
-
- 8
+
+
-
- Ok
-
-
- btnOk
-
-
- DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+
+ 7
$this
-
- 0
+
+
-
- True
-
-
- 6, 13
+
+ - Execute an automatic channel search with options "Full", "None" and "Blind search"
+
+
+
+
+
+ 1
+
+
+ 10, 49
- 584, 237
+ 584, 262
-
- CenterScreen
+
+ 6
+
+
+ labelControl4
+
+
+
+
+
+ 8
+
+
+ DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+
+
+
+
+
+ labelControl1
+
+
+ 0
+
+
+
+
+
+ $this
Important Notice
-
- PresetProgramNrDialog
+
+ - Keep a copy of the current TLL file if you want to use it as a reference list later
+
+
+ Vertical
+
+
+ CenterScreen
+
+
+ 7
+
+
+ Horizontal
+
+
+ 6
+
+
+ Ok
+
+
+ 2
+
+
+ Horizontal
+
+
+ 541, 13
+
+
+
+
+
+ btnOk
+
+
+ Tahoma, 8.25pt, style=Bold
+
+
+
+
+
+ 5
+
+
+
+
+
+ 4
+
+
+ $this
+
+
+ 75, 23
+
+
+
+
+
+ DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+
+
+ labelControl2
+
+
+ To enable editing you must first run a clean full channel search:
+
+
+ Top, Left, Right
+
+
+
+
+
+ 541, 13
+
+
+ DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+
+
+ Top, Left, Right
+
+
+ Horizontal
+
+
+ DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v12.2, Version=12.2.8.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+
+ True
+
+
+ de
+
\ No newline at end of file
diff --git a/ChanSort.Loader.LG/SatTransponder.cs b/ChanSort.Loader.LG/SatTransponder.cs
index da67dd2..547c592 100644
--- a/ChanSort.Loader.LG/SatTransponder.cs
+++ b/ChanSort.Loader.LG/SatTransponder.cs
@@ -1,7 +1,4 @@
-#define SYMBOL_RATE_ROUNDING
-
-using System.Globalization;
-using ChanSort.Api;
+using ChanSort.Api;
namespace ChanSort.Loader.LG
{
@@ -37,13 +34,8 @@ namespace ChanSort.Loader.LG
this.TransportStreamId = mapping.GetWord(_TransportStreamId);
this.symbolRate = mapping.GetWord(_SymbolRate);
-#if SYMBOL_RATE_ROUNDING
if (this.symbolRate%100 >= 95)
- {
this.symbolRate = (this.symbolRate/100 + 1)*100;
- mapping.SetWord(_SymbolRate, (mapping.GetWord(_SymbolRate) & 0x8000) + this.symbolRate);
- }
-#endif
// note: a correction factor is applied later after all transponders were loaded (*0.5, *1, *2)
this.Satellite = dataRoot.Satellites.TryGet(mapping.GetByte(_SatIndex)/2);
@@ -83,14 +75,7 @@ namespace ChanSort.Loader.LG
public override int SymbolRate
{
get { return symbolRate; }
- set
- {
-#if false
- mapping.SetDataPtr(this.data, this.offset);
- mapping.SetWord(_SymbolRate, value);
-#endif
- this.symbolRate = value;
- }
+ set { this.symbolRate = value; }
}
}
}
diff --git a/ChanSort.Loader.LG/TllFileSerializer.cs b/ChanSort.Loader.LG/TllFileSerializer.cs
index 8ec520a..9055944 100644
--- a/ChanSort.Loader.LG/TllFileSerializer.cs
+++ b/ChanSort.Loader.LG/TllFileSerializer.cs
@@ -135,10 +135,19 @@ namespace ChanSort.Loader.LG
this.ReadFirmwareDataBlock(ref off);
this.ReadDvbCtChannels(ref off);
this.ReadDvbSBlock(ref off);
- this.ReadSettingsBlock(ref off);
+ this.ReadSettingsBlock(ref off);
- if (this.presetChannels > 0 && !IsTesting)
- new PresetProgramNrDialog().ShowDialog();
+ if (this.presetChannels > 0)
+ {
+ this.satTvChannels.ReadOnly = true;
+ this.satRadioChannels.ReadOnly = true;
+ foreach (var channel in this.satTvChannels.Channels)
+ channel.NewProgramNr = channel.OldProgramNr;
+ foreach (var channel in this.satRadioChannels.Channels)
+ channel.NewProgramNr = channel.OldProgramNr;
+ if (!IsTesting)
+ new PresetProgramNrDialog().ShowDialog();
+ }
#if STORE_DVBS_CHANNELS_IN_DATABASE
this.StoreToDatabase();
diff --git a/ChanSort.Loader.Samsung/ModelConstants.cs b/ChanSort.Loader.Samsung/ModelConstants.cs
index 62b03cd..57a04b8 100644
--- a/ChanSort.Loader.Samsung/ModelConstants.cs
+++ b/ChanSort.Loader.Samsung/ModelConstants.cs
@@ -4,6 +4,7 @@ namespace ChanSort.Loader.Samsung
{
internal class ModelConstants
{
+ public readonly string series;
public readonly int dvbsSatelliteLength;
public readonly int dvbsTransponderLength;
public readonly int dvbsChannelLength;
@@ -18,6 +19,7 @@ namespace ChanSort.Loader.Samsung
public ModelConstants(IniFile.Section iniSection)
{
+ this.series = iniSection.Name.Substring(iniSection.Name.Length - 1);
this.avbtChannelLength = iniSection.GetInt("map-AirA");
this.dvbtChannelLength = iniSection.GetInt("map-AirD");
this.dvbsChannelLength = iniSection.GetInt("map-SateD");
diff --git a/ChanSort.Loader.Samsung/ScmSerializer.cs b/ChanSort.Loader.Samsung/ScmSerializer.cs
index ad766e3..bacec5a 100644
--- a/ChanSort.Loader.Samsung/ScmSerializer.cs
+++ b/ChanSort.Loader.Samsung/ScmSerializer.cs
@@ -560,5 +560,13 @@ namespace ChanSort.Loader.Samsung
"Device Settings",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
+
+ // ------- testing -----------
+
+ internal string Series { get { return c.series; } }
+ internal int AnalogChannelLength { get { return c.avbtChannelLength; } }
+ internal int DigitalChannelLength { get { return c.dvbtChannelLength; } }
+ internal int SatChannelLength { get { return c.dvbsChannelLength; } }
+ internal int HdPlusChannelLength { get { return c.hdplusChannelLength; } }
}
}
diff --git a/ChanSort/MainForm.Designer.cs b/ChanSort/MainForm.Designer.cs
index 0bababf..e7d410a 100644
--- a/ChanSort/MainForm.Designer.cs
+++ b/ChanSort/MainForm.Designer.cs
@@ -1494,7 +1494,6 @@
this.Name = "MainForm";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing);
this.Load += new System.EventHandler(this.MainForm_Load);
- this.Shown += new System.EventHandler(this.MainForm_Shown);
((System.ComponentModel.ISupportInitialize)(this.splitContainerControl1)).EndInit();
this.splitContainerControl1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.grpOutputList)).EndInit();
diff --git a/ChanSort/MainForm.cs b/ChanSort/MainForm.cs
index f6892cd..6712927 100644
--- a/ChanSort/MainForm.cs
+++ b/ChanSort/MainForm.cs
@@ -24,7 +24,7 @@ namespace ChanSort.Ui
{
public partial class MainForm : XtraForm
{
- public const string AppVersion = "v2013-05-11";
+ public const string AppVersion = "v2013-05-16";
private const int MaxMruEntries = 5;
@@ -297,7 +297,6 @@ namespace ChanSort.Ui
}
}
regex += "]*";
- this.btnToggleFavE.Enabled = (favorites & Favorites.E) != 0;
this.repositoryItemCheckedComboBoxEdit1.Mask.EditMask = regex;
this.repositoryItemCheckedComboBoxEdit2.Mask.EditMask = regex;
}
@@ -429,7 +428,7 @@ namespace ChanSort.Ui
if (File.Exists(path))
{
dlg.InitialDirectory = dir;
- dlg.FileName = path; // file;
+ dlg.FileName = file; // path
}
else
{
@@ -525,7 +524,12 @@ namespace ChanSort.Ui
if (gviewLeft.IsValidRowHandle(0))
this.SelectFocusedRow(this.gviewLeft, 0);
+ bool allowEdit = channelList != null && !channelList.ReadOnly;
+ this.gviewLeft.OptionsBehavior.Editable = allowEdit;
+ this.gviewRight.OptionsBehavior.Editable = allowEdit;
+
this.UpdateInsertSlotTextBox();
+ this.UpdateMenu();
}
#endregion
@@ -536,7 +540,8 @@ namespace ChanSort.Ui
string extension = Path.GetExtension(this.currentTvSerializer.FileName) ?? ".";
using (SaveFileDialog dlg = new SaveFileDialog())
{
- dlg.FileName = this.currentTvFile;
+ dlg.InitialDirectory = Path.GetDirectoryName(this.currentTvFile);
+ dlg.FileName = Path.GetFileName(this.currentTvFile);
dlg.AddExtension = true;
dlg.DefaultExt = extension;
dlg.Filter = string.Format(Resources.MainForm_FileDialog_SaveFileFilter, extension);
@@ -1061,6 +1066,7 @@ namespace ChanSort.Ui
private bool GetGridColumnVisibility(GridColumn col, SignalSource source)
{
+ if (col == this.colChannelOrTransponder) return (source & SignalSource.Sat) == 0;
if (col == this.colShortName) return (source & SignalSource.Digital) != 0;
if (col == this.colEncrypted) return (source & SignalSource.Digital) != 0;
if (col == this.colServiceId) return (source & SignalSource.Digital) != 0;
@@ -1166,6 +1172,22 @@ namespace ChanSort.Ui
{
bool fileLoaded = this.dataRoot != null;
bool isRight = this.lastFocusedGrid == this.gviewRight;
+ bool mayEdit = fileLoaded && this.currentChannelList != null && !this.currentChannelList.ReadOnly;
+
+ foreach (BarItemLink link in this.miEdit.ItemLinks)
+ link.Item.Enabled = mayEdit;
+
+ this.btnAdd.Enabled = mayEdit;
+ this.btnAddAll.Enabled = mayEdit;
+ this.btnRemoveLeft.Enabled = mayEdit;
+ this.btnRemoveRight.Enabled = mayEdit;
+ this.btnRenum.Enabled = mayEdit;
+ this.btnToggleFavA.Enabled = mayEdit && (this.dataRoot.SupportedFavorites & Favorites.A) != 0;
+ this.btnToggleFavB.Enabled = mayEdit && (this.dataRoot.SupportedFavorites & Favorites.B) != 0;
+ this.btnToggleFavC.Enabled = mayEdit && (this.dataRoot.SupportedFavorites & Favorites.C) != 0;
+ this.btnToggleFavD.Enabled = mayEdit && (this.dataRoot.SupportedFavorites & Favorites.D) != 0;
+ this.btnToggleFavE.Enabled = mayEdit && (this.dataRoot.SupportedFavorites & Favorites.E) != 0;
+ this.btnToggleLock.Enabled = mayEdit;
this.miReload.Enabled = fileLoaded;
this.miFileInformation.Enabled = fileLoaded;
@@ -1189,7 +1211,8 @@ namespace ChanSort.Ui
var sel = this.gviewLeft.GetSelectedRows();
var channel = sel.Length == 0 ? null : (ChannelInfo) this.gviewRight.GetRow(sel[0]);
- this.miMoveUp.Enabled = channel != null && channel.NewProgramNr > 1;
+ this.miMoveUp.Enabled = this.btnUp.Enabled = mayEdit && channel != null && channel.NewProgramNr > this.currentChannelList.FirstProgramNumber;
+ this.miMoveDown.Enabled = this.btnDown.Enabled = mayEdit;
this.miTvSettings.Enabled = this.currentTvSerializer != null;
this.miCleanupChannels.Visibility = this.currentTvSerializer != null &&
@@ -1397,18 +1420,6 @@ namespace ChanSort.Ui
}
#endregion
- #region MainForm_Shown
- private void MainForm_Shown(object sender, EventArgs e)
- {
- try
- {
- if (this.mruFiles.Count > 0 && File.Exists(this.mruFiles[0]))
- this.LoadFiles(null, this.mruFiles[0]);
- }
- catch (Exception ex) { HandleException(ex); }
- }
- #endregion
-
// -- menus
#region File menu
@@ -1755,7 +1766,7 @@ namespace ChanSort.Ui
{
if (this.gviewRight.ActiveEditor != null)
return;
- if (e.KeyCode == Keys.Enter)
+ if (e.KeyCode == Keys.Enter && this.currentChannelList !=null && !this.currentChannelList.ReadOnly)
{
TryExecute(this.AddChannels);
e.Handled = true;
@@ -1908,6 +1919,8 @@ namespace ChanSort.Ui
#region gridLeft_ProcessGridKey
private void gridLeft_ProcessGridKey(object sender, KeyEventArgs e)
{
+ if (this.currentChannelList != null && this.currentChannelList.ReadOnly)
+ return;
if (gviewLeft.ActiveEditor != null)
return;
if (e.KeyCode == Keys.Delete)
diff --git a/Test.Loader/SamsungTest.cs b/Test.Loader/SamsungTest.cs
index 1e177fa..a18ca65 100644
--- a/Test.Loader/SamsungTest.cs
+++ b/Test.Loader/SamsungTest.cs
@@ -51,11 +51,40 @@ namespace Test.Loader
serializer.Load();
- var fileName = Path.GetFileName(file) ?? "";
- string key = fileName.StartsWith("channel_list_") ? fileName.Substring(13, fileName.IndexOf('_',14)-13) : fileName;
-
+ var fileName = Path.GetFileName(file) ?? "";
+ var model = this.GetSamsungModel(file);
+ var analogAirList = serializer.DataRoot.GetChannelList(ChanSort.Api.SignalSource.AnalogT | ChanSort.Api.SignalSource.Tv);
+ var analogCableList = serializer.DataRoot.GetChannelList(ChanSort.Api.SignalSource.AnalogC | ChanSort.Api.SignalSource.Tv);
+ var digitalAirList = serializer.DataRoot.GetChannelList(ChanSort.Api.SignalSource.DvbT | ChanSort.Api.SignalSource.Tv);
+ var digitalCableList = serializer.DataRoot.GetChannelList(ChanSort.Api.SignalSource.DvbC | ChanSort.Api.SignalSource.Tv);
+ var satChannelList = serializer.DataRoot.GetChannelList(ChanSort.Api.SignalSource.DvbS | ChanSort.Api.SignalSource.Tv);
+ var hdChannelList = serializer.DataRoot.GetChannelList(ChanSort.Api.SignalSource.DvbS|ChanSort.Api.SignalSource.AstraHdPlus | ChanSort.Api.SignalSource.Tv);
+ string key = serializer.Series +
+ "\t" + model +
+ "\t" + serializer.AnalogChannelLength +
+ "\t" + (analogAirList != null && analogAirList.Count > 0) +
+ "\t" + (analogCableList != null && analogCableList.Count > 0) +
+ "\t" + serializer.DigitalChannelLength +
+ "\t" + (digitalAirList != null && digitalAirList.Count > 0) +
+ "\t" + (digitalCableList != null && digitalCableList.Count > 0) +
+ "\t" + serializer.SatChannelLength +
+ "\t" + (satChannelList != null && satChannelList.Count > 0) +
+ "\t" + serializer.HdPlusChannelLength +
+ "\t" + (hdChannelList != null && hdChannelList.Count > 0);
string relPath = Path.GetFileName(Path.GetDirectoryName(file)) + "\\" + fileName;
- models[key] = relPath;
+ models[key] = serializer.Series +
+ "\t" + model +
+ "\t" + serializer.AnalogChannelLength +
+ "\t" + serializer.DigitalChannelLength +
+ "\t" + serializer.SatChannelLength +
+ "\t" + serializer.HdPlusChannelLength +
+ "\t" + (analogAirList == null ? 0 : analogAirList.Count) +
+ "\t" + (analogCableList == null ? 0 : analogCableList.Count) +
+ "\t" + (digitalAirList == null ? 0 : digitalAirList.Count) +
+ "\t" + (digitalCableList == null ? 0 : digitalCableList.Count) +
+ "\t" + (satChannelList == null ? 0 : satChannelList.Count) +
+ "\t" + (hdChannelList == null ? 0 : hdChannelList.Count) +
+ "\t" + relPath;
Assert.IsFalse(serializer.DataRoot.IsEmpty, "No channels loaded from " + file);
@@ -85,12 +114,18 @@ namespace Test.Loader
}
foreach (var model in models.OrderBy(e => e.Key))
- Debug.WriteLine(model.Key + "\t" + model.Value);
+ Debug.WriteLine(model.Value);
if (expectedData.Count > 0)
Assert.Fail("Some files were not tested: " + expectedData.Keys.Aggregate((prev, cur) => prev + "," + cur));
Assert.AreEqual("", errors.ToString());
}
+
+ private string GetSamsungModel(string filePath)
+ {
+ string fileName = Path.GetFileNameWithoutExtension(filePath) ?? "";
+ return fileName.StartsWith("channel_list_") ? fileName.Substring(13, fileName.IndexOf('_', 14) - 13) : fileName;
+ }
#endregion
}
}
diff --git a/readme.txt b/readme.txt
index e53889b..1a51b95 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,15 +1,9 @@
-Version v2013-05-11 ======================================================
+Version v2013-05-16 ======================================================
Changes:
-- TV data files can be used as reference lists (without exporting .csv)
-- added "Export Excel list" function
-- added hotkeys to many menu items
-- added most recently used files to menu
-- added support to enable Hotel Mode for LH3000 and LN models
-- fixed: saved incorrect DVB-S transponder symbol rate for LG's LK950S, LV,
- LW and LN models
-- re-added a fixed version of "TV-Set / Clean channel data" function for
- LG TV's.
+- FIX: on LG's LA and LN models the DVB-S symbol rate got corrupted
+- disabled editing of LG channel lists whith preset program numbers
+- last file is no longer loaded automatically when starting ChanSort
The complete change log can be found at the end of this document
@@ -107,6 +101,11 @@ OTHER DEALINGS IN THE SOFTWARE.
Change log ================================================================
+2013-05-16
+- FIX: on LG's LA and LN models the DVB-S symbol rate got corrupted
+- disabled editing of LG channel lists whith preset program numbers
+- last file is no longer loaded automatically when starting ChanSort
+
2013-05-11
- TV data files can be used as reference lists (without exporting .csv)
- added "File / Export Excel list" function