Book download validation: librarybook.accountname and/or book.locale is null/blank
This commit is contained in:
parent
6407d15fe0
commit
3941906d72
@ -23,6 +23,17 @@ namespace DtoImporterService
|
|||||||
|
|
||||||
private int upsertLibraryBooks(IEnumerable<Item> items)
|
private int upsertLibraryBooks(IEnumerable<Item> items)
|
||||||
{
|
{
|
||||||
|
// technically, we should be able to have duplicate books from separate accounts.
|
||||||
|
// this would violate the current pk and would be difficult to deal with elsewhere:
|
||||||
|
// - what to show in the grid
|
||||||
|
// - which to consider liberated
|
||||||
|
//
|
||||||
|
// sqlite cannot alter pk. the work around is an extensive headache. it'll be fixed in pre .net5/efcore5
|
||||||
|
//
|
||||||
|
// currently, inserting LibraryBook will throw error if the same book is in multiple accounts for the same region.
|
||||||
|
//
|
||||||
|
// CURRENT SOLUTION: don't re-insert
|
||||||
|
|
||||||
var currentLibraryProductIds = DbContext.Library.Select(l => l.Book.AudibleProductId).ToList();
|
var currentLibraryProductIds = DbContext.Library.Select(l => l.Book.AudibleProductId).ToList();
|
||||||
var newItems = items.Where(dto => !currentLibraryProductIds.Contains(dto.ProductId)).ToList();
|
var newItems = items.Where(dto => !currentLibraryProductIds.Contains(dto.ProductId)).ToList();
|
||||||
|
|
||||||
|
|||||||
@ -43,6 +43,8 @@ namespace FileLiberator
|
|||||||
|
|
||||||
private async Task<string> downloadBookAsync(LibraryBook libraryBook, string tempAaxFilename)
|
private async Task<string> downloadBookAsync(LibraryBook libraryBook, string tempAaxFilename)
|
||||||
{
|
{
|
||||||
|
validate(libraryBook);
|
||||||
|
|
||||||
var api = await AudibleApiActions.GetApiAsync(libraryBook.Account, libraryBook.Book.Locale);
|
var api = await AudibleApiActions.GetApiAsync(libraryBook.Account, libraryBook.Book.Locale);
|
||||||
|
|
||||||
var actualFilePath = await PerformDownloadAsync(
|
var actualFilePath = await PerformDownloadAsync(
|
||||||
@ -77,6 +79,28 @@ namespace FileLiberator
|
|||||||
throw ex;
|
throw ex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void validate(LibraryBook libraryBook)
|
||||||
|
{
|
||||||
|
string errorString(string field)
|
||||||
|
=> $"{errorTitle()}\r\nCannot download book. {field} is not known. Try re-importing the account which owns this book.";
|
||||||
|
|
||||||
|
string errorTitle()
|
||||||
|
{
|
||||||
|
var title
|
||||||
|
= (libraryBook.Book.Title.Length > 53)
|
||||||
|
? $"{libraryBook.Book.Title.Truncate(50)}..."
|
||||||
|
: libraryBook.Book.Title;
|
||||||
|
var errorBookTitle = $"{title} [{libraryBook.Book.AudibleProductId}]";
|
||||||
|
return errorBookTitle;
|
||||||
|
};
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(libraryBook.Account))
|
||||||
|
throw new Exception(errorString("Account"));
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(libraryBook.Book.Locale))
|
||||||
|
throw new Exception(errorString("Locale"));
|
||||||
|
}
|
||||||
|
|
||||||
private void moveBook(LibraryBook libraryBook, string actualFilePath)
|
private void moveBook(LibraryBook libraryBook, string actualFilePath)
|
||||||
{
|
{
|
||||||
var newAaxFilename = FileUtility.GetValidFilename(
|
var newAaxFilename = FileUtility.GetValidFilename(
|
||||||
|
|||||||
@ -13,7 +13,7 @@
|
|||||||
<!-- <PublishSingleFile>true</PublishSingleFile> -->
|
<!-- <PublishSingleFile>true</PublishSingleFile> -->
|
||||||
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
|
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
|
||||||
|
|
||||||
<Version>3.1.12.221</Version>
|
<Version>3.1.12.222</Version>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user