mirror of
https://github.com/claunia/cuetools.net.git
synced 2025-12-16 18:14:25 +00:00
* CUERipper: was still sometimes locking drives it didn't need to
* ArCueDotNet: don't search for cover art * 'Silent track' diagnostics in AR log * LAME.dll: settings were not used * libwavpack: settings were not used (MD5Sum & extra mode) * workarounds for various Mono bugs * Path formatting: %discnumber% produces two-digit numbers if %totaldiscs% > 9 * Overwrite dialog: list files, 'remember the choice' option * Doesn't abort on broken Artwork files * Better locates files in some complicated cases, e.g. when only some tracks have tracknumber tags * Folder browser now sorts contents, because OS didn't do it when browsing external drives etc
This commit is contained in:
2
CUERipper/frmCUERipper.Designer.cs
generated
2
CUERipper/frmCUERipper.Designer.cs
generated
@@ -565,7 +565,7 @@ namespace CUERipper
|
||||
rectRadius6.TopLeft = 2;
|
||||
rectRadius6.TopRight = 6;
|
||||
this.bnComboBoxDrives.Radius = rectRadius6;
|
||||
this.bnComboBoxDrives.SelectedValueChanged += new System.EventHandler(this.bnComboBoxDrives_SelectedValueChanged);
|
||||
this.bnComboBoxDrives.SelectedIndexChanged += new System.EventHandler(this.bnComboBoxDrives_SelectedIndexChanged);
|
||||
//
|
||||
// bnComboBoxOutputFormat
|
||||
//
|
||||
|
||||
@@ -214,36 +214,26 @@ namespace CUERipper
|
||||
data.Drives.RaiseListChangedEvents = false;
|
||||
foreach (char drive in CDDrivesList.DrivesAvailable())
|
||||
{
|
||||
ICDRipper reader = null;
|
||||
string arName = null;
|
||||
int driveOffset;
|
||||
this.BeginInvoke((MethodInvoker)(() =>
|
||||
toolStripStatusLabel1.Text = Properties.Resources.DetectingDrives + ": " + drive + ":\\..."));
|
||||
ICDRipper reader = Activator.CreateInstance(CUEProcessorPlugins.ripper) as ICDRipper;
|
||||
try
|
||||
{
|
||||
this.BeginInvoke((MethodInvoker)delegate()
|
||||
{
|
||||
toolStripStatusLabel1.Text = Properties.Resources.DetectingDrives + ": " + drive + ":\\...";
|
||||
});
|
||||
reader = Activator.CreateInstance(CUEProcessorPlugins.ripper) as ICDRipper;
|
||||
reader.Open(drive);
|
||||
arName = reader.ARName;
|
||||
reader.Close();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
try
|
||||
{
|
||||
arName = reader.ARName;
|
||||
System.Diagnostics.Trace.WriteLine(ex.Message);
|
||||
}
|
||||
reader.Close();
|
||||
}
|
||||
catch
|
||||
if (reader.ARName != null)
|
||||
{
|
||||
data.Drives.Add(new DriveInfo(m_icon_mgr, drive + ":\\", ex.Message));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (!AccurateRipVerify.FindDriveReadOffset(arName, out driveOffset))
|
||||
; //throw new Exception("Failed to find drive read offset for drive" + _ripper.ARName);
|
||||
int driveOffset;
|
||||
if (AccurateRipVerify.FindDriveReadOffset(reader.ARName, out driveOffset))
|
||||
reader.DriveOffset = driveOffset;
|
||||
else
|
||||
reader.DriveOffset = 0;
|
||||
}
|
||||
data.Drives.Add(new DriveInfo(m_icon_mgr, drive + ":\\", reader));
|
||||
}
|
||||
this.BeginInvoke((MethodInvoker)delegate()
|
||||
@@ -333,10 +323,7 @@ namespace CUERipper
|
||||
}
|
||||
if (_startStop._pause)
|
||||
{
|
||||
this.BeginInvoke((MethodInvoker)delegate()
|
||||
{
|
||||
toolStripStatusLabel1.Text = Properties.Resources.PausedMessage + "...";
|
||||
});
|
||||
this.BeginInvoke((MethodInvoker)(()=> toolStripStatusLabel1.Text = Properties.Resources.PausedMessage + "..."));
|
||||
Monitor.Wait(_startStop);
|
||||
}
|
||||
}
|
||||
@@ -773,6 +760,9 @@ namespace CUERipper
|
||||
if (bnComboBoxDrives.SelectedItem as DriveInfo == null)
|
||||
return;
|
||||
|
||||
if (selectedDriveInfo != null)
|
||||
selectedDriveInfo.drive.Close();
|
||||
|
||||
selectedDriveInfo = bnComboBoxDrives.SelectedItem as DriveInfo;
|
||||
defaultDrive = selectedDriveInfo.Path;
|
||||
|
||||
@@ -790,9 +780,8 @@ namespace CUERipper
|
||||
data.selectedRelease = null;
|
||||
bnComboBoxRelease.Enabled = false;
|
||||
bnComboBoxRelease.Text = "";
|
||||
if (selectedDriveInfo == null || selectedDriveInfo.drive == null)
|
||||
if (selectedDriveInfo == null)
|
||||
{
|
||||
selectedDriveInfo = null;
|
||||
SetupControls();
|
||||
return;
|
||||
}
|
||||
@@ -801,27 +790,19 @@ namespace CUERipper
|
||||
cueSheet.Close();
|
||||
cueSheet = null;
|
||||
}
|
||||
numericWriteOffset.Value = selectedDriveInfo.drive.DriveOffset;
|
||||
try
|
||||
{
|
||||
selectedDriveInfo.drive.Close();
|
||||
selectedDriveInfo.drive.Open(selectedDriveInfo.drive.Path[0]);
|
||||
numericWriteOffset.Value = selectedDriveInfo.drive.DriveOffset;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
numericWriteOffset.Value = selectedDriveInfo.drive.DriveOffset;
|
||||
//selectedDriveInfo.drive.Close();
|
||||
selectedDriveInfo.drive.Close();
|
||||
bnComboBoxRelease.Text = ex.Message;
|
||||
//bnComboBoxRelease.Enabled = false;
|
||||
SetupControls();
|
||||
return;
|
||||
}
|
||||
if (selectedDriveInfo.drive.TOC.AudioTracks == 0)
|
||||
{
|
||||
bnComboBoxRelease.Text = "No audio tracks";
|
||||
SetupControls();
|
||||
return;
|
||||
}
|
||||
// cannot use data.Drives.ResetItem(bnComboBoxDrives.SelectedIndex); - causes recursion
|
||||
UpdateRelease();
|
||||
_workThread = new Thread(Lookup);
|
||||
_workThread.Priority = ThreadPriority.BelowNormal;
|
||||
@@ -1029,7 +1010,7 @@ namespace CUERipper
|
||||
UpdateRelease();
|
||||
}
|
||||
|
||||
private void bnComboBoxDrives_SelectedValueChanged(object sender, EventArgs e)
|
||||
private void bnComboBoxDrives_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (_workThread == null)
|
||||
UpdateDrive();
|
||||
@@ -1444,7 +1425,6 @@ namespace CUERipper
|
||||
public class DriveInfo
|
||||
{
|
||||
public ICDRipper drive;
|
||||
public string error;
|
||||
DirectoryInfo di;
|
||||
CUEControls.IIconManager iconMgr;
|
||||
|
||||
@@ -1471,16 +1451,9 @@ namespace CUERipper
|
||||
this.drive = drive;
|
||||
}
|
||||
|
||||
public DriveInfo(CUEControls.IIconManager iconMgr, string path, string error)
|
||||
{
|
||||
this.iconMgr = iconMgr;
|
||||
this.di = new DirectoryInfo(path);
|
||||
this.error = error;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return drive != null ? drive.Path : this.di.FullName + ": " + error;
|
||||
return drive.Path;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -25,6 +25,8 @@ namespace ArCueDotNet
|
||||
config.writeArLogOnVerify = false;
|
||||
config.writeArTagsOnVerify = false;
|
||||
config.autoCorrectFilenames = true;
|
||||
config.extractAlbumArt = false;
|
||||
config.embedAlbumArt = false;
|
||||
StringWriter sw = new StringWriter();
|
||||
try
|
||||
{
|
||||
|
||||
@@ -18,6 +18,7 @@ namespace CUETools.AccurateRip
|
||||
_accDisks = new List<AccDisk>();
|
||||
_hasLogCRC = false;
|
||||
_CRCLOG = new uint[toc.AudioTracks + 1];
|
||||
ExceptionStatus = WebExceptionStatus.Pending;
|
||||
Init(toc);
|
||||
}
|
||||
|
||||
@@ -846,25 +847,31 @@ namespace CUETools.AccurateRip
|
||||
uint count = 0;
|
||||
uint partials = 0;
|
||||
uint conf = 0;
|
||||
uint crcOI = CRC(iTrack, oi);
|
||||
uint crc450OI = CRC450(iTrack, oi);
|
||||
for (int di = 0; di < (int)AccDisks.Count; di++)
|
||||
{
|
||||
int trno = iTrack + _toc.FirstAudio - 1;
|
||||
if (trno >= AccDisks[di].tracks.Count)
|
||||
continue;
|
||||
count += AccDisks[di].tracks[trno].count;
|
||||
if (CRC(iTrack, oi) == AccDisks[di].tracks[trno].CRC
|
||||
if (crcOI == AccDisks[di].tracks[trno].CRC
|
||||
&& 0 != AccDisks[di].tracks[trno].CRC)
|
||||
conf += AccDisks[di].tracks[trno].count;
|
||||
if (CRC450(iTrack, oi) == AccDisks[di].tracks[trno].Frame450CRC
|
||||
if (crc450OI == AccDisks[di].tracks[trno].Frame450CRC
|
||||
&& 0 != AccDisks[di].tracks[trno].Frame450CRC)
|
||||
partials += AccDisks[di].tracks[trno].count;
|
||||
partials ++;
|
||||
}
|
||||
if (conf > 0 || (count == 0 && CRC(iTrack, oi) == 0))
|
||||
sw.WriteLine(String.Format(" {0:00} [{1:x8}] ({3" + ifmt + "}/{2" + ifmt + "}) Accurately ripped", iTrack + 1, CRC(iTrack, oi), count, conf));
|
||||
string status;
|
||||
if (conf > 0)
|
||||
status = "Accurately ripped";
|
||||
else if (count == 0 && CRC(iTrack, oi) == 0)
|
||||
status = "Silent track";
|
||||
else if (partials > 0)
|
||||
sw.WriteLine(String.Format(" {0:00} [{1:x8}] ({3" + ifmt + "}/{2" + ifmt + "}) No match but offset", iTrack + 1, CRC(iTrack, oi), count, partials));
|
||||
status = "No match but offset";
|
||||
else
|
||||
sw.WriteLine(String.Format(" {0:00} [{1:x8}] ({3" + ifmt + "}/{2" + ifmt + "}) No match", iTrack + 1, CRC(iTrack, oi), count, 0));
|
||||
status = "No match";
|
||||
sw.WriteLine(String.Format(" {0:00} [{1:x8}] ({3" + ifmt + "}/{2" + ifmt + "}) {4}", iTrack + 1, CRC(iTrack, oi), count, conf, status));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -909,21 +916,25 @@ namespace CUETools.AccurateRip
|
||||
{
|
||||
uint matches = 0, partials = 0;
|
||||
for (int iTrack = 0; iTrack < _toc.AudioTracks; iTrack++)
|
||||
{
|
||||
uint crcOI = CRC(iTrack, oi);
|
||||
uint crc450OI = CRC450(iTrack, oi);
|
||||
for (int di = 0; di < (int)AccDisks.Count; di++)
|
||||
{
|
||||
int trno = iTrack + _toc.FirstAudio - 1;
|
||||
if (trno < AccDisks[di].tracks.Count
|
||||
&& (CRC(iTrack, oi) == AccDisks[di].tracks[trno].CRC
|
||||
&& AccDisks[di].tracks[trno].CRC != 0))
|
||||
if (trno >= AccDisks[di].tracks.Count)
|
||||
continue;
|
||||
if (crcOI == AccDisks[di].tracks[trno].CRC
|
||||
&& AccDisks[di].tracks[trno].CRC != 0)
|
||||
{
|
||||
matches++;
|
||||
break;
|
||||
}
|
||||
if (trno < AccDisks[di].tracks.Count
|
||||
&& (CRC450(iTrack, oi) == AccDisks[di].tracks[trno].Frame450CRC
|
||||
&& AccDisks[di].tracks[trno].Frame450CRC != 0))
|
||||
if (crc450OI == AccDisks[di].tracks[trno].Frame450CRC
|
||||
&& AccDisks[di].tracks[trno].Frame450CRC != 0)
|
||||
partials++;
|
||||
}
|
||||
}
|
||||
if (matches != _toc.AudioTracks && oi != 0 && matches + partials != 0)
|
||||
{
|
||||
if (offsets_match++ > 16)
|
||||
|
||||
@@ -7,6 +7,7 @@ using System.Management;
|
||||
using System.Net;
|
||||
using System.Xml;
|
||||
using System.Text;
|
||||
using System.Security.Cryptography;
|
||||
using CUETools.CDImage;
|
||||
using CUETools.AccurateRip;
|
||||
using Krystalware.UploadHelper;
|
||||
@@ -172,19 +173,22 @@ namespace CUETools.CTDB
|
||||
{
|
||||
if (uuidInfo == null)
|
||||
{
|
||||
ManagementClass mc = new ManagementClass("Win32_ComputerSystemProduct");
|
||||
string id = "CTDB userid";
|
||||
using (ManagementClass mc = new ManagementClass("Win32_ComputerSystemProduct"))
|
||||
foreach (ManagementObject mo in mc.GetInstances())
|
||||
{
|
||||
uuidInfo = mo.Properties["UUID"].Value.ToString();
|
||||
id = id + mo.Properties["UUID"].Value.ToString();
|
||||
break;
|
||||
}
|
||||
byte[] hashBytes = (new SHA1CryptoServiceProvider()).ComputeHash(Encoding.ASCII.GetBytes(id));
|
||||
uuidInfo = Convert.ToBase64String(hashBytes).Replace('+', '.').Replace('/', '_').Replace('=', '-');
|
||||
}
|
||||
return uuidInfo ?? "unknown";
|
||||
return uuidInfo;
|
||||
}
|
||||
|
||||
public string Confirm(DBEntry entry)
|
||||
{
|
||||
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(urlbase + "/confirm.php?tocid=" + toc.TOCID + "&id=" + entry.id);
|
||||
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(urlbase + "/confirm.php?tocid=" + toc.TOCID + "&id=" + entry.id + "&userid=" + GetUUID());
|
||||
req.Method = "GET";
|
||||
req.Proxy = proxy;
|
||||
req.UserAgent = userAgent;
|
||||
|
||||
@@ -211,7 +211,7 @@ namespace CUETools.Codecs.LAME
|
||||
}
|
||||
}
|
||||
|
||||
public object Settings
|
||||
public virtual object Settings
|
||||
{
|
||||
get
|
||||
{
|
||||
@@ -312,7 +312,7 @@ namespace CUETools.Codecs.LAME
|
||||
|
||||
LAMEEncoderVBRSettings _settings = new LAMEEncoderVBRSettings();
|
||||
|
||||
public object Settings
|
||||
public override object Settings
|
||||
{
|
||||
get
|
||||
{
|
||||
@@ -375,7 +375,7 @@ namespace CUETools.Codecs.LAME
|
||||
|
||||
LAMEEncoderCBRSettings _settings = new LAMEEncoderCBRSettings();
|
||||
|
||||
public object Settings
|
||||
public override object Settings
|
||||
{
|
||||
get
|
||||
{
|
||||
|
||||
@@ -296,7 +296,7 @@ namespace CUETools { namespace Codecs { namespace WavPack {
|
||||
public:
|
||||
WavPackWriterSettings()
|
||||
{
|
||||
_md5Sum = false;
|
||||
_md5Sum = true;
|
||||
_extraMode = 0;
|
||||
}
|
||||
|
||||
@@ -314,7 +314,7 @@ namespace CUETools { namespace Codecs { namespace WavPack {
|
||||
}
|
||||
}
|
||||
|
||||
[DefaultValue(false)]
|
||||
[DefaultValue(true)]
|
||||
[DisplayName("MD5")]
|
||||
[Description("Calculate MD5 hash for audio stream")]
|
||||
property bool MD5Sum {
|
||||
@@ -337,6 +337,8 @@ namespace CUETools { namespace Codecs { namespace WavPack {
|
||||
public:
|
||||
WavPackWriter(String^ path, AudioPCMConfig^ pcm)
|
||||
{
|
||||
_settings = gcnew WavPackWriterSettings();
|
||||
|
||||
_pcm = pcm;
|
||||
|
||||
if (_pcm->ChannelCount != 1 && _pcm->ChannelCount != 2)
|
||||
@@ -504,8 +506,6 @@ namespace CUETools { namespace Codecs { namespace WavPack {
|
||||
WavPackWriterSettings^ _settings;
|
||||
|
||||
void Initialize() {
|
||||
_settings = gcnew WavPackWriterSettings();
|
||||
|
||||
WavpackConfig config;
|
||||
|
||||
_wpc = WavpackOpenFileOutput(write_block, _hFile, NULL);
|
||||
|
||||
58
CUETools.Codecs/Local.cs
Normal file
58
CUETools.Codecs/Local.cs
Normal file
@@ -0,0 +1,58 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace CUETools.Codecs
|
||||
{
|
||||
/// <summary>
|
||||
/// Localized description attribute
|
||||
/// </summary>
|
||||
[AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = true)]
|
||||
public class SRDescriptionAttribute : DescriptionAttribute
|
||||
{
|
||||
/// <summary>
|
||||
/// Construct the description attribute
|
||||
/// </summary>
|
||||
/// <param name="text"></param>
|
||||
public SRDescriptionAttribute(Type SR, string text)
|
||||
: base(text)
|
||||
{
|
||||
this.localized = false;
|
||||
this.SR = SR;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Override the return of the description text to localize the text
|
||||
/// </summary>
|
||||
public override string Description
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!localized)
|
||||
{
|
||||
localized = true;
|
||||
this.DescriptionValue = SR.InvokeMember(
|
||||
this.DescriptionValue,
|
||||
System.Reflection.BindingFlags.GetProperty | System.Reflection.BindingFlags.Static |
|
||||
System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic,
|
||||
null,
|
||||
null,
|
||||
new object[] { }) as string;
|
||||
}
|
||||
|
||||
return base.Description;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Store a flag indicating whether this has been localized
|
||||
/// </summary>
|
||||
private bool localized;
|
||||
|
||||
/// <summary>
|
||||
/// Resource manager to use;
|
||||
/// </summary>
|
||||
private Type SR;
|
||||
}
|
||||
}
|
||||
@@ -836,7 +836,7 @@ namespace CUETools.Processor
|
||||
//string arch = asi.ApplicationId.ProcessorArchitecture;
|
||||
//ActivationContext is null most of the time :(
|
||||
|
||||
string arch = Marshal.SizeOf(typeof(IntPtr)) == 8 ? "x64" : "Win32";
|
||||
string arch = Type.GetType("Mono.Runtime", false) != null ? "mono" : Marshal.SizeOf(typeof(IntPtr)) == 8 ? "x64" : "Win32";
|
||||
string plugins_path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Plugins (" + arch + ")");
|
||||
if (Directory.Exists(plugins_path))
|
||||
AddPluginDirectory(plugins_path);
|
||||
@@ -1665,6 +1665,7 @@ string status = processor.Go();
|
||||
public int offset = 0;
|
||||
public string input = string.Empty;
|
||||
public string output = string.Empty;
|
||||
public CUESheet cueSheet;
|
||||
}
|
||||
|
||||
public class CUEToolsSelectionEventArgs : EventArgs
|
||||
@@ -1747,6 +1748,7 @@ string status = processor.Go();
|
||||
{
|
||||
_config = config;
|
||||
_progress = new CUEToolsProgressEventArgs();
|
||||
_progress.cueSheet = this;
|
||||
_attributes = new List<CUELine>();
|
||||
_tracks = new List<TrackInfo>();
|
||||
_trackFilenames = new List<string>();
|
||||
@@ -1793,6 +1795,11 @@ string status = processor.Go();
|
||||
|
||||
public void Close()
|
||||
{
|
||||
if (_progress != null)
|
||||
{
|
||||
_progress.cueSheet = null;
|
||||
_progress = null;
|
||||
}
|
||||
if (_archive != null)
|
||||
_archive.Close();
|
||||
_archive = null;
|
||||
@@ -3142,7 +3149,7 @@ string status = processor.Go();
|
||||
{
|
||||
vars.Add("year", General.EmptyStringToNull(cueSheet.Year));
|
||||
vars.Add("catalog", General.EmptyStringToNull(cueSheet.Catalog));
|
||||
vars.Add("discnumber", General.EmptyStringToNull(cueSheet.DiscNumber));
|
||||
vars.Add("discnumber", General.EmptyStringToNull(cueSheet.DiscNumber01));
|
||||
vars.Add("totaldiscs", General.EmptyStringToNull(cueSheet.TotalDiscs));
|
||||
NameValueCollection tags = cueSheet.Tags;
|
||||
if (tags != null)
|
||||
@@ -3194,7 +3201,7 @@ string status = processor.Go();
|
||||
vars.Add("album", General.EmptyStringToNull(_config.CleanseString(Title)));
|
||||
vars.Add("year", General.EmptyStringToNull(_config.CleanseString(Year)));
|
||||
vars.Add("catalog", General.EmptyStringToNull(_config.CleanseString(Catalog)));
|
||||
vars.Add("discnumber", General.EmptyStringToNull(_config.CleanseString(DiscNumber)));
|
||||
vars.Add("discnumber", General.EmptyStringToNull(_config.CleanseString(DiscNumber01)));
|
||||
vars.Add("totaldiscs", General.EmptyStringToNull(_config.CleanseString(TotalDiscs)));
|
||||
vars.Add("filename", Path.GetFileNameWithoutExtension(outputPath));
|
||||
vars.Add("tracknumber", null);
|
||||
@@ -3243,7 +3250,20 @@ string status = processor.Go();
|
||||
vars["artist"] = General.EmptyStringToNull(_config.CleanseString(artist)) ?? vars["album artist"];
|
||||
vars["title"] = General.EmptyStringToNull(_config.CleanseString(title));
|
||||
|
||||
filename = (General.ReplaceMultiple(_config.trackFilenameFormat, vars, -1) ?? vars["tracknumber"]) + extension;
|
||||
filename = "";
|
||||
for (int maxLen = 260; maxLen >= 16; maxLen--)
|
||||
{
|
||||
filename = General.ReplaceMultiple(_config.trackFilenameFormat, vars, maxLen);
|
||||
if (filename == "" || filename == null)
|
||||
{
|
||||
filename = vars["tracknumber"];
|
||||
break;
|
||||
}
|
||||
if (OutputDir.Length + filename.Length < 255)
|
||||
break;
|
||||
}
|
||||
|
||||
filename = filename + extension;
|
||||
|
||||
if (htoa)
|
||||
HTOAFilename = filename;
|
||||
@@ -3269,31 +3289,32 @@ string status = processor.Go();
|
||||
}
|
||||
}
|
||||
|
||||
public bool OutputExists()
|
||||
public List<string> OutputExists()
|
||||
{
|
||||
bool outputExists = false;
|
||||
List<string> outputExists = new List<string>();
|
||||
bool outputCUE = Action == CUEAction.Encode && (OutputStyle != CUEStyle.SingleFileWithCUE || _config.createCUEFileWhenEmbedded);
|
||||
bool outputAudio = Action == CUEAction.Encode && _audioEncoderType != AudioEncoderType.NoAudio;
|
||||
if (outputCUE)
|
||||
outputExists = File.Exists(_outputPath);
|
||||
outputExists.Add(_outputPath);
|
||||
if (_useAccurateRip && (
|
||||
(Action == CUEAction.Encode && _config.writeArLogOnConvert) ||
|
||||
(Action == CUEAction.Verify && _config.writeArLogOnVerify)))
|
||||
outputExists |= File.Exists(Path.Combine(OutputDir, ArLogFileName));
|
||||
outputExists.Add(Path.Combine(OutputDir, ArLogFileName));
|
||||
if (outputAudio)
|
||||
{
|
||||
if (_config.extractAlbumArt && AlbumArt != null && AlbumArt.Count != 0)
|
||||
outputExists |= File.Exists(Path.Combine(OutputDir, AlArtFileName));
|
||||
outputExists.Add(Path.Combine(OutputDir, AlArtFileName));
|
||||
if (OutputStyle == CUEStyle.SingleFile || OutputStyle == CUEStyle.SingleFileWithCUE)
|
||||
outputExists |= File.Exists(Path.Combine(OutputDir, SingleFilename));
|
||||
outputExists.Add(Path.Combine(OutputDir, SingleFilename));
|
||||
else
|
||||
{
|
||||
if (OutputStyle == CUEStyle.GapsAppended && _config.preserveHTOA)
|
||||
outputExists |= File.Exists(Path.Combine(OutputDir, HTOAFilename));
|
||||
outputExists.Add(Path.Combine(OutputDir, HTOAFilename));
|
||||
for (int i = 0; i < TrackCount; i++)
|
||||
outputExists |= File.Exists(Path.Combine(OutputDir, TrackFilenames[i]));
|
||||
outputExists.Add(Path.Combine(OutputDir, TrackFilenames[i]));
|
||||
}
|
||||
}
|
||||
outputExists.RemoveAll(path => !File.Exists(path));
|
||||
return outputExists;
|
||||
}
|
||||
|
||||
@@ -4154,11 +4175,8 @@ string status = processor.Go();
|
||||
return;
|
||||
|
||||
string imgPath = Path.Combine(OutputDir, AlArtFileName);
|
||||
if (File.Exists(imgPath))
|
||||
return;
|
||||
|
||||
foreach (TagLib.IPicture picture in _albumArt)
|
||||
using (FileStream file = new FileStream(imgPath, FileMode.CreateNew, FileAccess.Write, FileShare.Read))
|
||||
using (FileStream file = new FileStream(imgPath, FileMode.Create, FileAccess.Write, FileShare.Read))
|
||||
{
|
||||
file.Write(picture.Data.Data, 0, picture.Data.Count);
|
||||
return;
|
||||
@@ -4249,6 +4267,8 @@ string status = processor.Go();
|
||||
return;
|
||||
foreach (TagLib.IPicture picture in _albumArt)
|
||||
using (MemoryStream imageStream = new MemoryStream(picture.Data.Data, 0, picture.Data.Count))
|
||||
try
|
||||
{
|
||||
using (Image img = Image.FromStream(imageStream))
|
||||
if (img.Width > _config.maxAlbumArtSize || img.Height > _config.maxAlbumArtSize)
|
||||
{
|
||||
@@ -4263,6 +4283,10 @@ string status = processor.Go();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public List<TagLib.IPicture> AlbumArt
|
||||
{
|
||||
@@ -4971,27 +4995,6 @@ string status = processor.Go();
|
||||
}
|
||||
}
|
||||
|
||||
// Use old-fashioned way if dealing with archive (files != null)
|
||||
// or with single file (filePos.Count == 1).
|
||||
// In other cases we use CUESheet.ScanFolder, which
|
||||
// is better at sorting and separating albums,
|
||||
// but doesn't support archives and single files yet.
|
||||
if (!foundAll && (files != null || filePos.Count == 1))
|
||||
foreach (KeyValuePair<string, CUEToolsFormat> format in _config.formats)
|
||||
{
|
||||
if (files == null)
|
||||
audioFiles = Directory.GetFiles(dir == "" ? "." : dir, "*." + format.Key);
|
||||
else
|
||||
audioFiles = files.FindAll(s => Path.GetDirectoryName(s) == dir && Path.GetExtension(s).ToLower() == "." + format.Key).ToArray();
|
||||
if (audioFiles.Length == filePos.Count)
|
||||
{
|
||||
Array.Sort(audioFiles);
|
||||
extension = format.Key;
|
||||
foundAll = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!foundAll && files == null)
|
||||
{
|
||||
List<FileGroupInfo> fileGroups = CUESheet.ScanFolder(_config, dir == "" ? "." : dir);
|
||||
@@ -5050,6 +5053,27 @@ string status = processor.Go();
|
||||
}
|
||||
}
|
||||
|
||||
// Use old-fashioned way if dealing with archive (files != null)
|
||||
// or with single file (filePos.Count == 1).
|
||||
// In other cases we use CUESheet.ScanFolder, which
|
||||
// is better at sorting and separating albums,
|
||||
// but doesn't support archives and single files yet.
|
||||
if (!foundAll)// && (files != null || filePos.Count == 1))
|
||||
foreach (KeyValuePair<string, CUEToolsFormat> format in _config.formats)
|
||||
{
|
||||
if (files == null)
|
||||
audioFiles = Directory.GetFiles(dir == "" ? "." : dir, "*." + format.Key);
|
||||
else
|
||||
audioFiles = files.FindAll(s => Path.GetDirectoryName(s) == dir && Path.GetExtension(s).ToLower() == "." + format.Key).ToArray();
|
||||
if (audioFiles.Length == filePos.Count)
|
||||
{
|
||||
Array.Sort(audioFiles);
|
||||
extension = format.Key;
|
||||
foundAll = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!foundAll)
|
||||
throw new Exception("unable to locate the audio files");
|
||||
|
||||
@@ -5352,6 +5376,17 @@ string status = processor.Go();
|
||||
}
|
||||
}
|
||||
|
||||
public string DiscNumber01
|
||||
{
|
||||
get
|
||||
{
|
||||
uint td = 0, dn = 0;
|
||||
if (uint.TryParse(TotalDiscs, out td) && uint.TryParse(DiscNumber, out dn) && td > 9 && dn > 0)
|
||||
return string.Format("{0:00}", dn);
|
||||
return DiscNumber;
|
||||
}
|
||||
}
|
||||
|
||||
public string DiscNumber
|
||||
{
|
||||
get
|
||||
@@ -5668,6 +5703,8 @@ string status = processor.Go();
|
||||
List<FileGroupInfo> fileGroups = new List<FileGroupInfo>();
|
||||
foreach (FileSystemInfo file in files)
|
||||
{
|
||||
// file.Refresh();
|
||||
// file.Attributes returns -1 for long paths!!!
|
||||
if ((file.Attributes & FileAttributes.Hidden) != 0)
|
||||
continue;
|
||||
if ((file.Attributes & FileAttributes.Directory) != 0)
|
||||
@@ -5704,7 +5741,11 @@ string status = processor.Go();
|
||||
line = Path.Combine(Path.GetDirectoryName(file.FullName), line);
|
||||
if (File.Exists(line))
|
||||
{
|
||||
m3uGroup.files.Add(new FileInfo(line));
|
||||
FileInfo f = new FileInfo(line);
|
||||
CUEToolsFormat fmt1;
|
||||
if (!f.Extension.StartsWith(".") || !_config.formats.TryGetValue(f.Extension.ToLower().Substring(1), out fmt1) || !fmt1.allowLossless)
|
||||
throw new Exception("not lossless");
|
||||
m3uGroup.files.Add(f);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -5805,7 +5846,7 @@ string status = processor.Go();
|
||||
foreach (FileGroupInfo group in fileGroups)
|
||||
if (group.type == FileGroupInfoType.TrackFiles)
|
||||
{
|
||||
group.files.Sort(group.CompareNumbers);
|
||||
group.files.Sort(group.Compare());
|
||||
group.numbers = null;
|
||||
group.TOC = new CDImageLayout();
|
||||
foreach(FileSystemInfo f in group.files)
|
||||
@@ -5819,6 +5860,7 @@ string status = processor.Go();
|
||||
group.TOC.AddTrack(new CDTrack((uint)group.TOC.TrackCount + 1, group.TOC.Length, len, true, false));
|
||||
}
|
||||
}
|
||||
fileGroups.Sort(FileGroupInfo.Compare);
|
||||
return fileGroups;
|
||||
}
|
||||
|
||||
@@ -6034,6 +6076,25 @@ string status = processor.Go();
|
||||
return na;
|
||||
}
|
||||
|
||||
public static int Compare(FileGroupInfo a, FileGroupInfo b)
|
||||
{
|
||||
if (a.type == b.type)
|
||||
return CompareTrackNames(a.main.FullName, b.main.FullName);
|
||||
return Comparer<FileGroupInfoType>.Default.Compare(a.type, b.type);
|
||||
}
|
||||
|
||||
public Comparison<FileSystemInfo> Compare()
|
||||
{
|
||||
if (files.Find(f => !numbers.ContainsKey(f)) == null)
|
||||
return (a, b) => Comparer<uint>.Default.Compare(numbers[a], numbers[b]);
|
||||
return CompareTrackNames;
|
||||
}
|
||||
|
||||
public static int CompareTrackNames(FileSystemInfo a, FileSystemInfo b)
|
||||
{
|
||||
return CompareTrackNames(a.FullName, b.FullName);
|
||||
}
|
||||
|
||||
public static int CompareTrackNames(string a, string b)
|
||||
{
|
||||
while (a.Length > 0 && b.Length > 0 && a[0] == b[0])
|
||||
@@ -6050,15 +6111,6 @@ string status = processor.Go();
|
||||
return CompareTrackNames(a, b);
|
||||
}
|
||||
|
||||
public int CompareNumbers(FileSystemInfo a, FileSystemInfo b)
|
||||
{
|
||||
if (numbers.ContainsKey(a) && numbers.ContainsKey(b))
|
||||
return Comparer<uint>.Default.Compare(numbers[a], numbers[b]);
|
||||
if (!numbers.ContainsKey(a) && !numbers.ContainsKey(b))
|
||||
return CompareTrackNames(a.FullName, b.FullName);
|
||||
return Comparer<bool>.Default.Compare(numbers.ContainsKey(a), numbers.ContainsKey(b));
|
||||
}
|
||||
|
||||
public bool Contains(string pathIn)
|
||||
{
|
||||
if (type != FileGroupInfoType.TrackFiles)
|
||||
|
||||
4
CUETools.Ripper.SCSI/Resource1.Designer.cs
generated
4
CUETools.Ripper.SCSI/Resource1.Designer.cs
generated
@@ -79,7 +79,7 @@ namespace CUETools.Ripper.SCSI {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to not an MMC device.
|
||||
/// Looks up a localized string similar to Not an MMC device.
|
||||
/// </summary>
|
||||
internal static string DeviceNotMMC {
|
||||
get {
|
||||
@@ -97,7 +97,7 @@ namespace CUETools.Ripper.SCSI {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to no audio.
|
||||
/// Looks up a localized string similar to No audio tracks.
|
||||
/// </summary>
|
||||
internal static string NoAudio {
|
||||
get {
|
||||
|
||||
@@ -124,13 +124,13 @@
|
||||
<value>Error querying drive</value>
|
||||
</data>
|
||||
<data name="DeviceNotMMC" xml:space="preserve">
|
||||
<value>not an MMC device</value>
|
||||
<value>Not an MMC device</value>
|
||||
</data>
|
||||
<data name="DeviceOpenError" xml:space="preserve">
|
||||
<value>Open failed</value>
|
||||
</data>
|
||||
<data name="NoAudio" xml:space="preserve">
|
||||
<value>no audio</value>
|
||||
<value>No audio tracks</value>
|
||||
</data>
|
||||
<data name="ReadCDError" xml:space="preserve">
|
||||
<value>Error reading CD</value>
|
||||
|
||||
@@ -124,13 +124,13 @@
|
||||
<value>Ошибка при опросе устройства</value>
|
||||
</data>
|
||||
<data name="DeviceNotMMC" xml:space="preserve">
|
||||
<value>устройство не поддерживает стандарт MMC</value>
|
||||
<value>Устройство не поддерживает стандарт MMC</value>
|
||||
</data>
|
||||
<data name="DeviceOpenError" xml:space="preserve">
|
||||
<value>Ошибка при открытии устройства</value>
|
||||
</data>
|
||||
<data name="NoAudio" xml:space="preserve">
|
||||
<value>отсутствует аудио</value>
|
||||
<value>Отсутствуют аудио-треки</value>
|
||||
</data>
|
||||
<data name="ReadCDError" xml:space="preserve">
|
||||
<value>Ошибка при чтении диска</value>
|
||||
|
||||
@@ -193,6 +193,8 @@ namespace CUETools.Ripper.SCSI
|
||||
{
|
||||
Device.CommandStatus st;
|
||||
|
||||
m_inqury_result = null;
|
||||
|
||||
// Open the base device
|
||||
m_device_letter = Drive;
|
||||
if (m_device != null)
|
||||
@@ -200,14 +202,15 @@ namespace CUETools.Ripper.SCSI
|
||||
|
||||
m_device = new Device(m_logger);
|
||||
if (!m_device.Open(m_device_letter))
|
||||
throw new Exception(Resource1.DeviceOpenError + ": " + WinDev.Win32ErrorToString(m_device.LastError));
|
||||
throw new ReadCDException(Resource1.DeviceOpenError, Marshal.GetExceptionForHR(Marshal.GetHRForLastWin32Error()));
|
||||
//throw new ReadCDException(Resource1.DeviceOpenError + ": " + WinDev.Win32ErrorToString(m_device.LastError));
|
||||
|
||||
// Get device info
|
||||
st = m_device.Inquiry(out m_inqury_result);
|
||||
if (st != Device.CommandStatus.Success || !m_inqury_result.Valid)
|
||||
if (st != Device.CommandStatus.Success)
|
||||
throw new SCSIException(Resource1.DeviceInquiryError, m_device, st);
|
||||
if (m_inqury_result.PeripheralQualifier != 0 || m_inqury_result.PeripheralDeviceType != Device.MMCDeviceType)
|
||||
throw new Exception(Path + ": " + Resource1.DeviceNotMMC);
|
||||
if (!m_inqury_result.Valid || m_inqury_result.PeripheralQualifier != 0 || m_inqury_result.PeripheralDeviceType != Device.MMCDeviceType)
|
||||
throw new ReadCDException(Resource1.DeviceNotMMC);
|
||||
|
||||
m_max_sectors = Math.Min(NSECTORS, m_device.MaximumTransferLength / CB_AUDIO - 1);
|
||||
//// Open/Initialize the driver
|
||||
@@ -276,7 +279,8 @@ namespace CUETools.Ripper.SCSI
|
||||
if (_toc[1].IsAudio)
|
||||
_toc[1][0].Start = 0;
|
||||
Position = 0;
|
||||
}
|
||||
} else
|
||||
throw new ReadCDException(Resource1.NoAudio);
|
||||
|
||||
UserData = new long[MSECTORS, 2, 4 * 588];
|
||||
C2Count = new byte[MSECTORS, 294];
|
||||
@@ -565,7 +569,7 @@ namespace CUETools.Ripper.SCSI
|
||||
public unsafe bool DetectGaps()
|
||||
{
|
||||
if (!TestReadCommand())
|
||||
throw new Exception(Resource1.AutodetectReadCommandFailed+ ":\n" + _autodetectResult);
|
||||
throw new ReadCDException(Resource1.AutodetectReadCommandFailed + ":\n" + _autodetectResult);
|
||||
|
||||
if (_gapDetection == GapDetectionMethod.None)
|
||||
{
|
||||
@@ -964,7 +968,7 @@ namespace CUETools.Ripper.SCSI
|
||||
return;
|
||||
|
||||
if (!TestReadCommand())
|
||||
throw new Exception(Resource1.AutodetectReadCommandFailed + "\n" + _autodetectResult);
|
||||
throw new ReadCDException(Resource1.AutodetectReadCommandFailed + "\n" + _autodetectResult);
|
||||
|
||||
_currentStart = iSector;
|
||||
_currentEnd = _currentStart + MSECTORS;
|
||||
@@ -1041,7 +1045,7 @@ namespace CUETools.Ripper.SCSI
|
||||
public unsafe int Read(AudioBuffer buff, int maxLength)
|
||||
{
|
||||
if (_toc == null)
|
||||
throw new Exception("Read: invalid TOC");
|
||||
throw new ReadCDException("Read: invalid TOC");
|
||||
buff.Prepare(this, maxLength);
|
||||
if (Position >= Length)
|
||||
return 0;
|
||||
@@ -1081,7 +1085,7 @@ namespace CUETools.Ripper.SCSI
|
||||
get
|
||||
{
|
||||
if (_toc == null)
|
||||
throw new Exception("invalid TOC");
|
||||
throw new ReadCDException("invalid TOC");
|
||||
return 588 * (int)_toc.AudioLength;
|
||||
}
|
||||
}
|
||||
@@ -1099,6 +1103,7 @@ namespace CUETools.Ripper.SCSI
|
||||
get
|
||||
{
|
||||
string result = m_device_letter + ": ";
|
||||
if (m_inqury_result != null && m_inqury_result.Valid)
|
||||
result += "[" + m_inqury_result.VendorIdentification + " " +
|
||||
m_inqury_result.ProductIdentification + " " +
|
||||
m_inqury_result.FirmwareVersion + "]";
|
||||
@@ -1110,7 +1115,9 @@ namespace CUETools.Ripper.SCSI
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_inqury_result.VendorIdentification.TrimEnd(' ', '\0').PadRight(8, ' ') + " - " + m_inqury_result.ProductIdentification.TrimEnd(' ', '\0');
|
||||
return m_inqury_result == null || !m_inqury_result.Valid ? null :
|
||||
m_inqury_result.VendorIdentification.TrimEnd(' ', '\0').PadRight(8, ' ') + " - " +
|
||||
m_inqury_result.ProductIdentification.TrimEnd(' ', '\0');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1131,7 +1138,7 @@ namespace CUETools.Ripper.SCSI
|
||||
set
|
||||
{
|
||||
if (_toc == null || _toc.AudioLength <= 0)
|
||||
throw new Exception(Resource1.NoAudio);
|
||||
throw new ReadCDException(Resource1.NoAudio);
|
||||
_crcErrorsCount = 0;
|
||||
_errorsCount = 0;
|
||||
_currentStart = -1;
|
||||
@@ -1217,4 +1224,12 @@ namespace CUETools.Ripper.SCSI
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class ReadCDException : Exception
|
||||
{
|
||||
public ReadCDException(string args, Exception inner)
|
||||
: base(args + ": " + inner.Message, inner) { }
|
||||
public ReadCDException(string args)
|
||||
: base(args) { }
|
||||
}
|
||||
}
|
||||
|
||||
80
CUETools/CUETools.TestCodecs/FileGroupInfoTest.cs
Normal file
80
CUETools/CUETools.TestCodecs/FileGroupInfoTest.cs
Normal file
@@ -0,0 +1,80 @@
|
||||
using CUETools.Processor;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
namespace CUETools.TestCodecs
|
||||
{
|
||||
|
||||
|
||||
/// <summary>
|
||||
///This is a test class for FileGroupInfoTest and is intended
|
||||
///to contain all FileGroupInfoTest Unit Tests
|
||||
///</summary>
|
||||
[TestClass()]
|
||||
public class FileGroupInfoTest
|
||||
{
|
||||
|
||||
|
||||
private TestContext testContextInstance;
|
||||
|
||||
/// <summary>
|
||||
///Gets or sets the test context which provides
|
||||
///information about and functionality for the current test run.
|
||||
///</summary>
|
||||
public TestContext TestContext
|
||||
{
|
||||
get
|
||||
{
|
||||
return testContextInstance;
|
||||
}
|
||||
set
|
||||
{
|
||||
testContextInstance = value;
|
||||
}
|
||||
}
|
||||
|
||||
#region Additional test attributes
|
||||
//
|
||||
//You can use the following additional attributes as you write your tests:
|
||||
//
|
||||
//Use ClassInitialize to run code before running the first test in the class
|
||||
//[ClassInitialize()]
|
||||
//public static void MyClassInitialize(TestContext testContext)
|
||||
//{
|
||||
//}
|
||||
//
|
||||
//Use ClassCleanup to run code after all tests in a class have run
|
||||
//[ClassCleanup()]
|
||||
//public static void MyClassCleanup()
|
||||
//{
|
||||
//}
|
||||
//
|
||||
//Use TestInitialize to run code before running each test
|
||||
//[TestInitialize()]
|
||||
//public void MyTestInitialize()
|
||||
//{
|
||||
//}
|
||||
//
|
||||
//Use TestCleanup to run code after each test has run
|
||||
//[TestCleanup()]
|
||||
//public void MyTestCleanup()
|
||||
//{
|
||||
//}
|
||||
//
|
||||
#endregion
|
||||
|
||||
|
||||
/// <summary>
|
||||
///A test for CompareTrackNames
|
||||
///</summary>
|
||||
[TestMethod()]
|
||||
public void CompareTrackNamesTest()
|
||||
{
|
||||
string a = string.Empty; // TODO: Initialize to an appropriate value
|
||||
string b = string.Empty; // TODO: Initialize to an appropriate value
|
||||
int expected = 0; // TODO: Initialize to an appropriate value
|
||||
int actual;
|
||||
actual = FileGroupInfo.CompareTrackNames(a, b);
|
||||
Assert.AreEqual(expected, actual);
|
||||
Assert.Inconclusive("Verify the correctness of this test method.");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -96,6 +96,12 @@
|
||||
<Compile Include="frmChoice.Designer.cs">
|
||||
<DependentUpon>frmChoice.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="frmOverwrite.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="frmOverwrite.Designer.cs">
|
||||
<DependentUpon>frmOverwrite.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="frmPassword.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
@@ -158,6 +164,9 @@
|
||||
<SubType>Designer</SubType>
|
||||
<DependentUpon>frmCUETools.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="frmOverwrite.resx">
|
||||
<DependentUpon>frmOverwrite.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="frmPassword.de-DE.resx">
|
||||
<DependentUpon>frmPassword.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
|
||||
56
CUETools/frmCUETools.Designer.cs
generated
56
CUETools/frmCUETools.Designer.cs
generated
@@ -35,6 +35,7 @@ namespace JDP {
|
||||
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.textBatchReport = new System.Windows.Forms.TextBox();
|
||||
this.grpInput = new System.Windows.Forms.GroupBox();
|
||||
this.fileSystemTreeView1 = new CUEControls.FileSystemTreeView();
|
||||
this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.groupBoxMode = new System.Windows.Forms.GroupBox();
|
||||
this.tableLayoutPanelCUEStyle = new System.Windows.Forms.TableLayoutPanel();
|
||||
@@ -120,7 +121,6 @@ namespace JDP {
|
||||
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.setAsMyMusicFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.resetToOriginalLocationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.fileSystemTreeView1 = new CUEControls.FileSystemTreeView();
|
||||
this.toolStripContainer1.BottomToolStripPanel.SuspendLayout();
|
||||
this.toolStripContainer1.ContentPanel.SuspendLayout();
|
||||
this.toolStripContainer1.TopToolStripPanel.SuspendLayout();
|
||||
@@ -254,6 +254,33 @@ namespace JDP {
|
||||
this.grpInput.Name = "grpInput";
|
||||
this.grpInput.TabStop = false;
|
||||
//
|
||||
// fileSystemTreeView1
|
||||
//
|
||||
this.fileSystemTreeView1.AllowDrop = true;
|
||||
resources.ApplyResources(this.fileSystemTreeView1, "fileSystemTreeView1");
|
||||
this.fileSystemTreeView1.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.fileSystemTreeView1.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.fileSystemTreeView1.CheckBoxes = true;
|
||||
this.fileSystemTreeView1.FullRowSelect = true;
|
||||
this.fileSystemTreeView1.HideSelection = false;
|
||||
this.fileSystemTreeView1.ItemHeight = 16;
|
||||
this.fileSystemTreeView1.Name = "fileSystemTreeView1";
|
||||
this.fileSystemTreeView1.ShowLines = false;
|
||||
this.fileSystemTreeView1.ShowRootLines = false;
|
||||
this.fileSystemTreeView1.SpecialFolders = new CUEControls.ExtraSpecialFolder[] {
|
||||
CUEControls.ExtraSpecialFolder.MyComputer,
|
||||
CUEControls.ExtraSpecialFolder.Profile,
|
||||
CUEControls.ExtraSpecialFolder.MyMusic,
|
||||
CUEControls.ExtraSpecialFolder.CommonMusic};
|
||||
this.fileSystemTreeView1.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.fileSystemTreeView1_AfterCheck);
|
||||
this.fileSystemTreeView1.NodeExpand += new CUEControls.FileSystemTreeViewNodeExpandHandler(this.fileSystemTreeView1_NodeExpand);
|
||||
this.fileSystemTreeView1.DragDrop += new System.Windows.Forms.DragEventHandler(this.fileSystemTreeView1_DragDrop);
|
||||
this.fileSystemTreeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.fileSystemTreeView1_AfterSelect);
|
||||
this.fileSystemTreeView1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.fileSystemTreeView1_MouseDown);
|
||||
this.fileSystemTreeView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.fileSystemTreeView1_KeyDown);
|
||||
this.fileSystemTreeView1.AfterExpand += new System.Windows.Forms.TreeViewEventHandler(this.fileSystemTreeView1_AfterExpand);
|
||||
this.fileSystemTreeView1.DragOver += new System.Windows.Forms.DragEventHandler(this.fileSystemTreeView1_DragOver);
|
||||
//
|
||||
// tableLayoutPanel2
|
||||
//
|
||||
resources.ApplyResources(this.tableLayoutPanel2, "tableLayoutPanel2");
|
||||
@@ -969,33 +996,6 @@ namespace JDP {
|
||||
resources.ApplyResources(this.resetToOriginalLocationToolStripMenuItem, "resetToOriginalLocationToolStripMenuItem");
|
||||
this.resetToOriginalLocationToolStripMenuItem.Click += new System.EventHandler(this.resetToOriginalLocationToolStripMenuItem_Click);
|
||||
//
|
||||
// fileSystemTreeView1
|
||||
//
|
||||
this.fileSystemTreeView1.AllowDrop = true;
|
||||
resources.ApplyResources(this.fileSystemTreeView1, "fileSystemTreeView1");
|
||||
this.fileSystemTreeView1.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.fileSystemTreeView1.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.fileSystemTreeView1.CheckBoxes = true;
|
||||
this.fileSystemTreeView1.FullRowSelect = true;
|
||||
this.fileSystemTreeView1.HideSelection = false;
|
||||
this.fileSystemTreeView1.ItemHeight = 16;
|
||||
this.fileSystemTreeView1.Name = "fileSystemTreeView1";
|
||||
this.fileSystemTreeView1.ShowLines = false;
|
||||
this.fileSystemTreeView1.ShowRootLines = false;
|
||||
this.fileSystemTreeView1.SpecialFolders = new CUEControls.ExtraSpecialFolder[] {
|
||||
CUEControls.ExtraSpecialFolder.MyComputer,
|
||||
CUEControls.ExtraSpecialFolder.Profile,
|
||||
CUEControls.ExtraSpecialFolder.MyMusic,
|
||||
CUEControls.ExtraSpecialFolder.CommonMusic};
|
||||
this.fileSystemTreeView1.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.fileSystemTreeView1_AfterCheck);
|
||||
this.fileSystemTreeView1.NodeExpand += new CUEControls.FileSystemTreeViewNodeExpandHandler(this.fileSystemTreeView1_NodeExpand);
|
||||
this.fileSystemTreeView1.DragDrop += new System.Windows.Forms.DragEventHandler(this.fileSystemTreeView1_DragDrop);
|
||||
this.fileSystemTreeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.fileSystemTreeView1_AfterSelect);
|
||||
this.fileSystemTreeView1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.fileSystemTreeView1_MouseDown);
|
||||
this.fileSystemTreeView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.fileSystemTreeView1_KeyDown);
|
||||
this.fileSystemTreeView1.AfterExpand += new System.Windows.Forms.TreeViewEventHandler(this.fileSystemTreeView1_AfterExpand);
|
||||
this.fileSystemTreeView1.DragOver += new System.Windows.Forms.DragEventHandler(this.fileSystemTreeView1_DragOver);
|
||||
//
|
||||
// frmCUETools
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
|
||||
@@ -83,6 +83,8 @@ namespace JDP {
|
||||
}
|
||||
}
|
||||
|
||||
DialogResult overwriteResult = DialogResult.None;
|
||||
|
||||
private void btnConvert_Click(object sender, EventArgs e) {
|
||||
if ((_workThread != null) && (_workThread.IsAlive))
|
||||
return;
|
||||
@@ -98,6 +100,7 @@ namespace JDP {
|
||||
_batchReport = new StringBuilder();
|
||||
_batchRoot = null;
|
||||
_batchProcessed = 0;
|
||||
overwriteResult = DialogResult.None;
|
||||
|
||||
// TODO!!!
|
||||
//if (SelectedOutputAudioFmt != null)
|
||||
@@ -778,20 +781,8 @@ namespace JDP {
|
||||
|
||||
this.Invoke((MethodInvoker)delegate()
|
||||
{
|
||||
toolStripStatusLabelAR.Enabled = cueSheet.ArVerify.ARStatus == null;
|
||||
toolStripStatusLabelAR.Visible = useAR;
|
||||
toolStripStatusLabelAR.Text = cueSheet.ArVerify.ARStatus == null ? cueSheet.ArVerify.WorstTotal().ToString() : "";
|
||||
toolStripStatusLabelAR.ToolTipText = "AccurateRip: " + (cueSheet.ArVerify.ARStatus ?? "found") + ".";
|
||||
|
||||
if (!useCUEToolsDB)
|
||||
toolStripStatusLabelCTDB.Visible = false;
|
||||
else
|
||||
{
|
||||
toolStripStatusLabelCTDB.Visible = true;
|
||||
toolStripStatusLabelCTDB.Enabled = cueSheet.CTDB.DBStatus == null;
|
||||
toolStripStatusLabelCTDB.Text = cueSheet.CTDB.DBStatus == null ? cueSheet.CTDB.Total.ToString() : "";
|
||||
toolStripStatusLabelCTDB.ToolTipText = "CUETools DB: " + (cueSheet.CTDB.DBStatus ?? "found") + ".";
|
||||
}
|
||||
toolStripStatusLabelCTDB.Visible = useCUEToolsDB;
|
||||
|
||||
if (releases != null)
|
||||
{
|
||||
@@ -818,28 +809,37 @@ namespace JDP {
|
||||
|
||||
cueSheet.GenerateFilenames(audioEncoderType, outputFormat, pathOut);
|
||||
|
||||
bool outputExists = cueSheet.OutputExists();
|
||||
List<string> outputExists = cueSheet.OutputExists();
|
||||
|
||||
dlgRes = DialogResult.Cancel;
|
||||
if (outputExists)
|
||||
if (outputExists.Count > 0)
|
||||
{
|
||||
this.Invoke((MethodInvoker)delegate()
|
||||
{
|
||||
dlgRes = MessageBox.Show(this, "One or more output file already exists, " +
|
||||
"do you want to overwrite?", "Overwrite?", (_batchPaths.Count == 0) ?
|
||||
MessageBoxButtons.YesNo : MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
|
||||
if (overwriteResult == DialogResult.None)
|
||||
{
|
||||
using (frmOverwrite frm = new frmOverwrite())
|
||||
{
|
||||
outputExists.ForEach(path => frm.textFiles.AppendText(path + "\n"));
|
||||
dlgRes = frm.ShowDialog(this);
|
||||
if (frm.checkBoxRemember.Checked)
|
||||
overwriteResult = dlgRes;
|
||||
}
|
||||
}
|
||||
else
|
||||
dlgRes = overwriteResult;
|
||||
if (dlgRes == DialogResult.Yes)
|
||||
outputExists = false;
|
||||
outputExists.Clear();
|
||||
else if (_batchPaths.Count == 0)
|
||||
SetupControls(false);
|
||||
});
|
||||
if (outputExists && _batchPaths.Count == 0)
|
||||
if (outputExists.Count > 0 && _batchPaths.Count == 0)
|
||||
{
|
||||
cueSheet.Close();
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (!outputExists)
|
||||
if (outputExists.Count == 0)
|
||||
{
|
||||
cueSheet.UsePregapForFirstTrackInSingleFile = _usePregapForFirstTrackInSingleFile && !outputAudio;
|
||||
if (script == null)
|
||||
@@ -988,7 +988,8 @@ namespace JDP {
|
||||
|
||||
public void SetStatus(object sender, CUEToolsProgressEventArgs e)
|
||||
{
|
||||
this.BeginInvoke((MethodInvoker)delegate() {
|
||||
this.BeginInvoke((MethodInvoker)delegate()
|
||||
{
|
||||
if (e.percent == 0)
|
||||
{
|
||||
_startedAt = DateTime.Now;
|
||||
@@ -1011,6 +1012,13 @@ namespace JDP {
|
||||
}
|
||||
toolStripStatusLabel1.Text = e.status;
|
||||
toolStripProgressBar2.Value = Math.Max(0, Math.Min(100, (int)(e.percent * 100)));
|
||||
|
||||
toolStripStatusLabelAR.Enabled = e.cueSheet != null && e.cueSheet.ArVerify != null && e.cueSheet.ArVerify.ARStatus == null;
|
||||
toolStripStatusLabelAR.Text = e.cueSheet != null && e.cueSheet.ArVerify != null && e.cueSheet.ArVerify.ExceptionStatus == WebExceptionStatus.Success ? e.cueSheet.ArVerify.WorstTotal().ToString() : "";
|
||||
toolStripStatusLabelAR.ToolTipText = e.cueSheet != null && e.cueSheet.ArVerify != null ? "AccurateRip: " + (e.cueSheet.ArVerify.ARStatus ?? "found") + "." : "";
|
||||
toolStripStatusLabelCTDB.Enabled = e.cueSheet != null && e.cueSheet.CTDB != null && e.cueSheet.CTDB.DBStatus == null;
|
||||
toolStripStatusLabelCTDB.Text = e.cueSheet != null && e.cueSheet.CTDB != null && e.cueSheet.CTDB.DBStatus == null ? e.cueSheet.CTDB.Total.ToString() : "";
|
||||
toolStripStatusLabelCTDB.ToolTipText = e.cueSheet != null && e.cueSheet.CTDB != null ? "CUETools DB: " + (e.cueSheet.CTDB.DBStatus ?? "found") + "." : "";
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1664,7 +1672,8 @@ namespace JDP {
|
||||
&& ((File.Exists(pathIn) && Path.GetExtension(pathIn).ToLower() == ".cue")
|
||||
|| Directory.Exists(pathIn));
|
||||
rbActionCreateCUESheet.Enabled = pathIn.Length != 0
|
||||
&& ((File.Exists(pathIn) && CUESheet.CreateDummyCUESheet(_profile._config, pathIn) != null)
|
||||
&& ((File.Exists(pathIn) && Path.GetExtension(pathIn).ToLower() != ".cue")
|
||||
//&& ((File.Exists(pathIn) && CUESheet.CreateDummyCUESheet(_profile._config, pathIn) != null) -- too slow
|
||||
|| Directory.Exists(pathIn));
|
||||
rbActionVerify.Enabled =
|
||||
rbActionEncode.Enabled = pathIn.Length != 0
|
||||
|
||||
120
CUETools/frmOverwrite.Designer.cs
generated
Normal file
120
CUETools/frmOverwrite.Designer.cs
generated
Normal file
@@ -0,0 +1,120 @@
|
||||
namespace JDP
|
||||
{
|
||||
partial class frmOverwrite
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.buttonNo = new System.Windows.Forms.Button();
|
||||
this.buttonYes = new System.Windows.Forms.Button();
|
||||
this.checkBoxRemember = new System.Windows.Forms.CheckBox();
|
||||
this.labelAlreadyExist = new System.Windows.Forms.Label();
|
||||
this.textFiles = new System.Windows.Forms.TextBox();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// buttonNo
|
||||
//
|
||||
this.buttonNo.DialogResult = System.Windows.Forms.DialogResult.No;
|
||||
this.buttonNo.Location = new System.Drawing.Point(587, 278);
|
||||
this.buttonNo.Name = "buttonNo";
|
||||
this.buttonNo.Size = new System.Drawing.Size(75, 23);
|
||||
this.buttonNo.TabIndex = 0;
|
||||
this.buttonNo.Text = "No";
|
||||
this.buttonNo.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// buttonYes
|
||||
//
|
||||
this.buttonYes.DialogResult = System.Windows.Forms.DialogResult.Yes;
|
||||
this.buttonYes.Location = new System.Drawing.Point(506, 278);
|
||||
this.buttonYes.Name = "buttonYes";
|
||||
this.buttonYes.Size = new System.Drawing.Size(75, 23);
|
||||
this.buttonYes.TabIndex = 1;
|
||||
this.buttonYes.Text = "Yes";
|
||||
this.buttonYes.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBoxRemember
|
||||
//
|
||||
this.checkBoxRemember.AutoSize = true;
|
||||
this.checkBoxRemember.Location = new System.Drawing.Point(12, 282);
|
||||
this.checkBoxRemember.Name = "checkBoxRemember";
|
||||
this.checkBoxRemember.Size = new System.Drawing.Size(128, 17);
|
||||
this.checkBoxRemember.TabIndex = 3;
|
||||
this.checkBoxRemember.Text = "Remember my choice";
|
||||
this.checkBoxRemember.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// labelAlreadyExist
|
||||
//
|
||||
this.labelAlreadyExist.AutoSize = true;
|
||||
this.labelAlreadyExist.Location = new System.Drawing.Point(201, 283);
|
||||
this.labelAlreadyExist.Name = "labelAlreadyExist";
|
||||
this.labelAlreadyExist.Size = new System.Drawing.Size(203, 13);
|
||||
this.labelAlreadyExist.TabIndex = 2;
|
||||
this.labelAlreadyExist.Text = "Some of the files already exist. Overwrite?";
|
||||
//
|
||||
// textFiles
|
||||
//
|
||||
this.textFiles.Font = new System.Drawing.Font("Courier New", 8.25F);
|
||||
this.textFiles.Location = new System.Drawing.Point(9, 9);
|
||||
this.textFiles.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.textFiles.Multiline = true;
|
||||
this.textFiles.Name = "textFiles";
|
||||
this.textFiles.ReadOnly = true;
|
||||
this.textFiles.ScrollBars = System.Windows.Forms.ScrollBars.Both;
|
||||
this.textFiles.Size = new System.Drawing.Size(656, 254);
|
||||
this.textFiles.TabIndex = 4;
|
||||
this.textFiles.TabStop = false;
|
||||
this.textFiles.WordWrap = false;
|
||||
//
|
||||
// frmOverwrite
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(674, 313);
|
||||
this.Controls.Add(this.textFiles);
|
||||
this.Controls.Add(this.labelAlreadyExist);
|
||||
this.Controls.Add(this.checkBoxRemember);
|
||||
this.Controls.Add(this.buttonYes);
|
||||
this.Controls.Add(this.buttonNo);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
||||
this.MaximizeBox = false;
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "frmOverwrite";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||
this.Text = "Overwrite?";
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Button buttonNo;
|
||||
private System.Windows.Forms.Button buttonYes;
|
||||
private System.Windows.Forms.Label labelAlreadyExist;
|
||||
internal System.Windows.Forms.TextBox textFiles;
|
||||
internal System.Windows.Forms.CheckBox checkBoxRemember;
|
||||
}
|
||||
}
|
||||
18
CUETools/frmOverwrite.cs
Normal file
18
CUETools/frmOverwrite.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace JDP
|
||||
{
|
||||
public partial class frmOverwrite : Form
|
||||
{
|
||||
public frmOverwrite()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
||||
120
CUETools/frmOverwrite.resx
Normal file
120
CUETools/frmOverwrite.resx
Normal file
@@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
5
CUETools/frmSettings.Designer.cs
generated
5
CUETools/frmSettings.Designer.cs
generated
@@ -527,7 +527,7 @@ namespace JDP {
|
||||
// checkBoxEncoderLossless
|
||||
//
|
||||
resources.ApplyResources(this.checkBoxEncoderLossless, "checkBoxEncoderLossless");
|
||||
this.checkBoxEncoderLossless.DataBindings.Add(new System.Windows.Forms.Binding("CheckState", this.encodersBindingSource, "Lossless", true));
|
||||
this.checkBoxEncoderLossless.DataBindings.Add(new System.Windows.Forms.Binding("Checked", this.encodersBindingSource, "Lossless", true));
|
||||
this.checkBoxEncoderLossless.Name = "checkBoxEncoderLossless";
|
||||
this.toolTip1.SetToolTip(this.checkBoxEncoderLossless, resources.GetString("checkBoxEncoderLossless.ToolTip"));
|
||||
this.checkBoxEncoderLossless.UseVisualStyleBackColor = true;
|
||||
@@ -697,7 +697,7 @@ namespace JDP {
|
||||
// checkBoxCopyAlbumArt
|
||||
//
|
||||
resources.ApplyResources(this.checkBoxCopyAlbumArt, "checkBoxCopyAlbumArt");
|
||||
this.checkBoxCopyAlbumArt.DataBindings.Add(new System.Windows.Forms.Binding("CheckState", this.cUEConfigBindingSource, "CopyAlbumArt", true));
|
||||
this.checkBoxCopyAlbumArt.DataBindings.Add(new System.Windows.Forms.Binding("Checked", this.cUEConfigBindingSource, "CopyAlbumArt", true));
|
||||
this.checkBoxCopyAlbumArt.Name = "checkBoxCopyAlbumArt";
|
||||
this.checkBoxCopyAlbumArt.UseVisualStyleBackColor = true;
|
||||
//
|
||||
@@ -1127,7 +1127,6 @@ namespace JDP {
|
||||
this.listBoxEncoders.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.listBoxEncoders.DataSource = this.encodersBindingSource;
|
||||
this.listBoxEncoders.DisplayMember = "Name";
|
||||
this.listBoxEncoders.FormattingEnabled = true;
|
||||
resources.ApplyResources(this.listBoxEncoders, "listBoxEncoders");
|
||||
this.listBoxEncoders.Name = "listBoxEncoders";
|
||||
this.listBoxEncoders.KeyDown += new System.Windows.Forms.KeyEventHandler(this.listBoxEncoders_KeyDown);
|
||||
|
||||
@@ -35,6 +35,7 @@ namespace JDP {
|
||||
private void frmSettings_Load(object sender, EventArgs e)
|
||||
{
|
||||
cUEConfigBindingSource.DataSource = _config;
|
||||
encodersBindingSource.DataMember = "Encoders"; // for MONO bug (setting BindingSource.DataSource clears DataMember:(
|
||||
propertyGrid1.SelectedObject = _config.advanced;
|
||||
|
||||
chkReducePriority.Checked = _reducePriority;
|
||||
@@ -476,26 +477,36 @@ namespace JDP {
|
||||
private void encodersBindingSource_CurrentItemChanged(object sender, EventArgs e)
|
||||
{
|
||||
CUEToolsUDC encoder = encodersBindingSource.Current as CUEToolsUDC;
|
||||
if (encoder == null)
|
||||
{
|
||||
labelEncoderExtension.Visible =
|
||||
comboBoxEncoderExtension.Visible =
|
||||
comboBoxEncoderExtension.Enabled =
|
||||
groupBoxExternalEncoder.Visible =
|
||||
checkBoxEncoderLossless.Enabled =
|
||||
propertyGridEncoderSettings.Visible = false;
|
||||
propertyGridEncoderSettings.SelectedObject = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
CUEToolsFormat format = _config.formats[encoder.extension]; // _config.formats.TryGetValue(encoder.extension, out format)
|
||||
|
||||
labelEncoderExtension.Visible = encoder != null;
|
||||
comboBoxEncoderExtension.Visible = encoder != null;
|
||||
comboBoxEncoderExtension.Enabled = encoder != null && encoder.path != null;
|
||||
groupBoxExternalEncoder.Visible = encoder != null && encoder.path != null;
|
||||
checkBoxEncoderLossless.Enabled = encoder != null && format != null && format.allowLossless && format.allowLossy;
|
||||
if (!checkBoxEncoderLossless.Enabled && encoder != null && format != null && encoder.Lossless != format.allowLossless)
|
||||
labelEncoderExtension.Visible = true;
|
||||
comboBoxEncoderExtension.Visible = true;
|
||||
comboBoxEncoderExtension.Enabled = encoder.path != null;
|
||||
groupBoxExternalEncoder.Visible = encoder.path != null;
|
||||
checkBoxEncoderLossless.Enabled = format != null && format.allowLossless && format.allowLossy;
|
||||
if (!checkBoxEncoderLossless.Enabled && format != null && encoder.Lossless != format.allowLossless)
|
||||
encoder.Lossless = format.allowLossless;
|
||||
|
||||
if (encoder != null && encoder.settingsSerializer != null)
|
||||
if (encoder.settingsSerializer != null)
|
||||
{
|
||||
propertyGridEncoderSettings.Visible = encoder != null && encoder.settingsSerializer != null;
|
||||
propertyGridEncoderSettings.SelectedObject = encoder.settings;
|
||||
} else
|
||||
}
|
||||
else
|
||||
{
|
||||
propertyGridEncoderSettings.Visible = false;
|
||||
propertyGridEncoderSettings.SelectedObject = null;
|
||||
}
|
||||
|
||||
foreach (KeyValuePair<string, CUEToolsFormat> fmtEntry in _config.formats)
|
||||
{
|
||||
CUEToolsFormat fmt = fmtEntry.Value;
|
||||
@@ -505,6 +516,7 @@ namespace JDP {
|
||||
fmt.encoderLossy = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void listBoxEncoders_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user