forked from lint/TFDidThatSay
		
	Add Apollo 1.8 context menu support for iOS 13
This commit is contained in:
		@ -17,6 +17,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@interface CommentCellNode
 | 
					@interface CommentCellNode
 | 
				
			||||||
@property(strong, nonatomic) id view;
 | 
					@property(strong, nonatomic) id view;
 | 
				
			||||||
 | 
					@property(strong, nonatomic) id actionDelegate;
 | 
				
			||||||
- (BOOL)isSelected;
 | 
					- (BOOL)isSelected;
 | 
				
			||||||
- (void)_layoutSublayouts;
 | 
					- (void)_layoutSublayouts;
 | 
				
			||||||
- (void)didLoad;
 | 
					- (void)didLoad;
 | 
				
			||||||
@ -27,6 +28,12 @@
 | 
				
			|||||||
- (void)undeleteCellWasSelected;
 | 
					- (void)undeleteCellWasSelected;
 | 
				
			||||||
@end
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@interface CommentSectionController : NSObject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//custom elements
 | 
				
			||||||
 | 
					@property(strong, nonatomic) id commentCellNode;
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* -- Post Interfaces -- */
 | 
					/* -- Post Interfaces -- */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@interface RKLink
 | 
					@interface RKLink
 | 
				
			||||||
@ -61,6 +68,9 @@
 | 
				
			|||||||
- (void)undeleteCellWasSelected;
 | 
					- (void)undeleteCellWasSelected;
 | 
				
			||||||
@end
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@interface CommentsHeaderSectionController : NSObject
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* -- Other Interfaces -- */
 | 
					/* -- Other Interfaces -- */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@interface MarkdownRenderer
 | 
					@interface MarkdownRenderer
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										104
									
								
								tweak/Apollo.xm
									
									
									
									
									
								
							
							
						
						
									
										104
									
								
								tweak/Apollo.xm
									
									
									
									
									
								
							@ -11,10 +11,16 @@ static BOOL shouldApolloHaveButton;
 | 
				
			|||||||
%group Apollo
 | 
					%group Apollo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NSDictionary* apolloBodyAttributes = nil;
 | 
					NSDictionary* apolloBodyAttributes = nil;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BOOL shouldAddUndeleteCell = NO;
 | 
					BOOL shouldAddUndeleteCell = NO;
 | 
				
			||||||
id apolloCommentCell;
 | 
					id apolloCommentCell;
 | 
				
			||||||
id apolloCommentController;
 | 
					id apolloCommentController;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BOOL shouldAddUndeleteCellForContext = NO;
 | 
				
			||||||
 | 
					id apolloCommentCellForContext;
 | 
				
			||||||
 | 
					id apolloCommentsControllerForContext;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%hook ApolloButtonNode
 | 
					%hook ApolloButtonNode
 | 
				
			||||||
%end
 | 
					%end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -211,6 +217,8 @@ id apolloCommentController;
 | 
				
			|||||||
