diff --git a/MKVTest/Form1.Designer.cs b/MKVTest/Form1.Designer.cs index 1f95ee9..4729c3e 100644 --- a/MKVTest/Form1.Designer.cs +++ b/MKVTest/Form1.Designer.cs @@ -33,14 +33,13 @@ this.mainMenuStrip = new System.Windows.Forms.MenuStrip(); this.fileMainMenu = new System.Windows.Forms.ToolStripMenuItem(); this.openFolderFileMainMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.selectFileMainMenu = new System.Windows.Forms.ToolStripMenuItem(); this.inputFilesListView = new System.Windows.Forms.ListView(); this.detailsGroupBox = new System.Windows.Forms.GroupBox(); this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); this.currentTitleLabel = new System.Windows.Forms.Label(); this.buttonPanel = new System.Windows.Forms.Panel(); this.applyChangesButton = new System.Windows.Forms.Button(); - this.debugToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.tableLayoutPanel1.SuspendLayout(); this.mainMenuStrip.SuspendLayout(); this.detailsGroupBox.SuspendLayout(); @@ -52,7 +51,7 @@ // this.selectFolderButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.selectFolderButton.Location = new System.Drawing.Point(4, 12); - this.selectFolderButton.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.selectFolderButton.Margin = new System.Windows.Forms.Padding(4); this.selectFolderButton.Name = "selectFolderButton"; this.selectFolderButton.Size = new System.Drawing.Size(147, 54); this.selectFolderButton.TabIndex = 1; @@ -72,7 +71,7 @@ this.tableLayoutPanel1.Controls.Add(this.buttonPanel, 2, 4); this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(6); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; this.tableLayoutPanel1.RowCount = 5; this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 55F)); @@ -89,8 +88,7 @@ this.tableLayoutPanel1.SetColumnSpan(this.mainMenuStrip, 3); this.mainMenuStrip.ImageScalingSize = new System.Drawing.Size(28, 28); this.mainMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.fileMainMenu, - this.debugToolStripMenuItem}); + this.fileMainMenu}); this.mainMenuStrip.Location = new System.Drawing.Point(0, 0); this.mainMenuStrip.Name = "mainMenuStrip"; this.mainMenuStrip.Padding = new System.Windows.Forms.Padding(11, 4, 0, 4); @@ -102,7 +100,7 @@ // this.fileMainMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.openFolderFileMainMenu, - this.selectFileMainMenu}); + this.exitToolStripMenuItem}); this.fileMainMenu.Name = "fileMainMenu"; this.fileMainMenu.Size = new System.Drawing.Size(56, 34); this.fileMainMenu.Text = "&File"; @@ -110,14 +108,9 @@ // openFolderFileMainMenu // this.openFolderFileMainMenu.Name = "openFolderFileMainMenu"; - this.openFolderFileMainMenu.Size = new System.Drawing.Size(218, 34); + this.openFolderFileMainMenu.Size = new System.Drawing.Size(239, 34); this.openFolderFileMainMenu.Text = "&Open Folder"; - // - // selectFileMainMenu - // - this.selectFileMainMenu.Name = "selectFileMainMenu"; - this.selectFileMainMenu.Size = new System.Drawing.Size(218, 34); - this.selectFileMainMenu.Text = "&Select File"; + this.openFolderFileMainMenu.Click += new System.EventHandler(this.openFolderFileMainMenu_Click); // // inputFilesListView // @@ -125,7 +118,7 @@ this.inputFilesListView.Dock = System.Windows.Forms.DockStyle.Fill; this.inputFilesListView.LabelWrap = false; this.inputFilesListView.Location = new System.Drawing.Point(6, 61); - this.inputFilesListView.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.inputFilesListView.Margin = new System.Windows.Forms.Padding(6); this.inputFilesListView.Name = "inputFilesListView"; this.tableLayoutPanel1.SetRowSpan(this.inputFilesListView, 4); this.inputFilesListView.Size = new System.Drawing.Size(603, 673); @@ -138,9 +131,9 @@ this.detailsGroupBox.Controls.Add(this.flowLayoutPanel1); this.detailsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill; this.detailsGroupBox.Location = new System.Drawing.Point(621, 61); - this.detailsGroupBox.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.detailsGroupBox.Margin = new System.Windows.Forms.Padding(6); this.detailsGroupBox.Name = "detailsGroupBox"; - this.detailsGroupBox.Padding = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.detailsGroupBox.Padding = new System.Windows.Forms.Padding(6); this.tableLayoutPanel1.SetRowSpan(this.detailsGroupBox, 3); this.detailsGroupBox.Size = new System.Drawing.Size(400, 592); this.detailsGroupBox.TabIndex = 5; @@ -153,7 +146,7 @@ this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; this.flowLayoutPanel1.Location = new System.Drawing.Point(6, 28); - this.flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(6); this.flowLayoutPanel1.Name = "flowLayoutPanel1"; this.flowLayoutPanel1.Size = new System.Drawing.Size(388, 558); this.flowLayoutPanel1.TabIndex = 0; @@ -174,7 +167,7 @@ this.buttonPanel.Controls.Add(this.selectFolderButton); this.buttonPanel.Dock = System.Windows.Forms.DockStyle.Fill; this.buttonPanel.Location = new System.Drawing.Point(621, 665); - this.buttonPanel.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.buttonPanel.Margin = new System.Windows.Forms.Padding(6); this.buttonPanel.Name = "buttonPanel"; this.buttonPanel.Size = new System.Drawing.Size(400, 69); this.buttonPanel.TabIndex = 8; @@ -184,7 +177,7 @@ this.applyChangesButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.applyChangesButton.Enabled = false; this.applyChangesButton.Location = new System.Drawing.Point(205, 10); - this.applyChangesButton.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.applyChangesButton.Margin = new System.Windows.Forms.Padding(6); this.applyChangesButton.Name = "applyChangesButton"; this.applyChangesButton.Size = new System.Drawing.Size(187, 54); this.applyChangesButton.TabIndex = 2; @@ -192,12 +185,12 @@ this.applyChangesButton.UseVisualStyleBackColor = true; this.applyChangesButton.Click += new System.EventHandler(this.applyChangesButton_Click); // - // debugToolStripMenuItem + // exitToolStripMenuItem // - this.debugToolStripMenuItem.Name = "debugToolStripMenuItem"; - this.debugToolStripMenuItem.Size = new System.Drawing.Size(87, 34); - this.debugToolStripMenuItem.Text = "Debug"; - this.debugToolStripMenuItem.Click += new System.EventHandler(this.debugToolStripMenuItem_Click); + this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; + this.exitToolStripMenuItem.Size = new System.Drawing.Size(239, 34); + this.exitToolStripMenuItem.Text = "E&xit"; + this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); // // Form1 // @@ -207,7 +200,7 @@ this.ClientSize = new System.Drawing.Size(1027, 740); this.Controls.Add(this.tableLayoutPanel1); this.MainMenuStrip = this.mainMenuStrip; - this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.Margin = new System.Windows.Forms.Padding(4); this.Name = "Form1"; this.Text = "Form1"; this.tableLayoutPanel1.ResumeLayout(false); @@ -228,14 +221,13 @@ private System.Windows.Forms.MenuStrip mainMenuStrip; private System.Windows.Forms.ToolStripMenuItem fileMainMenu; private System.Windows.Forms.ToolStripMenuItem openFolderFileMainMenu; - private System.Windows.Forms.ToolStripMenuItem selectFileMainMenu; private System.Windows.Forms.ListView inputFilesListView; private System.Windows.Forms.GroupBox detailsGroupBox; private System.Windows.Forms.Panel buttonPanel; private System.Windows.Forms.Button applyChangesButton; private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; private System.Windows.Forms.Label currentTitleLabel; - private System.Windows.Forms.ToolStripMenuItem debugToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; } } diff --git a/MKVTest/Form1.cs b/MKVTest/Form1.cs index 4a7d77d..7a9a0b4 100644 --- a/MKVTest/Form1.cs +++ b/MKVTest/Form1.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using System.IO; using System.Text; using System.Windows.Forms; @@ -21,7 +22,7 @@ namespace MKVTest InitializeComponent(); inputFilesListView.ItemSelectionChanged += UpdateFilePropPrediction; inputFilesListView.MouseClick += ShowMenu; - this.Resize += Form1_Resize; + Resize += Form1_Resize; var item = new ToolStripMenuItem { @@ -30,7 +31,7 @@ namespace MKVTest }; menu.Items.Add(item); - var inputColumn = new ColumnHeader() + var inputColumn = new ColumnHeader { Text = @"Files", Name = @"HeaderColumn", @@ -43,7 +44,7 @@ namespace MKVTest { if (e.Button == MouseButtons.Right) { - if (inputFilesListView.FocusedItem.Bounds.Contains(e.Location) == true) + if (inputFilesListView.FocusedItem.Bounds.Contains(e.Location)) { menu.Show(Cursor.Position); } @@ -57,7 +58,7 @@ namespace MKVTest flowLayoutPanel1.Controls.Clear(); flowLayoutPanel1.Invalidate(); - var titleLabel = new Label() + var titleLabel = new Label { Parent = flowLayoutPanel1, Text = @"Current Title: " + file.SegementInformation?.Title, @@ -68,6 +69,7 @@ namespace MKVTest var videoTrackNumber = 1; var audioTrackNumber = 1; + var subtitleTrackNumber = 1; foreach (var fileTrack in file.Tracks) { @@ -115,6 +117,28 @@ namespace MKVTest flowLayoutPanel1.Container.Add(languageLabel); } } + + if (fileTrack.Type == MkvTrack.TrackType.Subtitle) + { + var nameLabel = new Label + { + AutoSize = true, + Text = @"Track:s" + subtitleTrackNumber + @" Name: " + fileTrack.Name, + Parent = flowLayoutPanel1 + }; + var languageLabel = new Label + { + AutoSize = true, + Text = @"Track:s" + subtitleTrackNumber + @" Language: " + fileTrack.Language, + Parent = flowLayoutPanel1 + }; + audioTrackNumber++; + if (flowLayoutPanel1.Container != null) + { + flowLayoutPanel1.Container.Add(nameLabel); + flowLayoutPanel1.Container.Add(languageLabel); + } + } } } @@ -159,7 +183,7 @@ namespace MKVTest var files = dir.GetFiles("*.mkv", SearchOption.TopDirectoryOnly); foreach (var file in files) { - var node = new ListViewItem() + var node = new ListViewItem { Tag = true, //Assume the file needs to be updated. Name = file.FullName, @@ -177,11 +201,9 @@ namespace MKVTest private void button1_Click(object sender, EventArgs e) { var d = new FolderBrowserDialog(); - if (d.ShowDialog() == DialogResult.OK) - { - ClearForm(); - ListFiles(d.SelectedPath); - } + if (d.ShowDialog() != DialogResult.OK) return; + ClearForm(); + ListFiles(d.SelectedPath); } private void Form1_Resize(object sender, EventArgs e) @@ -200,13 +222,17 @@ namespace MKVTest var command = "/C mkvpropedit.exe --edit info --set \"title=" + GetEpisodeName(node.Text) + "\" --edit track:v1 --set \"name=" + GetEpisodeName(node.Text) + "\" --edit track:v1 --set \"language=eng\" --edit track:a1 --set \"name=English\" --edit track:a1 --set \"language=eng\" \"" + node.Name + "\" > temp.txt"; - var process = new System.Diagnostics.Process(); - var startInfo = new System.Diagnostics.ProcessStartInfo + var process = new Process(); + var startInfo = new ProcessStartInfo { - WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal, + WindowStyle = ProcessWindowStyle.Normal, FileName = "cmd.exe", Arguments = command }; + if (!CheckFiles()) + { + MessageBox.Show(@"The two required files, mkvpropedit.exe and mkvinfo.exe are missing from this program's startup folder. These files are required to edit MKV files.", @"Missing Required Files"); + } process.StartInfo = startInfo; process.Start(); while (!process.HasExited) @@ -229,11 +255,22 @@ namespace MKVTest flowLayoutPanel1.Invalidate(); } - private void debugToolStripMenuItem_Click(object sender, EventArgs e) + private void openFolderFileMainMenu_Click(object sender, EventArgs e) { - var s = new SerializeMkvInfo(); - var xml = s.SerializeFile("C:\\Users\\Crypto\\Documents\\Source Control\\mkvbatcheditor\\MKVTest\\info.txt"); - File.WriteAllLines("C:\\Users\\Crypto\\Desktop\\1234Testing.txt", xml.ToArray()); + var d = new FolderBrowserDialog(); + if (d.ShowDialog() != DialogResult.OK) return; + ClearForm(); + ListFiles(d.SelectedPath); + } + + private void exitToolStripMenuItem_Click(object sender, EventArgs e) + { + Application.Exit(); + } + + public static bool CheckFiles() + { + return File.Exists("mkvpropedit.exe") && File.Exists("mkvinfo.exe"); } } } diff --git a/MKVTest/MKVTest.csproj b/MKVTest/MKVTest.csproj index 0459be7..9d5a2dd 100644 --- a/MKVTest/MKVTest.csproj +++ b/MKVTest/MKVTest.csproj @@ -51,6 +51,7 @@ Form1.cs + diff --git a/MKVTest/MkvAttribute.cs b/MKVTest/MkvAttribute.cs new file mode 100644 index 0000000..920b629 --- /dev/null +++ b/MKVTest/MkvAttribute.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MKVTest +{ + class MkvAttribute + { + public string Name; + public string Value; + } +} diff --git a/MKVTest/MkvFile.cs b/MKVTest/MkvFile.cs index 9d53df8..aa40d4c 100644 --- a/MKVTest/MkvFile.cs +++ b/MKVTest/MkvFile.cs @@ -9,6 +9,7 @@ namespace MKVTest class MkvFile { public List Tracks; + public List Attributes; public MkvSegmentInformation SegementInformation; public string FullName; public string FileName; diff --git a/MKVTest/MkvFileInfo.cs b/MKVTest/MkvFileInfo.cs index d9e1b7f..a7470ce 100644 --- a/MKVTest/MkvFileInfo.cs +++ b/MKVTest/MkvFileInfo.cs @@ -30,6 +30,10 @@ namespace MKVTest Arguments = command }; process.StartInfo = startInfo; + if (!Form1.CheckFiles()) + { + MessageBox.Show(@"The two required files, mkvpropedit.exe and mkvinfo.exe are missing from this program's startup folder. These files are required to edit MKV files.", @"Missing Required Files"); + } process.Start(); while (!process.HasExited) { @@ -76,6 +80,7 @@ namespace MKVTest { var index = info[i].IndexOf(":", StringComparison.Ordinal) + 1; track.Name = info[i].Substring(index, (info[i].Length - index)).Trim(); + if(track.Type == MkvTrack.TrackType.Subtitle) tracks.Add(track); } if (info[i].Contains("Language:")) diff --git a/MKVTest/SerializeMkvInfo.cs b/MKVTest/SerializeMkvInfo.cs index 6204650..2bc6bd8 100644 --- a/MKVTest/SerializeMkvInfo.cs +++ b/MKVTest/SerializeMkvInfo.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.IO; using System.Text; @@ -26,23 +27,23 @@ namespace MKVTest } if (i == file.Length - 1) { - test[test.Count - 1] = padding + "<" + tag.Name + ">" + tag.Value + ""; + var t = stack.Pop(); + test[test.Count - 2] = padding + "<" + t.Name + " Value=\"" + t.Value + "\" />"; + test[test.Count - 1] = padding + "<" + tag.Name + " Value=\"" + tag.Value + "\" />"; + //Unwind the stack. + foreach (var s in stack) + { + test.Add(""); + } + continue; } - //xml.Append(padding + "<" + tag.Name + ">" + tag.Value == string.Empty ? Environment.NewLine : string.Empty); - //test.Add(padding + "<" + tag.Name + ">"); - //if (stack.Count != 0) - //{ - // var t = stack.Pop(); - // //xml.Append(t.Value + ""); - // test.Add(t.Value + ""); - //} if (depth == lastDepthLevel) { if (stack.Count != 0) { var t = stack.Pop(); - test[test.Count - 1] = padding + test[test.Count - 1] + t.Value + ""; + test[test.Count - 1] = padding + "<" + t.Name + " Value=\"" + t.Value + "\" />"; } } else if (depth < lastDepthLevel) @@ -51,16 +52,16 @@ namespace MKVTest if (stack.Count != 0) { var t = stack.Pop(); - test[test.Count - 1] = padding + "<" + t.Name + ">" + t.Value + ""; + test[test.Count - 1] = padding + "<" + t.Name + " Value=\"" + t.Value + "\" />"; var diff = lastDepthLevel - depth; var subPadding = new StringBuilder(); for (var j = 0; j < diff; j++) { subPadding.Clear(); - for (var k = padding.Length - j; k != 0; k--) - { - subPadding.Append(" "); - } + //for (var k = padding.Length - j; k != 0; k--) + //{ + // subPadding.Append(" "); + //} if (stack.Count != 0) { test.Add(subPadding + ""); @@ -80,6 +81,20 @@ namespace MKVTest return test; } + public List CreateTagListFromFile(string filePath) + { + var file = File.ReadAllLines(filePath); + if (file.Length == 0) return new List(); + var tags = new List(); + foreach (var line in file) + { + var tag = CreateTagFromString(line); + if(tag.Name != string.Empty) tags.Add(tag); + } + + return tags; + } + private static XmlTag CreateTagFromString(string text, XmlTag parent = null) { var tag = new XmlTag(); @@ -88,6 +103,7 @@ namespace MKVTest var insideBraces = false; var name = new StringBuilder(); var value = new StringBuilder(); + var attributes = new List(); for (var i = 0; i < text.Length; i++) { @@ -96,7 +112,7 @@ namespace MKVTest continue; } - if (text[i].ToString() == ":" && !foundDelimiter) + if ((text[i].ToString() == ":" || text[i] == ',') && !foundDelimiter) { foundDelimiter = true; continue; @@ -110,6 +126,7 @@ namespace MKVTest insideBraces = false; continue; } + value.Append(text[i]); } else @@ -127,10 +144,10 @@ namespace MKVTest if(!insideBraces) name.Append(text[i]); } } - if (text.Contains("Segment, ")) - { - name.Clear(); - } + //if (text.Contains("Segment, ")) + //{ + // name.Clear(); + //} tag.Name = FormatTagName(name.ToString()); tag.Value = value.ToString().Trim(); tag.Parent = parent;