- added experimental support for Loewe / Hisense 2017 servicelist.db

file format
- show error message when trying to open a .zip file that doen't contain
  the expected files of a Samsung J series or Toshiba .zip channel list
- show error message when trying to open a broken .zip file, which is
  most likely caused by exporting to a USB stick formatted with NTFS
- allow changing the "crypt" flag for Samsung .scm lists
- iterating through loaders supporting a file extension till one can read the file
This commit is contained in:
hbeham
2017-06-08 20:01:42 +02:00
parent 16b3f3fbc0
commit 6cf02f4f90
38 changed files with 560 additions and 427 deletions

View File

@@ -332,6 +332,42 @@
<Project>{DCCFFA08-472B-4D17-BB90-8F513FC01392}</Project>
<Name>ChanSort.Api</Name>
</ProjectReference>
<ProjectReference Include="..\ChanSort.Loader.GlobalClone\ChanSort.Loader.GlobalClone.csproj">
<Project>{5361c8cb-f737-4709-af8c-e1f0456f3c5b}</Project>
<Name>ChanSort.Loader.GlobalClone</Name>
</ProjectReference>
<ProjectReference Include="..\ChanSort.Loader.Hisense2017\ChanSort.Loader.Hisense2017.csproj">
<Project>{9282e1db-cd1f-400a-aca1-17e0c4562acf}</Project>
<Name>ChanSort.Loader.Hisense2017</Name>
</ProjectReference>
<ProjectReference Include="..\ChanSort.Loader.Hisense\ChanSort.Loader.Hisense.csproj">
<Project>{d093e7ee-d3ad-4e7b-af82-c6918ca017fb}</Project>
<Name>ChanSort.Loader.Hisense</Name>
</ProjectReference>
<ProjectReference Include="..\ChanSort.Loader.LG\ChanSort.Loader.LG.csproj">
<Project>{e972d8a1-2f5f-421c-ac91-cff45e5191be}</Project>
<Name>ChanSort.Loader.LG</Name>
</ProjectReference>
<ProjectReference Include="..\ChanSort.Loader.Panasonic\ChanSort.Loader.Panasonic.csproj">
<Project>{68da8072-3a29-4076-9f64-d66f38349585}</Project>
<Name>ChanSort.Loader.Panasonic</Name>
</ProjectReference>
<ProjectReference Include="..\ChanSort.Loader.SamsungJ\ChanSort.Loader.SamsungJ.csproj">
<Project>{33897002-0537-49a4-b963-a18d17311b3d}</Project>
<Name>ChanSort.Loader.SamsungJ</Name>
</ProjectReference>
<ProjectReference Include="..\ChanSort.Loader.Samsung\ChanSort.Loader.Samsung.csproj">
<Project>{a1c9a98d-368a-44e8-9b7f-7eaca46c9ec5}</Project>
<Name>ChanSort.Loader.Samsung</Name>
</ProjectReference>
<ProjectReference Include="..\ChanSort.Loader.Toshiba\ChanSort.Loader.Toshiba.csproj">
<Project>{f6f02792-07f1-48d5-9af3-f945ca5e3931}</Project>
<Name>ChanSort.Loader.Toshiba</Name>
</ProjectReference>
<ProjectReference Include="..\ChanSort.Loader.VDR\ChanSort.Loader.VDR.csproj">
<Project>{74a18c6f-09ff-413e-90d9-827066fa5b36}</Project>
<Name>ChanSort.Loader.VDR</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="app.ico" />

View File

@@ -614,6 +614,7 @@
this.gviewRight.ShownEditor += new System.EventHandler(this.gview_ShownEditor);
this.gviewRight.FocusedRowChanged += new DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventHandler(this.gviewRight_FocusedRowChanged);
this.gviewRight.CellValueChanged += new DevExpress.XtraGrid.Views.Base.CellValueChangedEventHandler(this.gviewRight_CellValueChanged);
this.gviewRight.CustomColumnSort += new DevExpress.XtraGrid.Views.Base.CustomColumnSortEventHandler(this.gviewRight_CustomColumnSort);
this.gviewRight.CustomUnboundColumnData += new DevExpress.XtraGrid.Views.Base.CustomColumnDataEventHandler(this.gview_CustomUnboundColumnData);
this.gviewRight.CustomColumnDisplayText += new DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventHandler(this.gviewRight_CustomColumnDisplayText);
this.gviewRight.LayoutUpgrade += new DevExpress.Utils.LayoutUpgradeEventHandler(this.gviewRight_LayoutUpgrade);
@@ -639,6 +640,7 @@
this.colSlotOld.Name = "colSlotOld";
this.colSlotOld.OptionsColumn.AllowEdit = false;
this.colSlotOld.OptionsFilter.AllowAutoFilter = false;
this.colSlotOld.SortMode = DevExpress.XtraGrid.ColumnSortMode.Custom;
this.colSlotOld.UnboundType = DevExpress.Data.UnboundColumnType.Integer;
//
// colSlotNew

