@class NSArray, NSDictionary, NSSet, NSString, NSMutableDictionary, FCMTWriterLock; @interface FCReadingHistory : FCPrivateDataController <FCClearableReadingHistory> { NSMutableDictionary *_itemsByIdentifier; NSMutableDictionary *_itemsByArticleID; FCMTWriterLock *_itemsLock; } @property (readonly, nonatomic) NSArray *sortedVisitedArticleIDs; @property (readonly, nonatomic) NSArray *sortedListenedArticleIDs; @property (readonly, nonatomic) NSArray *readingHistoryItems; @property (readonly, nonatomic) NSDictionary *readingHistoryItemsByArticleID; @property (readonly, nonatomic) NSSet *allReadArticleIDs; @property (readonly, nonatomic) NSSet *allSeenArticleIDs; @property (readonly, nonatomic) NSSet *allConsumedArticleIDs; @property (readonly, nonatomic) NSSet *allLikedArticleIDs; @property (readonly, nonatomic) NSSet *allDislikedArticleIDs; @property (readonly) unsigned long long hash; @property (readonly) Class superclass; @property (readonly, copy) NSString *description; @property (readonly, copy) NSString *debugDescription; + (id)desiredKeys; + (void)populateLocalStoreClassRegistry:(id)a0; + (unsigned long long)localStoreVersion; + (BOOL)requiresPushNotificationSupport; + (id)backingRecordZoneIDs; + (long long)commandQueueUrgency; + (void)configureKeyValueStoreForJSONHandling:(id)a0; + (id)commandsToMergeLocalDataToCloud:(id)a0 privateDataDirectory:(id)a1; + (id)backingRecordIDs; + (id)commandStoreFileName; + (id)localStoreFilename; + (BOOL)requiresHighPriorityFirstSync; + (BOOL)requiresBatchedSync; - (id)historyItemsByArticleIDForArticleIDs:(id)a0; - (BOOL)markArticleAsSeenWithHeadline:(id)a0; - (void)removeObserver:(id)a0; - (BOOL)markArticleAsReadWithArticleID:(id)a0 articleVersion:(long long)a1 readDate:(id)a2; - (BOOL)toggleDislikeForArticleWithID:(id)a0; - (BOOL)toggleArticleHasBeenMarkedAsOffensive:(id)a0; - (id)pruneRecords:(id)a0 forZoneName:(id)a1; - (void)loadLocalCachesFromStore; - (id)sortedVisitedArticleIDsSatisfying:(id /* block */)a0; - (BOOL)canHelpRestoreZoneName:(id)a0; - (id)listeningProgressSavedDateFor:(id)a0; - (void)markArticleAsReadWithHeadline:(id)a0; - (void)removeArticleFromHistory:(id)a0; - (BOOL)hasArticleBeenRemovedFromAudio:(id)a0; - (BOOL)markArticleAsSeenWithHeadline:(id)a0 rememberForever:(BOOL)a1; - (double)softMaxRecordAgeWhenMigratingZoneName:(id)a0; - (void)markArticleAsReadWithHeadline:(id)a0 fromGroupType:(long long)a1 swipedToArticle:(BOOL)a2 onScreenChecker:(id /* block */)a3; - (BOOL)hasArticleBeenRead:(id)a0; - (BOOL)hasArticleBeenSeen:(id)a0; - (unsigned long long)likingStatusForArticleID:(id)a0; - (long long)listenedCountFor:(id)a0; - (BOOL)hasArticleBeenMarkedAsOffensive:(id)a0; - (double)listeningProgressFor:(id)a0; - (id)localStoreMigrator; - (BOOL)hasArticleBeenVisited:(id)a0; - (id)firstSeenDateFor:(id)a0; - (id)lastListenedFor:(id)a0; - (BOOL)markArticle:(id)a0 withRemovedFromAudio:(BOOL)a1; - (BOOL)markArticle:(id)a0 withLikingStatus:(unsigned long long)a1; - (BOOL)markArticle:(id)a0 withCompletedListening:(BOOL)a1; - (id)lastVisitedDateForArticleID:(id)a0; - (id)consumedArticleIDsForTagID:(id)a0 fromTime:(id)a1; - (id)recordsForRestoringZoneName:(id)a0; - (BOOL)hasArticleCompletedReading:(id)a0; - (BOOL)hasArticleBeenConsumed:(id)a0; - (id)historyItemsForArticleIDs:(id)a0; - (id)allKnownRecordNamesWithinRecordZoneWithID:(id)a0; - (void)clearHistory; - (id)readingPositionSavedDateFor:(id)a0; - (BOOL)markArticle:(id)a0 withCompletedReading:(BOOL)a1; - (id)readingPositionJSONFor:(id)a0; - (void).cxx_destruct; - (id)markArticlesAsSeenWithHeadlines:(id)a0; - (void)handleSyncWithChangedRecords:(id)a0 deletedRecordNames:(id)a1; - (BOOL)canHelpPruneZoneName:(id)a0; - (BOOL)toggleLikeForArticleWithID:(id)a0; - (id)initWithContext:(id)a0 pushNotificationCenter:(id)a1 storeDirectory:(id)a2; - (void)markArticle:(id)a0 asArticleConsumed:(BOOL)a1 sourceChannelTagID:(id)a2; - (void)markArticle:(id)a0 withLastListened:(id)a1; - (id)mostRecentlyReadArticlesWithMaxCount:(unsigned long long)a0; - (void)markArticle:(id)a0 withReadingPositionJSON:(id)a1; - (void)addObserver:(id)a0; - (unsigned long long)softMaxRecordCountWhenMigratingZoneName:(id)a0; - (BOOL)hasArticleBeenReadMoreThanThreshold:(id)a0; - (id)mostRecentlyCompletedListeningArticlesWithMaxCount:(unsigned long long)a0; - (void)markArticle:(id)a0 withListeningProgress:(double)a1; - (void)markArticle:(id)a0 asOffensive:(BOOL)a1; - (BOOL)hasArticleCompletedListening:(id)a0; @end