diff --git a/source/ChanSort.Api/Model/ChannelList.cs b/source/ChanSort.Api/Model/ChannelList.cs index 5701d0e..d162ac7 100644 --- a/source/ChanSort.Api/Model/ChannelList.cs +++ b/source/ChanSort.Api/Model/ChannelList.cs @@ -97,9 +97,6 @@ namespace ChanSort.Api } } - for (int i = 0; i < ci.FavIndex.Count; i++) - ci.OldFavIndex[i] = ci.FavIndex[i]; - if (!isDupeProgNr) this.channelByProgNr[ci.OldProgramNr] = ci; diff --git a/source/ChanSort.Api/Model/LookupData.cs b/source/ChanSort.Api/Model/LookupData.cs index 6238edf..4067fd6 100644 --- a/source/ChanSort.Api/Model/LookupData.cs +++ b/source/ChanSort.Api/Model/LookupData.cs @@ -49,9 +49,9 @@ namespace ChanSort.Api #region GetServiceTypeDescription() public string GetServiceTypeDescription(int serviceType) { - string descr; - this.serviceTypeDescriptions.TryGetValue(serviceType, out descr); - return descr; + if (this.serviceTypeDescriptions.TryGetValue(serviceType, out var descr)) + return descr; + return serviceType.ToString(); } #endregion @@ -177,8 +177,8 @@ namespace ChanSort.Api } #endregion - #region IsRadioOrTv() - public SignalSource IsRadioOrTv(int dvbServiceType) + #region IsRadioTvOrData() + public SignalSource IsRadioTvOrData(int dvbServiceType) { switch (dvbServiceType) { diff --git a/source/ChanSort.Loader.GlobalClone/GcSerializer.cs b/source/ChanSort.Loader.GlobalClone/GcSerializer.cs index 70b3aa1..99e2cce 100644 --- a/source/ChanSort.Loader.GlobalClone/GcSerializer.cs +++ b/source/ChanSort.Loader.GlobalClone/GcSerializer.cs @@ -275,7 +275,7 @@ namespace ChanSort.Loader.GlobalClone break; case "serviceType": ch.ServiceType = int.Parse(info.InnerText); - ch.SignalSource |= LookupData.Instance.IsRadioOrTv(ch.ServiceType); + ch.SignalSource |= LookupData.Instance.IsRadioTvOrData(ch.ServiceType); break; case "frequency": ch.FreqInMhz = int.Parse(info.InnerText); diff --git a/source/ChanSort.Loader.Hisense/HisDbSerializer.cs b/source/ChanSort.Loader.Hisense/HisDbSerializer.cs index d7cdd10..a4f2523 100644 --- a/source/ChanSort.Loader.Hisense/HisDbSerializer.cs +++ b/source/ChanSort.Loader.Hisense/HisDbSerializer.cs @@ -422,7 +422,7 @@ namespace ChanSort.Loader.Hisense var id = ((long) r.GetInt32(0) << 32) | (uint) r.GetInt32(1); var ci = this.channelsById.TryGet(id); if (ci != null) - ci.FavIndex[i - 1] = int.Parse(r.GetString(2)); + ci.OldFavIndex[i - 1] = int.Parse(r.GetString(2)); } } } diff --git a/source/ChanSort.Loader.Hisense2017/HisDbSerializer.cs b/source/ChanSort.Loader.Hisense2017/HisDbSerializer.cs index f3804e6..5bb084e 100644 --- a/source/ChanSort.Loader.Hisense2017/HisDbSerializer.cs +++ b/source/ChanSort.Loader.Hisense2017/HisDbSerializer.cs @@ -357,10 +357,7 @@ left outer join Lcn l on l.ServiceId=fi.ServiceId and l.FavoriteId=fi.FavoriteId int favListIdx = favListIdToFavIndex.TryGet(favListId, -1); if (favListIdx >= 0) - { - // NOTE: we need to set the NEW fav index here because AddChannel will use the new value to initialize the old value - ci.FavIndex[favListIdx] = r.GetInt32(2); - } + ci.OldFavIndex[favListIdx] = r.GetInt32(2); ci.SetOldPosition(favListIdx + 1, r.GetInt32(2)); // 0=main nr, 1-4=fav 1-4 if (favListIdx < 0) diff --git a/source/ChanSort.Loader.Panasonic/DbChannel.cs b/source/ChanSort.Loader.Panasonic/DbChannel.cs index 26d0d56..d21e4ac 100644 --- a/source/ChanSort.Loader.Panasonic/DbChannel.cs +++ b/source/ChanSort.Loader.Panasonic/DbChannel.cs @@ -64,7 +64,7 @@ namespace ChanSort.Loader.Panasonic if (favIndex > 0) { this.Favorites |= (Favorites) (1 << i); - this.FavIndex[i] = favIndex; + this.OldFavIndex[i] = favIndex; } } } @@ -82,7 +82,7 @@ namespace ChanSort.Loader.Panasonic protected void ReadDvbData(SQLiteDataReader r, IDictionary field, DataRoot dataRoot, byte[] delivery) { int stype = r.GetInt32(field["stype"]); - this.SignalSource |= LookupData.Instance.IsRadioOrTv(stype); + this.SignalSource |= LookupData.Instance.IsRadioTvOrData(stype); this.ServiceType = stype; int freq = r.GetInt32(field["freq"]); diff --git a/source/ChanSort.Loader.PhilipsXml/Serializer.cs b/source/ChanSort.Loader.PhilipsXml/Serializer.cs index 20b49ca..40fee9e 100644 --- a/source/ChanSort.Loader.PhilipsXml/Serializer.cs +++ b/source/ChanSort.Loader.PhilipsXml/Serializer.cs @@ -221,14 +221,14 @@ namespace ChanSort.Loader.PhilipsXml chan.Lock = data.TryGet("ChannelLock") == "1"; chan.Hidden = data.TryGet("UserHidden") == "1"; var fav = ParseInt(data.TryGet("FavoriteNumber")); - chan.FavIndex[0] = fav == 0 ? -1 : fav; + chan.OldFavIndex[0] = fav == 0 ? -1 : fav; chan.OriginalNetworkId = ParseInt(data.TryGet("Onid")); chan.TransportStreamId = ParseInt(data.TryGet("Tsid")); chan.ServiceId = ParseInt(data.TryGet("Sid")); var freq = ParseInt(data.TryGet("Frequency")); chan.FreqInMhz = freq; chan.ServiceType = ParseInt(data.TryGet("ServiceType")); - chan.SignalSource |= LookupData.Instance.IsRadioOrTv(chan.ServiceType); + chan.SignalSource |= LookupData.Instance.IsRadioTvOrData(chan.ServiceType); chan.SymbolRate = ParseInt(data.TryGet("SymbolRate")); if (data.TryGetValue("Polarization", out var pol)) chan.Polarity = pol == "0" ? 'H' : 'V'; diff --git a/source/ChanSort.Loader.Samsung/ScmChannelBase.cs b/source/ChanSort.Loader.Samsung/ScmChannelBase.cs index e2fea90..5eaf1bd 100644 --- a/source/ChanSort.Loader.Samsung/ScmChannelBase.cs +++ b/source/ChanSort.Loader.Samsung/ScmChannelBase.cs @@ -94,7 +94,7 @@ namespace ChanSort.Loader.Samsung else if (sortedFavorites != FavoritesIndexMode.Boolean && favValue != -1) fav |= mask; if (sortedFavorites == FavoritesIndexMode.IndividuallySorted) - this.FavIndex[favIndex] = favValue; + this.OldFavIndex[favIndex] = favValue; mask <<= 1; ++favIndex; } @@ -131,7 +131,7 @@ namespace ChanSort.Loader.Samsung int providerId = data.GetWord(_ServiceProviderId); this.Provider = providerNames.TryGet((source << 16) + providerId); } - this.SignalSource |= LookupData.Instance.IsRadioOrTv(this.ServiceType); + this.SignalSource |= LookupData.Instance.IsRadioTvOrData(this.ServiceType); } #endregion diff --git a/source/ChanSort.Loader.SamsungJ/DbChannel.cs b/source/ChanSort.Loader.SamsungJ/DbChannel.cs index a0b9473..3051796 100644 --- a/source/ChanSort.Loader.SamsungJ/DbChannel.cs +++ b/source/ChanSort.Loader.SamsungJ/DbChannel.cs @@ -61,7 +61,7 @@ namespace ChanSort.Loader.SamsungJ this.RecordOrder = r.GetInt32(field["major"]); int serviceType = r.GetInt32(field["srvType"]); this.ServiceType = serviceType; - this.SignalSource |= LookupData.Instance.IsRadioOrTv(serviceType); + this.SignalSource |= LookupData.Instance.IsRadioTvOrData(serviceType); this.OriginalNetworkId = r.GetInt32(field["onid"]); this.TransportStreamId = r.GetInt32(field["tsid"]); this.ServiceId = r.GetInt32(field["progNum"]); diff --git a/source/ChanSort.Loader.SamsungJ/DbSerializer.cs b/source/ChanSort.Loader.SamsungJ/DbSerializer.cs index 923fc39..568c40f 100644 --- a/source/ChanSort.Loader.SamsungJ/DbSerializer.cs +++ b/source/ChanSort.Loader.SamsungJ/DbSerializer.cs @@ -333,7 +333,7 @@ namespace ChanSort.Loader.SamsungJ if (pos >= 0) { channel.Favorites |= (Favorites) (1 << fav); - channel.FavIndex[fav] = channel.OldFavIndex[fav] = pos + 1; + channel.OldFavIndex[fav] = pos + 1; } } } @@ -509,7 +509,7 @@ namespace ChanSort.Loader.SamsungJ cmdDeleteFav.ExecuteNonQuery(); } - channel.OldFavIndex[i] = channel.FavIndex[i] = newPos; + channel.FavIndex[i] = newPos; } } } diff --git a/source/ChanSort.Loader.Sony/Serializer.cs b/source/ChanSort.Loader.Sony/Serializer.cs index 19eca0a..d7d4626 100644 --- a/source/ChanSort.Loader.Sony/Serializer.cs +++ b/source/ChanSort.Loader.Sony/Serializer.cs @@ -19,6 +19,11 @@ namespace ChanSort.Loader.Sony * The other formats define ... with versions 1.0.0, 1.1.0 and 1.2.0, which are otherwise identical. * * NOTE: Even within the same version, there are some files using CRLF and some using LF for newlines. + * + * A couple anomalies that I encountered in some test files: + * - for the "e" format with independent fav list numbers, the fav-flag can be inconsistent (e.g. the flag for FAV1 is set, but in the aui1_custom_data there is a 0 for that channel in fav list 1) + * - encrypted flags are sometimes inconsistent (in ui4_nw_mask and t_free_ca_mode) + * - "deleted" flags are inconsistent (or not fully understood)... there is one flag in the ui4_nw_mask and also a b_deleted_by_user */ private const string SupportedFormatVersions = " e1.1.0 1.0.0 1.1.0 1.2.0 "; @@ -31,6 +36,26 @@ namespace ChanSort.Loader.Sony private string newline; private readonly Dictionary channeListNodes = new Dictionary(); + private ChannelList mixedFavList; + + #region enum NwMask + // ui4_nw_mask for the Android "e110"-format + [Flags] + private enum NwMask + { + //Active = 0x0002, // guess based on values from Hisense + Visible = 0x0008, + FavMask = 0x00F0, + Fav1 = 0x0010, + Fav2 = 0x0020, + Fav3 = 0x0040, + Fav4 = 0x0080, + // Skip = 0x0100, // guess based on values from Hisense + NotDeletedByUserOption = 0x0200, + Radio = 0x0400, + Encrypted = 0x0800, + } + #endregion #region ctor() @@ -38,6 +63,8 @@ namespace ChanSort.Loader.Sony { this.Features.ChannelNameEdit = ChannelNameEditMode.All; this.Features.DeleteMode = DeleteMode.FlagWithoutPrNr; // in Android/e-format, this will be changed to FlagWithPrNr + this.Features.MixedSourceFavorites = false; // true for Android/e-format + this.Features.SortedFavorites = false; // true for Android/e-format this.DataRoot.AddChannelList(new ChannelList(SignalSource.DvbT | SignalSource.Tv, "DVB-T TV")); this.DataRoot.AddChannelList(new ChannelList(SignalSource.DvbT | SignalSource.Radio, "DVB-T Radio")); @@ -137,6 +164,11 @@ namespace ChanSort.Loader.Sony this.format = "e" + formatNode.InnerText; this.isEFormat = true; this.Features.DeleteMode = DeleteMode.FlagWithPrNr; + this.Features.MixedSourceFavorites = true; + this.Features.SortedFavorites = true; + this.mixedFavList = new ChannelList(SignalSource.All, "Favorites"); + this.mixedFavList.IsMixedSourceFavoritesList = true; + this.DataRoot.AddChannelList(this.mixedFavList); } if (SupportedFormatVersions.IndexOf(" " + this.format + " ", StringComparison.Ordinal) < 0) @@ -289,18 +321,28 @@ namespace ChanSort.Loader.Sony var recId = int.Parse(svcData["ui2_svl_rec_id"][i]); var chan = new Channel(signalSource, i, recId); chan.OldProgramNr = (ParseInt(svcData["No"][i]) >> 18) & 0x3FFFF; - chan.IsDeleted = svcData["b_deleted_by_user"][i] != "1"; - var nwMask = uint.Parse(svcData["ui4_nw_mask"][i]); + var nwMask = (NwMask)uint.Parse(svcData["ui4_nw_mask"][i]); chan.AddDebug("NW="); - chan.AddDebug(nwMask); + chan.AddDebug((uint)nwMask); chan.AddDebug("OPT="); chan.AddDebug(uint.Parse(svcData["ui4_nw_option_mask"][i])); - chan.Hidden = (nwMask & 8) == 0; - chan.Encrypted = (nwMask & 2048) != 0; - //chan.Encrypted = dvbData["t_free_ca_mode"][i] == "1"; - chan.Favorites = (Favorites) ((nwMask & 0xF0) >> 4); + chan.IsDeleted = (nwMask & NwMask.NotDeletedByUserOption) == 0; + chan.IsDeleted |= svcData["b_deleted_by_user"][i] != "1"; + chan.Hidden = (nwMask & NwMask.Visible) == 0; + chan.Encrypted = (nwMask & NwMask.Encrypted) != 0; + chan.Encrypted |= dvbData["t_free_ca_mode"][i] == "1"; + chan.Favorites = (Favorites) ((uint)(nwMask & NwMask.FavMask) >> 4); chan.ServiceId = int.Parse(svcData["ui2_prog_id"][i]); chan.Name = svcData["Name"][i]; + var favNumbers = svcData["aui1_custom_data"][i]?.Split(' '); + if (favNumbers != null) + { + for (int j = 0; j < 4 && j < favNumbers.Length; j++) + { + if (int.TryParse(favNumbers[j], out var favNr) && favNr > 0) + chan.OldFavIndex[j] = favNr; + } + } var muxId = int.Parse(svcData["MuxID"][i]) + idAdjustment; var transp = this.DataRoot.Transponder[muxId]; chan.Transponder = transp; @@ -328,12 +370,17 @@ namespace ChanSort.Loader.Sony } chan.ServiceType = int.Parse(dvbData["ui1_sdt_service_type"][i]); - chan.SignalSource |= LookupData.Instance.IsRadioOrTv(chan.ServiceType); // could also use information with 1=TV, 2=Radio, 3=Other + if ((nwMask & NwMask.Radio) != 0) + chan.SignalSource |= SignalSource.Radio; + else + chan.SignalSource |= LookupData.Instance.IsRadioTvOrData(chan.ServiceType); CopyDataValues(serviceNode, svcData, i, chan.ServiceData); var list = this.DataRoot.GetChannelList(chan.SignalSource); + chan.Source = list.ShortCaption; this.DataRoot.AddChannel(list, chan); + this.mixedFavList.Channels.Add(chan); } } #endregion @@ -380,7 +427,7 @@ namespace ChanSort.Loader.Sony chan.ChannelOrTransponder = LookupData.Instance.GetDvbtTransponder(chan.FreqInMhz).ToString(); } - chan.SignalSource |= LookupData.Instance.IsRadioOrTv(chan.ServiceType); + chan.SignalSource |= LookupData.Instance.IsRadioTvOrData(chan.ServiceType); var att = this.ParseInt(svcData["Attribute"][i]); chan.Encrypted = (att & 8) != 0; @@ -661,7 +708,14 @@ namespace ChanSort.Loader.Sony if (field == "No") return ((ch.NewProgramNr << 18) | (int.Parse(value) & 0x3FFFF)).ToString(); if (field == "ui4_nw_mask") - return (((uint)ch.Favorites << 4) | (ch.Hidden ? 0u : 8u) | (uint.Parse(value) & ~0xF8)).ToString(); + return (((uint)ch.Favorites << 4) | (ch.Hidden ? 0u : (uint)NwMask.Visible) | (uint.Parse(value) & ~(uint)(NwMask.FavMask|NwMask.Visible))).ToString(); + if (field == "aui1_custom_data") // mixed favorite list position + { + var vals = value.Split(' '); + for (int i = 0; i < 4; i++) + vals[i] = ch.FavIndex[i] <= 0 ? "0" : ch.FavIndex[i].ToString(); + return string.Join(" ", vals); + } } return value; } diff --git a/source/ChanSort/MainForm.Designer.cs b/source/ChanSort/MainForm.Designer.cs index 75f4bac..106a824 100644 --- a/source/ChanSort/MainForm.Designer.cs +++ b/source/ChanSort/MainForm.Designer.cs @@ -37,6 +37,7 @@ this.gviewLeft = new DevExpress.XtraGrid.Views.Grid.GridView(); this.colIndex1 = new DevExpress.XtraGrid.Columns.GridColumn(); this.colOutServiceType = new DevExpress.XtraGrid.Columns.GridColumn(); + this.colOutSource = new DevExpress.XtraGrid.Columns.GridColumn(); this.colOutSlot = new DevExpress.XtraGrid.Columns.GridColumn(); this.colOutName = new DevExpress.XtraGrid.Columns.GridColumn(); this.colOutFav = new DevExpress.XtraGrid.Columns.GridColumn(); @@ -215,6 +216,7 @@ ((System.ComponentModel.ISupportInitialize)(this.repositoryItemTextEdit1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pnlEditControls)).BeginInit(); this.pnlEditControls.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.globalImageCollection1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.grpInputList)).BeginInit(); this.grpInputList.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.gridRight)).BeginInit(); @@ -250,7 +252,7 @@ resources.ApplyResources(this.splitContainerControl1.Panel1, "splitContainerControl1.Panel1"); this.splitContainerControl1.Panel2.Controls.Add(this.grpInputList); resources.ApplyResources(this.splitContainerControl1.Panel2, "splitContainerControl1.Panel2"); - this.splitContainerControl1.SplitterPosition = 453; + this.splitContainerControl1.SplitterPosition = 503; // // grpOutputList // @@ -293,7 +295,6 @@ this.gviewLeft.ColumnPanelRowHeight = 35; this.gviewLeft.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { this.colIndex1, - this.colOutServiceType, this.colOutSlot, this.colOutName, this.colOutFav, @@ -301,6 +302,8 @@ this.colOutSkip, this.colOutHide, this.colOutDeleted, + this.colOutServiceType, + this.colOutSource, this.colUid1}); this.gviewLeft.GridControl = this.gridLeft; this.gviewLeft.Name = "gviewLeft"; @@ -347,6 +350,12 @@ this.colOutServiceType.Name = "colOutServiceType"; this.colOutServiceType.OptionsColumn.AllowEdit = false; // + // colOutSource + // + resources.ApplyResources(this.colOutSource, "colOutSource"); + this.colOutSource.FieldName = "Source"; + this.colOutSource.Name = "colOutSource"; + // // colOutSlot // resources.ApplyResources(this.colOutSlot, "colOutSlot"); @@ -462,6 +471,10 @@ this.btnToggleFavH.Tag = ""; this.btnToggleFavH.Click += new System.EventHandler(this.btnToggleFav_Click); // + // globalImageCollection1 + // + this.globalImageCollection1.ParentControl = this; + // // btnToggleFavG // resources.ApplyResources(this.btnToggleFavG, "btnToggleFavG"); @@ -2023,6 +2036,7 @@ ((System.ComponentModel.ISupportInitialize)(this.repositoryItemTextEdit1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.pnlEditControls)).EndInit(); this.pnlEditControls.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.globalImageCollection1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.grpInputList)).EndInit(); this.grpInputList.ResumeLayout(false); this.grpInputList.PerformLayout(); @@ -2232,6 +2246,7 @@ private DevExpress.XtraEditors.SimpleButton btnToggleFavG; private DevExpress.XtraEditors.SimpleButton btnToggleFavF; private DevExpress.XtraBars.BarButtonItem miCopyCsv; + private DevExpress.XtraGrid.Columns.GridColumn colOutSource; } } diff --git a/source/ChanSort/MainForm.cs b/source/ChanSort/MainForm.cs index 0ac3027..6e92168 100644 --- a/source/ChanSort/MainForm.cs +++ b/source/ChanSort/MainForm.cs @@ -71,6 +71,8 @@ namespace ChanSort.Ui foreach (GridColumn col in this.gviewRight.Columns) col.Tag = col.Visible; + this.colOutSource.Caption = this.colSource.Caption; // copy translated caption + if (!Config.Default.WindowSize.IsEmpty) this.Size = Config.Default.WindowSize; this.title = string.Format(base.Text, AppVersion); @@ -255,7 +257,7 @@ namespace ChanSort.Ui this.currentRefFile = Path.Combine(Path.GetDirectoryName(this.currentTvFile) ?? "", Path.GetFileNameWithoutExtension(this.currentTvFile) + ".txt"); } - this.Text = this.title + " - " + Path.GetFileName(this.currentTvFile); + this.Text = this.title + " - " + this.currentTvFile; } #endregion @@ -631,7 +633,7 @@ namespace ChanSort.Ui //this.currentTvSerializer.ApplyCurrentProgramNumbers(); this.DataRoot.ApplyCurrentProgramNumbers(); this.RefreshGrid(this.gviewLeft, this.gviewRight); - this.rbInsertSwap.Checked = true; + //this.rbInsertSwap.Checked = true; } } @@ -1460,6 +1462,12 @@ namespace ChanSort.Ui if (list == null) return false; + if (list.IsMixedSourceFavoritesList) + { + if (col == this.colSource || col == this.colOutSource) return true; + if (col == this.colOutHide || col == this.colOutLock || col == this.colOutSkip) return false; + } + var filter = list.VisibleColumnFieldNames; if (filter != null) { @@ -1472,7 +1480,6 @@ namespace ChanSort.Ui return false; var source = list.SignalSource; - if (col == this.colSource) return list.IsMixedSourceFavoritesList; if (col == this.colPrNr) return this.subListIndex > 0; if (col == this.colChannelOrTransponder) return (source & SignalSource.Sat) == 0; if (col == this.colShortName) return (source & SignalSource.Digital) != 0; diff --git a/source/ChanSort/MainForm.resx b/source/ChanSort/MainForm.resx index 008beee..c14013a 100644 --- a/source/ChanSort/MainForm.resx +++ b/source/ChanSort/MainForm.resx @@ -143,30 +143,18 @@ Pr. index - - Service Type - - - - True - - - 0 - - - 45 - New Pos New program number + True - 1 + 0 50 @@ -178,10 +166,10 @@ True - 2 + 1 - 158 + 145 Favorites @@ -204,7 +192,7 @@ True - 3 + 2 55 @@ -219,7 +207,7 @@ True - 4 + 3 35 @@ -231,7 +219,7 @@ True - 5 + 4 35 @@ -243,7 +231,7 @@ True - 6 + 5 35 @@ -254,6 +242,24 @@ 60 + + Service Type + + + True + + + 6 + + + 45 + + + Source + + + 60 + UID @@ -264,7 +270,7 @@ Numeric - 449, 386 + 499, 386 1 @@ -1182,6 +1188,12 @@ DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + colOutSource + + + DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + colOutSlot @@ -1246,7 +1258,7 @@ globalImageCollection1 - ChanSort.Ui.GlobalImageCollection, ChanSort, Version=1.0.7251.34158, Culture=neutral, PublicKeyToken=null + ChanSort.Ui.GlobalImageCollection, ChanSort, Version=1.0.7253.27315, Culture=neutral, PublicKeyToken=null gviewRight @@ -1932,12 +1944,6 @@ DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - - 11/08/2019 19:29:15 - - - 16, 16 - 307, 5 @@ -2344,7 +2350,7 @@ 2, 21 - 449, 33 + 499, 33 0 @@ -2368,7 +2374,7 @@ 0, 0 - 453, 459 + 503, 459 0 @@ -2743,7 +2749,7 @@ Signal source - 981, 386 + 931, 386 1 @@ -2959,7 +2965,7 @@ specific provider, satellite or country lists. 2, 21 - 981, 33 + 931, 33 0 @@ -2983,7 +2989,7 @@ specific provider, satellite or country lists. 0, 0 - 985, 459 + 935, 459 0 diff --git a/source/changelog.md b/source/changelog.md index bac35f4..9671e51 100644 --- a/source/changelog.md +++ b/source/changelog.md @@ -1,6 +1,10 @@ ChanSort Change Log =================== +2019-11-10 +- Sony: added support for independent favorite list ordering for Android channel lists (n) +- fixed: failed to save Sony lists which contain channel numbers above 8000 + 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.