diff --git a/AppScaffolding/AppScaffolding.csproj b/AppScaffolding/AppScaffolding.csproj
index e8098a05..0ee23e36 100644
--- a/AppScaffolding/AppScaffolding.csproj
+++ b/AppScaffolding/AppScaffolding.csproj
@@ -3,7 +3,7 @@
net5.0
- 6.2.8.1
+ 6.2.8.2
diff --git a/AudibleUtilities/_InternalsVisible.cs b/AudibleUtilities/_InternalsVisible.cs
new file mode 100644
index 00000000..68336e60
--- /dev/null
+++ b/AudibleUtilities/_InternalsVisible.cs
@@ -0,0 +1 @@
+[assembly: System.Runtime.CompilerServices.InternalsVisibleTo(nameof(AudibleUtilities) + ".Tests")]
\ No newline at end of file
diff --git a/FileLiberator/AudioFileStorageExt.cs b/FileLiberator/AudioFileStorageExt.cs
index 65dd3fcd..54f91eab 100644
--- a/FileLiberator/AudioFileStorageExt.cs
+++ b/FileLiberator/AudioFileStorageExt.cs
@@ -9,42 +9,45 @@ using LibationFileManager;
namespace FileLiberator
{
- public class MultipartRenamer
- {
- LibraryBook libraryBook;
-
- public MultipartRenamer(LibraryBook libraryBook) => this.libraryBook = libraryBook;
-
- public string MultipartFilename(string outputFileName, int partsPosition, int partsTotal, AAXClean.NewSplitCallback newSplitCallback)
- {
- var template = Path.ChangeExtension(outputFileName, null) + " - - " + Path.GetExtension(outputFileName);
-
- var fileTemplate = new FileTemplate(template) { IllegalCharacterReplacements = " " };
- fileTemplate.AddParameterReplacement("chapter", FileUtility.GetSequenceFormatted(partsPosition, partsTotal));
- fileTemplate.AddParameterReplacement("title", newSplitCallback?.Chapter?.Title ?? "");
-
- return fileTemplate.GetFilePath();
- }
- }
-
public static class AudioFileStorageExt
{
- public static MultipartRenamer CreateMultipartRenamer(this AudioFileStorage _, LibraryBook libraryBook) => CreateMultipartRenamer(libraryBook);
- public static MultipartRenamer CreateMultipartRenamer(LibraryBook libraryBook) => new(libraryBook);
+ private class MultipartRenamer
+ {
+ public LibraryBook LibraryBook { get; init; }
+
+ public string MultipartFilename(string outputFileName, int partsPosition, int partsTotal, AAXClean.NewSplitCallback newSplitCallback)
+ {
+ var extension = Path.GetExtension(outputFileName);
+ var baseFileName = AudioFileStorageExt.GetValidFilename(AudibleFileStorage.DecryptInProgressDirectory, LibraryBook.Book.Title, extension, LibraryBook);
+
+ var template = Path.ChangeExtension(baseFileName, null) + " - - " + extension;
+
+ var fileTemplate = new FileTemplate(template) { IllegalCharacterReplacements = " " };
+ fileTemplate.AddParameterReplacement("chapter", FileUtility.GetSequenceFormatted(partsPosition, partsTotal));
+ fileTemplate.AddParameterReplacement("title", newSplitCallback?.Chapter?.Title ?? "");
+
+ return fileTemplate.GetFilePath();
+ }
+ }
+
+ public static Func CreateMultipartRenamerFunc(this AudioFileStorage _, LibraryBook libraryBook)
+ => CreateMultipartRenamerFunc(libraryBook);
+ private static Func CreateMultipartRenamerFunc(LibraryBook libraryBook)
+ => new MultipartRenamer { LibraryBook = libraryBook }.MultipartFilename;
public static string GetInProgressFilename(this AudioFileStorage _, LibraryBook libraryBook, string extension)
=> GetInProgressFilename(libraryBook, extension);
- public static string GetInProgressFilename(LibraryBook libraryBook, string extension)
+ private static string GetInProgressFilename(LibraryBook libraryBook, string extension)
=> GetValidFilename(AudibleFileStorage.DecryptInProgressDirectory, libraryBook.Book.Title, extension, libraryBook);
public static string GetBooksDirectoryFilename(this AudioFileStorage _, LibraryBook libraryBook, string extension)
=> GetBooksDirectoryFilename(libraryBook, extension);
- public static string GetBooksDirectoryFilename(LibraryBook libraryBook, string extension)
+ private static string GetBooksDirectoryFilename(LibraryBook libraryBook, string extension)
=> GetValidFilename(AudibleFileStorage.BooksDirectory, libraryBook.Book.Title, extension, libraryBook);
public static string CreateDestinationDirectory(this AudioFileStorage _, LibraryBook libraryBook)
=> CreateDestinationDirectory(libraryBook);
- public static string CreateDestinationDirectory(LibraryBook libraryBook)
+ private static string CreateDestinationDirectory(LibraryBook libraryBook)
{
var title = libraryBook.Book.Title;
@@ -59,7 +62,7 @@ namespace FileLiberator
return destinationDir;
}
- public static string GetValidFilename(string dirFullPath, string filename, string extension, LibraryBook libraryBook)
+ internal static string GetValidFilename(string dirFullPath, string filename, string extension, LibraryBook libraryBook)
{
ArgumentValidator.EnsureNotNullOrWhiteSpace(dirFullPath, nameof(dirFullPath));
ArgumentValidator.EnsureNotNullOrWhiteSpace(filename, nameof(filename));
diff --git a/FileLiberator/DownloadDecryptBook.cs b/FileLiberator/DownloadDecryptBook.cs
index 41cbcbbc..ece04995 100644
--- a/FileLiberator/DownloadDecryptBook.cs
+++ b/FileLiberator/DownloadDecryptBook.cs
@@ -123,7 +123,7 @@ namespace FileLiberator
= contentLic.DrmType != AudibleApi.Common.DrmType.Adrm ? new UnencryptedAudiobookDownloader(outFileName, cacheDir, audiobookDlLic)
: Configuration.Instance.SplitFilesByChapter ? new AaxcDownloadMultiConverter(
outFileName, cacheDir, audiobookDlLic, outputFormat,
- AudibleFileStorage.Audio.CreateMultipartRenamer(libraryBook).MultipartFilename
+ AudibleFileStorage.Audio.CreateMultipartRenamerFunc(libraryBook)
)
: new AaxcDownloadSingleConverter(outFileName, cacheDir, audiobookDlLic, outputFormat);
abDownloader.DecryptProgressUpdate += (_, progress) => OnStreamingProgressChanged(progress);
diff --git a/FileLiberator/_InternalsVisible.cs b/FileLiberator/_InternalsVisible.cs
new file mode 100644
index 00000000..b5e38212
--- /dev/null
+++ b/FileLiberator/_InternalsVisible.cs
@@ -0,0 +1 @@
+[assembly: System.Runtime.CompilerServices.InternalsVisibleTo(nameof(FileLiberator) + ".Tests")]
\ No newline at end of file
diff --git a/FileManager/_InternalsVisible.cs b/FileManager/_InternalsVisible.cs
new file mode 100644
index 00000000..c351ee63
--- /dev/null
+++ b/FileManager/_InternalsVisible.cs
@@ -0,0 +1 @@
+[assembly: System.Runtime.CompilerServices.InternalsVisibleTo(nameof(FileManager) + ".Tests")]
\ No newline at end of file
diff --git a/LibationSearchEngine/_InternalsVisible.cs b/LibationSearchEngine/_InternalsVisible.cs
new file mode 100644
index 00000000..2db5bed5
--- /dev/null
+++ b/LibationSearchEngine/_InternalsVisible.cs
@@ -0,0 +1 @@
+[assembly: System.Runtime.CompilerServices.InternalsVisibleTo(nameof(LibationSearchEngine) + ".Tests")]
\ No newline at end of file