View File

@@ -31,7 +31,7 @@ namespace ChanSort.Ui
{
public partial class MainForm : XtraForm
{
public const string AppVersion = "v2017-03-29";
public const string AppVersion = "v2017-06-08";
private const int MaxMruEntries = 10;
private readonly List<string> isoEncodings = new List<string>();
@@ -186,12 +186,17 @@ namespace ChanSort.Ui
numberOfFilters = 0;
var filter = new StringBuilder();
var extension = new StringBuilder();
foreach (var plugin in this.Plugins)
var sortedPlugins = this.Plugins.ToList();
sortedPlugins.Sort((a, b) => a.PluginName.CompareTo(b.PluginName));
foreach (var plugin in sortedPlugins)
{
filter.Append(plugin.PluginName).Append("|").Append(plugin.FileFilter);
extension.Append(plugin.FileFilter);
filter.Append("|");
extension.Append(";");
if (!(";" + extension + ";").Contains(plugin.FileFilter))
{
extension.Append(plugin.FileFilter);
extension.Append(";");
}
++numberOfFilters;
}
if (extension.Length > 0)
@@ -252,7 +257,7 @@ namespace ChanSort.Ui
this.Editor.ChannelList = null;
this.gridRight.DataSource = null;
this.gridLeft.DataSource = null;
this.FillChannelListCombo();
this.FillChannelListTabs();
//this.SetControlsEnabled(!this.dataRoot.IsEmpty);
this.UpdateFavoritesEditor(this.DataRoot.SupportedFavorites);
@@ -314,9 +319,9 @@ namespace ChanSort.Ui
#endregion
#region FillChannelListCombo()
#region FillChannelListTabs()
private void FillChannelListCombo()
private void FillChannelListTabs()
{
this.tabChannelList.TabPages.Clear();
@@ -408,23 +413,60 @@ namespace ChanSort.Ui
#endregion
#region GetTvFileSerializer()
#region GetSerializerForFile()
internal ISerializerPlugin GetPluginForFile(string inputFileName)
internal SerializerBase GetSerializerForFile(string inputFileName, ref ISerializerPlugin hint)
{
if (!File.Exists(inputFileName))
{
XtraMessageBox.Show(this, string.Format(Resources.MainForm_LoadTll_SourceTllNotFound, inputFileName));
return null;
}
var upperFileName = (Path.GetFileName(inputFileName) ?? "").ToUpper();
foreach (var plugin in this.Plugins)
List<ISerializerPlugin> candidates = new List<ISerializerPlugin>();
if (hint != null)
candidates.Add(hint);
else
{
foreach (var filter in plugin.FileFilter.ToUpper().Split(';'))
var upperFileName = (Path.GetFileName(inputFileName) ?? "").ToUpper();
foreach (var plugin in this.Plugins)
{
var regex = filter.Replace(".", "\\.").Replace("*", ".*").Replace("?", ".");
if (Regex.IsMatch(upperFileName, regex))
return plugin;
foreach (var filter in plugin.FileFilter.ToUpper().Split(';'))
{
var regex = filter.Replace(".", "\\.").Replace("*", ".*").Replace("?", ".");
if (Regex.IsMatch(upperFileName, regex))
{
candidates.Add(plugin);
break;
}
}
}
}
foreach (var plugin in candidates)
{
try
{
var serializer = plugin.CreateSerializer(inputFileName);
if (serializer != null)
{
serializer.DefaultEncoding = this.defaultEncoding;
serializer.Load();
hint = plugin;
return serializer;
}
}
catch (Exception ex)
{
if (ex is ArgumentException)
{
var msg = ex.ToString();
if (msg.Contains("ZipFile..ctor()"))
{
XtraMessageBox.Show(this, string.Format(Resources.MainForm_LoadTll_InvalidZip, inputFileName));
return null;
}
}
}
}
@@ -446,18 +488,14 @@ namespace ChanSort.Ui
return false;
}
if (plugin == null)
plugin = this.GetPluginForFile(tvDataFile);
// abort action if there is no currentTvSerializer for the input file
var serializer = plugin == null ? null : plugin.CreateSerializer(tvDataFile);
SerializerBase serializer = this.GetSerializerForFile(tvDataFile, ref plugin);
if (serializer == null)
return false;
if (!this.PromptSaveAndContinue())
return false;
serializer.DefaultEncoding = this.defaultEncoding;
serializer.Load();
this.SetFileName(tvDataFile);
this.currentPlugin = plugin;
this.currentTvSerializer = serializer;
@@ -530,6 +568,7 @@ namespace ChanSort.Ui
this.BeginInvoke((Action) (() => this.ShowOpenReferenceFileDialog(false)));
else if (res == DialogResult.No)
{
//this.currentTvSerializer.ApplyCurrentProgramNumbers();
this.DataRoot.ApplyCurrentProgramNumbers();
this.RefreshGrid(this.gviewLeft, this.gviewRight);
this.rbInsertSwap.Checked = true;
@@ -590,9 +629,6 @@ namespace ChanSort.Ui
this.pageProgNr.PageVisible = true;
this.grpSubList.Visible = DataRoot.SortedFavorites;
}
//this.tabSubList.TabPages[0].PageVisible = !channelList.IsMixedSourceFavoritesList;
//this.pageProgNr.Enabled = this.pageProgNr.Visible;
}
else
{
@@ -610,7 +646,7 @@ namespace ChanSort.Ui
UpdateGridReadOnly();
this.UpdateInsertSlotTextBox();
this.UpdateInsertSlotNumber();
this.UpdateMenu();
this.mnuFavList.Enabled = this.grpSubList.Visible;
@@ -703,7 +739,7 @@ namespace ChanSort.Ui
{
foreach (var channel in list.Channels)
{
if (channel.NewProgramNr < 0)
if (channel.NewProgramNr < 0 && channel.OldProgramNr >= 0)
{
hasUnsorted = true;
break;
@@ -871,6 +907,8 @@ namespace ChanSort.Ui
// remove all the selected channels which are about to be added.
// This may require an adjustment of the insert position when channels are removed in front of it and gaps are closed.
var insertSlot = this.CurrentChannelList.InsertProgramNumber;
if (insertSlot == 1 && this.rbInsertAfter.Checked && this.gviewLeft.RowCount == 0)
insertSlot = 0;
var contextRow = (ChannelInfo)this.gviewLeft.GetFocusedRow();
if (contextRow != null)
{
@@ -1684,7 +1722,7 @@ namespace ChanSort.Ui
if (this.currentTvSerializer != null && this.currentTvSerializer.Features.CleanUpChannelData)
{
var msg = this.currentTvSerializer.CleanUpChannelData();
this.FillChannelListCombo();
this.FillChannelListTabs();
InfoBox.Show(this, msg, this.miCleanupChannels.Caption);
this.RefreshGrid(gviewLeft, gviewRight);
}
@@ -1837,11 +1875,13 @@ namespace ChanSort.Ui
this.gviewLeft.BeginSort();
this.gviewLeft.EndSort();
this.gviewRight.BeginSort();
if (this.subListIndex > 0)
if (this.subListIndex > 0 && !this.CurrentChannelList.IsMixedSourceFavoritesList)
this.colPrNr.FilterInfo = new ColumnFilterInfo("[NewProgramNr]<>-1");
else
this.colPrNr.ClearFilter();
this.gviewRight.EndSort();
this.UpdateInsertSlotNumber();
}
#endregion
@@ -2050,7 +2090,7 @@ namespace ChanSort.Ui
{
var channel = (ChannelInfo) this.gviewLeft.GetRow(e.RowHandle);
if (channel == null) return;
if (channel.OldProgramNr == -1)
if (channel.IsProxy)
{
e.Appearance.ForeColor = Color.Red;
e.Appearance.Options.UseForeColor = true;
@@ -2190,7 +2230,7 @@ namespace ChanSort.Ui
{
var channel = (ChannelInfo) this.gviewRight.GetRow(e.RowHandle);
if (channel == null) return;
if (channel.OldProgramNr == -1)
if (channel.IsProxy)
{
e.Appearance.ForeColor = Color.Red;
e.Appearance.Options.UseForeColor = true;
@@ -2261,6 +2301,22 @@ namespace ChanSort.Ui
#endregion
#region gviewRight_CustomColumnSort
private void gviewRight_CustomColumnSort(object sender, CustomColumnSortEventArgs e)
{
if (e.Column == this.colSlotOld)
{
// sort unassigned channels (PrNr = -1) to the bottom of the list
var ch1 = (int)this.gviewRight.GetListSourceRowCellValue(e.ListSourceRowIndex1, e.Column);
var ch2 = (int)this.gviewRight.GetListSourceRowCellValue(e.ListSourceRowIndex2, e.Column);
if (ch1 < 0) ch1 = int.MaxValue;
if (ch2 < 0) ch2 = int.MaxValue;
e.Result = System.Collections.Comparer.Default.Compare(ch1, ch2);
e.Handled = true;
}
}
#endregion
#region gviewRight_PopupMenuShowing
private void gviewRight_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e)
@@ -2286,10 +2342,16 @@ namespace ChanSort.Ui
if (this.CurrentChannelList == null)
return;
var delta = this.curEditMode == EditMode.InsertAfter
? -1
: this.rbInsertAfter.Checked ? +1 : 0;
this.CurrentChannelList.InsertProgramNumber += delta;
if (this.gviewLeft.RowCount == 0)
this.CurrentChannelList.InsertProgramNumber = 1;
else
{
var delta = this.curEditMode == EditMode.InsertAfter
? -1
: this.rbInsertAfter.Checked ? +1 : 0;
this.CurrentChannelList.InsertProgramNumber += delta;
}
this.UpdateInsertSlotTextBox();
this.curEditMode = this.rbInsertBefore.Checked
? EditMode.InsertBefore
@@ -2458,8 +2520,9 @@ namespace ChanSort.Ui
{
this.gviewRight.BeginSort();
this.gviewRight.ClearColumnsFilter();
this.colSlotOld.FilterInfo = new ColumnFilterInfo("[OldProgramNr]<>-1");
if (this.subListIndex > 0)
if (this.DataRoot != null && !this.DataRoot.ShowDeletedChannels)
this.colSlotOld.FilterInfo = new ColumnFilterInfo("[OldProgramNr]<>-1");
if (this.subListIndex > 0 && !this.CurrentChannelList.IsMixedSourceFavoritesList)
this.colPrNr.FilterInfo = new ColumnFilterInfo("[NewProgramNr]<>-1");
this.gviewRight.EndSort();
}

View File

@@ -211,7 +211,7 @@
</data>
<data name="colUid1.Caption" xml:space="preserve">
<value>UID</value>
<comment>@Invariant</comment></data>
</data>
<data name="colOutLock.Caption" xml:space="preserve">
<value>Lock</value>
</data>
@@ -373,7 +373,7 @@
</data>
<data name="grpSubList.Text" xml:space="preserve">
<value>Sub List</value>
<comment>@Invariant</comment></data>
</data>
<data name="grpSubList.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
@@ -466,37 +466,37 @@
</data>
<data name="miFavASet.Caption" xml:space="preserve">
<value>&amp;A</value>
<comment>@Invariant</comment></data>
</data>
<data name="miFavBSet.Caption" xml:space="preserve">
<value>&amp;B</value>
<comment>@Invariant</comment></data>
</data>
<data name="miFavCSet.Caption" xml:space="preserve">
<value>&amp;C</value>
<comment>@Invariant</comment></data>
</data>
<data name="miFavDSet.Caption" xml:space="preserve">
<value>&amp;D</value>
<comment>@Invariant</comment></data>
</data>
<data name="miFavESet.Caption" xml:space="preserve">
<value>&amp;E</value>
<comment>@Invariant</comment></data>
</data>
<data name="mnuFavUnset.Caption" xml:space="preserve">
<value>Remove from Favorites</value>
</data>
<data name="miFavAUnset.Caption" xml:space="preserve">
<value>&amp;A</value>
<comment>@Invariant</comment></data>
</data>
<data name="miFavBUnset.Caption" xml:space="preserve">
<value>&amp;B</value>
<comment>@Invariant</comment></data>
</data>
<data name="miFavCUnset.Caption" xml:space="preserve">
<value>&amp;C</value>
<comment>@Invariant</comment></data>
</data>
<data name="miFavDUnset.Caption" xml:space="preserve">
<value>&amp;D</value>
<comment>@Invariant</comment></data>
</data>
<data name="miFavEUnset.Caption" xml:space="preserve">
<value>&amp;E</value>
<comment>@Invariant</comment></data>
</data>
<data name="miLockOn.Caption" xml:space="preserve">
<value>&amp;Lock channel: on</value>
</data>
@@ -535,16 +535,16 @@
</data>
<data name="miEnglish.Caption" xml:space="preserve">
<value>&amp;English</value>
<comment>@Invariant</comment></data>
</data>
<data name="miGerman.Caption" xml:space="preserve">
<value>&amp;Deutsch</value>
<comment>@Invariant</comment></data>
</data>
<data name="miPortuguese.Caption" xml:space="preserve">
<value>Português</value>
<comment>@Invariant</comment></data>
</data>
<data name="miRussian.Caption" xml:space="preserve">
<value>ру́сский</value>
<comment>@Invariant</comment></data>
</data>
<data name="miCzech.Caption" xml:space="preserve">
<value>Česky</value>
</data>
@@ -580,7 +580,7 @@
</data>
<data name="mnuInputSource.Caption" xml:space="preserve">
<value>mnuInputSource</value>
<comment>@Invariant</comment></data>
</data>
<data name="mnuGotoFavList.AccessibleDescription" xml:space="preserve">
<value>Opens a submenu for the program of favorite list selection. This menu can be directly activated with the Shift+F1 key</value>
</data>
@@ -589,7 +589,7 @@
</data>
<data name="mnuFavList.Caption" xml:space="preserve">
<value>mnuFavList</value>
<comment>@Invariant</comment></data>
</data>
<data name="miSelectFavList0.Caption" xml:space="preserve">
<value>Program list</value>
</data>
@@ -1013,7 +1013,7 @@
</data>
<data name="txtSetSlot.Properties.Mask.EditMask" xml:space="preserve">
<value>\d{1,4}</value>
<comment>@Invariant</comment></data>
</data>
<data name="txtSetSlot.Properties.Mask.MaskType" type="DevExpress.XtraEditors.Mask.MaskType, DevExpress.XtraEditors.v15.2">
<value>RegEx</value>
</data>
@@ -1852,7 +1852,7 @@
<value>DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v15.2, Version=15.2.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="SharedImageCollection.Timestamp" type="System.DateTime, mscorlib">
<value>01/26/2017 12:52:08</value>
<value>06/08/2017 17:07:00</value>
</data>
<data name="SharedImageCollection.ImageSize" type="System.Drawing.Size, System.Drawing">
<value>16, 16</value>
@@ -1898,7 +1898,7 @@
</data>
<data name="btnToggleFavE.Text" xml:space="preserve">
<value>±E</value>
<comment>@Invariant</comment></data>
</data>
<data name="&gt;&gt;btnToggleFavE.Name" xml:space="preserve">
<value>btnToggleFavE</value>
</data>
@@ -1925,7 +1925,7 @@
</data>
<data name="btnToggleFavD.Text" xml:space="preserve">
<value>±D</value>
<comment>@Invariant</comment></data>
</data>
<data name="&gt;&gt;btnToggleFavD.Name" xml:space="preserve">
<value>btnToggleFavD</value>
</data>
@@ -1952,7 +1952,7 @@
</data>
<data name="btnToggleFavC.Text" xml:space="preserve">
<value>±C</value>
<comment>@Invariant</comment></data>
</data>
<data name="&gt;&gt;btnToggleFavC.Name" xml:space="preserve">
<value>btnToggleFavC</value>
</data>
@@ -1979,7 +1979,7 @@
</data>
<data name="btnToggleFavB.Text" xml:space="preserve">
<value>±B</value>
<comment>@Invariant</comment></data>
</data>
<data name="&gt;&gt;btnToggleFavB.Name" xml:space="preserve">
<value>btnToggleFavB</value>
</data>
@@ -2006,7 +2006,7 @@
</data>
<data name="btnToggleFavA.Text" xml:space="preserve">
<value>±A</value>
<comment>@Invariant</comment></data>
</data>
<data name="&gt;&gt;btnToggleFavA.Name" xml:space="preserve">
<value>btnToggleFavA</value>
</data>
@@ -2213,7 +2213,7 @@
</data>
<data name="splitContainerControl1.Panel1.Text" xml:space="preserve">
<value>Panel1</value>
<comment>@Invariant</comment></data>
</data>
<data name="gridRight.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
@@ -2438,7 +2438,7 @@
</data>
<data name="colTransportStreamId.Caption" xml:space="preserve">
<value>TS ID</value>
<comment>@Invariant</comment></data>
</data>
<data name="colTransportStreamId.ToolTip" xml:space="preserve">
<value>Transport Stream ID</value>
</data>
@@ -2534,7 +2534,7 @@
</data>
<data name="colUid.Caption" xml:space="preserve">
<value>Uid</value>
<comment>@Invariant</comment></data>
</data>
<data name="colUid.Width" type="System.Int32, mscorlib">
<value>120</value>
</data>
@@ -2801,7 +2801,7 @@ specific provider, satellite or country lists.</value>
</data>
<data name="splitContainerControl1.Panel2.Text" xml:space="preserve">
<value>Panel2</value>
<comment>@Invariant</comment></data>
</data>
<data name="splitContainerControl1.Size" type="System.Drawing.Size, System.Drawing">
<value>1444, 459</value>
</data>
@@ -2810,7 +2810,7 @@ specific provider, satellite or country lists.</value>
</data>
<data name="splitContainerControl1.Text" xml:space="preserve">
<value>splitContainerControl1</value>
<comment>@Invariant</comment></data>
</data>
<data name="&gt;&gt;splitContainerControl1.Name" xml:space="preserve">
<value>splitContainerControl1</value>
</data>

View File

@@ -238,6 +238,17 @@ namespace ChanSort.Ui.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to The file is not a valid .zip archive.
///TVs often export corrupted files to USB sticks formatted with the NTFS file system.
///Please try exporting to a stick formatted with FAT32.
/// </summary>
internal static string MainForm_LoadTll_InvalidZip {
get {
return ResourceManager.GetString("MainForm_LoadTll_InvalidZip", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to No plugin found to read/write {0} files..
/// </summary>

View File

@@ -292,4 +292,9 @@ Mögliche Ursachen sind USB-Sticks, die mit NTFS formatiert sind (FAT32 sollte i
<data name="ReferenceListForm_ShowOpenFileDialog_Title" xml:space="preserve">
<value>Wählen Sie eine Vorlagedatei für die Senderreihenfolge</value>
</data>
<data name="MainForm_LoadTll_InvalidZip" xml:space="preserve">
<value>Diese Datei ist kein gültiges .zip Archiv.
TVs exportieren oft defekte Dateien auf USB Sticks, die mit NTFS formatiert sind.
Bitte versuchen Sie, die Senderliste auf einen Stick mit FAT32 Formatierung zu exportieren.</value>
</data>
</root>

View File

@@ -296,4 +296,9 @@ or firmware upgrades without running a new channel scan.
<data name="MainForm_ShowOpenReferenceFileDialog_Title" xml:space="preserve">
<value>Open Reference List</value>
</data>
<data name="MainForm_LoadTll_InvalidZip" xml:space="preserve">
<value>The file is not a valid .zip archive.
TVs often export corrupted files to USB sticks formatted with the NTFS file system.
Please try exporting to a stick formatted with FAT32</value>
</data>
</root>

View File

@@ -76,10 +76,8 @@ namespace ChanSort.Ui
if (main.DetectCommonFileCorruptions(dlg.FileName))
return null;
var plugin = dlg.FilterIndex <= main.Plugins.Count ? main.Plugins[dlg.FilterIndex - 1] : main.GetPluginForFile(dlg.FileName);
var ser = plugin.CreateSerializer(dlg.FileName);
ser.Load();
return ser;
ISerializerPlugin hint = dlg.FilterIndex <= main.Plugins.Count ? main.Plugins[dlg.FilterIndex - 1] : null;
return main.GetSerializerForFile(dlg.FileName, ref hint);
}
}
catch