From 909a29535dc2971c5109fce239679d9ce8bc7f13 Mon Sep 17 00:00:00 2001 From: ExplorerNautilus <135869960+ExplorerNautilus@users.noreply.github.com> Date: Sat, 18 Nov 2023 18:06:32 -0800 Subject: [PATCH] Minor refactor on banned books removal --- Simplified/Book/Models/NYPLBook.h | 4 ++-- Simplified/Book/Models/NYPLBook.m | 17 ++++++++++++----- Simplified/Book/Models/NYPLBookRegistry.h | 4 ++-- Simplified/Book/Models/NYPLBookRegistry.m | 6 ++---- .../Catalog/NYPLCatalogFeedViewController.m | 2 +- Simplified/Catalog/NYPLCatalogGroupedFeed.m | 8 +------- Simplified/Catalog/NYPLCatalogUngroupedFeed.m | 8 +------- Simplified/OPDS/NYPLOPDSAcquisition.h | 4 +--- Simplified/OPDS/NYPLOPDSAcquisition.m | 7 ++----- 9 files changed, 24 insertions(+), 36 deletions(-) diff --git a/Simplified/Book/Models/NYPLBook.h b/Simplified/Book/Models/NYPLBook.h index 7b5ce30c3..ff1484639 100644 --- a/Simplified/Book/Models/NYPLBook.h +++ b/Simplified/Book/Models/NYPLBook.h @@ -102,9 +102,9 @@ /// @return The default NYPLBookContentType - (NYPLBookContentType)defaultBookContentType; -/// Add a custom expiration date to book if +/// Add a custom expiration date to banned book if /// 1. book is distributed by Axis360 /// 2. book does not contain an expiration date -- (void)addCustomExpirateDate:(nonnull NSDate *)date; +- (void)addBannedBookExpiration; @end diff --git a/Simplified/Book/Models/NYPLBook.m b/Simplified/Book/Models/NYPLBook.m index e16e6ffa1..6d0c1fe16 100644 --- a/Simplified/Book/Models/NYPLBook.m +++ b/Simplified/Book/Models/NYPLBook.m @@ -618,10 +618,9 @@ - (NYPLBookContentType)defaultBookContentType return defaultType; } -- (void)addCustomExpirateDate:(nonnull NSDate *)date +- (void)addBannedBookExpiration { - if (self.defaultAcquisitionIfOpenAccess.type && - [self.defaultAcquisitionIfOpenAccess.type isEqualToString:ContentTypeAxis360] && + if ([self.defaultAcquisitionIfOpenAccess.type isEqualToString:ContentTypeAxis360] && !self.defaultAcquisitionIfOpenAccess.availability.until) { NYPLOPDSAcquisitionAvailabilityLimited *currentAvailability = (NYPLOPDSAcquisitionAvailabilityLimited *)self.defaultAcquisition.availability; @@ -629,8 +628,16 @@ - (void)addCustomExpirateDate:(nonnull NSDate *)date initWithCopiesAvailable:currentAvailability.copiesAvailable copiesTotal:currentAvailability.copiesTotal since:currentAvailability.since - until:date]; - [self.defaultAcquisition updateAvailability:newAvailability]; + until:[self createBannedBookExpirationDate]]; + [self.defaultAcquisition setAvailability:newAvailability]; } } + +// Create an expiration date object with value of 2 months from now +- (NSDate *)createBannedBookExpirationDate { + NSDateComponents *dateComponents = [[NSDateComponents alloc] init]; + [dateComponents setMonth:2]; + NSCalendar *calendar = [NSCalendar currentCalendar]; + return [calendar dateByAddingComponents:dateComponents toDate:[NSDate new] options:0]; +} @end diff --git a/Simplified/Book/Models/NYPLBookRegistry.h b/Simplified/Book/Models/NYPLBookRegistry.h index bc80ee7e7..00e745dcd 100644 --- a/Simplified/Book/Models/NYPLBookRegistry.h +++ b/Simplified/Book/Models/NYPLBookRegistry.h @@ -110,10 +110,10 @@ typedef NS_ENUM(NSInteger, NYPLBookState); - (void)syncWithStandardAlertsOnCompletion; /** - Goes through all books in registry and remove the expired books distributed by Axis 360. + Goes through all books in registry and remove the expired banned books distributed by Axis 360. @note: Only call this function if the library does not require authentication */ -- (void)removeExpiredBooksWithoutFeed; +- (void)removeExpiredBannedBooks; // Adds a book to the book registry until it is manually removed. It allows the application to // present information about obtained books when offline. Attempting to add a book already present diff --git a/Simplified/Book/Models/NYPLBookRegistry.m b/Simplified/Book/Models/NYPLBookRegistry.m index e0b932802..a59bb60bf 100644 --- a/Simplified/Book/Models/NYPLBookRegistry.m +++ b/Simplified/Book/Models/NYPLBookRegistry.m @@ -448,16 +448,14 @@ - (void)syncWithStandardAlertsOnCompletion }]; } -- (void)removeExpiredBooksWithoutFeed +- (void)removeExpiredBannedBooks { @synchronized(self) { NSMutableArray *booksToRemove = [[NSMutableArray alloc] init]; for (NSString *bookIdentifer in self.identifiersToRecords) { NYPLBookRegistryRecord *record = self.identifiersToRecords[bookIdentifer]; // Add the book to remove list if it is distributed by Axis360 and expired - if(record && - record.book.defaultAcquisition.type && - [record.book.defaultAcquisition.type isEqualToString:ContentTypeAxis360]) { + if([record.book.defaultAcquisition.type isEqualToString:ContentTypeAxis360]) { if (record.book.defaultAcquisition.availability.until && [record.book.defaultAcquisition.availability.until compare:[NSDate date]] == NSOrderedAscending) { [booksToRemove addObject:bookIdentifer]; diff --git a/Simplified/Catalog/NYPLCatalogFeedViewController.m b/Simplified/Catalog/NYPLCatalogFeedViewController.m index 91b2d6dfe..a98e67b59 100644 --- a/Simplified/Catalog/NYPLCatalogFeedViewController.m +++ b/Simplified/Catalog/NYPLCatalogFeedViewController.m @@ -139,7 +139,7 @@ - (void)viewDidLoad [[NYPLBookRegistry sharedRegistry] justLoad]; if (!NYPLUserAccount.sharedAccount.requiresUserAuthentication) { - [[NYPLBookRegistry sharedRegistry] removeExpiredBooksWithoutFeed]; + [[NYPLBookRegistry sharedRegistry] removeExpiredBannedBooks]; } UIApplicationState applicationState = [[UIApplication sharedApplication] applicationState]; if (applicationState == UIApplicationStateActive) { diff --git a/Simplified/Catalog/NYPLCatalogGroupedFeed.m b/Simplified/Catalog/NYPLCatalogGroupedFeed.m index d051bbbec..f77acbe4f 100644 --- a/Simplified/Catalog/NYPLCatalogGroupedFeed.m +++ b/Simplified/Catalog/NYPLCatalogGroupedFeed.m @@ -91,12 +91,6 @@ - (instancetype)initWithOPDSFeed:(NYPLOPDSFeed *)feed NSMutableDictionary *const groupTitleToMutableBookArray = [NSMutableDictionary dictionary]; NSMutableDictionary *const groupTitleToURLOrNull = [NSMutableDictionary dictionary]; - // Create an expiration date object with value of 2 months from now - NSDateComponents *dateComponents = [[NSDateComponents alloc] init]; - [dateComponents setMonth:2]; - NSCalendar *calendar = [NSCalendar currentCalendar]; - NSDate *expirationDate = [calendar dateByAddingComponents:dateComponents toDate:[NSDate new] options:0]; - for(NYPLOPDSEntry *const entry in feed.entries) { if(!entry.groupAttributes) { NYPLLOG(@"Ignoring entry with missing group."); @@ -120,7 +114,7 @@ - (instancetype)initWithOPDSFeed:(NYPLOPDSFeed *)feed /// This expiration date will be overwritten by the updatedBookMetadata function below /// if the book is already checked out. if (!NYPLUserAccount.sharedAccount.requiresUserAuthentication) { - [book addCustomExpirateDate:expirationDate]; + [book addBannedBookExpiration]; } NYPLBook *updatedBook = [[NYPLBookRegistry sharedRegistry] updatedBookMetadata:book]; diff --git a/Simplified/Catalog/NYPLCatalogUngroupedFeed.m b/Simplified/Catalog/NYPLCatalogUngroupedFeed.m index f80b3359c..a259a30fc 100644 --- a/Simplified/Catalog/NYPLCatalogUngroupedFeed.m +++ b/Simplified/Catalog/NYPLCatalogUngroupedFeed.m @@ -38,12 +38,6 @@ - (instancetype)initWithOPDSFeed:(NYPLOPDSFeed *const)feed self.books = [NSMutableArray array]; - // Create an expiration date object with value of 2 months from now - NSDateComponents *dateComponents = [[NSDateComponents alloc] init]; - [dateComponents setMonth:2]; - NSCalendar *calendar = [NSCalendar currentCalendar]; - NSDate *expirationDate = [calendar dateByAddingComponents:dateComponents toDate:[NSDate new] options:0]; - for(NYPLOPDSEntry *const entry in feed.entries) { NYPLBook *book = [NYPLBook bookWithEntry:entry]; if(!book) { @@ -60,7 +54,7 @@ - (instancetype)initWithOPDSFeed:(NYPLOPDSFeed *const)feed /// This expiration date will be overwritten by the updatedBookMetadata function below /// if the book is already checked out. if (!NYPLUserAccount.sharedAccount.requiresUserAuthentication) { - [book addCustomExpirateDate:expirationDate]; + [book addBannedBookExpiration]; } NYPLBook *updatedBook = [[NYPLBookRegistry sharedRegistry] updatedBookMetadata:book]; diff --git a/Simplified/OPDS/NYPLOPDSAcquisition.h b/Simplified/OPDS/NYPLOPDSAcquisition.h index 446f992e3..9b8f36bb6 100644 --- a/Simplified/OPDS/NYPLOPDSAcquisition.h +++ b/Simplified/OPDS/NYPLOPDSAcquisition.h @@ -72,7 +72,7 @@ NYPLOPDSAcquisitionRelationString(NYPLOPDSAcquisitionRelation relation); @property (nonatomic, readonly, nonnull) NSArray *indirectAcquisitions; /// The availability of the result of the acquisition. -@property (nonatomic, readonly, nonnull) id availability; +@property (nonatomic, nonnull) id availability; + (instancetype _Null_unspecified)new NS_UNAVAILABLE; - (instancetype _Null_unspecified)init NS_UNAVAILABLE; @@ -100,6 +100,4 @@ NYPLOPDSAcquisitionRelationString(NYPLOPDSAcquisitionRelation relation); /// @c acquisitionWithDictionary: method for later deserialization. - (NSDictionary *_Nonnull)dictionaryRepresentation; -- (void)updateAvailability:(id _Nonnull)availability; - @end diff --git a/Simplified/OPDS/NYPLOPDSAcquisition.m b/Simplified/OPDS/NYPLOPDSAcquisition.m index b5e7138b7..34e073a4e 100644 --- a/Simplified/OPDS/NYPLOPDSAcquisition.m +++ b/Simplified/OPDS/NYPLOPDSAcquisition.m @@ -106,7 +106,8 @@ @interface NYPLOPDSAcquisition () @property (nonatomic, copy, nonnull) NSString *type; @property (nonatomic, nonnull) NSURL *hrefURL; @property (nonatomic, nonnull) NSArray *indirectAcquisitions; -@property (nonatomic, nonnull) id availability; +/// The NYPLOPDSAcquisitionAvailability property is omitted here because it's no longer a read only object. +/// Therefore, we do not need a private declaration in order to write to it. @end @@ -276,8 +277,4 @@ - (NSDictionary *_Nonnull)dictionaryRepresentation }; } -- (void)updateAvailability:(id _Nonnull)availability { - self.availability = availability; -} - @end