diff --git a/src/Forms/BatchConvert.Designer.cs b/src/Forms/BatchConvert.Designer.cs index c58bccce1..e4c0f866b 100644 --- a/src/Forms/BatchConvert.Designer.cs +++ b/src/Forms/BatchConvert.Designer.cs @@ -32,6 +32,7 @@ this.buttonConvert = new System.Windows.Forms.Button(); this.buttonCancel = new System.Windows.Forms.Button(); this.groupBoxConvertOptions = new System.Windows.Forms.GroupBox(); + this.checkBoxAutoBalance = new System.Windows.Forms.CheckBox(); this.buttonMultipleReplaceSettings = new System.Windows.Forms.Button(); this.checkBoxMultipleReplace = new System.Windows.Forms.CheckBox(); this.checkBoxFixCommonErrors = new System.Windows.Forms.CheckBox(); @@ -50,6 +51,7 @@ this.checkBoxRemoveTextForHI = new System.Windows.Forms.CheckBox(); this.checkBoxRemoveFormatting = new System.Windows.Forms.CheckBox(); this.groupBoxOutput = new System.Windows.Forms.GroupBox(); + this.checkBoxOverwriteOriginalFiles = new System.Windows.Forms.CheckBox(); this.linkLabelOpenOutputFolder = new System.Windows.Forms.LinkLabel(); this.buttonStyles = new System.Windows.Forms.Button(); this.checkBoxOverwrite = new System.Windows.Forms.CheckBox(); @@ -61,6 +63,7 @@ this.buttonChooseFolder = new System.Windows.Forms.Button(); this.textBoxOutputFolder = new System.Windows.Forms.TextBox(); this.groupBoxInput = new System.Windows.Forms.GroupBox(); + this.buttonSearchFolder = new System.Windows.Forms.Button(); this.buttonInputBrowse = new System.Windows.Forms.Button(); this.labelChooseInputFiles = new System.Windows.Forms.Label(); this.listViewInputFiles = new System.Windows.Forms.ListView(); @@ -75,7 +78,7 @@ this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); this.progressBar1 = new System.Windows.Forms.ProgressBar(); this.labelStatus = new System.Windows.Forms.Label(); - this.checkBoxAutoBalance = new System.Windows.Forms.CheckBox(); + this.checkBoxSetMinimumDisplayTimeBetweenSubs = new System.Windows.Forms.CheckBox(); this.groupBoxConvertOptions.SuspendLayout(); this.groupBoxChangeFrameRate.SuspendLayout(); this.groupBoxOffsetTimeCodes.SuspendLayout(); @@ -112,6 +115,7 @@ // this.groupBoxConvertOptions.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxConvertOptions.Controls.Add(this.checkBoxSetMinimumDisplayTimeBetweenSubs); this.groupBoxConvertOptions.Controls.Add(this.checkBoxAutoBalance); this.groupBoxConvertOptions.Controls.Add(this.buttonMultipleReplaceSettings); this.groupBoxConvertOptions.Controls.Add(this.checkBoxMultipleReplace); @@ -129,6 +133,16 @@ this.groupBoxConvertOptions.TabStop = false; this.groupBoxConvertOptions.Text = "Convert options"; // + // checkBoxAutoBalance + // + this.checkBoxAutoBalance.AutoSize = true; + this.checkBoxAutoBalance.Location = new System.Drawing.Point(16, 145); + this.checkBoxAutoBalance.Name = "checkBoxAutoBalance"; + this.checkBoxAutoBalance.Size = new System.Drawing.Size(113, 17); + this.checkBoxAutoBalance.TabIndex = 9; + this.checkBoxAutoBalance.Text = "Auto balance lines"; + this.checkBoxAutoBalance.UseVisualStyleBackColor = true; + // // buttonMultipleReplaceSettings // this.buttonMultipleReplaceSettings.ImeMode = System.Windows.Forms.ImeMode.NoControl; @@ -306,6 +320,7 @@ // this.groupBoxOutput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxOutput.Controls.Add(this.checkBoxOverwriteOriginalFiles); this.groupBoxOutput.Controls.Add(this.linkLabelOpenOutputFolder); this.groupBoxOutput.Controls.Add(this.buttonStyles); this.groupBoxOutput.Controls.Add(this.checkBoxOverwrite); @@ -324,10 +339,21 @@ this.groupBoxOutput.TabStop = false; this.groupBoxOutput.Text = "Output"; // + // checkBoxOverwriteOriginalFiles + // + this.checkBoxOverwriteOriginalFiles.AutoSize = true; + this.checkBoxOverwriteOriginalFiles.Location = new System.Drawing.Point(9, 19); + this.checkBoxOverwriteOriginalFiles.Name = "checkBoxOverwriteOriginalFiles"; + this.checkBoxOverwriteOriginalFiles.Size = new System.Drawing.Size(300, 17); + this.checkBoxOverwriteOriginalFiles.TabIndex = 11; + this.checkBoxOverwriteOriginalFiles.Text = "Overwrite original files (new extension if format is changed)"; + this.checkBoxOverwriteOriginalFiles.UseVisualStyleBackColor = true; + this.checkBoxOverwriteOriginalFiles.CheckedChanged += new System.EventHandler(this.checkBoxOverwriteOriginalFiles_CheckedChanged); + // // linkLabelOpenOutputFolder // this.linkLabelOpenOutputFolder.AutoSize = true; - this.linkLabelOpenOutputFolder.Location = new System.Drawing.Point(434, 44); + this.linkLabelOpenOutputFolder.Location = new System.Drawing.Point(434, 74); this.linkLabelOpenOutputFolder.Name = "linkLabelOpenOutputFolder"; this.linkLabelOpenOutputFolder.Size = new System.Drawing.Size(42, 13); this.linkLabelOpenOutputFolder.TabIndex = 3; @@ -337,7 +363,7 @@ // // buttonStyles // - this.buttonStyles.Location = new System.Drawing.Point(311, 100); + this.buttonStyles.Location = new System.Drawing.Point(311, 141); this.buttonStyles.Name = "buttonStyles"; this.buttonStyles.Size = new System.Drawing.Size(116, 23); this.buttonStyles.TabIndex = 7; @@ -349,7 +375,7 @@ // checkBoxOverwrite // this.checkBoxOverwrite.AutoSize = true; - this.checkBoxOverwrite.Location = new System.Drawing.Point(13, 67); + this.checkBoxOverwrite.Location = new System.Drawing.Point(13, 97); this.checkBoxOverwrite.Name = "checkBoxOverwrite"; this.checkBoxOverwrite.Size = new System.Drawing.Size(130, 17); this.checkBoxOverwrite.TabIndex = 4; @@ -360,7 +386,7 @@ // this.comboBoxSubtitleFormats.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboBoxSubtitleFormats.FormattingEnabled = true; - this.comboBoxSubtitleFormats.Location = new System.Drawing.Point(80, 102); + this.comboBoxSubtitleFormats.Location = new System.Drawing.Point(80, 143); this.comboBoxSubtitleFormats.Name = "comboBoxSubtitleFormats"; this.comboBoxSubtitleFormats.Size = new System.Drawing.Size(225, 21); this.comboBoxSubtitleFormats.TabIndex = 6; @@ -369,7 +395,7 @@ // labelEncoding // this.labelEncoding.AutoSize = true; - this.labelEncoding.Location = new System.Drawing.Point(10, 137); + this.labelEncoding.Location = new System.Drawing.Point(10, 178); this.labelEncoding.Name = "labelEncoding"; this.labelEncoding.Size = new System.Drawing.Size(52, 13); this.labelEncoding.TabIndex = 8; @@ -379,7 +405,7 @@ // this.comboBoxEncoding.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboBoxEncoding.FormattingEnabled = true; - this.comboBoxEncoding.Location = new System.Drawing.Point(80, 134); + this.comboBoxEncoding.Location = new System.Drawing.Point(80, 175); this.comboBoxEncoding.Name = "comboBoxEncoding"; this.comboBoxEncoding.Size = new System.Drawing.Size(225, 21); this.comboBoxEncoding.TabIndex = 9; @@ -387,7 +413,7 @@ // labelOutputFormat // this.labelOutputFormat.AutoSize = true; - this.labelOutputFormat.Location = new System.Drawing.Point(10, 105); + this.labelOutputFormat.Location = new System.Drawing.Point(10, 146); this.labelOutputFormat.Name = "labelOutputFormat"; this.labelOutputFormat.Size = new System.Drawing.Size(39, 13); this.labelOutputFormat.TabIndex = 5; @@ -396,7 +422,7 @@ // labelChooseOutputFolder // this.labelChooseOutputFolder.AutoSize = true; - this.labelChooseOutputFolder.Location = new System.Drawing.Point(10, 25); + this.labelChooseOutputFolder.Location = new System.Drawing.Point(10, 55); this.labelChooseOutputFolder.Name = "labelChooseOutputFolder"; this.labelChooseOutputFolder.Size = new System.Drawing.Size(105, 13); this.labelChooseOutputFolder.TabIndex = 0; @@ -404,7 +430,7 @@ // // buttonChooseFolder // - this.buttonChooseFolder.Location = new System.Drawing.Point(402, 39); + this.buttonChooseFolder.Location = new System.Drawing.Point(402, 69); this.buttonChooseFolder.Name = "buttonChooseFolder"; this.buttonChooseFolder.Size = new System.Drawing.Size(26, 23); this.buttonChooseFolder.TabIndex = 2; @@ -414,7 +440,7 @@ // // textBoxOutputFolder // - this.textBoxOutputFolder.Location = new System.Drawing.Point(11, 41); + this.textBoxOutputFolder.Location = new System.Drawing.Point(11, 71); this.textBoxOutputFolder.Name = "textBoxOutputFolder"; this.textBoxOutputFolder.Size = new System.Drawing.Size(385, 20); this.textBoxOutputFolder.TabIndex = 1; @@ -424,6 +450,7 @@ this.groupBoxInput.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); + this.groupBoxInput.Controls.Add(this.buttonSearchFolder); this.groupBoxInput.Controls.Add(this.buttonInputBrowse); this.groupBoxInput.Controls.Add(this.labelChooseInputFiles); this.groupBoxInput.Controls.Add(this.listViewInputFiles); @@ -434,6 +461,17 @@ this.groupBoxInput.TabStop = false; this.groupBoxInput.Text = "Input"; // + // buttonSearchFolder + // + this.buttonSearchFolder.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonSearchFolder.Location = new System.Drawing.Point(868, 12); + this.buttonSearchFolder.Name = "buttonSearchFolder"; + this.buttonSearchFolder.Size = new System.Drawing.Size(116, 23); + this.buttonSearchFolder.TabIndex = 8; + this.buttonSearchFolder.Text = "Search folder..."; + this.buttonSearchFolder.UseVisualStyleBackColor = true; + this.buttonSearchFolder.Click += new System.EventHandler(this.buttonSearchFolder_Click); + // // buttonInputBrowse // this.buttonInputBrowse.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); @@ -544,15 +582,15 @@ this.labelStatus.TabIndex = 9; this.labelStatus.Text = "labelStatus"; // - // checkBoxAutoBalance + // checkBoxSetMinimumDisplayTimeBetweenSubs // - this.checkBoxAutoBalance.AutoSize = true; - this.checkBoxAutoBalance.Location = new System.Drawing.Point(16, 145); - this.checkBoxAutoBalance.Name = "checkBoxAutoBalance"; - this.checkBoxAutoBalance.Size = new System.Drawing.Size(113, 17); - this.checkBoxAutoBalance.TabIndex = 9; - this.checkBoxAutoBalance.Text = "Auto balance lines"; - this.checkBoxAutoBalance.UseVisualStyleBackColor = true; + this.checkBoxSetMinimumDisplayTimeBetweenSubs.AutoSize = true; + this.checkBoxSetMinimumDisplayTimeBetweenSubs.Location = new System.Drawing.Point(16, 169); + this.checkBoxSetMinimumDisplayTimeBetweenSubs.Name = "checkBoxSetMinimumDisplayTimeBetweenSubs"; + this.checkBoxSetMinimumDisplayTimeBetweenSubs.Size = new System.Drawing.Size(190, 17); + this.checkBoxSetMinimumDisplayTimeBetweenSubs.TabIndex = 10; + this.checkBoxSetMinimumDisplayTimeBetweenSubs.Text = "Set min. millisecs between subtitles"; + this.checkBoxSetMinimumDisplayTimeBetweenSubs.UseVisualStyleBackColor = true; // // BatchConvert // @@ -572,6 +610,7 @@ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Batch convert"; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.BatchConvert_FormClosing); + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.BatchConvert_KeyDown); this.groupBoxConvertOptions.ResumeLayout(false); this.groupBoxConvertOptions.PerformLayout(); this.groupBoxChangeFrameRate.ResumeLayout(false); @@ -637,6 +676,9 @@ private System.Windows.Forms.Button buttonMultipleReplaceSettings; private System.Windows.Forms.CheckBox checkBoxMultipleReplace; private System.Windows.Forms.CheckBox checkBoxAutoBalance; + private System.Windows.Forms.CheckBox checkBoxOverwriteOriginalFiles; + private System.Windows.Forms.Button buttonSearchFolder; + private System.Windows.Forms.CheckBox checkBoxSetMinimumDisplayTimeBetweenSubs; } } \ No newline at end of file diff --git a/src/Forms/BatchConvert.cs b/src/Forms/BatchConvert.cs index d8a914c30..68f76dc9c 100644 --- a/src/Forms/BatchConvert.cs +++ b/src/Forms/BatchConvert.cs @@ -18,6 +18,7 @@ namespace Nikse.SubtitleEdit.Forms public bool FixCommonErrors { get; set; } public bool MultipleReplaceActive { get; set; } public bool AutoBalanceActive { get; set; } + public bool SetMinDisplayTimeBetweenSubtitles { get; set; } public ListViewItem Item { get; set; } public Subtitle Subtitle { get; set; } public SubtitleFormat Format { get; set; } @@ -28,11 +29,12 @@ namespace Nikse.SubtitleEdit.Forms public string ToFormat { get; set; } public SubtitleFormat SourceFormat { get; set; } - public ThreadDoWorkParameter(bool fixCommonErrors, bool multipleReplace, bool autoBalance, ListViewItem item, Subtitle subtitle, SubtitleFormat format, Encoding encoding, string language, string fileName, string toFormat, SubtitleFormat sourceFormat) + public ThreadDoWorkParameter(bool fixCommonErrors, bool multipleReplace, bool autoBalance, bool setMinDisplayTimeBetweenSubtitles, ListViewItem item, Subtitle subtitle, SubtitleFormat format, Encoding encoding, string language, string fileName, string toFormat, SubtitleFormat sourceFormat) { FixCommonErrors = fixCommonErrors; MultipleReplaceActive = multipleReplace; AutoBalanceActive = autoBalance; + SetMinDisplayTimeBetweenSubtitles = setMinDisplayTimeBetweenSubtitles; Item = item; Subtitle = subtitle; Format = format; @@ -77,11 +79,13 @@ namespace Nikse.SubtitleEdit.Forms checkBoxRemoveFormatting.Text = l.RemoveFormatting; checkBoxFixCasing.Text = l.ReDoCasing; checkBoxRemoveTextForHI.Text = l.RemoveTextForHI; + checkBoxOverwriteOriginalFiles.Text = l.OverwriteOriginalFiles; columnHeaderFName.Text = Configuration.Settings.Language.JoinSubtitles.FileName; columnHeaderFormat.Text = Configuration.Settings.Language.Main.Controls.SubtitleFormat; columnHeaderSize.Text = Configuration.Settings.Language.General.Size; columnHeaderStatus.Text = l.Status; linkLabelOpenOutputFolder.Text = Configuration.Settings.Language.Main.Menu.File.Open; + buttonSearchFolder.Text = l.ScanFolder; buttonConvert.Text = l.Convert; buttonCancel.Text = Configuration.Settings.Language.General.OK; @@ -151,6 +155,7 @@ namespace Nikse.SubtitleEdit.Forms checkBoxAutoBalance.Checked = Configuration.Settings.Tools.BatchConvertAutoBalance; checkBoxRemoveFormatting.Checked = Configuration.Settings.Tools.BatchConvertRemoveFormatting; checkBoxRemoveTextForHI.Checked = Configuration.Settings.Tools.BatchConvertRemoveTextForHI; + checkBoxSetMinimumDisplayTimeBetweenSubs.Checked = Configuration.Settings.Tools.BatchConvertSetMinDisplayTimeBetweenSubtitles; if (!string.IsNullOrEmpty(Configuration.Settings.Language.BatchConvert.Settings)) buttonFixCommonErrorSettings.Text = Configuration.Settings.Language.BatchConvert.Settings; checkBoxFixCommonErrors.Text = Configuration.Settings.Language.FixCommonErrors.Title; @@ -158,6 +163,13 @@ namespace Nikse.SubtitleEdit.Forms checkBoxAutoBalance.Text = Configuration.Settings.Language.BatchConvert.AutoBalance; radioButtonShowEarlier.Text = Configuration.Settings.Language.ShowEarlierLater.ShowEarlier; radioButtonShowLater.Text = Configuration.Settings.Language.ShowEarlierLater.ShowLater; + + buttonSearchFolder.Visible = !string.IsNullOrEmpty(Configuration.Settings.Language.BatchConvert.ScanningFolder); //TODO: Remove in 3.4 + if (string.IsNullOrEmpty(Configuration.Settings.Language.BatchConvert.OverwriteOriginalFiles)) //TODO: Remove in 3.4 + { + checkBoxOverwriteOriginalFiles.Checked = false; + checkBoxOverwriteOriginalFiles.Visible = false; + } } private void FixLargeFonts() @@ -173,6 +185,7 @@ namespace Nikse.SubtitleEdit.Forms private void buttonChooseFolder_Click(object sender, EventArgs e) { + folderBrowserDialog1.ShowNewFolderButton = true; if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) { textBoxOutputFolder.Text = folderBrowserDialog1.SelectedPath; @@ -388,27 +401,32 @@ namespace Nikse.SubtitleEdit.Forms MessageBox.Show(Configuration.Settings.Language.BatchConvert.NothingToConvert); return; } - else if (textBoxOutputFolder.Text.Length < 2) + + if (!checkBoxOverwriteOriginalFiles.Checked) { - MessageBox.Show(Configuration.Settings.Language.BatchConvert.PleaseChooseOutputFolder); - return; - } - else if (!Directory.Exists(textBoxOutputFolder.Text)) - { - try + if (textBoxOutputFolder.Text.Length < 2) { - Directory.CreateDirectory(textBoxOutputFolder.Text); - } - catch (Exception exception) - { - MessageBox.Show(exception.Message); + MessageBox.Show(Configuration.Settings.Language.BatchConvert.PleaseChooseOutputFolder); return; } + else if (!Directory.Exists(textBoxOutputFolder.Text)) + { + try + { + Directory.CreateDirectory(textBoxOutputFolder.Text); + } + catch (Exception exception) + { + MessageBox.Show(exception.Message); + return; + } + } } _converting = true; buttonConvert.Enabled = false; buttonCancel.Enabled = false; + progressBar1.Style = ProgressBarStyle.Blocks; progressBar1.Maximum = listViewInputFiles.Items.Count; progressBar1.Value = 0; progressBar1.Visible = progressBar1.Maximum > 2; @@ -416,6 +434,7 @@ namespace Nikse.SubtitleEdit.Forms groupBoxOutput.Enabled = false; groupBoxConvertOptions.Enabled = false; buttonInputBrowse.Enabled = false; + buttonSearchFolder.Enabled = false; _count = 0; _converted = 0; _errors = 0; @@ -639,7 +658,7 @@ namespace Nikse.SubtitleEdit.Forms System.Threading.Thread.Sleep(100); } - ThreadDoWorkParameter parameter = new ThreadDoWorkParameter(checkBoxFixCommonErrors.Checked, checkBoxMultipleReplace.Checked, checkBoxAutoBalance.Checked, item, sub, GetCurrentSubtitleFormat(), GetCurrentEncoding(), Configuration.Settings.Tools.BatchConvertLanguage, fileName, toFormat, format); + ThreadDoWorkParameter parameter = new ThreadDoWorkParameter(checkBoxFixCommonErrors.Checked, checkBoxMultipleReplace.Checked, checkBoxAutoBalance.Checked, checkBoxSetMinimumDisplayTimeBetweenSubs.Checked, item, sub, GetCurrentSubtitleFormat(), GetCurrentEncoding(), Configuration.Settings.Tools.BatchConvertLanguage, fileName, toFormat, format); if (!worker1.IsBusy) worker1.RunWorkerAsync(parameter); else if (!worker2.IsBusy) @@ -676,6 +695,7 @@ namespace Nikse.SubtitleEdit.Forms groupBoxOutput.Enabled = true; groupBoxConvertOptions.Enabled = true; buttonInputBrowse.Enabled = true; + buttonSearchFolder.Enabled = true; } void DoThreadWork(object sender, DoWorkEventArgs e) @@ -719,12 +739,28 @@ namespace Nikse.SubtitleEdit.Forms p.Error = "AutoBalance error: " + exception.Message; } } + if (p.SetMinDisplayTimeBetweenSubtitles) + { + double minumumMillisecondsBetweenLines = Configuration.Settings.General.MininumMillisecondsBetweenLines; + for (int i = 0; i < p.Subtitle.Paragraphs.Count - 1; i++) + { + Paragraph current = p.Subtitle.GetParagraphOrDefault(i); + Paragraph next = p.Subtitle.GetParagraphOrDefault(i + 1); + if (next.StartTime.TotalMilliseconds - current.EndTime.TotalMilliseconds < minumumMillisecondsBetweenLines) + current.EndTime.TotalMilliseconds = next.StartTime.TotalMilliseconds - minumumMillisecondsBetweenLines; + } + } e.Result = p; } void ThreadWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { - ThreadDoWorkParameter p = (ThreadDoWorkParameter)e.Result; + var p = (ThreadDoWorkParameter)e.Result; + if (p.Item.Index + 2 < listViewInputFiles.Items.Count) + listViewInputFiles.EnsureVisible(p.Item.Index + 2); + else + listViewInputFiles.EnsureVisible(p.Item.Index); + if (!string.IsNullOrEmpty(p.Error)) { p.Item.SubItems[3].Text = p.Error; @@ -733,8 +769,16 @@ namespace Nikse.SubtitleEdit.Forms { if (p.SourceFormat == null) p.SourceFormat = new SubRip(); + bool success; + if (checkBoxOverwriteOriginalFiles.Checked) + { + success = Main.BatchConvertSave(p.ToFormat, null, GetCurrentEncoding(), System.IO.Path.GetDirectoryName(p.FileName), _count, ref _converted, ref _errors, _allFormats, p.FileName, p.Subtitle, p.SourceFormat, true); + } + else + { + success = Main.BatchConvertSave(p.ToFormat, null, GetCurrentEncoding(), textBoxOutputFolder.Text, _count, ref _converted, ref _errors, _allFormats, p.FileName, p.Subtitle, p.SourceFormat, checkBoxOverwrite.Checked); + } - bool success = Main.BatchConvertSave(p.ToFormat, null, GetCurrentEncoding(), textBoxOutputFolder.Text, _count, ref _converted, ref _errors, _allFormats, p.FileName, p.Subtitle, p.SourceFormat, checkBoxOverwrite.Checked); if (success) { p.Item.SubItems[3].Text = Configuration.Settings.Language.BatchConvert.Converted; @@ -747,7 +791,7 @@ namespace Nikse.SubtitleEdit.Forms progressBar1.Value++; labelStatus.Text = progressBar1.Value + " / " + progressBar1.Maximum; if (progressBar1.Value == progressBar1.Maximum) - labelStatus.Text = string.Empty; + labelStatus.Text = string.Empty; } } @@ -831,8 +875,6 @@ namespace Nikse.SubtitleEdit.Forms { if (e.KeyCode == Keys.Delete) RemoveSelectedFiles(); - if (e.KeyCode == Keys.Escape) - _abort = true; } private void buttonFixCommonErrorSettings_Click(object sender, EventArgs e) @@ -855,6 +897,7 @@ namespace Nikse.SubtitleEdit.Forms Configuration.Settings.Tools.BatchConvertFixCommonErrors = checkBoxFixCommonErrors.Checked; Configuration.Settings.Tools.BatchConvertRemoveFormatting = checkBoxRemoveFormatting.Checked; Configuration.Settings.Tools.BatchConvertRemoveTextForHI = checkBoxRemoveTextForHI.Checked; + Configuration.Settings.Tools.BatchConvertSetMinDisplayTimeBetweenSubtitles = checkBoxSetMinimumDisplayTimeBetweenSubs.Checked; } private void buttonMultipleReplaceSettings_Click(object sender, EventArgs e) @@ -864,6 +907,96 @@ namespace Nikse.SubtitleEdit.Forms form.ShowDialog(this); } + private void checkBoxOverwriteOriginalFiles_CheckedChanged(object sender, EventArgs e) + { + labelChooseOutputFolder.Enabled = !checkBoxOverwriteOriginalFiles.Checked; + textBoxOutputFolder.Enabled = !checkBoxOverwriteOriginalFiles.Checked; + checkBoxOverwrite.Enabled = !checkBoxOverwriteOriginalFiles.Checked; + buttonChooseFolder.Enabled = !checkBoxOverwriteOriginalFiles.Checked; + } + + private void buttonSearchFolder_Click(object sender, EventArgs e) + { + folderBrowserDialog1.ShowNewFolderButton = false; + if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) + { + listViewInputFiles.BeginUpdate(); + buttonConvert.Enabled = false; + buttonCancel.Enabled = false; + progressBar1.Style = ProgressBarStyle.Marquee; + progressBar1.Visible = true; + groupBoxOutput.Enabled = false; + groupBoxConvertOptions.Enabled = false; + buttonInputBrowse.Enabled = false; + buttonSearchFolder.Enabled = false; + labelStatus.Text = string.Format(Configuration.Settings.Language.BatchConvert.ScanningFolder, folderBrowserDialog1.SelectedPath); + _abort = false; + + SearchFolder(folderBrowserDialog1.SelectedPath); + + labelStatus.Text = string.Empty; + buttonConvert.Enabled = true; + buttonCancel.Enabled = true; + progressBar1.Style = ProgressBarStyle.Continuous; + progressBar1.Visible = true; + groupBoxOutput.Enabled = true; + groupBoxConvertOptions.Enabled = true; + buttonInputBrowse.Enabled = true; + buttonSearchFolder.Enabled = true; + listViewInputFiles.EndUpdate(); + } + } + + private void SearchFolder(string path) + { + + foreach (string fileName in Directory.GetFiles(path)) + { + try + { + string ext = Path.GetExtension(fileName).ToLower(); + if (ext != ".png" && ext != ".jpg" && ext != ".dll" && ext != ".exe" && ext != ".zip") + { + var fi = new FileInfo(fileName); + if (fi.Length < 1024 * 1024) // max 1 mb + { + Encoding encoding; + var sub = new Subtitle(); + SubtitleFormat format = sub.LoadSubtitle(fileName, out encoding, null); + if (format != null) + { + var item = new ListViewItem(fileName); + item.SubItems.Add(Utilities.FormatBytesToDisplayFileSize(fi.Length)); + item.SubItems.Add(format.Name); + item.SubItems.Add("-"); + listViewInputFiles.Items.Add(item); + } + } + progressBar1.Refresh(); + Application.DoEvents(); + if (_abort) + return; + } + } + catch + { + } + } + foreach (string directory in Directory.GetDirectories(path)) + { + if (directory != "." && directory != "..") + SearchFolder(directory); + if (_abort) + return; + } + } + + private void BatchConvert_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Escape) + _abort = true; + } + } }