Files
cuetools.net/CUETools/frmBatch.cs

272 lines
7.6 KiB
C#
Raw Normal View History

2008-10-13 19:25:11 +00:00
using System;
using System.Collections.Generic;
2009-08-06 13:03:02 +00:00
using System.Collections.Specialized;
using System.Diagnostics;
2008-10-13 19:25:11 +00:00
using System.IO;
using System.Threading;
using System.Windows.Forms;
2010-02-08 01:29:31 +00:00
using CUETools.Compression;
using CUETools.Processor;
using CUETools.Processor.Settings;
2008-10-13 19:25:11 +00:00
namespace JDP
{
public partial class frmBatch : Form
{
public frmBatch()
{
InitializeComponent();
_batchPaths = new List<string>();
}
public void AddInputPath(string path)
{
_batchPaths.Add(path);
2008-10-13 19:25:11 +00:00
}
public string InputPath
{
get { return pathIn; }
set { pathIn = value; }
}
2008-12-01 20:24:16 +00:00
2009-08-06 13:03:02 +00:00
public string Profile
2008-10-13 19:25:11 +00:00
{
2009-08-06 13:03:02 +00:00
get { return _profileName; }
set { _profileName = value; }
2008-10-13 19:25:11 +00:00
}
2009-08-06 13:03:02 +00:00
CUEToolsProfile _profile = null;
string _profileName = "verify";
2008-10-13 19:25:11 +00:00
Thread _workThread;
CUESheet _workClass;
string pathIn;
string pathOut;
bool _reducePriority;
2008-10-13 19:25:11 +00:00
DateTime _startedAt;
List<string> _batchPaths;
2008-10-13 19:25:11 +00:00
2008-11-12 05:45:48 +00:00
public static string ShortenString(string input, int max)
{
if (input.Length < max)
return input;
return "..." + input.Substring(input.Length - max);
}
2008-11-12 05:45:48 +00:00
public void SetStatus(object sender, CUEToolsProgressEventArgs e)
2008-10-13 19:25:11 +00:00
{
this.BeginInvoke((MethodInvoker)delegate()
{
2010-04-23 19:59:42 +00:00
if (e.percent == 0)
2008-10-13 19:25:11 +00:00
{
_startedAt = DateTime.Now;
2008-11-12 05:45:48 +00:00
Text = e.status;
2008-10-13 19:25:11 +00:00
}
2010-04-23 19:59:42 +00:00
else if (e.percent > 0.02)
2008-10-13 19:25:11 +00:00
{
TimeSpan span = DateTime.Now - _startedAt;
2010-04-23 19:59:42 +00:00
TimeSpan eta = new TimeSpan ((long) (span.Ticks/e.percent));
2008-11-12 05:45:48 +00:00
Text = String.Format("{0}, ETA {1}:{2:00}.", e.status, (int)eta.TotalMinutes, eta.Seconds);
2008-10-13 19:25:11 +00:00
} else
2008-11-12 05:45:48 +00:00
Text = e.status;
2010-04-23 19:59:42 +00:00
//progressBar1.Value = Math.Max(0,Math.Min(100,(int)(e.percentTrck*100)));
progressBar2.Value = Math.Max(0,Math.Min(100,(int)(e.percent*100)));
2008-11-12 05:45:48 +00:00
string inputSuffix = e.output != null ? "=>" : "";
if (e.input == null)
txtInputFile.Text = inputSuffix;
else
2008-11-12 05:45:48 +00:00
txtInputFile.Text = ShortenString(e.input, 120) + " " + inputSuffix;
if (e.output == null)
txtOutputFile.Text = "";
else
2008-11-12 05:45:48 +00:00
txtOutputFile.Text = ShortenString(e.output, 120);
});
}
2010-02-08 01:29:31 +00:00
private void PasswordRequired(object sender, CompressionPasswordRequiredEventArgs e)
2008-11-12 05:45:48 +00:00
{
this.Invoke((MethodInvoker)delegate()
{
frmPassword dlg = new frmPassword();
if (dlg.ShowDialog(this) == DialogResult.OK)
{
e.Password = dlg.txtPassword.Text;
e.ContinueOperation = true;
}
else
e.ContinueOperation = false;
2008-10-13 19:25:11 +00:00
});
}
private void WriteAudioFilesThread(object o)
{
CUESheet cueSheet = (CUESheet)o;
2009-08-21 03:26:12 +00:00
CUEToolsScript script = _profile._script == null || !_profile._config.scripts.ContainsKey(_profile._script) ? null : _profile._config.scripts[_profile._script];
2008-10-13 19:25:11 +00:00
try
{
2008-11-12 05:45:48 +00:00
_startedAt = DateTime.Now;
if (_batchPaths.Count != 0)
pathIn = _batchPaths[0];
pathIn = Path.GetFullPath(pathIn);
2009-08-08 16:14:06 +00:00
this.Invoke((MethodInvoker)delegate()
{
textBox1.Text += "Processing " + pathIn + ":\r\n";
textBox1.Select(0, 0);
});
2008-11-12 05:45:48 +00:00
2009-08-06 13:03:02 +00:00
if (!File.Exists(pathIn) && !Directory.Exists(pathIn))
throw new Exception("Input CUE Sheet not found.");
2008-11-12 05:45:48 +00:00
2009-08-08 16:14:06 +00:00
if (_profile._action == CUEAction.CorrectFilenames)
throw new Exception("CorrectFilenames action not yet supported in commandline mode.");
if (_profile._action == CUEAction.CreateDummyCUE)
throw new Exception("CreateDummyCUE action not yet supported in commandline mode.");
bool useAR = _profile._action == CUEAction.Verify || _profile._ARVerifyOnEncode;
2009-08-08 16:14:06 +00:00
2009-08-06 13:03:02 +00:00
cueSheet.Action = _profile._action;
cueSheet.OutputStyle = _profile._CUEStyle;
cueSheet.WriteOffset = _profile._writeOffset;
2008-12-09 07:25:48 +00:00
cueSheet.Open(pathIn);
2009-08-08 16:14:06 +00:00
if (useAR)
cueSheet.UseAccurateRip();
2009-08-06 13:03:02 +00:00
2009-08-21 03:26:12 +00:00
pathOut = CUESheet.GenerateUniqueOutputPath(_profile._config,
2009-08-06 13:03:02 +00:00
_profile._outputTemplate,
_profile._CUEStyle == CUEStyle.SingleFileWithCUE ? "." + _profile._outputAudioFormat : ".cue",
_profile._action,
new NameValueCollection(),
pathIn,
cueSheet);
if (pathOut == "" || (_profile._action != CUEAction.Verify && File.Exists(pathOut)))
throw new Exception("Could not generate output path.");
cueSheet.GenerateFilenames(_profile._outputAudioType, _profile._outputAudioFormat, pathOut);
2008-11-12 05:45:48 +00:00
cueSheet.UsePregapForFirstTrackInSingleFile = false;
2009-08-08 16:14:06 +00:00
2009-08-06 13:03:02 +00:00
if (script == null)
cueSheet.Go();
else
/* status = */ cueSheet.ExecuteScript(script);
2008-10-13 19:25:11 +00:00
this.Invoke((MethodInvoker)delegate()
{
if (_batchPaths.Count == 0)
2008-10-13 19:25:11 +00:00
Text = "Done.";
//TimeSpan span = DateTime.Now - _startedAt;
progressBar2.Value = 0;
2008-12-02 03:03:08 +00:00
if (cueSheet.IsCD)
{
textBox1.Text += cueSheet.LOGContents;
2008-12-02 03:03:08 +00:00
textBox1.Show();
}
2009-08-08 16:14:06 +00:00
else if (useAR)
{
textBox1.Text += CUESheetLogWriter.GetAccurateRipLog(cueSheet);
textBox1.Show();
2008-10-13 19:25:11 +00:00
}
textBox1.Text += "----------------------------------------------------------\r\n";
textBox1.Select(0, 0);
2008-10-13 19:25:11 +00:00
});
}
catch (StopException)
{
_batchPaths.Clear();
2008-10-13 19:25:11 +00:00
this.Invoke((MethodInvoker)delegate()
{
Text = "Aborted.";
textBox1.Text += "Aborted.";
2008-10-13 19:25:11 +00:00
progressBar2.Value = 0;
});
}
#if !DEBUG
2008-10-13 19:25:11 +00:00
catch (Exception ex)
{
this.Invoke((MethodInvoker)delegate()
{
Text = "Error: " + ex.Message;
textBox1.Show();
2008-11-12 05:45:48 +00:00
textBox1.Text += "Error";
for (Exception e = ex; e != null; e = e.InnerException)
textBox1.Text += ": " + e.Message;
textBox1.Text += "\r\n----------------------------------------------------------\r\n";
textBox1.Select(0, 0);
2008-10-13 19:25:11 +00:00
});
}
#endif
2008-10-13 19:25:11 +00:00
if (_batchPaths.Count != 0)
{
_batchPaths.RemoveAt(0);
this.BeginInvoke((MethodInvoker)delegate()
{
if (_batchPaths.Count == 0)
{
Text = "All done.";
}
else
{
StartConvert();
}
});
}
2008-10-13 19:25:11 +00:00
}
public void StartConvert()
{
try
{
2009-08-21 03:26:12 +00:00
CUESheet cueSheet = new CUESheet(_profile._config);
2010-02-08 01:29:31 +00:00
cueSheet.PasswordRequired += new EventHandler<CompressionPasswordRequiredEventArgs>(PasswordRequired);
cueSheet.CUEToolsProgress += new EventHandler<CUEToolsProgressEventArgs>(SetStatus);
2008-10-13 19:25:11 +00:00
_workThread = new Thread(WriteAudioFilesThread);
_workClass = cueSheet;
_workThread.Priority = ThreadPriority.BelowNormal;
_workThread.IsBackground = true;
2008-10-13 19:25:11 +00:00
_workThread.Start(cueSheet);
}
catch (Exception ex)
{
Text = "Error: " + ex.Message;
textBox1.Show();
textBox1.Text += "Error: " + ex.Message + "\r\n";
textBox1.Text += "----------------------------------------------------------\r\n";
textBox1.Select(0, 0);
}
2008-10-13 19:25:11 +00:00
}
private void frmBatch_Load(object sender, EventArgs e)
{
textBox1.Hide();
2009-08-21 03:26:12 +00:00
//SettingsReader sr = new SettingsReader("CUE Tools", "settings.txt", Application.ExecutablePath);
//_profile.Load(sr);
//_reducePriority = sr.LoadBoolean("ReducePriority") ?? true;
_reducePriority = true;
2009-08-06 13:03:02 +00:00
_profile = new CUEToolsProfile(_profileName);
2009-08-21 03:26:12 +00:00
SettingsReader sr = new SettingsReader("CUE Tools", string.Format("profile-{0}.txt", _profileName), Application.ExecutablePath);
2009-08-06 13:03:02 +00:00
_profile.Load(sr);
if (_reducePriority)
Process.GetCurrentProcess().PriorityClass = System.Diagnostics.ProcessPriorityClass.Idle;
2009-08-06 13:03:02 +00:00
if (_profile._action != CUEAction.Verify)
txtOutputFile.Show();
2008-10-13 19:25:11 +00:00
StartConvert();
}
private void frmBatch_FormClosing(Object sender, FormClosingEventArgs e)
{
if ((_workThread != null) && (_workThread.IsAlive))
{
_workClass.Stop();
e.Cancel = true;
}
}
}
}