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