using AaxDecrypter; using DataLayer; using LibationFileManager; using LibationFileManager.Templates; using System; using System.Linq; namespace FileLiberator; public static class AudioFileStorageExt { /// /// DownloadDecryptBook: /// File path for where to move files into. /// Path: directory nested inside of Books directory /// File name: n/a /// public static string GetDestinationDirectory(this AudioFileStorage _, LibraryBook libraryBook, Configuration? config = null) { if (AudibleFileStorage.BooksDirectory is not { } books) throw new InvalidOperationException("Books directory is not set."); config ??= Configuration.Instance; if (libraryBook.Book.IsEpisodeChild() && config.SavePodcastsToParentFolder) { var series = libraryBook.Book.SeriesLink.SingleOrDefault(); if (series is not null) { LibraryBook? seriesParent = ApplicationServices.DbContexts.GetLibraryBook_Flat_NoTracking(series.Series.AudibleSeriesId); if (seriesParent is not null) { return Templates.Folder.GetFilename(seriesParent.ToDto(), books, ""); } } } return Templates.Folder.GetFilename(libraryBook.ToDto(), books, ""); } /// /// PDF: audio file does not exist /// public static string GetBooksDirectoryFilename(this AudioFileStorage _, LibraryBook libraryBook, string extension, bool returnFirstExisting = false) => AudibleFileStorage.BooksDirectory is { } books ? Templates.File.GetFilename(libraryBook.ToDto(), books, extension, null, returnFirstExisting) : throw new InvalidOperationException("Books directory is not set."); /// /// PDF: audio file already exists /// public static string GetCustomDirFilename(this AudioFileStorage _, LibraryBook libraryBook, string dirFullPath, string extension, MultiConvertFileProperties? partProperties = null, bool returnFirstExisting = false) => partProperties is null ? Templates.File.GetFilename(libraryBook.ToDto(), dirFullPath, extension, returnFirstExisting: returnFirstExisting) : Templates.ChapterFile.GetFilename(libraryBook.ToDto(), partProperties, dirFullPath, extension, returnFirstExisting: returnFirstExisting); }