- Sony Android (E-Format) now supports independent favorite list ordering

- fixed issue when saving Sony Android list with high program numbers (causing negative int32 values due to bit shift)
- for unknown DVB service types the UI now shows the number instead of an empty string
- loaders are now setting the OldFavIndex (to be consistent with the use OldProgramNr)
- Form shows full file path in title bar
- no longer defaulting to "swap" mode when opening a file and using "current order"
- show "Source" column in the left list when editing a mixed source favorite list
This commit is contained in:
hbeham
2019-11-10 20:09:27 +01:00
parent 449dea8195
commit 5cdf9d0995
15 changed files with 151 additions and 71 deletions

View File

@@ -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;

View File

@@ -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)
{

View File

@@ -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);

View File

@@ -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));
}
}
}

View File

@@ -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)

View File

@@ -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<string, int> 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"]);

View File

@@ -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';

View File

@@ -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

View File

@@ -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"]);

View File

@@ -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;
}
}
}

View File

@@ -19,6 +19,11 @@ namespace ChanSort.Loader.Sony
* The other formats define <FormatVer>...</FormatVer> 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<SignalSource, ChannelListNodes> channeListNodes = new Dictionary<SignalSource, ChannelListNodes>();
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 <ServiceFilter> 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;
}

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -143,30 +143,18 @@
<data name="colIndex1.Caption" xml:space="preserve">
<value>Pr. index</value>
</data>
<data name="colOutServiceType.Caption" xml:space="preserve">
<value>Service Type</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="colOutServiceType.Visible" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="colOutServiceType.VisibleIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="colOutServiceType.Width" type="System.Int32, mscorlib">
<value>45</value>
</data>
<data name="colOutSlot.Caption" xml:space="preserve">
<value>New Pos</value>
</data>
<data name="colOutSlot.ToolTip" xml:space="preserve">
<value>New program number</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="colOutSlot.Visible" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="colOutSlot.VisibleIndex" type="System.Int32, mscorlib">
<value>1</value>
<value>0</value>
</data>
<data name="colOutSlot.Width" type="System.Int32, mscorlib">
<value>50</value>
@@ -178,10 +166,10 @@
<value>True</value>
</data>
<data name="colOutName.VisibleIndex" type="System.Int32, mscorlib">
<value>2</value>
<value>1</value>
</data>
<data name="colOutName.Width" type="System.Int32, mscorlib">
<value>158</value>
<value>145</value>
</data>
<data name="colOutFav.Caption" xml:space="preserve">
<value>Favorites</value>
@@ -204,7 +192,7 @@
<value>True</value>
</data>
<data name="colOutFav.VisibleIndex" type="System.Int32, mscorlib">
<value>3</value>
<value>2</value>
</data>
<data name="colOutFav.Width" type="System.Int32, mscorlib">
<value>55</value>
@@ -219,7 +207,7 @@
<value>True</value>
</data>
<data name="colOutLock.VisibleIndex" type="System.Int32, mscorlib">
<value>4</value>
<value>3</value>
</data>
<data name="colOutLock.Width" type="System.Int32, mscorlib">
<value>35</value>
@@ -231,7 +219,7 @@
<value>True</value>
</data>
<data name="colOutSkip.VisibleIndex" type="System.Int32, mscorlib">
<value>5</value>
<value>4</value>
</data>
<data name="colOutSkip.Width" type="System.Int32, mscorlib">
<value>35</value>
@@ -243,7 +231,7 @@
<value>True</value>
</data>
<data name="colOutHide.VisibleIndex" type="System.Int32, mscorlib">
<value>6</value>
<value>5</value>
</data>
<data name="colOutHide.Width" type="System.Int32, mscorlib">
<value>35</value>
@@ -254,6 +242,24 @@
<data name="colOutDeleted.Width" type="System.Int32, mscorlib">
<value>60</value>
</data>
<data name="colOutServiceType.Caption" xml:space="preserve">
<value>Service Type</value>
</data>
<data name="colOutServiceType.Visible" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="colOutServiceType.VisibleIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="colOutServiceType.Width" type="System.Int32, mscorlib">
<value>45</value>
</data>
<data name="colOutSource.Caption" xml:space="preserve">
<value>Source</value>
</data>
<data name="colOutSource.Width" type="System.Int32, mscorlib">
<value>60</value>
</data>
<data name="colUid1.Caption" xml:space="preserve">
<value>UID</value>
</data>
@@ -264,7 +270,7 @@
<value>Numeric</value>
</data>
<data name="gridLeft.Size" type="System.Drawing.Size, System.Drawing">
<value>449, 386</value>
<value>499, 386</value>
</data>
<data name="gridLeft.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
@@ -1182,6 +1188,12 @@
<data name="&gt;&gt;colOutServiceType.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;colOutSource.Name" xml:space="preserve">
<value>colOutSource</value>
</data>
<data name="&gt;&gt;colOutSource.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;colOutSlot.Name" xml:space="preserve">
<value>colOutSlot</value>
</data>
@@ -1246,7 +1258,7 @@
<value>globalImageCollection1</value>
</data>
<data name="&gt;&gt;globalImageCollection1.Type" xml:space="preserve">
<value>ChanSort.Ui.GlobalImageCollection, ChanSort, Version=1.0.7251.34158, Culture=neutral, PublicKeyToken=null</value>
<value>ChanSort.Ui.GlobalImageCollection, ChanSort, Version=1.0.7253.27315, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;gviewRight.Name" xml:space="preserve">
<value>gviewRight</value>
@@ -1932,12 +1944,6 @@
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="SharedImageCollection.Timestamp" type="System.DateTime, mscorlib">
<value>11/08/2019 19:29:15</value>
</data>
<data name="SharedImageCollection.ImageSize" type="System.Drawing.Size, System.Drawing">
<value>16, 16</value>
</data>
<data name="btnToggleFavH.Location" type="System.Drawing.Point, System.Drawing">
<value>307, 5</value>
</data>
@@ -2344,7 +2350,7 @@
<value>2, 21</value>
</data>
<data name="pnlEditControls.Size" type="System.Drawing.Size, System.Drawing">
<value>449, 33</value>
<value>499, 33</value>
</data>
<data name="pnlEditControls.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@@ -2368,7 +2374,7 @@
<value>0, 0</value>
</data>
<data name="grpOutputList.Size" type="System.Drawing.Size, System.Drawing">
<value>453, 459</value>
<value>503, 459</value>
</data>
<data name="grpOutputList.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@@ -2743,7 +2749,7 @@
<value>Signal source</value>
</data>
<data name="gridRight.Size" type="System.Drawing.Size, System.Drawing">
<value>981, 386</value>
<value>931, 386</value>
</data>
<data name="gridRight.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
@@ -2959,7 +2965,7 @@ specific provider, satellite or country lists.</value>
<value>2, 21</value>
</data>
<data name="panelControl3.Size" type="System.Drawing.Size, System.Drawing">
<value>981, 33</value>
<value>931, 33</value>
</data>
<data name="panelControl3.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@@ -2983,7 +2989,7 @@ specific provider, satellite or country lists.</value>
<value>0, 0</value>
</data>
<data name="grpInputList.Size" type="System.Drawing.Size, System.Drawing">
<value>985, 459</value>
<value>935, 459</value>
</data>
<data name="grpInputList.TabIndex" type="System.Int32, mscorlib">
<value>0</value>

View File

@@ -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.