diff --git a/source/SaveAllFormat/EntryPoint.cs b/source/SaveAllFormat/EntryPoint.cs
index a363b1b7..9dc9c98a 100644
--- a/source/SaveAllFormat/EntryPoint.cs
+++ b/source/SaveAllFormat/EntryPoint.cs
@@ -1,15 +1,20 @@
-using System.Windows.Forms;
+using System.IO;
+using System.Windows.Forms;
+using Nikse.SubtitleEdit.Core.Common;
+using Nikse.SubtitleEdit.Core.SubtitleFormats;
namespace Nikse.SubtitleEdit.PluginLogic
{
- public class ExportAllFormats : EntryPointBase
+ public class ExportAllFormats : IPlugin
{
- public ExportAllFormats()
- : base("Export to all formats", "Export to all formats (non binary)", 1.2m, "Export current subtitle to all available text format.", "file", string.Empty)
- {
- }
+ public string Name { get; } = "Export all formats";
+ public string Text { get; } = "Export all formats";
+ public decimal Version { get; } = 2.0m;
+ public string Description { get; } = "Export current subtitle to all available text format.";
+ public string ActionType { get; } = "file";
+ public string Shortcut { get; } = string.Empty;
- public override string DoAction(Form parentForm, string srtText, double frameRate, string uiLineBreak, string file, string videoFile, string rawText)
+ public string DoAction(Form parentForm, string srtText, double frameRate, string uiLineBreak, string file, string videoFile, string rawText)
{
// subtitle not loaded
if (string.IsNullOrWhiteSpace(srtText))
@@ -18,11 +23,23 @@ public override string DoAction(Form parentForm, string srtText, double frameRat
return string.Empty;
}
+ if (!File.Exists(file))
+ {
+ MessageBox.Show("File not found: " + file, "File not found", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return string.Empty;
+ }
+
+ var subtitle = Subtitle.Parse(file);
+ if (subtitle is null)
+ {
+ MessageBox.Show("Could not parse subtitle file: " + file, "Could not parse subtitle file", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return string.Empty;
+ }
// initialize context
- Init(srtText, uiLineBreak, file);
+ // Init(srtText, uiLineBreak, file);
// show main form
- using (var main = new Main(parentForm, file))
+ using (var main = new Main(parentForm, subtitle))
{
if (main.ShowDialog(parentForm) == DialogResult.Cancel)
{
@@ -31,8 +48,50 @@ public override string DoAction(Form parentForm, string srtText, double frameRat
}
return string.Empty;
-
}
+ }
+
+ public interface IPlugin
+ {
+ ///
+ /// Name of the plug-in
+ ///
+ string Name { get; }
+
+ ///
+ /// Text used in Subtitle Edit menu
+ ///
+ string Text { get; }
+
+ ///
+ /// Version number of plugin
+ ///
+ decimal Version { get; }
+
+ ///
+ /// Description of what plugin does
+ ///
+ string Description { get; }
+
+ ///
+ /// Can be one of these: file, tool, sync, translate, spellcheck
+ ///
+ string ActionType { get; }
+
+ ///
+ /// Shortcut used to active plugin - e.g. Control+Shift+F9
+ ///
+ string Shortcut { get; }
+ ///
+ /// This action of callsed when Subtitle Edit calls plugin
+ ///
+ string DoAction(Form parentForm,
+ string srtText,
+ double frameRate,
+ string uiLineBreak,
+ string file,
+ string videoFile,
+ string rawText);
}
-}
+}
\ No newline at end of file
diff --git a/source/SaveAllFormat/ExportAllFormats.csproj b/source/SaveAllFormat/ExportAllFormats.csproj
index 7d2304e9..ad054fe6 100644
--- a/source/SaveAllFormat/ExportAllFormats.csproj
+++ b/source/SaveAllFormat/ExportAllFormats.csproj
@@ -4,11 +4,16 @@
false
true
true
+ 2.0.0
+ 2.0.0
-
+
+
+
+
\ No newline at end of file
diff --git a/source/SaveAllFormat/Main.cs b/source/SaveAllFormat/Main.cs
index 58b970ed..6b1c6602 100644
--- a/source/SaveAllFormat/Main.cs
+++ b/source/SaveAllFormat/Main.cs
@@ -5,14 +5,18 @@
using System.Linq;
using System.Reflection;
using System.Text;
+using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
+using Nikse.SubtitleEdit.Core.Common;
+using Nikse.SubtitleEdit.Core.SubtitleFormats;
namespace Nikse.SubtitleEdit.PluginLogic
{
public partial class Main : Form
{
private readonly Form _parentForm;
+ private readonly Subtitle _subtitle;
private readonly string _file;
private string _exportLocation;
private volatile string _selExtension;
@@ -21,28 +25,21 @@ public partial class Main : Form
// todo: add support to export specific format e.g: xml, txt...
// todo: add ui with options
- public Main(Form parentForm, string file)
+ public Main(Form parentForm, Subtitle subtitle)
{
+ InitializeComponent();
+
if (parentForm is null)
{
throw new ArgumentNullException(nameof(parentForm));
}
- if (string.IsNullOrWhiteSpace(file))
- {
- throw new ArgumentException($"'{nameof(file)}' cannot be null or whitespace", nameof(file));
- }
-
- InitializeComponent();
progressBar1.Visible = false;
_parentForm = parentForm;
- _file = file;
+ _subtitle = subtitle;
// event handlers
- buttonCancel.Click += delegate
- {
- DialogResult = DialogResult.Cancel;
- };
+ buttonCancel.Click += delegate { DialogResult = DialogResult.Cancel; };
textBoxLocation.DoubleClick += delegate
{
@@ -57,10 +54,11 @@ public Main(Form parentForm, string file)
comboBoxExtension.BeginUpdate();
comboBoxExtension.Items.Add("all");
- foreach (var extension in GetAvailableExtensions())
+ foreach (var extension in SubtitleFormat.AllSubtitleFormats.Select(f => f.Extension))
{
comboBoxExtension.Items.Add(extension);
}
+
comboBoxExtension.SelectedIndex = 0;
comboBoxExtension.EndUpdate();
}
@@ -76,86 +74,41 @@ private void buttonBrowse_Click(object sender, EventArgs e)
return;
}
- _exportLocation = folderBrowse.SelectedPath;
- textBoxLocation.Text = _exportLocation;
+ textBoxLocation.Text = _exportLocation = folderBrowse.SelectedPath;
}
}
- private void buttonExport_Click(object sender, EventArgs e)
+ private async void buttonExport_Click(object sender, EventArgs e)
{
- // validate output path
if (!Path.IsPathRooted(_exportLocation))
{
MessageBox.Show("Invalid output path", "Invalid output", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
- //progressBar1.Style = ProgressBarStyle.Continuous;
- //progressBar1.Visible = true;
-
- var subtitleFormat = Utils.AssemblyUtils.GetLibse().GetType("Nikse.SubtitleEdit.Core.SubtitleFormats.SubtitleFormat");
- var prop = subtitleFormat.GetProperty("AllSubtitleFormats", BindingFlags.Public | BindingFlags.Static);
- var subtitle = _parentForm.GetType().GetField("_subtitle", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(_parentForm);
-
- //var parallelOptions = new ParallelOptions();
- //TaskScheduler.FromCurrentSynchronizationContext();
- // run export parallel (faster)
-
_selExtension = comboBoxExtension.SelectedItem.ToString();
- Parallel.ForEach((IEnumerable