|  |  | @ -31,6 +31,11 @@ | 
			
		
	
		
		
			
				
					
					|  |  |  | // * Orphan attachments (with no message). |  |  |  | // * Orphan attachments (with no message). | 
			
		
	
		
		
			
				
					
					|  |  |  | // * Orphan attachment files (with no attachment). |  |  |  | // * Orphan attachment files (with no attachment). | 
			
		
	
		
		
			
				
					
					|  |  |  | // * Missing attachment files (cannot be cleaned up). |  |  |  | // * Missing attachment files (cannot be cleaned up). | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | //   These are attachments which have no file on disk.  They should be extremely rare - | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | //   the only cases I have seen are probably due to debugging. | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | //   They can't be cleaned up - we don't want to delete the TSAttachmentStream or | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | //   its corresponding message.  Better that the broken message shows up in the | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | //   conversation view. | 
			
		
	
		
		
			
				
					
					|  |  |  | + (void)auditAndCleanup:(BOOL)shouldCleanup |  |  |  | + (void)auditAndCleanup:(BOOL)shouldCleanup | 
			
		
	
		
		
			
				
					
					|  |  |  | { |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  |     NSString *attachmentsFolder = [TSAttachmentStream attachmentsFolder]; |  |  |  |     NSString *attachmentsFolder = [TSAttachmentStream attachmentsFolder]; | 
			
		
	
	
		
		
			
				
					|  |  | @ -152,7 +157,10 @@ | 
			
		
	
		
		
			
				
					
					|  |  |  |     // being created/written, so we don't clean up anything recent. |  |  |  |     // being created/written, so we don't clean up anything recent. | 
			
		
	
		
		
			
				
					
					|  |  |  |     const NSTimeInterval kMinimumOrphanAge = 15 * 60.f; |  |  |  |     const NSTimeInterval kMinimumOrphanAge = 15 * 60.f; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     if (shouldCleanup) { |  |  |  |     if (!shouldCleanup) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         return; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     [databaseConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) { |  |  |  |     [databaseConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) { | 
			
		
	
		
		
			
				
					
					|  |  |  |         for (NSString *interactionId in orphanInteractionIds) { |  |  |  |         for (NSString *interactionId in orphanInteractionIds) { | 
			
		
	
		
		
			
				
					
					|  |  |  |             TSInteraction *interaction = [TSInteraction fetchObjectWithUniqueID:interactionId]; |  |  |  |             TSInteraction *interaction = [TSInteraction fetchObjectWithUniqueID:interactionId]; | 
			
		
	
	
		
		
			
				
					|  |  | @ -207,7 +215,6 @@ | 
			
		
	
		
		
			
				
					
					|  |  |  |         } |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | + (void)printPaths:(NSArray<NSString *> *)paths label:(NSString *)label |  |  |  | + (void)printPaths:(NSArray<NSString *> *)paths label:(NSString *)label | 
			
		
	
		
		
			
				
					
					|  |  |  | { |  |  |  | { | 
			
		
	
	
		
		
			
				
					|  |  | 
 |