diff --git a/Source/ApplicationServices/LibraryCommands.cs b/Source/ApplicationServices/LibraryCommands.cs index 8c90e207..8e56e9b3 100644 --- a/Source/ApplicationServices/LibraryCommands.cs +++ b/Source/ApplicationServices/LibraryCommands.cs @@ -126,7 +126,8 @@ namespace ApplicationServices | LibraryOptions.ResponseGroupOptions.Contributors | LibraryOptions.ResponseGroupOptions.ProvidedReview | LibraryOptions.ResponseGroupOptions.ProductPlans | LibraryOptions.ResponseGroupOptions.Series | LibraryOptions.ResponseGroupOptions.CategoryLadders | LibraryOptions.ResponseGroupOptions.ProductExtendedAttrs - | LibraryOptions.ResponseGroupOptions.PdfUrl | LibraryOptions.ResponseGroupOptions.OriginAsin, + | LibraryOptions.ResponseGroupOptions.PdfUrl | LibraryOptions.ResponseGroupOptions.OriginAsin + | LibraryOptions.ResponseGroupOptions.IsFinished, ImageSizes = LibraryOptions.ImageSizeOptions._500 | LibraryOptions.ImageSizeOptions._1215 }; var importItems = await scanAccountsAsync(apiExtendedfunc, accounts, libraryOptions); diff --git a/Source/ApplicationServices/LibraryExporter.cs b/Source/ApplicationServices/LibraryExporter.cs index def72c3d..c1f84769 100644 --- a/Source/ApplicationServices/LibraryExporter.cs +++ b/Source/ApplicationServices/LibraryExporter.cs @@ -115,6 +115,9 @@ namespace ApplicationServices [Name("LastDownloadedVersion")] public string LastDownloadedVersion { get; set; } + + [Name("IsFinished")] + public bool IsFinished { get; set; } } public static class LibToDtos { @@ -153,8 +156,8 @@ namespace ApplicationServices Language = a.Book.Language, LastDownloaded = a.Book.UserDefinedItem.LastDownloaded, LastDownloadedVersion = a.Book.UserDefinedItem.LastDownloadedVersion?.ToString() ?? "", - - }).ToList(); + IsFinished = a.Book.UserDefinedItem.IsFinished + }).ToList(); } public static class LibraryExporter { @@ -229,6 +232,7 @@ namespace ApplicationServices nameof(ExportDto.Language), nameof(ExportDto.LastDownloaded), nameof(ExportDto.LastDownloadedVersion), + nameof(ExportDto.IsFinished) }; var col = 0; foreach (var c in columns) @@ -306,6 +310,7 @@ namespace ApplicationServices } row.CreateCell(++col).SetCellValue(dto.LastDownloadedVersion); + row.CreateCell(++col).SetCellValue(dto.IsFinished); rowIndex++; } diff --git a/Source/AudibleUtilities/AudibleUtilities.csproj b/Source/AudibleUtilities/AudibleUtilities.csproj index 011e2ec8..28920625 100644 --- a/Source/AudibleUtilities/AudibleUtilities.csproj +++ b/Source/AudibleUtilities/AudibleUtilities.csproj @@ -5,7 +5,7 @@ - + diff --git a/Source/DataLayer/EfClasses/UserDefinedItem.cs b/Source/DataLayer/EfClasses/UserDefinedItem.cs index 4c12837a..dce1dfbe 100644 --- a/Source/DataLayer/EfClasses/UserDefinedItem.cs +++ b/Source/DataLayer/EfClasses/UserDefinedItem.cs @@ -195,7 +195,23 @@ namespace DataLayer } } } - #endregion + #endregion + + #region IsFinished + private bool _isFinished; + public bool IsFinished + { + get => _isFinished; + set + { + if (value != _isFinished) + { + _isFinished = value; + OnItemChanged(nameof(IsFinished)); + } + } + } + #endregion public override string ToString() => $"{Book} {Rating} {Tags}"; } diff --git a/Source/DtoImporterService/BookImporter.cs b/Source/DtoImporterService/BookImporter.cs index 58eb65f1..92ead237 100644 --- a/Source/DtoImporterService/BookImporter.cs +++ b/Source/DtoImporterService/BookImporter.cs @@ -164,6 +164,9 @@ namespace DtoImporterService if (item.PictureLarge is not null) book.PictureLarge = item.PictureLarge; + if (item.IsFinished is not null) + book.UserDefinedItem.IsFinished = item.IsFinished.Value; + // 2023-02-01 // updateBook must update language on books which were imported before the migration which added language. // Can eventually delete this diff --git a/Source/LibationSearchEngine/SearchEngine.cs b/Source/LibationSearchEngine/SearchEngine.cs index 41a066b2..79284bf2 100644 --- a/Source/LibationSearchEngine/SearchEngine.cs +++ b/Source/LibationSearchEngine/SearchEngine.cs @@ -55,6 +55,7 @@ namespace LibationSearchEngine { FieldType.Bool, lb => lb.Book.IsEpisodeChild().ToString(), "Podcast", "Podcasts", "IsPodcast", "Episode", "Episodes", "IsEpisode" }, { FieldType.Bool, lb => lb.AbsentFromLastScan.ToString(), "AbsentFromLastScan", "Absent" }, { FieldType.Bool, lb => (!string.IsNullOrWhiteSpace(lb.Book.SeriesNames())).ToString(), "IsInSeries", "InSeries" }, + { FieldType.Bool, lb => lb.Book.UserDefinedItem.IsFinished.ToString(), nameof(UserDefinedItem.IsFinished), "Finished", "IsFinished" }, // all numbers are padded to 8 char.s // This will allow a single method to auto-pad numbers. The method will match these as well as date: yyyymmdd { FieldType.Number, lb => lb.Book.LengthInMinutes.ToLuceneString(), nameof(Book.LengthInMinutes), "Length", "Minutes" },