public string ProcessArticle(string articleText, string articleTitle, int @namespace, out string summary, out bool skip)
{
string origText = articleText;
skip = false;
summary = "";
string ioFile = txtFile.Text;
try
{
// under Wine WaitForExit() does not work and need to use absolute file paths. So under Linux use StandardOutput.ReadToEnd instead
if(Globals.UsingLinux)
{
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = txtProgram.Text;
p.StartInfo.Arguments = Tools.ApplyKeyWords(articleTitle, txtParameters.Text.Replace("%%file%%", txtFile.Text));
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
if (radFile.Checked)
Tools.WriteTextFileAbsolutePath(articleText, ioFile, false);
else
p.StartInfo.Arguments = p.StartInfo.Arguments.Replace("%%articletext%%", articleText);
p.Start();
string output = p.StandardOutput.ReadToEnd();
// pretend to do something with output just to keep compiler happy
Tools.WriteDebug("Ext Proc", output);
}
else
{
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo
{
WorkingDirectory = Path.GetDirectoryName(txtProgram.Text),
FileName = Path.GetFileName(txtProgram.Text),
Arguments = Tools.ApplyKeyWords(articleTitle, txtParameters.Text.Replace("%%file%%", txtFile.Text))
};
if (radFile.Checked)
{
if (txtFile.Text.Contains("\\"))
Tools.WriteTextFileAbsolutePath(articleText, ioFile, false);
else
Tools.WriteTextFile(articleText, ioFile, false);
}
else
psi.Arguments = psi.Arguments.Replace("%%articletext%%", articleText);
System.Diagnostics.Process p = System.Diagnostics.Process.Start(psi);
p.WaitForExit();
}
if (File.Exists(ioFile))
{
articleText = File.ReadAllText(ioFile);
skip = (chkSkip.Checked && (articleText == origText));
File.Delete(ioFile);
}
return articleText;
}
catch (Exception ex)
{
Tools.WriteDebug("Ext Proc", ex.StackTrace);
// Most, if not all exceptions here are related to user wrong user input
// or environment specifics, so ErrorHandler is not needed.
MessageBox.Show(ActiveForm, ex.Message, "External processing error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return origText;
}
}