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" },