diff --git a/CUETools.Codecs/CUEToolsCodecsConfig.cs b/CUETools.Codecs/CUEToolsCodecsConfig.cs index 1581f26..0f78431 100644 --- a/CUETools.Codecs/CUEToolsCodecsConfig.cs +++ b/CUETools.Codecs/CUEToolsCodecsConfig.cs @@ -15,6 +15,19 @@ namespace CUETools.Codecs public CUEToolsUDCList encoders; public CUEToolsUDCList decoders; + public CUEToolsCodecsConfig(CUEToolsCodecsConfig src) + { + encoders = new CUEToolsUDCList(true); + foreach (var enc in src.encoders) + encoders.Add(enc.Clone()); + decoders = new CUEToolsUDCList(false); + foreach (var dec in src.decoders) + decoders.Add(dec.Clone()); + formats = new Dictionary(); + foreach (var fmt in src.formats) + formats.Add(fmt.Key, fmt.Value.Clone(this)); + } + public CUEToolsCodecsConfig(List encs, List decs) { encoders = new CUEToolsUDCList(true); diff --git a/CUETools.Codecs/CUEToolsFormat.cs b/CUETools.Codecs/CUEToolsFormat.cs index 7da120d..4944969 100644 --- a/CUETools.Codecs/CUEToolsFormat.cs +++ b/CUETools.Codecs/CUEToolsFormat.cs @@ -30,10 +30,21 @@ return "." + extension; } } + + public CUEToolsFormat Clone(CUEToolsCodecsConfig cfg) + { + var res = this.MemberwiseClone() as CUEToolsFormat; + if (decoder != null) cfg.decoders.TryGetValue(decoder.extension, decoder.lossless, decoder.name, out res.decoder); + if (encoderLossy != null) cfg.encoders.TryGetValue(encoderLossy.extension, encoderLossy.lossless, encoderLossy.name, out res.encoderLossy); + if (encoderLossless != null) cfg.encoders.TryGetValue(encoderLossless.extension, encoderLossless.lossless, encoderLossless.name, out res.encoderLossless); + return res; + } + public override string ToString() { return extension; } + public string extension; public CUEToolsUDC encoderLossless; public CUEToolsUDC encoderLossy; diff --git a/CUETools.Codecs/CUEToolsUDC.cs b/CUETools.Codecs/CUEToolsUDC.cs index b43e6eb..347afad 100644 --- a/CUETools.Codecs/CUEToolsUDC.cs +++ b/CUETools.Codecs/CUEToolsUDC.cs @@ -81,6 +81,13 @@ namespace CUETools.Codecs type = dectype; } + public CUEToolsUDC Clone() + { + var res = this.MemberwiseClone() as CUEToolsUDC; + if (settings != null) res.settings = settings.Clone(); + return res; + } + public override string ToString() { return name; diff --git a/CUETools.Processor/CUEConfig.cs b/CUETools.Processor/CUEConfig.cs index 5610624..5ea1a46 100644 --- a/CUETools.Processor/CUEConfig.cs +++ b/CUETools.Processor/CUEConfig.cs @@ -162,6 +162,87 @@ namespace CUETools.Processor defaultEncodeScript = "default"; } + public CUEConfig(CUEConfig src) + : base(src) + { + fixOffsetMinimumConfidence = src.fixOffsetMinimumConfidence; + fixOffsetMinimumTracksPercent = src.fixOffsetMinimumTracksPercent; + encodeWhenConfidence = src.encodeWhenConfidence; + encodeWhenPercent = src.encodeWhenPercent; + encodeWhenZeroOffset = src.encodeWhenZeroOffset; + fixOffset = src.fixOffset; + noUnverifiedOutput = src.noUnverifiedOutput; + writeArTagsOnEncode = src.writeArTagsOnEncode; + writeArLogOnConvert = src.writeArLogOnConvert; + writeArTagsOnVerify = src.writeArTagsOnVerify; + writeArLogOnVerify = src.writeArLogOnVerify; + + autoCorrectFilenames = src.autoCorrectFilenames; + preserveHTOA = src.preserveHTOA; + detectGaps = src.detectGaps; + keepOriginalFilenames = src.keepOriginalFilenames; + trackFilenameFormat = src.trackFilenameFormat; + singleFilenameFormat = src.singleFilenameFormat; + removeSpecial = src.removeSpecial; + specialExceptions = src.specialExceptions; + replaceSpaces = src.replaceSpaces; + embedLog = src.embedLog; + extractLog = src.extractLog; + fillUpCUE = src.fillUpCUE; + overwriteCUEData = src.overwriteCUEData; + filenamesANSISafe = src.filenamesANSISafe; + bruteForceDTL = src.bruteForceDTL; + createEACLOG = src.createEACLOG; + detectHDCD = src.detectHDCD; + wait750FramesForHDCD = src.wait750FramesForHDCD; + decodeHDCD = src.decodeHDCD; + createM3U = src.createM3U; + createCUEFileWhenEmbedded = src.createCUEFileWhenEmbedded; + truncate4608ExtraSamples = src.truncate4608ExtraSamples; + decodeHDCDtoLW16 = src.decodeHDCDtoLW16; + decodeHDCDto24bit = src.decodeHDCDto24bit; + + oneInstance = src.oneInstance; + checkForUpdates = src.checkForUpdates; + + writeBasicTagsFromCUEData = src.writeBasicTagsFromCUEData; + copyBasicTags = src.copyBasicTags; + copyUnknownTags = src.copyUnknownTags; + CopyAlbumArt = src.CopyAlbumArt; + embedAlbumArt = src.embedAlbumArt; + extractAlbumArt = src.extractAlbumArt; + maxAlbumArtSize = src.maxAlbumArtSize; + + arLogToSourceFolder = src.arLogToSourceFolder; + arLogVerbose = src.arLogVerbose; + fixOffsetToNearest = src.fixOffsetToNearest; + ArLogFilenameFormat = src.ArLogFilenameFormat; + AlArtFilenameFormat = src.AlArtFilenameFormat; + + separateDecodingThread = src.separateDecodingThread; + + gapsHandling = src.gapsHandling; + + advanced = new CUEConfigAdvanced(src.advanced); + + language = src.language; + + scripts = new Dictionary(); + scripts.Add("default", new CUEToolsScript("default", + new CUEAction[] { CUEAction.Verify, CUEAction.Encode })); + scripts.Add("only if found", new CUEToolsScript("only if found", + new CUEAction[] { CUEAction.Verify })); + scripts.Add("fix offset", new CUEToolsScript("fix offset", + new CUEAction[] { CUEAction.Encode })); + scripts.Add("encode if verified", new CUEToolsScript("encode if verified", + new CUEAction[] { CUEAction.Encode })); + scripts.Add("repair", new CUEToolsScript("repair", + new CUEAction[] { CUEAction.Encode })); + + defaultVerifyScript = src.defaultVerifyScript; + defaultEncodeScript = src.defaultEncodeScript; + } + public void Save(SettingsWriter sw) { sw.Save("Version", 204); diff --git a/CUETools.Processor/CUEConfigAdvanced.cs b/CUETools.Processor/CUEConfigAdvanced.cs index a60bac7..3028f03 100644 --- a/CUETools.Processor/CUEConfigAdvanced.cs +++ b/CUETools.Processor/CUEConfigAdvanced.cs @@ -30,6 +30,15 @@ namespace CUETools.Processor } } + public CUEConfigAdvanced(CUEConfigAdvanced src) + { + // Iterate through each property and call SetValue() + foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(this)) + { + property.SetValue(this, property.GetValue(src)); + } + } + internal static XmlSerializer serializer = new XmlSerializer(typeof(CUEConfigAdvanced)); [DefaultValue("i"), Category("Freedb"), DisplayName("Email user")] public string FreedbUser { get; set; } diff --git a/CUETools.Processor/CUEToolsProfile.cs b/CUETools.Processor/CUEToolsProfile.cs index 5e91c2d..8876952 100644 --- a/CUETools.Processor/CUEToolsProfile.cs +++ b/CUETools.Processor/CUEToolsProfile.cs @@ -24,6 +24,14 @@ namespace CUETools.Processor } } + public CUEToolsProfile Clone(string name) + { + var res = this.MemberwiseClone() as CUEToolsProfile; + res._config = new CUEConfig(_config); + res._name = string.Copy(name); + return res; + } + public void Load(SettingsReader sr) { _config.Load(sr); diff --git a/CUETools/frmCUETools.cs b/CUETools/frmCUETools.cs index 8cb66ef..1cd235b 100644 --- a/CUETools/frmCUETools.cs +++ b/CUETools/frmCUETools.cs @@ -1360,10 +1360,6 @@ namespace JDP _profile = new CUEToolsProfile(profileName); SettingsReader sr = new SettingsReader("CUE Tools", string.Format("profile-{0}.txt", _profile._name), Application.ExecutablePath); _profile.Load(sr); - _profile._config.encoders = _defaultProfile._config.encoders; - _profile._config.decoders = _defaultProfile._config.decoders; - _profile._config.formats = _defaultProfile._config.formats; - _profile._config.scripts = _defaultProfile._config.scripts; ActivateProfile(); } @@ -1373,10 +1369,6 @@ namespace JDP if (_profile != _defaultProfile) { - _defaultProfile._config.encoders = _profile._config.encoders; - _defaultProfile._config.decoders = _profile._config.decoders; - _defaultProfile._config.formats = _profile._config.formats; - _defaultProfile._config.scripts = _profile._config.scripts; _profile = _defaultProfile; ActivateProfile(); } @@ -2551,8 +2543,9 @@ namespace JDP e.SuppressKeyPress = true; string profileName = item.Text; - DeactivateProfile(); - _profile = new CUEToolsProfile(profileName); + SaveProfile(); + //DeactivateProfile(); + _profile = _profile.Clone(profileName); ActivateProfile(); }