diff --git a/AaxDecrypter/AaxcDownloadConverter.cs b/AaxDecrypter/AaxcDownloadConverter.cs index ec6afed5..9d762b26 100644 --- a/AaxDecrypter/AaxcDownloadConverter.cs +++ b/AaxDecrypter/AaxcDownloadConverter.cs @@ -8,6 +8,11 @@ using System.IO; namespace AaxDecrypter { + public enum OutputFormat + { + Mp4a, + Mp3 + } public class AaxcDownloadConverter { public event EventHandler RetrievedTags; @@ -21,6 +26,7 @@ namespace AaxDecrypter private DownloadLicense downloadLicense { get; } private AaxFile aaxFile; private byte[] coverArt; + private OutputFormat OutputFormat; private StepSequence steps { get; } private NetworkFileStreamPersister nfsPersister; @@ -28,10 +34,10 @@ namespace AaxDecrypter private string jsonDownloadState => Path.Combine(cacheDir, Path.GetFileNameWithoutExtension(OutputFileName) + ".json"); private string tempFile => PathLib.ReplaceExtension(jsonDownloadState, ".aaxc"); - public AaxcDownloadConverter(string outFileName, string cacheDirectory, DownloadLicense dlLic) + public AaxcDownloadConverter(string outFileName, string cacheDirectory, DownloadLicense dlLic, OutputFormat outputFormat) { ArgumentValidator.EnsureNotNullOrWhiteSpace(outFileName, nameof(outFileName)); - OutputFileName = PathLib.ReplaceExtension(outFileName, ".m4b"); + OutputFileName = outFileName; var outDir = Path.GetDirectoryName(OutputFileName); if (!Directory.Exists(outDir)) throw new ArgumentNullException(nameof(outDir), "Directory does not exist"); @@ -43,10 +49,11 @@ namespace AaxDecrypter cacheDir = cacheDirectory; downloadLicense = ArgumentValidator.EnsureNotNull(dlLic, nameof(dlLic)); + OutputFormat = outputFormat; steps = new StepSequence { - Name = "Download and Convert Aaxc To M4b", + Name = "Download and Convert Aaxc To " + (outputFormat == OutputFormat.Mp4a ? "M4b" : "Mp3"), ["Step 1: Get Aaxc Metadata"] = Step1_GetMetadata, ["Step 2: Download Decrypted Audiobook"] = Step2_DownloadAndCombine, @@ -125,7 +132,6 @@ namespace AaxDecrypter public bool Step2_DownloadAndCombine() { - OutputFormat format = OutputFormat.Mp4a; DecryptProgressUpdate?.Invoke(this, 0); @@ -134,15 +140,20 @@ namespace AaxDecrypter FileStream outFile = File.OpenWrite(OutputFileName); + aaxFile.SetDecryptionKey(downloadLicense.AudibleKey, downloadLicense.AudibleIV); + aaxFile.ConversionProgressUpdate += AaxFile_ConversionProgressUpdate; - var decryptionResult = aaxFile.DecryptAaxc(outFile, downloadLicense.AudibleKey, downloadLicense.AudibleIV, format, downloadLicense.ChapterInfo); + + var decryptionResult = OutputFormat == OutputFormat.Mp4a ? aaxFile.ConvertToMp4a(outFile, downloadLicense.ChapterInfo) : aaxFile.ConvertToMp3(outFile); aaxFile.ConversionProgressUpdate -= AaxFile_ConversionProgressUpdate; + aaxFile.Close(); + downloadLicense.ChapterInfo = aaxFile.Chapters; if (decryptionResult == ConversionResult.NoErrorsDetected && coverArt is not null - && format == OutputFormat.Mp4a) + && OutputFormat == OutputFormat.Mp4a) { //This handles a special case where the aaxc file doesn't contain cover art and //Libation downloaded it instead (Animal Farm). Currently only works for Mp4a files. diff --git a/FileLiberator/DownloadDecryptBook.cs b/FileLiberator/DownloadDecryptBook.cs index 3be15742..011b4afc 100644 --- a/FileLiberator/DownloadDecryptBook.cs +++ b/FileLiberator/DownloadDecryptBook.cs @@ -87,8 +87,20 @@ namespace FileLiberator aaxcDecryptDlLic.ChapterInfo.AddChapter(chap.Title, TimeSpan.FromMilliseconds(chap.LengthMs)); } - var proposedOutputFile = Path.Combine(destinationDir, $"{PathLib.ToPathSafeString(libraryBook.Book.Title)} [{libraryBook.Book.AudibleProductId}].m4b"); - aaxcDownloader = new AaxcDownloadConverter(proposedOutputFile, cacheDir, aaxcDecryptDlLic) { AppName = "Libation" }; + + var format = Configuration.Instance.DecryptToLossy ? OutputFormat.Mp3 : OutputFormat.Mp4a; + + var extension = format switch + { + OutputFormat.Mp4a => "m4b", + OutputFormat.Mp3 => "mp3", + _ => throw new NotImplementedException(), + }; + + var proposedOutputFile = Path.Combine(destinationDir, $"{PathLib.ToPathSafeString(libraryBook.Book.Title)} [{libraryBook.Book.AudibleProductId}].{extension}"); + + + aaxcDownloader = new AaxcDownloadConverter(proposedOutputFile, cacheDir, aaxcDecryptDlLic, format) { AppName = "Libation" }; aaxcDownloader.DecryptProgressUpdate += (s, progress) => UpdateProgress?.Invoke(this, progress); aaxcDownloader.DecryptTimeRemaining += (s, remaining) => UpdateRemainingTime?.Invoke(this, remaining); aaxcDownloader.RetrievedCoverArt += AaxcDownloader_RetrievedCoverArt; diff --git a/FileManager/Configuration.cs b/FileManager/Configuration.cs index 3e90184d..24a48acf 100644 --- a/FileManager/Configuration.cs +++ b/FileManager/Configuration.cs @@ -121,6 +121,13 @@ namespace FileManager get => persistentDictionary.Get(nameof(AllowLibationFixup)); set => persistentDictionary.Set(nameof(AllowLibationFixup), value); } + + [Description("Decrypt to lossy format?")] + public bool DecryptToLossy + { + get => persistentDictionary.Get(nameof(DecryptToLossy)); + set => persistentDictionary.Set(nameof(DecryptToLossy), value); + } // note: any potential file manager static ctors can't compensate if storage dir is changed at run time via settings. this is partly bad architecture. but the side effect is desirable. if changing LibationFiles location: restart app // singleton stuff diff --git a/LibationLauncher/LibationLauncher.csproj b/LibationLauncher/LibationLauncher.csproj index 19f62114..d935789b 100644 --- a/LibationLauncher/LibationLauncher.csproj +++ b/LibationLauncher/LibationLauncher.csproj @@ -13,7 +13,7 @@ win-x64 - 5.1.10.10 + 5.1.10.24 diff --git a/LibationWinForms/Dialogs/SettingsDialog.Designer.cs b/LibationWinForms/Dialogs/SettingsDialog.Designer.cs index 8a7dbe2c..6b5f85cb 100644 --- a/LibationWinForms/Dialogs/SettingsDialog.Designer.cs +++ b/LibationWinForms/Dialogs/SettingsDialog.Designer.cs @@ -28,138 +28,167 @@ /// private void InitializeComponent() { - this.booksLocationLbl = new System.Windows.Forms.Label(); - this.booksLocationDescLbl = new System.Windows.Forms.Label(); - this.inProgressDescLbl = new System.Windows.Forms.Label(); - this.saveBtn = new System.Windows.Forms.Button(); - this.cancelBtn = new System.Windows.Forms.Button(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.inProgressSelectControl = new LibationWinForms.Dialogs.DirectorySelectControl(); - this.allowLibationFixupCbox = new System.Windows.Forms.CheckBox(); - this.booksSelectControl = new LibationWinForms.Dialogs.DirectoryOrCustomSelectControl(); - this.groupBox1.SuspendLayout(); - this.SuspendLayout(); - // - // booksLocationLbl - // - this.booksLocationLbl.AutoSize = true; - this.booksLocationLbl.Location = new System.Drawing.Point(13, 15); - this.booksLocationLbl.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.booksLocationLbl.Name = "booksLocationLbl"; - this.booksLocationLbl.Size = new System.Drawing.Size(85, 15); - this.booksLocationLbl.TabIndex = 0; - this.booksLocationLbl.Text = "Books location"; - // - // booksLocationDescLbl - // - this.booksLocationDescLbl.AutoSize = true; - this.booksLocationDescLbl.Location = new System.Drawing.Point(106, 96); - this.booksLocationDescLbl.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.booksLocationDescLbl.Name = "booksLocationDescLbl"; - this.booksLocationDescLbl.Size = new System.Drawing.Size(39, 15); - this.booksLocationDescLbl.TabIndex = 2; - this.booksLocationDescLbl.Text = "[desc]"; - // - // inProgressDescLbl - // - this.inProgressDescLbl.AutoSize = true; - this.inProgressDescLbl.Location = new System.Drawing.Point(10, 46); - this.inProgressDescLbl.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.inProgressDescLbl.Name = "inProgressDescLbl"; - this.inProgressDescLbl.Size = new System.Drawing.Size(43, 45); - this.inProgressDescLbl.TabIndex = 1; - this.inProgressDescLbl.Text = "[desc]\r\n[line 2]\r\n[line 3]"; - // - // saveBtn - // - this.saveBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.saveBtn.Location = new System.Drawing.Point(714, 275); - this.saveBtn.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.saveBtn.Name = "saveBtn"; - this.saveBtn.Size = new System.Drawing.Size(88, 27); - this.saveBtn.TabIndex = 4; - this.saveBtn.Text = "Save"; - this.saveBtn.UseVisualStyleBackColor = true; - this.saveBtn.Click += new System.EventHandler(this.saveBtn_Click); - // - // cancelBtn - // - this.cancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.cancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.cancelBtn.Location = new System.Drawing.Point(832, 275); - this.cancelBtn.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.cancelBtn.Name = "cancelBtn"; - this.cancelBtn.Size = new System.Drawing.Size(88, 27); - this.cancelBtn.TabIndex = 5; - this.cancelBtn.Text = "Cancel"; - this.cancelBtn.UseVisualStyleBackColor = true; - this.cancelBtn.Click += new System.EventHandler(this.cancelBtn_Click); - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.inProgressSelectControl); - this.groupBox1.Controls.Add(this.allowLibationFixupCbox); - this.groupBox1.Controls.Add(this.inProgressDescLbl); - this.groupBox1.Location = new System.Drawing.Point(19, 114); - this.groupBox1.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.groupBox1.Size = new System.Drawing.Size(902, 145); - this.groupBox1.TabIndex = 3; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "Advanced settings for control freaks"; - // - // inProgressSelectControl - // - this.inProgressSelectControl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.booksLocationLbl = new System.Windows.Forms.Label(); + this.booksLocationDescLbl = new System.Windows.Forms.Label(); + this.inProgressDescLbl = new System.Windows.Forms.Label(); + this.saveBtn = new System.Windows.Forms.Button(); + this.cancelBtn = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.inProgressSelectControl = new LibationWinForms.Dialogs.DirectorySelectControl(); + this.allowLibationFixupCbox = new System.Windows.Forms.CheckBox(); + this.booksSelectControl = new LibationWinForms.Dialogs.DirectoryOrCustomSelectControl(); + this.convertLosslessRb = new System.Windows.Forms.RadioButton(); + this.convertLossyRb = new System.Windows.Forms.RadioButton(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // booksLocationLbl + // + this.booksLocationLbl.AutoSize = true; + this.booksLocationLbl.Location = new System.Drawing.Point(13, 15); + this.booksLocationLbl.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.booksLocationLbl.Name = "booksLocationLbl"; + this.booksLocationLbl.Size = new System.Drawing.Size(85, 15); + this.booksLocationLbl.TabIndex = 0; + this.booksLocationLbl.Text = "Books location"; + // + // booksLocationDescLbl + // + this.booksLocationDescLbl.AutoSize = true; + this.booksLocationDescLbl.Location = new System.Drawing.Point(106, 96); + this.booksLocationDescLbl.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.booksLocationDescLbl.Name = "booksLocationDescLbl"; + this.booksLocationDescLbl.Size = new System.Drawing.Size(39, 15); + this.booksLocationDescLbl.TabIndex = 2; + this.booksLocationDescLbl.Text = "[desc]"; + // + // inProgressDescLbl + // + this.inProgressDescLbl.AutoSize = true; + this.inProgressDescLbl.Location = new System.Drawing.Point(10, 46); + this.inProgressDescLbl.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.inProgressDescLbl.Name = "inProgressDescLbl"; + this.inProgressDescLbl.Size = new System.Drawing.Size(43, 45); + this.inProgressDescLbl.TabIndex = 1; + this.inProgressDescLbl.Text = "[desc]\r\n[line 2]\r\n[line 3]"; + // + // saveBtn + // + this.saveBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.saveBtn.Location = new System.Drawing.Point(714, 268); + this.saveBtn.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + this.saveBtn.Name = "saveBtn"; + this.saveBtn.Size = new System.Drawing.Size(88, 27); + this.saveBtn.TabIndex = 4; + this.saveBtn.Text = "Save"; + this.saveBtn.UseVisualStyleBackColor = true; + this.saveBtn.Click += new System.EventHandler(this.saveBtn_Click); + // + // cancelBtn + // + this.cancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.cancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelBtn.Location = new System.Drawing.Point(832, 268); + this.cancelBtn.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + this.cancelBtn.Name = "cancelBtn"; + this.cancelBtn.Size = new System.Drawing.Size(88, 27); + this.cancelBtn.TabIndex = 5; + this.cancelBtn.Text = "Cancel"; + this.cancelBtn.UseVisualStyleBackColor = true; + this.cancelBtn.Click += new System.EventHandler(this.cancelBtn_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.convertLossyRb); + this.groupBox1.Controls.Add(this.convertLosslessRb); + this.groupBox1.Controls.Add(this.inProgressSelectControl); + this.groupBox1.Controls.Add(this.allowLibationFixupCbox); + this.groupBox1.Controls.Add(this.inProgressDescLbl); + this.groupBox1.Location = new System.Drawing.Point(19, 114); + this.groupBox1.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3); + this.groupBox1.Size = new System.Drawing.Size(902, 143); + this.groupBox1.TabIndex = 3; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Advanced settings for control freaks"; + // + // inProgressSelectControl + // + this.inProgressSelectControl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.inProgressSelectControl.Location = new System.Drawing.Point(10, 94); - this.inProgressSelectControl.Name = "inProgressSelectControl"; - this.inProgressSelectControl.Size = new System.Drawing.Size(885, 46); - this.inProgressSelectControl.TabIndex = 2; - // - // allowLibationFixupCbox - // - this.allowLibationFixupCbox.AutoSize = true; - this.allowLibationFixupCbox.Location = new System.Drawing.Point(10, 24); - this.allowLibationFixupCbox.Name = "allowLibationFixupCbox"; - this.allowLibationFixupCbox.Size = new System.Drawing.Size(262, 19); - this.allowLibationFixupCbox.TabIndex = 0; - this.allowLibationFixupCbox.Text = "Allow Libation to fix up audiobook metadata"; - this.allowLibationFixupCbox.UseVisualStyleBackColor = true; - // - // booksSelectControl - // - this.booksSelectControl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.inProgressSelectControl.Location = new System.Drawing.Point(10, 94); + this.inProgressSelectControl.Name = "inProgressSelectControl"; + this.inProgressSelectControl.Size = new System.Drawing.Size(885, 46); + this.inProgressSelectControl.TabIndex = 2; + // + // allowLibationFixupCbox + // + this.allowLibationFixupCbox.AutoSize = true; + this.allowLibationFixupCbox.Location = new System.Drawing.Point(10, 24); + this.allowLibationFixupCbox.Name = "allowLibationFixupCbox"; + this.allowLibationFixupCbox.Size = new System.Drawing.Size(262, 19); + this.allowLibationFixupCbox.TabIndex = 0; + this.allowLibationFixupCbox.Text = "Allow Libation to fix up audiobook metadata"; + this.allowLibationFixupCbox.UseVisualStyleBackColor = true; + this.allowLibationFixupCbox.CheckedChanged += new System.EventHandler(this.allowLibationFixupCbox_CheckedChanged); + // + // booksSelectControl + // + this.booksSelectControl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.booksSelectControl.Location = new System.Drawing.Point(106, 12); - this.booksSelectControl.Name = "booksSelectControl"; - this.booksSelectControl.Size = new System.Drawing.Size(815, 81); - this.booksSelectControl.TabIndex = 1; - // - // SettingsDialog - // - this.AcceptButton = this.saveBtn; - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.cancelBtn; - this.ClientSize = new System.Drawing.Size(933, 316); - this.Controls.Add(this.booksSelectControl); - this.Controls.Add(this.groupBox1); - this.Controls.Add(this.cancelBtn); - this.Controls.Add(this.saveBtn); - this.Controls.Add(this.booksLocationDescLbl); - this.Controls.Add(this.booksLocationLbl); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; - this.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.Name = "SettingsDialog"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "Edit Settings"; - this.Load += new System.EventHandler(this.SettingsDialog_Load); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); + this.booksSelectControl.Location = new System.Drawing.Point(106, 12); + this.booksSelectControl.Name = "booksSelectControl"; + this.booksSelectControl.Size = new System.Drawing.Size(815, 81); + this.booksSelectControl.TabIndex = 1; + // + // convertLosslessRb + // + this.convertLosslessRb.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.convertLosslessRb.AutoSize = true; + this.convertLosslessRb.Checked = true; + this.convertLosslessRb.Location = new System.Drawing.Point(692, 24); + this.convertLosslessRb.Name = "convertLosslessRb"; + this.convertLosslessRb.Size = new System.Drawing.Size(108, 19); + this.convertLosslessRb.TabIndex = 0; + this.convertLosslessRb.TabStop = true; + this.convertLosslessRb.Text = "Mp4a (Lossless)"; + this.convertLosslessRb.UseVisualStyleBackColor = true; + // + // convertLossyRb + // + this.convertLossyRb.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.convertLossyRb.AutoSize = true; + this.convertLossyRb.Location = new System.Drawing.Point(806, 24); + this.convertLossyRb.Name = "convertLossyRb"; + this.convertLossyRb.Size = new System.Drawing.Size(89, 19); + this.convertLossyRb.TabIndex = 0; + this.convertLossyRb.Text = "Mp3 (Lossy)"; + this.convertLossyRb.UseVisualStyleBackColor = true; + // + // SettingsDialog + // + this.AcceptButton = this.saveBtn; + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.cancelBtn; + this.ClientSize = new System.Drawing.Size(933, 309); + this.Controls.Add(this.booksSelectControl); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.cancelBtn); + this.Controls.Add(this.saveBtn); + this.Controls.Add(this.booksLocationDescLbl); + this.Controls.Add(this.booksLocationLbl); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + this.Name = "SettingsDialog"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Edit Settings"; + this.Load += new System.EventHandler(this.SettingsDialog_Load); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); } @@ -173,5 +202,7 @@ private System.Windows.Forms.CheckBox allowLibationFixupCbox; private DirectoryOrCustomSelectControl booksSelectControl; private DirectorySelectControl inProgressSelectControl; - } + private System.Windows.Forms.RadioButton convertLossyRb; + private System.Windows.Forms.RadioButton convertLosslessRb; + } } \ No newline at end of file diff --git a/LibationWinForms/Dialogs/SettingsDialog.cs b/LibationWinForms/Dialogs/SettingsDialog.cs index 2479ef91..acae6b24 100644 --- a/LibationWinForms/Dialogs/SettingsDialog.cs +++ b/LibationWinForms/Dialogs/SettingsDialog.cs @@ -30,6 +30,10 @@ namespace LibationWinForms.Dialogs booksSelectControl.SelectDirectory(config.Books); allowLibationFixupCbox.Checked = config.AllowLibationFixup; + convertLosslessRb.Checked = !config.DecryptToLossy; + convertLossyRb.Checked = config.DecryptToLossy; + + allowLibationFixupCbox_CheckedChanged(this, e); inProgressSelectControl.SetDirectoryItems(new() { @@ -45,6 +49,7 @@ namespace LibationWinForms.Dialogs private void saveBtn_Click(object sender, EventArgs e) { config.AllowLibationFixup = allowLibationFixupCbox.Checked; + config.DecryptToLossy = convertLossyRb.Checked; config.InProgress = inProgressSelectControl.SelectedDirectory; @@ -66,5 +71,16 @@ namespace LibationWinForms.Dialogs this.DialogResult = DialogResult.Cancel; this.Close(); } - } + + private void allowLibationFixupCbox_CheckedChanged(object sender, EventArgs e) + { + convertLosslessRb.Enabled = allowLibationFixupCbox.Checked; + convertLossyRb.Enabled = allowLibationFixupCbox.Checked; + + if (!allowLibationFixupCbox.Checked) + { + convertLosslessRb.Checked = true; + } + } + } }