Merge branch 'master' of https://github.com/rmcrackan/Libation
This commit is contained in:
commit
adbbff368f
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="AAXClean" Version="0.4.6" />
|
<PackageReference Include="AAXClean" Version="0.4.6" />
|
||||||
<PackageReference Include="AAXClean.Codecs" Version="0.2.5" />
|
<PackageReference Include="AAXClean.Codecs" Version="0.2.7" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@ -10,7 +10,7 @@ namespace AaxDecrypter
|
|||||||
|
|
||||||
protected AaxFile AaxFile;
|
protected AaxFile AaxFile;
|
||||||
|
|
||||||
protected AaxcDownloadConvertBase(string outFileName, string cacheDirectory, DownloadLicense dlLic)
|
protected AaxcDownloadConvertBase(string outFileName, string cacheDirectory, DownloadOptions dlLic)
|
||||||
: base(outFileName, cacheDirectory, dlLic) { }
|
: base(outFileName, cacheDirectory, dlLic) { }
|
||||||
|
|
||||||
/// <summary>Setting cover art by this method will insert the art into the audiobook metadata</summary>
|
/// <summary>Setting cover art by this method will insert the art into the audiobook metadata</summary>
|
||||||
@ -25,6 +25,36 @@ namespace AaxDecrypter
|
|||||||
{
|
{
|
||||||
AaxFile = new AaxFile(InputFileStream);
|
AaxFile = new AaxFile(InputFileStream);
|
||||||
|
|
||||||
|
if (DownloadOptions.StripUnabridged)
|
||||||
|
{
|
||||||
|
AaxFile.AppleTags.Title = AaxFile.AppleTags.TitleSansUnabridged;
|
||||||
|
AaxFile.AppleTags.Album = AaxFile.AppleTags.Album?.Replace(" (Unabridged)", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
//Finishing configuring lame encoder.
|
||||||
|
if (DownloadOptions.OutputFormat == OutputFormat.Mp3)
|
||||||
|
{
|
||||||
|
double bitrateMultiple = 1;
|
||||||
|
|
||||||
|
if (AaxFile.AudioChannels == 2)
|
||||||
|
{
|
||||||
|
if (DownloadOptions.Downsample)
|
||||||
|
bitrateMultiple = 0.5;
|
||||||
|
else
|
||||||
|
DownloadOptions.LameConfig.Mode = NAudio.Lame.MPEGMode.Stereo;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DownloadOptions.MatchSourceBitrate)
|
||||||
|
{
|
||||||
|
int kbps = (int)(AaxFile.AverageBitrate * bitrateMultiple / 1024);
|
||||||
|
|
||||||
|
if (DownloadOptions.LameConfig.VBR is null)
|
||||||
|
DownloadOptions.LameConfig.BitRate = kbps;
|
||||||
|
else if (DownloadOptions.LameConfig.VBR == NAudio.Lame.VBRMode.ABR)
|
||||||
|
DownloadOptions.LameConfig.ABRRateKbps = kbps;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
OnRetrievedTitle(AaxFile.AppleTags.TitleSansUnabridged);
|
OnRetrievedTitle(AaxFile.AppleTags.TitleSansUnabridged);
|
||||||
OnRetrievedAuthors(AaxFile.AppleTags.FirstAuthor ?? "[unknown]");
|
OnRetrievedAuthors(AaxFile.AppleTags.FirstAuthor ?? "[unknown]");
|
||||||
OnRetrievedNarrators(AaxFile.AppleTags.Narrator ?? "[unknown]");
|
OnRetrievedNarrators(AaxFile.AppleTags.Narrator ?? "[unknown]");
|
||||||
@ -46,7 +76,7 @@ namespace AaxDecrypter
|
|||||||
|
|
||||||
OnDecryptProgressUpdate(zeroProgress);
|
OnDecryptProgressUpdate(zeroProgress);
|
||||||
|
|
||||||
AaxFile.SetDecryptionKey(DownloadLicense.AudibleKey, DownloadLicense.AudibleIV);
|
AaxFile.SetDecryptionKey(DownloadOptions.AudibleKey, DownloadOptions.AudibleIV);
|
||||||
return zeroProgress;
|
return zeroProgress;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,7 +98,7 @@ namespace AaxDecrypter
|
|||||||
if (double.IsNormal(estTimeRemaining))
|
if (double.IsNormal(estTimeRemaining))
|
||||||
OnDecryptTimeRemaining(TimeSpan.FromSeconds(estTimeRemaining));
|
OnDecryptTimeRemaining(TimeSpan.FromSeconds(estTimeRemaining));
|
||||||
|
|
||||||
var progressPercent = e.ProcessPosition.TotalSeconds / duration.TotalSeconds;
|
var progressPercent = (e.ProcessPosition / e.TotalDuration);
|
||||||
|
|
||||||
OnDecryptProgressUpdate(
|
OnDecryptProgressUpdate(
|
||||||
new DownloadProgress
|
new DownloadProgress
|
||||||
|
|||||||
@ -18,13 +18,13 @@ namespace AaxDecrypter
|
|||||||
private static TimeSpan minChapterLength { get; } = TimeSpan.FromSeconds(3);
|
private static TimeSpan minChapterLength { get; } = TimeSpan.FromSeconds(3);
|
||||||
private List<string> multiPartFilePaths { get; } = new List<string>();
|
private List<string> multiPartFilePaths { get; } = new List<string>();
|
||||||
|
|
||||||
public AaxcDownloadMultiConverter(string outFileName, string cacheDirectory, DownloadLicense dlLic,
|
public AaxcDownloadMultiConverter(string outFileName, string cacheDirectory, DownloadOptions dlLic,
|
||||||
Func<MultiConvertFileProperties, string> multipartFileNameCallback = null)
|
Func<MultiConvertFileProperties, string> multipartFileNameCallback = null)
|
||||||
: base(outFileName, cacheDirectory, dlLic)
|
: base(outFileName, cacheDirectory, dlLic)
|
||||||
{
|
{
|
||||||
Steps = new StepSequence
|
Steps = new StepSequence
|
||||||
{
|
{
|
||||||
Name = "Download and Convert Aaxc To " + DownloadLicense.OutputFormat,
|
Name = "Download and Convert Aaxc To " + DownloadOptions.OutputFormat,
|
||||||
|
|
||||||
["Step 1: Get Aaxc Metadata"] = Step_GetMetadata,
|
["Step 1: Get Aaxc Metadata"] = Step_GetMetadata,
|
||||||
["Step 2: Download Decrypted Audiobook"] = Step_DownloadAudiobookAsMultipleFilesPerChapter,
|
["Step 2: Download Decrypted Audiobook"] = Step_DownloadAudiobookAsMultipleFilesPerChapter,
|
||||||
@ -61,10 +61,10 @@ That naming may not be desirable for everyone, but it's an easy change to instea
|
|||||||
{
|
{
|
||||||
var zeroProgress = Step_DownloadAudiobook_Start();
|
var zeroProgress = Step_DownloadAudiobook_Start();
|
||||||
|
|
||||||
var chapters = DownloadLicense.ChapterInfo.Chapters.ToList();
|
var chapters = DownloadOptions.ChapterInfo.Chapters.ToList();
|
||||||
|
|
||||||
// Ensure split files are at least minChapterLength in duration.
|
// Ensure split files are at least minChapterLength in duration.
|
||||||
var splitChapters = new ChapterInfo(DownloadLicense.ChapterInfo.StartOffset);
|
var splitChapters = new ChapterInfo(DownloadOptions.ChapterInfo.StartOffset);
|
||||||
|
|
||||||
var runningTotal = TimeSpan.Zero;
|
var runningTotal = TimeSpan.Zero;
|
||||||
string title = "";
|
string title = "";
|
||||||
@ -89,7 +89,7 @@ That naming may not be desirable for everyone, but it's an easy change to instea
|
|||||||
ConversionResult result;
|
ConversionResult result;
|
||||||
|
|
||||||
AaxFile.ConversionProgressUpdate += AaxFile_ConversionProgressUpdate;
|
AaxFile.ConversionProgressUpdate += AaxFile_ConversionProgressUpdate;
|
||||||
if (DownloadLicense.OutputFormat == OutputFormat.M4b)
|
if (DownloadOptions.OutputFormat == OutputFormat.M4b)
|
||||||
result = ConvertToMultiMp4a(splitChapters);
|
result = ConvertToMultiMp4a(splitChapters);
|
||||||
else
|
else
|
||||||
result = ConvertToMultiMp3(splitChapters);
|
result = ConvertToMultiMp3(splitChapters);
|
||||||
@ -97,13 +97,7 @@ That naming may not be desirable for everyone, but it's an easy change to instea
|
|||||||
|
|
||||||
Step_DownloadAudiobook_End(zeroProgress);
|
Step_DownloadAudiobook_End(zeroProgress);
|
||||||
|
|
||||||
var success = result == ConversionResult.NoErrorsDetected;
|
return result == ConversionResult.NoErrorsDetected;
|
||||||
|
|
||||||
if (success)
|
|
||||||
foreach (var path in multiPartFilePaths)
|
|
||||||
OnFileCreated(path);
|
|
||||||
|
|
||||||
return success;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private ConversionResult ConvertToMultiMp4a(ChapterInfo splitChapters)
|
private ConversionResult ConvertToMultiMp4a(ChapterInfo splitChapters)
|
||||||
@ -111,7 +105,7 @@ That naming may not be desirable for everyone, but it's an easy change to instea
|
|||||||
var chapterCount = 0;
|
var chapterCount = 0;
|
||||||
return AaxFile.ConvertToMultiMp4a(splitChapters, newSplitCallback =>
|
return AaxFile.ConvertToMultiMp4a(splitChapters, newSplitCallback =>
|
||||||
createOutputFileStream(++chapterCount, splitChapters, newSplitCallback),
|
createOutputFileStream(++chapterCount, splitChapters, newSplitCallback),
|
||||||
DownloadLicense.TrimOutputToChapterLength);
|
DownloadOptions.TrimOutputToChapterLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ConversionResult ConvertToMultiMp3(ChapterInfo splitChapters)
|
private ConversionResult ConvertToMultiMp3(ChapterInfo splitChapters)
|
||||||
@ -121,7 +115,7 @@ That naming may not be desirable for everyone, but it's an easy change to instea
|
|||||||
{
|
{
|
||||||
createOutputFileStream(++chapterCount, splitChapters, newSplitCallback);
|
createOutputFileStream(++chapterCount, splitChapters, newSplitCallback);
|
||||||
((NAudio.Lame.LameConfig)newSplitCallback.UserState).ID3.Track = chapterCount.ToString();
|
((NAudio.Lame.LameConfig)newSplitCallback.UserState).ID3.Track = chapterCount.ToString();
|
||||||
}, null, DownloadLicense.TrimOutputToChapterLength);
|
}, DownloadOptions.LameConfig, DownloadOptions.TrimOutputToChapterLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createOutputFileStream(int currentChapter, ChapterInfo splitChapters, NewSplitCallback newSplitCallback)
|
private void createOutputFileStream(int currentChapter, ChapterInfo splitChapters, NewSplitCallback newSplitCallback)
|
||||||
@ -140,6 +134,8 @@ That naming may not be desirable for everyone, but it's an easy change to instea
|
|||||||
FileUtility.SaferDelete(fileName);
|
FileUtility.SaferDelete(fileName);
|
||||||
|
|
||||||
newSplitCallback.OutputFile = File.Open(fileName, FileMode.OpenOrCreate);
|
newSplitCallback.OutputFile = File.Open(fileName, FileMode.OpenOrCreate);
|
||||||
|
|
||||||
|
OnFileCreated(fileName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,12 +11,12 @@ namespace AaxDecrypter
|
|||||||
{
|
{
|
||||||
protected override StepSequence Steps { get; }
|
protected override StepSequence Steps { get; }
|
||||||
|
|
||||||
public AaxcDownloadSingleConverter(string outFileName, string cacheDirectory, DownloadLicense dlLic)
|
public AaxcDownloadSingleConverter(string outFileName, string cacheDirectory, DownloadOptions dlLic)
|
||||||
: base(outFileName, cacheDirectory, dlLic)
|
: base(outFileName, cacheDirectory, dlLic)
|
||||||
{
|
{
|
||||||
Steps = new StepSequence
|
Steps = new StepSequence
|
||||||
{
|
{
|
||||||
Name = "Download and Convert Aaxc To " + DownloadLicense.OutputFormat,
|
Name = "Download and Convert Aaxc To " + DownloadOptions.OutputFormat,
|
||||||
|
|
||||||
["Step 1: Get Aaxc Metadata"] = Step_GetMetadata,
|
["Step 1: Get Aaxc Metadata"] = Step_GetMetadata,
|
||||||
["Step 2: Download Decrypted Audiobook"] = Step_DownloadAudiobookAsSingleFile,
|
["Step 2: Download Decrypted Audiobook"] = Step_DownloadAudiobookAsSingleFile,
|
||||||
@ -32,15 +32,16 @@ namespace AaxDecrypter
|
|||||||
FileUtility.SaferDelete(OutputFileName);
|
FileUtility.SaferDelete(OutputFileName);
|
||||||
|
|
||||||
var outputFile = File.Open(OutputFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite);
|
var outputFile = File.Open(OutputFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite);
|
||||||
|
OnFileCreated(OutputFileName);
|
||||||
|
|
||||||
AaxFile.ConversionProgressUpdate += AaxFile_ConversionProgressUpdate;
|
AaxFile.ConversionProgressUpdate += AaxFile_ConversionProgressUpdate;
|
||||||
var decryptionResult
|
var decryptionResult
|
||||||
= DownloadLicense.OutputFormat == OutputFormat.M4b
|
= DownloadOptions.OutputFormat == OutputFormat.M4b
|
||||||
? AaxFile.ConvertToMp4a(outputFile, DownloadLicense.ChapterInfo, DownloadLicense.TrimOutputToChapterLength)
|
? AaxFile.ConvertToMp4a(outputFile, DownloadOptions.ChapterInfo, DownloadOptions.TrimOutputToChapterLength)
|
||||||
: AaxFile.ConvertToMp3(outputFile, null, DownloadLicense.ChapterInfo, DownloadLicense.TrimOutputToChapterLength);
|
: AaxFile.ConvertToMp3(outputFile, DownloadOptions.LameConfig, DownloadOptions.ChapterInfo, DownloadOptions.TrimOutputToChapterLength);
|
||||||
AaxFile.ConversionProgressUpdate -= AaxFile_ConversionProgressUpdate;
|
AaxFile.ConversionProgressUpdate -= AaxFile_ConversionProgressUpdate;
|
||||||
|
|
||||||
DownloadLicense.ChapterInfo = AaxFile.Chapters;
|
DownloadOptions.ChapterInfo = AaxFile.Chapters;
|
||||||
|
|
||||||
Step_DownloadAudiobook_End(zeroProgress);
|
Step_DownloadAudiobook_End(zeroProgress);
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using Dinah.Core;
|
using Dinah.Core;
|
||||||
using Dinah.Core.Net.Http;
|
using Dinah.Core.Net.Http;
|
||||||
@ -20,8 +21,9 @@ namespace AaxDecrypter
|
|||||||
public event EventHandler<string> FileCreated;
|
public event EventHandler<string> FileCreated;
|
||||||
|
|
||||||
protected bool IsCanceled { get; set; }
|
protected bool IsCanceled { get; set; }
|
||||||
|
|
||||||
protected string OutputFileName { get; private set; }
|
protected string OutputFileName { get; private set; }
|
||||||
protected DownloadLicense DownloadLicense { get; }
|
protected DownloadOptions DownloadOptions { get; }
|
||||||
protected NetworkFileStream InputFileStream => (nfsPersister ??= OpenNetworkFileStream()).NetworkFileStream;
|
protected NetworkFileStream InputFileStream => (nfsPersister ??= OpenNetworkFileStream()).NetworkFileStream;
|
||||||
|
|
||||||
// Don't give the property a 'set'. This should have to be an obvious choice; not accidental
|
// Don't give the property a 'set'. This should have to be an obvious choice; not accidental
|
||||||
@ -31,9 +33,9 @@ namespace AaxDecrypter
|
|||||||
private NetworkFileStreamPersister nfsPersister;
|
private NetworkFileStreamPersister nfsPersister;
|
||||||
|
|
||||||
private string jsonDownloadState { get; }
|
private string jsonDownloadState { get; }
|
||||||
private string tempFile => Path.ChangeExtension(jsonDownloadState, ".tmp");
|
public string TempFilePath { get; }
|
||||||
|
|
||||||
protected AudiobookDownloadBase(string outFileName, string cacheDirectory, DownloadLicense dlLic)
|
protected AudiobookDownloadBase(string outFileName, string cacheDirectory, DownloadOptions dlLic)
|
||||||
{
|
{
|
||||||
OutputFileName = ArgumentValidator.EnsureNotNullOrWhiteSpace(outFileName, nameof(outFileName));
|
OutputFileName = ArgumentValidator.EnsureNotNullOrWhiteSpace(outFileName, nameof(outFileName));
|
||||||
|
|
||||||
@ -43,9 +45,11 @@ namespace AaxDecrypter
|
|||||||
|
|
||||||
if (!Directory.Exists(cacheDirectory))
|
if (!Directory.Exists(cacheDirectory))
|
||||||
throw new DirectoryNotFoundException($"Directory does not exist: {nameof(cacheDirectory)}");
|
throw new DirectoryNotFoundException($"Directory does not exist: {nameof(cacheDirectory)}");
|
||||||
jsonDownloadState = Path.Combine(cacheDirectory, Path.ChangeExtension(OutputFileName, ".json"));
|
|
||||||
|
|
||||||
DownloadLicense = ArgumentValidator.EnsureNotNull(dlLic, nameof(dlLic));
|
jsonDownloadState = Path.Combine(cacheDirectory, Path.GetFileName(Path.ChangeExtension(OutputFileName, ".json")));
|
||||||
|
TempFilePath = Path.ChangeExtension(jsonDownloadState, ".aaxc");
|
||||||
|
|
||||||
|
DownloadOptions = ArgumentValidator.EnsureNotNull(dlLic, nameof(dlLic));
|
||||||
|
|
||||||
// delete file after validation is complete
|
// delete file after validation is complete
|
||||||
FileUtility.SaferDelete(OutputFileName);
|
FileUtility.SaferDelete(OutputFileName);
|
||||||
@ -94,12 +98,14 @@ namespace AaxDecrypter
|
|||||||
|
|
||||||
protected bool Step_CreateCue()
|
protected bool Step_CreateCue()
|
||||||
{
|
{
|
||||||
|
if (!DownloadOptions.CreateCueSheet) return true;
|
||||||
|
|
||||||
// not a critical step. its failure should not prevent future steps from running
|
// not a critical step. its failure should not prevent future steps from running
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var path = Path.ChangeExtension(OutputFileName, ".cue");
|
var path = Path.ChangeExtension(OutputFileName, ".cue");
|
||||||
path = FileUtility.GetValidFilename(path);
|
path = FileUtility.GetValidFilename(path);
|
||||||
File.WriteAllText(path, Cue.CreateContents(Path.GetFileName(OutputFileName), DownloadLicense.ChapterInfo));
|
File.WriteAllText(path, Cue.CreateContents(Path.GetFileName(OutputFileName), DownloadOptions.ChapterInfo));
|
||||||
OnFileCreated(path);
|
OnFileCreated(path);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@ -110,10 +116,37 @@ namespace AaxDecrypter
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected bool Step_Cleanup()
|
protected bool Step_Cleanup()
|
||||||
|
{
|
||||||
|
bool success = !IsCanceled;
|
||||||
|
if (success)
|
||||||
{
|
{
|
||||||
FileUtility.SaferDelete(jsonDownloadState);
|
FileUtility.SaferDelete(jsonDownloadState);
|
||||||
FileUtility.SaferDelete(tempFile);
|
|
||||||
return !IsCanceled;
|
if (DownloadOptions.AudibleKey is not null &&
|
||||||
|
DownloadOptions.AudibleIV is not null &&
|
||||||
|
DownloadOptions.RetainEncryptedFile)
|
||||||
|
{
|
||||||
|
string aaxPath = Path.ChangeExtension(TempFilePath, ".aax");
|
||||||
|
FileUtility.SaferMove(TempFilePath, aaxPath);
|
||||||
|
|
||||||
|
//Write aax decryption key
|
||||||
|
string keyPath = Path.ChangeExtension(aaxPath, ".key");
|
||||||
|
FileUtility.SaferDelete(keyPath);
|
||||||
|
File.WriteAllText(keyPath, $"Key={DownloadOptions.AudibleKey}\r\nIV={DownloadOptions.AudibleIV}");
|
||||||
|
|
||||||
|
OnFileCreated(aaxPath);
|
||||||
|
OnFileCreated(keyPath);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
FileUtility.SaferDelete(TempFilePath);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FileUtility.SaferDelete(OutputFileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
private NetworkFileStreamPersister OpenNetworkFileStream()
|
private NetworkFileStreamPersister OpenNetworkFileStream()
|
||||||
@ -126,13 +159,13 @@ namespace AaxDecrypter
|
|||||||
var nfsp = new NetworkFileStreamPersister(jsonDownloadState);
|
var nfsp = new NetworkFileStreamPersister(jsonDownloadState);
|
||||||
// If More than ~1 hour has elapsed since getting the download url, it will expire.
|
// If More than ~1 hour has elapsed since getting the download url, it will expire.
|
||||||
// The new url will be to the same file.
|
// The new url will be to the same file.
|
||||||
nfsp.NetworkFileStream.SetUriForSameFile(new Uri(DownloadLicense.DownloadUrl));
|
nfsp.NetworkFileStream.SetUriForSameFile(new Uri(DownloadOptions.DownloadUrl));
|
||||||
return nfsp;
|
return nfsp;
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
FileUtility.SaferDelete(jsonDownloadState);
|
FileUtility.SaferDelete(jsonDownloadState);
|
||||||
FileUtility.SaferDelete(tempFile);
|
FileUtility.SaferDelete(TempFilePath);
|
||||||
return NewNetworkFilePersister();
|
return NewNetworkFilePersister();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -141,10 +174,10 @@ namespace AaxDecrypter
|
|||||||
{
|
{
|
||||||
var headers = new System.Net.WebHeaderCollection
|
var headers = new System.Net.WebHeaderCollection
|
||||||
{
|
{
|
||||||
{ "User-Agent", DownloadLicense.UserAgent }
|
{ "User-Agent", DownloadOptions.UserAgent }
|
||||||
};
|
};
|
||||||
|
|
||||||
var networkFileStream = new NetworkFileStream(tempFile, new Uri(DownloadLicense.DownloadUrl), 0, headers);
|
var networkFileStream = new NetworkFileStream(TempFilePath, new Uri(DownloadOptions.DownloadUrl), 0, headers);
|
||||||
return new NetworkFileStreamPersister(networkFileStream, jsonDownloadState);
|
return new NetworkFileStreamPersister(networkFileStream, jsonDownloadState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,7 +3,7 @@ using Dinah.Core;
|
|||||||
|
|
||||||
namespace AaxDecrypter
|
namespace AaxDecrypter
|
||||||
{
|
{
|
||||||
public class DownloadLicense
|
public class DownloadOptions
|
||||||
{
|
{
|
||||||
public string DownloadUrl { get; }
|
public string DownloadUrl { get; }
|
||||||
public string UserAgent { get; }
|
public string UserAgent { get; }
|
||||||
@ -11,9 +11,15 @@ namespace AaxDecrypter
|
|||||||
public string AudibleIV { get; init; }
|
public string AudibleIV { get; init; }
|
||||||
public OutputFormat OutputFormat { get; init; }
|
public OutputFormat OutputFormat { get; init; }
|
||||||
public bool TrimOutputToChapterLength { get; init; }
|
public bool TrimOutputToChapterLength { get; init; }
|
||||||
|
public bool RetainEncryptedFile { get; init; }
|
||||||
|
public bool StripUnabridged { get; init; }
|
||||||
|
public bool CreateCueSheet { get; init; }
|
||||||
public ChapterInfo ChapterInfo { get; set; }
|
public ChapterInfo ChapterInfo { get; set; }
|
||||||
|
public NAudio.Lame.LameConfig LameConfig { get; set; }
|
||||||
|
public bool Downsample { get; set; }
|
||||||
|
public bool MatchSourceBitrate { get; set; }
|
||||||
|
|
||||||
public DownloadLicense(string downloadUrl, string userAgent)
|
public DownloadOptions(string downloadUrl, string userAgent)
|
||||||
{
|
{
|
||||||
DownloadUrl = ArgumentValidator.EnsureNotNullOrEmpty(downloadUrl, nameof(downloadUrl));
|
DownloadUrl = ArgumentValidator.EnsureNotNullOrEmpty(downloadUrl, nameof(downloadUrl));
|
||||||
UserAgent = ArgumentValidator.EnsureNotNullOrEmpty(userAgent, nameof(userAgent));
|
UserAgent = ArgumentValidator.EnsureNotNullOrEmpty(userAgent, nameof(userAgent));
|
||||||
@ -10,7 +10,7 @@ namespace AaxDecrypter
|
|||||||
{
|
{
|
||||||
protected override StepSequence Steps { get; }
|
protected override StepSequence Steps { get; }
|
||||||
|
|
||||||
public UnencryptedAudiobookDownloader(string outFileName, string cacheDirectory, DownloadLicense dlLic)
|
public UnencryptedAudiobookDownloader(string outFileName, string cacheDirectory, DownloadOptions dlLic)
|
||||||
: base(outFileName, cacheDirectory, dlLic)
|
: base(outFileName, cacheDirectory, dlLic)
|
||||||
{
|
{
|
||||||
Steps = new StepSequence
|
Steps = new StepSequence
|
||||||
|
|||||||
@ -66,24 +66,54 @@ namespace AppScaffolding
|
|||||||
if (!config.Exists(nameof(config.AllowLibationFixup)))
|
if (!config.Exists(nameof(config.AllowLibationFixup)))
|
||||||
config.AllowLibationFixup = true;
|
config.AllowLibationFixup = true;
|
||||||
|
|
||||||
if (!config.Exists(nameof(config.DecryptToLossy)))
|
if (!config.Exists(nameof(config.CreateCueSheet)))
|
||||||
config.DecryptToLossy = false;
|
config.CreateCueSheet = true;
|
||||||
|
|
||||||
if (!config.Exists(nameof(config.BadBook)))
|
if (!config.Exists(nameof(config.RetainAaxFile)))
|
||||||
config.BadBook = Configuration.BadBookAction.Ask;
|
config.RetainAaxFile = false;
|
||||||
|
|
||||||
if (!config.Exists(nameof(config.DownloadEpisodes)))
|
|
||||||
config.DownloadEpisodes = true;
|
|
||||||
|
|
||||||
if (!config.Exists(nameof(config.ImportEpisodes)))
|
|
||||||
config.ImportEpisodes = true;
|
|
||||||
|
|
||||||
if (!config.Exists(nameof(config.SplitFilesByChapter)))
|
if (!config.Exists(nameof(config.SplitFilesByChapter)))
|
||||||
config.SplitFilesByChapter = false;
|
config.SplitFilesByChapter = false;
|
||||||
|
|
||||||
|
if (!config.Exists(nameof(config.StripUnabridged)))
|
||||||
|
config.StripUnabridged = false;
|
||||||
|
|
||||||
if (!config.Exists(nameof(config.StripAudibleBrandAudio)))
|
if (!config.Exists(nameof(config.StripAudibleBrandAudio)))
|
||||||
config.StripAudibleBrandAudio = false;
|
config.StripAudibleBrandAudio = false;
|
||||||
|
|
||||||
|
if (!config.Exists(nameof(config.DecryptToLossy)))
|
||||||
|
config.DecryptToLossy = false;
|
||||||
|
|
||||||
|
if (!config.Exists(nameof(config.LameTargetBitrate)))
|
||||||
|
config.LameTargetBitrate = false;
|
||||||
|
|
||||||
|
if (!config.Exists(nameof(config.LameDownsampleMono)))
|
||||||
|
config.LameDownsampleMono = true;
|
||||||
|
|
||||||
|
if (!config.Exists(nameof(config.LameBitrate)))
|
||||||
|
config.LameBitrate = 64;
|
||||||
|
|
||||||
|
if (!config.Exists(nameof(config.LameConstantBitrate)))
|
||||||
|
config.LameConstantBitrate = false;
|
||||||
|
|
||||||
|
if (!config.Exists(nameof(config.LameMatchSourceBR)))
|
||||||
|
config.LameMatchSourceBR = true;
|
||||||
|
|
||||||
|
if (!config.Exists(nameof(config.LameVBRQuality)))
|
||||||
|
config.LameVBRQuality = 2;
|
||||||
|
|
||||||
|
if (!config.Exists(nameof(config.BadBook)))
|
||||||
|
config.BadBook = Configuration.BadBookAction.Ask;
|
||||||
|
|
||||||
|
if (!config.Exists(nameof(config.ShowImportedStats)))
|
||||||
|
config.ShowImportedStats = true;
|
||||||
|
|
||||||
|
if (!config.Exists(nameof(config.ImportEpisodes)))
|
||||||
|
config.ImportEpisodes = true;
|
||||||
|
|
||||||
|
if (!config.Exists(nameof(config.DownloadEpisodes)))
|
||||||
|
config.DownloadEpisodes = true;
|
||||||
|
|
||||||
if (!config.Exists(nameof(config.FolderTemplate)))
|
if (!config.Exists(nameof(config.FolderTemplate)))
|
||||||
config.FolderTemplate = Templates.Folder.DefaultTemplate;
|
config.FolderTemplate = Templates.Folder.DefaultTemplate;
|
||||||
|
|
||||||
@ -92,9 +122,6 @@ namespace AppScaffolding
|
|||||||
|
|
||||||
if (!config.Exists(nameof(config.ChapterFileTemplate)))
|
if (!config.Exists(nameof(config.ChapterFileTemplate)))
|
||||||
config.ChapterFileTemplate = Templates.ChapterFile.DefaultTemplate;
|
config.ChapterFileTemplate = Templates.ChapterFile.DefaultTemplate;
|
||||||
|
|
||||||
if (!config.Exists(nameof(config.ShowImportedStats)))
|
|
||||||
config.ShowImportedStats = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Initialize logging. Run after migration</summary>
|
/// <summary>Initialize logging. Run after migration</summary>
|
||||||
|
|||||||
@ -39,7 +39,7 @@ namespace FileLiberator
|
|||||||
/// File name: final file name.
|
/// File name: final file name.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static string GetInProgressFilename(this AudioFileStorage _, LibraryBook libraryBook, string extension)
|
public static string GetInProgressFilename(this AudioFileStorage _, LibraryBook libraryBook, string extension)
|
||||||
=> Templates.File.GetFilename(libraryBook.ToDto(), AudibleFileStorage.DecryptInProgressDirectory, extension);
|
=> Templates.File.GetFilename(libraryBook.ToDto(), AudibleFileStorage.DecryptInProgressDirectory, extension, returnFirstExisting: true);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// PDF: audio file does not exist
|
/// PDF: audio file does not exist
|
||||||
|
|||||||
@ -61,7 +61,12 @@ namespace FileLiberator
|
|||||||
|
|
||||||
// decrypt failed
|
// decrypt failed
|
||||||
if (!success)
|
if (!success)
|
||||||
|
{
|
||||||
|
foreach (var tmpFile in entries.Where(f => f.FileType != FileType.AAXC))
|
||||||
|
FileUtility.SaferDelete(tmpFile.Path);
|
||||||
|
|
||||||
return new StatusHandler { "Decrypt failed" };
|
return new StatusHandler { "Decrypt failed" };
|
||||||
|
}
|
||||||
|
|
||||||
// moves new files from temp dir to final dest
|
// moves new files from temp dir to final dest
|
||||||
var movedAudioFile = moveFilesToBooksDir(libraryBook, entries);
|
var movedAudioFile = moveFilesToBooksDir(libraryBook, entries);
|
||||||
@ -92,7 +97,7 @@ namespace FileLiberator
|
|||||||
|
|
||||||
var api = await libraryBook.GetApiAsync();
|
var api = await libraryBook.GetApiAsync();
|
||||||
var contentLic = await api.GetDownloadLicenseAsync(libraryBook.Book.AudibleProductId);
|
var contentLic = await api.GetDownloadLicenseAsync(libraryBook.Book.AudibleProductId);
|
||||||
var audiobookDlLic = BuildDownloadLicense(config, contentLic);
|
var audiobookDlLic = BuildDownloadOptions(config, contentLic);
|
||||||
|
|
||||||
var outFileName = AudibleFileStorage.Audio.GetInProgressFilename(libraryBook, audiobookDlLic.OutputFormat.ToString().ToLower());
|
var outFileName = AudibleFileStorage.Audio.GetInProgressFilename(libraryBook, audiobookDlLic.OutputFormat.ToString().ToLower());
|
||||||
var cacheDir = AudibleFileStorage.DownloadsInProgressDirectory;
|
var cacheDir = AudibleFileStorage.DownloadsInProgressDirectory;
|
||||||
@ -115,7 +120,6 @@ namespace FileLiberator
|
|||||||
|
|
||||||
abDownloader.DecryptProgressUpdate += OnStreamingProgressChanged;
|
abDownloader.DecryptProgressUpdate += OnStreamingProgressChanged;
|
||||||
abDownloader.DecryptTimeRemaining += OnStreamingTimeRemaining;
|
abDownloader.DecryptTimeRemaining += OnStreamingTimeRemaining;
|
||||||
|
|
||||||
abDownloader.RetrievedTitle += OnTitleDiscovered;
|
abDownloader.RetrievedTitle += OnTitleDiscovered;
|
||||||
abDownloader.RetrievedAuthors += OnAuthorsDiscovered;
|
abDownloader.RetrievedAuthors += OnAuthorsDiscovered;
|
||||||
abDownloader.RetrievedNarrators += OnNarratorsDiscovered;
|
abDownloader.RetrievedNarrators += OnNarratorsDiscovered;
|
||||||
@ -132,28 +136,32 @@ namespace FileLiberator
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static DownloadLicense BuildDownloadLicense(Configuration config, AudibleApi.Common.ContentLicense contentLic)
|
private static DownloadOptions BuildDownloadOptions(Configuration config, AudibleApi.Common.ContentLicense contentLic)
|
||||||
{
|
{
|
||||||
//I assume if ContentFormat == "MPEG" that the delivered file is an unencrypted mp3.
|
//I assume if ContentFormat == "MPEG" that the delivered file is an unencrypted mp3.
|
||||||
//I also assume that if DrmType != Adrm, the file will be an mp3.
|
//I also assume that if DrmType != Adrm, the file will be an mp3.
|
||||||
//These assumptions may be wrong, and only time and bug reports will tell.
|
//These assumptions may be wrong, and only time and bug reports will tell.
|
||||||
var outputFormat =
|
|
||||||
contentLic?.ContentMetadata?.ContentReference?.ContentFormat == "MPEG" ||
|
bool encrypted = contentLic.DrmType == AudibleApi.Common.DrmType.Adrm;
|
||||||
(config.AllowLibationFixup && config.DecryptToLossy) ?
|
|
||||||
|
var outputFormat = !encrypted || (config.AllowLibationFixup && config.DecryptToLossy) ?
|
||||||
OutputFormat.Mp3 : OutputFormat.M4b;
|
OutputFormat.Mp3 : OutputFormat.M4b;
|
||||||
|
|
||||||
var audiobookDlLic = new DownloadLicense
|
var audiobookDlLic = new DownloadOptions
|
||||||
(
|
(
|
||||||
contentLic?.ContentMetadata?.ContentUrl?.OfflineUrl,
|
contentLic?.ContentMetadata?.ContentUrl?.OfflineUrl,
|
||||||
Resources.USER_AGENT
|
Resources.USER_AGENT
|
||||||
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
|
||||||
AudibleKey = contentLic?.Voucher?.Key,
|
AudibleKey = contentLic?.Voucher?.Key,
|
||||||
AudibleIV = contentLic?.Voucher?.Iv,
|
AudibleIV = contentLic?.Voucher?.Iv,
|
||||||
OutputFormat = outputFormat,
|
OutputFormat = outputFormat,
|
||||||
TrimOutputToChapterLength = config.StripAudibleBrandAudio
|
TrimOutputToChapterLength = config.AllowLibationFixup && config.StripAudibleBrandAudio,
|
||||||
|
RetainEncryptedFile = config.RetainAaxFile && encrypted,
|
||||||
|
StripUnabridged = config.AllowLibationFixup && config.StripUnabridged,
|
||||||
|
Downsample = config.AllowLibationFixup && config.LameDownsampleMono,
|
||||||
|
MatchSourceBitrate = config.AllowLibationFixup && config.LameMatchSourceBR && config.LameTargetBitrate,
|
||||||
|
CreateCueSheet = config.CreateCueSheet
|
||||||
};
|
};
|
||||||
|
|
||||||
if (config.AllowLibationFixup || outputFormat == OutputFormat.Mp3)
|
if (config.AllowLibationFixup || outputFormat == OutputFormat.Mp3)
|
||||||
@ -179,6 +187,31 @@ namespace FileLiberator
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NAudio.Lame.LameConfig lameConfig = new();
|
||||||
|
|
||||||
|
|
||||||
|
lameConfig.Mode = NAudio.Lame.MPEGMode.Mono;
|
||||||
|
|
||||||
|
if (config.LameTargetBitrate)
|
||||||
|
{
|
||||||
|
if (config.LameConstantBitrate)
|
||||||
|
lameConfig.BitRate = config.LameBitrate;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lameConfig.ABRRateKbps = config.LameBitrate;
|
||||||
|
lameConfig.VBR = NAudio.Lame.VBRMode.ABR;
|
||||||
|
lameConfig.WriteVBRTag = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lameConfig.VBR = NAudio.Lame.VBRMode.Default;
|
||||||
|
lameConfig.VBRQuality = config.LameVBRQuality;
|
||||||
|
lameConfig.WriteVBRTag = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
audiobookDlLic.LameConfig = lameConfig;
|
||||||
|
|
||||||
return audiobookDlLic;
|
return audiobookDlLic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -29,14 +29,14 @@ namespace FileManager
|
|||||||
public string IllegalCharacterReplacements { get; set; }
|
public string IllegalCharacterReplacements { get; set; }
|
||||||
|
|
||||||
/// <summary>Generate a valid path for this file or directory</summary>
|
/// <summary>Generate a valid path for this file or directory</summary>
|
||||||
public string GetFilePath()
|
public string GetFilePath(bool returnFirstExisting = false)
|
||||||
{
|
{
|
||||||
var filename = Template;
|
var filename = Template;
|
||||||
|
|
||||||
foreach (var r in ParameterReplacements)
|
foreach (var r in ParameterReplacements)
|
||||||
filename = filename.Replace($"<{formatKey(r.Key)}>", formatValue(r.Value));
|
filename = filename.Replace($"<{formatKey(r.Key)}>", formatValue(r.Value));
|
||||||
|
|
||||||
return FileUtility.GetValidFilename(filename, IllegalCharacterReplacements);
|
return FileUtility.GetValidFilename(filename, IllegalCharacterReplacements, returnFirstExisting);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string formatKey(string key)
|
private static string formatKey(string key)
|
||||||
|
|||||||
@ -48,7 +48,7 @@ namespace FileManager
|
|||||||
/// <br/>- ensure uniqueness
|
/// <br/>- ensure uniqueness
|
||||||
/// <br/>- enforce max file length
|
/// <br/>- enforce max file length
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static string GetValidFilename(string path, string illegalCharacterReplacements = "")
|
public static string GetValidFilename(string path, string illegalCharacterReplacements = "", bool returnFirstExisting = false)
|
||||||
{
|
{
|
||||||
ArgumentValidator.EnsureNotNull(path, nameof(path));
|
ArgumentValidator.EnsureNotNull(path, nameof(path));
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ namespace FileManager
|
|||||||
fullfilename = removeInvalidWhitespace(fullfilename);
|
fullfilename = removeInvalidWhitespace(fullfilename);
|
||||||
|
|
||||||
var i = 0;
|
var i = 0;
|
||||||
while (File.Exists(fullfilename))
|
while (File.Exists(fullfilename) && !returnFirstExisting)
|
||||||
{
|
{
|
||||||
var increm = $" ({++i})";
|
var increm = $" ({++i})";
|
||||||
fullfilename = fileStem.Truncate(MAX_FILENAME_LENGTH - increm.Length - extension.Length) + increm + extension;
|
fullfilename = fileStem.Truncate(MAX_FILENAME_LENGTH - increm.Length - extension.Length) + increm + extension;
|
||||||
|
|||||||
@ -96,6 +96,34 @@ namespace LibationFileManager
|
|||||||
set => persistentDictionary.SetNonString(nameof(AllowLibationFixup), value);
|
set => persistentDictionary.SetNonString(nameof(AllowLibationFixup), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Description("Create a cue sheet (.cue)")]
|
||||||
|
public bool CreateCueSheet
|
||||||
|
{
|
||||||
|
get => persistentDictionary.GetNonString<bool>(nameof(CreateCueSheet));
|
||||||
|
set => persistentDictionary.SetNonString(nameof(CreateCueSheet), value);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Description("Retain the Aax file after successfully decrypting")]
|
||||||
|
public bool RetainAaxFile
|
||||||
|
{
|
||||||
|
get => persistentDictionary.GetNonString<bool>(nameof(RetainAaxFile));
|
||||||
|
set => persistentDictionary.SetNonString(nameof(RetainAaxFile), value);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Description("Split my books into multiple files by chapter")]
|
||||||
|
public bool SplitFilesByChapter
|
||||||
|
{
|
||||||
|
get => persistentDictionary.GetNonString<bool>(nameof(SplitFilesByChapter));
|
||||||
|
set => persistentDictionary.SetNonString(nameof(SplitFilesByChapter), value);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Description("Strip \"(Unabridged)\" from audiobook metadata tags")]
|
||||||
|
public bool StripUnabridged
|
||||||
|
{
|
||||||
|
get => persistentDictionary.GetNonString<bool>(nameof(StripUnabridged));
|
||||||
|
set => persistentDictionary.SetNonString(nameof(StripUnabridged), value);
|
||||||
|
}
|
||||||
|
|
||||||
[Description("Allow Libation to remove audible branding from the start\r\nand end of audiobooks. (e.g. \"This is Audible\")")]
|
[Description("Allow Libation to remove audible branding from the start\r\nand end of audiobooks. (e.g. \"This is Audible\")")]
|
||||||
public bool StripAudibleBrandAudio
|
public bool StripAudibleBrandAudio
|
||||||
{
|
{
|
||||||
@ -110,11 +138,46 @@ namespace LibationFileManager
|
|||||||
set => persistentDictionary.SetNonString(nameof(DecryptToLossy), value);
|
set => persistentDictionary.SetNonString(nameof(DecryptToLossy), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Description("Split my books into multiple files by chapter")]
|
[Description("Lame encoder target. true = Bitrate, false = Quality")]
|
||||||
public bool SplitFilesByChapter
|
public bool LameTargetBitrate
|
||||||
{
|
{
|
||||||
get => persistentDictionary.GetNonString<bool>(nameof(SplitFilesByChapter));
|
get => persistentDictionary.GetNonString<bool>(nameof(LameTargetBitrate));
|
||||||
set => persistentDictionary.SetNonString(nameof(SplitFilesByChapter), value);
|
set => persistentDictionary.SetNonString(nameof(LameTargetBitrate), value);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Description("Lame encoder downsamples to mono")]
|
||||||
|
public bool LameDownsampleMono
|
||||||
|
{
|
||||||
|
get => persistentDictionary.GetNonString<bool>(nameof(LameDownsampleMono));
|
||||||
|
set => persistentDictionary.SetNonString(nameof(LameDownsampleMono), value);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Description("Lame target bitrate [16,320]")]
|
||||||
|
public int LameBitrate
|
||||||
|
{
|
||||||
|
get => persistentDictionary.GetNonString<int>(nameof(LameBitrate));
|
||||||
|
set => persistentDictionary.SetNonString(nameof(LameBitrate), value);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Description("Restrict encoder to constant bitrate?")]
|
||||||
|
public bool LameConstantBitrate
|
||||||
|
{
|
||||||
|
get => persistentDictionary.GetNonString<bool>(nameof(LameConstantBitrate));
|
||||||
|
set => persistentDictionary.SetNonString(nameof(LameConstantBitrate), value);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Description("Match the source bitrate?")]
|
||||||
|
public bool LameMatchSourceBR
|
||||||
|
{
|
||||||
|
get => persistentDictionary.GetNonString<bool>(nameof(LameMatchSourceBR));
|
||||||
|
set => persistentDictionary.SetNonString(nameof(LameMatchSourceBR), value);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Description("Lame target VBR quality [10,100]")]
|
||||||
|
public int LameVBRQuality
|
||||||
|
{
|
||||||
|
get => persistentDictionary.GetNonString<int>(nameof(LameVBRQuality));
|
||||||
|
set => persistentDictionary.SetNonString(nameof(LameVBRQuality), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum BadBookAction
|
public enum BadBookAction
|
||||||
|
|||||||
@ -230,9 +230,9 @@ namespace LibationFileManager
|
|||||||
|
|
||||||
#region to file name
|
#region to file name
|
||||||
/// <summary>USES LIVE CONFIGURATION VALUES</summary>
|
/// <summary>USES LIVE CONFIGURATION VALUES</summary>
|
||||||
public string GetFilename(LibraryBookDto libraryBookDto, string dirFullPath, string extension)
|
public string GetFilename(LibraryBookDto libraryBookDto, string dirFullPath, string extension, bool returnFirstExisting = false)
|
||||||
=> getFileNamingTemplate(libraryBookDto, Configuration.Instance.FileTemplate, dirFullPath, extension)
|
=> getFileNamingTemplate(libraryBookDto, Configuration.Instance.FileTemplate, dirFullPath, extension)
|
||||||
.GetFilePath();
|
.GetFilePath(returnFirstExisting);
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
46
LibationWinForms/Dialogs/SettingsDialog.AudioSettings.cs
Normal file
46
LibationWinForms/Dialogs/SettingsDialog.AudioSettings.cs
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace LibationWinForms.Dialogs
|
||||||
|
{
|
||||||
|
partial class SettingsDialog
|
||||||
|
{
|
||||||
|
private void lameTargetRb_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
lameBitrateGb.Enabled = lameTargetBitrateRb.Checked;
|
||||||
|
lameQualityGb.Enabled = !lameTargetBitrateRb.Checked;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LameMatchSourceBRCbox_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
lameBitrateTb.Enabled = !LameMatchSourceBRCbox.Checked;
|
||||||
|
lameConstantBitrateCbox.Enabled = !LameMatchSourceBRCbox.Checked;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void convertFormatRb_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
lameOptionsGb.Enabled = convertLossyRb.Checked;
|
||||||
|
lameTargetRb_CheckedChanged(sender, e);
|
||||||
|
LameMatchSourceBRCbox_CheckedChanged(sender, e);
|
||||||
|
}
|
||||||
|
private void allowLibationFixupCbox_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
convertLosslessRb.Enabled = allowLibationFixupCbox.Checked;
|
||||||
|
convertLossyRb.Enabled = allowLibationFixupCbox.Checked;
|
||||||
|
splitFilesByChapterCbox.Enabled = allowLibationFixupCbox.Checked;
|
||||||
|
stripUnabridgedCbox.Enabled = allowLibationFixupCbox.Checked;
|
||||||
|
stripAudibleBrandingCbox.Enabled = allowLibationFixupCbox.Checked;
|
||||||
|
|
||||||
|
if (!allowLibationFixupCbox.Checked)
|
||||||
|
{
|
||||||
|
convertLosslessRb.Checked = true;
|
||||||
|
splitFilesByChapterCbox.Checked = false;
|
||||||
|
stripUnabridgedCbox.Checked = false;
|
||||||
|
stripAudibleBrandingCbox.Checked = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
551
LibationWinForms/Dialogs/SettingsDialog.Designer.cs
generated
551
LibationWinForms/Dialogs/SettingsDialog.Designer.cs
generated
@ -39,7 +39,6 @@
|
|||||||
this.badBookRetryRb = new System.Windows.Forms.RadioButton();
|
this.badBookRetryRb = new System.Windows.Forms.RadioButton();
|
||||||
this.badBookAbortRb = new System.Windows.Forms.RadioButton();
|
this.badBookAbortRb = new System.Windows.Forms.RadioButton();
|
||||||
this.badBookAskRb = new System.Windows.Forms.RadioButton();
|
this.badBookAskRb = new System.Windows.Forms.RadioButton();
|
||||||
this.decryptAndConvertGb = new System.Windows.Forms.GroupBox();
|
|
||||||
this.stripAudibleBrandingCbox = new System.Windows.Forms.CheckBox();
|
this.stripAudibleBrandingCbox = new System.Windows.Forms.CheckBox();
|
||||||
this.splitFilesByChapterCbox = new System.Windows.Forms.CheckBox();
|
this.splitFilesByChapterCbox = new System.Windows.Forms.CheckBox();
|
||||||
this.allowLibationFixupCbox = new System.Windows.Forms.CheckBox();
|
this.allowLibationFixupCbox = new System.Windows.Forms.CheckBox();
|
||||||
@ -67,8 +66,41 @@
|
|||||||
this.folderTemplateBtn = new System.Windows.Forms.Button();
|
this.folderTemplateBtn = new System.Windows.Forms.Button();
|
||||||
this.folderTemplateTb = new System.Windows.Forms.TextBox();
|
this.folderTemplateTb = new System.Windows.Forms.TextBox();
|
||||||
this.folderTemplateLbl = new System.Windows.Forms.Label();
|
this.folderTemplateLbl = new System.Windows.Forms.Label();
|
||||||
|
this.tab4AudioFileOptions = new System.Windows.Forms.TabPage();
|
||||||
|
this.lameOptionsGb = new System.Windows.Forms.GroupBox();
|
||||||
|
this.lameDownsampleMonoCbox = new System.Windows.Forms.CheckBox();
|
||||||
|
this.lameBitrateGb = new System.Windows.Forms.GroupBox();
|
||||||
|
this.LameMatchSourceBRCbox = new System.Windows.Forms.CheckBox();
|
||||||
|
this.lameConstantBitrateCbox = new System.Windows.Forms.CheckBox();
|
||||||
|
this.label7 = new System.Windows.Forms.Label();
|
||||||
|
this.label6 = new System.Windows.Forms.Label();
|
||||||
|
this.label5 = new System.Windows.Forms.Label();
|
||||||
|
this.label4 = new System.Windows.Forms.Label();
|
||||||
|
this.label11 = new System.Windows.Forms.Label();
|
||||||
|
this.label3 = new System.Windows.Forms.Label();
|
||||||
|
this.lameBitrateTb = new System.Windows.Forms.TrackBar();
|
||||||
|
this.label1 = new System.Windows.Forms.Label();
|
||||||
|
this.lameQualityGb = new System.Windows.Forms.GroupBox();
|
||||||
|
this.label19 = new System.Windows.Forms.Label();
|
||||||
|
this.label18 = new System.Windows.Forms.Label();
|
||||||
|
this.label17 = new System.Windows.Forms.Label();
|
||||||
|
this.label16 = new System.Windows.Forms.Label();
|
||||||
|
this.label12 = new System.Windows.Forms.Label();
|
||||||
|
this.label15 = new System.Windows.Forms.Label();
|
||||||
|
this.label9 = new System.Windows.Forms.Label();
|
||||||
|
this.label8 = new System.Windows.Forms.Label();
|
||||||
|
this.label13 = new System.Windows.Forms.Label();
|
||||||
|
this.label10 = new System.Windows.Forms.Label();
|
||||||
|
this.label14 = new System.Windows.Forms.Label();
|
||||||
|
this.label2 = new System.Windows.Forms.Label();
|
||||||
|
this.lameVBRQualityTb = new System.Windows.Forms.TrackBar();
|
||||||
|
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
||||||
|
this.lameTargetQualityRb = new System.Windows.Forms.RadioButton();
|
||||||
|
this.lameTargetBitrateRb = new System.Windows.Forms.RadioButton();
|
||||||
|
this.stripUnabridgedCbox = new System.Windows.Forms.CheckBox();
|
||||||
|
this.retainAaxFileCbox = new System.Windows.Forms.CheckBox();
|
||||||
|
this.createCueSheetCbox = new System.Windows.Forms.CheckBox();
|
||||||
this.badBookGb.SuspendLayout();
|
this.badBookGb.SuspendLayout();
|
||||||
this.decryptAndConvertGb.SuspendLayout();
|
|
||||||
this.tabControl.SuspendLayout();
|
this.tabControl.SuspendLayout();
|
||||||
this.tab1ImportantSettings.SuspendLayout();
|
this.tab1ImportantSettings.SuspendLayout();
|
||||||
this.booksGb.SuspendLayout();
|
this.booksGb.SuspendLayout();
|
||||||
@ -76,6 +108,13 @@
|
|||||||
this.tab3DownloadDecrypt.SuspendLayout();
|
this.tab3DownloadDecrypt.SuspendLayout();
|
||||||
this.inProgressFilesGb.SuspendLayout();
|
this.inProgressFilesGb.SuspendLayout();
|
||||||
this.customFileNamingGb.SuspendLayout();
|
this.customFileNamingGb.SuspendLayout();
|
||||||
|
this.tab4AudioFileOptions.SuspendLayout();
|
||||||
|
this.lameOptionsGb.SuspendLayout();
|
||||||
|
this.lameBitrateGb.SuspendLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.lameBitrateTb)).BeginInit();
|
||||||
|
this.lameQualityGb.SuspendLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.lameVBRQualityTb)).BeginInit();
|
||||||
|
this.groupBox2.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// booksLocationDescLbl
|
// booksLocationDescLbl
|
||||||
@ -101,7 +140,7 @@
|
|||||||
// saveBtn
|
// saveBtn
|
||||||
//
|
//
|
||||||
this.saveBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
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, 523);
|
this.saveBtn.Location = new System.Drawing.Point(667, 441);
|
||||||
this.saveBtn.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
this.saveBtn.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
||||||
this.saveBtn.Name = "saveBtn";
|
this.saveBtn.Name = "saveBtn";
|
||||||
this.saveBtn.Size = new System.Drawing.Size(88, 27);
|
this.saveBtn.Size = new System.Drawing.Size(88, 27);
|
||||||
@ -114,7 +153,7 @@
|
|||||||
//
|
//
|
||||||
this.cancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
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.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||||
this.cancelBtn.Location = new System.Drawing.Point(832, 523);
|
this.cancelBtn.Location = new System.Drawing.Point(785, 441);
|
||||||
this.cancelBtn.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
this.cancelBtn.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
||||||
this.cancelBtn.Name = "cancelBtn";
|
this.cancelBtn.Name = "cancelBtn";
|
||||||
this.cancelBtn.Size = new System.Drawing.Size(88, 27);
|
this.cancelBtn.Size = new System.Drawing.Size(88, 27);
|
||||||
@ -149,9 +188,9 @@
|
|||||||
this.badBookGb.Controls.Add(this.badBookRetryRb);
|
this.badBookGb.Controls.Add(this.badBookRetryRb);
|
||||||
this.badBookGb.Controls.Add(this.badBookAbortRb);
|
this.badBookGb.Controls.Add(this.badBookAbortRb);
|
||||||
this.badBookGb.Controls.Add(this.badBookAskRb);
|
this.badBookGb.Controls.Add(this.badBookAskRb);
|
||||||
this.badBookGb.Location = new System.Drawing.Point(371, 6);
|
this.badBookGb.Location = new System.Drawing.Point(7, 6);
|
||||||
this.badBookGb.Name = "badBookGb";
|
this.badBookGb.Name = "badBookGb";
|
||||||
this.badBookGb.Size = new System.Drawing.Size(524, 168);
|
this.badBookGb.Size = new System.Drawing.Size(888, 76);
|
||||||
this.badBookGb.TabIndex = 13;
|
this.badBookGb.TabIndex = 13;
|
||||||
this.badBookGb.TabStop = false;
|
this.badBookGb.TabStop = false;
|
||||||
this.badBookGb.Text = "[bad book desc]";
|
this.badBookGb.Text = "[bad book desc]";
|
||||||
@ -159,7 +198,7 @@
|
|||||||
// badBookIgnoreRb
|
// badBookIgnoreRb
|
||||||
//
|
//
|
||||||
this.badBookIgnoreRb.AutoSize = true;
|
this.badBookIgnoreRb.AutoSize = true;
|
||||||
this.badBookIgnoreRb.Location = new System.Drawing.Point(6, 124);
|
this.badBookIgnoreRb.Location = new System.Drawing.Point(384, 47);
|
||||||
this.badBookIgnoreRb.Name = "badBookIgnoreRb";
|
this.badBookIgnoreRb.Name = "badBookIgnoreRb";
|
||||||
this.badBookIgnoreRb.Size = new System.Drawing.Size(94, 19);
|
this.badBookIgnoreRb.Size = new System.Drawing.Size(94, 19);
|
||||||
this.badBookIgnoreRb.TabIndex = 17;
|
this.badBookIgnoreRb.TabIndex = 17;
|
||||||
@ -170,7 +209,7 @@
|
|||||||
// badBookRetryRb
|
// badBookRetryRb
|
||||||
//
|
//
|
||||||
this.badBookRetryRb.AutoSize = true;
|
this.badBookRetryRb.AutoSize = true;
|
||||||
this.badBookRetryRb.Location = new System.Drawing.Point(6, 90);
|
this.badBookRetryRb.Location = new System.Drawing.Point(5, 47);
|
||||||
this.badBookRetryRb.Name = "badBookRetryRb";
|
this.badBookRetryRb.Name = "badBookRetryRb";
|
||||||
this.badBookRetryRb.Size = new System.Drawing.Size(84, 19);
|
this.badBookRetryRb.Size = new System.Drawing.Size(84, 19);
|
||||||
this.badBookRetryRb.TabIndex = 16;
|
this.badBookRetryRb.TabIndex = 16;
|
||||||
@ -181,7 +220,7 @@
|
|||||||
// badBookAbortRb
|
// badBookAbortRb
|
||||||
//
|
//
|
||||||
this.badBookAbortRb.AutoSize = true;
|
this.badBookAbortRb.AutoSize = true;
|
||||||
this.badBookAbortRb.Location = new System.Drawing.Point(6, 56);
|
this.badBookAbortRb.Location = new System.Drawing.Point(384, 22);
|
||||||
this.badBookAbortRb.Name = "badBookAbortRb";
|
this.badBookAbortRb.Name = "badBookAbortRb";
|
||||||
this.badBookAbortRb.Size = new System.Drawing.Size(88, 19);
|
this.badBookAbortRb.Size = new System.Drawing.Size(88, 19);
|
||||||
this.badBookAbortRb.TabIndex = 15;
|
this.badBookAbortRb.TabIndex = 15;
|
||||||
@ -200,34 +239,20 @@
|
|||||||
this.badBookAskRb.Text = "[ask desc]";
|
this.badBookAskRb.Text = "[ask desc]";
|
||||||
this.badBookAskRb.UseVisualStyleBackColor = true;
|
this.badBookAskRb.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// decryptAndConvertGb
|
|
||||||
//
|
|
||||||
this.decryptAndConvertGb.Controls.Add(this.stripAudibleBrandingCbox);
|
|
||||||
this.decryptAndConvertGb.Controls.Add(this.splitFilesByChapterCbox);
|
|
||||||
this.decryptAndConvertGb.Controls.Add(this.allowLibationFixupCbox);
|
|
||||||
this.decryptAndConvertGb.Controls.Add(this.convertLossyRb);
|
|
||||||
this.decryptAndConvertGb.Controls.Add(this.convertLosslessRb);
|
|
||||||
this.decryptAndConvertGb.Location = new System.Drawing.Point(6, 6);
|
|
||||||
this.decryptAndConvertGb.Name = "decryptAndConvertGb";
|
|
||||||
this.decryptAndConvertGb.Size = new System.Drawing.Size(359, 168);
|
|
||||||
this.decryptAndConvertGb.TabIndex = 9;
|
|
||||||
this.decryptAndConvertGb.TabStop = false;
|
|
||||||
this.decryptAndConvertGb.Text = "Decrypt and convert";
|
|
||||||
//
|
|
||||||
// stripAudibleBrandingCbox
|
// stripAudibleBrandingCbox
|
||||||
//
|
//
|
||||||
this.stripAudibleBrandingCbox.AutoSize = true;
|
this.stripAudibleBrandingCbox.AutoSize = true;
|
||||||
this.stripAudibleBrandingCbox.Location = new System.Drawing.Point(6, 72);
|
this.stripAudibleBrandingCbox.Location = new System.Drawing.Point(19, 143);
|
||||||
this.stripAudibleBrandingCbox.Name = "stripAudibleBrandingCbox";
|
this.stripAudibleBrandingCbox.Name = "stripAudibleBrandingCbox";
|
||||||
this.stripAudibleBrandingCbox.Size = new System.Drawing.Size(174, 19);
|
this.stripAudibleBrandingCbox.Size = new System.Drawing.Size(143, 34);
|
||||||
this.stripAudibleBrandingCbox.TabIndex = 13;
|
this.stripAudibleBrandingCbox.TabIndex = 13;
|
||||||
this.stripAudibleBrandingCbox.Text = "[StripAudibleBranding desc]";
|
this.stripAudibleBrandingCbox.Text = "[StripAudibleBranding\r\ndesc]";
|
||||||
this.stripAudibleBrandingCbox.UseVisualStyleBackColor = true;
|
this.stripAudibleBrandingCbox.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// splitFilesByChapterCbox
|
// splitFilesByChapterCbox
|
||||||
//
|
//
|
||||||
this.splitFilesByChapterCbox.AutoSize = true;
|
this.splitFilesByChapterCbox.AutoSize = true;
|
||||||
this.splitFilesByChapterCbox.Location = new System.Drawing.Point(6, 48);
|
this.splitFilesByChapterCbox.Location = new System.Drawing.Point(19, 93);
|
||||||
this.splitFilesByChapterCbox.Name = "splitFilesByChapterCbox";
|
this.splitFilesByChapterCbox.Name = "splitFilesByChapterCbox";
|
||||||
this.splitFilesByChapterCbox.Size = new System.Drawing.Size(162, 19);
|
this.splitFilesByChapterCbox.Size = new System.Drawing.Size(162, 19);
|
||||||
this.splitFilesByChapterCbox.TabIndex = 13;
|
this.splitFilesByChapterCbox.TabIndex = 13;
|
||||||
@ -239,7 +264,7 @@
|
|||||||
this.allowLibationFixupCbox.AutoSize = true;
|
this.allowLibationFixupCbox.AutoSize = true;
|
||||||
this.allowLibationFixupCbox.Checked = true;
|
this.allowLibationFixupCbox.Checked = true;
|
||||||
this.allowLibationFixupCbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
this.allowLibationFixupCbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||||
this.allowLibationFixupCbox.Location = new System.Drawing.Point(6, 23);
|
this.allowLibationFixupCbox.Location = new System.Drawing.Point(19, 18);
|
||||||
this.allowLibationFixupCbox.Name = "allowLibationFixupCbox";
|
this.allowLibationFixupCbox.Name = "allowLibationFixupCbox";
|
||||||
this.allowLibationFixupCbox.Size = new System.Drawing.Size(163, 19);
|
this.allowLibationFixupCbox.Size = new System.Drawing.Size(163, 19);
|
||||||
this.allowLibationFixupCbox.TabIndex = 10;
|
this.allowLibationFixupCbox.TabIndex = 10;
|
||||||
@ -250,24 +275,26 @@
|
|||||||
// convertLossyRb
|
// convertLossyRb
|
||||||
//
|
//
|
||||||
this.convertLossyRb.AutoSize = true;
|
this.convertLossyRb.AutoSize = true;
|
||||||
this.convertLossyRb.Location = new System.Drawing.Point(6, 143);
|
this.convertLossyRb.Location = new System.Drawing.Point(19, 207);
|
||||||
this.convertLossyRb.Name = "convertLossyRb";
|
this.convertLossyRb.Name = "convertLossyRb";
|
||||||
this.convertLossyRb.Size = new System.Drawing.Size(329, 19);
|
this.convertLossyRb.Size = new System.Drawing.Size(329, 19);
|
||||||
this.convertLossyRb.TabIndex = 12;
|
this.convertLossyRb.TabIndex = 12;
|
||||||
this.convertLossyRb.Text = "Download my books as .MP3 files (transcode if necessary)";
|
this.convertLossyRb.Text = "Download my books as .MP3 files (transcode if necessary)";
|
||||||
this.convertLossyRb.UseVisualStyleBackColor = true;
|
this.convertLossyRb.UseVisualStyleBackColor = true;
|
||||||
|
this.convertLossyRb.CheckedChanged += new System.EventHandler(this.convertFormatRb_CheckedChanged);
|
||||||
//
|
//
|
||||||
// convertLosslessRb
|
// convertLosslessRb
|
||||||
//
|
//
|
||||||
this.convertLosslessRb.AutoSize = true;
|
this.convertLosslessRb.AutoSize = true;
|
||||||
this.convertLosslessRb.Checked = true;
|
this.convertLosslessRb.Checked = true;
|
||||||
this.convertLosslessRb.Location = new System.Drawing.Point(6, 118);
|
this.convertLosslessRb.Location = new System.Drawing.Point(19, 182);
|
||||||
this.convertLosslessRb.Name = "convertLosslessRb";
|
this.convertLosslessRb.Name = "convertLosslessRb";
|
||||||
this.convertLosslessRb.Size = new System.Drawing.Size(335, 19);
|
this.convertLosslessRb.Size = new System.Drawing.Size(335, 19);
|
||||||
this.convertLosslessRb.TabIndex = 11;
|
this.convertLosslessRb.TabIndex = 11;
|
||||||
this.convertLosslessRb.TabStop = true;
|
this.convertLosslessRb.TabStop = true;
|
||||||
this.convertLosslessRb.Text = "Download my books in the original audio format (Lossless)";
|
this.convertLosslessRb.Text = "Download my books in the original audio format (Lossless)";
|
||||||
this.convertLosslessRb.UseVisualStyleBackColor = true;
|
this.convertLosslessRb.UseVisualStyleBackColor = true;
|
||||||
|
this.convertLosslessRb.CheckedChanged += new System.EventHandler(this.convertFormatRb_CheckedChanged);
|
||||||
//
|
//
|
||||||
// inProgressSelectControl
|
// inProgressSelectControl
|
||||||
//
|
//
|
||||||
@ -276,7 +303,7 @@
|
|||||||
this.inProgressSelectControl.Location = new System.Drawing.Point(7, 68);
|
this.inProgressSelectControl.Location = new System.Drawing.Point(7, 68);
|
||||||
this.inProgressSelectControl.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
|
this.inProgressSelectControl.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
|
||||||
this.inProgressSelectControl.Name = "inProgressSelectControl";
|
this.inProgressSelectControl.Name = "inProgressSelectControl";
|
||||||
this.inProgressSelectControl.Size = new System.Drawing.Size(875, 52);
|
this.inProgressSelectControl.Size = new System.Drawing.Size(828, 52);
|
||||||
this.inProgressSelectControl.TabIndex = 19;
|
this.inProgressSelectControl.TabIndex = 19;
|
||||||
//
|
//
|
||||||
// logsBtn
|
// logsBtn
|
||||||
@ -296,7 +323,7 @@
|
|||||||
this.booksSelectControl.Location = new System.Drawing.Point(7, 37);
|
this.booksSelectControl.Location = new System.Drawing.Point(7, 37);
|
||||||
this.booksSelectControl.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
|
this.booksSelectControl.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
|
||||||
this.booksSelectControl.Name = "booksSelectControl";
|
this.booksSelectControl.Name = "booksSelectControl";
|
||||||
this.booksSelectControl.Size = new System.Drawing.Size(876, 87);
|
this.booksSelectControl.Size = new System.Drawing.Size(829, 87);
|
||||||
this.booksSelectControl.TabIndex = 2;
|
this.booksSelectControl.TabIndex = 2;
|
||||||
//
|
//
|
||||||
// loggingLevelLbl
|
// loggingLevelLbl
|
||||||
@ -325,10 +352,11 @@
|
|||||||
this.tabControl.Controls.Add(this.tab1ImportantSettings);
|
this.tabControl.Controls.Add(this.tab1ImportantSettings);
|
||||||
this.tabControl.Controls.Add(this.tab2ImportLibrary);
|
this.tabControl.Controls.Add(this.tab2ImportLibrary);
|
||||||
this.tabControl.Controls.Add(this.tab3DownloadDecrypt);
|
this.tabControl.Controls.Add(this.tab3DownloadDecrypt);
|
||||||
|
this.tabControl.Controls.Add(this.tab4AudioFileOptions);
|
||||||
this.tabControl.Location = new System.Drawing.Point(12, 12);
|
this.tabControl.Location = new System.Drawing.Point(12, 12);
|
||||||
this.tabControl.Name = "tabControl";
|
this.tabControl.Name = "tabControl";
|
||||||
this.tabControl.SelectedIndex = 0;
|
this.tabControl.SelectedIndex = 0;
|
||||||
this.tabControl.Size = new System.Drawing.Size(909, 505);
|
this.tabControl.Size = new System.Drawing.Size(862, 423);
|
||||||
this.tabControl.TabIndex = 100;
|
this.tabControl.TabIndex = 100;
|
||||||
//
|
//
|
||||||
// tab1ImportantSettings
|
// tab1ImportantSettings
|
||||||
@ -340,7 +368,7 @@
|
|||||||
this.tab1ImportantSettings.Location = new System.Drawing.Point(4, 24);
|
this.tab1ImportantSettings.Location = new System.Drawing.Point(4, 24);
|
||||||
this.tab1ImportantSettings.Name = "tab1ImportantSettings";
|
this.tab1ImportantSettings.Name = "tab1ImportantSettings";
|
||||||
this.tab1ImportantSettings.Padding = new System.Windows.Forms.Padding(3);
|
this.tab1ImportantSettings.Padding = new System.Windows.Forms.Padding(3);
|
||||||
this.tab1ImportantSettings.Size = new System.Drawing.Size(901, 459);
|
this.tab1ImportantSettings.Size = new System.Drawing.Size(854, 395);
|
||||||
this.tab1ImportantSettings.TabIndex = 0;
|
this.tab1ImportantSettings.TabIndex = 0;
|
||||||
this.tab1ImportantSettings.Text = "Important settings";
|
this.tab1ImportantSettings.Text = "Important settings";
|
||||||
this.tab1ImportantSettings.UseVisualStyleBackColor = true;
|
this.tab1ImportantSettings.UseVisualStyleBackColor = true;
|
||||||
@ -353,7 +381,7 @@
|
|||||||
this.booksGb.Controls.Add(this.booksLocationDescLbl);
|
this.booksGb.Controls.Add(this.booksLocationDescLbl);
|
||||||
this.booksGb.Location = new System.Drawing.Point(6, 6);
|
this.booksGb.Location = new System.Drawing.Point(6, 6);
|
||||||
this.booksGb.Name = "booksGb";
|
this.booksGb.Name = "booksGb";
|
||||||
this.booksGb.Size = new System.Drawing.Size(889, 129);
|
this.booksGb.Size = new System.Drawing.Size(842, 129);
|
||||||
this.booksGb.TabIndex = 0;
|
this.booksGb.TabIndex = 0;
|
||||||
this.booksGb.TabStop = false;
|
this.booksGb.TabStop = false;
|
||||||
this.booksGb.Text = "Books location";
|
this.booksGb.Text = "Books location";
|
||||||
@ -366,7 +394,7 @@
|
|||||||
this.tab2ImportLibrary.Location = new System.Drawing.Point(4, 24);
|
this.tab2ImportLibrary.Location = new System.Drawing.Point(4, 24);
|
||||||
this.tab2ImportLibrary.Name = "tab2ImportLibrary";
|
this.tab2ImportLibrary.Name = "tab2ImportLibrary";
|
||||||
this.tab2ImportLibrary.Padding = new System.Windows.Forms.Padding(3);
|
this.tab2ImportLibrary.Padding = new System.Windows.Forms.Padding(3);
|
||||||
this.tab2ImportLibrary.Size = new System.Drawing.Size(901, 459);
|
this.tab2ImportLibrary.Size = new System.Drawing.Size(854, 395);
|
||||||
this.tab2ImportLibrary.TabIndex = 1;
|
this.tab2ImportLibrary.TabIndex = 1;
|
||||||
this.tab2ImportLibrary.Text = "Import library";
|
this.tab2ImportLibrary.Text = "Import library";
|
||||||
this.tab2ImportLibrary.UseVisualStyleBackColor = true;
|
this.tab2ImportLibrary.UseVisualStyleBackColor = true;
|
||||||
@ -385,12 +413,11 @@
|
|||||||
//
|
//
|
||||||
this.tab3DownloadDecrypt.Controls.Add(this.inProgressFilesGb);
|
this.tab3DownloadDecrypt.Controls.Add(this.inProgressFilesGb);
|
||||||
this.tab3DownloadDecrypt.Controls.Add(this.customFileNamingGb);
|
this.tab3DownloadDecrypt.Controls.Add(this.customFileNamingGb);
|
||||||
this.tab3DownloadDecrypt.Controls.Add(this.decryptAndConvertGb);
|
|
||||||
this.tab3DownloadDecrypt.Controls.Add(this.badBookGb);
|
this.tab3DownloadDecrypt.Controls.Add(this.badBookGb);
|
||||||
this.tab3DownloadDecrypt.Location = new System.Drawing.Point(4, 24);
|
this.tab3DownloadDecrypt.Location = new System.Drawing.Point(4, 24);
|
||||||
this.tab3DownloadDecrypt.Name = "tab3DownloadDecrypt";
|
this.tab3DownloadDecrypt.Name = "tab3DownloadDecrypt";
|
||||||
this.tab3DownloadDecrypt.Padding = new System.Windows.Forms.Padding(3);
|
this.tab3DownloadDecrypt.Padding = new System.Windows.Forms.Padding(3);
|
||||||
this.tab3DownloadDecrypt.Size = new System.Drawing.Size(901, 477);
|
this.tab3DownloadDecrypt.Size = new System.Drawing.Size(854, 395);
|
||||||
this.tab3DownloadDecrypt.TabIndex = 2;
|
this.tab3DownloadDecrypt.TabIndex = 2;
|
||||||
this.tab3DownloadDecrypt.Text = "Download/Decrypt";
|
this.tab3DownloadDecrypt.Text = "Download/Decrypt";
|
||||||
this.tab3DownloadDecrypt.UseVisualStyleBackColor = true;
|
this.tab3DownloadDecrypt.UseVisualStyleBackColor = true;
|
||||||
@ -401,9 +428,9 @@
|
|||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.inProgressFilesGb.Controls.Add(this.inProgressDescLbl);
|
this.inProgressFilesGb.Controls.Add(this.inProgressDescLbl);
|
||||||
this.inProgressFilesGb.Controls.Add(this.inProgressSelectControl);
|
this.inProgressFilesGb.Controls.Add(this.inProgressSelectControl);
|
||||||
this.inProgressFilesGb.Location = new System.Drawing.Point(7, 343);
|
this.inProgressFilesGb.Location = new System.Drawing.Point(7, 251);
|
||||||
this.inProgressFilesGb.Name = "inProgressFilesGb";
|
this.inProgressFilesGb.Name = "inProgressFilesGb";
|
||||||
this.inProgressFilesGb.Size = new System.Drawing.Size(888, 128);
|
this.inProgressFilesGb.Size = new System.Drawing.Size(841, 128);
|
||||||
this.inProgressFilesGb.TabIndex = 21;
|
this.inProgressFilesGb.TabIndex = 21;
|
||||||
this.inProgressFilesGb.TabStop = false;
|
this.inProgressFilesGb.TabStop = false;
|
||||||
this.inProgressFilesGb.Text = "In progress files";
|
this.inProgressFilesGb.Text = "In progress files";
|
||||||
@ -421,9 +448,9 @@
|
|||||||
this.customFileNamingGb.Controls.Add(this.folderTemplateBtn);
|
this.customFileNamingGb.Controls.Add(this.folderTemplateBtn);
|
||||||
this.customFileNamingGb.Controls.Add(this.folderTemplateTb);
|
this.customFileNamingGb.Controls.Add(this.folderTemplateTb);
|
||||||
this.customFileNamingGb.Controls.Add(this.folderTemplateLbl);
|
this.customFileNamingGb.Controls.Add(this.folderTemplateLbl);
|
||||||
this.customFileNamingGb.Location = new System.Drawing.Point(7, 180);
|
this.customFileNamingGb.Location = new System.Drawing.Point(7, 88);
|
||||||
this.customFileNamingGb.Name = "customFileNamingGb";
|
this.customFileNamingGb.Name = "customFileNamingGb";
|
||||||
this.customFileNamingGb.Size = new System.Drawing.Size(888, 157);
|
this.customFileNamingGb.Size = new System.Drawing.Size(841, 157);
|
||||||
this.customFileNamingGb.TabIndex = 20;
|
this.customFileNamingGb.TabIndex = 20;
|
||||||
this.customFileNamingGb.TabStop = false;
|
this.customFileNamingGb.TabStop = false;
|
||||||
this.customFileNamingGb.Text = "Custom file naming";
|
this.customFileNamingGb.Text = "Custom file naming";
|
||||||
@ -431,7 +458,7 @@
|
|||||||
// chapterFileTemplateBtn
|
// chapterFileTemplateBtn
|
||||||
//
|
//
|
||||||
this.chapterFileTemplateBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
this.chapterFileTemplateBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.chapterFileTemplateBtn.Location = new System.Drawing.Point(808, 124);
|
this.chapterFileTemplateBtn.Location = new System.Drawing.Point(761, 124);
|
||||||
this.chapterFileTemplateBtn.Name = "chapterFileTemplateBtn";
|
this.chapterFileTemplateBtn.Name = "chapterFileTemplateBtn";
|
||||||
this.chapterFileTemplateBtn.Size = new System.Drawing.Size(75, 23);
|
this.chapterFileTemplateBtn.Size = new System.Drawing.Size(75, 23);
|
||||||
this.chapterFileTemplateBtn.TabIndex = 8;
|
this.chapterFileTemplateBtn.TabIndex = 8;
|
||||||
@ -446,7 +473,7 @@
|
|||||||
this.chapterFileTemplateTb.Location = new System.Drawing.Point(6, 125);
|
this.chapterFileTemplateTb.Location = new System.Drawing.Point(6, 125);
|
||||||
this.chapterFileTemplateTb.Name = "chapterFileTemplateTb";
|
this.chapterFileTemplateTb.Name = "chapterFileTemplateTb";
|
||||||
this.chapterFileTemplateTb.ReadOnly = true;
|
this.chapterFileTemplateTb.ReadOnly = true;
|
||||||
this.chapterFileTemplateTb.Size = new System.Drawing.Size(796, 23);
|
this.chapterFileTemplateTb.Size = new System.Drawing.Size(749, 23);
|
||||||
this.chapterFileTemplateTb.TabIndex = 7;
|
this.chapterFileTemplateTb.TabIndex = 7;
|
||||||
//
|
//
|
||||||
// chapterFileTemplateLbl
|
// chapterFileTemplateLbl
|
||||||
@ -461,7 +488,7 @@
|
|||||||
// fileTemplateBtn
|
// fileTemplateBtn
|
||||||
//
|
//
|
||||||
this.fileTemplateBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
this.fileTemplateBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.fileTemplateBtn.Location = new System.Drawing.Point(808, 80);
|
this.fileTemplateBtn.Location = new System.Drawing.Point(761, 80);
|
||||||
this.fileTemplateBtn.Name = "fileTemplateBtn";
|
this.fileTemplateBtn.Name = "fileTemplateBtn";
|
||||||
this.fileTemplateBtn.Size = new System.Drawing.Size(75, 23);
|
this.fileTemplateBtn.Size = new System.Drawing.Size(75, 23);
|
||||||
this.fileTemplateBtn.TabIndex = 5;
|
this.fileTemplateBtn.TabIndex = 5;
|
||||||
@ -476,7 +503,7 @@
|
|||||||
this.fileTemplateTb.Location = new System.Drawing.Point(6, 81);
|
this.fileTemplateTb.Location = new System.Drawing.Point(6, 81);
|
||||||
this.fileTemplateTb.Name = "fileTemplateTb";
|
this.fileTemplateTb.Name = "fileTemplateTb";
|
||||||
this.fileTemplateTb.ReadOnly = true;
|
this.fileTemplateTb.ReadOnly = true;
|
||||||
this.fileTemplateTb.Size = new System.Drawing.Size(796, 23);
|
this.fileTemplateTb.Size = new System.Drawing.Size(749, 23);
|
||||||
this.fileTemplateTb.TabIndex = 4;
|
this.fileTemplateTb.TabIndex = 4;
|
||||||
//
|
//
|
||||||
// fileTemplateLbl
|
// fileTemplateLbl
|
||||||
@ -491,7 +518,7 @@
|
|||||||
// folderTemplateBtn
|
// folderTemplateBtn
|
||||||
//
|
//
|
||||||
this.folderTemplateBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
this.folderTemplateBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.folderTemplateBtn.Location = new System.Drawing.Point(807, 36);
|
this.folderTemplateBtn.Location = new System.Drawing.Point(760, 36);
|
||||||
this.folderTemplateBtn.Name = "folderTemplateBtn";
|
this.folderTemplateBtn.Name = "folderTemplateBtn";
|
||||||
this.folderTemplateBtn.Size = new System.Drawing.Size(75, 23);
|
this.folderTemplateBtn.Size = new System.Drawing.Size(75, 23);
|
||||||
this.folderTemplateBtn.TabIndex = 2;
|
this.folderTemplateBtn.TabIndex = 2;
|
||||||
@ -506,7 +533,7 @@
|
|||||||
this.folderTemplateTb.Location = new System.Drawing.Point(5, 37);
|
this.folderTemplateTb.Location = new System.Drawing.Point(5, 37);
|
||||||
this.folderTemplateTb.Name = "folderTemplateTb";
|
this.folderTemplateTb.Name = "folderTemplateTb";
|
||||||
this.folderTemplateTb.ReadOnly = true;
|
this.folderTemplateTb.ReadOnly = true;
|
||||||
this.folderTemplateTb.Size = new System.Drawing.Size(796, 23);
|
this.folderTemplateTb.Size = new System.Drawing.Size(749, 23);
|
||||||
this.folderTemplateTb.TabIndex = 1;
|
this.folderTemplateTb.TabIndex = 1;
|
||||||
//
|
//
|
||||||
// folderTemplateLbl
|
// folderTemplateLbl
|
||||||
@ -518,13 +545,390 @@
|
|||||||
this.folderTemplateLbl.TabIndex = 0;
|
this.folderTemplateLbl.TabIndex = 0;
|
||||||
this.folderTemplateLbl.Text = "[folder template desc]";
|
this.folderTemplateLbl.Text = "[folder template desc]";
|
||||||
//
|
//
|
||||||
|
// tab4AudioFileOptions
|
||||||
|
//
|
||||||
|
this.tab4AudioFileOptions.Controls.Add(this.lameOptionsGb);
|
||||||
|
this.tab4AudioFileOptions.Controls.Add(this.convertLossyRb);
|
||||||
|
this.tab4AudioFileOptions.Controls.Add(this.stripAudibleBrandingCbox);
|
||||||
|
this.tab4AudioFileOptions.Controls.Add(this.convertLosslessRb);
|
||||||
|
this.tab4AudioFileOptions.Controls.Add(this.stripUnabridgedCbox);
|
||||||
|
this.tab4AudioFileOptions.Controls.Add(this.splitFilesByChapterCbox);
|
||||||
|
this.tab4AudioFileOptions.Controls.Add(this.retainAaxFileCbox);
|
||||||
|
this.tab4AudioFileOptions.Controls.Add(this.createCueSheetCbox);
|
||||||
|
this.tab4AudioFileOptions.Controls.Add(this.allowLibationFixupCbox);
|
||||||
|
this.tab4AudioFileOptions.Location = new System.Drawing.Point(4, 24);
|
||||||
|
this.tab4AudioFileOptions.Name = "tab4AudioFileOptions";
|
||||||
|
this.tab4AudioFileOptions.Padding = new System.Windows.Forms.Padding(3);
|
||||||
|
this.tab4AudioFileOptions.Size = new System.Drawing.Size(854, 395);
|
||||||
|
this.tab4AudioFileOptions.TabIndex = 3;
|
||||||
|
this.tab4AudioFileOptions.Text = "Audio File Options";
|
||||||
|
this.tab4AudioFileOptions.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// lameOptionsGb
|
||||||
|
//
|
||||||
|
this.lameOptionsGb.Controls.Add(this.lameDownsampleMonoCbox);
|
||||||
|
this.lameOptionsGb.Controls.Add(this.lameBitrateGb);
|
||||||
|
this.lameOptionsGb.Controls.Add(this.label1);
|
||||||
|
this.lameOptionsGb.Controls.Add(this.lameQualityGb);
|
||||||
|
this.lameOptionsGb.Controls.Add(this.groupBox2);
|
||||||
|
this.lameOptionsGb.Location = new System.Drawing.Point(415, 18);
|
||||||
|
this.lameOptionsGb.Name = "lameOptionsGb";
|
||||||
|
this.lameOptionsGb.Size = new System.Drawing.Size(433, 371);
|
||||||
|
this.lameOptionsGb.TabIndex = 14;
|
||||||
|
this.lameOptionsGb.TabStop = false;
|
||||||
|
this.lameOptionsGb.Text = "Mp3 Encoding Options";
|
||||||
|
//
|
||||||
|
// lameDownsampleMonoCbox
|
||||||
|
//
|
||||||
|
this.lameDownsampleMonoCbox.AutoSize = true;
|
||||||
|
this.lameDownsampleMonoCbox.Location = new System.Drawing.Point(234, 35);
|
||||||
|
this.lameDownsampleMonoCbox.Name = "lameDownsampleMonoCbox";
|
||||||
|
this.lameDownsampleMonoCbox.Size = new System.Drawing.Size(184, 34);
|
||||||
|
this.lameDownsampleMonoCbox.TabIndex = 1;
|
||||||
|
this.lameDownsampleMonoCbox.Text = "Downsample stereo to mono?\r\n(Recommended)\r\n";
|
||||||
|
this.lameDownsampleMonoCbox.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// lameBitrateGb
|
||||||
|
//
|
||||||
|
this.lameBitrateGb.Controls.Add(this.LameMatchSourceBRCbox);
|
||||||
|
this.lameBitrateGb.Controls.Add(this.lameConstantBitrateCbox);
|
||||||
|
this.lameBitrateGb.Controls.Add(this.label7);
|
||||||
|
this.lameBitrateGb.Controls.Add(this.label6);
|
||||||
|
this.lameBitrateGb.Controls.Add(this.label5);
|
||||||
|
this.lameBitrateGb.Controls.Add(this.label4);
|
||||||
|
this.lameBitrateGb.Controls.Add(this.label11);
|
||||||
|
this.lameBitrateGb.Controls.Add(this.label3);
|
||||||
|
this.lameBitrateGb.Controls.Add(this.lameBitrateTb);
|
||||||
|
this.lameBitrateGb.Location = new System.Drawing.Point(6, 84);
|
||||||
|
this.lameBitrateGb.Name = "lameBitrateGb";
|
||||||
|
this.lameBitrateGb.Size = new System.Drawing.Size(421, 112);
|
||||||
|
this.lameBitrateGb.TabIndex = 0;
|
||||||
|
this.lameBitrateGb.TabStop = false;
|
||||||
|
this.lameBitrateGb.Text = "Bitrate";
|
||||||
|
//
|
||||||
|
// LameMatchSourceBRCbox
|
||||||
|
//
|
||||||
|
this.LameMatchSourceBRCbox.AutoSize = true;
|
||||||
|
this.LameMatchSourceBRCbox.Location = new System.Drawing.Point(260, 87);
|
||||||
|
this.LameMatchSourceBRCbox.Name = "LameMatchSourceBRCbox";
|
||||||
|
this.LameMatchSourceBRCbox.Size = new System.Drawing.Size(140, 19);
|
||||||
|
this.LameMatchSourceBRCbox.TabIndex = 3;
|
||||||
|
this.LameMatchSourceBRCbox.Text = "Match source bitrate?";
|
||||||
|
this.LameMatchSourceBRCbox.UseVisualStyleBackColor = true;
|
||||||
|
this.LameMatchSourceBRCbox.CheckedChanged += new System.EventHandler(this.LameMatchSourceBRCbox_CheckedChanged);
|
||||||
|
//
|
||||||
|
// lameConstantBitrateCbox
|
||||||
|
//
|
||||||
|
this.lameConstantBitrateCbox.AutoSize = true;
|
||||||
|
this.lameConstantBitrateCbox.Location = new System.Drawing.Point(6, 87);
|
||||||
|
this.lameConstantBitrateCbox.Name = "lameConstantBitrateCbox";
|
||||||
|
this.lameConstantBitrateCbox.Size = new System.Drawing.Size(216, 19);
|
||||||
|
this.lameConstantBitrateCbox.TabIndex = 2;
|
||||||
|
this.lameConstantBitrateCbox.Text = "Restrict encoder to constant bitrate?";
|
||||||
|
this.lameConstantBitrateCbox.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// label7
|
||||||
|
//
|
||||||
|
this.label7.AutoSize = true;
|
||||||
|
this.label7.BackColor = System.Drawing.SystemColors.ControlLightLight;
|
||||||
|
this.label7.Location = new System.Drawing.Point(390, 52);
|
||||||
|
this.label7.Name = "label7";
|
||||||
|
this.label7.Size = new System.Drawing.Size(25, 15);
|
||||||
|
this.label7.TabIndex = 1;
|
||||||
|
this.label7.Text = "320";
|
||||||
|
//
|
||||||
|
// label6
|
||||||
|
//
|
||||||
|
this.label6.AutoSize = true;
|
||||||
|
this.label6.BackColor = System.Drawing.SystemColors.ControlLightLight;
|
||||||
|
this.label6.Location = new System.Drawing.Point(309, 52);
|
||||||
|
this.label6.Name = "label6";
|
||||||
|
this.label6.Size = new System.Drawing.Size(25, 15);
|
||||||
|
this.label6.TabIndex = 1;
|
||||||
|
this.label6.Text = "256";
|
||||||
|
//
|
||||||
|
// label5
|
||||||
|
//
|
||||||
|
this.label5.AutoSize = true;
|
||||||
|
this.label5.BackColor = System.Drawing.SystemColors.ControlLightLight;
|
||||||
|
this.label5.Location = new System.Drawing.Point(228, 52);
|
||||||
|
this.label5.Name = "label5";
|
||||||
|
this.label5.Size = new System.Drawing.Size(25, 15);
|
||||||
|
this.label5.TabIndex = 1;
|
||||||
|
this.label5.Text = "192";
|
||||||
|
//
|
||||||
|
// label4
|
||||||
|
//
|
||||||
|
this.label4.AutoSize = true;
|
||||||
|
this.label4.BackColor = System.Drawing.SystemColors.ControlLightLight;
|
||||||
|
this.label4.Location = new System.Drawing.Point(147, 52);
|
||||||
|
this.label4.Name = "label4";
|
||||||
|
this.label4.Size = new System.Drawing.Size(25, 15);
|
||||||
|
this.label4.TabIndex = 1;
|
||||||
|
this.label4.Text = "128";
|
||||||
|
//
|
||||||
|
// label11
|
||||||
|
//
|
||||||
|
this.label11.AutoSize = true;
|
||||||
|
this.label11.BackColor = System.Drawing.SystemColors.ControlLightLight;
|
||||||
|
this.label11.Location = new System.Drawing.Point(10, 52);
|
||||||
|
this.label11.Name = "label11";
|
||||||
|
this.label11.Size = new System.Drawing.Size(19, 15);
|
||||||
|
this.label11.TabIndex = 1;
|
||||||
|
this.label11.Text = "16";
|
||||||
|
//
|
||||||
|
// label3
|
||||||
|
//
|
||||||
|
this.label3.AutoSize = true;
|
||||||
|
this.label3.BackColor = System.Drawing.SystemColors.ControlLightLight;
|
||||||
|
this.label3.Location = new System.Drawing.Point(71, 52);
|
||||||
|
this.label3.Name = "label3";
|
||||||
|
this.label3.Size = new System.Drawing.Size(19, 15);
|
||||||
|
this.label3.TabIndex = 1;
|
||||||
|
this.label3.Text = "64";
|
||||||
|
//
|
||||||
|
// lameBitrateTb
|
||||||
|
//
|
||||||
|
this.lameBitrateTb.BackColor = System.Drawing.SystemColors.ControlLightLight;
|
||||||
|
this.lameBitrateTb.LargeChange = 32;
|
||||||
|
this.lameBitrateTb.Location = new System.Drawing.Point(6, 22);
|
||||||
|
this.lameBitrateTb.Maximum = 320;
|
||||||
|
this.lameBitrateTb.Minimum = 16;
|
||||||
|
this.lameBitrateTb.Name = "lameBitrateTb";
|
||||||
|
this.lameBitrateTb.Size = new System.Drawing.Size(409, 45);
|
||||||
|
this.lameBitrateTb.SmallChange = 8;
|
||||||
|
this.lameBitrateTb.TabIndex = 0;
|
||||||
|
this.lameBitrateTb.TickFrequency = 16;
|
||||||
|
this.lameBitrateTb.Value = 64;
|
||||||
|
//
|
||||||
|
// label1
|
||||||
|
//
|
||||||
|
this.label1.AutoSize = true;
|
||||||
|
this.label1.Enabled = false;
|
||||||
|
this.label1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point);
|
||||||
|
this.label1.Location = new System.Drawing.Point(6, 353);
|
||||||
|
this.label1.Name = "label1";
|
||||||
|
this.label1.Size = new System.Drawing.Size(172, 15);
|
||||||
|
this.label1.TabIndex = 1;
|
||||||
|
this.label1.Text = "Using L.A.M.E. encoding engine";
|
||||||
|
//
|
||||||
|
// lameQualityGb
|
||||||
|
//
|
||||||
|
this.lameQualityGb.Controls.Add(this.label19);
|
||||||
|
this.lameQualityGb.Controls.Add(this.label18);
|
||||||
|
this.lameQualityGb.Controls.Add(this.label17);
|
||||||
|
this.lameQualityGb.Controls.Add(this.label16);
|
||||||
|
this.lameQualityGb.Controls.Add(this.label12);
|
||||||
|
this.lameQualityGb.Controls.Add(this.label15);
|
||||||
|
this.lameQualityGb.Controls.Add(this.label9);
|
||||||
|
this.lameQualityGb.Controls.Add(this.label8);
|
||||||
|
this.lameQualityGb.Controls.Add(this.label13);
|
||||||
|
this.lameQualityGb.Controls.Add(this.label10);
|
||||||
|
this.lameQualityGb.Controls.Add(this.label14);
|
||||||
|
this.lameQualityGb.Controls.Add(this.label2);
|
||||||
|
this.lameQualityGb.Controls.Add(this.lameVBRQualityTb);
|
||||||
|
this.lameQualityGb.Location = new System.Drawing.Point(6, 202);
|
||||||
|
this.lameQualityGb.Name = "lameQualityGb";
|
||||||
|
this.lameQualityGb.Size = new System.Drawing.Size(421, 109);
|
||||||
|
this.lameQualityGb.TabIndex = 0;
|
||||||
|
this.lameQualityGb.TabStop = false;
|
||||||
|
this.lameQualityGb.Text = "Quality";
|
||||||
|
//
|
||||||
|
// label19
|
||||||
|
//
|
||||||
|
this.label19.AutoSize = true;
|
||||||
|
this.label19.Location = new System.Drawing.Point(349, 52);
|
||||||
|
this.label19.Name = "label19";
|
||||||
|
this.label19.Size = new System.Drawing.Size(20, 15);
|
||||||
|
this.label19.TabIndex = 1;
|
||||||
|
this.label19.Text = "V8";
|
||||||
|
//
|
||||||
|
// label18
|
||||||
|
//
|
||||||
|
this.label18.AutoSize = true;
|
||||||
|
this.label18.Location = new System.Drawing.Point(307, 52);
|
||||||
|
this.label18.Name = "label18";
|
||||||
|
this.label18.Size = new System.Drawing.Size(20, 15);
|
||||||
|
this.label18.TabIndex = 1;
|
||||||
|
this.label18.Text = "V7";
|
||||||
|
//
|
||||||
|
// label17
|
||||||
|
//
|
||||||
|
this.label17.AutoSize = true;
|
||||||
|
this.label17.Location = new System.Drawing.Point(265, 52);
|
||||||
|
this.label17.Name = "label17";
|
||||||
|
this.label17.Size = new System.Drawing.Size(20, 15);
|
||||||
|
this.label17.TabIndex = 1;
|
||||||
|
this.label17.Text = "V6";
|
||||||
|
//
|
||||||
|
// label16
|
||||||
|
//
|
||||||
|
this.label16.AutoSize = true;
|
||||||
|
this.label16.Location = new System.Drawing.Point(223, 52);
|
||||||
|
this.label16.Name = "label16";
|
||||||
|
this.label16.Size = new System.Drawing.Size(20, 15);
|
||||||
|
this.label16.TabIndex = 1;
|
||||||
|
this.label16.Text = "V5";
|
||||||
|
//
|
||||||
|
// label12
|
||||||
|
//
|
||||||
|
this.label12.AutoSize = true;
|
||||||
|
this.label12.Location = new System.Drawing.Point(182, 52);
|
||||||
|
this.label12.Name = "label12";
|
||||||
|
this.label12.Size = new System.Drawing.Size(20, 15);
|
||||||
|
this.label12.TabIndex = 1;
|
||||||
|
this.label12.Text = "V4";
|
||||||
|
//
|
||||||
|
// label15
|
||||||
|
//
|
||||||
|
this.label15.AutoSize = true;
|
||||||
|
this.label15.Location = new System.Drawing.Point(140, 52);
|
||||||
|
this.label15.Name = "label15";
|
||||||
|
this.label15.Size = new System.Drawing.Size(20, 15);
|
||||||
|
this.label15.TabIndex = 1;
|
||||||
|
this.label15.Text = "V3";
|
||||||
|
//
|
||||||
|
// label9
|
||||||
|
//
|
||||||
|
this.label9.AutoSize = true;
|
||||||
|
this.label9.Location = new System.Drawing.Point(97, 52);
|
||||||
|
this.label9.Name = "label9";
|
||||||
|
this.label9.Size = new System.Drawing.Size(20, 15);
|
||||||
|
this.label9.TabIndex = 1;
|
||||||
|
this.label9.Text = "V2";
|
||||||
|
//
|
||||||
|
// label8
|
||||||
|
//
|
||||||
|
this.label8.AutoSize = true;
|
||||||
|
this.label8.Location = new System.Drawing.Point(391, 52);
|
||||||
|
this.label8.Name = "label8";
|
||||||
|
this.label8.Size = new System.Drawing.Size(20, 15);
|
||||||
|
this.label8.TabIndex = 1;
|
||||||
|
this.label8.Text = "V9";
|
||||||
|
//
|
||||||
|
// label13
|
||||||
|
//
|
||||||
|
this.label13.AutoSize = true;
|
||||||
|
this.label13.Location = new System.Drawing.Point(376, 81);
|
||||||
|
this.label13.Name = "label13";
|
||||||
|
this.label13.Size = new System.Drawing.Size(39, 15);
|
||||||
|
this.label13.TabIndex = 1;
|
||||||
|
this.label13.Text = "Lower";
|
||||||
|
//
|
||||||
|
// label10
|
||||||
|
//
|
||||||
|
this.label10.AutoSize = true;
|
||||||
|
this.label10.Location = new System.Drawing.Point(6, 81);
|
||||||
|
this.label10.Name = "label10";
|
||||||
|
this.label10.Size = new System.Drawing.Size(43, 15);
|
||||||
|
this.label10.TabIndex = 1;
|
||||||
|
this.label10.Text = "Higher";
|
||||||
|
//
|
||||||
|
// label14
|
||||||
|
//
|
||||||
|
this.label14.AutoSize = true;
|
||||||
|
this.label14.Location = new System.Drawing.Point(56, 52);
|
||||||
|
this.label14.Name = "label14";
|
||||||
|
this.label14.Size = new System.Drawing.Size(20, 15);
|
||||||
|
this.label14.TabIndex = 1;
|
||||||
|
this.label14.Text = "V1";
|
||||||
|
//
|
||||||
|
// label2
|
||||||
|
//
|
||||||
|
this.label2.AutoSize = true;
|
||||||
|
this.label2.Location = new System.Drawing.Point(14, 52);
|
||||||
|
this.label2.Name = "label2";
|
||||||
|
this.label2.Size = new System.Drawing.Size(20, 15);
|
||||||
|
this.label2.TabIndex = 1;
|
||||||
|
this.label2.Text = "V0";
|
||||||
|
//
|
||||||
|
// lameVBRQualityTb
|
||||||
|
//
|
||||||
|
this.lameVBRQualityTb.BackColor = System.Drawing.SystemColors.ControlLightLight;
|
||||||
|
this.lameVBRQualityTb.LargeChange = 1;
|
||||||
|
this.lameVBRQualityTb.Location = new System.Drawing.Point(10, 22);
|
||||||
|
this.lameVBRQualityTb.Maximum = 9;
|
||||||
|
this.lameVBRQualityTb.Name = "lameVBRQualityTb";
|
||||||
|
this.lameVBRQualityTb.Size = new System.Drawing.Size(405, 45);
|
||||||
|
this.lameVBRQualityTb.TabIndex = 0;
|
||||||
|
this.lameVBRQualityTb.Value = 9;
|
||||||
|
//
|
||||||
|
// groupBox2
|
||||||
|
//
|
||||||
|
this.groupBox2.Controls.Add(this.lameTargetQualityRb);
|
||||||
|
this.groupBox2.Controls.Add(this.lameTargetBitrateRb);
|
||||||
|
this.groupBox2.Location = new System.Drawing.Point(6, 22);
|
||||||
|
this.groupBox2.Name = "groupBox2";
|
||||||
|
this.groupBox2.Size = new System.Drawing.Size(222, 56);
|
||||||
|
this.groupBox2.TabIndex = 0;
|
||||||
|
this.groupBox2.TabStop = false;
|
||||||
|
this.groupBox2.Text = "Target";
|
||||||
|
//
|
||||||
|
// lameTargetQualityRb
|
||||||
|
//
|
||||||
|
this.lameTargetQualityRb.AutoSize = true;
|
||||||
|
this.lameTargetQualityRb.Location = new System.Drawing.Point(138, 23);
|
||||||
|
this.lameTargetQualityRb.Name = "lameTargetQualityRb";
|
||||||
|
this.lameTargetQualityRb.Size = new System.Drawing.Size(63, 19);
|
||||||
|
this.lameTargetQualityRb.TabIndex = 0;
|
||||||
|
this.lameTargetQualityRb.TabStop = true;
|
||||||
|
this.lameTargetQualityRb.Text = "Quality";
|
||||||
|
this.lameTargetQualityRb.UseVisualStyleBackColor = true;
|
||||||
|
this.lameTargetQualityRb.CheckedChanged += new System.EventHandler(this.lameTargetRb_CheckedChanged);
|
||||||
|
//
|
||||||
|
// lameTargetBitrateRb
|
||||||
|
//
|
||||||
|
this.lameTargetBitrateRb.AutoSize = true;
|
||||||
|
this.lameTargetBitrateRb.Location = new System.Drawing.Point(6, 23);
|
||||||
|
this.lameTargetBitrateRb.Name = "lameTargetBitrateRb";
|
||||||
|
this.lameTargetBitrateRb.Size = new System.Drawing.Size(59, 19);
|
||||||
|
this.lameTargetBitrateRb.TabIndex = 0;
|
||||||
|
this.lameTargetBitrateRb.TabStop = true;
|
||||||
|
this.lameTargetBitrateRb.Text = "Bitrate";
|
||||||
|
this.lameTargetBitrateRb.UseVisualStyleBackColor = true;
|
||||||
|
this.lameTargetBitrateRb.CheckedChanged += new System.EventHandler(this.lameTargetRb_CheckedChanged);
|
||||||
|
//
|
||||||
|
// stripUnabridgedCbox
|
||||||
|
//
|
||||||
|
this.stripUnabridgedCbox.AutoSize = true;
|
||||||
|
this.stripUnabridgedCbox.Location = new System.Drawing.Point(19, 118);
|
||||||
|
this.stripUnabridgedCbox.Name = "stripUnabridgedCbox";
|
||||||
|
this.stripUnabridgedCbox.Size = new System.Drawing.Size(147, 19);
|
||||||
|
this.stripUnabridgedCbox.TabIndex = 13;
|
||||||
|
this.stripUnabridgedCbox.Text = "[StripUnabridged desc]";
|
||||||
|
this.stripUnabridgedCbox.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// retainAaxFileCbox
|
||||||
|
//
|
||||||
|
this.retainAaxFileCbox.AutoSize = true;
|
||||||
|
this.retainAaxFileCbox.Location = new System.Drawing.Point(19, 68);
|
||||||
|
this.retainAaxFileCbox.Name = "retainAaxFileCbox";
|
||||||
|
this.retainAaxFileCbox.Size = new System.Drawing.Size(132, 19);
|
||||||
|
this.retainAaxFileCbox.TabIndex = 10;
|
||||||
|
this.retainAaxFileCbox.Text = "[RetainAaxFile desc]";
|
||||||
|
this.retainAaxFileCbox.UseVisualStyleBackColor = true;
|
||||||
|
this.retainAaxFileCbox.CheckedChanged += new System.EventHandler(this.allowLibationFixupCbox_CheckedChanged);
|
||||||
|
//
|
||||||
|
// createCueSheetCbox
|
||||||
|
//
|
||||||
|
this.createCueSheetCbox.AutoSize = true;
|
||||||
|
this.createCueSheetCbox.Checked = true;
|
||||||
|
this.createCueSheetCbox.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||||
|
this.createCueSheetCbox.Location = new System.Drawing.Point(19, 43);
|
||||||
|
this.createCueSheetCbox.Name = "createCueSheetCbox";
|
||||||
|
this.createCueSheetCbox.Size = new System.Drawing.Size(145, 19);
|
||||||
|
this.createCueSheetCbox.TabIndex = 10;
|
||||||
|
this.createCueSheetCbox.Text = "[CreateCueSheet desc]";
|
||||||
|
this.createCueSheetCbox.UseVisualStyleBackColor = true;
|
||||||
|
this.createCueSheetCbox.CheckedChanged += new System.EventHandler(this.allowLibationFixupCbox_CheckedChanged);
|
||||||
|
//
|
||||||
// SettingsDialog
|
// SettingsDialog
|
||||||
//
|
//
|
||||||
this.AcceptButton = this.saveBtn;
|
this.AcceptButton = this.saveBtn;
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.CancelButton = this.cancelBtn;
|
this.CancelButton = this.cancelBtn;
|
||||||
this.ClientSize = new System.Drawing.Size(933, 566);
|
this.ClientSize = new System.Drawing.Size(886, 484);
|
||||||
this.Controls.Add(this.tabControl);
|
this.Controls.Add(this.tabControl);
|
||||||
this.Controls.Add(this.cancelBtn);
|
this.Controls.Add(this.cancelBtn);
|
||||||
this.Controls.Add(this.saveBtn);
|
this.Controls.Add(this.saveBtn);
|
||||||
@ -536,8 +940,6 @@
|
|||||||
this.Load += new System.EventHandler(this.SettingsDialog_Load);
|
this.Load += new System.EventHandler(this.SettingsDialog_Load);
|
||||||
this.badBookGb.ResumeLayout(false);
|
this.badBookGb.ResumeLayout(false);
|
||||||
this.badBookGb.PerformLayout();
|
this.badBookGb.PerformLayout();
|
||||||
this.decryptAndConvertGb.ResumeLayout(false);
|
|
||||||
this.decryptAndConvertGb.PerformLayout();
|
|
||||||
this.tabControl.ResumeLayout(false);
|
this.tabControl.ResumeLayout(false);
|
||||||
this.tab1ImportantSettings.ResumeLayout(false);
|
this.tab1ImportantSettings.ResumeLayout(false);
|
||||||
this.tab1ImportantSettings.PerformLayout();
|
this.tab1ImportantSettings.PerformLayout();
|
||||||
@ -550,6 +952,18 @@
|
|||||||
this.inProgressFilesGb.PerformLayout();
|
this.inProgressFilesGb.PerformLayout();
|
||||||
this.customFileNamingGb.ResumeLayout(false);
|
this.customFileNamingGb.ResumeLayout(false);
|
||||||
this.customFileNamingGb.PerformLayout();
|
this.customFileNamingGb.PerformLayout();
|
||||||
|
this.tab4AudioFileOptions.ResumeLayout(false);
|
||||||
|
this.tab4AudioFileOptions.PerformLayout();
|
||||||
|
this.lameOptionsGb.ResumeLayout(false);
|
||||||
|
this.lameOptionsGb.PerformLayout();
|
||||||
|
this.lameBitrateGb.ResumeLayout(false);
|
||||||
|
this.lameBitrateGb.PerformLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.lameBitrateTb)).EndInit();
|
||||||
|
this.lameQualityGb.ResumeLayout(false);
|
||||||
|
this.lameQualityGb.PerformLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.lameVBRQualityTb)).EndInit();
|
||||||
|
this.groupBox2.ResumeLayout(false);
|
||||||
|
this.groupBox2.PerformLayout();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -567,7 +981,6 @@
|
|||||||
private System.Windows.Forms.Button logsBtn;
|
private System.Windows.Forms.Button logsBtn;
|
||||||
private System.Windows.Forms.Label loggingLevelLbl;
|
private System.Windows.Forms.Label loggingLevelLbl;
|
||||||
private System.Windows.Forms.ComboBox loggingLevelCb;
|
private System.Windows.Forms.ComboBox loggingLevelCb;
|
||||||
private System.Windows.Forms.GroupBox decryptAndConvertGb;
|
|
||||||
private System.Windows.Forms.GroupBox badBookGb;
|
private System.Windows.Forms.GroupBox badBookGb;
|
||||||
private System.Windows.Forms.RadioButton badBookRetryRb;
|
private System.Windows.Forms.RadioButton badBookRetryRb;
|
||||||
private System.Windows.Forms.RadioButton badBookAbortRb;
|
private System.Windows.Forms.RadioButton badBookAbortRb;
|
||||||
@ -594,5 +1007,39 @@
|
|||||||
private System.Windows.Forms.Label folderTemplateLbl;
|
private System.Windows.Forms.Label folderTemplateLbl;
|
||||||
private System.Windows.Forms.CheckBox showImportedStatsCb;
|
private System.Windows.Forms.CheckBox showImportedStatsCb;
|
||||||
private System.Windows.Forms.CheckBox stripAudibleBrandingCbox;
|
private System.Windows.Forms.CheckBox stripAudibleBrandingCbox;
|
||||||
|
private System.Windows.Forms.TabPage tab4AudioFileOptions;
|
||||||
|
private System.Windows.Forms.CheckBox retainAaxFileCbox;
|
||||||
|
private System.Windows.Forms.CheckBox stripUnabridgedCbox;
|
||||||
|
private System.Windows.Forms.GroupBox lameOptionsGb;
|
||||||
|
private System.Windows.Forms.CheckBox lameDownsampleMonoCbox;
|
||||||
|
private System.Windows.Forms.GroupBox lameBitrateGb;
|
||||||
|
private System.Windows.Forms.TrackBar lameBitrateTb;
|
||||||
|
private System.Windows.Forms.GroupBox lameQualityGb;
|
||||||
|
private System.Windows.Forms.GroupBox groupBox2;
|
||||||
|
private System.Windows.Forms.RadioButton lameTargetQualityRb;
|
||||||
|
private System.Windows.Forms.RadioButton lameTargetBitrateRb;
|
||||||
|
private System.Windows.Forms.CheckBox lameConstantBitrateCbox;
|
||||||
|
private System.Windows.Forms.Label label7;
|
||||||
|
private System.Windows.Forms.Label label6;
|
||||||
|
private System.Windows.Forms.Label label5;
|
||||||
|
private System.Windows.Forms.Label label4;
|
||||||
|
private System.Windows.Forms.Label label3;
|
||||||
|
private System.Windows.Forms.Label label2;
|
||||||
|
private System.Windows.Forms.Label label9;
|
||||||
|
private System.Windows.Forms.Label label8;
|
||||||
|
private System.Windows.Forms.TrackBar lameVBRQualityTb;
|
||||||
|
private System.Windows.Forms.Label label11;
|
||||||
|
private System.Windows.Forms.CheckBox LameMatchSourceBRCbox;
|
||||||
|
private System.Windows.Forms.Label label1;
|
||||||
|
private System.Windows.Forms.Label label12;
|
||||||
|
private System.Windows.Forms.Label label10;
|
||||||
|
private System.Windows.Forms.Label label15;
|
||||||
|
private System.Windows.Forms.Label label13;
|
||||||
|
private System.Windows.Forms.Label label14;
|
||||||
|
private System.Windows.Forms.Label label19;
|
||||||
|
private System.Windows.Forms.Label label18;
|
||||||
|
private System.Windows.Forms.Label label17;
|
||||||
|
private System.Windows.Forms.Label label16;
|
||||||
|
private System.Windows.Forms.CheckBox createCueSheetCbox;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -35,6 +35,9 @@ namespace LibationWinForms.Dialogs
|
|||||||
this.allowLibationFixupCbox.Text = desc(nameof(config.AllowLibationFixup));
|
this.allowLibationFixupCbox.Text = desc(nameof(config.AllowLibationFixup));
|
||||||
this.splitFilesByChapterCbox.Text = desc(nameof(config.SplitFilesByChapter));
|
this.splitFilesByChapterCbox.Text = desc(nameof(config.SplitFilesByChapter));
|
||||||
this.stripAudibleBrandingCbox.Text = desc(nameof(config.StripAudibleBrandAudio));
|
this.stripAudibleBrandingCbox.Text = desc(nameof(config.StripAudibleBrandAudio));
|
||||||
|
this.retainAaxFileCbox.Text = desc(nameof(config.RetainAaxFile));
|
||||||
|
this.stripUnabridgedCbox.Text = desc(nameof(config.StripUnabridged));
|
||||||
|
this.createCueSheetCbox.Text = desc(nameof(config.CreateCueSheet));
|
||||||
|
|
||||||
booksSelectControl.SetSearchTitle("books location");
|
booksSelectControl.SetSearchTitle("books location");
|
||||||
booksSelectControl.SetDirectoryItems(
|
booksSelectControl.SetDirectoryItems(
|
||||||
@ -48,15 +51,30 @@ namespace LibationWinForms.Dialogs
|
|||||||
"Books");
|
"Books");
|
||||||
booksSelectControl.SelectDirectory(config.Books);
|
booksSelectControl.SelectDirectory(config.Books);
|
||||||
|
|
||||||
|
allowLibationFixupCbox.Checked = config.AllowLibationFixup;
|
||||||
|
createCueSheetCbox.Checked = config.CreateCueSheet;
|
||||||
|
retainAaxFileCbox.Checked = config.RetainAaxFile;
|
||||||
|
splitFilesByChapterCbox.Checked = config.SplitFilesByChapter;
|
||||||
|
stripUnabridgedCbox.Checked = config.StripUnabridged;
|
||||||
|
stripAudibleBrandingCbox.Checked = config.StripAudibleBrandAudio;
|
||||||
|
convertLosslessRb.Checked = !config.DecryptToLossy;
|
||||||
|
convertLossyRb.Checked = config.DecryptToLossy;
|
||||||
|
|
||||||
|
lameTargetBitrateRb.Checked = config.LameTargetBitrate;
|
||||||
|
lameTargetQualityRb.Checked = !config.LameTargetBitrate;
|
||||||
|
lameDownsampleMonoCbox.Checked = config.LameDownsampleMono;
|
||||||
|
lameBitrateTb.Value = config.LameBitrate;
|
||||||
|
lameConstantBitrateCbox.Checked = config.LameConstantBitrate;
|
||||||
|
LameMatchSourceBRCbox.Checked = config.LameMatchSourceBR;
|
||||||
|
lameVBRQualityTb.Value = config.LameVBRQuality;
|
||||||
|
|
||||||
showImportedStatsCb.Checked = config.ShowImportedStats;
|
showImportedStatsCb.Checked = config.ShowImportedStats;
|
||||||
importEpisodesCb.Checked = config.ImportEpisodes;
|
importEpisodesCb.Checked = config.ImportEpisodes;
|
||||||
downloadEpisodesCb.Checked = config.DownloadEpisodes;
|
downloadEpisodesCb.Checked = config.DownloadEpisodes;
|
||||||
allowLibationFixupCbox.Checked = config.AllowLibationFixup;
|
|
||||||
convertLosslessRb.Checked = !config.DecryptToLossy;
|
|
||||||
convertLossyRb.Checked = config.DecryptToLossy;
|
|
||||||
splitFilesByChapterCbox.Checked = config.SplitFilesByChapter;
|
|
||||||
stripAudibleBrandingCbox.Checked = config.StripAudibleBrandAudio;
|
|
||||||
|
|
||||||
|
lameTargetRb_CheckedChanged(this, e);
|
||||||
|
LameMatchSourceBRCbox_CheckedChanged(this, e);
|
||||||
|
convertFormatRb_CheckedChanged(this, e);
|
||||||
allowLibationFixupCbox_CheckedChanged(this, e);
|
allowLibationFixupCbox_CheckedChanged(this, e);
|
||||||
|
|
||||||
inProgressSelectControl.SetDirectoryItems(new()
|
inProgressSelectControl.SetDirectoryItems(new()
|
||||||
@ -92,21 +110,6 @@ namespace LibationWinForms.Dialogs
|
|||||||
chapterFileTemplateTb.Text = config.ChapterFileTemplate;
|
chapterFileTemplateTb.Text = config.ChapterFileTemplate;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void allowLibationFixupCbox_CheckedChanged(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
convertLosslessRb.Enabled = allowLibationFixupCbox.Checked;
|
|
||||||
convertLossyRb.Enabled = allowLibationFixupCbox.Checked;
|
|
||||||
splitFilesByChapterCbox.Enabled = allowLibationFixupCbox.Checked;
|
|
||||||
stripAudibleBrandingCbox.Enabled =allowLibationFixupCbox.Checked;
|
|
||||||
|
|
||||||
if (!allowLibationFixupCbox.Checked)
|
|
||||||
{
|
|
||||||
convertLosslessRb.Checked = true;
|
|
||||||
splitFilesByChapterCbox.Checked = false;
|
|
||||||
stripAudibleBrandingCbox.Checked = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void logsBtn_Click(object sender, EventArgs e) => Go.To.Folder(Configuration.Instance.LibationFiles);
|
private void logsBtn_Click(object sender, EventArgs e) => Go.To.Folder(Configuration.Instance.LibationFiles);
|
||||||
|
|
||||||
private void folderTemplateBtn_Click(object sender, EventArgs e) => editTemplate(Templates.Folder, folderTemplateTb);
|
private void folderTemplateBtn_Click(object sender, EventArgs e) => editTemplate(Templates.Folder, folderTemplateTb);
|
||||||
@ -172,13 +175,24 @@ namespace LibationWinForms.Dialogs
|
|||||||
MessageBoxVerboseLoggingWarning.ShowIfTrue();
|
MessageBoxVerboseLoggingWarning.ShowIfTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
config.AllowLibationFixup = allowLibationFixupCbox.Checked;
|
||||||
|
config.CreateCueSheet = createCueSheetCbox.Checked;
|
||||||
|
config.RetainAaxFile = retainAaxFileCbox.Checked;
|
||||||
|
config.SplitFilesByChapter = splitFilesByChapterCbox.Checked;
|
||||||
|
config.StripUnabridged = stripUnabridgedCbox.Checked;
|
||||||
|
config.StripAudibleBrandAudio = stripAudibleBrandingCbox.Checked;
|
||||||
|
config.DecryptToLossy = convertLossyRb.Checked;
|
||||||
|
|
||||||
|
config.LameTargetBitrate = lameTargetBitrateRb.Checked;
|
||||||
|
config.LameDownsampleMono = lameDownsampleMonoCbox.Checked;
|
||||||
|
config.LameBitrate = lameBitrateTb.Value;
|
||||||
|
config.LameConstantBitrate = lameConstantBitrateCbox.Checked;
|
||||||
|
config.LameMatchSourceBR = LameMatchSourceBRCbox.Checked;
|
||||||
|
config.LameVBRQuality = lameVBRQualityTb.Value;
|
||||||
|
|
||||||
config.ShowImportedStats = showImportedStatsCb.Checked;
|
config.ShowImportedStats = showImportedStatsCb.Checked;
|
||||||
config.ImportEpisodes = importEpisodesCb.Checked;
|
config.ImportEpisodes = importEpisodesCb.Checked;
|
||||||
config.DownloadEpisodes = downloadEpisodesCb.Checked;
|
config.DownloadEpisodes = downloadEpisodesCb.Checked;
|
||||||
config.AllowLibationFixup = allowLibationFixupCbox.Checked;
|
|
||||||
config.DecryptToLossy = convertLossyRb.Checked;
|
|
||||||
config.SplitFilesByChapter = splitFilesByChapterCbox.Checked;
|
|
||||||
config.StripAudibleBrandAudio = stripAudibleBrandingCbox.Checked;
|
|
||||||
|
|
||||||
config.InProgress = inProgressSelectControl.SelectedDirectory;
|
config.InProgress = inProgressSelectControl.SelectedDirectory;
|
||||||
|
|
||||||
@ -202,5 +216,6 @@ namespace LibationWinForms.Dialogs
|
|||||||
this.DialogResult = DialogResult.Cancel;
|
this.DialogResult = DialogResult.Cancel;
|
||||||
this.Close();
|
this.Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,6 +10,7 @@ using Dinah.Core.DataBinding;
|
|||||||
using Dinah.Core;
|
using Dinah.Core;
|
||||||
using Dinah.Core.Drawing;
|
using Dinah.Core.Drawing;
|
||||||
using LibationFileManager;
|
using LibationFileManager;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace LibationWinForms
|
namespace LibationWinForms
|
||||||
{
|
{
|
||||||
@ -39,6 +40,7 @@ namespace LibationWinForms
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool DownloadInProgress { get; private set; }
|
||||||
public string ProductRating { get; private set; }
|
public string ProductRating { get; private set; }
|
||||||
public string PurchaseDate { get; private set; }
|
public string PurchaseDate { get; private set; }
|
||||||
public string MyRating { get; private set; }
|
public string MyRating { get; private set; }
|
||||||
@ -77,6 +79,22 @@ namespace LibationWinForms
|
|||||||
|
|
||||||
public GridEntry(LibraryBook libraryBook) => setLibraryBook(libraryBook);
|
public GridEntry(LibraryBook libraryBook) => setLibraryBook(libraryBook);
|
||||||
|
|
||||||
|
public async Task DownloadBook()
|
||||||
|
{
|
||||||
|
if (!DownloadInProgress)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
DownloadInProgress = true;
|
||||||
|
await BookLiberation.ProcessorAutomationController.BackupSingleBookAsync(LibraryBook);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
DownloadInProgress = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void UpdateLibraryBook(LibraryBook libraryBook)
|
public void UpdateLibraryBook(LibraryBook libraryBook)
|
||||||
{
|
{
|
||||||
if (AudibleProductId != libraryBook.Book.AudibleProductId)
|
if (AudibleProductId != libraryBook.Book.AudibleProductId)
|
||||||
|
|||||||
@ -89,7 +89,7 @@ namespace LibationWinForms
|
|||||||
}
|
}
|
||||||
|
|
||||||
// else: liberate
|
// else: liberate
|
||||||
await BookLiberation.ProcessorAutomationController.BackupSingleBookAsync(libraryBook);
|
await liveGridEntry.DownloadBook();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Details_Click(GridEntry liveGridEntry)
|
private static void Details_Click(GridEntry liveGridEntry)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user