From 2f2659f2d858050c43b12c95ae826dd7fadfecb4 Mon Sep 17 00:00:00 2001 From: nnn-revo2012 Date: Sat, 1 Jan 2022 01:22:54 +0900 Subject: [PATCH] =?UTF-8?q?Ver=200.0.1.16=20jkcommentviewer=E3=81=A7?= =?UTF-8?q?=E5=8F=96=E5=BE=97=E3=81=97=E3=81=9Fyoutube=E3=82=B3=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=88=E4=BF=AE=E5=BE=A9=E6=A9=9F=E8=83=BD=20-=20?= =?UTF-8?q?=E5=90=84=E8=A1=8C=E5=87=A6=E7=90=86=E5=89=8D=E3=81=ABHtmlDecod?= =?UTF-8?q?e=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=20-=20=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E4=BF=AE?= =?UTF-8?q?=E5=BE=A9=E5=89=8D=E3=81=ABxml=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E3=81=8C=E5=A3=8A=E3=82=8C=E3=81=A6=E3=81=84=E3=82=8B?= =?UTF-8?q?=E3=81=8B=E7=A2=BA=E8=AA=8D=E3=80=81=E5=A3=8A=E3=82=8C=E3=81=A6?= =?UTF-8?q?=E3=81=AA=E3=81=91=E3=82=8C=E3=81=B0=E4=B8=AD=E6=AD=A2=20?= =?UTF-8?q?=E3=81=95=E3=81=8D=E3=82=85=E3=81=B0=E3=81=99=E5=A4=89=E6=8F=9B?= =?UTF-8?q?=E5=89=8D=E3=81=ABxml=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E3=81=8C=E5=A3=8A=E3=82=8C=E3=81=A6=E3=81=84=E3=81=9F=E3=82=89?= =?UTF-8?q?=E4=B8=AD=E6=AD=A2=20README.txt=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.txt | 9 +++- comeconv/ConvComment.cs | 4 +- comeconv/ConvTwitch.cs | 4 +- comeconv/Form1.Designer.cs | 84 +++++++++++++++++++------------------- comeconv/Form1.cs | 24 +++++++++-- comeconv/Form1_Sub.cs | 4 +- comeconv/Prop/Version.cs | 2 +- comeconv/RepairXmlFile.cs | 11 +---- comeconv/Util/Utils.cs | 22 +++++++++- 9 files changed, 101 insertions(+), 63 deletions(-) diff --git a/README.txt b/README.txt index 1c94ad9..0faeccd 100644 --- a/README.txt +++ b/README.txt @@ -1,7 +1,7 @@ =============================================================================== 【タイトル】 comeconv 【ファイル】 comeconv.exe -【作成月日】 2021/12/28 +【作成月日】 2022/01/01 【著 作 者】 nnn-revo2012 【開発環境】 Microsoft Windows 10 Microsoft Visual Studio Community 2017 @@ -190,3 +190,10 @@ GNU General Public License v3.0  ニコ動・ニコ生以外のチャットのタグ要素は全てエンコードするように修正  xmlファイル出力時 < > が正しくエンコードされなかったのを修正  サロゲートペア文字判定条件を文字数から Char.IsSurrogate() で判定するよう修正 +2022/01/01 Version 0.0.1.16 + 壊れたyoutubeのコメントファイル修復タブ作成 + - Version0.0.1.14以前のさきゅばす変換でjkcommentviewerのyoutubeコメントファイルを変換すると +  xmlファイルとして読み込めなくなる場合があった。そのファイルを修復します。 + - jkcommentviewerのyoutubeコメントファイル以外は処理できません。 + - jkcommentviewerのyoutubeコメントファイルで壊れていない場合は処理しません。 + さきゅばす変換の際、xmlが壊れていたら変換中止するように修正。 diff --git a/comeconv/ConvComment.cs b/comeconv/ConvComment.cs index a111415..9216bb7 100644 --- a/comeconv/ConvComment.cs +++ b/comeconv/ConvComment.cs @@ -12,7 +12,7 @@ using System.Xml.XPath; using System.Xml.Linq; using System.Diagnostics; -using System.Web; +using System.Net; using System.Globalization; using System.Text.RegularExpressions; @@ -147,7 +147,7 @@ private string ConvChatData(string chat, Props props) } data[ele.Name.ToString()] = ele.Value.ToString(); } - var ttt = HttpUtility.HtmlDecode(xdoc.Element("chat").Value.ToString()); + var ttt = WebUtility.HtmlDecode(xdoc.Element("chat").Value.ToString()); if (!data.ContainsKey("vpos")) data["vpos"] = "0"; if (!data.ContainsKey("date_usec")) diff --git a/comeconv/ConvTwitch.cs b/comeconv/ConvTwitch.cs index 6842f8f..8af6065 100644 --- a/comeconv/ConvTwitch.cs +++ b/comeconv/ConvTwitch.cs @@ -12,7 +12,7 @@ using System.Xml.XPath; using System.Xml.Linq; using System.Diagnostics; -using System.Web; +using System.Net; using System.Globalization; using System.Text.RegularExpressions; @@ -93,7 +93,7 @@ private string ConvChatData(IDictionary data, Props props) try { - var ttt = HttpUtility.HtmlDecode(data["content"]); + var ttt = WebUtility.HtmlDecode(data["content"]); if (!data.ContainsKey("vpos")) data["vpos"] = "0"; if (!data.ContainsKey("date_usec")) diff --git a/comeconv/Form1.Designer.cs b/comeconv/Form1.Designer.cs index 0a27456..a5ecc5f 100644 --- a/comeconv/Form1.Designer.cs +++ b/comeconv/Form1.Designer.cs @@ -83,6 +83,9 @@ private void InitializeComponent() this.checkBox11 = new System.Windows.Forms.CheckBox(); this.checkBox9 = new System.Windows.Forms.CheckBox(); this.label14 = new System.Windows.Forms.Label(); + this.repair = new System.Windows.Forms.TabPage(); + this.label22 = new System.Windows.Forms.Label(); + this.label21 = new System.Windows.Forms.Label(); this.setting = new System.Windows.Forms.TabPage(); this.checkBox12 = new System.Windows.Forms.CheckBox(); this.comboBox2 = new System.Windows.Forms.ComboBox(); @@ -94,9 +97,6 @@ private void InitializeComponent() this.label5 = new System.Windows.Forms.Label(); this.button3 = new System.Windows.Forms.Button(); this.textBox3 = new System.Windows.Forms.TextBox(); - this.repair = new System.Windows.Forms.TabPage(); - this.label22 = new System.Windows.Forms.Label(); - this.label21 = new System.Windows.Forms.Label(); this.button1 = new System.Windows.Forms.Button(); this.label8 = new System.Windows.Forms.Label(); this.label9 = new System.Windows.Forms.Label(); @@ -111,9 +111,9 @@ private void InitializeComponent() this.twitch.SuspendLayout(); this.groupBox4.SuspendLayout(); this.panel4.SuspendLayout(); + this.repair.SuspendLayout(); this.setting.SuspendLayout(); this.groupBox3.SuspendLayout(); - this.repair.SuspendLayout(); this.SuspendLayout(); // // listBox1 @@ -705,6 +705,43 @@ private void InitializeComponent() this.label14.Size = new System.Drawing.Size(409, 30); this.label14.TabIndex = 3; this.label14.Text = "Twitchのコメントファイルをニコ動コメント形式(xml)に変換します\r\nさきゅばす用にも変換できます。"; + // + // repair + // + this.repair.AllowDrop = true; + this.repair.BackColor = System.Drawing.Color.Honeydew; + this.repair.Controls.Add(this.label22); + this.repair.Controls.Add(this.label21); + this.repair.Location = new System.Drawing.Point(4, 22); + this.repair.Name = "repair"; + this.repair.Padding = new System.Windows.Forms.Padding(3); + this.repair.Size = new System.Drawing.Size(432, 396); + this.repair.TabIndex = 3; + this.repair.Text = "ファイル修復"; + this.repair.DragDrop += new System.Windows.Forms.DragEventHandler(this.repair_DragDrop); + this.repair.DragEnter += new System.Windows.Forms.DragEventHandler(this.repair_DragEnter); + // + // label22 + // + this.label22.AutoSize = true; + this.label22.Font = new System.Drawing.Font("MS UI Gothic", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.label22.Location = new System.Drawing.Point(12, 130); + this.label22.Name = "label22"; + this.label22.Size = new System.Drawing.Size(404, 80); + this.label22.TabIndex = 1; + this.label22.Text = "このメニューは上記が原因でさきゅばすまたはほかのツールで\r\n読み込めなかった場合の修正専用です。\r\n正常に読み込めるyoutubeコメントファイルやほかのツールで" + + "\r\n取得したコメントファイルは変換しないでください。\r\n(読み込めなくなる可能性があります。)"; + // + // label21 + // + this.label21.AutoSize = true; + this.label21.Font = new System.Drawing.Font("MS UI Gothic", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(128))); + this.label21.Location = new System.Drawing.Point(11, 39); + this.label21.Name = "label21"; + this.label21.Size = new System.Drawing.Size(413, 64); + this.label21.TabIndex = 0; + this.label21.Text = "jkcommentviewerで取得したyoutubeコメントファイルを\r\ncomeconv 0.0.1.15より古いバージョンでさきゅばす用に変換\r\nした場合、" + + "xmlファイルが読み込めなくなる場合があります。\r\nそれを修正します。"; // // setting // @@ -830,41 +867,6 @@ private void InitializeComponent() this.textBox3.Size = new System.Drawing.Size(326, 19); this.textBox3.TabIndex = 0; this.toolTip1.SetToolTip(this.textBox3, "comeconv添付以外のFFmpegを使用したい場合だけ指定してください"); - // - // repair - // - this.repair.AllowDrop = true; - this.repair.BackColor = System.Drawing.Color.Honeydew; - this.repair.Controls.Add(this.label22); - this.repair.Controls.Add(this.label21); - this.repair.Location = new System.Drawing.Point(4, 22); - this.repair.Name = "repair"; - this.repair.Padding = new System.Windows.Forms.Padding(3); - this.repair.Size = new System.Drawing.Size(432, 396); - this.repair.TabIndex = 3; - this.repair.Text = "ファイル修復"; - this.repair.DragDrop += new System.Windows.Forms.DragEventHandler(this.repair_DragDrop); - this.repair.DragEnter += new System.Windows.Forms.DragEventHandler(this.repair_DragEnter); - // - // label22 - // - this.label22.AutoSize = true; - this.label22.Location = new System.Drawing.Point(12, 130); - this.label22.Name = "label22"; - this.label22.Size = new System.Drawing.Size(41, 12); - this.label22.TabIndex = 1; - this.label22.Text = "label22"; - // - // label21 - // - this.label21.AutoSize = true; - this.label21.Font = new System.Drawing.Font("MS UI Gothic", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(128))); - this.label21.Location = new System.Drawing.Point(11, 39); - this.label21.Name = "label21"; - this.label21.Size = new System.Drawing.Size(413, 64); - this.label21.TabIndex = 0; - this.label21.Text = "jkcommentviewerで取得したyoutubeコメントファイルを\r\ncomeconv 0.0.1.15より古いバージョンでさきゅばす用に変換\r\nした場合、" + - "xmlファイルが読み込めなくなる場合があります。\r\nそれを修正します。"; // // button1 // @@ -937,12 +939,12 @@ private void InitializeComponent() this.groupBox4.PerformLayout(); this.panel4.ResumeLayout(false); this.panel4.PerformLayout(); + this.repair.ResumeLayout(false); + this.repair.PerformLayout(); this.setting.ResumeLayout(false); this.setting.PerformLayout(); this.groupBox3.ResumeLayout(false); this.groupBox3.PerformLayout(); - this.repair.ResumeLayout(false); - this.repair.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); diff --git a/comeconv/Form1.cs b/comeconv/Form1.cs index 2865553..ca7a388 100644 --- a/comeconv/Form1.cs +++ b/comeconv/Form1.cs @@ -98,7 +98,17 @@ private async void tabPage1_DragDrop(object sender, DragEventArgs e) AddLog("jkcommentviewerのyoutubeコメントファイルは変換の必要ありません。", 1); } else - await Task.Run(() => ConvXml(files[i])); + { + if (!Utils.CanXmlRead(files[i])) + { + AddLog("このxmlファイルは読み込めません。", 1); + AddLog("変換中止します。", 1); + } + else + { + await Task.Run(() => ConvXml(files[i])); + } + } } else if (filetype == 1) await Task.Run(() => ConvVideo(files[i])); @@ -406,10 +416,18 @@ private async void repair_DragDrop(object sender, DragEventArgs e) if (Utils.IsXmlFileType(files[i]) != 10) { AddLog("jkcommentviewerのyoutubeコメントファイル以外は処理できません。", 1); - AddLog("また、一度修復したyoutubeコメントファイルは処理できません。", 1); } else - await Task.Run(() => RepairXml(files[i])); + { + if (Utils.CanXmlRead(files[i])) + { + AddLog("このyoutubeコメントファイルは壊れていません。", 1); + } + else + { + await Task.Run(() => RepairXml(files[i])); + } + } } } ProgramStatus = 0; diff --git a/comeconv/Form1_Sub.cs b/comeconv/Form1_Sub.cs index ed14d1f..f73468f 100644 --- a/comeconv/Form1_Sub.cs +++ b/comeconv/Form1_Sub.cs @@ -349,7 +349,7 @@ private void RepairXml(string filename, string mode = "repair") File.Move(filename, backupfile); newfile = filename; - AddLog("コメント修復します。", 1); + AddLog("コメント修復開始します。", 1); AddLog("元ファイル: " + Path.GetFileName(backupfile), 1); AddLog("修復ファイル: " + Path.GetFileName(newfile), 1); { @@ -361,7 +361,7 @@ private void RepairXml(string filename, string mode = "repair") } else { - AddLog("コメント変換に失敗しました。", 1); + AddLog("コメント修復に失敗しました。", 1); } } return; diff --git a/comeconv/Prop/Version.cs b/comeconv/Prop/Version.cs index 10a976f..458e587 100644 --- a/comeconv/Prop/Version.cs +++ b/comeconv/Prop/Version.cs @@ -5,7 +5,7 @@ namespace comeconv.Prop public class Ver { public static readonly string Version = "0.0.1.16"; - public static readonly string VerDate = "2021/12/28"; + public static readonly string VerDate = "2022/01/01"; public static string GetFullVersion() { diff --git a/comeconv/RepairXmlFile.cs b/comeconv/RepairXmlFile.cs index e904136..d410cab 100644 --- a/comeconv/RepairXmlFile.cs +++ b/comeconv/RepairXmlFile.cs @@ -5,14 +5,12 @@ using System.Drawing; using System.Linq; using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; using System.IO; using System.Xml; using System.Xml.XPath; using System.Xml.Linq; using System.Diagnostics; -using System.Web; +using System.Net; using System.Globalization; using System.Text.RegularExpressions; @@ -55,10 +53,6 @@ public bool XmlRepair(string sfile, string dfile) try { - if (!File.Exists(sfile)) - { - return false; - } using (var sr = new StreamReader(sfile, enc)) using (var sw = new StreamWriter(dfile, true, enc)) { @@ -102,14 +96,13 @@ public bool XmlRepair(string sfile, string dfile) private string RepairChatData(string chat, Props props) { - var data = new Dictionary(); if (string.IsNullOrEmpty(chat)) return ""; try { var ttt = chat.Replace("&lt;", "<").Replace("&gt;", ">"); - ttt = Utils.Encode(Utils.Decode(ttt)); + ttt = Utils.Encode(WebUtility.HtmlDecode(ttt)); ttt = ttt.Replace("="", "=\"").Replace("" ", "\" "); ttt = ttt.Replace("">", "\">"); ttt = ttt.Replace("<chat ", ""); diff --git a/comeconv/Util/Utils.cs b/comeconv/Util/Utils.cs index 3276b62..3f0e657 100644 --- a/comeconv/Util/Utils.cs +++ b/comeconv/Util/Utils.cs @@ -5,8 +5,6 @@ using System.Drawing; using System.Linq; using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; using System.IO; using System.Xml; using System.Xml.XPath; @@ -151,6 +149,26 @@ public static int IsTwitchFileType(string filename) return result; } + + //Xmlファイルが壊れてないか調べる + public static bool CanXmlRead(string file) + { + try + { + if (!File.Exists(file)) + { + return false; + } + XDocument xdoc = XDocument.Load(file); + } + catch (Exception) + { + return false; + } + + return true; + } + //ニコニコのXmlファイルの形式を返す public static int IsXmlFileType(string filename) {