- (void)didLoad {
 | 
					- (void)didLoad {
 | 
				
			||||||
	%orig;
 | 
						%orig;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						//HBLogDebug(@"didLoad - actionDelegate:%@", MSHookIvar<id>(self, "actionDelegate"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (shouldApolloHaveButton){
 | 
						if (shouldApolloHaveButton){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		NSString *commentBody = [MSHookIvar<RKComment *>(self, "comment") body];
 | 
							NSString *commentBody = [MSHookIvar<RKComment *>(self, "comment") body];
 | 
				
			||||||
@ -229,6 +237,11 @@ id apolloCommentController;
 | 
				
			|||||||
			[[self view] addSubview:undeleteButton];
 | 
								[[self view] addSubview:undeleteButton];
 | 
				
			||||||
			[self setUndeleteButton:undeleteButton];
 | 
								[self setUndeleteButton:undeleteButton];
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							id actionDelegate = MSHookIvar<id>(self, "actionDelegate");
 | 
				
			||||||
 | 
							[actionDelegate setCommentCellNode:self];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -385,6 +398,94 @@ id apolloCommentController;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
%end
 | 
					%end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%hook UIMenu
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (id)menuByReplacingChildren:(id)arg5 {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (shouldAddUndeleteCellForContext) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							UIAction *action = [UIAction actionWithTitle:@"TF Did That Say?" image:[UIImage systemImageNamed:@"eye"] identifier:@"testident" handler:^(__kindof UIAction* _Nonnull action) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									id commentCell = apolloCommentCellForContext;
 | 
				
			||||||
 | 
									id commentsController = apolloCommentsControllerForContext;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									if (commentCell) {
 | 
				
			||||||
 | 
										[commentCell undeleteCellWasSelected];
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										[commentsController undeleteCellWasSelected];
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
							}];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							arg5 = [arg5 arrayByAddingObject:action];
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return %orig;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%hook CommentSectionController
 | 
				
			||||||
 | 
					%property(strong, nonatomic) id commentCellNode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (id)contextMenuInteraction:(id)arg1 configurationForMenuAtLocation:(CGPoint)arg2 {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!shouldApolloHaveButton) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							NSString *commentBody = [MSHookIvar<RKComment *>(self, "comment") body];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if ([%c(TFHelper) shouldShowUndeleteButtonWithInfo:commentBody isDeletedOnly:isTFDeletedOnly]) {
 | 
				
			||||||
 | 
								shouldAddUndeleteCellForContext = YES;
 | 
				
			||||||
 | 
								apolloCommentCellForContext = [self commentCellNode];
 | 
				
			||||||
 | 
								apolloCommentsControllerForContext = nil;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return %orig;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%new
 | 
				
			||||||
 | 
					- (void)contextMenuInteraction:(id)arg1 willEndForConfiguration:(id)arg2 animator:(id)arg3 {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						shouldAddUndeleteCellForContext = NO;
 | 
				
			||||||
 | 
						apolloCommentCellForContext = nil;
 | 
				
			||||||
 | 
						apolloCommentsControllerForContext = nil;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%hook CommentsHeaderSectionController
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (id)contextMenuInteraction:(id)arg1 configurationForMenuAtLocation:(CGPoint)arg2 {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						id commentsController = MSHookIvar<id>(self, "viewController");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						RKLink *post = MSHookIvar<RKLink *>(commentsController, "link");
 | 
				
			||||||
 | 
						NSString *postBody = [post selfText];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if ([post isSelfPost]) {
 | 
				
			||||||
 | 
							if ([%c(TFHelper) shouldShowUndeleteButtonWithInfo:postBody isDeletedOnly:isTFDeletedOnly]) {
 | 
				
			||||||
 | 
								shouldAddUndeleteCellForContext = YES;
 | 
				
			||||||
 | 
								apolloCommentCellForContext = nil;
 | 
				
			||||||
 | 
								apolloCommentsControllerForContext = commentsController;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return %orig;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%new
 | 
				
			||||||
 | 
					- (void)contextMenuInteraction:(id)arg1 willEndForConfiguration:(id)arg2 animator:(id)arg3 {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						shouldAddUndeleteCellForContext = NO;
 | 
				
			||||||
 | 
						apolloCommentCellForContext = nil;
 | 
				
			||||||
 | 
						apolloCommentsControllerForContext = nil;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%end
 | 
					%end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -412,6 +513,7 @@ static void prefsChanged(CFNotificationCenterRef center, void *observer, CFStrin
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%ctor {
 | 
					%ctor {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	loadPrefs();
 | 
						loadPrefs();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	NSString* processName = [[NSProcessInfo processInfo] processName];
 | 
						NSString* processName = [[NSProcessInfo processInfo] processName];
 | 
				
			||||||
@ -421,7 +523,7 @@ static void prefsChanged(CFNotificationCenterRef center, void *observer, CFStrin
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, (CFNotificationCallback)prefsChanged, CFSTR("com.lint.undelete.prefs.changed"), NULL, CFNotificationSuspensionBehaviorCoalesce);
 | 
								CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, (CFNotificationCallback)prefsChanged, CFSTR("com.lint.undelete.prefs.changed"), NULL, CFNotificationSuspensionBehaviorCoalesce);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			%init(Apollo, CommentsHeaderCellNode = objc_getClass("Apollo.CommentsHeaderCellNode"), CommentCellNode = objc_getClass("Apollo.CommentCellNode"), ApolloButtonNode = objc_getClass("Apollo.ApolloButtonNode"), ActionController = objc_getClass("Apollo.ActionController"), IconActionTableViewCell = objc_getClass("Apollo.IconActionTableViewCell"), CommentsViewController = objc_getClass("Apollo.CommentsViewController"));
 | 
								%init(Apollo, CommentsHeaderCellNode = objc_getClass("Apollo.CommentsHeaderCellNode"), CommentCellNode = objc_getClass("Apollo.CommentCellNode"), ApolloButtonNode = objc_getClass("Apollo.ApolloButtonNode"), ActionController = objc_getClass("Apollo.ActionController"), IconActionTableViewCell = objc_getClass("Apollo.IconActionTableViewCell"), CommentsViewController = objc_getClass("Apollo.CommentsViewController"), CommentSectionController = objc_getClass("Apollo.CommentSectionController"), CommentsHeaderSectionController = objc_getClass("Apollo.CommentsHeaderSectionController"));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user