From 64ddb2cf311d9673a604cfb4767b4fe768d8ca3c Mon Sep 17 00:00:00 2001 From: chudov Date: Fri, 11 Jun 2010 17:54:37 +0000 Subject: [PATCH] * 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 --- CUERipper/frmCUERipper.Designer.cs | 2 +- CUERipper/frmCUERipper.cs | 75 +- CUETools.ARCUE/Program.cs | 2 + CUETools.AccurateRip/AccurateRip.cs | 37 +- CUETools.CTDB/CUEToolsDB.cs | 20 +- CUETools.Codecs.LAME/Encoder.cs | 6 +- .../CUETools.Codecs.WavPack.cpp | 8 +- CUETools.Codecs/Local.cs | 58 + CUETools.Processor/Processor.cs | 170 +- CUETools.Ripper.SCSI/Resource1.Designer.cs | 4 +- CUETools.Ripper.SCSI/Resource1.resx | 4 +- CUETools.Ripper.SCSI/Resource1.ru-RU.resx | 4 +- CUETools.Ripper.SCSI/SCSIDrive.cs | 43 +- .../CUETools.TestCodecs/FileGroupInfoTest.cs | 80 + CUETools/CUETools.csproj | 9 + CUETools/frmCUETools.Designer.cs | 56 +- CUETools/frmCUETools.cs | 59 +- CUETools/frmOverwrite.Designer.cs | 120 + CUETools/frmOverwrite.cs | 18 + CUETools/frmOverwrite.resx | 120 + CUETools/frmSettings.Designer.cs | 5 +- CUETools/frmSettings.cs | 56 +- CUETools/frmSettings.resx | 2526 ++++++++++++----- 23 files changed, 2483 insertions(+), 999 deletions(-) create mode 100644 CUETools.Codecs/Local.cs create mode 100644 CUETools/CUETools.TestCodecs/FileGroupInfoTest.cs create mode 100644 CUETools/frmOverwrite.Designer.cs create mode 100644 CUETools/frmOverwrite.cs create mode 100644 CUETools/frmOverwrite.resx diff --git a/CUERipper/frmCUERipper.Designer.cs b/CUERipper/frmCUERipper.Designer.cs index b4f6e67..93f06f7 100644 --- a/CUERipper/frmCUERipper.Designer.cs +++ b/CUERipper/frmCUERipper.Designer.cs @@ -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 // diff --git a/CUERipper/frmCUERipper.cs b/CUERipper/frmCUERipper.cs index 6342c56..80148a0 100644 --- a/CUERipper/frmCUERipper.cs +++ b/CUERipper/frmCUERipper.cs @@ -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; - reader.Close(); - } - catch - { - data.Drives.Add(new DriveInfo(m_icon_mgr, drive + ":\\", ex.Message)); - continue; - } + System.Diagnostics.Trace.WriteLine(ex.Message); + } + reader.Close(); + if (reader.ARName != null) + { + int driveOffset; + if (AccurateRipVerify.FindDriveReadOffset(reader.ARName, out driveOffset)) + reader.DriveOffset = driveOffset; + else + reader.DriveOffset = 0; } - if (!AccurateRipVerify.FindDriveReadOffset(arName, out driveOffset)) - ; //throw new Exception("Failed to find drive read offset for drive" + _ripper.ARName); - reader.DriveOffset = driveOffset; 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(); + 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; } } diff --git a/CUETools.ARCUE/Program.cs b/CUETools.ARCUE/Program.cs index 3bb8a17..224298a 100644 --- a/CUETools.ARCUE/Program.cs +++ b/CUETools.ARCUE/Program.cs @@ -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 { diff --git a/CUETools.AccurateRip/AccurateRip.cs b/CUETools.AccurateRip/AccurateRip.cs index 96caf7c..a573da1 100644 --- a/CUETools.AccurateRip/AccurateRip.cs +++ b/CUETools.AccurateRip/AccurateRip.cs @@ -18,6 +18,7 @@ namespace CUETools.AccurateRip _accDisks = new List(); _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) diff --git a/CUETools.CTDB/CUEToolsDB.cs b/CUETools.CTDB/CUEToolsDB.cs index 8ac27d9..7cb0db0 100644 --- a/CUETools.CTDB/CUEToolsDB.cs +++ b/CUETools.CTDB/CUEToolsDB.cs @@ -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"); - foreach (ManagementObject mo in mc.GetInstances()) - { - uuidInfo = mo.Properties["UUID"].Value.ToString(); - break; - } + string id = "CTDB userid"; + using (ManagementClass mc = new ManagementClass("Win32_ComputerSystemProduct")) + foreach (ManagementObject mo in mc.GetInstances()) + { + 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; diff --git a/CUETools.Codecs.LAME/Encoder.cs b/CUETools.Codecs.LAME/Encoder.cs index 9b80105..1bc42f6 100644 --- a/CUETools.Codecs.LAME/Encoder.cs +++ b/CUETools.Codecs.LAME/Encoder.cs @@ -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 { diff --git a/CUETools.Codecs.WavPack/CUETools.Codecs.WavPack.cpp b/CUETools.Codecs.WavPack/CUETools.Codecs.WavPack.cpp index 26cced3..0b5f5cc 100644 --- a/CUETools.Codecs.WavPack/CUETools.Codecs.WavPack.cpp +++ b/CUETools.Codecs.WavPack/CUETools.Codecs.WavPack.cpp @@ -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); diff --git a/CUETools.Codecs/Local.cs b/CUETools.Codecs/Local.cs new file mode 100644 index 0000000..fd2bacb --- /dev/null +++ b/CUETools.Codecs/Local.cs @@ -0,0 +1,58 @@ +using System; +using System.ComponentModel; +using System.Collections.Generic; +using System.Text; + +namespace CUETools.Codecs +{ + /// + /// Localized description attribute + /// + [AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = true)] + public class SRDescriptionAttribute : DescriptionAttribute + { + /// + /// Construct the description attribute + /// + /// + public SRDescriptionAttribute(Type SR, string text) + : base(text) + { + this.localized = false; + this.SR = SR; + } + + /// + /// Override the return of the description text to localize the text + /// + 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; + } + } + + /// + /// Store a flag indicating whether this has been localized + /// + private bool localized; + + /// + /// Resource manager to use; + /// + private Type SR; + } +} diff --git a/CUETools.Processor/Processor.cs b/CUETools.Processor/Processor.cs index c280954..df8dab3 100644 --- a/CUETools.Processor/Processor.cs +++ b/CUETools.Processor/Processor.cs @@ -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(); _tracks = new List(); _trackFilenames = new List(); @@ -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 OutputExists() { - bool outputExists = false; + List outputExists = new List(); 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,18 +4267,24 @@ string status = processor.Go(); return; foreach (TagLib.IPicture picture in _albumArt) using (MemoryStream imageStream = new MemoryStream(picture.Data.Data, 0, picture.Data.Count)) - using (Image img = Image.FromStream(imageStream)) - if (img.Width > _config.maxAlbumArtSize || img.Height > _config.maxAlbumArtSize) + try + { + using (Image img = Image.FromStream(imageStream)) + if (img.Width > _config.maxAlbumArtSize || img.Height > _config.maxAlbumArtSize) + { + using (Bitmap small = resizeImage(img, new Size(_config.maxAlbumArtSize, _config.maxAlbumArtSize))) + using (MemoryStream encoded = new MemoryStream()) + { + //System.Drawing.Imaging.EncoderParameters encoderParams = new EncoderParameters(1); + //encoderParams.Param[0] = new System.Drawing.Imaging.EncoderParameter(Encoder.Quality, quality); + small.Save(encoded, System.Drawing.Imaging.ImageFormat.Jpeg); + picture.Data = new TagLib.ByteVector(encoded.ToArray()); + picture.MimeType = "image/jpeg"; + } + } + } + catch { - using (Bitmap small = resizeImage(img, new Size(_config.maxAlbumArtSize, _config.maxAlbumArtSize))) - using (MemoryStream encoded = new MemoryStream()) - { - //System.Drawing.Imaging.EncoderParameters encoderParams = new EncoderParameters(1); - //encoderParams.Param[0] = new System.Drawing.Imaging.EncoderParameter(Encoder.Quality, quality); - small.Save(encoded, System.Drawing.Imaging.ImageFormat.Jpeg); - picture.Data = new TagLib.ByteVector(encoded.ToArray()); - picture.MimeType = "image/jpeg"; - } } } @@ -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 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 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 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 fileGroups = new List(); 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.Default.Compare(a.type, b.type); + } + + public Comparison Compare() + { + if (files.Find(f => !numbers.ContainsKey(f)) == null) + return (a, b) => Comparer.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.Default.Compare(numbers[a], numbers[b]); - if (!numbers.ContainsKey(a) && !numbers.ContainsKey(b)) - return CompareTrackNames(a.FullName, b.FullName); - return Comparer.Default.Compare(numbers.ContainsKey(a), numbers.ContainsKey(b)); - } - public bool Contains(string pathIn) { if (type != FileGroupInfoType.TrackFiles) diff --git a/CUETools.Ripper.SCSI/Resource1.Designer.cs b/CUETools.Ripper.SCSI/Resource1.Designer.cs index 47dd15c..c60238b 100644 --- a/CUETools.Ripper.SCSI/Resource1.Designer.cs +++ b/CUETools.Ripper.SCSI/Resource1.Designer.cs @@ -79,7 +79,7 @@ namespace CUETools.Ripper.SCSI { } /// - /// Looks up a localized string similar to not an MMC device. + /// Looks up a localized string similar to Not an MMC device. /// internal static string DeviceNotMMC { get { @@ -97,7 +97,7 @@ namespace CUETools.Ripper.SCSI { } /// - /// Looks up a localized string similar to no audio. + /// Looks up a localized string similar to No audio tracks. /// internal static string NoAudio { get { diff --git a/CUETools.Ripper.SCSI/Resource1.resx b/CUETools.Ripper.SCSI/Resource1.resx index 84caa4e..863490a 100644 --- a/CUETools.Ripper.SCSI/Resource1.resx +++ b/CUETools.Ripper.SCSI/Resource1.resx @@ -124,13 +124,13 @@ Error querying drive - not an MMC device + Not an MMC device Open failed - no audio + No audio tracks Error reading CD diff --git a/CUETools.Ripper.SCSI/Resource1.ru-RU.resx b/CUETools.Ripper.SCSI/Resource1.ru-RU.resx index b61b0cf..30f83f5 100644 --- a/CUETools.Ripper.SCSI/Resource1.ru-RU.resx +++ b/CUETools.Ripper.SCSI/Resource1.ru-RU.resx @@ -124,13 +124,13 @@ Ошибка при опросе устройства - устройство не поддерживает стандарт MMC + Устройство не поддерживает стандарт MMC Ошибка при открытии устройства - отсутствует аудио + Отсутствуют аудио-треки Ошибка при чтении диска diff --git a/CUETools.Ripper.SCSI/SCSIDrive.cs b/CUETools.Ripper.SCSI/SCSIDrive.cs index d3ac09c..53fbb44 100644 --- a/CUETools.Ripper.SCSI/SCSIDrive.cs +++ b/CUETools.Ripper.SCSI/SCSIDrive.cs @@ -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,9 +1103,10 @@ namespace CUETools.Ripper.SCSI get { string result = m_device_letter + ": "; - result += "[" + m_inqury_result.VendorIdentification + " " + - m_inqury_result.ProductIdentification + " " + - m_inqury_result.FirmwareVersion + "]"; + if (m_inqury_result != null && m_inqury_result.Valid) + result += "[" + m_inqury_result.VendorIdentification + " " + + m_inqury_result.ProductIdentification + " " + + m_inqury_result.FirmwareVersion + "]"; return result; } } @@ -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) { } + } } diff --git a/CUETools/CUETools.TestCodecs/FileGroupInfoTest.cs b/CUETools/CUETools.TestCodecs/FileGroupInfoTest.cs new file mode 100644 index 0000000..375e6ed --- /dev/null +++ b/CUETools/CUETools.TestCodecs/FileGroupInfoTest.cs @@ -0,0 +1,80 @@ +using CUETools.Processor; +using Microsoft.VisualStudio.TestTools.UnitTesting; +namespace CUETools.TestCodecs +{ + + + /// + ///This is a test class for FileGroupInfoTest and is intended + ///to contain all FileGroupInfoTest Unit Tests + /// + [TestClass()] + public class FileGroupInfoTest + { + + + private TestContext testContextInstance; + + /// + ///Gets or sets the test context which provides + ///information about and functionality for the current test run. + /// + 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 + + + /// + ///A test for CompareTrackNames + /// + [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."); + } + } +} diff --git a/CUETools/CUETools.csproj b/CUETools/CUETools.csproj index 556ffee..cfe0517 100644 --- a/CUETools/CUETools.csproj +++ b/CUETools/CUETools.csproj @@ -96,6 +96,12 @@ frmChoice.cs + + Form + + + frmOverwrite.cs + Form @@ -158,6 +164,9 @@ Designer frmCUETools.cs + + frmOverwrite.cs + frmPassword.cs Designer diff --git a/CUETools/frmCUETools.Designer.cs b/CUETools/frmCUETools.Designer.cs index 725caef..1b5c09e 100644 --- a/CUETools/frmCUETools.Designer.cs +++ b/CUETools/frmCUETools.Designer.cs @@ -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"); diff --git a/CUETools/frmCUETools.cs b/CUETools/frmCUETools.cs index 50d95a3..5280352 100644 --- a/CUETools/frmCUETools.cs +++ b/CUETools/frmCUETools.cs @@ -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 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; @@ -1004,13 +1005,20 @@ namespace JDP { { double speed = e.offset / span.TotalSeconds / 44100; speedStr = String.Format("{0:00.00}x", speed); - } + } toolStripProgressBar2.ToolTipText = String.Format("{0}:{1:00}/{2}:{3:00}", (int)span.TotalMinutes, span.Seconds, (int)eta.TotalMinutes, eta.Seconds); toolStripStatusLabelProcessed.Text = String.Format("{0}@{1}", toolStripProgressBar2.ToolTipText, speedStr); toolStripStatusLabelProcessed.Visible = true; } toolStripStatusLabel1.Text = e.status; - toolStripProgressBar2.Value = Math.Max(0,Math.Min(100,(int)(e.percent*100))); + 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 diff --git a/CUETools/frmOverwrite.Designer.cs b/CUETools/frmOverwrite.Designer.cs new file mode 100644 index 0000000..aaca724 --- /dev/null +++ b/CUETools/frmOverwrite.Designer.cs @@ -0,0 +1,120 @@ +namespace JDP +{ + partial class frmOverwrite + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + 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; + } +} \ No newline at end of file diff --git a/CUETools/frmOverwrite.cs b/CUETools/frmOverwrite.cs new file mode 100644 index 0000000..d616269 --- /dev/null +++ b/CUETools/frmOverwrite.cs @@ -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(); + } + } +} diff --git a/CUETools/frmOverwrite.resx b/CUETools/frmOverwrite.resx new file mode 100644 index 0000000..ff31a6d --- /dev/null +++ b/CUETools/frmOverwrite.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/CUETools/frmSettings.Designer.cs b/CUETools/frmSettings.Designer.cs index 867f59b..9b7103a 100644 --- a/CUETools/frmSettings.Designer.cs +++ b/CUETools/frmSettings.Designer.cs @@ -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); diff --git a/CUETools/frmSettings.cs b/CUETools/frmSettings.cs index 02719e1..d97081d 100644 --- a/CUETools/frmSettings.cs +++ b/CUETools/frmSettings.cs @@ -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,33 +477,44 @@ namespace JDP { private void encodersBindingSource_CurrentItemChanged(object sender, EventArgs e) { CUEToolsUDC encoder = encodersBindingSource.Current as CUEToolsUDC; - 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) - encoder.Lossless = format.allowLossless; - - if (encoder != null && encoder.settingsSerializer != null) - { - propertyGridEncoderSettings.Visible = encoder != null && encoder.settingsSerializer != null; - propertyGridEncoderSettings.SelectedObject = encoder.settings; - } else + if (encoder == null) { + labelEncoderExtension.Visible = + comboBoxEncoderExtension.Visible = + comboBoxEncoderExtension.Enabled = + groupBoxExternalEncoder.Visible = + checkBoxEncoderLossless.Enabled = propertyGridEncoderSettings.Visible = false; propertyGridEncoderSettings.SelectedObject = null; } - - foreach (KeyValuePair fmtEntry in _config.formats) + else { - CUEToolsFormat fmt = fmtEntry.Value; - if (fmt.encoderLossless == encoder && (fmt.extension != encoder.extension || !encoder.Lossless)) - fmt.encoderLossless = null; - if (fmt.encoderLossy == encoder && (fmt.extension != encoder.extension || encoder.Lossless)) - fmt.encoderLossy = null; + CUEToolsFormat format = _config.formats[encoder.extension]; // _config.formats.TryGetValue(encoder.extension, out format) + 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.settingsSerializer != null) + { + propertyGridEncoderSettings.Visible = encoder != null && encoder.settingsSerializer != null; + propertyGridEncoderSettings.SelectedObject = encoder.settings; + } + else + { + propertyGridEncoderSettings.Visible = false; + propertyGridEncoderSettings.SelectedObject = null; + } + foreach (KeyValuePair fmtEntry in _config.formats) + { + CUEToolsFormat fmt = fmtEntry.Value; + if (fmt.encoderLossless == encoder && (fmt.extension != encoder.extension || !encoder.Lossless)) + fmt.encoderLossless = null; + if (fmt.encoderLossy == encoder && (fmt.extension != encoder.extension || encoder.Lossless)) + fmt.encoderLossy = null; + } } } diff --git a/CUETools/frmSettings.resx b/CUETools/frmSettings.resx index a064416..dba69c5 100644 --- a/CUETools/frmSettings.resx +++ b/CUETools/frmSettings.resx @@ -150,6 +150,129 @@ 1 + + checkBoxSeparateDecodingThread + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpGeneral + + + 0 + + + checkBoxCheckForUpdates + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpGeneral + + + 1 + + + chkAllowMultipleInstances + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpGeneral + + + 2 + + + chkReducePriority + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpGeneral + + + 3 + + + chkTruncateExtra4206Samples + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpGeneral + + + 4 + + + chkCreateCUEFileWhenEmbedded + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpGeneral + + + 5 + + + chkCreateM3U + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpGeneral + + + 6 + + + chkAutoCorrectFilenames + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpGeneral + + + 7 + + + 6, 6 + + + 252, 182 + + + 0 + + + General + + + grpGeneral + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage1 + + + 3 + + + 17, 17 + True @@ -165,9 +288,6 @@ Separate thread for decoding - - 17, 17 - Improves speed on multicore processors @@ -414,30 +534,6 @@ 7 - - 6, 6 - - - 252, 182 - - - 0 - - - General - - - grpGeneral - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage1 - - - 3 - True @@ -519,6 +615,54 @@ 2 + + chkWriteArLogOnConvert + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 0 + + + chkWriteArTagsOnConvert + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox1 + + + 1 + + + 8, 103 + + + 248, 61 + + + 1 + + + Encode and verify + + + groupBox1 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage2 + + + 4 + True @@ -582,30 +726,6 @@ 1 - - 8, 103 - - - 248, 61 - - - 1 - - - Encode and verify - - - groupBox1 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage2 - - - 4 - 3, 49 @@ -789,6 +909,9 @@ 4 + + 17, 17 + True @@ -1125,9 +1248,6 @@ 575, 17 - - 251, 17 - 96, 80 @@ -1152,6 +1272,15 @@ 4 + + 575, 17 + + + 251, 17 + + + 251, 17 + Top, Right @@ -1395,6 +1524,90 @@ 1 + + txtSpecialExceptions + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpAudioFilenames + + + 2 + + + chkRemoveSpecial + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpAudioFilenames + + + 3 + + + chkReplaceSpaces + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpAudioFilenames + + + 4 + + + lblTrackFilenameFormat + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpAudioFilenames + + + 6 + + + lblSingleFilenameFormat + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpAudioFilenames + + + 7 + + + 264, 6 + + + 252, 195 + + + 1 + + + Audio Filenames + + + grpAudioFilenames + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage1 + + + 4 + 97, 132 @@ -1539,45 +1752,9 @@ 7 - - 264, 6 - - - 252, 195 - - - 1 - - - Audio Filenames - - - grpAudioFilenames - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage1 - - - 4 - Top, Left, Right - - 6, 193 - - - 250, 98 - - - 16 - - - Gaps handling - groupBoxGaps @@ -1617,9 +1794,907 @@ 0 + + groupBoxAlbumArt + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 0 + + + groupBoxTagging + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 1 + + + 4, 22 + + + 535, 291 + + + 9 + + + Tagging + + + tabPage6 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl1 + + + 1 + + + groupBoxARLog + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage2 + + + 0 + + + groupBox5 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage2 + + + 1 + + + groupBox4 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage2 + + + 2 + + + groupBoxVerify + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage2 + + + 3 + + + 4, 22 + + + 3, 3, 3, 3 + + + 535, 291 + + + 1 + + + AccurateRip + + + tabPage2 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl1 + + + 2 + + + groupBoxFormat + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage3 + + + 0 + + + listViewFormats + + + System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage3 + + + 1 + + + 4, 22 + + + 3, 3, 3, 3 + + + 535, 291 + + + 2 + + + Formats + + + tabPage3 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl1 + + + 3 + + + True + + + 136, 39 + + + 390, 246 + + + 31 + + + propertyGridEncoderSettings + + + System.Windows.Forms.PropertyGrid, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage10 + + + 0 + + + None + + + labelEncoderName + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxExternalEncoder + + + 0 + + + labelEncoderModes + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxExternalEncoder + + + 3 + + + labelEncoderPath + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxExternalEncoder + + + 7 + + + labelEncoderParameters + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxExternalEncoder + + + 8 + + + 136, 39 + + + 390, 149 + + + 22 + + + External encoder options + + + False + + + groupBoxExternalEncoder + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage10 + + + 1 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAnBJREFUOE+lk+1L + U1Ecx+tf0RdRgkRPhIRRUJjbdHrX2tzm012m1xmLWJqyO0wzKFmo4YtQS+1Rq73JtGFSahmpPQ4tr5XO + dmuj1ua9e0z5tjtomyYSdOB74Rzu53M4v/M7GwFs+K8hCBJjr6hInqfKjR+pUmZWS3Iz2iLuA6lhpkiV + 0VasSF79/wp4QVdBfKYo9keLGcGRIYTeTSA0Pgr+fg/s+hK8ySfYlxopkSiJCQR4roziF+/2YHn2PcLW + ewh3NyHcfgG/brdhacwKZ40eEyox/0KREZNEBfM6XVIEdnA3u7HM2BC+fA6eJhO85moEL5kQaqYRbDyF + 4INbWDhOYuzIAcdT+b6kaP2ETwSmXXVGLNkmozsGWmi4zxvgr9etCHeaRNByDa+z0zEsS6djgk/UMcZn + uY5wbzs8jZX4XiBbM4uVJHhzLZymKjwm0piYgCnT+kMPLQi3mOA5q4+srz2cSgncVD687a0Yyt7ljwlm + yAJ/oLcTwQY9/GdK1xW4StTwtrViULotLpguVjPuxloEmmhwJzUQdlozqmx46mpgrzHAKkqNH8FWqKAZ + uQj+3i54tHK4S3L/ErAKMdi8XPi6r2BUugMDmVviRXxbIEt6VUQ4FsqL4LvTGS2gSy2NSlhlFlh5BJZL + wXd1YKpQJsCOPtHm+DUKxZjMkxDjykP83FE1fDc68bOBhpNU4atGCXe9EfzVDkxrctCfmcJH4JWN9Kc1 + nysOEs8O72cncvfgW7UB7uaL0XypOoEnku0CzCbCsVtI7O0R2d7kYWmacYjYzTzK2ckNirZyA1mpTL84 + xdiXsWn9x7T6pf3L/DfyWaHnHqmNrQAAAABJRU5ErkJggg== + + + + NoControl + + + 37, 262 + + + 25, 23 + + + 29 + + + buttonEncoderDelete + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage10 + + + 2 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAoVJREFUOE+lk/tL + U2EYx+tfcb8UCEmJWSioKSVYKCubTVHx1lzOrSk629lcOnfzQqZz4qWiNnQbjXQX52V4wUw2Xeki9TiU + aKMIgtrw12/nGJ6t/SBBDzyH8/Kez+c97/M+71kAZ/4raEF86uaaWGq3iOh0Csj26fqI9E1dpOV1FSm2 + VBCCiVJW4vcJsJitmhGFX20OwBteQeC7H5vf1jETtEHubgDPyAnXvLjNjpcwAt0cDQujc/s2HP7ax8IX + J4zkCJ7v6mE7MGL16yK0yxKUjxdGuSMFjORYoJ0VJ1FwyLVnxv7PHYzt9OPphhq9vk7oAzoMBrTo3eqA + 69AGws1HseFGqGggN+m4fvSDgmVDa0p8+rFFrTiIgW0tNO/k1NSfUG5IIF3hQ7bWCMeBFXfH81DwJEvG + CDocDaQzaKV+1YRurwJd61JIFgSMoN7KRct8BcSzpRj+oEP/ajuu92aQjEA2xTvyfHZi6KOOgtsYMPFF + OFMC2RIP5sAYcnTpR4ygzVZzNB2chNZPQOFrPlVAeOpgCYwiU50aEzRbK0mDTwv9tgZtb/kQLlWhxnKH + EdEr0/nQzcWQT4kezyNcUabEtiCcLJPdt7BhD5ohWaqGyFN+vOeToGGBg4MmVynseyZc60tH6uPkWBH5 + ppKk2pfFIcJdjylygikYDTY66KRhLqZ3jXhgvkfDoRT5+dgx0sWofFbELhu9GW21V8NBSQw+FYj5Wkhn + q2HwdsFOwXwzB6mK5CgF/91IJ63JGc5ns/V54cLhbPQtEzC918Pk10PjaUVOTxoNh+Nh5hTie/tWfzYr + vy+TyO2+SmZp0iIZqouRy50XyEuKZCJFfu70y5R40/5l/BsV3J5Ng8nYFAAAAABJRU5ErkJggg== + + + + 6, 262 + + + 25, 23 + + + 28 + + + buttonEncoderAdd + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage10 + + + 3 + + + 6, 7 + + + 124, 247 + + + 27 + + + listBoxEncoders + + + System.Windows.Forms.ListBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage10 + + + 4 + + + 459, 12 + + + 67, 21 + + + 26 + + + False + + + comboBoxEncoderExtension + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage10 + + + 5 + + + True + + + MiddleRight + + + NoControl + + + 351, 15 + + + 100, 16 + + + 12 + + + Extension + + + False + + + labelEncoderExtension + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage10 + + + 6 + + + 4, 22 + + + 3, 3, 3, 3 + + + 535, 291 + + + 6 + + + Encoders + + + tabPage10 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl1 + + + 4 + + + comboBoxDecoderExtension + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage11 + + + 0 + + + groupBoxExternalDecoder + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage11 + + + 1 + + + listViewDecoders + + + System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage11 + + + 2 + + + labelDecoderExtension + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage11 + + + 3 + + + 4, 22 + + + 3, 3, 3, 3 + + + 535, 291 + + + 7 + + + Decoders + + + tabPage11 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl1 + + + 5 + + + groupBox2 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage4 + + + 0 + + + grpHDCD + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage4 + + + 1 + + + chkHDCDDetect + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage4 + + + 2 + + + 4, 22 + + + 3, 3, 3, 3 + + + 535, 291 + + + 3 + + + HDCD + + + tabPage4 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl1 + + + 6 + + + richTextBoxScript + + + System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage5 + + + 0 + + + buttonScriptCompile + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage5 + + + 1 + + + groupBoxScriptConditions + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage5 + + + 2 + + + listViewScripts + + + System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage5 + + + 3 + + + 4, 22 + + + 535, 291 + + + 8 + + + Scripts + + + tabPage5 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl1 + + + 7 + + + propertyGrid1 + + + System.Windows.Forms.PropertyGrid, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage7 + + + 0 + + + 4, 22 + + + 3, 3, 3, 3 + + + 535, 291 + + + 10 + + + Advanced + + + tabPage7 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabControl1 + + + 8 + + + 0, 0 + + + 0, 0, 0, 0 + + + 543, 317 + + + 0 + + + tabControl1 + + + System.Windows.Forms.TabControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + 6, 193 + + + 250, 98 + + + 16 + + + Gaps handling + + + groupBoxGaps + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage1 + + + 2 + + + tableLayoutPanel3 + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxAlbumArt + + + 0 + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="checkBoxCopyAlbumArt" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="checkBoxExtractAlbumArt" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="checkBoxEmbedAlbumArt" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="labelAlbumArtMaximumResolution" Row="3" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="numericUpDownMaxResolution" Row="3" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="textBoxAlArtFilenameFormat" Row="2" RowSpan="1" Column="1" ColumnSpan="2" /></Controls><Columns Styles="Percent,54,41177,Percent,22,42647,Percent,22,79412" /><Rows Styles="Percent,25,Percent,25,Percent,25,Percent,25" /></TableLayoutSettings> + + + 242, 3 + + + 284, 275 + + + 1 + + + Album Art + + + groupBoxAlbumArt + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage6 + + + 0 + 3 + + checkBoxCopyAlbumArt + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel3 + + + 0 + + + checkBoxExtractAlbumArt + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel3 + + + 1 + + + checkBoxEmbedAlbumArt + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel3 + + + 2 + + + labelAlbumArtMaximumResolution + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel3 + + + 3 + + + numericUpDownMaxResolution + + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel3 + + + 4 + + + textBoxAlArtFilenameFormat + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel3 + + + 5 + + + 6, 20 + + + 4 + + + 272, 95 + + + 22 + + + tableLayoutPanel3 + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxAlbumArt + + + 0 + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="checkBoxCopyAlbumArt" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="checkBoxExtractAlbumArt" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="checkBoxEmbedAlbumArt" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="labelAlbumArtMaximumResolution" Row="3" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="numericUpDownMaxResolution" Row="3" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="textBoxAlArtFilenameFormat" Row="2" RowSpan="1" Column="1" ColumnSpan="2" /></Controls><Columns Styles="Percent,54,41177,Percent,22,42647,Percent,22,79412" /><Rows Styles="Percent,25,Percent,25,Percent,25,Percent,25" /></TableLayoutSettings> + True @@ -1815,56 +2890,98 @@ 5 - - 6, 20 + + chkExtractLog - - 4 + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 272, 95 + + groupBoxTagging - - 22 - - - tableLayoutPanel3 - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxAlbumArt - - + 0 - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="checkBoxCopyAlbumArt" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="checkBoxExtractAlbumArt" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="checkBoxEmbedAlbumArt" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="labelAlbumArtMaximumResolution" Row="3" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="numericUpDownMaxResolution" Row="3" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="textBoxAlArtFilenameFormat" Row="2" RowSpan="1" Column="1" ColumnSpan="2" /></Controls><Columns Styles="Percent,54,41177,Percent,22,42647,Percent,22,79412" /><Rows Styles="Percent,25,Percent,25,Percent,25,Percent,25" /></TableLayoutSettings> + + checkBoxCopyBasicTags - - 242, 3 + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 284, 275 + + groupBoxTagging - + 1 - - Album Art + + checkBoxWriteCUETags - - groupBoxAlbumArt + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + groupBoxTagging + + + 2 + + + checkBoxCopyUnknownTags + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxTagging + + + 3 + + + chkOverwriteTags + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxTagging + + + 4 + + + chkFillUpCUE + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxTagging + + + 5 + + + 8, 3 + + + 226, 275 + + + 0 + + + groupBoxTagging + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + tabPage6 - - 0 + + 1 True @@ -2046,50 +3163,65 @@ 5 - - 8, 3 + + textBoxARLogExtension - - 226, 275 + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + groupBoxARLog + + 0 - - groupBoxTagging + + labelLogFileExtension - + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxARLog + + + 1 + + + checkBoxARLogVerbose + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxARLog + + + 2 + + + 6, 170 + + + 250, 85 + + + 4 + + + Log file + + + groupBoxARLog + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tabPage6 + + tabPage2 - - 1 - - - 4, 22 - - - 535, 291 - - - 9 - - - Tagging - - - tabPage6 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl1 - - - 1 + + 0 %F.accurip @@ -2196,54 +3328,48 @@ 2 - - 6, 170 + + tableLayoutPanel2 - - 250, 85 + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 4 + + groupBox5 - - Log file + + 0 - - groupBoxARLog + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="label2" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="chkEncodeWhenZeroOffset" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="numEncodeWhenPercent" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="labelEncodeWhenConfidence" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="numEncodeWhenConfidence" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,79,33884,Percent,20,66116" /><Rows Styles="Percent,33,33333,Percent,33,33333,Percent,33,33333" /></TableLayoutSettings> - + + 278, 6 + + + 248, 91 + + + 3 + + + Encode if verified + + + groupBox5 + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + tabPage2 - - 0 + + 1 2 - - Fill - - - NoControl - - - 3, 0 - - - 185, 23 - - - 5 - - - % of verified tracks >= - - - MiddleRight - label2 @@ -2286,33 +3412,135 @@ <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="label2" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="chkEncodeWhenZeroOffset" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="numEncodeWhenPercent" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="labelEncodeWhenConfidence" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="numEncodeWhenConfidence" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,79,33884,Percent,20,66116" /><Rows Styles="Percent,33,33333,Percent,33,33333,Percent,33,33333" /></TableLayoutSettings> - - 278, 6 + + Fill - + + NoControl + + + 3, 0 + + + 185, 23 + + + 5 + + + % of verified tracks >= + + + MiddleRight + + + label2 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel2 + + + 0 + + + tableLayoutPanel1 + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox4 + + + 0 + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="checkBoxFixToNearest" Row="2" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="label3" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="numFixWhenConfidence" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="labelFixWhenConfidence" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="numFixWhenPercent" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,79,75207,Percent,20,24793" /><Rows Styles="Percent,33,33333,Percent,33,33333,Percent,33,33333" /></TableLayoutSettings> + + + 278, 103 + + 248, 91 - - 3 + + 2 - - Encode if verified + + Fix offset - - groupBox5 + + groupBox4 - + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + tabPage2 - - 1 + + 2 2 + + checkBoxFixToNearest + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel1 + + + 0 + + + label3 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel1 + + + 1 + + + Fill + + + 3, 17 + + + 3 + + + 242, 71 + + + 10 + + + tableLayoutPanel1 + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox4 + + + 0 + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="checkBoxFixToNearest" Row="2" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="label3" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="numFixWhenConfidence" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="labelFixWhenConfidence" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="numFixWhenPercent" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,79,75207,Percent,20,24793" /><Rows Styles="Percent,33,33333,Percent,33,33333,Percent,33,33333" /></TableLayoutSettings> + True @@ -2382,59 +3610,53 @@ 1 - - Fill + + checkBoxARVerifyUseSourceFolder - - 3, 17 + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 3 + + groupBoxVerify - - 242, 71 - - - 10 - - - tableLayoutPanel1 - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox4 - - + 0 - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="checkBoxFixToNearest" Row="2" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="label3" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="numFixWhenConfidence" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="labelFixWhenConfidence" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="numFixWhenPercent" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,79,75207,Percent,20,24793" /><Rows Styles="Percent,33,33333,Percent,33,33333,Percent,33,33333" /></TableLayoutSettings> + + chkWriteARLogOnVerify - - 278, 103 + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + groupBoxVerify + + + 1 + + + 8, 6 + + 248, 91 - - 2 + + 0 - - Fix offset + + Verify - - groupBox4 + + groupBoxVerify - + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + tabPage2 - - 2 + + 3 True @@ -2496,57 +3718,174 @@ 1 - - 8, 6 + + comboFormatLossyEncoder - - 248, 91 + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + groupBoxFormat + + 0 - - Verify + + labelFormatLossyEncoder - - groupBoxVerify + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + groupBoxFormat - - tabPage2 - - - 3 - - - 4, 22 - - - 3, 3, 3, 3 - - - 535, 291 - - + 1 - - AccurateRip + + checkBoxFormatAllowLossy - - tabPage2 + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + groupBoxFormat - - tabControl1 - - + 2 + + comboFormatLosslessEncoder + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxFormat + + + 3 + + + checkBoxFormatSupportsLossyWAV + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxFormat + + + 4 + + + labelFormatLosslessEncoder + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxFormat + + + 5 + + + checkBoxFormatEmbedCUESheet + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxFormat + + + 6 + + + comboFormatDecoder + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxFormat + + + 7 + + + checkBoxFormatAllowLossless + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxFormat + + + 8 + + + labelFormatDefaultDecoder + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxFormat + + + 9 + + + labelFormatTagger + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxFormat + + + 10 + + + comboBoxFormatTagger + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxFormat + + + 11 + + + 136, 6 + + + 390, 269 + + + 17 + + + False + + + groupBoxFormat + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage3 + + + 0 + 155, 74 @@ -2871,33 +4210,6 @@ 11 - - 136, 6 - - - 390, 269 - - - 17 - - - False - - - groupBoxFormat - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage3 - - - 0 - - - 120 - 6, 6 @@ -2919,59 +4231,8 @@ 1 - - 4, 22 - - - 3, 3, 3, 3 - - - 535, 291 - - - 2 - - - Formats - - - tabPage3 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl1 - - - 3 - - - True - - - 136, 39 - - - 390, 246 - - - 31 - - - propertyGridEncoderSettings - - - System.Windows.Forms.PropertyGrid, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage10 - - - 0 - - - None + + 120 True @@ -3090,220 +4351,6 @@ 8 - - 136, 39 - - - 390, 149 - - - 22 - - - External encoder options - - - False - - - groupBoxExternalEncoder - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage10 - - - 1 - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAnBJREFUOE+lk+1L - U1Ecx+tf0RdRgkRPhIRRUJjbdHrX2tzm012m1xmLWJqyO0wzKFmo4YtQS+1Rq73JtGFSahmpPQ4tr5XO - dmuj1ua9e0z5tjtomyYSdOB74Rzu53M4v/M7GwFs+K8hCBJjr6hInqfKjR+pUmZWS3Iz2iLuA6lhpkiV - 0VasSF79/wp4QVdBfKYo9keLGcGRIYTeTSA0Pgr+fg/s+hK8ySfYlxopkSiJCQR4roziF+/2YHn2PcLW - ewh3NyHcfgG/brdhacwKZ40eEyox/0KREZNEBfM6XVIEdnA3u7HM2BC+fA6eJhO85moEL5kQaqYRbDyF - 4INbWDhOYuzIAcdT+b6kaP2ETwSmXXVGLNkmozsGWmi4zxvgr9etCHeaRNByDa+z0zEsS6djgk/UMcZn - uY5wbzs8jZX4XiBbM4uVJHhzLZymKjwm0piYgCnT+kMPLQi3mOA5q4+srz2cSgncVD687a0Yyt7ljwlm - yAJ/oLcTwQY9/GdK1xW4StTwtrViULotLpguVjPuxloEmmhwJzUQdlozqmx46mpgrzHAKkqNH8FWqKAZ - uQj+3i54tHK4S3L/ErAKMdi8XPi6r2BUugMDmVviRXxbIEt6VUQ4FsqL4LvTGS2gSy2NSlhlFlh5BJZL - wXd1YKpQJsCOPtHm+DUKxZjMkxDjykP83FE1fDc68bOBhpNU4atGCXe9EfzVDkxrctCfmcJH4JWN9Kc1 - nysOEs8O72cncvfgW7UB7uaL0XypOoEnku0CzCbCsVtI7O0R2d7kYWmacYjYzTzK2ckNirZyA1mpTL84 - xdiXsWn9x7T6pf3L/DfyWaHnHqmNrQAAAABJRU5ErkJggg== - - - - NoControl - - - 37, 262 - - - 25, 23 - - - 29 - - - buttonEncoderDelete - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage10 - - - 2 - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAoVJREFUOE+lk/tL - U2EYx+tfcb8UCEmJWSioKSVYKCubTVHx1lzOrSk629lcOnfzQqZz4qWiNnQbjXQX52V4wUw2Xeki9TiU - aKMIgtrw12/nGJ6t/SBBDzyH8/Kez+c97/M+71kAZ/4raEF86uaaWGq3iOh0Csj26fqI9E1dpOV1FSm2 - VBCCiVJW4vcJsJitmhGFX20OwBteQeC7H5vf1jETtEHubgDPyAnXvLjNjpcwAt0cDQujc/s2HP7ax8IX - J4zkCJ7v6mE7MGL16yK0yxKUjxdGuSMFjORYoJ0VJ1FwyLVnxv7PHYzt9OPphhq9vk7oAzoMBrTo3eqA - 69AGws1HseFGqGggN+m4fvSDgmVDa0p8+rFFrTiIgW0tNO/k1NSfUG5IIF3hQ7bWCMeBFXfH81DwJEvG - CDocDaQzaKV+1YRurwJd61JIFgSMoN7KRct8BcSzpRj+oEP/ajuu92aQjEA2xTvyfHZi6KOOgtsYMPFF - OFMC2RIP5sAYcnTpR4ygzVZzNB2chNZPQOFrPlVAeOpgCYwiU50aEzRbK0mDTwv9tgZtb/kQLlWhxnKH - EdEr0/nQzcWQT4kezyNcUabEtiCcLJPdt7BhD5ohWaqGyFN+vOeToGGBg4MmVynseyZc60tH6uPkWBH5 - ppKk2pfFIcJdjylygikYDTY66KRhLqZ3jXhgvkfDoRT5+dgx0sWofFbELhu9GW21V8NBSQw+FYj5Wkhn - q2HwdsFOwXwzB6mK5CgF/91IJ63JGc5ns/V54cLhbPQtEzC918Pk10PjaUVOTxoNh+Nh5hTie/tWfzYr - vy+TyO2+SmZp0iIZqouRy50XyEuKZCJFfu70y5R40/5l/BsV3J5Ng8nYFAAAAABJRU5ErkJggg== - - - - 6, 262 - - - 25, 23 - - - 28 - - - buttonEncoderAdd - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage10 - - - 3 - - - 6, 7 - - - 124, 247 - - - 27 - - - listBoxEncoders - - - System.Windows.Forms.ListBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage10 - - - 4 - - - 459, 12 - - - 67, 21 - - - 26 - - - False - - - comboBoxEncoderExtension - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage10 - - - 5 - - - True - - - MiddleRight - - - NoControl - - - 351, 15 - - - 100, 16 - - - 12 - - - Extension - - - False - - - labelEncoderExtension - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage10 - - - 6 - - - 4, 22 - - - 3, 3, 3, 3 - - - 535, 291 - - - 6 - - - Encoders - - - tabPage10 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl1 - - - 4 - 459, 12 @@ -3328,6 +4375,81 @@ 0 + + textBoxDecoderPath + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxExternalDecoder + + + 0 + + + labelDecoderPath + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxExternalDecoder + + + 1 + + + labelDecoderParameters + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxExternalDecoder + + + 2 + + + textBoxDecoderParameters + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxExternalDecoder + + + 3 + + + 136, 39 + + + 390, 87 + + + 27 + + + External decoder options + + + False + + + groupBoxExternalDecoder + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPage11 + + + 1 + 96, 20 @@ -3430,36 +4552,6 @@ 3 - - 136, 39 - - - 390, 87 - - - 27 - - - External decoder options - - - False - - - groupBoxExternalDecoder - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage11 - - - 1 - - - 120 - 3, 6 @@ -3481,6 +4573,9 @@ 2 + + 120 + True @@ -3517,32 +4612,53 @@ 3 - - 4, 22 + + label1 - - 3, 3, 3, 3 + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 535, 291 + + groupBox2 - + + 0 + + + numericLossyWAVQuality + + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBox2 + + + 1 + + + 228, 42 + + + 298, 100 + + 7 - - Decoders + + LossyWAV - - tabPage11 + + groupBox2 - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tabControl1 + + tabPage4 - - 5 + + 0 True @@ -3598,30 +4714,6 @@ 1 - - 228, 42 - - - 298, 100 - - - 7 - - - LossyWAV - - - groupBox2 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage4 - - - 0 - 19, 42 @@ -3676,33 +4768,6 @@ 2 - - 4, 22 - - - 3, 3, 3, 3 - - - 535, 291 - - - 3 - - - HDCD - - - tabPage4 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl1 - - - 6 - Courier New, 8pt @@ -3766,18 +4831,6 @@ 1 - - 200 - - - 6, 20 - - - 249, 77 - - - 2 - listViewScriptConditions @@ -3817,8 +4870,29 @@ 2 - - 120 + + 6, 20 + + + 249, 77 + + + 2 + + + listViewScriptConditions + + + System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxScriptConditions + + + 0 + + + 200 6, 6 @@ -3841,29 +4915,8 @@ 3 - - 4, 22 - - - 535, 291 - - - 8 - - - Scripts - - - tabPage5 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl1 - - - 7 + + 120 8, 6 @@ -3886,57 +4939,6 @@ 0 - - 4, 22 - - - 3, 3, 3, 3 - - - 535, 291 - - - 10 - - - Advanced - - - tabPage7 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl1 - - - 8 - - - 0, 0 - - - 0, 0, 0, 0 - - - 543, 317 - - - 0 - - - tabControl1 - - - System.Windows.Forms.TabControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - True