diff --git a/readme.md b/readme.md index 4454214..0f9bed5 100644 --- a/readme.md +++ b/readme.md @@ -55,8 +55,8 @@ Supported TV models Special thanks to Hisense for supporting ChanSort with technical information and a test device! **Samsung** -.scm files: B (2009)*, B (2013), C, D, E, F, H series -.zip files: H, J, K, M series +.scm files: B (2009)*, B (2013), C, D, E, F, H, J series +.zip files: H, J, K, M, N and Q series Lists: Air analog, Air digital, Cable analog, Cable digital, Cable Prime, Sat digital, Astra HD+, Freesat, TivuSat, Canal Digital Sat, Digital+, Cyfra+ @@ -87,7 +87,7 @@ the channel list from/to USB can be found in the Wiki. Viera models with an svl.bin or svl.db channel list (most models since 2011) **Sony** -Android-TVs "sdb.xml" files using formats "FormateVer" 1.1.0 and "FormatVer" 1.0.0, 1.1.0 and 1.2.0 +Android-TVs "sdb.xml" files using formats "FormateVer" 1.1.0 and KDL 2012/2014 files using "FormatVer" 1.0.0, 1.1.0 and 1.2.0 **Toshiba** Models that export a .zip file containing chmgt.db, dvbSysData.db and dvbMainData.db files. diff --git a/readme_de.md b/readme_de.md index 54e794e..4a6a89c 100644 --- a/readme_de.md +++ b/readme_de.md @@ -54,7 +54,8 @@ Smart-Modelle (2016) mit channel.db Dateiformat, z.B. H65M5500 Besonderen Dank an Hisense für die Bereitstellung von technischen Informationen und einem Testgerät! **Samsung** -Serie: B (2009)*, B (2013), C, D, E, F, H, J +.scm Dateien: Serien B (2009)*, B (2013), C, D, E, F, H, J +.zip Dateien: Serien H, J, K, M, N and Q series Listen: Air analog, Air digital, Cable analog, Cable digital, Cable Prime, Sat digital, Astra HD+, Freesat, TivuSat, Canal Digital Sat, Digital+, Cyfra+ @@ -82,7 +83,7 @@ Eine Anleitung zum Aufruf des geheimen Service-Men Viera-Modelle mit svl.bin oder svl.db Dateien (die meisten Modelle seit 2011) **Sony** -Android-TV "sdb.xml" Dateien mit Versionen "FormateVer" 1.1.0 and "FormatVer" 1.0.0, 1.1.0 and 1.2.0 +Android-TV "sdb.xml" Dateien mit Versionen "FormateVer" 1.1.0 und KDL 2012/2014 mit "FormatVer" 1.0.0, 1.1.0 and 1.2.0 **ITT, Medion, Nabo, ok., PEAQ, Schaub-Lorenz, Silva-Schneider, Telefunken** Die Marken nutzen .sdx Dateien (derzeit wird nur Satellitenempfang unterstützt) diff --git a/source/ChanSort.Api/ChanSort.Api.csproj b/source/ChanSort.Api/ChanSort.Api.csproj index 382f2b7..3bc94e2 100644 --- a/source/ChanSort.Api/ChanSort.Api.csproj +++ b/source/ChanSort.Api/ChanSort.Api.csproj @@ -1,5 +1,5 @@  - + Debug AnyCPU @@ -10,7 +10,7 @@ Properties ChanSort.Api ChanSort.Api - v4.0 + v4.6 512 @@ -23,6 +23,7 @@ DEBUG;TRACE prompt 4 + false pdbonly @@ -31,6 +32,7 @@ TRACE prompt 4 + false true @@ -40,19 +42,23 @@ x86 prompt false + false - bin\x86\Release\ + ..\Release\ TRACE true pdbonly x86 prompt + false + + diff --git a/source/ChanSort.Api/Controller/CsvRefListSerializer.cs b/source/ChanSort.Api/Controller/CsvRefListSerializer.cs index 142665c..4df02cb 100644 --- a/source/ChanSort.Api/Controller/CsvRefListSerializer.cs +++ b/source/ChanSort.Api/Controller/CsvRefListSerializer.cs @@ -7,7 +7,7 @@ namespace ChanSort.Api { /// /// Reads a reference list from a .csv file with the format - /// [dummy1],ProgramNr,[dummy2],UID,ChannelName[,SignalSource,FavAndFlags] + /// [obsolete],ProgramNr,[obsolete],UID,ChannelName[,SignalSource,FavAndFlags] /// public class CsvRefListSerializer : SerializerBase { @@ -31,17 +31,15 @@ namespace ChanSort.Api { this.Features.ChannelNameEdit = ChannelNameEditMode.All; this.Features.CanSkipChannels = true; - this.Features.CanDeleteChannels = true; + this.Features.DeleteMode = DeleteMode.FlagWithoutPrNr; this.Features.CanHaveGaps = true; this.Features.EncryptedFlagEdit = false; - this.DataRoot.SortedFavorites = false; - this.DataRoot.SupportedFavorites = Favorites.A | Favorites.B | Favorites.C | Favorites.D | Favorites.E; + this.Features.SortedFavorites = false; + this.Features.SupportedFavorites = Favorites.A | Favorites.B | Favorites.C | Favorites.D | Favorites.E | Favorites.F | Favorites.G | Favorites.H; } #endregion - public override string DisplayName => "ChanSort .csv Reference List Loader"; - #region Load() public override void Load() @@ -211,6 +209,8 @@ namespace ChanSort.Api channel.Lock = false; channel.Skip = false; channel.Hidden = false; + channel.IsDeleted = false; + channel.Favorites = 0; foreach (var c in flags) { @@ -251,6 +251,7 @@ namespace ChanSort.Api break; case 'D': channel.IsDeleted = true; + channel.NewProgramNr = -1; break; } } @@ -318,7 +319,7 @@ namespace ChanSort.Api } } - public static void Save(TextWriter stream, DataRoot dataRoot) + public static void Save(TextWriter stream, DataRoot dataRoot, bool includeDeletedChannels = true) { foreach (var channelList in dataRoot.ChannelLists) { @@ -327,8 +328,9 @@ namespace ChanSort.Api foreach (var channel in channelList.GetChannelsByNewOrder()) { - if (channel.NewProgramNr == -1) + if (channel.NewProgramNr == -1 && !includeDeletedChannels) continue; + var line = string.Format("{0},{1},{2},{3},\"{4}\",{5},{6}", "", // past: channel.RecordIndex, channel.NewProgramNr, diff --git a/source/ChanSort.Api/Controller/Editor.cs b/source/ChanSort.Api/Controller/Editor.cs index c5883c1..09c0558 100644 --- a/source/ChanSort.Api/Controller/Editor.cs +++ b/source/ChanSort.Api/Controller/Editor.cs @@ -353,28 +353,34 @@ namespace ChanSort.Api { if (list.IsMixedSourceFavoritesList) continue; + + // sort the channels by assigned numbers, then unassigned by original order or alphabetically, then deleted channels var sortedChannels = list.Channels.OrderBy(ChanSortCriteria).ToList(); int maxProgNr = 0; foreach (var appChannel in sortedChannels) { - if (appChannel.RecordIndex < 0) + if (appChannel.IsProxy) continue; if (appChannel.NewProgramNr == -1) { - if (mode == UnsortedChannelMode.MarkDeleted) + if (mode == UnsortedChannelMode.Delete) appChannel.IsDeleted = true; - else + else // append (hidden if possible) { appChannel.Hidden = true; appChannel.Skip = true; } - } - int progNr = this.GetNewProgramNr(appChannel, ref maxProgNr); - if (mode != UnsortedChannelMode.MarkDeleted || this.DataRoot.DeletedChannelsNeedNumbers) - appChannel.NewProgramNr = progNr; + // assign a valid number or 0 .... because -1 will never be a valid value for the TV + appChannel.NewProgramNr = mode != UnsortedChannelMode.Delete || this.DataRoot.DeletedChannelsNeedNumbers ? ++maxProgNr : 0; + } + else + { + if (appChannel.NewProgramNr > maxProgNr) + maxProgNr = appChannel.NewProgramNr; + } } } } @@ -384,13 +390,13 @@ namespace ChanSort.Api private string ChanSortCriteria(ChannelInfo channel) { // explicitly sorted - var pos = channel.GetPosition(this.SubListIndex); + var pos = channel.NewProgramNr; if (pos != -1) return pos.ToString("d5"); // eventually hide unsorted channels - if (this.unsortedChannelMode == UnsortedChannelMode.MarkDeleted) - return "Z"; + if (this.unsortedChannelMode == UnsortedChannelMode.Delete) + return "Z" + channel.RecordIndex.ToString("d5"); // eventually append in old order if (this.unsortedChannelMode == UnsortedChannelMode.AppendInOrder) @@ -406,20 +412,6 @@ namespace ChanSort.Api #endregion - #region GetNewProgramNr() - - private int GetNewProgramNr(ChannelInfo appChannel, ref int maxPrNr) - { - int prNr = appChannel.NewProgramNr; - if (prNr > maxPrNr) - maxPrNr = prNr; - if (prNr == -1) - prNr = ++maxPrNr; - return prNr; - } - - #endregion - #endregion #region SetFavorites() diff --git a/source/ChanSort.Api/Controller/SerializerBase.cs b/source/ChanSort.Api/Controller/SerializerBase.cs index 94c87ac..3eeb5d7 100644 --- a/source/ChanSort.Api/Controller/SerializerBase.cs +++ b/source/ChanSort.Api/Controller/SerializerBase.cs @@ -1,4 +1,7 @@ -using System.Text; +using System.IO; +using System.IO.Compression; +using System.Text; +using System.Windows.Forms; namespace ChanSort.Api { @@ -6,21 +9,34 @@ namespace ChanSort.Api { #region class SupportedFeatures + public enum DeleteMode + { + NotSupported = 0, + Physically = 1, + FlagWithoutPrNr = 2, + FlagWithPrNr = 3 + } + public class SupportedFeatures { public ChannelNameEditMode ChannelNameEdit { get; set; } public bool CleanUpChannelData { get; set; } public bool DeviceSettings { get; set; } - public bool CanDeleteChannels { get; set; } public bool CanSkipChannels { get; set; } = true; - public bool CanHaveGaps { get; set; } + public bool CanHaveGaps { get; set; } = true; public bool EncryptedFlagEdit { get; set; } + public DeleteMode DeleteMode { get; set; } = DeleteMode.NotSupported; + + + public Favorites SupportedFavorites { get; set; } = Favorites.A | Favorites.B | Favorites.C | Favorites.D; + public bool SortedFavorites { get; set; } + public bool MixedSourceFavorites { get; set; } + public bool AllowGapsInFavNumbers { get; set; } + + public bool CanDeleteChannelsWithFlag => this.DeleteMode == DeleteMode.FlagWithPrNr || this.DeleteMode == DeleteMode.FlagWithoutPrNr; + public bool CanDeleteChannelsFromFile => this.DeleteMode == DeleteMode.Physically; + public bool DeletedChannelsNeedNumbers => this.DeleteMode == DeleteMode.FlagWithPrNr; - public SupportedFeatures() - { - this.CanDeleteChannels = true; - this.CanHaveGaps = true; - } } #endregion @@ -28,17 +44,15 @@ namespace ChanSort.Api public string FileName { get; set; } public DataRoot DataRoot { get; protected set; } - public SupportedFeatures Features { get; private set; } + public SupportedFeatures Features { get; } = new SupportedFeatures(); protected SerializerBase(string inputFile) { - this.Features = new SupportedFeatures(); this.FileName = inputFile; - this.DataRoot = new DataRoot(); this.defaultEncoding = Encoding.GetEncoding("iso-8859-9"); + this.DataRoot = new DataRoot(this); } - public abstract string DisplayName { get; } public abstract void Load(); public abstract void Save(string tvOutputFile); @@ -48,8 +62,7 @@ namespace ChanSort.Api set { this.defaultEncoding = value; } } - public virtual void EraseChannelData() { } - + #region GetFileInformation() public virtual string GetFileInformation() { StringBuilder sb = new StringBuilder(); @@ -85,9 +98,52 @@ namespace ChanSort.Api } return sb.ToString(); } + #endregion public virtual void ShowDeviceSettingsForm(object parentWindow) { } public virtual string CleanUpChannelData() { return ""; } + + + // common implementation helper methods + + protected string UnzipFileToTempFolder() + { + var tempDir = this.FileName + ".tmp"; + + if (Directory.Exists(tempDir)) + Directory.Delete(tempDir, true); + Directory.CreateDirectory(tempDir); + ZipFile.ExtractToDirectory(this.FileName, tempDir); + this.DeleteOnExit(tempDir); + return tempDir; + } + + protected void ZipToOutputFile(string tvOutputFile) + { + var tempDir = this.FileName + ".tmp"; + File.Delete(tvOutputFile); + ZipFile.CreateFromDirectory(tempDir, tvOutputFile); + this.FileName = tvOutputFile; + } + + // TODO: replace this with a SerializerBase implementing IDisposable + protected virtual void DeleteOnExit(string fileOrFolder) + { + Application.ApplicationExit += (sender, args) => + { + try + { + if (Directory.Exists(fileOrFolder)) + Directory.Delete(fileOrFolder, true); + else if (File.Exists(fileOrFolder)) + File.Delete(fileOrFolder); + } + catch + { + // ignore + } + }; + } } } diff --git a/source/ChanSort.Api/Controller/TxtRefListSerializer.cs b/source/ChanSort.Api/Controller/TxtRefListSerializer.cs index d14ba0d..24fb89f 100644 --- a/source/ChanSort.Api/Controller/TxtRefListSerializer.cs +++ b/source/ChanSort.Api/Controller/TxtRefListSerializer.cs @@ -16,11 +16,11 @@ namespace ChanSort.Api { this.Features.ChannelNameEdit = ChannelNameEditMode.All; this.Features.CanSkipChannels = false; - this.Features.CanDeleteChannels = true; + this.Features.DeleteMode = DeleteMode.Physically; this.Features.CanHaveGaps = true; this.Features.EncryptedFlagEdit = false; - this.DataRoot.SortedFavorites = false; - this.DataRoot.SupportedFavorites = 0; + this.Features.SortedFavorites = false; + this.Features.SupportedFavorites = 0; this.DataRoot.AddChannelList(this.allChannels); allChannels.VisibleColumnFieldNames = new List @@ -36,8 +36,6 @@ namespace ChanSort.Api #endregion - public override string DisplayName => ".txt Reference List Loader"; - #region Load() public override void Load() diff --git a/source/ChanSort.Api/Model/ChannelInfo.cs b/source/ChanSort.Api/Model/ChannelInfo.cs index 841e612..13a02f3 100644 --- a/source/ChanSort.Api/Model/ChannelInfo.cs +++ b/source/ChanSort.Api/Model/ChannelInfo.cs @@ -10,21 +10,31 @@ namespace ChanSort.Api private string uid; private string serviceTypeName; - /// - /// List of channels that have the same UID as this channel and were not added to the channel list directly - /// - public readonly List Duplicates = new List(); - public virtual bool IsDeleted { get; set; } public SignalSource SignalSource { get; set; } public string Source { get; set; } + + /// + /// Index or ID of the data record + /// public long RecordIndex { get; set; } + + /// + /// logical record order (might be different from the index, like old LG TLL files with a linked list of record indices) + /// public int RecordOrder { get; set; } + + /// + /// original program number from the file, except for channels with IsDeleted==true, which will have the value -1 + /// public int OldProgramNr { get; set; } + /// + /// new program number or -1, if the channel isn't assigned a number or has IsDeleted==true + /// public int NewProgramNr { get; set; } + public string Name { get; set; } public string ShortName { get; set; } - public Favorites Favorites { get; set; } public bool Skip { get; set; } public bool Lock { get; set; } public bool Hidden { get; set; } @@ -39,23 +49,50 @@ namespace ChanSort.Api public int AudioPid { get; set; } public int OriginalNetworkId { get; set; } public int TransportStreamId { get; set; } - public int Bouquet { get; set; } public string Provider { get; set; } public int SymbolRate { get; set; } public int ServiceType { get; set; } - public string Debug { get; private set; } public string SatPosition { get; set; } public Transponder Transponder { get; set; } + + /// + /// Bitmask in which favorite lists the channel is included + /// + public Favorites Favorites { get; set; } + /// + /// current number of the channel in the various favorite lists (if individual sorting is supported) + /// public List FavIndex { get; } + /// + /// original number of the channel in the various favorite lists (if individual sorting is supported) + /// public List OldFavIndex { get; } + + /// + /// predefined LCN (logical channel number) assigned by TV firmware or cable/sat operator + /// public int ProgramNrPreset { get; set; } public bool IsNameModified { get; set; } + + + /// + /// A proxy channel is inserted into the current channel list when there was no match for a reference list channel + /// public bool IsProxy => this.RecordIndex < 0; + + /// + /// arbitrary information that can be shown in a UI column to assist in analyzing a file format while coding a plugin + /// + public string Debug { get; private set; } + + + #region ctor() protected ChannelInfo() { + this.OldProgramNr = -1; this.NewProgramNr = -1; this.FavIndex = new List(MAX_FAV_LISTS); this.OldFavIndex = new List(MAX_FAV_LISTS); @@ -76,7 +113,6 @@ namespace ChanSort.Api this.SignalSource = source; this.RecordIndex = index; this.RecordOrder = (int)index; - this.NewProgramNr = -1; this.OldProgramNr = oldProgNr; this.Name = name; this.Encrypted = null; @@ -99,6 +135,11 @@ namespace ChanSort.Api #endregion #region Uid + /// + /// The Uid is the preferred way of matching channels between the current channel list and a reference list. + /// The basic format of this string was taken from a command line tool "TllSort" for LG TVs but then expanded beyond that + /// in order to support the various file formats and the data provided in those. + /// public string Uid { get @@ -113,7 +154,7 @@ namespace ChanSort.Api this.uid = "S" + /*this.SatPosition + */ "-" + this.OriginalNetworkId + "-" + this.TransportStreamId + "-" + this.ServiceId; else if ((this.SignalSource & SignalSource.MaskAntennaCableSat) == SignalSource.Antenna || (this.SignalSource & SignalSource.MaskAntennaCableSat) == SignalSource.Cable) { - // ChannelOrTransponder is needed for DVB-T where the same ONID+TSID+SID can be received from 2 different towers (on different frequencies) + // ChannelOrTransponder is needed for DVB-T where the same ONID+TSID+SID can be received from 2 different radio transmitters, but on different frequencies/channels this.uid = "C-" + this.OriginalNetworkId + "-" + this.TransportStreamId + "-" + this.ServiceId + "-" + this.ChannelOrTransponder; } else @@ -177,23 +218,6 @@ namespace ChanSort.Api } #endregion - #region GetFavString() - public static string GetFavString(Favorites favorites) - { - string sep = ""; - string text = ""; - foreach (Favorites favMask in Enum.GetValues(typeof(Favorites))) - { - if ((favorites & favMask) != 0) - { - text += sep + favMask.ToString(); - sep = ","; - } - } - return text; - } - #endregion - #region ParseFavString() public static Favorites ParseFavString(string value) { @@ -246,12 +270,19 @@ namespace ChanSort.Api #endregion #region UpdateRawData() + /// + /// called during the saving procedure to update the external channel list data with the changes made by the user + /// public virtual void UpdateRawData() { } #endregion #region ChangeEncoding() + /// + /// for file formats that allow characters in local code pages, this method should re-parse the raw data bytes for the given encoding + /// + /// public virtual void ChangeEncoding(System.Text.Encoding encoding) { } @@ -259,16 +290,25 @@ namespace ChanSort.Api #region GetPosition(), SetPosition(), ChangePosition() + /// + /// Gets the new channel number in the main channel list (index=0) or the various favorite lists (1-x) + /// public int GetPosition(int subListIndex) { return subListIndex == 0 ? this.NewProgramNr : this.FavIndex[subListIndex - 1]; } + /// + /// Gets the original channel number in the main channel list (index=0) or the various favorite lists (1-x) + /// public int GetOldPosition(int subListIndex) { return subListIndex == 0 ? this.OldProgramNr : this.OldFavIndex[subListIndex - 1]; } + /// + /// Sets the new channel number in the main channel list (index=0) or the various favorite lists (1-x) + /// public void SetPosition(int subListIndex, int newPos) { if (subListIndex == 0) @@ -284,6 +324,9 @@ namespace ChanSort.Api } } + /// + /// Sets the original channel number in the main channel list (index=0) or the various favorite lists (1-x) + /// public void SetOldPosition(int subListIndex, int oldPos) { if (subListIndex == 0) @@ -292,6 +335,9 @@ namespace ChanSort.Api this.OldFavIndex[subListIndex - 1] = oldPos; } + /// + /// Internal helper method to adjust the main or favorite program number by a delta value + /// internal void ChangePosition(int subListIndex, int delta) { if (subListIndex == 0) diff --git a/source/ChanSort.Api/Model/DataRoot.cs b/source/ChanSort.Api/Model/DataRoot.cs index 55badf3..9611e8f 100644 --- a/source/ChanSort.Api/Model/DataRoot.cs +++ b/source/ChanSort.Api/Model/DataRoot.cs @@ -1,41 +1,37 @@ using System.Collections.Generic; using System.Text; -using System.Linq; namespace ChanSort.Api { public class DataRoot { - private readonly IDictionary satellites = new Dictionary(); - private readonly IDictionary transponder = new Dictionary(); - private readonly IDictionary lnbConfig = new Dictionary(); private readonly IList channelLists = new List(); - private readonly StringBuilder warnings = new StringBuilder(); + private readonly SerializerBase loader; - public StringBuilder Warnings { get { return this.warnings; } } - public IDictionary Satellites { get { return this.satellites; } } - public IDictionary Transponder { get { return this.transponder; } } - public IDictionary LnbConfig { get { return this.lnbConfig; } } - public IEnumerable ChannelLists { get { return this.channelLists; } } - public bool IsEmpty { get { return this.channelLists.Count == 0; } } + public StringBuilder Warnings { get; } = new StringBuilder(); + public IDictionary Satellites { get; } = new Dictionary(); + public IDictionary Transponder { get; } = new Dictionary(); + public IDictionary LnbConfig { get; } = new Dictionary(); + public IEnumerable ChannelLists => this.channelLists; + public bool IsEmpty => this.channelLists.Count == 0; public bool NeedsSaving { get; set; } - public Favorites SupportedFavorites { get; set; } - public bool SortedFavorites { get; set; } - public bool MixedSourceFavorites { get; set; } - public bool AllowGapsInFavNumbers { get; set; } - public bool ShowDeletedChannels { get; set; } - public bool DeletedChannelsNeedNumbers { get; set; } - public DataRoot() + public Favorites SupportedFavorites => this.loader.Features.SupportedFavorites; + public bool SortedFavorites => this.loader.Features.SortedFavorites; + public bool MixedSourceFavorites => this.loader.Features.MixedSourceFavorites; + public bool AllowGapsInFavNumbers => this.loader.Features.AllowGapsInFavNumbers; + public bool DeletedChannelsNeedNumbers => this.loader.Features.DeletedChannelsNeedNumbers; + + public DataRoot(SerializerBase loader) { - this.SupportedFavorites = Favorites.A | Favorites.B | Favorites.C | Favorites.D; + this.loader = loader; } #region AddSatellite() public virtual void AddSatellite(Satellite satellite) { - this.satellites.Add(satellite.Id, satellite); + this.Satellites.Add(satellite.Id, satellite); } #endregion @@ -43,21 +39,21 @@ namespace ChanSort.Api public virtual void AddTransponder(Satellite sat, Transponder trans) { trans.Satellite = sat; - if (this.transponder.ContainsKey(trans.Id)) + if (this.Transponder.ContainsKey(trans.Id)) { - this.warnings.AppendFormat("Duplicate transponder data record for satellite #{0} with id {1}\r\n", sat?.Id, trans.Id); + this.Warnings.AppendFormat("Duplicate transponder data record for satellite #{0} with id {1}\r\n", sat?.Id, trans.Id); return; } if (sat != null) sat.Transponder.Add(trans.Id, trans); - this.transponder.Add(trans.Id, trans); + this.Transponder.Add(trans.Id, trans); } #endregion #region AddLnbConfig() public void AddLnbConfig(LnbConfig lnb) { - this.lnbConfig.Add(lnb.Id, lnb); + this.LnbConfig.Add(lnb.Id, lnb); } #endregion @@ -65,7 +61,7 @@ namespace ChanSort.Api public virtual void AddChannelList(ChannelList list) { this.channelLists.Add(list); - this.MixedSourceFavorites |= list.IsMixedSourceFavoritesList; + this.loader.Features.MixedSourceFavorites |= list.IsMixedSourceFavoritesList; } #endregion @@ -74,7 +70,7 @@ namespace ChanSort.Api { if (list == null) { - warnings.AppendFormat("No list found to add channel '{0}'\r\n", channel); + this.Warnings.AppendFormat("No list found to add channel '{0}'\r\n", channel); return; } string warning = list.AddChannel(channel); @@ -105,6 +101,26 @@ namespace ChanSort.Api } #endregion + #region ValidateAfterLoad() + public virtual void ValidateAfterLoad() + { + foreach (var list in this.ChannelLists) + { + if (list.IsMixedSourceFavoritesList) + continue; + + // make sure that deleted channels have OldProgramNr = -1 + foreach (var chan in list.Channels) + { + if (chan.IsDeleted) + chan.OldProgramNr = -1; + else if (chan.OldProgramNr < 0) // old versions of ChanSort saved -1 and without setting IsDeleted + chan.IsDeleted = true; + } + } + } + #endregion + #region ApplyCurrentProgramNumbers() public void ApplyCurrentProgramNumbers() { @@ -120,35 +136,37 @@ namespace ChanSort.Api foreach (var channel in list.Channels) { for (int i = 0; i <= c; i++) - channel.SetPosition(i, channel.IsDeleted && !this.DeletedChannelsNeedNumbers ? -1 : channel.GetOldPosition(i)); + channel.SetPosition(i, channel.GetOldPosition(i)); } } } #endregion - #region SetPrNrForDeletedChannels() - public void SetPrNrForDeletedChannels() + #region ValidateAfterSave() + public virtual void ValidateAfterSave() { - if (this.DeletedChannelsNeedNumbers) - return; - - // make sure that deleted channels have OldProgramNr = -1 + // set old numbers to match the new numbers + // also make sure that deleted channels are either removed from the list or assigned the -1 prNr, depending on the loader's DeleteMode foreach (var list in this.ChannelLists) { - if (list.IsMixedSourceFavoritesList) - continue; - foreach (var chan in list.Channels) + for (int i = 0; i < list.Channels.Count; i++) { + var chan = list.Channels[i]; if (chan.IsDeleted) { - chan.NewProgramNr = -1; - chan.OldProgramNr = -1; + if (this.loader.Features.DeleteMode == SerializerBase.DeleteMode.Physically) + list.Channels.RemoveAt(i--); + else + chan.NewProgramNr = -1; } - else if (chan.OldProgramNr == -1) // old versions of ChanSort saved -1 and without setting IsDeleted - chan.IsDeleted = true; + + chan.OldProgramNr = chan.NewProgramNr; + chan.OldFavIndex.Clear(); + chan.OldFavIndex.AddRange(chan.FavIndex); } } } #endregion + } } diff --git a/source/ChanSort.Api/Model/Enums.cs b/source/ChanSort.Api/Model/Enums.cs index b601eb0..b4c9923 100644 --- a/source/ChanSort.Api/Model/Enums.cs +++ b/source/ChanSort.Api/Model/Enums.cs @@ -82,7 +82,7 @@ namespace ChanSort.Api { AppendInOrder=0, AppendAlphabetically=1, - MarkDeleted=2 + Delete=2 } [Flags] diff --git a/source/ChanSort.Api/Resources.Designer.cs b/source/ChanSort.Api/Resources.Designer.cs index 8ac0b48..c51a8f1 100644 --- a/source/ChanSort.Api/Resources.Designer.cs +++ b/source/ChanSort.Api/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace ChanSort.Api { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { diff --git a/source/ChanSort.Loader.GlobalClone/ChanSort.Loader.GlobalClone.csproj b/source/ChanSort.Loader.GlobalClone/ChanSort.Loader.GlobalClone.csproj index caeecaa..7839cf9 100644 --- a/source/ChanSort.Loader.GlobalClone/ChanSort.Loader.GlobalClone.csproj +++ b/source/ChanSort.Loader.GlobalClone/ChanSort.Loader.GlobalClone.csproj @@ -9,7 +9,7 @@ Properties ChanSort.Loader.GlobalClone ChanSort.Loader.GlobalClone - v4.0 + v4.6 512 @@ -22,6 +22,7 @@ DEBUG;TRACE prompt 4 + false AnyCPU @@ -31,6 +32,7 @@ TRACE prompt 4 + false true @@ -40,15 +42,17 @@ x86 prompt MinimumRecommendedRules.ruleset + false - bin\x86\Release\ + ..\Release\ TRACE true pdbonly x86 prompt MinimumRecommendedRules.ruleset + false diff --git a/source/ChanSort.Loader.GlobalClone/GcSerializer.cs b/source/ChanSort.Loader.GlobalClone/GcSerializer.cs index e0b0cfb..70b3aa1 100644 --- a/source/ChanSort.Loader.GlobalClone/GcSerializer.cs +++ b/source/ChanSort.Loader.GlobalClone/GcSerializer.cs @@ -25,7 +25,8 @@ namespace ChanSort.Loader.GlobalClone public GcSerializer(string inputFile) : base(inputFile) { this.Features.ChannelNameEdit = ChannelNameEditMode.All; - //this.Features.CanDeleteChannels = false; + this.Features.DeleteMode = DeleteMode.FlagWithPrNr; + this.Features.CanHaveGaps = true; this.DataRoot.AddChannelList(this.atvChannels); this.DataRoot.AddChannelList(this.dtvTvChannels); @@ -35,12 +36,6 @@ namespace ChanSort.Loader.GlobalClone } #endregion - #region DisplayName - public override string DisplayName => "LG GlobalClone loader"; - - #endregion - - #region Load() public override void Load() @@ -320,8 +315,8 @@ namespace ChanSort.Loader.GlobalClone { int n = info.LocalName[11] - 'A'; var mask = 1 << n; - this.DataRoot.SupportedFavorites |= (Favorites)mask; - this.DataRoot.SortedFavorites = true; + this.Features.SupportedFavorites |= (Favorites)mask; + this.Features.SortedFavorites = true; if (((int)ch.Favorites & mask) != 0) // xml element holds bad index data (250) when fav is not set ch.SetPosition(n + 1, int.Parse(info.InnerText)); } diff --git a/source/ChanSort.Loader.GlobalClone/Resources.Designer.cs b/source/ChanSort.Loader.GlobalClone/Resources.Designer.cs index d704f9c..1c711b1 100644 --- a/source/ChanSort.Loader.GlobalClone/Resources.Designer.cs +++ b/source/ChanSort.Loader.GlobalClone/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace ChanSort.Loader.GlobalClone { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { diff --git a/source/ChanSort.Loader.Hisense/ChanSort.Loader.Hisense.csproj b/source/ChanSort.Loader.Hisense/ChanSort.Loader.Hisense.csproj index cd904a0..7b369f7 100644 --- a/source/ChanSort.Loader.Hisense/ChanSort.Loader.Hisense.csproj +++ b/source/ChanSort.Loader.Hisense/ChanSort.Loader.Hisense.csproj @@ -9,7 +9,7 @@ Properties ChanSort.Loader.Hisense ChanSort.Loader.Hisense - v4.0 + v4.6 512 @@ -23,6 +23,7 @@ prompt 4 x86 + false pdbonly @@ -31,6 +32,7 @@ TRACE prompt 4 + false true @@ -40,15 +42,17 @@ x86 prompt MinimumRecommendedRules.ruleset + false - bin\x86\Release\ + ..\Release\ TRACE true pdbonly x86 prompt MinimumRecommendedRules.ruleset + false diff --git a/source/ChanSort.Loader.Hisense/HisDbSerializer.cs b/source/ChanSort.Loader.Hisense/HisDbSerializer.cs index abc03c1..d7cdd10 100644 --- a/source/ChanSort.Loader.Hisense/HisDbSerializer.cs +++ b/source/ChanSort.Loader.Hisense/HisDbSerializer.cs @@ -13,8 +13,6 @@ namespace ChanSort.Loader.Hisense { public class HisDbSerializer : SerializerBase { - public override string DisplayName => "Hisense channel.db Loader"; - #region enums and bitmasks internal enum BroadcastType @@ -94,10 +92,10 @@ namespace ChanSort.Loader.Hisense DepencencyChecker.AssertVc2010RedistPackageX86Installed(); this.Features.ChannelNameEdit = ChannelNameEditMode.All; - this.Features.CanDeleteChannels = false; + this.Features.DeleteMode = DeleteMode.NotSupported; this.Features.CanSkipChannels = false; this.Features.CanHaveGaps = true; - this.DataRoot.SortedFavorites = true; + this.Features.SortedFavorites = true; channelLists.Add(new ChannelList(SignalSource.Antenna, "Antenna")); channelLists.Add(new ChannelList(SignalSource.Cable, "Cable")); @@ -537,7 +535,7 @@ namespace ChanSort.Loader.Hisense private void UpdateChannel(SQLiteCommand cmd, ChannelInfo ci) { - if (ci.RecordIndex < 0) // skip reference list proxy channels + if (ci.IsProxy) return; int x = (int) ((ulong) ci.RecordIndex >> 32); // the table number is kept in the higher 32 bits @@ -571,7 +569,7 @@ namespace ChanSort.Loader.Hisense { if (ci.FavIndex[i] <= 0) { - cmd.CommandText = $"delete from fav_{i + 1} where ui2_svc_id={ci.RecordIndex >> 32} and ui2_svc_rec_id={ci.RecordIndex & 0xFFFF}"; + cmd.CommandText = $"delete from fav_{i + 1} where ui2_svc_id={ci.RecordIndex >> 32} and ui2_svc_rec_id={ci.RecordIndex & 0xFFFFFFFF}"; cmd.ExecuteNonQuery(); } else diff --git a/source/ChanSort.Loader.Hisense/Resources.Designer.cs b/source/ChanSort.Loader.Hisense/Resources.Designer.cs index f4c6224..003475d 100644 --- a/source/ChanSort.Loader.Hisense/Resources.Designer.cs +++ b/source/ChanSort.Loader.Hisense/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace ChanSort.Loader.Hisense { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { diff --git a/source/ChanSort.Loader.Hisense2017/ChanSort.Loader.Hisense2017.csproj b/source/ChanSort.Loader.Hisense2017/ChanSort.Loader.Hisense2017.csproj index 13d3ff2..40d919a 100644 --- a/source/ChanSort.Loader.Hisense2017/ChanSort.Loader.Hisense2017.csproj +++ b/source/ChanSort.Loader.Hisense2017/ChanSort.Loader.Hisense2017.csproj @@ -9,7 +9,7 @@ Properties ChanSort.Loader.Hisense2017 ChanSort.Loader.Hisense2017 - v4.0 + v4.6 512 @@ -23,6 +23,7 @@ prompt 4 x86 + false pdbonly @@ -31,6 +32,7 @@ TRACE prompt 4 + false true @@ -40,15 +42,17 @@ x86 prompt MinimumRecommendedRules.ruleset + false - bin\x86\Release\ + ..\Release\ TRACE true pdbonly x86 prompt MinimumRecommendedRules.ruleset + false diff --git a/source/ChanSort.Loader.Hisense2017/HisDbSerializer.cs b/source/ChanSort.Loader.Hisense2017/HisDbSerializer.cs index 743a480..f3804e6 100644 --- a/source/ChanSort.Loader.Hisense2017/HisDbSerializer.cs +++ b/source/ChanSort.Loader.Hisense2017/HisDbSerializer.cs @@ -119,18 +119,15 @@ namespace ChanSort.Loader.Hisense2017 DepencencyChecker.AssertVc2010RedistPackageX86Installed(); Features.ChannelNameEdit = ChannelNameEditMode.All; - Features.CanDeleteChannels = true; + Features.DeleteMode = DeleteMode.FlagWithPrNr; Features.CanSkipChannels = true; Features.CanHaveGaps = true; - DataRoot.MixedSourceFavorites = true; - DataRoot.SortedFavorites = true; - DataRoot.ShowDeletedChannels = false; + Features.MixedSourceFavorites = true; + Features.SortedFavorites = true; } #endregion - public override string DisplayName => "Hisense servicelist.db Loader"; - #region Load() public override void Load() @@ -513,8 +510,8 @@ left outer join Lcn l on l.ServiceId=fi.ServiceId and l.FavoriteId=fi.FavoriteId cmd.Parameters["@favId"].Value = favId; cmd.Parameters["@servId"].Value = ci.RecordIndex; - cmd.Parameters["@ch"].Value = ci.NewProgramNr <= 0 ? 9999 : ci.NewProgramNr; - cmd.Parameters["@del"].Value = ci.NewProgramNr <= 0 ? 1 : 0; // 1 or -1 ? + cmd.Parameters["@ch"].Value = ci.NewProgramNr; + cmd.Parameters["@del"].Value = ci.IsDeleted ? 1 : 0; // 1 or -1 ? // not sure if the following columns are used at all. they also exist in the Services table cmd.Parameters["@prot"].Value = ci.Lock ? -1 : 0; cmd.Parameters["@sel"].Value = ci.Skip ? 0 : -1; diff --git a/source/ChanSort.Loader.Hisense2017/Resources.Designer.cs b/source/ChanSort.Loader.Hisense2017/Resources.Designer.cs index 1222668..94e73e3 100644 --- a/source/ChanSort.Loader.Hisense2017/Resources.Designer.cs +++ b/source/ChanSort.Loader.Hisense2017/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace ChanSort.Loader.Hisense2017 { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { diff --git a/source/ChanSort.Loader.LG/ChanSort.Loader.LG.csproj b/source/ChanSort.Loader.LG/ChanSort.Loader.LG.csproj index b82c884..8c538f9 100644 --- a/source/ChanSort.Loader.LG/ChanSort.Loader.LG.csproj +++ b/source/ChanSort.Loader.LG/ChanSort.Loader.LG.csproj @@ -10,7 +10,7 @@ Properties ChanSort.Loader.LG ChanSort.Loader.LG - v4.5.2 + v4.6 512 @@ -49,7 +49,7 @@ false - bin\x86\Release\ + ..\Release\ TRACE true pdbonly @@ -60,9 +60,9 @@ false - - - + + + diff --git a/source/ChanSort.Loader.LG/PresetProgramNrDialog.resx b/source/ChanSort.Loader.LG/PresetProgramNrDialog.resx index caa99dd..0ed1242 100644 --- a/source/ChanSort.Loader.LG/PresetProgramNrDialog.resx +++ b/source/ChanSort.Loader.LG/PresetProgramNrDialog.resx @@ -121,8 +121,8 @@ Top, Left, Right - - + + Vertical @@ -143,7 +143,7 @@ labelControl1 - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -157,7 +157,7 @@ Tahoma, 8.25pt, style=Bold - + Vertical @@ -176,7 +176,7 @@ labelControl3 - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -190,7 +190,7 @@ Tahoma, 8.25pt, style=Bold - + Vertical @@ -209,7 +209,7 @@ labelControl4 - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -220,7 +220,7 @@ Top, Left, Right - + Vertical @@ -239,7 +239,7 @@ labelControl5 - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -250,7 +250,7 @@ Top, Left, Right - + Vertical @@ -269,7 +269,7 @@ labelControl6 - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -280,7 +280,7 @@ Top, Left, Right - + Vertical @@ -299,7 +299,7 @@ labelControl7 - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -353,7 +353,7 @@ btnOk - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -364,7 +364,7 @@ Top, Left, Right - + Vertical @@ -383,7 +383,7 @@ labelControl2 - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -410,6 +410,6 @@ PresetProgramNrDialog - DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a \ No newline at end of file diff --git a/source/ChanSort.Loader.LG/Resource.Designer.cs b/source/ChanSort.Loader.LG/Resource.Designer.cs index 100024c..5649ce5 100644 --- a/source/ChanSort.Loader.LG/Resource.Designer.cs +++ b/source/ChanSort.Loader.LG/Resource.Designer.cs @@ -19,7 +19,7 @@ namespace ChanSort.Loader.LG { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resource { diff --git a/source/ChanSort.Loader.LG/SatChannel.cs b/source/ChanSort.Loader.LG/SatChannel.cs index 953530c..091549e 100644 --- a/source/ChanSort.Loader.LG/SatChannel.cs +++ b/source/ChanSort.Loader.LG/SatChannel.cs @@ -7,7 +7,7 @@ namespace ChanSort.Loader.LG private const string _SatConfigIndex = "offSatelliteNr"; private const string _TransponderIndex = "offTransponderIndex"; - public bool InUse { get; private set; } + public bool InUse { get; } public SatChannel(int order, int slot, DataMapping data, DataRoot dataRoot) : base(data) { @@ -19,8 +19,8 @@ namespace ChanSort.Loader.LG this.InitDvbData(data); int transponderIndex = data.GetWord(_TransponderIndex); - Transponder transponder = dataRoot.Transponder.TryGet(transponderIndex); - Satellite sat = transponder.Satellite; + var transponder = dataRoot.Transponder.TryGet(transponderIndex); + var sat = transponder.Satellite; this.Transponder = transponder; this.Satellite = sat.Name; @@ -32,23 +32,5 @@ namespace ChanSort.Loader.LG this.Polarity = transponder.Polarity; this.FreqInMhz = transponder.FrequencyInMhz; } - - internal static SatChannel CreateFromProxy(ChannelInfo proxy, DataRoot dataRoot, DataMapping mapping, int rawSize) - { - if (proxy.Transponder == null || proxy.Transponder.Satellite == null || proxy.Transponder.Satellite.LnbConfig == null) - return null; - - byte[] rawData = mapping.Settings.GetBytes("newRecordTemplate"); - if (rawData == null) - return null; - - mapping.SetDataPtr(rawData, 0); - mapping.SetWord(_SatConfigIndex, proxy.Transponder.Satellite.LnbConfig.Id); - mapping.SetWord(_TransponderIndex, proxy.Transponder.Id); - mapping.SetWord(_ServiceId, proxy.ServiceId); - var channel = new SatChannel(0, proxy.NewProgramNr, mapping, dataRoot); - channel.Name = proxy.Name; - return channel; - } } } diff --git a/source/ChanSort.Loader.LG/TllChannelBase.cs b/source/ChanSort.Loader.LG/TllChannelBase.cs index fff29e4..3673f4a 100644 --- a/source/ChanSort.Loader.LG/TllChannelBase.cs +++ b/source/ChanSort.Loader.LG/TllChannelBase.cs @@ -56,6 +56,9 @@ namespace ChanSort.Loader.LG this.Hidden = data.GetFlag(_Hide); this.Encrypted = data.GetFlag(_Encrypted); this.IsDeleted = data.GetFlag(_Deleted); + if (IsDeleted) // allow setting a breakpoint + { + } } #endregion @@ -105,7 +108,7 @@ namespace ChanSort.Loader.LG mapping.SetFlag(_Skip, this.Skip); mapping.SetFlag(_Lock, this.Lock); mapping.SetFlag(_Hide, this.Hidden); - if (this.NewProgramNr == -1) + if (this.IsDeleted) { mapping.SetFlag(_Deleted, true); mapping.SetByte("off" + _Moved, 0); //skip,lock,hide,moved diff --git a/source/ChanSort.Loader.LG/TllFileSerializer.cs b/source/ChanSort.Loader.LG/TllFileSerializer.cs index 89b0bf0..952c325 100644 --- a/source/ChanSort.Loader.LG/TllFileSerializer.cs +++ b/source/ChanSort.Loader.LG/TllFileSerializer.cs @@ -76,6 +76,8 @@ namespace ChanSort.Loader.LG public TllFileSerializer(string inputFile) : base(inputFile) { this.Features.ChannelNameEdit = ChannelNameEditMode.Analog; + this.Features.DeleteMode = DeleteMode.FlagWithoutPrNr; + this.Features.CanHaveGaps = true; this.Features.DeviceSettings = true; this.Features.CleanUpChannelData = true; this.SupportedTvCountryCodes = new List @@ -125,10 +127,6 @@ namespace ChanSort.Loader.LG #endregion - #region DisplayName - public override string DisplayName { get { return "TLL loader"; } } - #endregion - #region Load() public override void Load() @@ -530,11 +528,7 @@ namespace ChanSort.Loader.LG else { if (ci.IsDeleted) - { - ci.OldProgramNr = -1; - ci.NewProgramNr = -1; ++this.deletedChannelsSoft; - } var list = this.DataRoot.GetChannelList(ci.SignalSource); var dupes = list.GetChannelByUid(ci.Uid); @@ -923,10 +917,11 @@ namespace ChanSort.Loader.LG newDvbctChannelCount = 0; foreach (var list in this.DataRoot.ChannelLists) { - int count = list.Channels.Count; - for (int i=0; icbHbbTv - DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpOption @@ -166,7 +166,7 @@ cbCustomCountry - DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpOption @@ -177,8 +177,8 @@ 72, 29 - - + + Combo @@ -191,7 +191,7 @@ comboBoxEdit1 - DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpOption @@ -215,7 +215,7 @@ labelControl1 - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpOption @@ -242,7 +242,7 @@ grpOption - DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -269,7 +269,7 @@ btnOk - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -296,7 +296,7 @@ btnCancel - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -304,8 +304,8 @@ 2 - - + + Vertical @@ -324,7 +324,7 @@ labelControl3 - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpHotelMode @@ -348,7 +348,7 @@ labelControl2 - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpHotelMode @@ -375,7 +375,7 @@ cbDtvUpdate - DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpHotelMode @@ -402,7 +402,7 @@ cbHotelMode - DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpHotelMode @@ -429,7 +429,7 @@ grpHotelMode - DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -456,7 +456,7 @@ cbAutoChannelUpdate - DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpSetup @@ -483,7 +483,7 @@ grpSetup - DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -491,7 +491,7 @@ 5 - + Vertical @@ -510,7 +510,7 @@ labelControl4 - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpInformation @@ -537,7 +537,7 @@ grpInformation - DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -567,7 +567,7 @@ lblHotelMenuAutoDetect - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -594,6 +594,6 @@ TvSettingsForm - DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a \ No newline at end of file diff --git a/source/ChanSort.Loader.Panasonic/ChanSort.Loader.Panasonic.csproj b/source/ChanSort.Loader.Panasonic/ChanSort.Loader.Panasonic.csproj index c0715ad..4c0eae0 100644 --- a/source/ChanSort.Loader.Panasonic/ChanSort.Loader.Panasonic.csproj +++ b/source/ChanSort.Loader.Panasonic/ChanSort.Loader.Panasonic.csproj @@ -1,5 +1,5 @@  - + Debug AnyCPU @@ -10,7 +10,7 @@ Properties ChanSort.Loader.Panasonic ChanSort.Loader.Panasonic - v4.0 + v4.6 512 @@ -23,6 +23,7 @@ DEBUG;TRACE prompt 4 + false pdbonly @@ -31,6 +32,7 @@ TRACE prompt 4 + false true @@ -40,14 +42,16 @@ x86 prompt false + false - bin\x86\Release\ + ..\Release\ TRACE true pdbonly x86 prompt + false @@ -60,7 +64,6 @@ - diff --git a/source/ChanSort.Loader.Panasonic/DbChannel.cs b/source/ChanSort.Loader.Panasonic/DbChannel.cs index 1d04c58..26d0d56 100644 --- a/source/ChanSort.Loader.Panasonic/DbChannel.cs +++ b/source/ChanSort.Loader.Panasonic/DbChannel.cs @@ -8,7 +8,6 @@ namespace ChanSort.Loader.Panasonic { internal class DbChannel : ChannelInfo { - internal int Bits; internal byte[] RawName; #region ctor() diff --git a/source/ChanSort.Loader.Panasonic/Serializer.cs b/source/ChanSort.Loader.Panasonic/Serializer.cs index 9bf9dc1..7ec32a5 100644 --- a/source/ChanSort.Loader.Panasonic/Serializer.cs +++ b/source/ChanSort.Loader.Panasonic/Serializer.cs @@ -4,7 +4,6 @@ using System.Data; using System.Data.SQLite; using System.IO; using System.Text; -using System.Windows.Forms; using ChanSort.Api; namespace ChanSort.Loader.Panasonic @@ -41,9 +40,10 @@ namespace ChanSort.Loader.Panasonic DepencencyChecker.AssertVc2010RedistPackageX86Installed(); this.Features.ChannelNameEdit = ChannelNameEditMode.None; // due to the chaos with binary data inside the "sname" string column, writing back a name has undesired side effects + this.Features.DeleteMode = DeleteMode.Physically; this.Features.CanHaveGaps = false; this.Features.EncryptedFlagEdit = true; - this.DataRoot.SortedFavorites = true; + this.Features.SortedFavorites = true; this.DataRoot.AddChannelList(this.avbtChannels); this.DataRoot.AddChannelList(this.avbcChannels); @@ -63,8 +63,6 @@ namespace ChanSort.Loader.Panasonic } #endregion - public override string DisplayName => "Panasonic .db/.bin Loader"; - #region Load() public override void Load() { @@ -102,7 +100,8 @@ namespace ChanSort.Loader.Panasonic var tempFile = this.FileName + ".tmp"; File.Delete(tempFile); - Application.ApplicationExit += CleanTempFile; + this.DeleteOnExit(tempFile); + if (cypherMode == CypherMode.Encryption) this.CypherFile(this.FileName, tempFile, false); else @@ -202,18 +201,6 @@ namespace ChanSort.Loader.Panasonic #endregion - #region CleanTempFile() - private void CleanTempFile(object sender, EventArgs e) - { - try - { - if (this.workFile != null) - File.Delete(this.workFile); - } - catch { } - } - #endregion - #region CreateDummySatellites() private void CreateDummySatellites() { @@ -351,7 +338,7 @@ order by s.ntype,major_channel var channel = channelInfo as DbChannel; if (channel == null) // skip reference list proxy channels continue; - if (channel.NewProgramNr < 0 || channel.OldProgramNr < 0) + if (channel.IsDeleted && channel.OldProgramNr >= 0) continue; cmd.Parameters["@rowid"].Value = channel.RecordIndex; cmd.Parameters["@progNr"].Value = channel.NewProgramNr; @@ -368,7 +355,7 @@ order by s.ntype,major_channel cmd.Parameters.Add(new SQLiteParameter("@rowid", DbType.Int32)); foreach (ChannelInfo channel in channelList.Channels) { - if (channel.NewProgramNr == -1 && channel.OldProgramNr >= 0) + if (channel.IsDeleted && channel.OldProgramNr >= 0) { cmd.Parameters["@rowid"].Value = channel.RecordIndex; cmd.ExecuteNonQuery(); diff --git a/source/ChanSort.Loader.PhilipsXml/ChanSort.Loader.PhilipsXml.csproj b/source/ChanSort.Loader.PhilipsXml/ChanSort.Loader.PhilipsXml.csproj index 03a9391..1794bad 100644 --- a/source/ChanSort.Loader.PhilipsXml/ChanSort.Loader.PhilipsXml.csproj +++ b/source/ChanSort.Loader.PhilipsXml/ChanSort.Loader.PhilipsXml.csproj @@ -9,9 +9,10 @@ Properties ChanSort.Loader.PhilipsXml ChanSort.Loader.PhilipsXml - v4.0 + v4.6 512 true + true @@ -21,32 +22,36 @@ DEBUG;TRACE prompt 4 + false pdbonly true - bin\Release\ + ..\Release\ TRACE prompt 4 + false true - bin\x86\Debug\ + ..\Debug\ DEBUG;TRACE full x86 prompt MinimumRecommendedRules.ruleset + false - bin\x86\Release\ + ..\Release\ TRACE true pdbonly x86 prompt MinimumRecommendedRules.ruleset + false diff --git a/source/ChanSort.Loader.PhilipsXml/Serializer.cs b/source/ChanSort.Loader.PhilipsXml/Serializer.cs index 37da734..20b49ca 100644 --- a/source/ChanSort.Loader.PhilipsXml/Serializer.cs +++ b/source/ChanSort.Loader.PhilipsXml/Serializer.cs @@ -41,7 +41,7 @@ namespace ChanSort.Loader.PhilipsXml public Serializer(string inputFile) : base(inputFile) { this.Features.ChannelNameEdit = ChannelNameEditMode.All; - this.Features.CanDeleteChannels = true; + this.Features.DeleteMode = DeleteMode.Physically; this.DataRoot.AddChannelList(this.terrChannels); this.DataRoot.AddChannelList(this.cableChannels); @@ -59,11 +59,6 @@ namespace ChanSort.Loader.PhilipsXml } #endregion - #region DisplayName - public override string DisplayName => "Philips *.xml loader"; - - #endregion - #region Load() @@ -134,8 +129,8 @@ namespace ChanSort.Loader.PhilipsXml if (setupNode.HasAttribute("ChannelName")) { this.formatVersion = 1; - this.DataRoot.SupportedFavorites = Favorites.A; - this.DataRoot.SortedFavorites = true; + this.Features.SupportedFavorites = Favorites.A; + this.Features.SortedFavorites = true; var dtype = bcastNode.GetAttribute("DecoderType"); if (dtype == "1") @@ -150,8 +145,8 @@ namespace ChanSort.Loader.PhilipsXml else if (setupNode.HasAttribute("name")) { this.formatVersion = 2; - this.DataRoot.SupportedFavorites = 0; - this.DataRoot.SortedFavorites = false; + this.Features.SupportedFavorites = 0; + this.Features.SortedFavorites = false; foreach (var list in this.DataRoot.ChannelLists) { list.VisibleColumnFieldNames.Remove("Favorites"); diff --git a/source/ChanSort.Loader.Samsung/ChanSort.Loader.Samsung.csproj b/source/ChanSort.Loader.Samsung/ChanSort.Loader.Samsung.csproj index 20f51fe..e802052 100644 --- a/source/ChanSort.Loader.Samsung/ChanSort.Loader.Samsung.csproj +++ b/source/ChanSort.Loader.Samsung/ChanSort.Loader.Samsung.csproj @@ -1,5 +1,5 @@  - + Debug AnyCPU @@ -10,7 +10,7 @@ Properties ChanSort.Loader.Samsung ChanSort.Loader.Samsung - v4.0 + v4.6 512 @@ -25,6 +25,7 @@ 4 true x86 + false pdbonly @@ -33,6 +34,7 @@ TRACE prompt 4 + false true @@ -45,9 +47,10 @@ false false false + false - bin\x86\Release\ + ..\Release\ TRACE true pdbonly @@ -56,15 +59,12 @@ true true true + false - - False - ..\DLL\ICSharpCode.SharpZipLib.dll - - + diff --git a/source/ChanSort.Loader.Samsung/DigitalChannel.cs b/source/ChanSort.Loader.Samsung/DigitalChannel.cs index 2be89d0..32de35a 100644 --- a/source/ChanSort.Loader.Samsung/DigitalChannel.cs +++ b/source/ChanSort.Loader.Samsung/DigitalChannel.cs @@ -13,9 +13,16 @@ namespace ChanSort.Loader.Samsung { this.InitCommonData(slot, signalSource & ~SignalSource.MaskTvRadioData, data); - if (!this.InUse || this.OldProgramNr == 0) + if (!this.InUse) return; + // "InUse" and "IsDeleted" are not always guessed correctly. If PrNr=0, the channel contains garbage + if (this.OldProgramNr == 0) + { + this.InUse = false; + return; + } + this.InitDvbData(data, providerNames); int transp = data.GetByte(_ChannelOrTransponder); diff --git a/source/ChanSort.Loader.Samsung/Resource.Designer.cs b/source/ChanSort.Loader.Samsung/Resource.Designer.cs index c2902e6..5d3141b 100644 --- a/source/ChanSort.Loader.Samsung/Resource.Designer.cs +++ b/source/ChanSort.Loader.Samsung/Resource.Designer.cs @@ -19,7 +19,7 @@ namespace ChanSort.Loader.Samsung { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resource { diff --git a/source/ChanSort.Loader.Samsung/SatChannel.cs b/source/ChanSort.Loader.Samsung/SatChannel.cs index 28ed8ae..8bb21cc 100644 --- a/source/ChanSort.Loader.Samsung/SatChannel.cs +++ b/source/ChanSort.Loader.Samsung/SatChannel.cs @@ -12,7 +12,10 @@ namespace ChanSort.Loader.Samsung { this.InitCommonData(slot, SignalSource.DvbS | presetList, data); if (!this.InUse) + { + this.IsDeleted = true; return; + } this.InitDvbData(data, providerNames); @@ -37,7 +40,7 @@ namespace ChanSort.Loader.Samsung public override void UpdateRawData() { - if (this.NewProgramNr < 0) // "deleted" flag is currently unknown for sat channels + if (this.IsDeleted) // "deleted" flag is currently unknown for sat channels this.InUse = false; base.UpdateRawData(); } diff --git a/source/ChanSort.Loader.Samsung/ScmChannelBase.cs b/source/ChanSort.Loader.Samsung/ScmChannelBase.cs index 446e000..e2fea90 100644 --- a/source/ChanSort.Loader.Samsung/ScmChannelBase.cs +++ b/source/ChanSort.Loader.Samsung/ScmChannelBase.cs @@ -71,8 +71,6 @@ namespace ChanSort.Loader.Samsung this.Skip = data.GetFlag(_Skip); this.Encrypted = data.GetFlag(_Encrypted); this.IsDeleted = data.GetFlag(_Deleted, false) || !data.GetFlag(_IsActive, true); - if (this.IsDeleted) - this.OldProgramNr = -1; this.AddDebug(data.Data, data.BaseOffset + 25, 3); } #endregion @@ -142,8 +140,7 @@ namespace ChanSort.Loader.Samsung { mapping.SetDataPtr(this.rawData, this.baseOffset); mapping.SetFlag(_InUse, this.InUse); - if (this.NewProgramNr >= 0) - mapping.SetWord(_ProgramNr, this.NewProgramNr); + mapping.SetWord(_ProgramNr, this.NewProgramNr); if (this.IsNameModified) { @@ -153,8 +150,8 @@ namespace ChanSort.Loader.Samsung } this.UpdateRawFavorites(); mapping.SetFlag(_Lock, this.Lock); - mapping.SetFlag(_Deleted, this.NewProgramNr < 0); - mapping.SetFlag(_IsActive, this.NewProgramNr >= 0); + mapping.SetFlag(_Deleted, this.IsDeleted); + mapping.SetFlag(_IsActive, !this.IsDeleted); mapping.SetFlag(_Skip, this.Skip); mapping.SetByte(this.mapping.GetByte(_Hidden) != 255 ? _Hidden : _HiddenAlt, this.Hidden ? 1 : 0); if (this.Encrypted != null) diff --git a/source/ChanSort.Loader.Samsung/ScmSerializer.cs b/source/ChanSort.Loader.Samsung/ScmSerializer.cs index bb8400b..bac5741 100644 --- a/source/ChanSort.Loader.Samsung/ScmSerializer.cs +++ b/source/ChanSort.Loader.Samsung/ScmSerializer.cs @@ -1,10 +1,10 @@ using System.Collections.Generic; using System.IO; +using System.IO.Compression; using System.Reflection; using System.Linq; using System.Text; using ChanSort.Api; -using ICSharpCode.SharpZipLib.Zip; namespace ChanSort.Loader.Samsung { @@ -62,15 +62,12 @@ namespace ChanSort.Loader.Samsung { this.ReadConfigurationFromIniFile(); this.Features.ChannelNameEdit = ChannelNameEditMode.All; + this.Features.DeleteMode = DeleteMode.FlagWithPrNr; this.Features.CleanUpChannelData = true; this.Features.EncryptedFlagEdit = true; } #endregion - #region DisplayName - public override string DisplayName { get { return "Samsung *.scm Loader"; } } - #endregion - #region ReadConfigurationFromIniFile() private void ReadConfigurationFromIniFile() { @@ -108,34 +105,34 @@ namespace ChanSort.Loader.Samsung #region Load() public override void Load() { - using (ZipFile zip = new ZipFile(this.FileName)) - { - DetectModelConstants(zip); - DataRoot.SupportedFavorites = c.supportedFavorites; - DataRoot.SortedFavorites = c.SortedFavorites == FavoritesIndexMode.IndividuallySorted; + var tempDir = this.UnzipFileToTempFolder(); + + DetectModelConstants(tempDir); + Features.SupportedFavorites = c.supportedFavorites; + Features.SortedFavorites = c.SortedFavorites == FavoritesIndexMode.IndividuallySorted; + + ReadAnalogFineTuning(tempDir); + ReadAnalogChannels(tempDir, "map-AirA", this.avbtChannels, out this.avbtFileContent, this.avbtFrequency); + ReadAnalogChannels(tempDir, "map-CableA", this.avbcChannels, out this.avbcFileContent, this.avbcFrequency); + ReadAnalogChannels(tempDir, "map-AirCableMixedA", this.avbxChannels, out this.avbxFileContent, this.avbcFrequency); + ReadDvbTransponderFrequenciesFromPtc(tempDir, "PTCAIR", this.dvbtFrequency); + ReadDvbServiceProviders(tempDir); + ReadDvbctChannels(tempDir, "map-AirD", this.dvbtChannels, out this.dvbtFileContent, this.dvbtFrequency); + ReadDvbTransponderFrequenciesFromPtc(tempDir, "PTCCABLE", this.dvbcFrequency); + ReadDvbctChannels(tempDir, "map-CableD", this.dvbcChannels, out this.dvbcFileContent, this.dvbcFrequency); + ReadDvbctChannels(tempDir, "map-AirCableMixedD", this.dvbxChannels, out this.dvbxFileContent, this.dvbcFrequency); + ReadDvbctChannels(tempDir, "map-CablePrime_D", this.primeChannels, out this.primeFileContent, this.dvbcFrequency); + ReadDvbctChannels(tempDir, "map-FreesatD", this.freesatChannels, out this.freesatFileContent, this.dvbcFrequency); + ReadDvbctChannels(tempDir, "map-TivusatD", this.tivusatChannels, out this.tivusatFileContent, this.dvbcFrequency); + ReadDvbctChannels(tempDir, "map-CanalDigitalSatD", this.canalDigitalChannels, out this.canalDigitalFileContent, this.dvbcFrequency); + ReadDvbctChannels(tempDir, "map-DigitalPlusD", this.digitalPlusChannels, out this.digitalPlusFileContent, this.dvbcFrequency); + ReadSatellites(tempDir); + ReadTransponder(tempDir, "UserTransponderDataBase.dat"); // read user data first so it has priority over overridden default transponsers + ReadTransponder(tempDir, "TransponderDataBase.dat"); + ReadDvbsChannels(tempDir, "map-SateD", this.dvbsChannels, out this.dvbsFileContent, c.dvbsChannelLength); + ReadDvbsChannels(tempDir, "map-CyfraPlusD", this.cyfraPlusChannels, out this.cyfraPlusFileContent, c.cyfraPlusChannelSize); + ReadAstraHdPlusChannels(tempDir); - ReadAnalogFineTuning(zip); - ReadAnalogChannels(zip, "map-AirA", this.avbtChannels, out this.avbtFileContent, this.avbtFrequency); - ReadAnalogChannels(zip, "map-CableA", this.avbcChannels, out this.avbcFileContent, this.avbcFrequency); - ReadAnalogChannels(zip, "map-AirCableMixedA", this.avbxChannels, out this.avbxFileContent, this.avbcFrequency); - ReadDvbTransponderFrequenciesFromPtc(zip, "PTCAIR", this.dvbtFrequency); - ReadDvbServiceProviders(zip); - ReadDvbctChannels(zip, "map-AirD", this.dvbtChannels, out this.dvbtFileContent, this.dvbtFrequency); - ReadDvbTransponderFrequenciesFromPtc(zip, "PTCCABLE", this.dvbcFrequency); - ReadDvbctChannels(zip, "map-CableD", this.dvbcChannels, out this.dvbcFileContent, this.dvbcFrequency); - ReadDvbctChannels(zip, "map-AirCableMixedD", this.dvbxChannels, out this.dvbxFileContent, this.dvbcFrequency); - ReadDvbctChannels(zip, "map-CablePrime_D", this.primeChannels, out this.primeFileContent, this.dvbcFrequency); - ReadDvbctChannels(zip, "map-FreesatD", this.freesatChannels, out this.freesatFileContent, this.dvbcFrequency); - ReadDvbctChannels(zip, "map-TivusatD", this.tivusatChannels, out this.tivusatFileContent, this.dvbcFrequency); - ReadDvbctChannels(zip, "map-CanalDigitalSatD", this.canalDigitalChannels, out this.canalDigitalFileContent, this.dvbcFrequency); - ReadDvbctChannels(zip, "map-DigitalPlusD", this.digitalPlusChannels, out this.digitalPlusFileContent, this.dvbcFrequency); - ReadSatellites(zip); - ReadTransponder(zip, "UserTransponderDataBase.dat"); // read user data first so it has priority over overridden default transponsers - ReadTransponder(zip, "TransponderDataBase.dat"); - ReadDvbsChannels(zip, "map-SateD", this.dvbsChannels, out this.dvbsFileContent, c.dvbsChannelLength); - ReadDvbsChannels(zip, "map-CyfraPlusD", this.cyfraPlusChannels, out this.cyfraPlusFileContent, c.cyfraPlusChannelSize); - ReadAstraHdPlusChannels(zip); - } foreach (var list in this.DataRoot.ChannelLists) { @@ -148,11 +145,11 @@ namespace ChanSort.Loader.Samsung #endregion #region DetectModelConstants() - internal void DetectModelConstants(ZipFile zip) + internal void DetectModelConstants(string tempDir) { if (DetectModelFromFileName()) return; - if (DetectModelFromCloneInfoFile(zip)) return; - if (DetectModelFromContentFileLengths(zip)) return; + if (DetectModelFromCloneInfoFile(tempDir)) return; + if (DetectModelFromContentFileLengths(tempDir)) return; throw new FileLoadException("Unable to determine TV model from file content or name"); } #endregion @@ -187,9 +184,9 @@ namespace ChanSort.Loader.Samsung #endregion #region DetectModelFromCloneInfoFile() - private bool DetectModelFromCloneInfoFile(ZipFile zip) + private bool DetectModelFromCloneInfoFile(string tempDir) { - byte[] cloneInfo = ReadFileContent(zip, "CloneInfo"); + byte[] cloneInfo = ReadFileContent(tempDir, "CloneInfo"); if (cloneInfo == null) { this.c = this.modelConstants["Series:B"]; @@ -213,7 +210,7 @@ namespace ChanSort.Loader.Samsung #endregion #region DetectModelFromContentFileLengths() - private bool DetectModelFromContentFileLengths(ZipFile zip) + private bool DetectModelFromContentFileLengths(string zip) { string[] candidates = { DetectModelFromAirAOrCableA(zip), @@ -267,69 +264,84 @@ namespace ChanSort.Loader.Samsung #endregion - #region DetectModelFromAirAOrCableA() - private string DetectModelFromAirAOrCableA(ZipFile zip) + #region GetFileInfo() + private FileInfo GetFileInfo(string zipFolder, params string[] fileNames) { - var entry = zip.GetEntry("map-AirA") ?? zip.GetEntry("map-CableA"); - if (entry == null) + foreach (var fileName in fileNames) + { + var path = Path.Combine(zipFolder, fileName); + var info = new FileInfo(path); + if (info.Exists) + return info; + } + + return null; + } + #endregion + + #region DetectModelFromAirAOrCableA() + private string DetectModelFromAirAOrCableA(string zip) + { + var info = GetFileInfo(zip, "map-AirA", "map-CableA"); + if (info == null) return null; var candidates = ""; - if (entry.Size % 28000 == 0) + if (info.Length % 28000 == 0) candidates += "B"; - if (entry.Size % 40000 == 0) + if (info.Length % 40000 == 0) candidates += "C"; - if (entry.Size % 64000 == 0) + if (info.Length % 64000 == 0) candidates += "DE"; return candidates; } #endregion #region DetectModelFromAirDOrCableD() - private string DetectModelFromAirDOrCableD(ZipFile zip) + private string DetectModelFromAirDOrCableD(string zip) { - var entry = zip.GetEntry("map-AirD") ?? zip.GetEntry("map-CableD") ?? zip.GetEntry("map-CablePrime_D") ?? zip.GetEntry("map-FreesatD") - ?? zip.GetEntry("map-TivusatD") ?? zip.GetEntry("map-CanalDigitalSatD") ?? zip.GetEntry("map-DigitalPlusD"); + var entry = GetFileInfo(zip, "map-AirD", "map-CableD", "map-CablePrime_D", "map-FreesatD", + "map-TivusatD", "map-CanalDigitalSatD", "map-DigitalPlusD"); if (entry == null) return null; var candidates = ""; - if (entry.Size % 248 == 0) + if (entry.Length % 248 == 0) candidates += "B"; - if (entry.Size % 292 == 0) + if (entry.Length % 292 == 0) candidates += "C"; - if (entry.Size % 320 == 0) + if (entry.Length % 320 == 0) candidates += "DE"; return candidates; } #endregion #region DetectModelFromSateD() - private string DetectModelFromSateD(ZipFile zip) + private string DetectModelFromSateD(string zip) { - var entry = zip.GetEntry("map-SateD"); + var entry = this.GetFileInfo(zip, "map-SateD"); if (entry == null) return null; var candidates = ""; - if (entry.Size % 144 == 0) + if (entry.Length % 144 == 0) candidates += "BC"; - if (entry.Size % 172 == 0) + if (entry.Length % 172 == 0) candidates += "D"; - if (entry.Size % 168 == 0) + if (entry.Length % 168 == 0) candidates += "E"; return candidates; } #endregion #region DetectModelFromTranspoderDatabase() - private string DetectModelFromTranspoderDatabase(ZipFile zip) + private string DetectModelFromTranspoderDatabase(string zip) { - var entry = zip.GetEntry("TransponderDatabase.dat"); + var entry = GetFileInfo(zip, "TransponderDatabase.dat"); if (entry == null) return null; - var size = entry.Size - 4; + var size = entry.Length - 4; var candidates = ""; if (size%49 == 0) candidates += "B"; @@ -340,13 +352,13 @@ namespace ChanSort.Loader.Samsung #endregion #region DetectModelFromAstraHdPlusD() - private string DetectModelFromAstraHdPlusD(ZipFile zip) + private string DetectModelFromAstraHdPlusD(string zip) { - var entry = zip.GetEntry("map-AstraHDPlusD"); + var entry = GetFileInfo(zip, "map-AstraHDPlusD"); if (entry == null) return null; - var size = entry.Size; + var size = entry.Length; string candidates = null; if (size % 212 == 0) candidates += "DE"; @@ -356,7 +368,7 @@ namespace ChanSort.Loader.Samsung #region ReadAnalogFineTuning() - private void ReadAnalogFineTuning(ZipFile zip) + private void ReadAnalogFineTuning(string zip) { int entrySize = c.avbtFineTuneLength; if (entrySize == 0) @@ -382,7 +394,7 @@ namespace ChanSort.Loader.Samsung #endregion #region ReadAnalogChannels() - private void ReadAnalogChannels(ZipFile zip, string fileName, ChannelList list, out byte[] data, Dictionary freq) + private void ReadAnalogChannels(string zip, string fileName, ChannelList list, out byte[] data, Dictionary freq) { data = null; int entrySize = c.avbtChannelLength; @@ -421,7 +433,7 @@ namespace ChanSort.Loader.Samsung #region ReadDvbTransponderFrequenciesFromPtc() - private void ReadDvbTransponderFrequenciesFromPtc(ZipFile zip, string file, IDictionary table) + private void ReadDvbTransponderFrequenciesFromPtc(string zip, string file, IDictionary table) { byte[] data = ReadFileContent(zip, file); if (data == null) @@ -441,7 +453,7 @@ namespace ChanSort.Loader.Samsung #endregion #region ReadDvbServiceProviders() - private void ReadDvbServiceProviders(ZipFile zip) + private void ReadDvbServiceProviders(string zip) { this.serviceProviderNames = new Dictionary(); var data = ReadFileContent(zip, "ServiceProviders"); @@ -466,7 +478,7 @@ namespace ChanSort.Loader.Samsung #endregion #region ReadDvbctChannels() - private void ReadDvbctChannels(ZipFile zip, string fileName, ChannelList list, out byte[] data, Dictionary frequency) + private void ReadDvbctChannels(string zip, string fileName, ChannelList list, out byte[] data, Dictionary frequency) { data = null; int entrySize = c.dvbtChannelLength; @@ -486,7 +498,7 @@ namespace ChanSort.Loader.Samsung for (int slotIndex = 0; slotIndex < count; slotIndex++) { DigitalChannel ci = new DigitalChannel(slotIndex, source, rawChannel, frequency, c.SortedFavorites, this.serviceProviderNames); - if (ci.InUse && !ci.IsDeleted && ci.OldProgramNr > 0) + if (ci.InUse) this.DataRoot.AddChannel(list, ci); rawChannel.BaseOffset += entrySize; @@ -496,7 +508,7 @@ namespace ChanSort.Loader.Samsung #region ReadSatellites() - private void ReadSatellites(ZipFile zip) + private void ReadSatellites(string zip) { byte[] data = ReadFileContent(zip, "SatDataBase.dat"); if (data == null || data.Length < 4) @@ -527,7 +539,7 @@ namespace ChanSort.Loader.Samsung #region ReadTransponder() - private void ReadTransponder(ZipFile zip, string fileName) + private void ReadTransponder(string zip, string fileName) { byte[] data = ReadFileContent(zip, fileName); if (data == null) @@ -562,7 +574,7 @@ namespace ChanSort.Loader.Samsung #endregion #region ReadDvbsChannels() - private void ReadDvbsChannels(ZipFile zip, string filename, ChannelList channels, out byte[] fileContent, int entrySize) + private void ReadDvbsChannels(string zip, string filename, ChannelList channels, out byte[] fileContent, int entrySize) { fileContent = ReadFileContent(zip, filename); if (fileContent == null) @@ -585,7 +597,7 @@ namespace ChanSort.Loader.Samsung #endregion #region ReadAstraHdPlusChannels() - private void ReadAstraHdPlusChannels(ZipFile zip) + private void ReadAstraHdPlusChannels(string zip) { this.hdplusFileContent = ReadFileContent(zip, "map-AstraHDPlusD"); if (hdplusFileContent == null || c.hdplusChannelLength == 0) @@ -608,64 +620,46 @@ namespace ChanSort.Loader.Samsung #region ReadFileContent() - private static byte[] ReadFileContent(ZipFile zip, string fileName) + private static byte[] ReadFileContent(string tempDir, string fileName) { - var entry = zip.GetEntry(fileName); - if (entry == null) - return null; - byte[] data = new byte[entry.Size]; - using (var stream = zip.GetInputStream(entry)) - { - stream.Read(data, 0, data.Length); - } - return data; + var path = Path.Combine(tempDir, fileName); + return File.Exists(path) ? File.ReadAllBytes(path) : null; } #endregion #region Save() public override void Save(string tvOutputFile) { - if (tvOutputFile != this.FileName) - { - File.Copy(this.FileName, tvOutputFile, true); - this.FileName = tvOutputFile; - } - using (ZipFile zip = new ZipFile(tvOutputFile)) - { - zip.BeginUpdate(); - this.SaveChannels(zip, "map-AirA", this.avbtChannels, this.avbtFileContent); - this.SaveChannels(zip, "map-CableA", this.avbcChannels, this.avbcFileContent); - this.SaveChannels(zip, "map-AirCableMixedA", this.avbxChannels, this.avbxFileContent); - this.SaveChannels(zip, "map-AirD", this.dvbtChannels, this.dvbtFileContent); - this.SaveChannels(zip, "map-CableD", this.dvbcChannels, this.dvbcFileContent); - this.SaveChannels(zip, "map-AirCableMixedD", this.dvbxChannels, this.dvbxFileContent); - this.SaveChannels(zip, "map-SateD", this.dvbsChannels, this.dvbsFileContent); - this.SaveChannels(zip, "map-AstraHDPlusD", this.hdplusChannels, this.hdplusFileContent); - this.SaveChannels(zip, "map-CablePrime_D", this.primeChannels, this.primeFileContent); - this.SaveChannels(zip, "map-FreesatD", this.freesatChannels, this.freesatFileContent); - this.SaveChannels(zip, "map-TivusatD", this.tivusatChannels, this.tivusatFileContent); - this.SaveChannels(zip, "map-CanalDigitalSatD", this.canalDigitalChannels, this.canalDigitalFileContent); - this.SaveChannels(zip, "map-DigitalPlusD", this.digitalPlusChannels, this.digitalPlusFileContent); - this.SaveChannels(zip, "map-CyfraPlusD", this.cyfraPlusChannels, this.cyfraPlusFileContent); - zip.CommitUpdate(); - } + string zip = this.FileName + ".tmp"; + this.SaveChannels(zip, "map-AirA", this.avbtChannels, this.avbtFileContent); + this.SaveChannels(zip, "map-CableA", this.avbcChannels, this.avbcFileContent); + this.SaveChannels(zip, "map-AirCableMixedA", this.avbxChannels, this.avbxFileContent); + this.SaveChannels(zip, "map-AirD", this.dvbtChannels, this.dvbtFileContent); + this.SaveChannels(zip, "map-CableD", this.dvbcChannels, this.dvbcFileContent); + this.SaveChannels(zip, "map-AirCableMixedD", this.dvbxChannels, this.dvbxFileContent); + this.SaveChannels(zip, "map-SateD", this.dvbsChannels, this.dvbsFileContent); + this.SaveChannels(zip, "map-AstraHDPlusD", this.hdplusChannels, this.hdplusFileContent); + this.SaveChannels(zip, "map-CablePrime_D", this.primeChannels, this.primeFileContent); + this.SaveChannels(zip, "map-FreesatD", this.freesatChannels, this.freesatFileContent); + this.SaveChannels(zip, "map-TivusatD", this.tivusatChannels, this.tivusatFileContent); + this.SaveChannels(zip, "map-CanalDigitalSatD", this.canalDigitalChannels, this.canalDigitalFileContent); + this.SaveChannels(zip, "map-DigitalPlusD", this.digitalPlusChannels, this.digitalPlusFileContent); + this.SaveChannels(zip, "map-CyfraPlusD", this.cyfraPlusChannels, this.cyfraPlusFileContent); + this.ZipToOutputFile(tvOutputFile); } #endregion #region SaveChannels() - private void SaveChannels(ZipFile zip, string fileName, ChannelList channels, byte[] fileContent) + private void SaveChannels(string zip, string fileName, ChannelList channels, byte[] fileContent) { if (fileContent == null) return; - zip.Delete(fileName); - string tempFilePath = Path.GetTempFileName(); + string tempFilePath = Path.Combine(zip, fileName); using (var stream = new FileStream(tempFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite)) { this.WriteChannels(channels, fileContent, stream); } - - zip.Add(tempFilePath, fileName); } #endregion diff --git a/source/ChanSort.Loader.SamsungJ/ChanSort.Loader.SamsungJ.csproj b/source/ChanSort.Loader.SamsungJ/ChanSort.Loader.SamsungJ.csproj index bad2901..0c283b8 100644 --- a/source/ChanSort.Loader.SamsungJ/ChanSort.Loader.SamsungJ.csproj +++ b/source/ChanSort.Loader.SamsungJ/ChanSort.Loader.SamsungJ.csproj @@ -9,9 +9,10 @@ Properties ChanSort.Loader.SamsungJ ChanSort.Loader.SamsungJ - v4.0 + v4.6 512 - Client + + true @@ -21,6 +22,7 @@ DEBUG;TRACE prompt 4 + false pdbonly @@ -29,6 +31,7 @@ TRACE prompt 4 + false true @@ -38,26 +41,25 @@ x86 prompt MinimumRecommendedRules.ruleset + false - bin\x86\Release\ + ..\Release\ TRACE true pdbonly x86 prompt MinimumRecommendedRules.ruleset + false - - ..\DLL\ICSharpCode.SharpZipLib.dll - ..\DLL\System.Data.SQLite.dll - + diff --git a/source/ChanSort.Loader.SamsungJ/DbSerializer.cs b/source/ChanSort.Loader.SamsungJ/DbSerializer.cs index 54b0fa7..7e7dca5 100644 --- a/source/ChanSort.Loader.SamsungJ/DbSerializer.cs +++ b/source/ChanSort.Loader.SamsungJ/DbSerializer.cs @@ -3,15 +3,14 @@ using System.Collections.Generic; using System.Data; using System.Data.SQLite; using System.IO; +using System.Linq; using System.Text; -using System.Windows.Forms; using ChanSort.Api; -using ICSharpCode.SharpZipLib.Zip; namespace ChanSort.Loader.SamsungJ { /// - /// Loader for Samsung J/K/M/Q/N/... series .zip files + /// Loader for Samsung J/K/M/N/R/Q series .zip files (2015 - 2019+) /// class DbSerializer : SerializerBase { @@ -27,124 +26,79 @@ namespace ChanSort.Loader.SamsungJ DepencencyChecker.AssertVc2010RedistPackageX86Installed(); this.Features.ChannelNameEdit = ChannelNameEditMode.All; - this.Features.CanDeleteChannels = true; - this.DataRoot.SupportedFavorites = Favorites.A | Favorites.B | Favorites.C | Favorites.D | Favorites.E; - this.DataRoot.SortedFavorites = true; - this.DataRoot.AllowGapsInFavNumbers = false; - this.DataRoot.ShowDeletedChannels = false; + this.Features.DeleteMode = DeleteMode.Physically; + this.Features.SupportedFavorites = Favorites.A | Favorites.B | Favorites.C | Favorites.D | Favorites.E; + this.Features.SortedFavorites = true; + this.Features.AllowGapsInFavNumbers = false; } #endregion - #region DisplayName - public override string DisplayName => "Samsung .zip Loader"; - - #endregion - #region Load() public override void Load() - { - this.UnzipDataFile(); - if (File.Exists(tempDir + "\\sat")) - { - try - { - using (var conn = new SQLiteConnection("Data Source=" + tempDir + "\\sat")) - { - conn.Open(); - this.ReadSatDatabase(conn); - } - } - catch { } - } - - var files = Directory.GetFiles(tempDir, "*."); - if (files.Length == 0) - throw new FileLoadException("The Samsung .zip channel list archive does not contain any supported files."); - - foreach (var filePath in files) - { - var filename = Path.GetFileName(filePath) ?? ""; - if (filename.StartsWith("vconf_")) - continue; - try - { - using (var conn = new SQLiteConnection("Data Source=" + filePath)) - { - FileType type; - conn.Open(); - using (var cmd = conn.CreateCommand()) - { - this.RepairCorruptedDatabaseImage(cmd); - type = this.DetectFileType(cmd); - } - - switch (type) - { - case FileType.SatDb: break; - case FileType.ChannelDbAnalog: - ReadChannelDatabase(conn, filePath, false); - break; - case FileType.ChannelDbDvb: - ReadChannelDatabase(conn, filePath, true); - break; - } - } - } - catch - { - } - } - } - #endregion - - #region UnzipDataFile() - private void UnzipDataFile() - { - this.tempDir = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()) + "\\"; - Directory.CreateDirectory(tempDir); - Application.ApplicationExit += this.CleanTempFolder; - - using (ZipFile zip = new ZipFile(this.FileName)) - { - foreach (ZipEntry entry in zip) - { - // only expand files from the root folder to avoid pit-falls with incorrectly rezipped lists - // that contain the data files in a subfolder - if (Path.GetDirectoryName(entry.Name) == "") - this.Expand(zip, entry.Name); - } - } - } - #endregion - - #region CleanTempFolder() - private void CleanTempFolder(object sender, EventArgs e) { try { - foreach(var file in Directory.GetFiles(this.tempDir)) - File.Delete(file); - Directory.Delete(this.tempDir); + this.tempDir = this.UnzipFileToTempFolder(); + if (File.Exists(tempDir + "\\sat")) + { + try + { + using (var conn = new SQLiteConnection("Data Source=" + tempDir + "\\sat")) + { + conn.Open(); + this.ReadSatDatabase(conn); + } + } + catch + { + } + } + + var files = Directory.GetFiles(tempDir, "*."); + if (files.Length == 0) + throw new FileLoadException("The Samsung .zip channel list archive does not contain any supported files."); + + foreach (var filePath in files) + { + var filename = Path.GetFileName(filePath) ?? ""; + if (filename.StartsWith("vconf_")) + continue; + try + { + using (var conn = new SQLiteConnection("Data Source=" + filePath)) + { + FileType type; + conn.Open(); + using (var cmd = conn.CreateCommand()) + { + this.RepairCorruptedDatabaseImage(cmd); + type = this.DetectFileType(cmd); + } + + switch (type) + { + case FileType.SatDb: break; + case FileType.ChannelDbAnalog: + ReadChannelDatabase(conn, filePath, false); + break; + case FileType.ChannelDbDvb: + ReadChannelDatabase(conn, filePath, true); + break; + } + } + } + catch + { + } + } } - catch { } - } - #endregion - - #region Expand() - private void Expand(ZipFile zip, string path) - { - var entry = zip.GetEntry(path); - if (entry == null) - throw new FileLoadException("File not found inside .zip: " + path); - - byte[] buffer = new byte[65536]; - using (var input = zip.GetInputStream(entry)) - using (var output = new FileStream(this.tempDir + Path.GetFileName(path), FileMode.Create)) + finally { - int len; - while ((len = input.Read(buffer, 0, buffer.Length)) != 0) - output.Write(buffer, 0, len); + // force closing the file and releasing the locks + SQLiteConnection.ClearAllPools(); + GC.Collect(); + GC.WaitForPendingFinalizers(); } } #endregion @@ -296,11 +250,8 @@ namespace ChanSort.Loader.SamsungJ // Note that we can have channels from multiple satellites in the same list, so this is a loop variable now var sat = tp?.Satellite; var channel = new DbChannel(r, fields, this.DataRoot, providers, sat, tp); - //if (!channel.IsDeleted) - { - this.DataRoot.AddChannel(channelList, channel); - this.channelById.Add(channel.RecordIndex, channel); - } + this.DataRoot.AddChannel(channelList, channel); + this.channelById.Add(channel.RecordIndex, channel); } } @@ -404,28 +355,18 @@ namespace ChanSort.Loader.SamsungJ #region Save() public override void Save(string tvOutputFile) { - if (tvOutputFile != this.FileName) + foreach (var channelList in this.DataRoot.ChannelLists) { - File.Copy(this.FileName, tvOutputFile); - this.FileName = tvOutputFile; + var dbPath = this.dbPathByChannelList[channelList]; + SaveChannelList(channelList, dbPath); } - using (var zip = new ZipFile(this.FileName)) - { - zip.BeginUpdate(); + // force closing the file and releasing the locks + SQLiteConnection.ClearAllPools(); + GC.Collect(); + GC.WaitForPendingFinalizers(); - foreach (var channelList in this.DataRoot.ChannelLists) - { - var dbPath = this.dbPathByChannelList[channelList]; - SaveChannelList(channelList, dbPath); - - var entryName = Path.GetFileName(dbPath); - zip.Delete(entryName); - zip.Add(dbPath, entryName); - } - - zip.CommitUpdate(); - } + this.ZipToOutputFile(tvOutputFile); } #endregion @@ -496,6 +437,7 @@ namespace ChanSort.Loader.SamsungJ cmd.Prepare(); return cmd; } + private static SQLiteCommand PrepareUpdateFavCommand(SQLiteConnection conn) { var cmd = conn.CreateCommand(); @@ -523,17 +465,18 @@ namespace ChanSort.Loader.SamsungJ ChannelList channelList, bool analog = false) { - foreach (ChannelInfo channelInfo in channelList.Channels) + foreach (ChannelInfo channelInfo in channelList.Channels.ToList()) { var channel = channelInfo as DbChannel; if (channel == null) // ignore reference list proxy channels continue; - if (channel.NewProgramNr < 0) + if (channel.IsDeleted) { // delete channel from all tables that have a reference to srvId cmdDeleteSrv.Parameters["@id"].Value = channel.RecordIndex; cmdDeleteSrv.ExecuteNonQuery(); + channelList.Channels.Remove(channelInfo); continue; } diff --git a/source/ChanSort.Loader.SilvaSchneider/ChanSort.Loader.SilvaSchneider.csproj b/source/ChanSort.Loader.SilvaSchneider/ChanSort.Loader.SilvaSchneider.csproj index e18f301..fead867 100644 --- a/source/ChanSort.Loader.SilvaSchneider/ChanSort.Loader.SilvaSchneider.csproj +++ b/source/ChanSort.Loader.SilvaSchneider/ChanSort.Loader.SilvaSchneider.csproj @@ -9,9 +9,10 @@ Properties ChanSort.Loader.SilvaSchneider ChanSort.Loader.SilvaSchneider - v4.0 + v4.6 512 - Client + + true @@ -43,7 +44,7 @@ false - bin\x86\Release\ + ..\Release\ TRACE true pdbonly diff --git a/source/ChanSort.Loader.SilvaSchneider/Serializer.cs b/source/ChanSort.Loader.SilvaSchneider/Serializer.cs index 740d305..7080c53 100644 --- a/source/ChanSort.Loader.SilvaSchneider/Serializer.cs +++ b/source/ChanSort.Loader.SilvaSchneider/Serializer.cs @@ -16,8 +16,9 @@ namespace ChanSort.Loader.SilvaSchneider public Serializer(string inputFile) : base(inputFile) { this.Features.ChannelNameEdit = ChannelNameEditMode.None; - this.DataRoot.SortedFavorites = false; - this.DataRoot.SupportedFavorites = 0; + this.Features.DeleteMode = DeleteMode.Physically; + this.Features.SortedFavorites = false; + this.Features.SupportedFavorites = 0; this.DataRoot.AddChannelList(this.allChannels); @@ -37,8 +38,6 @@ namespace ChanSort.Loader.SilvaSchneider #endregion - public override string DisplayName => "Silva Schneider *.sdx Loader"; - #region Load() public override void Load() @@ -77,7 +76,9 @@ namespace ChanSort.Loader.SilvaSchneider foreach (var channel in this.allChannels.GetChannelsByNewOrder()) { // when a reference list was applied, the list may contain proxy entries for deleted channels, which must be ignored - if (channel is Channels realChannel && channel.NewProgramNr >= 0) + if (channel.IsProxy || channel.IsDeleted) + continue; + if (channel is Channels realChannel) file.Write(this.content, realChannel.FileOffset, realChannel.Length + 1); } } diff --git a/source/ChanSort.Loader.Sony/ChanSort.Loader.Sony.csproj b/source/ChanSort.Loader.Sony/ChanSort.Loader.Sony.csproj index 7107014..12e079d 100644 --- a/source/ChanSort.Loader.Sony/ChanSort.Loader.Sony.csproj +++ b/source/ChanSort.Loader.Sony/ChanSort.Loader.Sony.csproj @@ -9,9 +9,10 @@ Properties ChanSort.Loader.Sony ChanSort.Loader.Sony - v4.0 + v4.6 512 true + true @@ -21,6 +22,7 @@ DEBUG;TRACE prompt 4 + false pdbonly @@ -29,24 +31,27 @@ TRACE prompt 4 + false true - bin\x86\Debug\ + ..\Debug\ DEBUG;TRACE full x86 prompt MinimumRecommendedRules.ruleset + false - bin\x86\Release\ + ..\Release\ TRACE true pdbonly x86 prompt MinimumRecommendedRules.ruleset + false diff --git a/source/ChanSort.Loader.Sony/Serializer.cs b/source/ChanSort.Loader.Sony/Serializer.cs index 0cfc8d4..1530067 100644 --- a/source/ChanSort.Loader.Sony/Serializer.cs +++ b/source/ChanSort.Loader.Sony/Serializer.cs @@ -37,7 +37,7 @@ namespace ChanSort.Loader.Sony public Serializer(string inputFile) : base(inputFile) { this.Features.ChannelNameEdit = ChannelNameEditMode.All; - this.Features.CanDeleteChannels = true; + this.Features.DeleteMode = DeleteMode.FlagWithoutPrNr; // in Android/e-format, this will be changed to FlagWithPrNr this.DataRoot.AddChannelList(new ChannelList(SignalSource.DvbT | SignalSource.Tv, "DVB-T TV")); this.DataRoot.AddChannelList(new ChannelList(SignalSource.DvbT | SignalSource.Radio, "DVB-T Radio")); @@ -62,12 +62,6 @@ namespace ChanSort.Loader.Sony } #endregion - #region DisplayName - public override string DisplayName => "Sony sdb.xml loader"; - - #endregion - - #region Load() public override void Load() @@ -142,9 +136,7 @@ namespace ChanSort.Loader.Sony { this.format = "e" + formatNode.InnerText; this.isEFormat = true; - this.DataRoot.DeletedChannelsNeedNumbers = true; - foreach(var list in this.DataRoot.ChannelLists) - list.VisibleColumnFieldNames.Add("IsDeleted"); + this.Features.DeleteMode = DeleteMode.FlagWithPrNr; } if (SupportedFormatVersions.IndexOf(" " + this.format + " ", StringComparison.Ordinal) < 0) @@ -332,7 +324,7 @@ namespace ChanSort.Loader.Sony } chan.ServiceType = int.Parse(dvbData["ui1_sdt_service_type"][i]); - chan.SignalSource |= LookupData.Instance.IsRadioOrTv(chan.ServiceType); + chan.SignalSource |= LookupData.Instance.IsRadioOrTv(chan.ServiceType); // could also use information with 1=TV, 2=Radio, 3=Other CopyDataValues(serviceNode, svcData, i, chan.ServiceData); @@ -535,7 +527,7 @@ namespace ChanSort.Loader.Sony { var dvbt = this.DataRoot.GetChannelList(SignalSource.DvbT | SignalSource.Tv).Channels .Concat(this.DataRoot.GetChannelList(SignalSource.DvbT | SignalSource.Radio).Channels) - .Concat(this.DataRoot.GetChannelList(SignalSource.DvbT).Channels) + .Concat(this.DataRoot.GetChannelList(SignalSource.DvbT | SignalSource.Data).Channels) .ToList(); this.UpdateChannelList(dvbt, nodes); } @@ -544,14 +536,14 @@ namespace ChanSort.Loader.Sony { var dvbc = this.DataRoot.GetChannelList(SignalSource.DvbC | SignalSource.Tv).Channels .Concat(this.DataRoot.GetChannelList(SignalSource.DvbC | SignalSource.Radio).Channels) - .Concat(this.DataRoot.GetChannelList(SignalSource.DvbC).Channels) + .Concat(this.DataRoot.GetChannelList(SignalSource.DvbC | SignalSource.Data).Channels) .ToList(); this.UpdateChannelList(dvbc, nodes); } foreach (var list in this.DataRoot.ChannelLists) { - if ((list.SignalSource & SignalSource.DvbS) == SignalSource.DvbS && this.channeListNodes.TryGetValue(list.SignalSource, out nodes)) + if ((list.SignalSource & SignalSource.DvbS) == SignalSource.DvbS && this.channeListNodes.TryGetValue(list.SignalSource & ~SignalSource.MaskTvRadioData, out nodes)) this.UpdateChannelList(list.Channels, nodes); } diff --git a/source/ChanSort.Loader.Toshiba/ChanSort.Loader.Toshiba.csproj b/source/ChanSort.Loader.Toshiba/ChanSort.Loader.Toshiba.csproj index d694590..016b459 100644 --- a/source/ChanSort.Loader.Toshiba/ChanSort.Loader.Toshiba.csproj +++ b/source/ChanSort.Loader.Toshiba/ChanSort.Loader.Toshiba.csproj @@ -1,5 +1,5 @@  - + Debug AnyCPU @@ -10,7 +10,7 @@ Properties ChanSort.Loader.Toshiba ChanSort.Loader.Toshiba - v4.0 + v4.6 512 @@ -24,6 +24,7 @@ prompt 4 x86 + false pdbonly @@ -32,6 +33,7 @@ TRACE prompt 4 + false true @@ -42,9 +44,10 @@ prompt false false + false - bin\x86\Release\ + ..\Release\ TRACE true pdbonly @@ -52,22 +55,19 @@ prompt false false + false - - False - ..\DLL\ICSharpCode.SharpZipLib.dll - ..\DLL\System.Data.SQLite.dll + - diff --git a/source/ChanSort.Loader.Toshiba/DbChannel.cs b/source/ChanSort.Loader.Toshiba/DbChannel.cs index 9f78024..aa66e7d 100644 --- a/source/ChanSort.Loader.Toshiba/DbChannel.cs +++ b/source/ChanSort.Loader.Toshiba/DbChannel.cs @@ -133,7 +133,7 @@ namespace ChanSort.Loader.Toshiba #region UpdateRawData() public override void UpdateRawData() { - Bits &= ~(BITS_FavA | BITS_FavB | BITS_FavC | BITS_FavC | BITS_FavD | BITS_Locked); + Bits &= ~(BITS_FavA | BITS_FavB | BITS_FavC | BITS_FavD | BITS_Locked); if ((this.Favorites & Favorites.A) != 0) Bits |= BITS_FavA; if ((this.Favorites & Favorites.B) != 0) Bits |= BITS_FavB; if ((this.Favorites & Favorites.C) != 0) Bits |= BITS_FavC; diff --git a/source/ChanSort.Loader.Toshiba/DbSerializer.cs b/source/ChanSort.Loader.Toshiba/DbSerializer.cs index 977c4ca..797623e 100644 --- a/source/ChanSort.Loader.Toshiba/DbSerializer.cs +++ b/source/ChanSort.Loader.Toshiba/DbSerializer.cs @@ -1,19 +1,15 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Data; using System.Data.SQLite; -using System.IO; -using System.Windows.Forms; using ChanSort.Api; -using ICSharpCode.SharpZipLib.Zip; namespace ChanSort.Loader.Toshiba { class DbSerializer : SerializerBase { - private const string FILE_chmgt_db = "chmgt.db"; - private const string FILE_dvbSysData_db = "dvbSysData.db"; - private const string FILE_dvbMainData_db = "dvbMainData.db"; + private const string FILE_chmgt_db = "chmgt_type001\\chmgt.db"; + private const string FILE_dvbSysData_db = "dvb_type001\\dvbSysData.db"; + private const string FILE_dvbMainData_db = "dvb_type001\\dvbMainData.db"; private readonly ChannelList atvChannels = new ChannelList(SignalSource.AnalogCT, "Analog"); private readonly ChannelList dtvTvChannels = new ChannelList(SignalSource.DvbCT | SignalSource.Tv, "DTV"); @@ -30,6 +26,7 @@ namespace ChanSort.Loader.Toshiba DepencencyChecker.AssertVc2010RedistPackageX86Installed(); this.Features.ChannelNameEdit = ChannelNameEditMode.All; + this.Features.DeleteMode = DeleteMode.Physically; this.DataRoot.AddChannelList(this.atvChannels); this.DataRoot.AddChannelList(this.dtvTvChannels); @@ -39,15 +36,10 @@ namespace ChanSort.Loader.Toshiba } #endregion - #region DisplayName - public override string DisplayName { get { return "Toshiba *.db Loader"; } } - #endregion - - #region Load() public override void Load() { - this.UnzipDataFile(); + this.tempDir = this.UnzipFileToTempFolder() + "\\"; string sysDataConnString = "Data Source=" + tempDir + FILE_dvbSysData_db; using (var conn = new SQLiteConnection(sysDataConnString)) @@ -84,54 +76,7 @@ namespace ChanSort.Loader.Toshiba } } #endregion - - #region UnzipDataFile() - private void UnzipDataFile() - { - this.tempDir = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()) + "\\"; - Directory.CreateDirectory(tempDir); - Application.ApplicationExit += this.CleanTempFolder; - - using (ZipFile zip = new ZipFile(this.FileName)) - { - this.Expand(zip, "chmgt_type001/" + FILE_chmgt_db); - this.Expand(zip, "dvb_type001/" + FILE_dvbSysData_db); - this.Expand(zip, "dvb_type001/" + FILE_dvbMainData_db); - } - } - #endregion - - #region CleanTempFolder() - private void CleanTempFolder(object sender, EventArgs e) - { - try - { - foreach(var file in Directory.GetFiles(this.tempDir)) - File.Delete(file); - Directory.Delete(this.tempDir); - } - catch { } - } - #endregion - - #region Expand() - private void Expand(ZipFile zip, string path) - { - var entry = zip.GetEntry(path); - if (entry == null) - throw new FileLoadException("File not found inside .zip: " + path); - - byte[] buffer = new byte[65536]; - using (var input = zip.GetInputStream(entry)) - using (var output = new FileStream(this.tempDir + Path.GetFileName(path), FileMode.Create)) - { - int len; - while ((len = input.Read(buffer, 0, buffer.Length)) != 0) - output.Write(buffer, 0, len); - } - } - #endregion - + #region RepairCorruptedDatabaseImage() private void RepairCorruptedDatabaseImage(SQLiteCommand cmd) { @@ -291,37 +236,32 @@ namespace ChanSort.Loader.Toshiba #region Save() public override void Save(string tvOutputFile) { - if (tvOutputFile != this.FileName) - { - File.Copy(this.FileName, tvOutputFile); - this.FileName = tvOutputFile; - } - string channelConnString = "Data Source=" + this.tempDir + FILE_chmgt_db; using (var conn = new SQLiteConnection(channelConnString)) { conn.Open(); using (var cmd = conn.CreateCommand()) + using (var cmd2 = conn.CreateCommand()) { using (var trans = conn.BeginTransaction()) { - this.WriteChannels(cmd, "EuroATVChanList", this.atvChannels, true); - this.WriteChannels(cmd, "EuroDTVChanList", this.dtvTvChannels); - this.WriteChannels(cmd, "EuroDTVChanList", this.dtvRadioChannels); - this.WriteChannels(cmd, "EuroSATChanList", this.satTvChannels); - this.WriteChannels(cmd, "EuroSATChanList", this.satRadioChannels); + this.WriteChannels(cmd, cmd2, "EuroATVChanList", this.atvChannels, true); + this.WriteChannels(cmd, cmd2, "EuroDTVChanList", this.dtvTvChannels); + this.WriteChannels(cmd, cmd2, "EuroDTVChanList", this.dtvRadioChannels); + this.WriteChannels(cmd, cmd2, "EuroSATChanList", this.satTvChannels); + this.WriteChannels(cmd, cmd2, "EuroSATChanList", this.satRadioChannels); trans.Commit(); } this.RepairCorruptedDatabaseImage(cmd); } } - this.ZipFiles(); + this.ZipToOutputFile(tvOutputFile); } #endregion #region WriteChannels() - private void WriteChannels(SQLiteCommand cmd, string table, ChannelList channelList, bool analog=false) + private void WriteChannels(SQLiteCommand cmd, SQLiteCommand cmdDelete, string table, ChannelList channelList, bool analog=false) { string sql = "update " + table + " set channel_number=@nr "; if (!analog) @@ -332,30 +272,29 @@ namespace ChanSort.Loader.Toshiba cmd.Parameters.Add(new SQLiteParameter("@nr", DbType.Int32)); cmd.Parameters.Add(new SQLiteParameter("@Bits", DbType.Int32)); cmd.Prepare(); + + cmdDelete.CommandText = "delete from " + table + " where channel_handle=@id"; + cmdDelete.Parameters.Add(new SQLiteParameter("@id", DbType.Int32)); + foreach (ChannelInfo channelInfo in channelList.Channels) { var channel = channelInfo as DbChannel; if (channel == null) // ignore reference list proxy channels continue; - channel.UpdateRawData(); - cmd.Parameters["@id"].Value = channel.RecordIndex; - cmd.Parameters["@nr"].Value = channel.NewProgramNr; - cmd.Parameters["@Bits"].Value = channel.Bits; - cmd.ExecuteNonQuery(); - } - } - #endregion - #region ZipFiles() - private void ZipFiles() - { - const string entryName = "chmgt_type001/" + FILE_chmgt_db; - using (var zip = new ZipFile(this.FileName)) - { - zip.BeginUpdate(); - zip.Delete(entryName); - zip.Add(this.tempDir + "chmgt.db", entryName); - zip.CommitUpdate(); + if (channel.IsDeleted) + { + cmdDelete.Parameters["@id"].Value = channel.RecordIndex; + cmdDelete.ExecuteNonQuery(); + } + else + { + channel.UpdateRawData(); + cmd.Parameters["@id"].Value = channel.RecordIndex; + cmd.Parameters["@nr"].Value = channel.NewProgramNr; + cmd.Parameters["@Bits"].Value = channel.Bits; + cmd.ExecuteNonQuery(); + } } } #endregion diff --git a/source/ChanSort.Loader.VDR/ChanSort.Loader.VDR.csproj b/source/ChanSort.Loader.VDR/ChanSort.Loader.VDR.csproj index cd85362..5d5bf4d 100644 --- a/source/ChanSort.Loader.VDR/ChanSort.Loader.VDR.csproj +++ b/source/ChanSort.Loader.VDR/ChanSort.Loader.VDR.csproj @@ -1,5 +1,5 @@  - + Debug AnyCPU @@ -10,7 +10,7 @@ Properties ChanSort.Loader.VDR ChanSort.Loader.VDR - v4.0 + v4.6 512 @@ -23,6 +23,7 @@ DEBUG;TRACE prompt 4 + false pdbonly @@ -31,6 +32,7 @@ TRACE prompt 4 + false true @@ -40,14 +42,16 @@ x86 prompt false + false - bin\x86\Release\ + ..\Release\ TRACE true pdbonly x86 prompt + false diff --git a/source/ChanSort.Loader.VDR/Serializer.cs b/source/ChanSort.Loader.VDR/Serializer.cs index 17e0093..e0d9426 100644 --- a/source/ChanSort.Loader.VDR/Serializer.cs +++ b/source/ChanSort.Loader.VDR/Serializer.cs @@ -14,15 +14,14 @@ namespace ChanSort.Loader.VDR DepencencyChecker.AssertVc2010RedistPackageX86Installed(); this.Features.ChannelNameEdit = ChannelNameEditMode.None; - this.DataRoot.SortedFavorites = false; - //this.DataRoot.SupportedFavorites = new Favorites(); + this.Features.DeleteMode = DeleteMode.Physically; + this.Features.SortedFavorites = false; + //this.Features.SupportedFavorites = new Favorites(); this.DataRoot.AddChannelList(this.allChannels); } #endregion - public override string DisplayName { get { return "VDR channels .conf Loader"; } } - #region Load() public override void Load() { @@ -62,7 +61,7 @@ namespace ChanSort.Loader.VDR foreach (ChannelInfo channel in this.allChannels.GetChannelsByNewOrder()) { // when a reference list was applied, the list may contain proxy entries for deleted channels, which must be ignored - if (channel is Channels vdrChannel) + if (channel is Channels vdrChannel && !channel.IsDeleted) file.WriteLine(vdrChannel.confLine); } } diff --git a/source/ChanSort.sln b/source/ChanSort.sln index 68b89bd..046f91e 100644 --- a/source/ChanSort.sln +++ b/source/ChanSort.sln @@ -286,8 +286,8 @@ Global {D7BAFD55-50F5-46C3-A76B-2193BED5358F}.Release|Any CPU.Build.0 = Release|Any CPU {D7BAFD55-50F5-46C3-A76B-2193BED5358F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {D7BAFD55-50F5-46C3-A76B-2193BED5358F}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {D7BAFD55-50F5-46C3-A76B-2193BED5358F}.Release|x86.ActiveCfg = Release|Any CPU - {D7BAFD55-50F5-46C3-A76B-2193BED5358F}.Release|x86.Build.0 = Release|Any CPU + {D7BAFD55-50F5-46C3-A76B-2193BED5358F}.Release|x86.ActiveCfg = Release|x86 + {D7BAFD55-50F5-46C3-A76B-2193BED5358F}.Release|x86.Build.0 = Release|x86 {AA31A65D-9437-42AE-89C8-98C7392B450D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AA31A65D-9437-42AE-89C8-98C7392B450D}.Debug|Any CPU.Build.0 = Debug|Any CPU {AA31A65D-9437-42AE-89C8-98C7392B450D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -298,8 +298,8 @@ Global {AA31A65D-9437-42AE-89C8-98C7392B450D}.Release|Any CPU.Build.0 = Release|Any CPU {AA31A65D-9437-42AE-89C8-98C7392B450D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {AA31A65D-9437-42AE-89C8-98C7392B450D}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {AA31A65D-9437-42AE-89C8-98C7392B450D}.Release|x86.ActiveCfg = Release|Any CPU - {AA31A65D-9437-42AE-89C8-98C7392B450D}.Release|x86.Build.0 = Release|Any CPU + {AA31A65D-9437-42AE-89C8-98C7392B450D}.Release|x86.ActiveCfg = Release|x86 + {AA31A65D-9437-42AE-89C8-98C7392B450D}.Release|x86.Build.0 = Release|x86 {D1E4454F-DB09-402D-AD87-1E3BD17266A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D1E4454F-DB09-402D-AD87-1E3BD17266A9}.Debug|Any CPU.Build.0 = Debug|Any CPU {D1E4454F-DB09-402D-AD87-1E3BD17266A9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -310,8 +310,8 @@ Global {D1E4454F-DB09-402D-AD87-1E3BD17266A9}.Release|Any CPU.Build.0 = Release|Any CPU {D1E4454F-DB09-402D-AD87-1E3BD17266A9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {D1E4454F-DB09-402D-AD87-1E3BD17266A9}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {D1E4454F-DB09-402D-AD87-1E3BD17266A9}.Release|x86.ActiveCfg = Release|Any CPU - {D1E4454F-DB09-402D-AD87-1E3BD17266A9}.Release|x86.Build.0 = Release|Any CPU + {D1E4454F-DB09-402D-AD87-1E3BD17266A9}.Release|x86.ActiveCfg = Release|x86 + {D1E4454F-DB09-402D-AD87-1E3BD17266A9}.Release|x86.Build.0 = Release|x86 {2717DB4C-7E94-4277-A880-FC2571096E74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2717DB4C-7E94-4277-A880-FC2571096E74}.Debug|Any CPU.Build.0 = Debug|Any CPU {2717DB4C-7E94-4277-A880-FC2571096E74}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -322,8 +322,8 @@ Global {2717DB4C-7E94-4277-A880-FC2571096E74}.Release|Any CPU.Build.0 = Release|Any CPU {2717DB4C-7E94-4277-A880-FC2571096E74}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {2717DB4C-7E94-4277-A880-FC2571096E74}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {2717DB4C-7E94-4277-A880-FC2571096E74}.Release|x86.ActiveCfg = Release|Any CPU - {2717DB4C-7E94-4277-A880-FC2571096E74}.Release|x86.Build.0 = Release|Any CPU + {2717DB4C-7E94-4277-A880-FC2571096E74}.Release|x86.ActiveCfg = Release|x86 + {2717DB4C-7E94-4277-A880-FC2571096E74}.Release|x86.Build.0 = Release|x86 {8D592EB4-3BE2-4D99-8923-FA0794C729ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8D592EB4-3BE2-4D99-8923-FA0794C729ED}.Debug|Any CPU.Build.0 = Debug|Any CPU {8D592EB4-3BE2-4D99-8923-FA0794C729ED}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -334,8 +334,8 @@ Global {8D592EB4-3BE2-4D99-8923-FA0794C729ED}.Release|Any CPU.Build.0 = Release|Any CPU {8D592EB4-3BE2-4D99-8923-FA0794C729ED}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {8D592EB4-3BE2-4D99-8923-FA0794C729ED}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {8D592EB4-3BE2-4D99-8923-FA0794C729ED}.Release|x86.ActiveCfg = Release|Any CPU - {8D592EB4-3BE2-4D99-8923-FA0794C729ED}.Release|x86.Build.0 = Release|Any CPU + {8D592EB4-3BE2-4D99-8923-FA0794C729ED}.Release|x86.ActiveCfg = Release|x86 + {8D592EB4-3BE2-4D99-8923-FA0794C729ED}.Release|x86.Build.0 = Release|x86 {0A162099-DA92-426A-AB70-36F88F9E5DC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0A162099-DA92-426A-AB70-36F88F9E5DC1}.Debug|Any CPU.Build.0 = Debug|Any CPU {0A162099-DA92-426A-AB70-36F88F9E5DC1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -346,8 +346,8 @@ Global {0A162099-DA92-426A-AB70-36F88F9E5DC1}.Release|Any CPU.Build.0 = Release|Any CPU {0A162099-DA92-426A-AB70-36F88F9E5DC1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {0A162099-DA92-426A-AB70-36F88F9E5DC1}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {0A162099-DA92-426A-AB70-36F88F9E5DC1}.Release|x86.ActiveCfg = Release|Any CPU - {0A162099-DA92-426A-AB70-36F88F9E5DC1}.Release|x86.Build.0 = Release|Any CPU + {0A162099-DA92-426A-AB70-36F88F9E5DC1}.Release|x86.ActiveCfg = Release|x86 + {0A162099-DA92-426A-AB70-36F88F9E5DC1}.Release|x86.Build.0 = Release|x86 {902EA731-EBB2-4B18-BE87-256C05277B3E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {902EA731-EBB2-4B18-BE87-256C05277B3E}.Debug|Any CPU.Build.0 = Debug|Any CPU {902EA731-EBB2-4B18-BE87-256C05277B3E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -358,8 +358,8 @@ Global {902EA731-EBB2-4B18-BE87-256C05277B3E}.Release|Any CPU.Build.0 = Release|Any CPU {902EA731-EBB2-4B18-BE87-256C05277B3E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {902EA731-EBB2-4B18-BE87-256C05277B3E}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {902EA731-EBB2-4B18-BE87-256C05277B3E}.Release|x86.ActiveCfg = Release|Any CPU - {902EA731-EBB2-4B18-BE87-256C05277B3E}.Release|x86.Build.0 = Release|Any CPU + {902EA731-EBB2-4B18-BE87-256C05277B3E}.Release|x86.ActiveCfg = Release|x86 + {902EA731-EBB2-4B18-BE87-256C05277B3E}.Release|x86.Build.0 = Release|x86 {C0528858-F32D-4C0C-8EC8-CEDB53C01402}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C0528858-F32D-4C0C-8EC8-CEDB53C01402}.Debug|Any CPU.Build.0 = Debug|Any CPU {C0528858-F32D-4C0C-8EC8-CEDB53C01402}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -370,8 +370,8 @@ Global {C0528858-F32D-4C0C-8EC8-CEDB53C01402}.Release|Any CPU.Build.0 = Release|Any CPU {C0528858-F32D-4C0C-8EC8-CEDB53C01402}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {C0528858-F32D-4C0C-8EC8-CEDB53C01402}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {C0528858-F32D-4C0C-8EC8-CEDB53C01402}.Release|x86.ActiveCfg = Release|Any CPU - {C0528858-F32D-4C0C-8EC8-CEDB53C01402}.Release|x86.Build.0 = Release|Any CPU + {C0528858-F32D-4C0C-8EC8-CEDB53C01402}.Release|x86.ActiveCfg = Release|x86 + {C0528858-F32D-4C0C-8EC8-CEDB53C01402}.Release|x86.Build.0 = Release|x86 {F732435A-0188-456C-8F06-7FBA1842FB35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F732435A-0188-456C-8F06-7FBA1842FB35}.Debug|Any CPU.Build.0 = Debug|Any CPU {F732435A-0188-456C-8F06-7FBA1842FB35}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -382,8 +382,8 @@ Global {F732435A-0188-456C-8F06-7FBA1842FB35}.Release|Any CPU.Build.0 = Release|Any CPU {F732435A-0188-456C-8F06-7FBA1842FB35}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {F732435A-0188-456C-8F06-7FBA1842FB35}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {F732435A-0188-456C-8F06-7FBA1842FB35}.Release|x86.ActiveCfg = Release|Any CPU - {F732435A-0188-456C-8F06-7FBA1842FB35}.Release|x86.Build.0 = Release|Any CPU + {F732435A-0188-456C-8F06-7FBA1842FB35}.Release|x86.ActiveCfg = Release|x86 + {F732435A-0188-456C-8F06-7FBA1842FB35}.Release|x86.Build.0 = Release|x86 {D7B71F40-C941-4364-A25F-8D41B384507A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D7B71F40-C941-4364-A25F-8D41B384507A}.Debug|Any CPU.Build.0 = Debug|Any CPU {D7B71F40-C941-4364-A25F-8D41B384507A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -394,8 +394,8 @@ Global {D7B71F40-C941-4364-A25F-8D41B384507A}.Release|Any CPU.Build.0 = Release|Any CPU {D7B71F40-C941-4364-A25F-8D41B384507A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {D7B71F40-C941-4364-A25F-8D41B384507A}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {D7B71F40-C941-4364-A25F-8D41B384507A}.Release|x86.ActiveCfg = Release|Any CPU - {D7B71F40-C941-4364-A25F-8D41B384507A}.Release|x86.Build.0 = Release|Any CPU + {D7B71F40-C941-4364-A25F-8D41B384507A}.Release|x86.ActiveCfg = Release|x86 + {D7B71F40-C941-4364-A25F-8D41B384507A}.Release|x86.Build.0 = Release|x86 {AED060F0-495C-494C-89C2-7A96A0FA3762}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AED060F0-495C-494C-89C2-7A96A0FA3762}.Debug|Any CPU.Build.0 = Debug|Any CPU {AED060F0-495C-494C-89C2-7A96A0FA3762}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -406,8 +406,8 @@ Global {AED060F0-495C-494C-89C2-7A96A0FA3762}.Release|Any CPU.Build.0 = Release|Any CPU {AED060F0-495C-494C-89C2-7A96A0FA3762}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {AED060F0-495C-494C-89C2-7A96A0FA3762}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {AED060F0-495C-494C-89C2-7A96A0FA3762}.Release|x86.ActiveCfg = Release|Any CPU - {AED060F0-495C-494C-89C2-7A96A0FA3762}.Release|x86.Build.0 = Release|Any CPU + {AED060F0-495C-494C-89C2-7A96A0FA3762}.Release|x86.ActiveCfg = Release|x86 + {AED060F0-495C-494C-89C2-7A96A0FA3762}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/source/ChanSort/AboutForm.resx b/source/ChanSort/AboutForm.resx index 9144e9a..977c285 100644 --- a/source/ChanSort/AboutForm.resx +++ b/source/ChanSort/AboutForm.resx @@ -117,8 +117,8 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + Vertical @@ -139,7 +139,7 @@ lblWebsite - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -170,7 +170,7 @@ lnkDownload - DevExpress.XtraEditors.HyperLinkEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.HyperLinkEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -194,7 +194,7 @@ gcPlugins - DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a horst@beham.biz @@ -215,7 +215,7 @@ lnkEmail - DevExpress.XtraEditors.HyperLinkEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.HyperLinkEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -223,7 +223,7 @@ 7 - + Vertical @@ -242,7 +242,7 @@ lblAuthor - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -250,7 +250,7 @@ 6 - + Vertical @@ -269,7 +269,7 @@ lblLicense - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -299,7 +299,7 @@ lnkLicense - DevExpress.XtraEditors.HyperLinkEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.HyperLinkEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -307,7 +307,7 @@ 4 - + Vertical @@ -326,7 +326,7 @@ lblCredits - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -350,7 +350,7 @@ txtCredits - DevExpress.XtraEditors.MemoEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.MemoEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -377,7 +377,7 @@ btnClose - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -401,7 +401,7 @@ txtAuthor - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -428,30 +428,30 @@ gvPlugins - DevExpress.XtraGrid.Views.Grid.GridView, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Views.Grid.GridView, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colPlugin - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colDisplayText - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colFileTypes - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a AboutForm - DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a \ No newline at end of file diff --git a/source/ChanSort/ActionBox.resx b/source/ChanSort/ActionBox.resx index 9f2fbde..85d1f5d 100644 --- a/source/ChanSort/ActionBox.resx +++ b/source/ChanSort/ActionBox.resx @@ -125,8 +125,8 @@ Tahoma, 9pt - - + + Vertical @@ -146,7 +146,7 @@ lblMessage - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -160,8 +160,8 @@ 32, 32 - - + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLlV0aWxzLnYxMi4yLCBWZXJzaW9uPTEyLjIu OC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEMAwAAAFFT @@ -459,12 +459,12 @@ imageCollection1 - DevExpress.Utils.ImageCollection, DevExpress.Utils.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.Utils.ImageCollection, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a ActionBoxDialog - DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a \ No newline at end of file diff --git a/source/ChanSort/ActionImages.resx b/source/ChanSort/ActionImages.resx index 2a4499b..30093c9 100644 --- a/source/ChanSort/ActionImages.resx +++ b/source/ChanSort/ActionImages.resx @@ -120,8 +120,8 @@ 349, 503 - - + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLlV0aWxzLnYxNS4yLCBWZXJzaW9uPTE1LjIu NS4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAChE diff --git a/source/ChanSort/ChanSort.csproj b/source/ChanSort/ChanSort.csproj index d1440b0..91b0544 100644 --- a/source/ChanSort/ChanSort.csproj +++ b/source/ChanSort/ChanSort.csproj @@ -10,7 +10,7 @@ Properties ChanSort.Ui ChanSort - v4.5.2 + v4.6 512 @@ -30,7 +30,7 @@ x86 pdbonly true - bin\Release\ + ..\Release\ TRACE prompt 4 @@ -62,44 +62,44 @@ app.ico - + False - - + + False - + False - + False - - + + False - - + + False - + False - + False - + False - - - - - - - - + + + + + + + + diff --git a/source/ChanSort/CharsetForm.resx b/source/ChanSort/CharsetForm.resx index 1d9782e..589a418 100644 --- a/source/ChanSort/CharsetForm.resx +++ b/source/ChanSort/CharsetForm.resx @@ -138,13 +138,13 @@ btnCancel - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a 433, 446 - DevExpress.XtraGrid.Views.Grid.GridView, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Views.Grid.GridView, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a CharsetForm @@ -178,12 +178,12 @@ 0 - - + + Center - - + + None @@ -196,7 +196,7 @@ Top, Right - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a Fill @@ -211,10 +211,10 @@ $this - DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colName @@ -256,7 +256,7 @@ gcCharset - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a Default character set for my country @@ -271,7 +271,7 @@ 353, 6 - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a 75, 23 @@ -331,7 +331,7 @@ btnOk - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a 433, 483 @@ -340,17 +340,17 @@ 142 - DevExpress.XtraEditors.PanelControl, DevExpress.Utils.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.PanelControl, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a True - - + + Default - DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a True diff --git a/source/ChanSort/GlobalImageCollection.resx b/source/ChanSort/GlobalImageCollection.resx index 8e34927..26e0812 100644 --- a/source/ChanSort/GlobalImageCollection.resx +++ b/source/ChanSort/GlobalImageCollection.resx @@ -120,8 +120,8 @@ 17, 17 - - + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLlV0aWxzLnYxOS4xLCBWZXJzaW9uPTE5LjEu NS4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEMAwAAAFFT diff --git a/source/ChanSort/MainForm.Designer.cs b/source/ChanSort/MainForm.Designer.cs index 5abfd86..75f4bac 100644 --- a/source/ChanSort/MainForm.Designer.cs +++ b/source/ChanSort/MainForm.Designer.cs @@ -128,10 +128,6 @@ this.miAddChannel = new DevExpress.XtraBars.BarButtonItem(); this.miRemove = new DevExpress.XtraBars.BarButtonItem(); this.miRenameChannel = new DevExpress.XtraBars.BarButtonItem(); - this.miSort = new DevExpress.XtraBars.BarButtonItem(); - this.miRenum = new DevExpress.XtraBars.BarButtonItem(); - this.miRenumFavByPrNr = new DevExpress.XtraBars.BarButtonItem(); - this.miCopyCsv = new DevExpress.XtraBars.BarButtonItem(); this.mnuFavSet = new DevExpress.XtraBars.BarSubItem(); this.mnuFavUnset = new DevExpress.XtraBars.BarSubItem(); this.miLockOn = new DevExpress.XtraBars.BarButtonItem(); @@ -140,6 +136,10 @@ this.miSkipOff = new DevExpress.XtraBars.BarButtonItem(); this.miHideOn = new DevExpress.XtraBars.BarButtonItem(); this.miHideOff = new DevExpress.XtraBars.BarButtonItem(); + this.miRenum = new DevExpress.XtraBars.BarButtonItem(); + this.miSort = new DevExpress.XtraBars.BarButtonItem(); + this.miRenumFavByPrNr = new DevExpress.XtraBars.BarButtonItem(); + this.miCopyCsv = new DevExpress.XtraBars.BarButtonItem(); this.barSubItem2 = new DevExpress.XtraBars.BarSubItem(); this.miTvSettings = new DevExpress.XtraBars.BarButtonItem(); this.miCleanupChannels = new DevExpress.XtraBars.BarButtonItem(); @@ -1295,41 +1295,6 @@ this.miRenameChannel.Name = "miRenameChannel"; this.miRenameChannel.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miRenameChannel_ItemClick); // - // miSort - // - resources.ApplyResources(this.miSort, "miSort"); - this.miSort.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); - this.miSort.Id = 40; - this.miSort.ImageOptions.ImageIndex = ((int)(resources.GetObject("miSort.ImageOptions.ImageIndex"))); - this.miSort.Name = "miSort"; - this.miSort.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miSort_ItemClick); - // - // miRenum - // - resources.ApplyResources(this.miRenum, "miRenum"); - this.miRenum.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); - this.miRenum.Id = 41; - this.miRenum.ImageOptions.ImageIndex = ((int)(resources.GetObject("miRenum.ImageOptions.ImageIndex"))); - this.miRenum.Name = "miRenum"; - this.miRenum.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miRenum_ItemClick); - // - // miRenumFavByPrNr - // - resources.ApplyResources(this.miRenumFavByPrNr, "miRenumFavByPrNr"); - this.miRenumFavByPrNr.Id = 63; - this.miRenumFavByPrNr.Name = "miRenumFavByPrNr"; - this.miRenumFavByPrNr.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miRenumFavByPrNr_ItemClick); - // - // miCopyCsv - // - resources.ApplyResources(this.miCopyCsv, "miCopyCsv"); - this.miCopyCsv.Id = 100; - this.miCopyCsv.ImageOptions.ImageIndex = ((int)(resources.GetObject("miCopyCsv.ImageOptions.ImageIndex"))); - this.miCopyCsv.ItemShortcut = new DevExpress.XtraBars.BarShortcut(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) - | System.Windows.Forms.Keys.C)); - this.miCopyCsv.Name = "miCopyCsv"; - this.miCopyCsv.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miCopyCsv_ItemClick); - // // mnuFavSet // resources.ApplyResources(this.mnuFavSet, "mnuFavSet"); @@ -1406,6 +1371,41 @@ this.miHideOff.Name = "miHideOff"; this.miHideOff.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miHideOff_ItemClick); // + // miRenum + // + resources.ApplyResources(this.miRenum, "miRenum"); + this.miRenum.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); + this.miRenum.Id = 41; + this.miRenum.ImageOptions.ImageIndex = ((int)(resources.GetObject("miRenum.ImageOptions.ImageIndex"))); + this.miRenum.Name = "miRenum"; + this.miRenum.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miRenum_ItemClick); + // + // miSort + // + resources.ApplyResources(this.miSort, "miSort"); + this.miSort.CategoryGuid = new System.Guid("d7eec464-59c9-4f45-88aa-602e64c81cc0"); + this.miSort.Id = 40; + this.miSort.ImageOptions.ImageIndex = ((int)(resources.GetObject("miSort.ImageOptions.ImageIndex"))); + this.miSort.Name = "miSort"; + this.miSort.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miSort_ItemClick); + // + // miRenumFavByPrNr + // + resources.ApplyResources(this.miRenumFavByPrNr, "miRenumFavByPrNr"); + this.miRenumFavByPrNr.Id = 63; + this.miRenumFavByPrNr.Name = "miRenumFavByPrNr"; + this.miRenumFavByPrNr.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miRenumFavByPrNr_ItemClick); + // + // miCopyCsv + // + resources.ApplyResources(this.miCopyCsv, "miCopyCsv"); + this.miCopyCsv.Id = 100; + this.miCopyCsv.ImageOptions.ImageIndex = ((int)(resources.GetObject("miCopyCsv.ImageOptions.ImageIndex"))); + this.miCopyCsv.ItemShortcut = new DevExpress.XtraBars.BarShortcut(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift) + | System.Windows.Forms.Keys.C)); + this.miCopyCsv.Name = "miCopyCsv"; + this.miCopyCsv.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.miCopyCsv_ItemClick); + // // barSubItem2 // resources.ApplyResources(this.barSubItem2, "barSubItem2"); diff --git a/source/ChanSort/MainForm.cs b/source/ChanSort/MainForm.cs index d234a0e..16f4d13 100644 --- a/source/ChanSort/MainForm.cs +++ b/source/ChanSort/MainForm.cs @@ -551,7 +551,7 @@ namespace ChanSort.Ui if (!this.PromptSaveAndContinue()) return false; - serializer.DataRoot.SetPrNrForDeletedChannels(); + serializer.DataRoot.ValidateAfterLoad(); this.SetFileName(tvDataFile); this.currentPlugin = plugin; this.currentTvSerializer = serializer; @@ -765,10 +765,10 @@ namespace ChanSort.Ui try { - if (!this.PromptHandlingOfUnsortedChannels()) - return; if (!this.HandleChannelNumberGaps()) return; + if (!this.PromptHandlingOfUnsortedChannels()) + return; this.SaveTvDataFile(); this.DataRoot.NeedsSaving = false; this.RefreshGrid(this.gviewLeft, this.gviewRight); @@ -795,7 +795,7 @@ namespace ChanSort.Ui { foreach (var channel in list.Channels) { - if (channel.NewProgramNr < 0 && (!channel.IsDeleted || DataRoot.DeletedChannelsNeedNumbers)) + if (channel.NewProgramNr < 0 && (!channel.IsDeleted /* || DataRoot.DeletedChannelsNeedNumbers */)) { hasUnsorted = true; break; @@ -803,7 +803,7 @@ namespace ChanSort.Ui } } - UnsortedChannelMode mode = UnsortedChannelMode.MarkDeleted; + UnsortedChannelMode mode = UnsortedChannelMode.Delete; if (hasUnsorted) { @@ -812,7 +812,7 @@ namespace ChanSort.Ui using (var dlg = new ActionBoxDialog(msg)) { dlg.AddAction(Resources.MainForm_PromptHandlingOfUnsortedChannels_Append, DialogResult.Yes, dlg.FullList); - if (this.currentTvSerializer.Features.CanDeleteChannels) + if (this.currentTvSerializer.Features.CanDeleteChannelsWithFlag || this.currentTvSerializer.Features.CanDeleteChannelsFromFile) dlg.AddAction(Resources.MainForm_PromptHandlingOfUnsortedChannels_Delete, DialogResult.No, dlg.Delete); dlg.AddAction(Resources.MainForm_Cancel, DialogResult.Cancel, dlg.Cancel); res = dlg.ShowDialog(this); @@ -928,19 +928,7 @@ namespace ChanSort.Ui File.Copy(currentTvFile, bakFile); } this.currentTvSerializer.Save(this.currentTvFile); - - // after saving old numbers match the new numbers - foreach (var list in this.DataRoot.ChannelLists) - { - foreach (var chan in list.Channels) - { - if (chan.IsDeleted && !this.DataRoot.DeletedChannelsNeedNumbers) // during the saving process, deleted channels temporarily got a NewProgramNr assigned - chan.NewProgramNr = -1; - chan.OldProgramNr = chan.NewProgramNr; - chan.OldFavIndex.Clear(); - chan.OldFavIndex.AddRange(chan.FavIndex); - } - } + this.DataRoot.ValidateAfterSave(); } finally { @@ -1692,6 +1680,8 @@ namespace ChanSort.Ui try { File.Copy(bakFile, this.currentTvFile, true); + var attr = File.GetAttributes(this.currentTvFile); + File.SetAttributes(this.currentTvFile, attr & ~FileAttributes.ReadOnly); this.currentTvSerializer.DataRoot.NeedsSaving = false; if (this.currentPlugin != null) this.LoadFiles(this.currentPlugin, this.currentTvFile); @@ -2675,8 +2665,7 @@ namespace ChanSort.Ui { this.gviewRight.BeginSort(); this.gviewRight.ClearColumnsFilter(); - if (this.DataRoot != null && !this.DataRoot.ShowDeletedChannels) - this.colSlotOld.FilterInfo = new ColumnFilterInfo("[OldProgramNr]<>-1"); + this.colSlotOld.FilterInfo = new ColumnFilterInfo("[OldProgramNr]<>-1"); if (this.subListIndex > 0 && !this.CurrentChannelList.IsMixedSourceFavoritesList) this.colPrNr.FilterInfo = new ColumnFilterInfo("[NewProgramNr]<>-1"); this.gviewRight.EndSort(); diff --git a/source/ChanSort/MainForm.de.resx b/source/ChanSort/MainForm.de.resx index 3e40b13..4d358a6 100644 --- a/source/ChanSort/MainForm.de.resx +++ b/source/ChanSort/MainForm.de.resx @@ -556,8 +556,8 @@ speziellen Anbieter, Satelliten oder Länderlisten aus. 333, 17 - - + + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxNS4yLCBWZXJzaW9uPTE1 LjIuNS4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA @@ -567,7 +567,7 @@ speziellen Anbieter, Satelliten oder Länderlisten aus. Xxl+0wEL - + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxNS4yLCBWZXJzaW9uPTE1 LjIuNS4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA @@ -577,7 +577,7 @@ speziellen Anbieter, Satelliten oder Länderlisten aus. KphCYAEL - + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxNS4yLCBWZXJzaW9uPTE1 LjIuNS4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA @@ -587,7 +587,7 @@ speziellen Anbieter, Satelliten oder Länderlisten aus. ZMgcwAEL - + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxNS4yLCBWZXJzaW9uPTE1 LjIuNS4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA @@ -597,7 +597,7 @@ speziellen Anbieter, Satelliten oder Länderlisten aus. WIeWYGkVXQEL - + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxNS4yLCBWZXJzaW9uPTE1 LjIuNS4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA diff --git a/source/ChanSort/MainForm.pt.resx b/source/ChanSort/MainForm.pt.resx index bd38cdc..54b1487 100644 --- a/source/ChanSort/MainForm.pt.resx +++ b/source/ChanSort/MainForm.pt.resx @@ -62,9 +62,9 @@ - - - + + + Novo Pos @@ -329,8 +329,8 @@ Tipo serviço - - + + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxMi4yLCBWZXJzaW9uPTEy LjIuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA @@ -340,7 +340,7 @@ Xxl+0wEL - + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxMi4yLCBWZXJzaW9uPTEy LjIuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA @@ -350,7 +350,7 @@ KphCYAEL - + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxMi4yLCBWZXJzaW9uPTEy LjIuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA @@ -360,7 +360,7 @@ ZMgcwAEL - + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxMi4yLCBWZXJzaW9uPTEy LjIuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA diff --git a/source/ChanSort/MainForm.resx b/source/ChanSort/MainForm.resx index 81be359..35469bf 100644 --- a/source/ChanSort/MainForm.resx +++ b/source/ChanSort/MainForm.resx @@ -189,15 +189,15 @@ False - - + + Combo - - + + RegEx @@ -260,7 +260,7 @@ False - + Numeric @@ -273,7 +273,7 @@ gridLeft - DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpOutputList @@ -303,7 +303,7 @@ lblHotkeyLeft - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpOutputList @@ -342,7 +342,7 @@ pageProgNr - DevExpress.XtraTab.XtraTabPage, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraTab.XtraTabPage, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a tabSubList @@ -360,7 +360,7 @@ tabSubList - DevExpress.XtraTab.XtraTabControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraTab.XtraTabControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpSubList @@ -390,7 +390,7 @@ grpSubList - DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -725,51 +725,51 @@ Tools - - + + - AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxOS4xLCBWZXJzaW9uPTE5 - LjEuNS4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxOS4yLCBWZXJzaW9uPTE5 + LjIuMy4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEZpbGUE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICKaPJ5gsBeU2NTSFe Xxl+0wEL - + - AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxOS4xLCBWZXJzaW9uPTE5 - LjEuNS4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxOS4yLCBWZXJzaW9uPTE5 + LjIuMy4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEhlbHAE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICdEVVDegwMU2acNpw KphCYAEL - + - AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxOS4xLCBWZXJzaW9uPTE5 - LjEuNS4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxOS4yLCBWZXJzaW9uPTE5 + LjIuMy4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEVkaXQE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICZMTu18lZRU+IqmAu ZMgcwAEL - + - AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxOS4xLCBWZXJzaW9uPTE5 - LjEuNS4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxOS4yLCBWZXJzaW9uPTE5 + LjIuMy4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAAB09wdGlvbnME/P///wtTeXN0ZW0uR3VpZAsAAAACX2EC X2ICX2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICXJMOh9nzAkKc WIeWYGkVXQEL - + - AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxOS4xLCBWZXJzaW9uPTE5 - LjEuNS4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxOS4yLCBWZXJzaW9uPTE5 + LjIuMy4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAADUFjY2Vzc2liaWxpdHkE/P///wtTeXN0ZW0uR3VpZAsA AAACX2ECX2ICX2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICeIvz @@ -789,7 +789,7 @@ barDockControlTop - DevExpress.XtraBars.BarDockControl, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarDockControl, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -810,7 +810,7 @@ barDockControlBottom - DevExpress.XtraBars.BarDockControl, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarDockControl, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -831,7 +831,7 @@ barDockControlLeft - DevExpress.XtraBars.BarDockControl, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarDockControl, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -852,7 +852,7 @@ barDockControlRight - DevExpress.XtraBars.BarDockControl, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarDockControl, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -875,8 +875,8 @@ swap - - + + Default @@ -889,7 +889,7 @@ rbInsertSwap - DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpTopPanel @@ -916,7 +916,7 @@ rbInsertAfter - DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpTopPanel @@ -940,7 +940,7 @@ rbInsertBefore - DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpTopPanel @@ -970,7 +970,7 @@ cbCloseGap - DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpTopPanel @@ -994,7 +994,7 @@ lblInsertMode - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpTopPanel @@ -1018,7 +1018,7 @@ picDonate - DevExpress.XtraEditors.PictureEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.PictureEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpTopPanel @@ -1042,7 +1042,7 @@ pageEmpty - DevExpress.XtraTab.XtraTabPage, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraTab.XtraTabPage, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a tabChannelList @@ -1060,7 +1060,7 @@ tabChannelList - DevExpress.XtraTab.XtraTabControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraTab.XtraTabControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpTopPanel @@ -1068,7 +1068,7 @@ 6 - + Vertical @@ -1090,7 +1090,7 @@ lblSetProgramNr - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpTopPanel @@ -1101,13 +1101,13 @@ 437, 5 - + OK \d{1,4} - + RegEx @@ -1120,7 +1120,7 @@ txtSetSlot - DevExpress.XtraEditors.ButtonEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.ButtonEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpTopPanel @@ -1144,7 +1144,7 @@ grpTopPanel - DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -1168,745 +1168,745 @@ gviewLeft - DevExpress.XtraGrid.Views.Grid.GridView, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Views.Grid.GridView, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colIndex1 - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colOutServiceType - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colOutSlot - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colOutName - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colOutFav - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a repositoryItemCheckedComboBoxEdit1 - DevExpress.XtraEditors.Repository.RepositoryItemCheckedComboBoxEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.Repository.RepositoryItemCheckedComboBoxEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colOutLock - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colOutSkip - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colOutHide - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colOutDeleted - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colUid1 - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a repositoryItemTextEdit1 - DevExpress.XtraEditors.Repository.RepositoryItemTextEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.Repository.RepositoryItemTextEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a globalImageCollection1 - ChanSort.Ui.GlobalImageCollection, ChanSort, Version=1.0.7164.24093, Culture=neutral, PublicKeyToken=null + ChanSort.Ui.GlobalImageCollection, ChanSort, Version=1.0.7248.39737, Culture=neutral, PublicKeyToken=null gviewRight - DevExpress.XtraGrid.Views.Grid.GridView, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Views.Grid.GridView, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colIndex - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colSlotOld - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colSlotNew - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colSource - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colPrNr - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colName - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colShortName - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colFavorites - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a repositoryItemCheckedComboBoxEdit2 - DevExpress.XtraEditors.Repository.RepositoryItemCheckedComboBoxEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.Repository.RepositoryItemCheckedComboBoxEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colLock - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colSkip - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colHidden - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colDeleted - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colEncrypted - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colServiceType - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colServiceTypeName - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colFreqInMhz - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colChannelOrTransponder - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colSatellite - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colNetworkId - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colTransportStreamId - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colServiceId - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colPcrPid - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colVideoPid - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colAudioPid - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colSymbolRate - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colPolarity - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colNetworkName - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colNetworkOperator - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colProvider - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colUid - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colLogicalIndex - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colSignalSource - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a colDebug - DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a barManager1 - DevExpress.XtraBars.BarManager, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarManager, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a bar1 - DevExpress.XtraBars.Bar, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.Bar, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miFile - DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miOpen - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miReload - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miRestoreOriginal - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miFileInformation - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miSave - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miSaveAs - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miOpenReferenceFile - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miAddFromRefList - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miSaveReferenceFile - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miExcelExport - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miPrint - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miQuit - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miRecentFiles - DevExpress.XtraBars.BarListItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarListItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miEdit - DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miAddChannel - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miRemove - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miRenameChannel - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - - - miSort - - - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - - - miRenum - - - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - - - miRenumFavByPrNr - - - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - - - miCopyCsv - - - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a mnuFavSet - DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a mnuFavUnset - DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miLockOn - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miLockOff - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miSkipOn - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miSkipOff - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miHideOn - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miHideOff - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miRenum + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miSort + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miRenumFavByPrNr + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + miCopyCsv + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a barSubItem2 - DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miTvSettings - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miCleanupChannels - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a mnuOptions - DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a barSubItem1 - DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miEnglish - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miGerman - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miPortuguese - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miRussian - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miCzech - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miRomanian - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a mnuCharset - DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miCharsetForm - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miUtf8Charset - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miIsoCharSets - DevExpress.XtraBars.BarListItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarListItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miShowWarningsAfterLoad - DevExpress.XtraBars.BarCheckItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarCheckItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miAllowEditPredefinedLists - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miExplorerIntegration - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miCheckUpdates - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a mnuAccessibility - DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a mnuGotoChannelList - DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a mnuInputSource - DevExpress.XtraBars.BarLinkContainerItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarLinkContainerItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a mnuGotoFavList - DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a mnuFavList - DevExpress.XtraBars.BarLinkContainerItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarLinkContainerItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miSelectFavList0 - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miSelectFavListA - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miSelectFavListB - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miSelectFavListC - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miSelectFavListD - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miSelectFavListE - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miGotoLeftFilter - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miGotoLeftList - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miRightListFilter - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miGotoRightList - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a mnuHelp - DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarSubItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miWiki - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miOpenWebsite - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miAbout - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miMoveUp - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a miMoveDown - DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a defaultLookAndFeel1 - DevExpress.LookAndFeel.DefaultLookAndFeel, DevExpress.Utils.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.LookAndFeel.DefaultLookAndFeel, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a splashScreenManager1 - DevExpress.XtraSplashScreen.SplashScreenManager, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraSplashScreen.SplashScreenManager, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a popupContext - DevExpress.XtraBars.PopupMenu, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.PopupMenu, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a timerEditDelay @@ -1918,22 +1918,22 @@ popupInputSource - DevExpress.XtraBars.PopupMenu, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.PopupMenu, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a popupFavList - DevExpress.XtraBars.PopupMenu, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraBars.PopupMenu, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a MainForm - DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - 08/13/2019 13:25:32 + 11/05/2019 22:23:13 16, 16 @@ -1954,7 +1954,7 @@ btnToggleFavH - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a pnlEditControls @@ -1981,7 +1981,7 @@ btnToggleFavG - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a pnlEditControls @@ -2008,7 +2008,7 @@ btnToggleFavF - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a pnlEditControls @@ -2038,7 +2038,7 @@ btnToggleLock - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a pnlEditControls @@ -2065,7 +2065,7 @@ btnToggleFavE - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a pnlEditControls @@ -2092,7 +2092,7 @@ btnToggleFavD - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a pnlEditControls @@ -2119,7 +2119,7 @@ btnToggleFavC - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a pnlEditControls @@ -2146,7 +2146,7 @@ btnToggleFavB - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a pnlEditControls @@ -2173,7 +2173,7 @@ btnToggleFavA - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a pnlEditControls @@ -2209,7 +2209,7 @@ btnClearLeftFilter - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a pnlEditControls @@ -2239,7 +2239,7 @@ btnRenum - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a pnlEditControls @@ -2269,7 +2269,7 @@ btnDown - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a pnlEditControls @@ -2299,7 +2299,7 @@ btnUp - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a pnlEditControls @@ -2329,7 +2329,7 @@ btnRemoveLeft - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a pnlEditControls @@ -2353,7 +2353,7 @@ pnlEditControls - DevExpress.XtraEditors.PanelControl, DevExpress.Utils.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.PanelControl, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpOutputList @@ -2380,7 +2380,7 @@ grpOutputList - DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a splitContainerControl1.Panel1 @@ -2475,13 +2475,13 @@ False - + Combo - + RegEx @@ -2752,7 +2752,7 @@ gridRight - DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpInputList @@ -2782,7 +2782,7 @@ lblHotkeyRight - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpInputList @@ -2818,7 +2818,7 @@ specific provider, satellite or country lists. lblPredefinedList - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a panelControl3 @@ -2848,7 +2848,7 @@ specific provider, satellite or country lists. btnRemoveRight - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a panelControl3 @@ -2878,7 +2878,7 @@ specific provider, satellite or country lists. btnAddAll - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a panelControl3 @@ -2914,7 +2914,7 @@ specific provider, satellite or country lists. btnClearRightFilter - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a panelControl3 @@ -2944,7 +2944,7 @@ specific provider, satellite or country lists. btnAdd - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a panelControl3 @@ -2968,7 +2968,7 @@ specific provider, satellite or country lists. panelControl3 - DevExpress.XtraEditors.PanelControl, DevExpress.Utils.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.PanelControl, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpInputList @@ -2995,7 +2995,7 @@ specific provider, satellite or country lists. grpInputList - DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a splitContainerControl1.Panel2 @@ -3019,7 +3019,7 @@ specific provider, satellite or country lists. splitContainerControl1 - DevExpress.XtraEditors.SplitContainerControl, DevExpress.Utils.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SplitContainerControl, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this diff --git a/source/ChanSort/Printing/ReportOptionsDialog.resx b/source/ChanSort/Printing/ReportOptionsDialog.resx index 73952a5..8f880d6 100644 --- a/source/ChanSort/Printing/ReportOptionsDialog.resx +++ b/source/ChanSort/Printing/ReportOptionsDialog.resx @@ -135,7 +135,7 @@ labelControl1 - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -162,7 +162,7 @@ rbSortByNumber - DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -186,7 +186,7 @@ rbSortByName - DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -210,7 +210,7 @@ labelControl2 - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -228,8 +228,8 @@ 106, 52 - - + + Combo @@ -242,7 +242,7 @@ fontEdit1 - DevExpress.XtraEditors.FontEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.FontEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -269,7 +269,7 @@ btnPreview - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -296,7 +296,7 @@ btnCancel - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -313,7 +313,7 @@ 266, 52 - + Combo @@ -329,7 +329,7 @@ spinFontSize - DevExpress.XtraEditors.SpinEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SpinEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -356,6 +356,6 @@ ReportOptionsDialog - DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a \ No newline at end of file diff --git a/source/ChanSort/Properties/Settings.Designer.cs b/source/ChanSort/Properties/Settings.Designer.cs index b4e9114..8f50672 100644 --- a/source/ChanSort/Properties/Settings.Designer.cs +++ b/source/ChanSort/Properties/Settings.Designer.cs @@ -12,7 +12,7 @@ namespace ChanSort.Ui.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.1.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.3.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); diff --git a/source/ChanSort/Properties/licenses.licx b/source/ChanSort/Properties/licenses.licx index 162edd6..b6f709c 100644 --- a/source/ChanSort/Properties/licenses.licx +++ b/source/ChanSort/Properties/licenses.licx @@ -1,8 +1,6 @@ -DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraBars.BarManager, DevExpress.XtraBars.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraEditors.PictureEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraReports.UI.XtraReport, DevExpress.XtraReports.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraEditors.Repository.RepositoryItemTextEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraEditors.ButtonEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.Repository.RepositoryItemTextEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.PictureEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.ButtonEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraBars.BarManager, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a diff --git a/source/ChanSort/ReferenceListForm.cs b/source/ChanSort/ReferenceListForm.cs index 2411630..a47f350 100644 --- a/source/ChanSort/ReferenceListForm.cs +++ b/source/ChanSort/ReferenceListForm.cs @@ -6,9 +6,9 @@ using System.Text; using System.Windows.Forms; using ChanSort.Api; using ChanSort.Ui.Properties; +using DevExpress.Utils.Extensions; using DevExpress.XtraEditors; using DevExpress.XtraEditors.Controls; -using DevExpress.XtraPrinting.Native; namespace ChanSort.Ui { diff --git a/source/ChanSort/ReferenceListForm.resx b/source/ChanSort/ReferenceListForm.resx index f43ce6f..bfdd6e7 100644 --- a/source/ChanSort/ReferenceListForm.resx +++ b/source/ChanSort/ReferenceListForm.resx @@ -135,7 +135,7 @@ labelControl1 - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a groupControl1 @@ -153,8 +153,8 @@ 132, 36 - - + + Ellipsis @@ -181,7 +181,7 @@ - + Default @@ -194,7 +194,7 @@ edFile - DevExpress.XtraEditors.ButtonEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.ButtonEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a groupControl1 @@ -202,8 +202,8 @@ 3 - - + + Vertical @@ -224,7 +224,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) labelControl2 - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a groupControl1 @@ -251,7 +251,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) rbAuto - DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a groupControl2 @@ -278,7 +278,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) rbManual - DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a groupControl2 @@ -302,7 +302,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) labelControl3 - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpManual @@ -313,7 +313,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) 123, 33 - + Combo @@ -326,7 +326,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) comboSource - DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpManual @@ -337,7 +337,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) 123, 7 - + Combo @@ -350,7 +350,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) comboTarget - DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpManual @@ -374,7 +374,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) labelControl4 - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpManual @@ -398,7 +398,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) cbTv - DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpManual @@ -422,7 +422,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) cbRadio - DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpManual @@ -446,7 +446,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) labelControl5 - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpManual @@ -454,7 +454,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) 20 - + Vertical @@ -473,7 +473,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) labelControl6 - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpManual @@ -487,7 +487,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) 123, 134 - + Combo @@ -521,7 +521,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) comboPrNr - DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpManual @@ -548,7 +548,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) cbData - DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpManual @@ -572,7 +572,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) cbConsecutive - DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpManual @@ -596,7 +596,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) cbIp - DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpManual @@ -620,7 +620,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) cbSat - DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpManual @@ -644,7 +644,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) labelControl11 - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpManual @@ -668,7 +668,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) cbAntenna - DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpManual @@ -692,7 +692,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) cbCable - DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpManual @@ -716,7 +716,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) labelControl9 - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpManual @@ -740,7 +740,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) cbAnalog - DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpManual @@ -764,7 +764,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) cbDigital - DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpManual @@ -788,7 +788,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) lblTargetInfo - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpManual @@ -812,7 +812,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) lblSourceInfo - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpManual @@ -836,7 +836,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) labelControl7 - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpManual @@ -863,7 +863,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) btnApply - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a grpManual @@ -890,7 +890,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) grpManual - DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a groupControl2 @@ -917,7 +917,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) btnOk - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -944,7 +944,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) btnClose - DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -971,7 +971,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) linkWiki - DevExpress.XtraEditors.HyperlinkLabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.HyperlinkLabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a groupControl1 @@ -995,7 +995,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) groupControl1 - DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -1006,7 +1006,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) Tahoma, 12pt - + Vertical @@ -1026,7 +1026,7 @@ This step can be repeated as needed. labelControl10 - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a groupControl2 @@ -1034,7 +1034,7 @@ This step can be repeated as needed. 0 - + Vertical @@ -1054,7 +1054,7 @@ This step can be repeated as needed. labelControl8 - DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a groupControl2 @@ -1078,7 +1078,7 @@ This step can be repeated as needed. groupControl2 - DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a $this @@ -1105,6 +1105,6 @@ This step can be repeated as needed. ReferenceListForm - DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a \ No newline at end of file diff --git a/source/ChanSort/WaitForm1.resx b/source/ChanSort/WaitForm1.resx index 8583152..460e53e 100644 --- a/source/ChanSort/WaitForm1.resx +++ b/source/ChanSort/WaitForm1.resx @@ -145,7 +145,7 @@ 0, 14, 0, 14 - DevExpress.XtraWaitForm.WaitForm, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraWaitForm.WaitForm, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a WaitForm1 @@ -227,7 +227,7 @@ Horizontal - DevExpress.XtraWaitForm.ProgressPanel, DevExpress.XtraEditors.v19.1, Version=19.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + DevExpress.XtraWaitForm.ProgressPanel, DevExpress.XtraEditors.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a Horizontal diff --git a/source/ChanSort/app.config b/source/ChanSort/app.config index 229767b..b2d5d71 100644 --- a/source/ChanSort/app.config +++ b/source/ChanSort/app.config @@ -5,7 +5,7 @@
- + diff --git a/source/DLL/ICSharpCode.SharpZipLib.dll b/source/DLL/ICSharpCode.SharpZipLib.dll deleted file mode 100644 index fe643eb..0000000 Binary files a/source/DLL/ICSharpCode.SharpZipLib.dll and /dev/null differ diff --git a/source/Test.Loader.GlobalClone/LgGlobalCloneTest.cs b/source/Test.Loader.GlobalClone/LgGlobalCloneTest.cs index 07aee64..d80b2a7 100644 --- a/source/Test.Loader.GlobalClone/LgGlobalCloneTest.cs +++ b/source/Test.Loader.GlobalClone/LgGlobalCloneTest.cs @@ -11,18 +11,11 @@ namespace Test.Loader.GlobalClone [TestClass] public class LgGlobalCloneTest { - private static readonly string filesDir; - - static LgGlobalCloneTest() - { - filesDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\TestFiles\\"; - } - #region TestSatChannelsAddedToCorrectLists [TestMethod] public void TestSatChannelsAddedToCorrectLists() { - this.TestChannelsAddedToCorrectLists("GlobalClone00001.TLL", SignalSource.DvbS, 1138, 160, 8692, "DOWNLOAD G10 HUMAX"); + this.ChannelsAddedToCorrectLists("GlobalClone00001.TLL", SignalSource.DvbS, 1138, 160, 8692, "DOWNLOAD G10 HUMAX"); } #endregion @@ -30,7 +23,7 @@ namespace Test.Loader.GlobalClone [TestMethod] public void TestCableChannelsAddedToCorrectLists() { - this.TestChannelsAddedToCorrectLists("GlobalClone00002.TLL", SignalSource.DvbC, 405, 113, 11105, "ITV Content 01"); + this.ChannelsAddedToCorrectLists("GlobalClone00002.TLL", SignalSource.DvbC, 405, 113, 11105, "ITV Content 01"); } #endregion @@ -38,16 +31,17 @@ namespace Test.Loader.GlobalClone [TestMethod] public void TestAntennaChannelsAddedToCorrectLists() { - this.TestChannelsAddedToCorrectLists("GlobalClone00003.TLL", SignalSource.DvbT, 67, 6, 14120, "SRT8505 OTA"); + this.ChannelsAddedToCorrectLists("GlobalClone00003.TLL", SignalSource.DvbT, 67, 6, 14120, "SRT8505 OTA"); } #endregion #region TestChannelsAddedToCorrectList - private void TestChannelsAddedToCorrectLists(string fileName, SignalSource signalSource, int expectedTv, int expectedRadio, int dataProgramSid, string dataProgramName) + private void ChannelsAddedToCorrectLists(string fileName, SignalSource signalSource, int expectedTv, int expectedRadio, int dataProgramSid, string dataProgramName) { + var testFile = TestUtils.DeploymentItem("Test.Loader.GlobalClone\\TestFiles\\" + fileName); var plugin = new GcSerializerPlugin(); - var ser = plugin.CreateSerializer(filesDir + fileName); + var ser = plugin.CreateSerializer(testFile); ser.Load(); var root = ser.DataRoot; @@ -66,5 +60,53 @@ namespace Test.Loader.GlobalClone Assert.AreEqual(dataProgramName, chan.Name); } #endregion + + #region TestDeletingChannel + + [TestMethod] + public void TestDeletingChannel() + { + var tempFile = TestUtils.DeploymentItem("Test.Loader.GlobalClone\\TestFiles\\GlobalClone00001.TLL"); + var plugin = new GcSerializerPlugin(); + var ser = plugin.CreateSerializer(tempFile); + ser.Load(); + var data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + // Pr# 122 = ORF2W HD + + var dvbs = data.GetChannelList(SignalSource.DvbS); + var orf2w = dvbs.Channels.FirstOrDefault(ch => ch.Name == "ORF2W HD"); + Assert.AreEqual(122, orf2w.OldProgramNr); + Assert.AreEqual(122, orf2w.NewProgramNr); + Assert.IsFalse(orf2w.IsDeleted); + + orf2w.NewProgramNr = -1; + var editor = new Editor(); + editor.DataRoot = data; + editor.AutoNumberingForUnassignedChannels(UnsortedChannelMode.Delete); + + Assert.IsTrue(orf2w.IsDeleted); + Assert.AreNotEqual(-1, orf2w.NewProgramNr); + Assert.AreEqual(0, dvbs.Channels.Count(ch => ch.NewProgramNr <= 0)); + + + // save and reload + ser.Save(tempFile); + ser = plugin.CreateSerializer(tempFile); + ser.Load(); + data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + + dvbs = data.GetChannelList(SignalSource.DvbS); + orf2w = dvbs.Channels.FirstOrDefault(ch => ch.Name == "ORF2W HD"); + Assert.IsTrue(orf2w.IsDeleted); + Assert.AreEqual(-1, orf2w.OldProgramNr); + } + #endregion + } } diff --git a/source/Test.Loader.GlobalClone/Test.Loader.GlobalClone.csproj b/source/Test.Loader.GlobalClone/Test.Loader.GlobalClone.csproj index 30c62b0..f6e38dd 100644 --- a/source/Test.Loader.GlobalClone/Test.Loader.GlobalClone.csproj +++ b/source/Test.Loader.GlobalClone/Test.Loader.GlobalClone.csproj @@ -10,7 +10,7 @@ Properties Test.Loader.GlobalClone Test.Loader.GlobalClone - v4.8 + v4.6 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 15.0 @@ -20,6 +20,7 @@ UnitTest + true @@ -40,7 +41,7 @@ true - bin\x86\Debug\ + ..\Debug\ DEBUG;TRACE full x86 @@ -69,15 +70,9 @@ - - Always - - - Always - - - Always - + + + @@ -88,6 +83,10 @@ {5361c8cb-f737-4709-af8c-e1f0456f3c5b} ChanSort.Loader.GlobalClone + + {68cfcb2f-b52a-43a1-aa5c-5d64a1d655d2} + Test.Loader + diff --git a/source/Test.Loader.Hisense/HisenseChannelDbTest.cs b/source/Test.Loader.Hisense/HisenseChannelDbTest.cs index a3bcf68..4829547 100644 --- a/source/Test.Loader.Hisense/HisenseChannelDbTest.cs +++ b/source/Test.Loader.Hisense/HisenseChannelDbTest.cs @@ -1,7 +1,4 @@ -using System; -using System.IO; -using System.Linq; -using System.Reflection; +using System.Linq; using ChanSort.Api; using ChanSort.Loader.Hisense; using Microsoft.VisualStudio.TestTools.UnitTesting; @@ -11,13 +8,6 @@ namespace Test.Loader.Hisense [TestClass] public class HisenseChannelDbTest { - private static readonly string filesDir; - - static HisenseChannelDbTest() - { - filesDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\TestFiles\\"; - } - #region TestSatChannelsAddedToCorrectLists [TestMethod] public void TestSatChannelsAddedToCorrectLists() @@ -39,8 +29,9 @@ namespace Test.Loader.Hisense #region TestChannelsAddedToCorrectList private void TestChannelsAddedToCorrectLists(string fileName, SignalSource signalSource, int expectedTotal, int expectedTv, int expectedRadio, int dataProgramSid, string dataProgramName) { + var tempFile = TestUtils.DeploymentItem("Test.Loader.Hisense\\TestFiles\\" + fileName); var plugin = new HisDbSerializerPlugin(); - var ser = plugin.CreateSerializer(filesDir + fileName); + var ser = plugin.CreateSerializer(tempFile); ser.Load(); var root = ser.DataRoot; @@ -58,6 +49,53 @@ namespace Test.Loader.Hisense } #endregion + #region TestDeletingChannel + + [TestMethod] + public void TestDeletingChannel() + { + var tempFile = TestUtils.DeploymentItem("Test.Loader.Hisense\\TestFiles\\channel.db"); + var plugin = new HisDbSerializerPlugin(); + var ser = plugin.CreateSerializer(tempFile); + ser.Load(); + var data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + // Pr# 130 = ORF2E + + var dvbs = data.GetChannelList(SignalSource.DvbS); + var orf2e = dvbs.Channels.FirstOrDefault(ch => ch.Name == "ORF2E"); + Assert.IsNotNull(orf2e); + Assert.AreEqual(130, orf2e.OldProgramNr); + Assert.AreEqual(130, orf2e.NewProgramNr); + Assert.IsFalse(orf2e.IsDeleted); + + orf2e.NewProgramNr = -1; + var editor = new Editor(); + editor.DataRoot = data; + editor.AutoNumberingForUnassignedChannels(UnsortedChannelMode.AppendInOrder); + + Assert.IsFalse(orf2e.IsDeleted); + Assert.IsTrue(orf2e.NewProgramNr > 0); + Assert.AreEqual(0, dvbs.Channels.Count(ch => ch.NewProgramNr <= 0)); + + + // save and reload + ser.Save(tempFile); + ser = plugin.CreateSerializer(tempFile); + ser.Load(); + data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + // channel was removed from database + dvbs = data.GetChannelList(SignalSource.DvbS); + orf2e = dvbs.Channels.FirstOrDefault(ch => ch.Name == "ORF2E"); + Assert.IsNotNull(orf2e); + Assert.IsTrue(orf2e.NewProgramNr > 0); + } + #endregion } } diff --git a/source/Test.Loader.Hisense/Test.Loader.Hisense.csproj b/source/Test.Loader.Hisense/Test.Loader.Hisense.csproj index c4bee6f..d70a331 100644 --- a/source/Test.Loader.Hisense/Test.Loader.Hisense.csproj +++ b/source/Test.Loader.Hisense/Test.Loader.Hisense.csproj @@ -10,7 +10,7 @@ Properties Test.Loader.Hisense Test.Loader.Hisense - v4.8 + v4.6 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 15.0 @@ -20,6 +20,7 @@ UnitTest + true @@ -40,7 +41,7 @@ true - bin\x86\Debug\ + ..\Debug\ DEBUG;TRACE full x86 @@ -72,9 +73,7 @@ - - Always - + @@ -85,6 +84,10 @@ {d093e7ee-d3ad-4e7b-af82-c6918ca017fb} ChanSort.Loader.Hisense + + {68cfcb2f-b52a-43a1-aa5c-5d64a1d655d2} + Test.Loader + diff --git a/source/Test.Loader.Hisense2017/HisenseServicelistDbTest.cs b/source/Test.Loader.Hisense2017/HisenseServicelistDbTest.cs index 8a5121f..686bee7 100644 --- a/source/Test.Loader.Hisense2017/HisenseServicelistDbTest.cs +++ b/source/Test.Loader.Hisense2017/HisenseServicelistDbTest.cs @@ -1,23 +1,16 @@ -using System; -using System.IO; +using System.IO; using System.Linq; using System.Reflection; using ChanSort.Api; using ChanSort.Loader.Hisense2017; using Microsoft.VisualStudio.TestTools.UnitTesting; + namespace Test.Loader.Hisense2017 { [TestClass] public class HisenseServicelistDbTest { - private static readonly string filesDir; - - static HisenseServicelistDbTest() - { - filesDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\TestFiles\\"; - } - #region TestAstraChannelsAddedToCorrectLists [TestMethod] public void TestAstraChannelsAddedToCorrectLists() @@ -38,8 +31,9 @@ namespace Test.Loader.Hisense2017 #region TestChannelsAddedToCorrectList private void TestChannelsAddedToCorrectLists(string fileName, string listCaption, int expectedTotal, int expectedTv, int expectedRadio) { + var tempFile = TestUtils.DeploymentItem("Test.Loader.Hisense2017\\TestFiles\\" + fileName); var plugin = new HisDbSerializerPlugin(); - var ser = plugin.CreateSerializer(filesDir + fileName); + var ser = plugin.CreateSerializer(tempFile); ser.Load(); var root = ser.DataRoot; @@ -54,6 +48,54 @@ namespace Test.Loader.Hisense2017 } #endregion + #region TestDeletingChannel + + [TestMethod] + public void TestDeletingChannel() + { + var tempFile = TestUtils.DeploymentItem("Test.Loader.Hisense2017\\TestFiles\\servicelist.db"); + var plugin = new HisDbSerializerPlugin(); + var ser = plugin.CreateSerializer(tempFile); + ser.Load(); + var data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + // Pr# 910 = ORF2E + + var dvbs = data.GetChannelList(SignalSource.DvbS); + var orf2e = dvbs.Channels.FirstOrDefault(ch => ch.Name == "ORF2E"); + Assert.IsNotNull(orf2e); + Assert.AreEqual(910, orf2e.OldProgramNr); + Assert.AreEqual(910, orf2e.NewProgramNr); + Assert.IsFalse(orf2e.IsDeleted); + + orf2e.NewProgramNr = -1; + var editor = new Editor(); + editor.DataRoot = data; + editor.AutoNumberingForUnassignedChannels(UnsortedChannelMode.Delete); + + Assert.IsTrue(orf2e.IsDeleted); + Assert.IsTrue(orf2e.NewProgramNr > 0); + Assert.AreEqual(0, dvbs.Channels.Count(ch => ch.NewProgramNr <= 0)); + + + // save and reload + ser.Save(tempFile); + ser = plugin.CreateSerializer(tempFile); + ser.Load(); + data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + // channel was marked deleted in database + dvbs = data.GetChannelList(SignalSource.DvbS); + orf2e = dvbs.Channels.FirstOrDefault(ch => ch.Name == "ORF2E"); + Assert.IsNotNull(orf2e); + Assert.IsTrue(orf2e.IsDeleted); + Assert.AreEqual(-1, orf2e.NewProgramNr); + } + #endregion } } diff --git a/source/Test.Loader.Hisense2017/Test.Loader.Hisense2017.csproj b/source/Test.Loader.Hisense2017/Test.Loader.Hisense2017.csproj index db8ffe4..df0ac8d 100644 --- a/source/Test.Loader.Hisense2017/Test.Loader.Hisense2017.csproj +++ b/source/Test.Loader.Hisense2017/Test.Loader.Hisense2017.csproj @@ -10,7 +10,7 @@ Properties Test.Loader.Hisense2017 Test.Loader.Hisense2017 - v4.8 + v4.6 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 15.0 @@ -20,6 +20,7 @@ UnitTest + true @@ -40,7 +41,7 @@ true - bin\x86\Debug\ + ..\Debug\ DEBUG;TRACE full x86 @@ -72,9 +73,7 @@ - - Always - + @@ -85,6 +84,10 @@ {9282e1db-cd1f-400a-aca1-17e0c4562acf} ChanSort.Loader.Hisense2017 + + {68cfcb2f-b52a-43a1-aa5c-5d64a1d655d2} + Test.Loader + diff --git a/source/Test.Loader.LG/DvbsCleanup/TestDvbsCleanup.cs b/source/Test.Loader.LG/DvbsCleanup/TestDvbsCleanup.cs index 2775e06..e779dd7 100644 --- a/source/Test.Loader.LG/DvbsCleanup/TestDvbsCleanup.cs +++ b/source/Test.Loader.LG/DvbsCleanup/TestDvbsCleanup.cs @@ -35,9 +35,9 @@ namespace Test.Loader.LG private void ExecuteTest(string modelAndBaseName, bool generateReferenceFile = false) { // copy required input and assertion files - DeploymentItem("ChanSort.Loader.LG\\ChanSort.Loader.LG.ini"); - DeploymentItem("Test.Loader.LG\\" + modelAndBaseName + ".TLL.in"); - DeploymentItem("Test.Loader.LG\\" + modelAndBaseName + ".TLL.out"); + TestUtils.DeploymentItem("ChanSort.Loader.LG\\ChanSort.Loader.LG.ini"); + TestUtils.DeploymentItem("Test.Loader.LG\\" + modelAndBaseName + ".TLL.in"); + TestUtils.DeploymentItem("Test.Loader.LG\\" + modelAndBaseName + ".TLL.out"); var baseName = Path.GetFileNameWithoutExtension(modelAndBaseName); @@ -52,7 +52,7 @@ namespace Test.Loader.LG serializer.CleanUpChannelData(); serializer.Save(tempFile); if (generateReferenceFile) - File.Copy(tempFile, this.GetSolutionBaseDir() + "\\Test.Loader.LG\\" + modelAndBaseName + ".TLL.out", true); + File.Copy(tempFile, TestUtils.GetSolutionBaseDir() + "\\Test.Loader.LG\\" + modelAndBaseName + ".TLL.out", true); else AssertBinaryFileContent(tempFile, baseName + ".TLL.out"); } diff --git a/source/Test.Loader.LG/LM/TestLM.cs b/source/Test.Loader.LG/LM/TestLM.cs index 1e679c8..660bb1b 100644 --- a/source/Test.Loader.LG/LM/TestLM.cs +++ b/source/Test.Loader.LG/LM/TestLM.cs @@ -1,4 +1,7 @@ -using Microsoft.VisualStudio.TestTools.UnitTesting; +using System.Linq; +using ChanSort.Api; +using ChanSort.Loader.LG; +using Microsoft.VisualStudio.TestTools.UnitTesting; namespace Test.Loader.LG { @@ -37,5 +40,51 @@ namespace Test.Loader.LG this.ExecuteTest("LM/xxLM860V-ZB99998"); } + #region TestDeletingChannel + + [TestMethod] + public void TestDeletingChannel() + { + var tempFile = TestUtils.DeploymentItem("Test.Loader.LG\\LM\\xxLM620s-ZE00001.TLL.in"); + var plugin = new TllFileSerializerPlugin(); + var ser = plugin.CreateSerializer(tempFile); + ser.Load(); + var data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + // Pr# 127 = ORF2 HD + + var dvbs = data.GetChannelList(SignalSource.DvbS); + var orf2 = dvbs.Channels.FirstOrDefault(ch => ch.Name == "ORF2 HD"); + Assert.AreEqual(127, orf2.OldProgramNr); + Assert.AreEqual(127, orf2.NewProgramNr); + Assert.IsFalse(orf2.IsDeleted); + + orf2.NewProgramNr = -1; + var editor = new Editor(); + editor.DataRoot = data; + editor.AutoNumberingForUnassignedChannels(UnsortedChannelMode.Delete); + + Assert.IsTrue(orf2.IsDeleted); + Assert.AreEqual(0, orf2.NewProgramNr); + + // save and reload + ser.Save(tempFile); + ser = plugin.CreateSerializer(tempFile); + ser.Load(); + data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + dvbs = data.GetChannelList(SignalSource.DvbS); + orf2 = dvbs.Channels.FirstOrDefault(ch => ch.Name == "ORF2 HD"); + + Assert.IsTrue(orf2.IsDeleted); + Assert.AreEqual(-1, orf2.OldProgramNr); + Assert.AreEqual(-1, orf2.NewProgramNr); + } + #endregion + } } diff --git a/source/Test.Loader.LG/Test.Loader.LG.csproj b/source/Test.Loader.LG/Test.Loader.LG.csproj index 6b7eb56..958af35 100644 --- a/source/Test.Loader.LG/Test.Loader.LG.csproj +++ b/source/Test.Loader.LG/Test.Loader.LG.csproj @@ -11,7 +11,7 @@ Properties Test.Loader.LG Test.Loader.LG - v4.5.2 + v4.6 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} @@ -107,6 +107,10 @@ {E972D8A1-2F5F-421C-AC91-CFF45E5191BE} ChanSort.Loader.LG + + {68cfcb2f-b52a-43a1-aa5c-5d64a1d655d2} + Test.Loader + diff --git a/source/Test.Loader.LG/TestBase.cs b/source/Test.Loader.LG/TestBase.cs index 41b4cc5..b5c5ef6 100644 --- a/source/Test.Loader.LG/TestBase.cs +++ b/source/Test.Loader.LG/TestBase.cs @@ -20,10 +20,10 @@ namespace Test.Loader.LG protected void ExecuteTest(string modelAndBaseName) { // copy required input and assertion files - DeploymentItem("ChanSort.Loader.LG\\ChanSort.Loader.LG.ini"); - DeploymentItem("Test.Loader.LG\\" + modelAndBaseName + ".TLL.in"); - DeploymentItem("Test.Loader.LG\\" + modelAndBaseName + ".csv.in"); - DeploymentItem("Test.Loader.LG\\" + modelAndBaseName + ".TLL.out"); + TestUtils.DeploymentItem("ChanSort.Loader.LG\\ChanSort.Loader.LG.ini"); + TestUtils.DeploymentItem("Test.Loader.LG\\" + modelAndBaseName + ".TLL.in"); + TestUtils.DeploymentItem("Test.Loader.LG\\" + modelAndBaseName + ".csv.in"); + TestUtils.DeploymentItem("Test.Loader.LG\\" + modelAndBaseName + ".TLL.out"); var baseName = Path.GetFileNameWithoutExtension(modelAndBaseName); @@ -35,6 +35,7 @@ namespace Test.Loader.LG // verify channel name, number, favorites, ... against a reference list var data = serializer.DataRoot; + data.ValidateAfterLoad(); data.ApplyCurrentProgramNumbers(); AssertRefListContent(data, baseName + ".csv.in"); @@ -78,7 +79,7 @@ namespace Test.Loader.LG { MemoryStream mem = new MemoryStream(); var writer = new StreamWriter(mem); - CsvRefListSerializer.Save(writer, dataRoot); + CsvRefListSerializer.Save(writer, dataRoot, false); // don't include deleted channels to maintain compatibility between new code and old test files writer.Flush(); mem.Seek(0, SeekOrigin.Begin); var actual = new StreamReader(mem).ReadToEnd(); @@ -115,47 +116,6 @@ namespace Test.Loader.LG } #endregion - #region DeploymentItem() - private string baseDir; - private string destDir; - - /// - /// DeploymentItemAttribute doesn't work with the combination of VS2010, ReSharper 7.1.3, Target Framework 3.5 - /// - protected void DeploymentItem(string file) - { - if (this.baseDir == null) - { - this.baseDir = this.GetSolutionBaseDir(); - this.destDir = Path.GetDirectoryName(this.GetType().Assembly.Location); - } - - File.Copy(baseDir + "\\" + file, destDir + "\\" + Path.GetFileName(file), true); - } - #endregion - - #region GetSolutionBaseDir() - protected string GetSolutionBaseDir() - { - var dir = Path.GetDirectoryName(this.GetType().Assembly.Location); - do - { - if (File.Exists(dir + "\\ChanSort.sln")) - return dir; - dir = Path.GetDirectoryName(dir); - } while (!string.IsNullOrEmpty(dir)); - - dir = Environment.CurrentDirectory; - do - { - if (File.Exists(dir + "\\ChanSort.sln")) - return dir; - dir = Path.GetDirectoryName(dir); - } while (!string.IsNullOrEmpty(dir)); - - throw new InvalidOperationException("Cannot determine base directory of ChanSort solution"); - } - #endregion #region TearDown() [TestCleanup] @@ -169,9 +129,8 @@ namespace Test.Loader.LG #region GenerateTestFiles() protected void GenerateTestFiles(string modelAndBaseName, bool moveChannels = true) { - DeploymentItem("ChanSort.Loader.LG\\ChanSort.Loader.LG.ini"); - string solutionDir = this.GetSolutionBaseDir(); - var testDataDir = solutionDir + "\\Test.Loader.LG\\" + Path.GetDirectoryName(modelAndBaseName); + TestUtils.DeploymentItem("ChanSort.Loader.LG\\ChanSort.Loader.LG.ini"); + var testDataDir = TestUtils.GetSolutionBaseDir() + "\\Test.Loader.LG\\" + Path.GetDirectoryName(modelAndBaseName); var basename = Path.GetFileNameWithoutExtension(modelAndBaseName); // copy .TLL.in diff --git a/source/Test.Loader.LG/app.config b/source/Test.Loader.LG/app.config index de82893..8935d57 100644 --- a/source/Test.Loader.LG/app.config +++ b/source/Test.Loader.LG/app.config @@ -1,3 +1,3 @@ - + diff --git a/source/Test.Loader.Panasonic/PanasonicSvlTest.cs b/source/Test.Loader.Panasonic/PanasonicSvlTest.cs index 3ec394e..d87be03 100644 --- a/source/Test.Loader.Panasonic/PanasonicSvlTest.cs +++ b/source/Test.Loader.Panasonic/PanasonicSvlTest.cs @@ -11,13 +11,6 @@ namespace Test.Loader.Panasonic [TestClass] public class PanasonicSvlTest { - private static readonly string filesDir; - - static PanasonicSvlTest() - { - filesDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\TestFiles\\"; - } - #region TestSatChannelsAddedToCorrectLists [TestMethod] public void TestSatChannelsAddedToCorrectLists() @@ -38,8 +31,9 @@ namespace Test.Loader.Panasonic #region TestChannelsAddedToCorrectList private void TestChannelsAddedToCorrectLists(string fileName, SignalSource signalSource, int expectedTotal, int expectedTv, int expectedRadio) { + var tempFile = TestUtils.DeploymentItem("Test.Loader.Panasonic\\TestFiles\\" + fileName); var plugin = new SerializerPlugin(); - var ser = plugin.CreateSerializer(filesDir + fileName); + var ser = plugin.CreateSerializer(tempFile); ser.Load(); var root = ser.DataRoot; @@ -55,5 +49,52 @@ namespace Test.Loader.Panasonic #endregion + #region TestDeletingChannel + + [TestMethod] + public void TestDeletingChannel() + { + var tempFile = TestUtils.DeploymentItem("Test.Loader.Panasonic\\TestFiles\\svl-sat.db"); + var plugin = new SerializerPlugin(); + var ser = plugin.CreateSerializer(tempFile); + ser.Load(); + var data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + // Pr# 130 = ORF2E + + var dvbs = data.GetChannelList(SignalSource.DvbS); + var orf2e = dvbs.Channels.FirstOrDefault(ch => ch.Name == "ORF2E"); + Assert.IsNotNull(orf2e); + Assert.AreEqual(130, orf2e.OldProgramNr); + Assert.AreEqual(130, orf2e.NewProgramNr); + Assert.IsFalse(orf2e.IsDeleted); + + orf2e.NewProgramNr = -1; + var editor = new Editor(); + editor.DataRoot = data; + editor.AutoNumberingForUnassignedChannels(UnsortedChannelMode.Delete); + + Assert.IsTrue(orf2e.IsDeleted); + Assert.IsTrue(orf2e.NewProgramNr == 0); + Assert.AreEqual(1, dvbs.Channels.Count(ch => ch.NewProgramNr <= 0)); + + + // save and reload + ser.Save(tempFile); + ser = plugin.CreateSerializer(tempFile); + ser.Load(); + data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + // channel was deleted from database + dvbs = data.GetChannelList(SignalSource.DvbS); + orf2e = dvbs.Channels.FirstOrDefault(ch => ch.Name == "ORF2E"); + Assert.IsNull(orf2e); + } + #endregion + } } diff --git a/source/Test.Loader.Panasonic/Test.Loader.Panasonic.csproj b/source/Test.Loader.Panasonic/Test.Loader.Panasonic.csproj index 9af19c3..1cfdf05 100644 --- a/source/Test.Loader.Panasonic/Test.Loader.Panasonic.csproj +++ b/source/Test.Loader.Panasonic/Test.Loader.Panasonic.csproj @@ -10,7 +10,7 @@ Properties Test.Loader.Panasonic Test.Loader.Panasonic - v4.8 + v4.6 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 15.0 @@ -20,6 +20,7 @@ UnitTest + true @@ -40,7 +41,7 @@ true - bin\x86\Debug\ + ..\Debug\ DEBUG;TRACE full x86 @@ -72,12 +73,8 @@ - - Always - - - Always - + + @@ -89,6 +86,10 @@ {68da8072-3a29-4076-9f64-d66f38349585} ChanSort.Loader.Panasonic + + {68cfcb2f-b52a-43a1-aa5c-5d64a1d655d2} + Test.Loader + diff --git a/source/Test.Loader.PhilipsXml/PhilipsXmlTest.cs b/source/Test.Loader.PhilipsXml/PhilipsXmlTest.cs index 9f7932d..1cdc1ab 100644 --- a/source/Test.Loader.PhilipsXml/PhilipsXmlTest.cs +++ b/source/Test.Loader.PhilipsXml/PhilipsXmlTest.cs @@ -11,13 +11,6 @@ namespace Test.Loader.PhilipsXml [TestClass] public class PhilipsXmlTest { - private static readonly string filesDir; - - static PhilipsXmlTest() - { - filesDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\TestFiles\\"; - } - #region TestFormat1SatChannelsAddedToCorrectLists [TestMethod] public void TestFormat1SatChannelsAddedToCorrectLists() @@ -26,7 +19,6 @@ namespace Test.Loader.PhilipsXml } #endregion - #region TestFormat1CableChannelsAddedToCorrectLists [TestMethod] public void TestFormat1CableChannelsAddedToCorrectLists() @@ -48,8 +40,9 @@ namespace Test.Loader.PhilipsXml #region TestChannelsAddedToCorrectList private void TestChannelsAddedToCorrectLists(string fileName, SignalSource signalSource, int expectedTotal, int expectedTv, int expectedRadio) { + var tempFile = TestUtils.DeploymentItem("Test.Loader.PhilipsXml\\TestFiles\\" + fileName); var plugin = new SerializerPlugin(); - var ser = plugin.CreateSerializer(filesDir + fileName); + var ser = plugin.CreateSerializer(tempFile); ser.Load(); var root = ser.DataRoot; @@ -64,5 +57,52 @@ namespace Test.Loader.PhilipsXml } #endregion + #region TestDeletingChannel + + [TestMethod] + public void TestDeletingChannel() + { + var tempFile = TestUtils.DeploymentItem("Test.Loader.PhilipsXml\\TestFiles\\dvbs.xml"); + var plugin = new SerializerPlugin(); + var ser = plugin.CreateSerializer(tempFile); + ser.Load(); + var data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + // Pr# 42 = NTV HD + + var dvbs = data.GetChannelList(SignalSource.DvbS); + var ntvHd = dvbs.Channels.FirstOrDefault(ch => ch.Name == "NTV HD"); + Assert.IsNotNull(ntvHd); + Assert.AreEqual(42, ntvHd.OldProgramNr); + Assert.AreEqual(42, ntvHd.NewProgramNr); + Assert.IsFalse(ntvHd.IsDeleted); + + ntvHd.NewProgramNr = -1; + var editor = new Editor(); + editor.DataRoot = data; + editor.AutoNumberingForUnassignedChannels(UnsortedChannelMode.Delete); + + Assert.IsTrue(ntvHd.IsDeleted); + Assert.IsTrue(ntvHd.NewProgramNr == 0); + Assert.AreEqual(1, dvbs.Channels.Count(ch => ch.NewProgramNr <= 0)); + + + // save and reload + ser.Save(tempFile); + ser = plugin.CreateSerializer(tempFile); + ser.Load(); + data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + // channel was deleted from database + dvbs = data.GetChannelList(SignalSource.DvbS); + ntvHd = dvbs.Channels.FirstOrDefault(ch => ch.Name == "NTV HD"); + Assert.IsNull(ntvHd); + } + #endregion + } } diff --git a/source/Test.Loader.PhilipsXml/Test.Loader.PhilipsXml.csproj b/source/Test.Loader.PhilipsXml/Test.Loader.PhilipsXml.csproj index ed3df47..730c200 100644 --- a/source/Test.Loader.PhilipsXml/Test.Loader.PhilipsXml.csproj +++ b/source/Test.Loader.PhilipsXml/Test.Loader.PhilipsXml.csproj @@ -10,7 +10,7 @@ Properties Test.Loader.PhilipsXml Test.Loader.PhilipsXml - v4.8 + v4.6 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 15.0 @@ -20,6 +20,7 @@ UnitTest + true @@ -40,7 +41,7 @@ true - bin\x86\Debug\ + ..\Debug\ DEBUG;TRACE full x86 @@ -82,18 +83,16 @@ {d7bafd55-50f5-46c3-a76b-2193bed5358f} ChanSort.Loader.PhilipsXml + + {68cfcb2f-b52a-43a1-aa5c-5d64a1d655d2} + Test.Loader + - - Always - - - Always - - - Always - + + + diff --git a/source/Test.Loader.Samsung/FileFormatDetectionTest.cs b/source/Test.Loader.Samsung/FileFormatDetectionTest.cs index c633ef4..e696501 100644 --- a/source/Test.Loader.Samsung/FileFormatDetectionTest.cs +++ b/source/Test.Loader.Samsung/FileFormatDetectionTest.cs @@ -8,41 +8,12 @@ namespace Test.Loader.Samsung [TestClass] public class FileFormatDetectionTest { - private static readonly string RootPath; - - static FileFormatDetectionTest() - { - RootPath = GetSolutionBaseDir() + @"\Test.Loader.Samsung\TestFiles\"; - } - - #region GetSolutionBaseDir() - protected static string GetSolutionBaseDir() - { - var dir = Path.GetDirectoryName(typeof(FileFormatDetectionTest).Assembly.Location); - do - { - if (File.Exists(dir + "\\ChanSort.sln")) - return dir; - dir = Path.GetDirectoryName(dir); - } while (!string.IsNullOrEmpty(dir)); - - dir = Environment.CurrentDirectory; - do - { - if (File.Exists(dir + "\\ChanSort.sln")) - return dir; - dir = Path.GetDirectoryName(dir); - } while (!string.IsNullOrEmpty(dir)); - - throw new InvalidOperationException("Cannot determine base directory of ChanSort solution"); - } - #endregion - [TestMethod] public void LoadFileWithExcessiveHighFrequency_1() { // this seems to be a corrupt file caused by a buffer-overflow from analog channel names into the frequency data bytes - var s = new ScmSerializer(RootPath + @"channel_list_UE55H6470_1201-Suchlauf-2015-04-26.scm"); + var tempFile = TestUtils.DeploymentItem("Test.Loader.Samsung\\TestFiles\\channel_list_UE55H6470_1201-Suchlauf-2015-04-26.scm"); + var s = new ScmSerializer(tempFile); s.Load(); } @@ -50,7 +21,8 @@ namespace Test.Loader.Samsung public void LoadFileWithExcessiveHighFrequency_2() { // this seems to be a corrupt file caused by a buffer-overflow from analog channel names into the frequency data bytes - var s = new ScmSerializer(RootPath + @"channel_list_UE55H6470_1201.scm"); + var tempFile = TestUtils.DeploymentItem("Test.Loader.Samsung\\TestFiles\\channel_list_UE55H6470_1201.scm"); + var s = new ScmSerializer(tempFile); s.Load(); } @@ -58,7 +30,8 @@ namespace Test.Loader.Samsung public void LoadRenamedFile_HE40Cxxx_1201() { // This file uses the 1201 format (E,F,H,J), but has a "C" in its model name - var s = new ScmSerializer(RootPath + @"E_format_with_C_model_name.scm"); + var tempFile = TestUtils.DeploymentItem("Test.Loader.Samsung\\TestFiles\\E_format_with_C_model_name.scm"); + var s = new ScmSerializer(tempFile); s.Load(); Assert.AreEqual("E", s.Series); } @@ -67,7 +40,8 @@ namespace Test.Loader.Samsung public void LoadRenamedFile_LT24B_1201() { // This file uses the 1201 format (E,F,H,J), but has a "B" in its model name - var s = new ScmSerializer(RootPath + @"E_format_with_C_model_name.scm"); + var tempFile = TestUtils.DeploymentItem("Test.Loader.Samsung\\TestFiles\\E_format_with_B_model_name.scm"); + var s = new ScmSerializer(tempFile); s.Load(); Assert.AreEqual("E", s.Series); } @@ -76,7 +50,8 @@ namespace Test.Loader.Samsung public void LoadJSeriesWithScm1201Format() { // J-series model with E-J series SCM format - var s = new ScmSerializer(RootPath + @"channel_list_UE32J5170_1201_orig.scm"); + var tempFile = TestUtils.DeploymentItem("Test.Loader.Samsung\\TestFiles\\channel_list_UE32J5170_1201_orig.scm"); + var s = new ScmSerializer(tempFile); s.Load(); Assert.AreEqual("E", s.Series); } diff --git a/source/Test.Loader.Samsung/SamsungTest.cs b/source/Test.Loader.Samsung/SamsungTest.cs index 18ad271..6c2e4dc 100644 --- a/source/Test.Loader.Samsung/SamsungTest.cs +++ b/source/Test.Loader.Samsung/SamsungTest.cs @@ -5,9 +5,10 @@ using System.IO; using System.Linq; using System.Text; using Microsoft.VisualStudio.TestTools.UnitTesting; +using ChanSort.Api; using ChanSort.Loader.Samsung; -namespace Test.Loader +namespace Test.Loader.Samsung { [TestClass] public class SamsungTest : LoaderTestBase @@ -142,5 +143,109 @@ namespace Test.Loader return fileName.StartsWith("channel_list_") ? fileName.Substring(13, fileName.IndexOf('_', 14) - 13) : fileName; } #endregion + + #region TestDeletingSatChannel + + [TestMethod] + public void TestDeletingSatChannel() + { + var tempFile = TestUtils.DeploymentItem("Test.Loader.Samsung\\TestFiles\\channel_list_T_J_ohne_smart_12.scm"); + var plugin = new ScmSerializerPlugin(); + var ser = plugin.CreateSerializer(tempFile); + ser.Load(); + var data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + // Pr# 122 = ORF2W HD + + var dvbs = data.GetChannelList(SignalSource.DvbS); + var orf2w = dvbs.Channels.FirstOrDefault(ch => ch.Name == "ORF2W HD"); + Assert.AreEqual(122, orf2w.OldProgramNr); + Assert.AreEqual(122, orf2w.NewProgramNr); + Assert.IsFalse(orf2w.IsDeleted); + + orf2w.NewProgramNr = -1; + var editor = new Editor(); + editor.DataRoot = data; + editor.AutoNumberingForUnassignedChannels(UnsortedChannelMode.Delete); + + Assert.IsTrue(orf2w.IsDeleted); + Assert.AreNotEqual(-1, orf2w.NewProgramNr); + Assert.AreEqual(0, dvbs.Channels.Count(ch => ch.NewProgramNr <= 0)); + + + // save and reload + ser.Save(tempFile); + ser = plugin.CreateSerializer(tempFile); + ser.Load(); + data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + + dvbs = data.GetChannelList(SignalSource.DvbS); + orf2w = dvbs.Channels.FirstOrDefault(ch => ch.Name == "ORF2W HD"); + + // For .scm sat-channels, there is no known "IsDeleted" flag. Instead, the "IsUsed" flag is set to false when saving a channel with IsDeleted==true + // When loading the file back, it can no longer be distinguished between a garbage record and a deleted record. The loader doesn't add IsUsed=false channels to the list + Assert.IsNull(orf2w); + //Assert.IsTrue(orf2w.IsDeleted); + //Assert.AreEqual(-1, orf2w.OldProgramNr); + } + #endregion + + #region TestDeletingCableChannel + + [TestMethod] + public void TestDeletingCableChannel() + { + var tempFile = TestUtils.DeploymentItem("Test.Loader.Samsung\\TestFiles\\Samsung_upcmini_EF_12.scm"); + var plugin = new ScmSerializerPlugin(); + var ser = plugin.CreateSerializer(tempFile); + ser.Load(); + var data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + // Pr# 2 = ORF 2 Wien HD + + var dvbc = data.GetChannelList(SignalSource.DvbC); + var orf2w = dvbc.Channels.FirstOrDefault(ch => ch.Name == "ORF 2 Wien HD"); + Assert.IsNotNull(orf2w); + Assert.AreEqual(2, orf2w.OldProgramNr); + Assert.AreEqual(2, orf2w.NewProgramNr); + Assert.IsFalse(orf2w.IsDeleted); + + orf2w.NewProgramNr = -1; + var editor = new Editor(); + editor.DataRoot = data; + editor.AutoNumberingForUnassignedChannels(UnsortedChannelMode.Delete); + + Assert.IsTrue(orf2w.IsDeleted); + Assert.AreNotEqual(-1, orf2w.NewProgramNr); + Assert.AreEqual(0, dvbc.Channels.Count(ch => ch.NewProgramNr <= 0)); + + + // save and reload + ser.Save(tempFile); + ser = plugin.CreateSerializer(tempFile); + ser.Load(); + data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + + dvbc = data.GetChannelList(SignalSource.DvbC); + orf2w = dvbc.Channels.FirstOrDefault(ch => ch.Name == "ORF 2 Wien HD"); + + // For .scm sat-channels, there is no known "IsDeleted" flag. Instead, the "IsUsed" flag is set to false when saving a channel with IsDeleted==true + // When loading the file back, it can no longer be distinguished between a garbage record and a deleted record. The loader doesn't add IsUsed=false channels to the list + Assert.IsNotNull(orf2w); + Assert.IsTrue(orf2w.IsDeleted); + Assert.AreEqual(-1, orf2w.OldProgramNr); + } + #endregion + } } diff --git a/source/Test.Loader.Samsung/Test.Loader.Samsung.csproj b/source/Test.Loader.Samsung/Test.Loader.Samsung.csproj index a7c90c1..9eded4a 100644 --- a/source/Test.Loader.Samsung/Test.Loader.Samsung.csproj +++ b/source/Test.Loader.Samsung/Test.Loader.Samsung.csproj @@ -8,7 +8,7 @@ Properties Test.Loader.Samsung Test.Loader.Samsung - v4.5.2 + v4.6 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 10.0 @@ -16,6 +16,7 @@ $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages False UnitTest + true @@ -36,7 +37,7 @@ true - bin\x86\Debug\ + ..\Debug\ DEBUG;TRACE full x86 @@ -90,11 +91,13 @@ + + diff --git a/source/Test.Loader.Samsung/TestFiles/Channel_list_T_J_ohne_smart_12.scm b/source/Test.Loader.Samsung/TestFiles/Channel_list_T_J_ohne_smart_12.scm new file mode 100644 index 0000000..65bf5d5 Binary files /dev/null and b/source/Test.Loader.Samsung/TestFiles/Channel_list_T_J_ohne_smart_12.scm differ diff --git a/source/Test.Loader.Samsung/TestFiles/Samsung_upcmini_EF_12.scm b/source/Test.Loader.Samsung/TestFiles/Samsung_upcmini_EF_12.scm new file mode 100644 index 0000000..7565b78 Binary files /dev/null and b/source/Test.Loader.Samsung/TestFiles/Samsung_upcmini_EF_12.scm differ diff --git a/source/Test.Loader.SamsungJ/SamsungZipTest.cs b/source/Test.Loader.SamsungJ/SamsungZipTest.cs index 1a5a596..9cb2980 100644 --- a/source/Test.Loader.SamsungJ/SamsungZipTest.cs +++ b/source/Test.Loader.SamsungJ/SamsungZipTest.cs @@ -11,13 +11,6 @@ namespace Test.Loader.SamsungJ [TestClass] public class SamsungZipTest { - private static readonly string filesDir; - - static SamsungZipTest() - { - filesDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\TestFiles\\"; - } - #region TestSatChannelsAddedToCorrectLists [TestMethod] public void TestSatChannelsAddedToCorrectLists() @@ -38,7 +31,7 @@ namespace Test.Loader.SamsungJ [TestMethod] public void TestAntennaChannelsAddedToCorrectLists() { - this.TestChannelsAddedToCorrectLists("Channel_list_T-KTSUDEUC-1007.1.zip", SignalSource.DvbT, 77, 71, 4, 3995, "Irdeto Code 4"); + this.TestChannelsAddedToCorrectLists("Channel_list_T-KTSUDEUC-1007.2.zip", SignalSource.DvbT, 77, 71, 4, 3995, "Irdeto Code 4"); } #endregion @@ -46,8 +39,9 @@ namespace Test.Loader.SamsungJ #region TestChannelsAddedToCorrectList private void TestChannelsAddedToCorrectLists(string fileName, SignalSource signalSource, int expectedTotal, int expectedTv, int expectedRadio, int dataProgramSid = 0, string dataProgramName = null) { + var tempFile = TestUtils.DeploymentItem("Test.Loader.SamsungJ\\TestFiles\\" + fileName); var plugin = new DbSerializerPlugin(); - var ser = plugin.CreateSerializer(filesDir + fileName); + var ser = plugin.CreateSerializer(tempFile); ser.Load(); var root = ser.DataRoot; @@ -67,5 +61,53 @@ namespace Test.Loader.SamsungJ } } #endregion + + #region TestDeletingChannel + + [TestMethod] + public void TestDeletingChannel() + { + var tempFile = TestUtils.DeploymentItem("Test.Loader.SamsungJ\\TestFiles\\Channel_list_T-KTSUDEUC-1007.3.zip"); + var plugin = new DbSerializerPlugin(); + var ser = plugin.CreateSerializer(tempFile); + ser.Load(); + var data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + // Pr# 418 = ORF2E + + var dvbs = data.GetChannelList(SignalSource.DvbS); + var orf2e = dvbs.Channels.FirstOrDefault(ch => ch.Name == "ORF2E"); + Assert.IsNotNull(orf2e); + Assert.AreEqual(418, orf2e.OldProgramNr); + Assert.AreEqual(418, orf2e.NewProgramNr); + Assert.IsFalse(orf2e.IsDeleted); + + orf2e.NewProgramNr = -1; + var editor = new Editor(); + editor.DataRoot = data; + editor.AutoNumberingForUnassignedChannels(UnsortedChannelMode.Delete); + + Assert.IsTrue(orf2e.IsDeleted); + Assert.AreNotEqual(-1, orf2e.NewProgramNr); + Assert.AreEqual(1, dvbs.Channels.Count(ch => ch.NewProgramNr <= 0)); + + + // save and reload + ser.Save(tempFile); + ser = plugin.CreateSerializer(tempFile); + ser.Load(); + data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + + dvbs = data.GetChannelList(SignalSource.DvbS); + orf2e = dvbs.Channels.FirstOrDefault(ch => ch.Name == "ORF2E"); + Assert.IsNull(orf2e); + } + #endregion + } } diff --git a/source/Test.Loader.SamsungJ/Test.Loader.SamsungJ.csproj b/source/Test.Loader.SamsungJ/Test.Loader.SamsungJ.csproj index 9b5f1c0..092ff14 100644 --- a/source/Test.Loader.SamsungJ/Test.Loader.SamsungJ.csproj +++ b/source/Test.Loader.SamsungJ/Test.Loader.SamsungJ.csproj @@ -10,7 +10,7 @@ Properties Test.Loader.SamsungJ Test.Loader.SamsungJ - v4.8 + v4.6 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 15.0 @@ -20,6 +20,7 @@ UnitTest + true @@ -40,7 +41,7 @@ true - bin\x86\Debug\ + ..\Debug\ DEBUG;TRACE full x86 @@ -72,12 +73,10 @@ - - Always - - - Always - + + + + @@ -88,6 +87,10 @@ {33897002-0537-49a4-b963-a18d17311b3d} ChanSort.Loader.SamsungJ + + {68cfcb2f-b52a-43a1-aa5c-5d64a1d655d2} + Test.Loader + diff --git a/source/Test.Loader.SamsungJ/TestFiles/Channel_list_T-KTSUDEUC-1007.2.zip b/source/Test.Loader.SamsungJ/TestFiles/Channel_list_T-KTSUDEUC-1007.2.zip new file mode 100644 index 0000000..c126e7f Binary files /dev/null and b/source/Test.Loader.SamsungJ/TestFiles/Channel_list_T-KTSUDEUC-1007.2.zip differ diff --git a/source/Test.Loader.SamsungJ/TestFiles/Channel_list_T-KTSUDEUC-1007.3.zip b/source/Test.Loader.SamsungJ/TestFiles/Channel_list_T-KTSUDEUC-1007.3.zip new file mode 100644 index 0000000..c126e7f Binary files /dev/null and b/source/Test.Loader.SamsungJ/TestFiles/Channel_list_T-KTSUDEUC-1007.3.zip differ diff --git a/source/Test.Loader.SilvaSchneider/SdxTest.cs b/source/Test.Loader.SilvaSchneider/SdxTest.cs index 794db45..2131b9d 100644 --- a/source/Test.Loader.SilvaSchneider/SdxTest.cs +++ b/source/Test.Loader.SilvaSchneider/SdxTest.cs @@ -1,7 +1,4 @@ -using System; -using System.IO; -using System.Linq; -using System.Reflection; +using System.Linq; using ChanSort.Api; using ChanSort.Loader.SilvaSchneider; using Microsoft.VisualStudio.TestTools.UnitTesting; @@ -11,13 +8,6 @@ namespace Test.Loader.SilvaSchneider [TestClass] public class SdxTest { - private static readonly string filesDir; - - static SdxTest() - { - filesDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\TestFiles\\"; - } - #region TestSatChannelsAddedToCorrectLists [TestMethod] public void TestSatChannelsAddedToCorrectLists() @@ -30,8 +20,9 @@ namespace Test.Loader.SilvaSchneider #region TestChannelsAddedToCorrectList private void TestChannelsAddedToCorrectLists(string fileName, SignalSource signalSource, int expectedTotal, int expectedTv, int expectedRadio, int dataProgramSid = 0, string dataProgramName = null) { + var tempFile = TestUtils.DeploymentItem("Test.Loader.SilvaSchneider\\TestFiles\\" + fileName); var plugin = new SerializerPlugin(); - var ser = plugin.CreateSerializer(filesDir + fileName); + var ser = plugin.CreateSerializer(tempFile); ser.Load(); var root = ser.DataRoot; @@ -51,5 +42,53 @@ namespace Test.Loader.SilvaSchneider } } #endregion + + #region TestDeletingChannel + + [TestMethod] + public void TestDeletingChannel() + { + var tempFile = TestUtils.DeploymentItem("Test.Loader.SilvaSchneider\\TestFiles\\silva_schneider.sdx"); + var plugin = new SerializerPlugin(); + var ser = plugin.CreateSerializer(tempFile); + ser.Load(); + var data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + // Pr# 128 = ORF2E + + var dvbs = data.GetChannelList(SignalSource.DvbS); + var orf2e = dvbs.Channels.FirstOrDefault(ch => ch.Name == "ORF2E"); + Assert.IsNotNull(orf2e); + Assert.AreEqual(128, orf2e.OldProgramNr); + Assert.AreEqual(128, orf2e.NewProgramNr); + Assert.IsFalse(orf2e.IsDeleted); + + orf2e.NewProgramNr = -1; + var editor = new Editor(); + editor.DataRoot = data; + editor.AutoNumberingForUnassignedChannels(UnsortedChannelMode.Delete); + + Assert.IsTrue(orf2e.IsDeleted); + Assert.IsTrue(orf2e.NewProgramNr == 0); + Assert.AreEqual(1, dvbs.Channels.Count(ch => ch.NewProgramNr <= 0)); + + + // save and reload + ser.Save(tempFile); + ser = plugin.CreateSerializer(tempFile); + ser.Load(); + data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + // channel was deleted from file + dvbs = data.GetChannelList(SignalSource.DvbS); + orf2e = dvbs.Channels.FirstOrDefault(ch => ch.Name == "ORF2E"); + Assert.IsNull(orf2e); + } + #endregion + } } diff --git a/source/Test.Loader.SilvaSchneider/Test.Loader.SilvaSchneider.csproj b/source/Test.Loader.SilvaSchneider/Test.Loader.SilvaSchneider.csproj index 5ca50fe..c16899d 100644 --- a/source/Test.Loader.SilvaSchneider/Test.Loader.SilvaSchneider.csproj +++ b/source/Test.Loader.SilvaSchneider/Test.Loader.SilvaSchneider.csproj @@ -10,7 +10,7 @@ Properties Test.Loader.SilvaSchneider Test.Loader.SilvaSchneider - v4.8 + v4.6 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 15.0 @@ -20,6 +20,7 @@ UnitTest + true @@ -40,7 +41,7 @@ true - bin\x86\Debug\ + ..\Debug\ DEBUG;TRACE full x86 @@ -72,9 +73,7 @@ - - Always - + @@ -85,6 +84,10 @@ {e6279ff8-362a-41e6-ac0d-d0861d43f01c} ChanSort.Loader.SilvaSchneider + + {68cfcb2f-b52a-43a1-aa5c-5d64a1d655d2} + Test.Loader + diff --git a/source/Test.Loader.Sony/SonyXmlTest.cs b/source/Test.Loader.Sony/SonyXmlTest.cs index 720b142..779d5e2 100644 --- a/source/Test.Loader.Sony/SonyXmlTest.cs +++ b/source/Test.Loader.Sony/SonyXmlTest.cs @@ -1,7 +1,4 @@ -using System; -using System.IO; -using System.Linq; -using System.Reflection; +using System.Linq; using ChanSort.Api; using ChanSort.Loader.Sony; using Microsoft.VisualStudio.TestTools.UnitTesting; @@ -11,13 +8,6 @@ namespace Test.Loader.Sony [TestClass] public class SonyXmlTest { - private static readonly string filesDir; - - static SonyXmlTest() - { - filesDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\TestFiles\\"; - } - // Android OS seems to use the "FormateVer" XML element, KDL 2012 and 2014 use "FormatVer" #region TestAndroid ... ChannelsAddedToCorrectLists @@ -65,8 +55,9 @@ namespace Test.Loader.Sony #region TestChannelsAddedToCorrectList private void TestChannelsAddedToCorrectLists(string fileName, SignalSource signalSource, int expectedTotal, int expectedTv, int expectedRadio, int dataProgramSid = 0, string dataProgramName = null) { + var tempFile = TestUtils.DeploymentItem("Test.Loader.Sony\\TestFiles\\" + fileName); var plugin = new SerializerPlugin(); - var ser = plugin.CreateSerializer(filesDir + fileName); + var ser = plugin.CreateSerializer(tempFile); ser.Load(); var root = ser.DataRoot; @@ -86,5 +77,104 @@ namespace Test.Loader.Sony } } #endregion + + + #region TestAndroidDeletingChannel + + [TestMethod] + public void TestAndroidDeletingChannel() + { + var tempFile = TestUtils.DeploymentItem("Test.Loader.Sony\\TestFiles\\android_sdb-sat.xml"); + var plugin = new SerializerPlugin(); + var ser = plugin.CreateSerializer(tempFile); + ser.Load(); + var data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + // Pr# 128 = ORF2E + + var dvbs = data.GetChannelList(SignalSource.DvbS); + var orf2e = dvbs.Channels.FirstOrDefault(ch => ch.Name == "ORF2E"); + Assert.IsNotNull(orf2e); + Assert.AreEqual(127, orf2e.OldProgramNr); + Assert.AreEqual(127, orf2e.NewProgramNr); + Assert.IsFalse(orf2e.IsDeleted); + + orf2e.NewProgramNr = -1; + var editor = new Editor(); + editor.DataRoot = data; + editor.AutoNumberingForUnassignedChannels(UnsortedChannelMode.Delete); + + Assert.IsTrue(orf2e.IsDeleted); + Assert.IsTrue(orf2e.NewProgramNr > 0); + Assert.AreEqual(0, dvbs.Channels.Count(ch => ch.NewProgramNr <= 0)); + + + // save and reload + ser.Save(tempFile); + ser = plugin.CreateSerializer(tempFile); + ser.Load(); + data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + // channel was marked deleted + dvbs = data.GetChannelList(SignalSource.DvbS); + orf2e = dvbs.Channels.FirstOrDefault(ch => ch.Name == "ORF2E"); + Assert.IsNotNull(orf2e); + Assert.IsTrue(orf2e.IsDeleted); + Assert.AreEqual(-1, orf2e.NewProgramNr); + } + #endregion + + #region TestKdlDeletingChannel + + [TestMethod] + public void TestKdlDeletingChannel() + { + var tempFile = TestUtils.DeploymentItem("Test.Loader.Sony\\TestFiles\\kdl_sdb-cable-sat.xml"); + var plugin = new SerializerPlugin(); + var ser = plugin.CreateSerializer(tempFile); + ser.Load(); + var data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + // Pr# 128 = ORF2E + + var dvbs = data.GetChannelList(SignalSource.DvbS); + var orf2e = dvbs.Channels.FirstOrDefault(ch => ch.Name == "ORF2E"); + Assert.IsNotNull(orf2e); + Assert.AreEqual(693, orf2e.OldProgramNr); + Assert.AreEqual(693, orf2e.NewProgramNr); + Assert.IsFalse(orf2e.IsDeleted); + + orf2e.NewProgramNr = -1; + var editor = new Editor(); + editor.DataRoot = data; + editor.AutoNumberingForUnassignedChannels(UnsortedChannelMode.Delete); + + Assert.IsTrue(orf2e.IsDeleted); + Assert.IsTrue(orf2e.NewProgramNr == 0); + + + // save and reload + ser.Save(tempFile); + ser = plugin.CreateSerializer(tempFile); + ser.Load(); + data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + // channel was not assigned a number in the file + dvbs = data.GetChannelList(SignalSource.DvbS); + orf2e = dvbs.Channels.FirstOrDefault(ch => ch.Name == "ORF2E"); + Assert.IsNotNull(orf2e); + Assert.IsTrue(orf2e.IsDeleted); + Assert.AreEqual(-1, orf2e.NewProgramNr); + } + #endregion + } } diff --git a/source/Test.Loader.Sony/Test.Loader.Sony.csproj b/source/Test.Loader.Sony/Test.Loader.Sony.csproj index e0077c0..4f7a159 100644 --- a/source/Test.Loader.Sony/Test.Loader.Sony.csproj +++ b/source/Test.Loader.Sony/Test.Loader.Sony.csproj @@ -10,7 +10,7 @@ Properties Test.Loader.Sony Test.Loader.Sony - v4.8 + v4.6 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 15.0 @@ -20,6 +20,7 @@ UnitTest + true @@ -40,7 +41,7 @@ true - bin\x86\Debug\ + ..\Debug\ DEBUG;TRACE full x86 @@ -82,21 +83,17 @@ {70e29c6b-b926-4859-9548-23375bf1e1b5} ChanSort.Loader.Sony + + {68cfcb2f-b52a-43a1-aa5c-5d64a1d655d2} + Test.Loader + - - Always - - - Always - - - Always - - - Always - + + + + diff --git a/source/Test.Loader.Toshiba/Test.Loader.Toshiba.csproj b/source/Test.Loader.Toshiba/Test.Loader.Toshiba.csproj index 29e81ef..0ea5284 100644 --- a/source/Test.Loader.Toshiba/Test.Loader.Toshiba.csproj +++ b/source/Test.Loader.Toshiba/Test.Loader.Toshiba.csproj @@ -10,7 +10,7 @@ Properties Test.Loader.Toshiba Test.Loader.Toshiba - v4.8 + v4.6 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 15.0 @@ -20,6 +20,7 @@ UnitTest + true @@ -40,7 +41,7 @@ true - bin\x86\Debug\ + ..\Debug\ DEBUG;TRACE full x86 @@ -85,6 +86,10 @@ {f6f02792-07f1-48d5-9af3-f945ca5e3931} ChanSort.Loader.Toshiba + + {68cfcb2f-b52a-43a1-aa5c-5d64a1d655d2} + Test.Loader + diff --git a/source/Test.Loader.Toshiba/ToshibaChmgtDbTest.cs b/source/Test.Loader.Toshiba/ToshibaChmgtDbTest.cs index b1a56dd..213cc9b 100644 --- a/source/Test.Loader.Toshiba/ToshibaChmgtDbTest.cs +++ b/source/Test.Loader.Toshiba/ToshibaChmgtDbTest.cs @@ -1,7 +1,4 @@ -using System; -using System.IO; -using System.Linq; -using System.Reflection; +using System.Linq; using ChanSort.Api; using ChanSort.Loader.Toshiba; using Microsoft.VisualStudio.TestTools.UnitTesting; @@ -11,13 +8,6 @@ namespace Test.Loader.Toshiba [TestClass] public class ToshibaChmgtDbTest { - private static readonly string filesDir; - - static ToshibaChmgtDbTest() - { - filesDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\TestFiles\\"; - } - #region TestSatChannelsAddedToCorrectLists [TestMethod] @@ -43,8 +33,9 @@ namespace Test.Loader.Toshiba private void TestChannelsAddedToCorrectLists(string fileName, SignalSource signalSource, int expectedTv, int expectedRadio, int dataProgramSid = 0, string dataProgramName = null) { + var tempFile = TestUtils.DeploymentItem("Test.Loader.Toshiba\\TestFiles\\" + fileName); var plugin = new DbSerializerPlugin(); - var ser = plugin.CreateSerializer(filesDir + fileName); + var ser = plugin.CreateSerializer(tempFile); ser.Load(); var root = ser.DataRoot; @@ -73,5 +64,53 @@ namespace Test.Loader.Toshiba } #endregion + + + #region TestDeletingChannel + + [TestMethod] + public void TestDeletingChannel() + { + var tempFile = TestUtils.DeploymentItem("Test.Loader.Toshiba\\TestFiles\\Toshiba-SL863G.zip"); + var plugin = new DbSerializerPlugin(); + var ser = plugin.CreateSerializer(tempFile); + ser.Load(); + var data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + // Pr# 128 = ORF2E + + var dvbs = data.GetChannelList(SignalSource.DvbS); + var orf2e = dvbs.Channels.FirstOrDefault(ch => ch.Name == "ORF2E"); + Assert.IsNotNull(orf2e); + Assert.AreEqual(336, orf2e.OldProgramNr); + Assert.AreEqual(336, orf2e.NewProgramNr); + Assert.IsFalse(orf2e.IsDeleted); + + orf2e.NewProgramNr = -1; + var editor = new Editor(); + editor.DataRoot = data; + editor.AutoNumberingForUnassignedChannels(UnsortedChannelMode.Delete); + + Assert.IsTrue(orf2e.IsDeleted); + Assert.IsTrue(orf2e.NewProgramNr == 0); + + + // save and reload + ser.Save(tempFile); + ser = plugin.CreateSerializer(tempFile); + ser.Load(); + data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + // channel was deleted from database + dvbs = data.GetChannelList(SignalSource.DvbS); + orf2e = dvbs.Channels.FirstOrDefault(ch => ch.Name == "ORF2E"); + Assert.IsNull(orf2e); + } + #endregion + } } diff --git a/source/Test.Loader.VDR/LinuxVdrTest.cs b/source/Test.Loader.VDR/LinuxVdrTest.cs index bc3d708..7aaed8d 100644 --- a/source/Test.Loader.VDR/LinuxVdrTest.cs +++ b/source/Test.Loader.VDR/LinuxVdrTest.cs @@ -1,7 +1,4 @@ -using System; -using System.IO; -using System.Linq; -using System.Reflection; +using System.Linq; using ChanSort.Api; using ChanSort.Loader.VDR; using Microsoft.VisualStudio.TestTools.UnitTesting; @@ -11,13 +8,6 @@ namespace Test.Loader.VDR [TestClass] public class LinuxVdrTest { - private static readonly string filesDir; - - static LinuxVdrTest() - { - filesDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\TestFiles\\"; - } - #region TestAstraChannelsAddedToCorrectLists [TestMethod] public void TestAstraChannelsAddedToCorrectLists() @@ -29,8 +19,9 @@ namespace Test.Loader.VDR #region TestChannelsAddedToCorrectList private void TestChannelsAddedToCorrectLists(string fileName, int expectedTotal, int expectedTv, int expectedRadio) { + var tempFile = TestUtils.DeploymentItem("Test.Loader.VDR\\TestFiles\\channels.conf"); var plugin = new SerializerPlugin(); - var ser = plugin.CreateSerializer(filesDir + fileName); + var ser = plugin.CreateSerializer(tempFile); ser.Load(); var root = ser.DataRoot; @@ -46,5 +37,51 @@ namespace Test.Loader.VDR #endregion + #region TestDeletingChannel + + [TestMethod] + public void TestDeletingChannel() + { + var tempFile = TestUtils.DeploymentItem("Test.Loader.VDR\\TestFiles\\channels.conf"); + var plugin = new SerializerPlugin(); + var ser = plugin.CreateSerializer(tempFile); + ser.Load(); + var data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + // Pr# 421 = ORF2E + + var dvbs = data.GetChannelList(SignalSource.DvbS); + var orf2e = dvbs.Channels.FirstOrDefault(ch => ch.Name == "ORF2E"); + Assert.IsNotNull(orf2e); + Assert.AreEqual(421, orf2e.OldProgramNr); + Assert.AreEqual(421, orf2e.NewProgramNr); + Assert.IsFalse(orf2e.IsDeleted); + + orf2e.NewProgramNr = -1; + var editor = new Editor(); + editor.DataRoot = data; + editor.AutoNumberingForUnassignedChannels(UnsortedChannelMode.Delete); + + Assert.IsTrue(orf2e.IsDeleted); + Assert.IsTrue(orf2e.NewProgramNr == 0); + + + // save and reload + ser.Save(tempFile); + ser = plugin.CreateSerializer(tempFile); + ser.Load(); + data = ser.DataRoot; + data.ValidateAfterLoad(); + data.ApplyCurrentProgramNumbers(); + + // channel was deleted from file + dvbs = data.GetChannelList(SignalSource.DvbS); + orf2e = dvbs.Channels.FirstOrDefault(ch => ch.Name == "ORF2E"); + Assert.IsNull(orf2e); + } + #endregion + } } diff --git a/source/Test.Loader.VDR/Test.Loader.VDR.csproj b/source/Test.Loader.VDR/Test.Loader.VDR.csproj index 3933e62..c321bd6 100644 --- a/source/Test.Loader.VDR/Test.Loader.VDR.csproj +++ b/source/Test.Loader.VDR/Test.Loader.VDR.csproj @@ -10,7 +10,7 @@ Properties Test.Loader.VDR Test.Loader.VDR - v4.8 + v4.6 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 15.0 @@ -20,6 +20,7 @@ UnitTest + true @@ -40,7 +41,7 @@ true - bin\x86\Debug\ + ..\Debug\ DEBUG;TRACE full x86 @@ -85,6 +86,10 @@ {74a18c6f-09ff-413e-90d9-827066fa5b36} ChanSort.Loader.VDR + + {68cfcb2f-b52a-43a1-aa5c-5d64a1d655d2} + Test.Loader + diff --git a/source/Test.Loader/LoaderTestBase.cs b/source/Test.Loader/LoaderTestBase.cs index 91c43bd..3c0f72b 100644 --- a/source/Test.Loader/LoaderTestBase.cs +++ b/source/Test.Loader/LoaderTestBase.cs @@ -34,11 +34,11 @@ namespace Test.Loader { string path = this.GetTestFileDirectory(baseDir); List files = new List(); - this.FindAllTllFilesRecursively(path, mask, files); + this.GetFilesRecursively(path, mask, files); return files; } - private string GetTestFileDirectory(string baseDir) + protected string GetTestFileDirectory(string baseDir) { string exeDir = Assembly.GetExecutingAssembly().Location; while (!string.IsNullOrEmpty(exeDir)) @@ -51,11 +51,11 @@ namespace Test.Loader throw new FileNotFoundException("No 'TestFiles' directory found"); } - private void FindAllTllFilesRecursively(string path, string mask, List files) + private void GetFilesRecursively(string path, string mask, List files) { files.AddRange(Directory.GetFiles(path, mask)); foreach (var dir in Directory.GetDirectories(path)) - this.FindAllTllFilesRecursively(dir, mask, files); + this.GetFilesRecursively(dir, mask, files); } #endregion } diff --git a/source/Test.Loader/Test.Loader.csproj b/source/Test.Loader/Test.Loader.csproj index 000d5ef..28deedc 100644 --- a/source/Test.Loader/Test.Loader.csproj +++ b/source/Test.Loader/Test.Loader.csproj @@ -11,7 +11,7 @@ Properties Test.Loader Test.Loader - v4.5.2 + v4.6 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} @@ -70,6 +70,7 @@ + diff --git a/source/Test.Loader/TestUtils.cs b/source/Test.Loader/TestUtils.cs new file mode 100644 index 0000000..048602a --- /dev/null +++ b/source/Test.Loader/TestUtils.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace Test.Loader +{ + public class TestUtils + { + private static string solutionDir; + private static string executableDir; + + #region DeploymentItem() + + /// + /// DeploymentItemAttribute doesn't work with the combination of VS2010, ReSharper 7.1.3, Target Framework 3.5 + /// + public static string DeploymentItem(string file) + { + GetSolutionBaseDir(); + GetExecutableDir(); + + + var destFile = Path.Combine(executableDir, Path.GetFileName(file)); + File.Copy(Path.Combine(solutionDir, file), destFile, true); + return destFile; + } + #endregion + + #region GetSolutionBaseDir() + public static string GetSolutionBaseDir() + { + if (solutionDir != null) + return solutionDir; + + var dir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + do + { + if (File.Exists(dir + "\\ChanSort.sln")) + return solutionDir = dir; + dir = Path.GetDirectoryName(dir); + } while (!string.IsNullOrEmpty(dir)); + + dir = Environment.CurrentDirectory; + do + { + if (File.Exists(dir + "\\ChanSort.sln")) + return solutionDir = dir; + dir = Path.GetDirectoryName(dir); + } while (!string.IsNullOrEmpty(dir)); + + throw new InvalidOperationException("Cannot determine base directory of ChanSort solution"); + } + #endregion + + #region GetExecutableDir() + public static string GetExecutableDir() + { + if (executableDir == null) + executableDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + return executableDir; + } + #endregion + } +} diff --git a/source/changelog.md b/source/changelog.md index 445556a..bac35f4 100644 --- a/source/changelog.md +++ b/source/changelog.md @@ -1,6 +1,13 @@ ChanSort Change Log =================== +2019-11-08 +- improved handling for deleting channels across all file formats: + Depending on what the actual file format supports, one of the following actions will be taken. + - channels are marked as deleted in the data records (so they will not be auto-added as new channels by the TV) + - channels are removed from the file (with the risk of the TV auto-adding them like new channels) + - appended at the end of the list, when possible marked as "hidden" + 2019-08-29 - fixed: some UHD channels did not show up in the list, which caused corrupted Panasonic channel lists - fixed: Samsung SCM DVB-T lists did not show radio channels