diff --git a/source/ChanSort.Api/Resources.Designer.cs b/source/ChanSort.Api/Resources.Designer.cs index c51a8f1..e74e878 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", "16.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { diff --git a/source/ChanSort.Api/Resources.it.resx b/source/ChanSort.Api/Resources.it.resx new file mode 100644 index 0000000..ea3bfcd --- /dev/null +++ b/source/ChanSort.Api/Resources.it.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {0} Il programma #{1} è assegnato a più canali: indice {2}='{3}' e indice {4}='{5}' + + + {0}: il canale '{1}' ha più record di dati: indice {2}=Pr#{3} e indice {4}=Pr#{5} + + \ No newline at end of file diff --git a/source/ChanSort.Loader.Hisense/ChanSort.Loader.Hisense.ini b/source/ChanSort.Loader.Hisense/ChanSort.Loader.Hisense.ini index b8d2c8c..5019a29 100644 --- a/source/ChanSort.Loader.Hisense/ChanSort.Loader.Hisense.ini +++ b/source/ChanSort.Loader.Hisense/ChanSort.Loader.Hisense.ini @@ -2,6 +2,9 @@ ; HIS_SVL.BIN, HIS_TSL.BIN and HIS_FAV.BIN ; ======================================== +; there are several versions of this format, with no deterministic way to detect the format +; ChanSort checks if the file sizes are multiples of the record sizes to guesstimate the version + [Header] RecordSize=40 ID=0 @@ -12,16 +15,20 @@ BlockSize=36 [Version1] TSL_Record=304 SVL_Record=264 +FAV_Header=24 +FAV_Record=80 ReadDvb=false [Version2] TSL_Record=328 SVL_Record=304 +FAV_Header=16 +FAV_Record=80 ReadDvb=true ;=== variant with 304 byte TSL record and 264 bytes SVL record (LTDN55K390XWSEU3D V00.01.00a.E0430) -[TSL_Record:304] +[TSL_Record:Version1] RecordSize=304 ID=0 BroadcastType=2 @@ -34,7 +41,7 @@ DvbsSymbolRate=28 Name=188 NameSize=28 -[SVL_Record:264] +[SVL_Record:Version1] RecordSize=264 RecordId=0 @@ -79,10 +86,26 @@ NameSize=16 BroadcastSystemData=48 +[FAV_Header:Version1] +RecordSize=24 +CountFav1=16 +CountFav2=18 +CountFav3=20 +CountFav4=22 + +[FAV_Record:Version1] +RecordSize=80 +SvlTableId=0 +SvlRecordId=2 +DisplayNumber=4 +DisplayNumberSize=10 +ChannelName=15 +ChannelNameSize=64 + ;=== variant with 328 byte TSL record and 304 bytes SVL record -[TSL_Record:328] +[TSL_Record:Version2] RecordSize=328 ID=0 BroadcastType=2 @@ -96,7 +119,7 @@ DvbsSymbolRate=28 Name=216 NameSize=32 -[SVL_Record:304] +[SVL_Record:Version2] RecordSize=304 RecordId=0 @@ -141,7 +164,7 @@ NameSize=96 BroadcastSystemData=136 -[DVB_Data] +[DVB_Data:Version2] ShortName=4 ShortNameSize=16 LinkageMask=28 @@ -154,7 +177,14 @@ DvbcTsid=118 DvbcOnid=120 ServiceType=129 -[FAV_Record] +[FAV_Header:Version2] +RecordSize=16 +SizeFav1=0 +SizeFav2=4 +SizeFav3=8 +SizeFav4=12 + +[FAV_Record:Version2] RecordSize=80 SvlTableId=0 SvlRecordId=2 diff --git a/source/ChanSort.Loader.Hisense/HisBin/HisSvlBinSerializer.cs b/source/ChanSort.Loader.Hisense/HisBin/HisSvlBinSerializer.cs index 96f2e00..9c3927f 100644 --- a/source/ChanSort.Loader.Hisense/HisBin/HisSvlBinSerializer.cs +++ b/source/ChanSort.Loader.Hisense/HisBin/HisSvlBinSerializer.cs @@ -12,7 +12,7 @@ namespace ChanSort.Loader.Hisense.HisBin; * * This binary format is based on a customized MediaTek format, which means that there may be many incompatible * variants that can't be identified and distinguished easily. - * This loader only supports the known HiSense variants with 264 and 304 bytes per channel in HIS_SVL.BIN. + * This loader supports 2 known versions with 264 and 304 bytes per channel in HIS_SVL.BIN, which also differ in TSL and FAV file layouts * * See also the his-svl.h file in Information/FileStructures_for_HHD_Hex_Editor_Neo * @@ -32,6 +32,7 @@ public class HisSvlBinSerializer : SerializerBase private string favFileName; private byte[] svlFileContent; private byte[] tslFileContent; + private byte[] favFileContent; private const int MaxFileSize = 4 << 20; // 4 MB private bool readDvbData; @@ -42,7 +43,7 @@ public class HisSvlBinSerializer : SerializerBase private const string ERR_badFileFormat = "The content of the file doesn't match the expected format."; private IniFile ini; - private DataMapping headerMapping, svlMapping, tslMapping, dvbMapping, favMapping; + private DataMapping headerMapping, svlMapping, tslMapping, dvbMapping, favHeaderMapping, favMapping; private readonly Dictionary transponder = new (); #region ctor() @@ -82,10 +83,6 @@ public class HisSvlBinSerializer : SerializerBase this.ini = new IniFile(iniFile); this.headerMapping = new DataMapping(ini.GetSection("Header")); this.headerRecordSize = headerMapping.Settings.GetInt("RecordSize"); - - this.dvbMapping = new DataMapping(ini.GetSection("DVB_Data")); - this.dvbMapping.DefaultEncoding = this.DefaultEncoding; - this.favMapping = new DataMapping(ini.GetSection("FAV_Record")); } #endregion @@ -115,6 +112,7 @@ public class HisSvlBinSerializer : SerializerBase { var svlLen = new FileInfo(this.FileName).Length; var tslLen = new FileInfo(tslName).Length; + var favLen = new FileInfo(this.favFileName).Length; IniFile.Section candidate = null; foreach (var section in this.ini.Sections) { @@ -124,22 +122,29 @@ public class HisSvlBinSerializer : SerializerBase continue; if ((svlLen - this.headerRecordSize * 3) % section.GetInt("SVL_Record") != 0) continue; + if (favLen != 0 && (favLen - section.GetInt("FAV_Header")) % section.GetInt("FAV_Record") != 0) + continue; if (candidate != null) throw LoaderException.Fail("Unable to uniquely infer file format from its content"); candidate = section; } if (candidate == null) - throw LoaderException.Fail("File content doesn't match any known SVL/TSL/FAV.bin data format versions"); + throw LoaderException.Fail("File content doesn't match any known SVL/TSL/FAV.bin format versions"); - var tslRecordSize = candidate.GetInt("TSL_Record"); this.svlRecordSize = candidate.GetInt("SVL_Record"); this.readDvbData = candidate.GetBool("ReadDvb"); - this.svlMapping = new DataMapping(ini.GetSection("SVL_Record:" + this.svlRecordSize)); - this.svlMapping.DefaultEncoding = this.DefaultEncoding; - this.tslMapping = new DataMapping(ini.GetSection("TSL_Record:" + tslRecordSize)); + this.tslMapping = new DataMapping(ini.GetSection("TSL_Record:" + candidate.Name)); this.tslMapping.DefaultEncoding = this.DefaultEncoding; + this.svlMapping = new DataMapping(ini.GetSection("SVL_Record:" + candidate.Name)); + this.svlMapping.DefaultEncoding = this.DefaultEncoding; + this.dvbMapping = new DataMapping(ini.GetSection("DVB_Data:" + candidate.Name)); + this.dvbMapping.DefaultEncoding = this.DefaultEncoding; + this.favHeaderMapping = new DataMapping(ini.GetSection("FAV_Header:" + candidate.Name)); + this.favHeaderMapping.DefaultEncoding = this.DefaultEncoding; + this.favMapping = new DataMapping(ini.GetSection("FAV_Record:" + candidate.Name)); + this.favMapping.DefaultEncoding = this.DefaultEncoding; } #endregion @@ -389,17 +394,29 @@ public class HisSvlBinSerializer : SerializerBase { if (!File.Exists(filename)) return; - var content = File.ReadAllBytes(filename); - var favListSizes = new int[4]; - for (int i = 0; i < 4; i++) - favListSizes[i] = BitConverter.ToInt32(content, i * 4); + var content = this.favFileContent = File.ReadAllBytes(filename); + int[] favCount = new int[4]; var recSize = favMapping.Settings.GetInt("RecordSize"); + favHeaderMapping.SetDataPtr(content, 0); + if (favHeaderMapping.Settings.GetInt("SizeFav1", -1) >= 0) + { + for (int i = 0; i < 4; i++) + favCount[i] = BitConverter.ToInt32(content, i * 4) / recSize; + } + else if (favHeaderMapping.Settings.GetInt("CountFav1", -1) >= 0) + { + for (int i = 0; i < 4; i++) + favCount[i] = favHeaderMapping.GetWord("CountFav" + (i+1)); + } + else + return; + var dispNumLen = favMapping.Settings.GetInt("DisplayNumberSize"); - favMapping.SetDataPtr(content, 16 - recSize); + favMapping.SetDataPtr(content, favHeaderMapping.Settings.GetInt("RecordSize") - recSize); for (int i = 0; i < 4; i++) { - for (int j = 0, c = favListSizes[i] / recSize; j < c; j++) + for (int j = 0, c = favCount[i]; j < c; j++) { favMapping.BaseOffset += recSize; @@ -525,8 +542,7 @@ public class HisSvlBinSerializer : SerializerBase using var mem = new MemoryStream(); using var writer = new BinaryWriter(mem); - for (int i=0; i<4; i++) - writer.Write(0); + writer.Write(this.favFileContent, 0, this.favHeaderMapping.Settings.GetInt("RecordSize")); var favRecordSize = favMapping.Settings.GetInt("RecordSize"); var tmp = new byte[favRecordSize]; @@ -552,12 +568,11 @@ public class HisSvlBinSerializer : SerializerBase } // update header - writer.Flush(); - var off = mem.Position; - mem.Seek((i-1) * 4, SeekOrigin.Begin); - writer.Write(order.Count * favRecordSize); - writer.Flush(); - mem.Seek(off, SeekOrigin.Begin); + favHeaderMapping.SetDataPtr(mem.GetBuffer(), 0); // the MemStream buffer gets reallocated while adding data + if (favHeaderMapping.Settings.Keys.Contains("SizeFav1")) + favHeaderMapping.SetDword("SizeFav" + i, order.Count * favRecordSize); + else if (favHeaderMapping.Settings.Keys.Contains("CountFav1")) + favHeaderMapping.SetWord("CountFav" + i, order.Count); } tmp = new byte[mem.Length]; @@ -589,11 +604,12 @@ public class HisSvlBinSerializer : SerializerBase return; base.DefaultEncoding = value; - this.dvbMapping.DefaultEncoding = value; if (this.svlMapping != null) { this.svlMapping.DefaultEncoding = value; this.tslMapping.DefaultEncoding = value; + this.dvbMapping.DefaultEncoding = value; + this.favMapping.DefaultEncoding = value; this.ReparseNames(); } } diff --git a/source/ChanSort.Loader.Hisense/Resources.Designer.cs b/source/ChanSort.Loader.Hisense/Resources.Designer.cs index 003475d..60de62b 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", "16.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { diff --git a/source/ChanSort.Loader.Hisense/Resources.it.resx b/source/ChanSort.Loader.Hisense/Resources.it.resx new file mode 100644 index 0000000..5b5646c --- /dev/null +++ b/source/ChanSort.Loader.Hisense/Resources.it.resx @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Questo file di elenco canali non contiene dati. +Molto probabilmente durante la configurazione iniziale del televisore è stato selezionato un elenco di canali predefinito. Tali elenchi non vengono esportati e non possono essere modificati sulla TV o sul PC. +Per ottenere un elenco che può essere modificato sul tuo PC, devi ripristinare il televisore alle impostazioni di fabbrica e selezionare l'opzione 'Altro' durante l'impostazione del canale satellitare. + + + Nessun canale trovato + + \ No newline at end of file diff --git a/source/ChanSort.Loader.LG/ChanSort.Loader.LG.csproj b/source/ChanSort.Loader.LG/ChanSort.Loader.LG.csproj index 59c639a..5d121e2 100644 --- a/source/ChanSort.Loader.LG/ChanSort.Loader.LG.csproj +++ b/source/ChanSort.Loader.LG/ChanSort.Loader.LG.csproj @@ -52,6 +52,6 @@ - + \ No newline at end of file diff --git a/source/ChanSort.Loader.LG/Resource.it.resx b/source/ChanSort.Loader.LG/Resource.it.resx new file mode 100644 index 0000000..53fd930 --- /dev/null +++ b/source/ChanSort.Loader.LG/Resource.it.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Checksum errato: calcolato {1:x8} ma il file ha {0:x8} + + + Il contenuto del file non corrisponde a nessun modello supportato + + + La dimensione del file {0} è maggiore del massimo consentito di {1} + + + Il canale #{0} (Pr# {1}) è stato cancellato perché è un duplicato del canale #{2} (Pr# {3}): {4} + + \ No newline at end of file diff --git a/source/ChanSort.Loader.Medion/ChanSort.Loader.Medion.csproj b/source/ChanSort.Loader.Medion/ChanSort.Loader.Medion.csproj index 73e5756..aa74b31 100644 --- a/source/ChanSort.Loader.Medion/ChanSort.Loader.Medion.csproj +++ b/source/ChanSort.Loader.Medion/ChanSort.Loader.Medion.csproj @@ -6,7 +6,7 @@ - + diff --git a/source/ChanSort.Loader.Samsung/ChanSort.Loader.Samsung.csproj b/source/ChanSort.Loader.Samsung/ChanSort.Loader.Samsung.csproj index c6bfd92..5e9f395 100644 --- a/source/ChanSort.Loader.Samsung/ChanSort.Loader.Samsung.csproj +++ b/source/ChanSort.Loader.Samsung/ChanSort.Loader.Samsung.csproj @@ -26,6 +26,7 @@ latest + @@ -38,6 +39,7 @@ + diff --git a/source/ChanSort.Loader.Samsung/Zip/DbChannel.cs b/source/ChanSort.Loader.Samsung/Zip/DbChannel.cs index 3c01376..c179c66 100644 --- a/source/ChanSort.Loader.Samsung/Zip/DbChannel.cs +++ b/source/ChanSort.Loader.Samsung/Zip/DbChannel.cs @@ -1,11 +1,18 @@ using System.Collections.Generic; using System.Data; +using System.IO; +using System.Text; +using Newtonsoft.Json; using ChanSort.Api; namespace ChanSort.Loader.Samsung.Zip { internal class DbChannel : ChannelInfo { + private dynamic jsonMeta; + private Encoding encoding; + public bool JsonModified { get; private set; } + #region ctor() internal DbChannel(IDataReader r, IDictionary field, DbSerializer loader, Dictionary providers, Satellite sat, Transponder tp) { @@ -40,9 +47,10 @@ namespace ChanSort.Loader.Samsung.Zip if ((this.SignalSource & SignalSource.Dvb) != 0) this.ReadDvbData(r, field, loader, providers); - else + else if ((this.SignalSource & SignalSource.Analog) != 0) this.ReadAnalogData(r, field); - + if (field.ContainsKey("jsonMeta")) + this.ReadIpData(r, field, loader); base.IsDeleted = this.OldProgramNr == -1; } @@ -72,5 +80,62 @@ namespace ChanSort.Loader.Samsung.Zip this.AddDebug(r.GetInt32(field["lcn"]).ToString()); } #endregion + + #region ReadIpData() + + private void ReadIpData(IDataReader r, IDictionary field, DbSerializer loader) + { + var json = loader.ReadUtf16(r, field["jsonMeta"]); + if (json != null) + { + var s = JsonSerializer.Create(); + dynamic obj = s.Deserialize(new JsonTextReader(new StringReader(json))); + this.encoding = loader.DefaultEncoding; + this.jsonMeta = obj; + this.JsonDefaultUrl = obj?.default_url; + this.JsonLogoUrl = obj?.logo_url; + } + } + #endregion + + #region JsonDefaultUrl + public string JsonDefaultUrl + { + get => jsonMeta?.default_url; + set + { + if (jsonMeta == null || value == (string)jsonMeta.default_url.Value) + return; + jsonMeta.default_url = value; + JsonModified = true; + } + } + #endregion + + #region JsonLogoUrl + public string JsonLogoUrl + { + get => jsonMeta?.logo_url; + set + { + if (jsonMeta == null || value == (string)jsonMeta.logo_url.Value) + return; + jsonMeta.logo_url = value; + JsonModified = true; + } + } + #endregion + + #region GetRawJson() + public byte[] GetRawJson() + { + var s = JsonSerializer.Create(); + using var w = new StringWriter(); + s.Serialize(new JsonTextWriter(w), this.jsonMeta); + w.Flush(); + var rawJson = Encoding.BigEndianUnicode.GetBytes(w.ToString()); + return rawJson; + } + #endregion } } diff --git a/source/ChanSort.Loader.Samsung/Zip/DbSerializer.cs b/source/ChanSort.Loader.Samsung/Zip/DbSerializer.cs index fb405e6..233cc18 100644 --- a/source/ChanSort.Loader.Samsung/Zip/DbSerializer.cs +++ b/source/ChanSort.Loader.Samsung/Zip/DbSerializer.cs @@ -261,6 +261,8 @@ namespace ChanSort.Loader.Samsung.Zip }; if (fileType == FileType.ChannelDbDvb) fieldNames.AddRange(new[] {"onid", "tsid", "vidPid", "provId", "cast(shrtSrvName as blob) shrtSrvName", "lcn"}); // SRV_DVB + if (fileType == FileType.ChannelDbIp) + fieldNames.AddRange(new [] {"cast(jsonMeta as blob) jsonMeta"}); var sql = this.BuildQuery(table, fieldNames); var fields = this.GetFieldMap(fieldNames); @@ -303,7 +305,7 @@ namespace ChanSort.Loader.Samsung.Zip { list.VisibleColumnFieldNames = new List { - "OldPosition", "Position", "PrNr", "Name", "Favorites", "SymbolRate" + "OldPosition", "Position", "PrNr", "Name", "Favorites", "SymbolRate", "+JsonDefaultUrl", "+JsonLogoUrl" }; } return list; @@ -542,8 +544,9 @@ namespace ChanSort.Loader.Samsung.Zip using var cmdInsertFav = PrepareInsertFavCommand(conn); using var cmdUpdateFav = PrepareUpdateFavCommand(conn); using var cmdDeleteFav = PrepareDeleteFavCommand(conn); + using var cmdUpdateIp = (channelList.SignalSource & SignalSource.Ip) != 0 ? PrepareUpdateIpCommand(conn) : null; Editor.SequentializeFavPos(channelList, 5); - this.WriteChannels(cmdUpdateSrv, cmdDeleteSrv, cmdInsertFav, cmdUpdateFav, cmdDeleteFav, channelList); + this.WriteChannels(cmdUpdateSrv, cmdDeleteSrv, cmdInsertFav, cmdUpdateFav, cmdDeleteFav, cmdUpdateIp, channelList); trans.Commit(); } @@ -573,6 +576,16 @@ namespace ChanSort.Loader.Samsung.Zip return cmd; } + private SqliteCommand PrepareUpdateIpCommand(SqliteConnection conn) + { + var cmd = conn.CreateCommand(); + cmd.CommandText = "update SRV_IP set jsonMeta=@jsonMeta where srvId=@id"; + cmd.Parameters.Add("@id", SqliteType.Integer); + cmd.Parameters.Add("@jsonMeta", SqliteType.Blob); + cmd.Prepare(); + return cmd; + } + private SqliteCommand PrepareDeleteCommand(SqliteConnection conn, bool digital) { var cmd = conn.CreateCommand(); @@ -623,7 +636,7 @@ namespace ChanSort.Loader.Samsung.Zip #endregion #region WriteChannels() - private void WriteChannels(SqliteCommand cmdUpdateSrv, SqliteCommand cmdDeleteSrv, SqliteCommand cmdInsertFav, SqliteCommand cmdUpdateFav, SqliteCommand cmdDeleteFav, + private void WriteChannels(SqliteCommand cmdUpdateSrv, SqliteCommand cmdDeleteSrv, SqliteCommand cmdInsertFav, SqliteCommand cmdUpdateFav, SqliteCommand cmdDeleteFav, SqliteCommand cmdUpdateIp, ChannelList channelList, bool analog = false) { bool canUpdateNames = this.Features.ChannelNameEdit != ChannelNameEditMode.None; @@ -652,6 +665,13 @@ namespace ChanSort.Loader.Samsung.Zip cmdUpdateSrv.Parameters["@srvname"].Value = channel.Name == null ? (object)DBNull.Value : encoding.GetString(Encoding.Unicode.GetBytes(channel.Name)); // convert string => UTF16LE => string with flipped byte order (looking "Chinese") cmdUpdateSrv.ExecuteNonQuery(); + if (cmdUpdateIp != null && channel.JsonModified) + { + cmdUpdateIp.Parameters["@id"].Value = channel.RecordIndex; + cmdUpdateIp.Parameters["@jsonMeta"].Value = channel.GetRawJson(); + cmdUpdateIp.ExecuteNonQuery(); + } + // update favorites for (int i=0, mask=1; i<5; i++, mask <<= 1) { diff --git a/source/ChanSort/AboutForm.cs.resx b/source/ChanSort/AboutForm.cs.resx index 6fceaf3..43df580 100644 --- a/source/ChanSort/AboutForm.cs.resx +++ b/source/ChanSort/AboutForm.cs.resx @@ -135,4 +135,16 @@ Webové stránky projektu: + + http://github.com/PredatH0r/ChanSort + + + horst@beham.biz + + + GNU GPLv3 + + + Horst Beham + \ No newline at end of file diff --git a/source/ChanSort/AboutForm.it.resx b/source/ChanSort/AboutForm.it.resx new file mode 100644 index 0000000..9e462cd --- /dev/null +++ b/source/ChanSort/AboutForm.it.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Sito web del progetto + + + http://github.com/PredatH0r/ChanSort + + + horst@beham.biz + + + Autore programma: + + + Licenza: + + + GNU GPLv3 + + + Crediti: + + + Chiudi + + + Horst Beham + + + Su ChanSort + + \ No newline at end of file diff --git a/source/ChanSort/AboutForm.ro.resx b/source/ChanSort/AboutForm.ro.resx index c765f8c..5a9fbd6 100644 --- a/source/ChanSort/AboutForm.ro.resx +++ b/source/ChanSort/AboutForm.ro.resx @@ -135,4 +135,7 @@ Despre ChanSort + + Horst Beham + \ No newline at end of file diff --git a/source/ChanSort/ActionBox.it.resx b/source/ChanSort/ActionBox.it.resx new file mode 100644 index 0000000..4125a4f --- /dev/null +++ b/source/ChanSort/ActionBox.it.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Come vorresti continuare? + + + Scegli un'azione… + + \ No newline at end of file diff --git a/source/ChanSort/ChanSort.csproj b/source/ChanSort/ChanSort.csproj index b07a632..9d37f6e 100644 --- a/source/ChanSort/ChanSort.csproj +++ b/source/ChanSort/ChanSort.csproj @@ -111,9 +111,7 @@ Component - - Component - + Component @@ -215,6 +213,7 @@ + diff --git a/source/ChanSort/CharsetForm.it.resx b/source/ChanSort/CharsetForm.it.resx new file mode 100644 index 0000000..a61891b --- /dev/null +++ b/source/ChanSort/CharsetForm.it.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Annulla + + + Set di caratteri predefinito per il mio paese + + + Ok + + + Set di carattteri + + + Descrizione + + \ No newline at end of file diff --git a/source/ChanSort/GlobalImageCollection.cs b/source/ChanSort/GlobalImageCollection.cs index a81a0da..ba3babc 100644 --- a/source/ChanSort/GlobalImageCollection.cs +++ b/source/ChanSort/GlobalImageCollection.cs @@ -7,6 +7,7 @@ using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Reflection; using DevExpress.Utils; +using DevExpress.XtraEditors; namespace ChanSort.Ui { @@ -16,7 +17,7 @@ namespace ChanSort.Ui /// that are used globally throughout the solution /// [ToolboxItem(false)] - public class GlobalImageCollectionHolder : Component + public class GlobalImageCollectionHolder : XtraForm //Component - DX23.1 it must be an XtraForm because the context menu for editing the collections is missing in the Designer { private IContainer components; private ImageCollection rawImageCollection; @@ -46,6 +47,7 @@ namespace ChanSort.Ui System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GlobalImageCollectionHolder)); this.rawImageCollection = new DevExpress.Utils.ImageCollection(this.components); ((System.ComponentModel.ISupportInitialize)(this.rawImageCollection)).BeginInit(); + this.SuspendLayout(); // // rawImageCollection // @@ -101,7 +103,14 @@ namespace ChanSort.Ui this.rawImageCollection.Images.SetKeyName(48, "0048.png"); this.rawImageCollection.Images.SetKeyName(49, "0049.png"); this.rawImageCollection.Images.SetKeyName(50, "0050.png"); + this.rawImageCollection.Images.SetKeyName(51, "0051.png"); + // + // GlobalImageCollectionHolder + // + this.ClientSize = new System.Drawing.Size(298, 268); + this.Name = "GlobalImageCollectionHolder"; ((System.ComponentModel.ISupportInitialize)(this.rawImageCollection)).EndInit(); + this.ResumeLayout(false); } diff --git a/source/ChanSort/GlobalImageCollection.resx b/source/ChanSort/GlobalImageCollection.resx index 2d2dc77..606eec4 100644 --- a/source/ChanSort/GlobalImageCollection.resx +++ b/source/ChanSort/GlobalImageCollection.resx @@ -123,14 +123,14 @@ - AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLlV0aWxzLnYyMi4xLCBWZXJzaW9uPTIyLjEu - Ni4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEMAwAAAFFT + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLlV0aWxzLnYyMy4xLCBWZXJzaW9uPTIzLjEu + NC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEMAwAAAFFT eXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRv a2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAAChEZXZFeHByZXNzLlV0aWxzLkltYWdlQ29sbGVjdGlvblN0 cmVhbWVyAgAAAAlJbWFnZVNpemUERGF0YQQHE1N5c3RlbS5EcmF3aW5nLlNpemUDAAAAAgIAAAAF/P// /xNTeXN0ZW0uRHJhd2luZy5TaXplAgAAAAV3aWR0aAZoZWlnaHQAAAgIAwAAABAAAAAQAAAACQUAAAAP - BQAAAIqKAAAClgIAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAACxAAAAsQAa0jvXUAAAI4SURBVDhP1ZJPSJRRFMXfskUbqbBw0SooJg1jKhVkMDMU + BQAAAOGLAAAClgIAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAACw8AAAsPAZL5A6UAAAI4SURBVDhP1ZJPSJRRFMXfskUbqbBw0SooJg1jKhVkMDMU TKjGTBl0TDNEtDIXkTU55lT4D3Xsj6KGZhhmaUZqYOZgSlakqGOUSkgEE2kFjdjo982vzzdugqBldODx znnvnsu99z3x71FV00ePc478G0OkX1pZA6Ra+3k3M8/9NCttZovkMVldRGf0EG7qIMn6hLqDJ8mvH0Q0 330JD1vxemFq1k1TxxS32qelproUym2SVzWOU1Y/yvCLj3iLz+NVPVR0jiKOFTnoHf4Kd1rA8VRzweXr @@ -141,7 +141,7 @@ e4PwO4GwPxrX7lUWr5xlsH+K0wUOcgoGZFuqMZrlQ5Ham6skZHQRn3yP7oH3qMpPvpgPkJXbjDjX0E/1 vjQiM5vw217H2q121mypYGTShS0ghCJ/Pa8mtGn7n0FsOKWVnc36YAtlvW+J2pXD6of+fyHELyMtGAnY LCN/AAAAAElFTkSuQmCCrAIAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAARnQU1B - AACxjwv8YQUAAAAJcEhZcwAACxAAAAsQAa0jvXUAAAJOSURBVDhP1c5tS1NhAIfxfRF7EetFpRxStNKZ + AACxjwv8YQUAAAAJcEhZcwAACw8AAAsPAZL5A6UAAAJOSURBVDhP1c5tS1NhAIfxfRF7EetFpRxStNKZ qZtjbhI6CVTCB0omPqyYSg7ZYBomomSKkjLN2bQtTdNaItUHCCKCIsoMETN16dxTcz5wdc99gF5GB/7n HG74XefI/v2l0+Wi06SjU19Al68gLy+dy9lpZGWdE5P+Oplanc7i4rPjLSzM4PFMMz/vYnZ2kunpcdzu USYmhnE4Bhmx32doqIeBgU56e9vjAY1GcYxtbW1YLBbMZjNNTU0YjUZqDDVUVVVRVlZGcXExBQUFqFQq @@ -152,7 +152,7 @@ um4gslZJeLWU0IqewLIW/5IK35dMtj+fx/tRYvPDaTben2T9XQK+lXqG22OBMYn9bTtR75BYP3ubvUR+ dhH+0UF4zUZo1UpwxUzgezP+ZRO734z4lmrxfa3BLv5e9rRHwtMl8fyOxPxdiSmrhFvM1S3xRJy5bBLj 4vlQnI20ineLxFizmMB9JhH43y+Z7A95ZMCdwloGFQAAAABJRU5ErkJggowCAACJUE5HDQoaCgAAAA1J - SERSAAAAEAAAABAIBgAAAB/z/2EAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAAsQAAALEAGtI711AAAC + SERSAAAAEAAAABAIBgAAAB/z/2EAAAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAAsPAAALDwGS+QOlAAAC LklEQVQ4T9WS3UuTURzHz71UwrzRCzV8gVLctDaZbixlKmPmlClOmmiBxgTRSqbmVdRVF4FQQoUISRCV ZkTQy0XUTRYRQSJUSEnkW/iyl8fHqePTeZ45EPoH6sDn3H2+X87vd8Q/cFoE4uQ+3BKPIC4S7EhiElWi SCKSkGRdsioRmjA0NaQzODlI/0Q/fZN9xHvPEe/uZjcQYLejg532drb9fmLNzWx5vah1dfzWA2Tr0NRF @@ -163,7 +163,7 @@ hJXA33I4NZVISQnf9QCzoHO8E+c1J46rDsqulFExfBy1qIiI+QhKTg7RzMyEbDAQOnSQUEoKYaNxL6BA cHrsDK2jrfogG0eaqL9Rj+p2o1ZXsylXqNjtRK1WGWgmLJs1OSxXOacHHJPXYUm6xCBJkRwQ+ifR9qxN WhuW9t55idaqiUn2/vP/e4T4AwKnjHYei+iaAAAAAElFTkSuQmCCmAIAAIlQTkcNChoKAAAADUlIRFIA - AAAQAAAAEAgGAAAAH/P/YQAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAI6SURB + AAAQAAAAEAgGAAAAH/P/YQAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxEAAAsRAX9kX5EAAAI6SURB VDhPpZJrSNNRGIf3oQ99skiLQjCyRCwYBoZUH0KSLhpCUVoYXYSyG4VRiPPSpks3Nze1VjqsbbqmTq2V YlgxKJQRoaWOElOzoKiUpYZKXvb0b8KYJlZ04PlwXs7v4T3vOSLgv5i3OJcF13yBuSy4as3aBAHm0lit KPhbAd0dRsaHajz8cFmYHDBgNRVgM8uz/yioKdcw5qqcFZ7+XMKkM4XK20oqSnMxXM9GX5jFTbWEa4pU @@ -174,8 +174,8 @@ UL9Qj0CXL6HTnsVdcz70ZMFLod0XB5ho3sPokyiG6iMZsIr5aFyHU+2PNHkt4esDG7yvUJyXSo1JifPB GVq1Ii8O9SLsisU0ZC+hOmM5htRAblxcTWLMGndkeFCMV6CVX0YrPUle2jHSzyf8mizH46PZt2sz27eI 2SQOISw4kKBVAaxY5sdKfz8h5/MPfDf/DqKfuxCKOTLBBxEAAAAASUVORK5CYIKgAgAAiVBORw0KGgoA - AAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAN1QAADdUBPdZY - 8QAAABp0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMTAw9HKhAAACHElEQVQ4T5WS7WtScRTH96c0 + AAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAN1AAADdQB75G6 + FQAAABp0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMTAw9HKhAAACHElEQVQ4T5WS7WtScRTH96c0 etW/EVS0Nnph5lw2h65g0NPY2GiEs5jN3EKLvSgqKKLHmdrD1ihmToVL86lrgaAhRrVEX7jrvbvTXfXb vcfy9mIJXvjC+X3POZ97OL9f194+x8qenllYrdaOpPTIvb4uOWhcfRxHIBDoSHPPWAXSUACYX2TR6XfT +4WmIMDc809kSjUJv/IbbSWKW1R7w/MPwP7kD0CS8HPjR1sJWwLVOl98VgG2Rwky6/U6NrlSW1WrVaqd @@ -186,7 +186,7 @@ AJ11WZ7gLSXz+TzGJicoNp8aph0Eg0G43W74/X7ye2SAybHaBHT3XnPt0ziFY9PNCcrlMmo1+boEXl5e AalUCgzDIBwOtyY4MfMOWstSEyA/KgVyRzloB/5/hX+l6R+gRkXdR+y23xS47hoGAHdAAAAAAElFTkSu QmCCkgIAAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAARnQU1BAACxjwv8YQUAAAAJ - cEhZcwAADsIAAA7CARUoSoAAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAg5J + cEhZcwAADsEAAA7BAbiRa+0AAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAg5J REFUOE9jIBa4Fx9MYGRmZYJySQNaIcv4Xauu/3TO35MIFcIPHFM3CQXXnst1L7+43Ln84jbnykt77Stu /Xetvv7WJGKWDFQZdhBQcSLQvezKW8v8a/9Ncq/9N8q9/t8w/8Z/o8Kb/01Kbv+3LTm3AagMu1f8So/7 WuVe/qOXev6fZtyxB1qJx6/qZlz8ZFh4679J2d3/5lX3/9vWP/jvUHwoGqoFAcxj1wpYZJx+rh2xZa6S @@ -197,7 +197,7 @@ DHBsfvTfufPZf6/Jb/4Hzf/0P3rNj//JG75+8u8Aa8YdmCreU3iNC6/etap7+N+q8uJh56ZrW7y6bqz0 aT9bpupRIwtUgt1mZKCbvM/FourOH3nnBnUgl7AGbEA3YRso1+FMMAjAwAAA8UXZZO59Q5UAAAAASUVO RK5CYIKeAgAAiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAA - AAlwSFlzAAALEgAACxIB0t1+/AAAAkBJREFUOE+lke9PEnEcx/kL+ht60BO2HhCbSo1RzUaoZTOLilwb + AAlwSFlzAAALEQAACxEBf2RfkQAAAkBJREFUOE+lke9PEnEcx/kL+ht60BO2HhCbSo1RzUaoZTOLilwb M+2SsB/LphsYIq4fDC/S5AryB7SWtWrypKStH25lj3LVoTwqqiVkHL/OaLPy3ffOIG5IT7rtdbvbfd6v fb7vkwH4L2TBqQgE7j1hRcYfvkIg+BJOb7CmeHAH5cXOI8yyzkgvqupOyCWCpR8/JfgnplFZe1hAUSxR 6Ki1VXXm7vXqPeT1H4Khm48Qes6uKqk6aF6j2LyXPP4R3H/MlggG/A/yYZH8sMB2g5WrrN4PuWpXThSM @@ -295,7 +295,7 @@ 3WkuS4fDd+3YXI/ObI4pQ8ipmQcxou8p0PY4dpq9mS+te6LQNM3M5ucTOMpl3VJbWf3bDZ01BKAH8kj5 IQ7sufMWj2Zeth3Lun8A+Glao9oDUeMAMdzbD06bzY9uX6kBvitOmzf8Tef2f62u+wlSbAABOMbXPAAA AABJRU5ErkJggtQCAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAAEZ0FNQQAAsY8L - /GEFAAAACXBIWXMAAA7CAAAOwgEVKEqAAAAAGnRFWHRTb2Z0d2FyZQBQYWludC5ORVQgdjMuNS4xMDD0 + /GEFAAAACXBIWXMAAA7BAAAOwQG4kWvtAAAAGnRFWHRTb2Z0d2FyZQBQYWludC5ORVQgdjMuNS4xMDD0 cqEAAAJQSURBVDhPYwCBb2dPSn3cvM7o9coVbGABAuBefDzLs6RY45M2VsoMbzauSHjRXPLtZVPR/9d9 jfeO5ae5QdVhgLux0XxvOhsb7xSkP1pkbjjbnYtDkeFgcVb309q8v2+ntv9/N6nl/4eWkv+34gP7HSSl WKH6wOBpZnz4m6rsF4ejg68nCQlZA4UYITJA0OnhanO2MP3Eu7by/2+K4v+/DLD8f89G/UCLtibvndgo @@ -307,423 +307,425 @@ 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 - NfdhAAAAAElFTkSuQmCCCw== + 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 - - False - \ No newline at end of file diff --git a/source/ChanSort/MainForm.Designer.cs b/source/ChanSort/MainForm.Designer.cs index b9702c9..8352c6d 100644 --- a/source/ChanSort/MainForm.Designer.cs +++ b/source/ChanSort/MainForm.Designer.cs @@ -156,6 +156,7 @@ this.miCzech = new DevExpress.XtraBars.BarButtonItem(); this.miGerman = new DevExpress.XtraBars.BarButtonItem(); this.miSpanish = new DevExpress.XtraBars.BarButtonItem(); + this.miLangIt = new DevExpress.XtraBars.BarButtonItem(); this.miHungarian = new DevExpress.XtraBars.BarButtonItem(); this.miPolski = new DevExpress.XtraBars.BarButtonItem(); this.miPortuguese = new DevExpress.XtraBars.BarButtonItem(); @@ -1135,9 +1136,10 @@ this.miMarkForSwapping, this.miSwapWithMarked, this.miConvert, - this.miSaveAs}); + this.miSaveAs, + this.miLangIt}); this.barManager1.MainMenu = this.bar1; - this.barManager1.MaxItemId = 122; + this.barManager1.MaxItemId = 123; this.barManager1.ShowFullMenus = true; this.barManager1.ShortcutItemClick += new DevExpress.XtraBars.ShortcutItemClickEventHandler(this.barManager1_ShortcutItemClick); // @@ -1602,6 +1604,7 @@ new DevExpress.XtraBars.LinkPersistInfo(this.miCzech), new DevExpress.XtraBars.LinkPersistInfo(this.miGerman), new DevExpress.XtraBars.LinkPersistInfo(this.miSpanish), + new DevExpress.XtraBars.LinkPersistInfo(this.miLangIt), new DevExpress.XtraBars.LinkPersistInfo(this.miHungarian), new DevExpress.XtraBars.LinkPersistInfo(this.miPolski), new DevExpress.XtraBars.LinkPersistInfo(this.miPortuguese), @@ -1653,6 +1656,16 @@ this.miSpanish.Tag = "es-ES"; this.miSpanish.DownChanged += new DevExpress.XtraBars.ItemClickEventHandler(this.miLanguage_DownChanged); // + // miLangIt + // + this.miLangIt.ButtonStyle = DevExpress.XtraBars.BarButtonStyle.Check; + resources.ApplyResources(this.miLangIt, "miLangIt"); + this.miLangIt.Id = 122; + this.miLangIt.ImageOptions.ImageIndex = ((int)(resources.GetObject("miLangIt.ImageOptions.ImageIndex"))); + this.miLangIt.Name = "miLangIt"; + this.miLangIt.Tag = "it-IT"; + this.miLangIt.DownChanged += new DevExpress.XtraBars.ItemClickEventHandler(this.miLanguage_DownChanged); + // // miHungarian // this.miHungarian.ButtonStyle = DevExpress.XtraBars.BarButtonStyle.Check; @@ -2527,6 +2540,7 @@ private DevExpress.XtraBars.BarButtonItem miSwapWithMarked; private DevExpress.XtraBars.BarButtonItem miConvert; private DevExpress.XtraBars.BarButtonItem miSaveAs; + private DevExpress.XtraBars.BarButtonItem miLangIt; } } diff --git a/source/ChanSort/MainForm.cs b/source/ChanSort/MainForm.cs index dcc422d..f399f96 100644 --- a/source/ChanSort/MainForm.cs +++ b/source/ChanSort/MainForm.cs @@ -27,6 +27,7 @@ using DevExpress.XtraGrid.Columns; using DevExpress.XtraGrid.Views.Base; using DevExpress.XtraGrid.Views.Grid; using DevExpress.XtraGrid.Views.Grid.ViewInfo; +using DevExpress.XtraReports.Design; using DevExpress.XtraTab; namespace ChanSort.Ui @@ -1610,6 +1611,22 @@ namespace ChanSort.Ui { col.VisibleIndex = GetGridColumnVisibility(col) ? visIndex++ : -1; } + + // add custom columns used in the current channel list + foreach (var field in this.CurrentChannelList.VisibleColumnFieldNames) + { + if (!field.StartsWith("+")) + continue; + var col = gview.Columns[field]; + if (col != null) + continue; + col = gview.Columns.AddField(field); + col.Caption = field.Substring(1); + col.FieldName = field; + col.UnboundDataType = typeof(string); + col.VisibleIndex = visIndex++; + } + --this.ignoreEvents; } #endregion @@ -2400,6 +2417,12 @@ namespace ChanSort.Ui e.Value = channel.GetOldPosition(this.subListIndex); else if (field == colFavorites.FieldName) e.Value = GetFavString(channel.Favorites); + else if (field.StartsWith("+")) // custom loader-specific column + { + var pi = e.Row.GetType().GetProperty(field.Substring(1)); + if (pi != null && pi.CanRead) + e.Value = pi.GetValue(e.Row); + } } else { @@ -2408,6 +2431,13 @@ namespace ChanSort.Ui var channel = (ChannelInfo)e.Row; channel.Favorites = ChannelInfo.ParseFavString(e.Value?.ToString() ?? ""); } + else if (field.StartsWith("+")) + { + var pi = e.Row.GetType().GetProperty(field.Substring(1)); + if (pi != null && pi.CanWrite) + pi.SetValue(e.Row, e.Value); + + } } } diff --git a/source/ChanSort/MainForm.cs.resx b/source/ChanSort/MainForm.cs.resx index bd4af62..1c06106 100644 --- a/source/ChanSort/MainForm.cs.resx +++ b/source/ChanSort/MainForm.cs.resx @@ -609,4 +609,58 @@ Audio\nPID + + &A + + + &B + + + &C + + + &D + + + &E + + + &A + + + &B + + + &C + + + &D + + + &E + + + &Jazyk + + + &English + + + &Deutsch + + + Português + + + ру́сский + + + mnuInputSource + + + &Filtr levého seznamu + + + \d{1,4} + \ No newline at end of file diff --git a/source/ChanSort/MainForm.de.resx b/source/ChanSort/MainForm.de.resx index 9b5e2c1..dc681cd 100644 --- a/source/ChanSort/MainForm.de.resx +++ b/source/ChanSort/MainForm.de.resx @@ -1467,4 +1467,25 @@ speziellen Anbieter, Satelliten oder Länderlisten aus. Alle Sender + + F3: Filter | F4: Liste | -: nach oben | +: nach unten | Entf: entfernen + + + Speichern &unter... + + + &Sprache + + + Filterzeile in der &linken Liste + + + Filterzeile in der &rechten Liste + + + F5: Filter | F6: Liste | Eingabe: übernehmen + + + FIlter + \ No newline at end of file diff --git a/source/ChanSort/MainForm.it.resx b/source/ChanSort/MainForm.it.resx new file mode 100644 index 0000000..2188cd0 --- /dev/null +++ b/source/ChanSort/MainForm.it.resx @@ -0,0 +1,675 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Indice Pr. + + + Tipo di servizio + + + Nuova pos + + + Nuovo numero di programma + + + Nome canale + + + Favoriti + + + UID + + + Blocca + + + Blocco parentale + + + Salta + + + Nascondi + + + F3: Filtro | F4: Lista | -: muovi su | +: muovi giù| Can: rimuovi + + + Pr# + + + Sottolista + + + &File + + + Apri file dati TV... + + + &Ricarica + + + Ripristinare il backup + + + File &informazioni… + + + &Salva + + + Salva con… + + + Applicare l'ordine da un elenco di riferimento… + + + Aggiungi canali dall'elenco di riferimento… + + + Salva elenco referenze… + + + Esporta elenco Excel… + + + Stam&pa + + + &Esci + + + File recenti + + + &Modifica + + + &Aggiungi canali + + + &Rimuovi canali + + + Rinomina canali + + + Ordina i canali in ordine alfabe&tico + + + Ri&numerare i canali + + + Rinumerare i preferiti per Pr# + + + Utilizza lo stesso Pr# in tutti gli elenchi di canali e preferiti + + + Aggiungi ai pre&feriti + + + &A + + + &B + + + &C + + + &D + + + &E + + + Rimuovi dai Preferiti + + + &A + + + &B + + + &C + + + &D + + + &E + + + &Blocca canale: attivo + + + Blocca canale: disattivato + + + &Salta canale: attivo + + + Salta canale: disattivato + + + Nascondi canale: attivo + + + Nascondi canale: disattivato + + + TV-Set + + + Impostazioni del dispositivo... + + + Pulisci i dati del canale + + + Riorganizza i record dei canali e rimuovi i duplicati + + + Impo&stazioni + + + &Lingua + + + Inglese + + + Tedesco + + + Portoghese + + + Russo + + + Ceco + + + Rumeno + + + Set di &caratteri + + + Tutti i set di &caratteri... + + + Set di caratteri ISO + + + Mostra avvisi dopo il caricamento del file + + + Mostra automaticamente eventuali avvisi dopo l'apertura di un file + + + Consenti la modifica di elenchi predefiniti (PERICOLOSO) + + + Il televisore potrebbe non funzionare correttamente quando si modifica un elenco con numeri di canale predefiniti + + + &Accessibilità + + + Apre un sottomenu per la selezione della sorgente di ingresso. Questo menu può essere attivato direttamente con il tasto F1 + + + Seleziona sorgente di &ingresso + + + mnu Sorgente di ingresso + + + Apre un sottomenu per il programma di selezione dell'elenco dei preferiti. Questo menu può essere attivato direttamente con il tasto Maiusc+F1 + + + Seleziona il programma/l'elenco dei preferiti + + + mnu Lista favoriti + + + Lista programmi + + + Favoriti A + + + Favoriti B + + + Favoriti C + + + Favoriti D + + + Favoriti E + + + Fi&ltro elenco a sinistra + + + Elenco di sinistra + + + Filt&ro elenco a destra + + + Elenco a destra + + + Aiuto + + + Wiki + + + Sito web ChanSort… + + + Info Ch&anSort + + + Strumenti + + + Sposta in su + + + Sposta in giù + + + Scambio + + + dopo + + + prima + + + Chiudere il divario quando si sposta/elimina un canale + + + Quando attivo, tutti i canali successivi a quello corrente verranno automaticamente rinumerati + + + Modalità di inserimento: + + + Nessun elenco di canali + + + Imposta posizione: + + + N. di programma per le operazioni di inserimento e impostazione + + + \d{1,4} + + + ChanSort {0} - TV Editor dell'elenco dei canali + + + Attiva il blocco parentale + + + Blocco parentale + + + Attiva i favoriti E + + + ±E + + + Attiva i favoriti D + + + ±D + + + Attiva i favoriti C + + + ±C + + + Attiva i favoriti B + + + ±B + + + Attiva i favoriti A + + + ±A + + + Rimuove i criteri di filtro dei canali dall'elenco dei canali ordinati + + + Filtro + + + Reimposta filtro + + + Rinumerare i canali selezionati in sequenza + + + Rinumerare i canali selezionati in sequenza + + + Sposta il canale selezionato verso il basso + + + Sposta i canali selezionati verso il basso + + + Sposta il canale selezionato in alto + + + Sposta i canali selezionati in alto + + + Rimuove i canali selezionati dall'elenco ordinato + + + Rimuovi i canali selezionati + + + Canali ordinati + + + Pannello1 + + + Indice del programma + + + Vecchia Pos. + + + Vecchia Posizione + + + Nuova Pos. + + + Nuova Posizione + + + Sorgente + + + Pr# + + + Nome canale + + + Nome breve + + + Favoriti + + + Bloccato + + + Salta + + + Nascondi + + + Cripta + + + Crittografato + + + ID del tipo di servizio + + + Tipo di servizio + + + Frequenza (Mhz) + + + Canale/ Transp + + + Numero canale o transponder + + + Satellite + + + Rete (ONID) + + + TS ID + + + Transport Stream ID + + + Service ID + + + Video ID + + + Audio ID + + + Symbol rate + + + Polarità + + + Nome rete + + + Operatore rete + + + Provider + + + Uid + + + Ordine + + + Sorgente del segnale + + + F5: Filtro | F6: Lista | Invio: agg + + + Questo è un elenco predefinito e non può essere modificato. + + + Durante la configurazione del televisore è stato selezionato un elenco di canali predefinito. +La modifica di tale elenco causerebbe il malfunzionamento della TV. +Eseguire una scansione completa dei canali sulla TV e non selezionarne nessuno +elenchi di fornitori, satelliti o paesi specifici. + + + Rimuove i canali selezionati dall'elenco ordinato + + + Rimuove i canali selezionati dall'elenco ordinato + + + Aggiungi tutti i canali attualmente non ordinati alla fine dell'elenco + + + << Agg. Tutti + + + Aggiungi tutti i canali attualmente non ordinati alla fine dell'elenco + + + Rimuovi i criteri di filtro del canale dall'elenco completo dei canali + + + Filtro + + + Reimposta filtro + + + Aggiungi i canali selezionati all'elenco ordinato + + + Aggiungi i canali selezionati all'elenco ordinato + + + Canali originali + + + Pannello2 + + + controllo del contenitore diviso 1 + + \ No newline at end of file diff --git a/source/ChanSort/MainForm.pt.resx b/source/ChanSort/MainForm.pt.resx index dc78ea2..adced45 100644 --- a/source/ChanSort/MainForm.pt.resx +++ b/source/ChanSort/MainForm.pt.resx @@ -373,4 +373,10 @@ Audio\nPID + + Parental lock + + + &Idioma + \ No newline at end of file diff --git a/source/ChanSort/MainForm.resx b/source/ChanSort/MainForm.resx index c06f979..fb83b2c 100644 --- a/source/ChanSort/MainForm.resx +++ b/source/ChanSort/MainForm.resx @@ -126,7 +126,7 @@ 0, 111 - 194, 17 + 192, 17 Fill @@ -276,7 +276,7 @@ gridLeft - ChanSort.XGridControl, ChanSort, Version=1.0.8404.23947, Culture=neutral, PublicKeyToken=null + ChanSort.XGridControl, ChanSort, Version=1.0.8625.19498, Culture=neutral, PublicKeyToken=null grpOutputList @@ -294,7 +294,7 @@ 18 - 433, 17 + 431, 17 True @@ -387,7 +387,7 @@ 256, 6 - 308, 17 + 307, 17 &File @@ -420,7 +420,7 @@ 4 - Save as... + Save &as... Save channel list under a different file name @@ -598,66 +598,83 @@ &Language + @Invariant 14 English + @Invariant 0 Česky + @Invariant 41 Deutsch + @Invariant 1 Español + @Invariant 44 + + Italiano + + + 51 + Magyar + @Invariant 47 Polski + @Invariant 45 Português + @Invariant 2 Română + @Invariant 42 Русский + @Invariant 35 Türkçe + @Invariant 46 @@ -676,15 +693,18 @@ UTF-8 (Unicode) + @Invariant ISO character sets UTF-16 Big Endian (Unicode MSB first) + @Invariant UTF-16 Little Endian (Unicode LSB first) + @Invariant Theme... @@ -739,6 +759,7 @@ mnuInputSource + @Invariant Opens a submenu for the program of favorite list selection. This menu can be directly activated with the Shift+F1 key @@ -778,18 +799,23 @@ S - Tahoma 8pt + @Invariant M - Segoe UI 9pt + @Invariant L - Segoe UI 10pt + @Invariant XL - Segoe UI 11pt + @Invariant XXL - Segoe UI 12pt + @Invariant &Help @@ -812,8 +838,8 @@ - AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYyMi4xLCBWZXJzaW9uPTIy - LjEuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYyMy4xLCBWZXJzaW9uPTIz + LjEuNC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEZpbGUE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICKaPJ5gsBeU2NTSFe @@ -822,8 +848,8 @@ - AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYyMi4xLCBWZXJzaW9uPTIy - LjEuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYyMy4xLCBWZXJzaW9uPTIz + LjEuNC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEhlbHAE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICdEVVDegwMU2acNpw @@ -832,8 +858,8 @@ - AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYyMi4xLCBWZXJzaW9uPTIy - LjEuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYyMy4xLCBWZXJzaW9uPTIz + LjEuNC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEVkaXQE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICZMTu18lZRU+IqmAu @@ -842,8 +868,8 @@ - AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYyMi4xLCBWZXJzaW9uPTIy - LjEuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYyMy4xLCBWZXJzaW9uPTIz + LjEuNC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAAB09wdGlvbnME/P///wtTeXN0ZW0uR3VpZAsAAAACX2EC X2ICX2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICXJMOh9nzAkKc @@ -852,8 +878,8 @@ - AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYyMi4xLCBWZXJzaW9uPTIy - LjEuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA + AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYyMy4xLCBWZXJzaW9uPTIz + LjEuNC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAADUFjY2Vzc2liaWxpdHkE/P///wtTeXN0ZW0uR3VpZAsA AAACX2ECX2ICX2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICeIvz @@ -1178,6 +1204,7 @@ \d{1,4} + @Invariant RegEx @@ -1240,7 +1267,7 @@ gviewLeft - ChanSort.XGridView, ChanSort, Version=1.0.8404.23947, Culture=neutral, PublicKeyToken=null + ChanSort.XGridView, ChanSort, Version=1.0.8625.19498, Culture=neutral, PublicKeyToken=null colIndex1 @@ -1324,13 +1351,13 @@ globalImageCollection1 - ChanSort.Ui.GlobalImageCollection, ChanSort, Version=1.0.8404.23947, Culture=neutral, PublicKeyToken=null + ChanSort.Ui.GlobalImageCollection, ChanSort, Version=1.0.8625.19498, Culture=neutral, PublicKeyToken=null gviewRight - ChanSort.XGridView, ChanSort, Version=1.0.8404.23947, Culture=neutral, PublicKeyToken=null + ChanSort.XGridView, ChanSort, Version=1.0.8625.19498, Culture=neutral, PublicKeyToken=null colIndex @@ -1818,6 +1845,12 @@ DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v23.1, Version=23.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + miLangIt + + + DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v23.1, Version=23.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + miHungarian @@ -2125,7 +2158,7 @@ DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v23.1, Version=23.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - 01/04/2023 13:23:37 + 08/13/2023 10:51:28 16, 16 @@ -2904,6 +2937,7 @@ PCR\nPID + @Invariant Program Clock Reference Packet-ID @@ -3008,7 +3042,7 @@ gridRight - ChanSort.XGridControl, ChanSort, Version=1.0.8404.23947, Culture=neutral, PublicKeyToken=null + ChanSort.XGridControl, ChanSort, Version=1.0.8625.19498, Culture=neutral, PublicKeyToken=null grpInputList @@ -3296,18 +3330,18 @@ 0 - 614, 17 + 611, 17 - 744, 17 + 742, 17 - 875, 17 + 873, 17 - 1029, 17 + 1026, 17 - 1153, 17 + 1151, 17 \ No newline at end of file diff --git a/source/ChanSort/MainForm.ro.resx b/source/ChanSort/MainForm.ro.resx index 06dee76..c9063b9 100644 --- a/source/ChanSort/MainForm.ro.resx +++ b/source/ChanSort/MainForm.ro.resx @@ -627,4 +627,64 @@ furnizor specific, satelit sau liste de țări. Audio\nPID + + &A + + + &B + + + &C + + + &D + + + &E + + + &A + + + &B + + + &C + + + &D + + + &E + + + &Limba + + + &Engleză + + + &Deutsch + + + Português + + + русский + + + Česky + + + Română + + + mnuInputSource + + + Filtru de listă &stânga + + + \d{1,4} + \ No newline at end of file diff --git a/source/ChanSort/MainForm.ru.resx b/source/ChanSort/MainForm.ru.resx index f2ee386..061e8e7 100644 --- a/source/ChanSort/MainForm.ru.resx +++ b/source/ChanSort/MainForm.ru.resx @@ -714,4 +714,7 @@ XXL - Segoe UI 12пт + + Язык + \ No newline at end of file diff --git a/source/ChanSort/Printing/ReportOptionsDialog.cs.resx b/source/ChanSort/Printing/ReportOptionsDialog.cs.resx index ce8c4c3..ffb6ea3 100644 --- a/source/ChanSort/Printing/ReportOptionsDialog.cs.resx +++ b/source/ChanSort/Printing/ReportOptionsDialog.cs.resx @@ -138,4 +138,7 @@ Číslo + + Tahoma + \ No newline at end of file diff --git a/source/ChanSort/Printing/ReportOptionsDialog.it.resx b/source/ChanSort/Printing/ReportOptionsDialog.it.resx new file mode 100644 index 0000000..6ef730c --- /dev/null +++ b/source/ChanSort/Printing/ReportOptionsDialog.it.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ordina per: + + + Numero + + + Nome + + + Carattere: + + + Tahoma + + + Anteprima… + + + Annulla + + + Opzioni di stampa + + \ No newline at end of file diff --git a/source/ChanSort/Printing/ReportOptionsDialog.ro.resx b/source/ChanSort/Printing/ReportOptionsDialog.ro.resx index 12f5805..fdfea4b 100644 --- a/source/ChanSort/Printing/ReportOptionsDialog.ro.resx +++ b/source/ChanSort/Printing/ReportOptionsDialog.ro.resx @@ -138,4 +138,7 @@ Opțiunile de imprimare + + Tahoma + \ No newline at end of file diff --git a/source/ChanSort/Properties/Resources.de.resx b/source/ChanSort/Properties/Resources.de.resx index f32d6a4..bc1f3c0 100644 --- a/source/ChanSort/Properties/Resources.de.resx +++ b/source/ChanSort/Properties/Resources.de.resx @@ -269,7 +269,7 @@ Sollen die Programmnummern in fortlaufende Zahlen umgeändert werden? Mögliche Ursachen sind USB-Sticks, die mit NTFS formatiert sind (FAT32 sollte immer funktionieren) oder ein am TV durchgeführtes Firmwareupdate, ohne einen anschließenden neuen Suchlauf. Dabei kann dann unter Umständen die neue Firmware die alten Daten nicht korrekt exportieren. - Antenne,Kabel,Sat,IP,Analog,DVB,TV,Radio,Daten + Antenne,Kabel,Sat,IP,Analog,Digital,TV,Radio,Daten Wie soll vorgegangen werden, wenn eine Pr# bereits vergeben ist? diff --git a/source/ChanSort/Properties/Resources.es.resx b/source/ChanSort/Properties/Resources.es.resx index 3126276..9b21258 100644 --- a/source/ChanSort/Properties/Resources.es.resx +++ b/source/ChanSort/Properties/Resources.es.resx @@ -250,7 +250,7 @@ o bien se ha actualizado el firmware sin hacer una nueva búsqueda de canales. (El nuevo firmware de la TV puede ser incapáz de procesar los datos existentes de canales durante la exportación.) - Antena,Cable,Sat,IP,Analógico,DVB,TV,Radio,Data + Antena,Cable,Sat,IP,Analógico,Digital,TV,Radio,Data ¿Cómo desea proceder cuando un Pr# ya exista en la lista de destino? diff --git a/source/ChanSort/Properties/Resources.hu.resx b/source/ChanSort/Properties/Resources.hu.resx index 5530e13..19b404b 100644 --- a/source/ChanSort/Properties/Resources.hu.resx +++ b/source/ChanSort/Properties/Resources.hu.resx @@ -259,7 +259,7 @@ A tipikus ok, ha az USB memóriakártya NTFS fájlrendszerű (próbáljon inkáb (Előfordulhat, hogy az új szoftver a TV-ben nem tudja feldolgozni a régi csatornaadatokat az exportálás során.) - Antenna,Kábel,Műhold,IP,Analóg,DVB,TV,Rádió,Adat + Antenna,Kábel,Műhold,IP,Analóg,Digitális,TV,Rádió,Adat Hogyan szeretné kezelni, ha egy Pr# már szerepel a céllistában? diff --git a/source/ChanSort/Properties/Resources.it.resx b/source/ChanSort/Properties/Resources.it.resx new file mode 100644 index 0000000..8796da4 --- /dev/null +++ b/source/ChanSort/Properties/Resources.it.resx @@ -0,0 +1,296 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Impossibile trovare il TLL di origine: +'{0}' + + + Si è verificato un errore durante il caricamento del file di dati della TV: {0} + + + File supportato|{0}|Tutti i File (*.*)|* + + + {0}-File|*{0}|Tutti i File (*.*)|* + + + Si è verificato un errore imprevisto: +{0} + + + Si è verificato un errore durante la scrittura del file dati TV: +{0} + + + Il file di dati TV ordinato è stato creato correttamente. + + + Vuoi quindi salvare le tue modifiche? + + + Salvare le modifiche + + + Non salvare le modifiche + + + Nessun plugin trovato per leggere/scrivere {0} file. + + + Errore durante il caricamento del file + + + Il contenuto del file mostra alcune anomalie ed è probabilmente corrotto. + + + Convalida dei dati + + + Tutta la memorizzazione personalizzata andrà persa. +Sei sicuro di voler ripristinare l'ordine dai canali? + + + Ripristina l'ordine dalla scansione dei canali + + + Il file di input contiene più record che utilizzano lo stesso +numero di programma. È possibile che la TV non accetti +le modifiche apportate da ChanSort. +Ciò è in genere causato dall'esecuzione di una scansione manuale del transponder. +Si consiglia di utilizzare un file di input pulito per eventuali modifiche. +Per fare ciò, disattiva la modalità Hotel, reimposta la TV su +impostazioni di fabbrica, eseguire una nuova scansione dei canali ciechi e girare +Riattiva la modalità hotel, quindi esporta un nuovo file TLL pulito. + + + ATTENZIONE: tutti i dati di canali e transponder analogici, DVB-C/T e DVB-S verranno cancellati. +Dovrai eseguire una scansione completa dei canali dopo aver caricato questo file nella tua TV. +Procedere? + + + Cancella tutti i dati del canale + + + Impossibile copiare il file .bak in {0} + + + Nessun file di backup trovato: {0} + + + Stai per ripristinare il file di backup. Tutte le modifiche andranno perse! +Vuoi continuare? + + + Si è verificato un errore durante il salvataggio del file. Per favore assicurati che +- hai i permessi di scrittura sul file +- il file non è aperto in un altro programma + +Il messaggio di errore è: + + + Errore di scrittura del file + + + È disponibile una versione più recente: v{0}. +Vuoi aprire il sito Web di download? + + + Nuova versione + + + Come vorresti modificare il tuo elenco di canali? + + + Crea nuovo elenco: inizia con un elenco vuoto e aggiungi i canali nell'ordine desiderato + + + Modifica elenco corrente: inizia con l'elenco corrente e modificalo secondo necessità + + + Copia elenco canali: ordina i canali come in un elenco di riferimento + + + Cosa dovrebbe accadere ai canali non ordinati? + + + Aggiungi i canali non ordinati alla fine dell'elenco + + + Elimina i canali non ordinati dall'elenco + + + Annulla + + + Fine non trovato + + + Il file {0} non esiste + + + L'elenco dei canali è stato copiato negli appunti +e può essere incollato in Excel o in qualsiasi editor di testo. + + + La tua TV potrebbe non essere in grado di funzionare correttamente quando ci sono delle lacune nei numeri dei canali. +Vuoi che i numeri dei canali vengano riordinati consecutivamente? + + + Il contenuto del file non è valido. Ha dimensione 0 o tutti i suoi byte hanno il valore 0. +Le cause tipiche sono le chiavette USB con un file system NTFS (prova invece a utilizzare FAT32) +o aggiornamenti del firmware senza eseguire una nuova scansione dei canali. +(Il nuovo software del televisore potrebbe non essere in grado di elaborare i vecchi dati del canale durante l'esportazione.) + + + Antenna,CavoSat,IP,Analogico,Digitale,TV,Radio + + + Come vuoi gestirlo quando un Pr # è già presente nell'elenco dei target? + + + Cancella l'elenco degli obiettivi prima di applicare l'elenco di riferimento + + + Sovrascrivi Pr# con il canale dalla lista di riferimento + + + Mantieni il canale corrente al Pr# + + + Per scambiare i canali è necessario selezionare un numero uguale di righe nella tabella di sinistra e di destra. + + + Scambia canali + + + Seleziona un elenco di riferimento da importare + + + ChanSort Lista di riferimento|*.csv|SamToolBox Lista di riferimento|*.chl|Tutte le liste di riferimento|*.csv;*.chl + + + Apri l'elenco dei riferimenti + + + Il file non è un archivio .zip valido. +I televisori spesso esportano file danneggiati su chiavette USB formattate con il file system NTFS. +Prova ad esportare su una chiavetta formattata con FAT32 + + \ No newline at end of file diff --git a/source/ChanSort/Properties/Resources.pl.resx b/source/ChanSort/Properties/Resources.pl.resx index 0911f78..686211b 100644 --- a/source/ChanSort/Properties/Resources.pl.resx +++ b/source/ChanSort/Properties/Resources.pl.resx @@ -252,7 +252,7 @@ lub aktualizacje oprogramowania układowego bez uruchamiania nowego skanowania k (Nowe oprogramowanie w telewizorze może nie być w stanie przetworzyć danych starego kanału podczas eksportu.) - Antena, telewizja kablowa, satelitarna, IP, analogowa, DVB, TV, radio, dane + Antena, telewizja kablowa, satelitarna, IP, analogowa, cyfrowa, TV, radio, dane Jak chcesz sobie z tym poradzić, gdy Pr# jest już zajęty na liście docelowej? diff --git a/source/ChanSort/Properties/Resources.resx b/source/ChanSort/Properties/Resources.resx index 5c56215..553380c 100644 --- a/source/ChanSort/Properties/Resources.resx +++ b/source/ChanSort/Properties/Resources.resx @@ -232,7 +232,7 @@ Do you want to open the download website? Modify current list: Start with current list and modify it as needed - Apply template: Order the channels the same way as in another list + Copy channel list: Order the channels the same way as in a reference list What should happen to unsorted channels? @@ -267,7 +267,7 @@ or firmware upgrades without running a new channel scan. (The new software in the TV might be unable to process the old channel data during the export.) - Antenna,Cable,Sat,IP,Analog,DVB,TV,Radio,Data + Antenna,Cable,Sat,IP,Analog,Digital,TV,Radio,Data How do you want to handle it when a Pr# is already taken in the target list? diff --git a/source/ChanSort/Properties/Resources.ro.resx b/source/ChanSort/Properties/Resources.ro.resx index 4a67bb6..967ae01 100644 --- a/source/ChanSort/Properties/Resources.ro.resx +++ b/source/ChanSort/Properties/Resources.ro.resx @@ -261,7 +261,7 @@ sau actualizări ale firmware-ului fără a efectua o nouă scanare a canalelor. (Noul software din televizor ar putea să nu poată procesa datele vechi ale canalului în timpul exportului.) - Antenă, Cablu, Sat, IP, analog, DVB, TV, radio, data + Antenă, Cablu, Sat, IP, analog, digital, TV, radio, data Cum doriți să o gestionați atunci când un Pr # este deja luat în lista țintă? diff --git a/source/ChanSort/Properties/Resources.tr.resx b/source/ChanSort/Properties/Resources.tr.resx index e699ad5..2880089 100644 --- a/source/ChanSort/Properties/Resources.tr.resx +++ b/source/ChanSort/Properties/Resources.tr.resx @@ -259,7 +259,7 @@ veya yeni bir kanal taraması yapmadan ürün yazılımını güncelleyin. (TV'deki yeni yazılım dışa aktarma sırasında eski kanal verilerini işleyemeyebilir.) - Anten,Kablo,Uydu,IP,Analog,DVB,TV,Radyo,Veri + Anten,Kablo,Uydu,IP,Analog,Digital,TV,Radyo,Veri Hedef listesinden bir Pr# alındığında bunu nasıl ele almak istersiniz? diff --git a/source/ChanSort/Properties/licenses.licx b/source/ChanSort/Properties/licenses.licx index e69de29..a4b88d4 100644 --- a/source/ChanSort/Properties/licenses.licx +++ b/source/ChanSort/Properties/licenses.licx @@ -0,0 +1,5 @@ +DevExpress.XtraBars.BarManager, DevExpress.XtraBars.v23.1, Version=23.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v23.1, Version=23.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.Repository.RepositoryItemTextEdit, DevExpress.XtraEditors.v23.1, Version=23.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.PictureEdit, DevExpress.XtraEditors.v23.1, Version=23.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.ButtonEdit, DevExpress.XtraEditors.v23.1, Version=23.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a diff --git a/source/ChanSort/ReferenceListForm.it.resx b/source/ChanSort/ReferenceListForm.it.resx new file mode 100644 index 0000000..772d4d2 --- /dev/null +++ b/source/ChanSort/ReferenceListForm.it.resx @@ -0,0 +1,241 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + File elenco di riferimento: + + + ← premere il pulsante per selezionare un file + + + Scegli un file che contenga l'ordine dei canali che desideri applicare all'elenco corrente. +Puoi utilizzare uno degli elenchi predefiniti di ChanSort (TXT, CHL, CSV) +o un file di dati da un'altra TV (SCM, TLL, DB, BIN, …) + + + Riordina automaticamente tutti gli elenchi nel file TV + + + Riordino avanzato + + + Lista di referenze: + + + Elenco degli obiettivi: + + + TV + + + Radio + + + Inizia da Pr#: + + + (ad es. lasciare che i canali radio inizino a 5000 per evitare conflitti con i numeri dei canali TV) + + + 1 + + + 1 + + + 100 + + + 500 + + + 1000 + + + 2000 + + + 5000 + + + 7000 + + + Utilizzare numeri consecutivi (rimuovere gli spazi dalla lista di riferimento Pr#) + + + IP (rete) + + + Satellite + + + Ingresso: + + + Antenna + + + Cavo + + + Tipo di segnale + + + Analogico + + + Digitale + + + Tipo di canale + + + Applica + + + grpManuale + + + Ok + + + Chiudi/Annulla + + + Apri ChanSort Wiki per ulteriori informazioni e per scaricare le liste di riferimento + + + 1. Selezionare il file dell'elenco di riferimento + + + Se la TV e il file di riferimento contengono più elenchi o utilizzano un raggruppamento diverso, è possibile applicare parti selezionate dell'elenco di riferimento a un elenco di destinazione. +Questo passaggio può essere ripetuto secondo necessità. + + + Questa opzione è disponibile solo quando il file TV e l'elenco di riferimento sono organizzati allo stesso modo. +(vale a dire gli stessi sottoelenchi per le combinazioni di Antenna/Cavo/Sat, TV/Radio, Analogico/Digitale) + + + 2. Metti ordine nel tuo file TV + + + Applica elenco di riferimento + + \ No newline at end of file diff --git a/source/ChanSort/ReferenceListForm.resx b/source/ChanSort/ReferenceListForm.resx index ac5e152..8371063 100644 --- a/source/ChanSort/ReferenceListForm.resx +++ b/source/ChanSort/ReferenceListForm.resx @@ -761,7 +761,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...) 204, 84 - DVB + Digital 40, 18 @@ -1127,4 +1127,16 @@ This step can be repeated as needed. DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v23.1, Version=23.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + + + 1. Select reference list file + + + 2. Bring order to your TV file + + + Data/Other + \ No newline at end of file diff --git a/source/ChanSort/WaitForm1.cs.resx b/source/ChanSort/WaitForm1.cs.resx index 3a93150..1355e11 100644 --- a/source/ChanSort/WaitForm1.cs.resx +++ b/source/ChanSort/WaitForm1.cs.resx @@ -123,4 +123,10 @@ Vytváří se datový soubor televizoru... + + progressPanel1 + + + Form1 + \ No newline at end of file diff --git a/source/ChanSort/WaitForm1.it.resx b/source/ChanSort/WaitForm1.it.resx new file mode 100644 index 0000000..32c3be1 --- /dev/null +++ b/source/ChanSort/WaitForm1.it.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Generazione file dati TV... + + + Pannelloavanzamento1 + + + Forma 1 + + + Per favore sii paziente + + \ No newline at end of file diff --git a/source/ChanSort/WaitForm1.ro.resx b/source/ChanSort/WaitForm1.ro.resx index 6c740af..1c0e6eb 100644 --- a/source/ChanSort/WaitForm1.ro.resx +++ b/source/ChanSort/WaitForm1.ro.resx @@ -123,4 +123,10 @@ Te rog ai rabdare + + progressPanel1 + + + Form1 + \ No newline at end of file diff --git a/source/Images/imagelist/0051.png b/source/Images/imagelist/0051.png new file mode 100644 index 0000000..42d1677 Binary files /dev/null and b/source/Images/imagelist/0051.png differ diff --git a/source/Spike.LgWebOs5/Spikes.csproj b/source/Spike.LgWebOs5/Spikes.csproj index 447c1a2..8c11827 100644 --- a/source/Spike.LgWebOs5/Spikes.csproj +++ b/source/Spike.LgWebOs5/Spikes.csproj @@ -16,6 +16,7 @@ latest + @@ -24,10 +25,11 @@ - + + \ No newline at end of file diff --git a/source/Spike.LgWebOs5/TechnisatDecrypt.cs b/source/Spike.LgWebOs5/TechnisatDecrypt.cs new file mode 100644 index 0000000..98280d3 --- /dev/null +++ b/source/Spike.LgWebOs5/TechnisatDecrypt.cs @@ -0,0 +1,119 @@ +using System; +using System.IO; +using System.Text; + +namespace Spike.Technisat +{ + internal class TechnisatDecrypt + { + static void Main() + { + var file = @"C:\Sources\ChanSort\TestFiles\TestFiles_Div\TechniSat\thenicnic\database.cdp"; + var original = File.ReadAllBytes(file); + + var decrypted = CdpDecrypt(original); + File.WriteAllText($"{file}.txt", decrypted.Replace("\0", ""), encoding); + + var reencrypted = CdpEncrypt(decrypted); + File.WriteAllBytes($"{file}.enc", reencrypted); + + // validate that decrypt + encrypt produces the original data + if (reencrypted.Length != original.Length) + throw new Exception("Incorrect file length"); + for (int i = 0; i < original.Length; i++) + { + if (reencrypted[i] != original[i]) + throw new Exception("Data corrupted at index " + i); + } + } + + static readonly Encoding encoding = Encoding.GetEncoding(1252); + + const uint InitSeed = 0xAC15FF4B; + private const uint Polynomial = 0x80000062; + + private static string CdpDecrypt(byte[] data) + { + uint state = InitSeed; + + var sb = new StringBuilder(data.Length); + foreach (var b in data) + { + var o = 0; + for (int i = 0; i < 8; i++) + { + if ((state & 0x01) != 0) + { + state = (state ^ Polynomial) >> 1 | 0x80000000; + o ^= 1 << i; + } + else + state >>= 1; + } + + o ^= b; + if (o == 0) + state = InitSeed; + + sb.Append((char)o); + } + + return sb.ToString(); + } + + private static byte[] CdpEncrypt(string text) + { + uint state = InitSeed; + + var strm = new MemoryStream(text.Length); + foreach (var b in encoding.GetBytes(text)) + { + var o = 0; + for (int i = 0; i < 8; i++) + { + if ((state & 0x01) != 0) + { + state = (state ^ Polynomial) >> 1 | 0x80000000; + o ^= 1 << i; + } + else + state >>= 1; + } + + strm.WriteByte((byte)(o ^ b)); + + if (b == 0) + state = InitSeed; + } + + var data = new byte[strm.Length]; + Array.Copy(strm.GetBuffer(), data, strm.Length); + return data; + } + +#if false + + static readonly byte[] XorKey = { 255, 255, 255, 157, 27, 90, 156, 151, 214, 128, 125, 141, 0, 6, 245, 171 }; + + private static int k = 0; + + private static byte XorDecode(byte b) + { + b ^= XorKey[k]; + k = (k + 1) & 0x0F; + + var o = 0; + if ((b & 0x80) != 0) o |= 0x01; + if ((b & 0x40) != 0) o |= 0x02; + if ((b & 0x20) != 0) o |= 0x04; + if ((b & 0x10) != 0) o |= 0x08; + if ((b & 0x08) != 0) o |= 0x10; + if ((b & 0x04) != 0) o |= 0x20; + if ((b & 0x02) != 0) o |= 0x40; + if ((b & 0x01) != 0) o |= 0x80; + + return (byte)o; + } +#endif + } +} diff --git a/source/Translation.xlsx b/source/Translation.xlsx index 6c15b1e..3b13d25 100644 Binary files a/source/Translation.xlsx and b/source/Translation.xlsx differ diff --git a/source/changelog.md b/source/changelog.md index 5bd977b..96a7ba4 100644 --- a/source/changelog.md +++ b/source/changelog.md @@ -1,8 +1,11 @@ ChanSort Change Log =================== -2023-08-13 +2023-08-14 +- added italian translation +- update polish translation - added support for a Hisense HIS_SVL.BIN variant with different data layout +- Samsung .zip: allow editing stream and logo URLs for IP-channels 2023-06-01 - Panasonic LS 500 / LX 700 series: support for new firmware which doesn't export a hotel.bin file. diff --git a/source/makeDistribZip.cmd b/source/makeDistribZip.cmd index 68a9039..d0494c3 100644 --- a/source/makeDistribZip.cmd +++ b/source/makeDistribZip.cmd @@ -3,7 +3,7 @@ setlocal setlocal enabledelayedexpansion cd /d %~dp0 -set languages=cs de es hu pl pt ro ru tr +set languages=cs de es hu it pl pt ro ru tr set curdate=%date:~6,4%-%date:~3,2%-%date:~0,2% set target=%cd%\..\..\ChanSort_%curdate% set DXversion=23.1 @@ -101,11 +101,11 @@ goto:eof :copyLangDll set source="C:\Program Files\DevExpress %DXversion%\Components\Bin\Framework\%2\DevExpress.%1.v%DXversion%.resources.dll" if exist %source% xcopy /idy %source% "%target%\%2" -set source="d:\downloads\DevExpress\20%DXversion%\DevExpressLocalizedResources_20%DXversion%_%2\DevExpress.%1.v%DXversion%.resources.dll" +set source="c:\daten\downloads\DevExpress\20%DXversion%\DevExpressLocalizedResources_20%DXversion%_%2\DevExpress.%1.v%DXversion%.resources.dll" if exist %source% xcopy /idy %source% "%target%\%2" set source="C:\Program Files\DevExpress %DXversion%\Components\Bin\Framework\%2\DevExpress.%1.v%DXversion%.Core.resources.dll" if exist %source% xcopy /idy %source% "%target%\%2" -set source="d:\downloads\DevExpress\20%DXversion%\DevExpressLocalizedResources_20%DXversion%_%2\DevExpress.%1.v%DXversion%.Core.resources.dll" +set source="c:\daten\downloads\DevExpress\20%DXversion%\DevExpressLocalizedResources_20%DXversion%_%2\DevExpress.%1.v%DXversion%.Core.resources.dll" if exist %source% xcopy /idy %source% "%target%\%2" goto:eof