@class EDThreadScopeManager, EMBlockedSenderManager, EDMessagePersistence, NSString, NSMutableSet, NSMutableArray, EDPersistenceHookRegistry, EFSQLTableSchema, NSObject, EDPersistenceDatabase, EFDebouncer; @protocol OS_os_log, EMVIPManager, EFScheduler; @interface EDThreadPersistence : NSObject <EDDatabaseChangeHookResponder, EDAccountChangeHookResponder, EDMailboxChangeHookResponder, EDMessageChangeHookResponder, EDProtectedDataReconciliationHookResponder, EDSenderBucketChangeHookResponder, EDThreadScopeManagerDataSource, EFSignpostable, EDPersistenceDatabaseSchemaProvider, EFLoggable> { NSMutableSet *_threadObjectIDsToRecompute; struct os_unfair_lock_s { unsigned int _os_unfair_lock_opaque; } _threadRecomputationLock; NSMutableArray *_migratingThreadScopes; struct os_unfair_lock_s { unsigned int _os_unfair_lock_opaque; } _migratingThreadScopesLock; } @property (class, readonly, nonatomic) EFSQLTableSchema *threadScopesTableSchema; @property (class, readonly, nonatomic) EFSQLTableSchema *threadsTableSchema; @property (class, readonly, nonatomic) EFSQLTableSchema *threadMailboxesTableSchema; @property (class, readonly, nonatomic) EFSQLTableSchema *threadSendersTableSchema; @property (class, readonly, nonatomic) EFSQLTableSchema *threadRecipientsTableSchema; @property (class, readonly) NSObject<OS_os_log> *signpostLog; @property (class, readonly) NSObject<OS_os_log> *log; @property (readonly, nonatomic) EDMessagePersistence *messagePersistence; @property (readonly, nonatomic) EDPersistenceDatabase *database; @property (readonly, nonatomic) EDPersistenceHookRegistry *hookRegistry; @property (readonly, nonatomic) id<EMVIPManager> vipManager; @property (readonly, nonatomic) EMBlockedSenderManager *blockedSenderManager; @property (readonly, nonatomic) EDThreadScopeManager *threadScopeManager; @property (readonly, nonatomic) id<EFScheduler> consistencyCheckScheduler; @property (retain, nonatomic) id<EFScheduler> threadRecomputationScheduler; @property (retain, nonatomic) EFDebouncer *threadRecomputationDebouncer; @property (readonly) unsigned long long hash; @property (readonly) Class superclass; @property (readonly, copy) NSString *description; @property (readonly, copy) NSString *debugDescription; @property (readonly) unsigned long long signpostID; + (id)tablesAndForeignKeysToResolve:(id *)a0 associationsToResolve:(id *)a1; - (id)_int64SetFromSet:(id)a0 byRemovingIndexesFromSet:(id)a1 andLimitingTo:(unsigned long long)a2; - (BOOL)endMigratingThreadScope:(id)a0 wasCanceledOrReset:(BOOL)a1; - (id)oldestThreadObjectIDForMailbox:(id)a0 threadScope:(id)a1; - (BOOL)setPriorityForDisplayMessageSenderForThreadObjectID:(id)a0; - (void)_logFailedVerifyConsistencyForConversationIDs:(id)a0; - (id)_deleteWrappedMessages:(id)a0 fromThreadWithObjectID:(id)a1 threadScopeDatabaseID:(long long)a2 generationWindow:(id)a3; - (void)persistenceIsUpdatingDisplayDateForMessage:(id)a0 fromDate:(id)a1 generation:(long long)a2; - (void)_recomputeThreads; - (void)threadObjectIDsForThreadScope:(id)a0 sortDescriptors:(id)a1 initialBatchSize:(unsigned long long)a2 journaledObjectIDs:(id)a3 batchBlock:(id /* block */)a4; - (BOOL)_deleteSendersFromThreadWithDatabaseID:(id)a0 messageThreadExpression:(id)a1; - (id)_messageThreadExpressionForThreadObjectID:(id)a0; - (id)_threadExpressionForThreadScopeDatabaseID:(long long)a0 conversation:(long long)a1; - (BOOL)_deleteRecipientsOfType:(unsigned long long)a0 fromThreadWithDatabaseID:(id)a1 messageThreadExpression:(id)a2; - (id)_messageThreadExpressionForThreadScope:(id)a0 conversationExpression:(id)a1; - (id)statisticsForThreadScopesWithDatabaseIDs:(id)a0; - (BOOL)_addThreadScopeToDatabase:(id)a0 needsUpdate:(BOOL)a1 lastViewedDate:(id)a2 updateThreadScopeManager:(BOOL)a3; - (id)_recipientsOfType:(unsigned long long)a0 fromMessagesForThreadObjectID:(id)a1; - (void)_reportSenderBucketChangeForThreadsWithSenderAddresses:(id)a0 generation:(long long)a1; - (void)_iterateWrappedMessagesByConversationForPersistedMessages:(id)a0 block:(id /* block */)a1; - (id)_mailboxesForThreadDatabaseID:(id)a0; - (void)setNeedsUpdateForThreadScope:(id)a0; - (id)_recipientsOfType:(unsigned long long)a0 forThreadDatabaseID:(id)a1; - (void)persistenceDidAddMessages:(id)a0 generationWindow:(id)a1; - (id)_updateThreadForDeleteWithObjectID:(id)a0 threadScopeDatabaseID:(long long)a1 generationWindow:(id)a2; - (void)persistenceIsAddingMessages:(id)a0 journaled:(BOOL)a1 generationWindow:(id)a2; - (id)_addressesFromSelectStatement:(id)a0 additionalRowHandling:(id /* block */)a1; - (id)resetThreadScopesForAccount:(id)a0; - (id)_statementForOldestThreadInMailbox:(id)a0 threadScope:(id)a1 createMailboxDatabaseIDIfNecessary:(BOOL)a2; - (id)_mailboxScopeForThreadScope:(id)a0 andFilterPredicate:(long long *)a1; - (id)_threadQueryForThreadScope:(id)a0; - (id)_countMessagesForExpression:(id)a0; - (void)_getIndividualMailboxScopes:(id *)a0 unifiedMailboxThreadScopes:(id *)a1 forAccount:(id)a2; - (void)_resetThreadScope:(id)a0 withDatabaseID:(id)a1; - (BOOL)_enumerateThreadObjectIDsForThreadScope:(id)a0 filterClause:(id)a1 sortDescriptors:(id)a2 batchBlock:(id /* block */)a3; - (id)_messageMailboxesExpressionForMailboxType:(long long)a0; - (id)_expressionForThreadScope:(id)a0; - (BOOL)_addThreadScopeToDatabase:(id)a0 withMailboxDatabaseID:(long long)a1 filterPredicate:(long long)a2 needsUpdate:(BOOL)a3 lastViewedDate:(id)a4 updateThreadScopeManager:(BOOL)a5 connection:(id)a6; - (id)_messageThreadExpressionForThreadScope:(id)a0 objectIDs:(id)a1; - (void)_addKeyPathsForBasicPropertiesChangeToKeyPaths:(id)a0; - (void)_persistenceDidUpdateFollowUpOrReadLaterForMessages:(id)a0 generationWindow:(id)a1 isFollowUp:(BOOL)a2; - (void)_addOrderByToThreadSelect:(id)a0 forSortDescriptors:(id)a1; - (void)_addPersistedMessages:(id)a0 journaled:(BOOL)a1 generationWindow:(id)a2; - (id)nextExistingThreadObjectIDForThreadObjectID:(id)a0 forSortDescriptors:(id)a1 journaledThreadsToCheck:(id)a2 excluding:(id)a3; - (void)_scheduleRecomputationForThread:(id)a0 reason:(id)a1; - (id)changeForThreadWithObjectID:(id)a0 changedKeyPaths:(id)a1; - (void)persistenceIsAddingMailboxWithDatabaseID:(long long)a0 objectID:(id)a1 generationWindow:(id)a2; - (void)_persistenceIsChangingFlags:(id)a0 messages:(id)a1 generationWindow:(id)a2; - (BOOL)threadScopeManager:(id)a0 isValidMailboxObjectID:(id)a1; - (id)_sendersFromMessagesForThreadObjectID:(id)a0; - (BOOL)_updateNewestReadMessageWithWrappedMessage:(id)a0 threadExpression:(id)a1; - (void)persistenceDidChangeSenderBucketForSenders:(id)a0 generation:(long long)a1; - (id)_messageFilterExpressionForFilterPredicate:(id)a0; - (void)persistenceIsChangingConversationID:(long long)a0 messages:(id)a1 generationWindow:(id)a2; - (id)_filteredPersistedMessagesForPersistedMessages:(id)a0; - (id)threadForObjectID:(id)a0 originatingQuery:(id)a1 error:(id *)a2; - (BOOL)threadScopeManager:(id)a0 evictThreadScopesWithDatabaseIDs:(id)a1 completionBlock:(id /* block */)a2; - (id)_threadForWrappedMessages:(id)a0 objectID:(id)a1; - (BOOL)threadScopeManager:(id)a0 mailboxScopeExists:(id)a1; - (id)threadObjectIDsByNextExistingForThreadObjectIDs:(id)a0 forSortDescriptors:(id)a1 journaledThreadsToCheck:(id)a2; - (id)_columnForSortDescriptor:(id)a0; - (id)_messageMailboxesExpressionForMailboxObjectIDs:(id)a0; - (id)_upsertForThreadsWithThreadScopeDatabaseID:(long long)a0 conversation:(long long)a1; - (void)persistenceIsInitializingDatabaseWithConnection:(id)a0; - (id)_messageActiveFollowUpExpressionForSentMailboxObjectIDs:(id)a0; - (BOOL)deleteThreadsWithObjectIDs:(id)a0; - (id)_messageMailboxesExpressionForMailboxScope:(id)a0; - (void).cxx_destruct; - (void)persistenceDidDeleteAllMessagesInMailboxesWithURLs:(id)a0 generationWindow:(id)a1; - (BOOL)addThreadScopeToDatabase:(id)a0 needsUpdate:(BOOL)a1 lastViewedDate:(id)a2; - (id)_addressesFromMessageAddressesStatement:(id)a0; - (void)persistenceIsChangingFlags:(id)a0 messages:(id)a1 generationWindow:(id)a2; - (void)persistenceDidUpdateFollowUpForMessages:(id)a0 generationWindow:(id)a1; - (void)verifyConsistencyOfThreadScope:(id)a0; - (BOOL)_addThreadScopeToDatabaseWithMailboxType:(id)a0 filterPredicate:(long long)a1 needsUpdate:(BOOL)a2 lastViewedDate:(id)a3 connection:(id)a4; - (id)_flagColorsFromRow:(id)a0; - (id)initWithMessagePersistence:(id)a0 database:(id)a1 hookRegistry:(id)a2 vipManager:(id)a3 blockedSenderManager:(id)a4; - (void)persistenceIsDeletingMessages:(id)a0 generationWindow:(id)a1; - (void)resetThreadScopesForMailboxScope:(id)a0; - (void)_persistenceIsDeletingMessages:(id)a0 generationWindow:(id)a1; - (void)persistenceIsDeletingAllMessagesInMailboxWithURL:(id)a0 generationWindow:(id)a1; - (BOOL)_messagesAreJournaledForThreadWithObjectID:(id)a0; - (id)_persistedMessagesByPossibleThreadScopeForPersistedMessages:(id)a0; - (BOOL)addThreads:(id)a0; - (void)persistenceDidAddAddresses:(id)a0 toSender:(id)a1 generation:(long long)a2; - (id)_senderAddressesExpressionForMessages:(id)a0; - (void)test_tearDown; - (void)threadScopeManager:(id)a0 gatherStatisticsForThreadScopesWithDatabaseIDs:(id)a1 block:(id /* block */)a2; - (id)_persistenceIsChangingFlags:(id)a0 wrappedMessages:(id)a1 threadObjectID:(id)a2 threadScopeDatabaseID:(long long)a3; - (void)_iterateWrappedMessagesByConversationForPersistedMessages:(id)a0 messageFilter:(id /* block */)a1 writeBlock:(id /* block */)a2; - (id)_persistedMessagesForMailboxScope:(id)a0 messageExpression:(id)a1; - (void)_writeThreadedMessages:(id)a0 withChangedKeyPaths:(id)a1 journaled:(BOOL)a2 generationWindow:(id)a3; - (void)updateLastViewedDateForThreadScope:(id)a0; - (void)persistenceDidUpdateDisplayDateForReadLaterDateMessages:(id)a0 generationWindow:(id)a1; - (void)_addKeyPathsForDisplayMessageChangeToKeyPaths:(id)a0; - (BOOL)_isThreadScopePrecomputed:(id)a0 shouldMigrate:(BOOL *)a1; - (id)_wrappedMessagesByThreadScopeForPersistedMessages:(id)a0 messageFilter:(id /* block */)a1; - (id)threadScopesByDatabaseID; - (void)persistenceDidRemoveAddresses:(id)a0 fromSender:(id)a1 generation:(long long)a2; - (void)persistenceDidChangeFlags:(id)a0 messages:(id)a1 generationWindow:(id)a2; - (id)_comparisonExpressionForSortDescriptors:(id)a0 conversationID:(long long)a1 threadExpression:(id)a2 threadScopeDatabaseID:(long long)a3 connection:(id)a4; - (void)_enumerateThreadScopesUsingBlock:(id /* block */)a0; - (void)persistenceDidUpdateProperties:(id)a0 message:(id)a1 generationWindow:(id)a2; - (void)persistenceDidChangeGlobalMessageID:(long long)a0 orConversationID:(long long)a1 message:(id)a2 generationWindow:(id)a3; - (void)persistenceDidChangeReadLaterDate:(id)a0 messages:(id)a1 changeIsRemote:(BOOL)a2 generationWindow:(id)a3; - (void)persistenceDidDeleteMessages:(id)a0 generationWindow:(id)a1; - (id)_sendersForThreadDatabaseID:(id)a0 senderBucket:(long long *)a1; - (id)_threadDatabaseIDExpressionForThreadScopeDatabaseID:(long long)a0 conversation:(long long)a1; - (id)_recipientAddressesExpressionForRecipientType:(unsigned long long)a0 messages:(id)a1; - (id)_mailboxDatabaseIDsForWrappedMessages:(id)a0; - (BOOL)beginMigratingThreadScope:(id)a0; - (long long)_databaseIDForThreadObjectID:(id)a0; - (id)_nonJournaledSubjectForThreadWithObjectID:(id)a0 connection:(id)a1; - (unsigned long long)persistenceStateForThreadScope:(id)a0; - (id)_messageMailboxesExpressionForAccountObjectIDs:(id)a0; - (BOOL)_recalculateNewestReadMessageForThreadObjectID:(id)a0 threadScopeDatabaseID:(long long)a1; - (void)persistenceDidUpdateDisplayDateForMessages:(id)a0 changeIsRemote:(BOOL)a1 generation:(long long)a2; - (BOOL)_deleteMailboxesFromWrappedMessages:(id)a0 fromThreadWithDatabaseID:(id)a1 messageThreadExpression:(id)a2; - (id)_messageFiredReadLaterExpression:(id)a0; - (id)_wrappedMessageForPersistedMessages:(id)a0 threadScope:(id)a1 messageFilter:(id /* block */)a2; - (id)_updateBasicPropertiesAfterDeleteForThreadObjectID:(id)a0 threadScopeDatabaseID:(long long)a1; - (id)_recalculateDisplayMessageForThreadObjectID:(id)a0 threadScopeDatabaseID:(long long)a1; - (void)threadScopeManager:(id)a0 populateThreadScopesWithBlock:(id /* block */)a1; - (id)_messageIsNotDeletedExpression; @end