CLI: error when scan has new book with pdf attachment:

This commit is contained in:
Robert McRackan 2021-10-06 15:35:19 -04:00
parent 40520b89d1
commit 5f8c672361
4 changed files with 30 additions and 8 deletions

View File

@ -3,7 +3,7 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>net5.0</TargetFramework> <TargetFramework>net5.0</TargetFramework>
<Version>6.2.1.0</Version> <Version>6.2.2.0</Version>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View File

@ -47,7 +47,7 @@ namespace DataLayer
if (_tags != newTags) if (_tags != newTags)
{ {
_tags = newTags; _tags = newTags;
ItemChanged?.Invoke(this, nameof(Tags)); OnItemChanged(nameof(Tags));
} }
} }
} }
@ -112,6 +112,28 @@ namespace DataLayer
/// </summary> /// </summary>
public static event EventHandler<string> ItemChanged; public static event EventHandler<string> ItemChanged;
private void OnItemChanged(string e)
{
// HACK
// must not fire during initial import.
//
// these checks are necessary because current architecture attaches to this instead of attaching to an event *after* fully committed to db. the attached delegate/action sometimes calls commit:
//
// desired:
// - importing new book
// - update pdf status
// - initial book commit
//
// actual without these checks [BAD]:
// - importing new book
// - update pdf status
// - invoke event
// - commit UserDefinedItem
// - initial book commit
if (BookId > 0 && Book is not null && Book.BookId > 0)
ItemChanged?.Invoke(this, e);
}
private LiberatedStatus _bookStatus; private LiberatedStatus _bookStatus;
private LiberatedStatus? _pdfStatus; private LiberatedStatus? _pdfStatus;
public LiberatedStatus BookStatus public LiberatedStatus BookStatus
@ -122,7 +144,7 @@ namespace DataLayer
if (_bookStatus != value) if (_bookStatus != value)
{ {
_bookStatus = value; _bookStatus = value;
ItemChanged?.Invoke(this, nameof(BookStatus)); OnItemChanged(nameof(BookStatus));
} }
} }
} }
@ -134,7 +156,7 @@ namespace DataLayer
if (_pdfStatus != value) if (_pdfStatus != value)
{ {
_pdfStatus = value; _pdfStatus = value;
ItemChanged?.Invoke(this, nameof(PdfStatus)); OnItemChanged(nameof(PdfStatus));
} }
} }
} }

View File

@ -17,7 +17,7 @@ namespace FileLiberator
private Mp4File m4bBook; private Mp4File m4bBook;
private long fileSize; private long fileSize;
private string Mp3FileName(string m4bPath) => m4bPath is null ? string.Empty : PathLib.ReplaceExtension(m4bPath, ".mp3"); private static string Mp3FileName(string m4bPath) => m4bPath is null ? string.Empty : PathLib.ReplaceExtension(m4bPath, ".mp3");
public override void Cancel() => m4bBook?.Cancel(); public override void Cancel() => m4bBook?.Cancel();

View File

@ -24,13 +24,13 @@ namespace FileLiberator
public abstract Task<StatusHandler> ProcessAsync(LibraryBook libraryBook); public abstract Task<StatusHandler> ProcessAsync(LibraryBook libraryBook);
// when used in foreach: stateful. deferred execution // when used in foreach: stateful. deferred execution
protected IEnumerable<LibraryBook> GetValidLibraryBooks(IEnumerable<LibraryBook> library) public IEnumerable<LibraryBook> GetValidLibraryBooks(IEnumerable<LibraryBook> library)
=> library.Where(libraryBook => => library.Where(libraryBook =>
Validate(libraryBook) Validate(libraryBook)
&& (libraryBook.Book.ContentType != ContentType.Episode || FileManager.Configuration.Instance.DownloadEpisodes) && (libraryBook.Book.ContentType != ContentType.Episode || FileManager.Configuration.Instance.DownloadEpisodes)
); );
protected async Task<StatusHandler> ProcessSingleAsync(LibraryBook libraryBook, bool validate) public async Task<StatusHandler> ProcessSingleAsync(LibraryBook libraryBook, bool validate)
{ {
if (validate && !Validate(libraryBook)) if (validate && !Validate(libraryBook))
return new StatusHandler { "Validation failed" }; return new StatusHandler { "Validation failed" };
@ -50,7 +50,7 @@ namespace FileLiberator
return status; return status;
} }
protected async Task<StatusHandler> TryProcessAsync(LibraryBook libraryBook) public async Task<StatusHandler> TryProcessAsync(LibraryBook libraryBook)
=> Validate(libraryBook) => Validate(libraryBook)
? await ProcessAsync(libraryBook) ? await ProcessAsync(libraryBook)
: new StatusHandler(); : new StatusHandler();