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
 | 
			
		||||
@property(strong, nonatomic) id view;
 | 
			
		||||
@property(strong, nonatomic) id actionDelegate;
 | 
			
		||||
- (BOOL)isSelected;
 | 
			
		||||
- (void)_layoutSublayouts;
 | 
			
		||||
- (void)didLoad;
 | 
			
		||||
@ -27,6 +28,12 @@
 | 
			
		||||
- (void)undeleteCellWasSelected;
 | 
			
		||||
@end
 | 
			
		||||
 | 
			
		||||
@interface CommentSectionController : NSObject
 | 
			
		||||
 | 
			
		||||
//custom elements
 | 
			
		||||
@property(strong, nonatomic) id commentCellNode;
 | 
			
		||||
@end
 | 
			
		||||
 | 
			
		||||
/* -- Post Interfaces -- */
 | 
			
		||||
 | 
			
		||||
@interface RKLink
 | 
			
		||||
@ -61,6 +68,9 @@
 | 
			
		||||
- (void)undeleteCellWasSelected;
 | 
			
		||||
@end
 | 
			
		||||
 | 
			
		||||
@interface CommentsHeaderSectionController : NSObject
 | 
			
		||||
@end
 | 
			
		||||
 | 
			
		||||
/* -- Other Interfaces -- */
 | 
			
		||||
 | 
			
		||||
@interface MarkdownRenderer
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										104
									
								
								tweak/Apollo.xm
									
									
									
									
									
								
							
							
						
						
									
										104
									
								
								tweak/Apollo.xm
									
									
									
									
									
								
							@ -11,10 +11,16 @@ static BOOL shouldApolloHaveButton;
 | 
			
		||||
%group Apollo
 | 
			
		||||
 | 
			
		||||
NSDictionary* apolloBodyAttributes = nil;
 | 
			
		||||
 | 
			
		||||
BOOL shouldAddUndeleteCell = NO;
 | 
			
		||||
id apolloCommentCell;
 | 
			
		||||
id apolloCommentController;
 | 
			
		||||
 | 
			
		||||
BOOL shouldAddUndeleteCellForContext = NO;
 | 
			
		||||
id apolloCommentCellForContext;
 | 
			
		||||
id apolloCommentsControllerForContext;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
%hook ApolloButtonNode
 | 
			
		||||
%end
 | 
			
		||||
 | 
			
		||||
@ -211,6 +217,8 @@ id apolloCommentController;
 | 
			
		||||
- (void)didLoad {
 | 
			
		||||
	%orig;
 | 
			
		||||
 | 
			
		||||
	//HBLogDebug(@"didLoad - actionDelegate:%@", MSHookIvar<id>(self, "actionDelegate"));
 | 
			
		||||
 | 
			
		||||
	if (shouldApolloHaveButton){
 | 
			
		||||
 | 
			
		||||
		NSString *commentBody = [MSHookIvar<RKComment *>(self, "comment") body];
 | 
			
		||||
@ -229,6 +237,11 @@ id apolloCommentController;
 | 
			
		||||
			[[self view] addSubview:undeleteButton];
 | 
			
		||||
			[self setUndeleteButton:undeleteButton];
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
 | 
			
		||||
		id actionDelegate = MSHookIvar<id>(self, "actionDelegate");
 | 
			
		||||
		[actionDelegate setCommentCellNode:self];
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -385,6 +398,94 @@ id apolloCommentController;
 | 
			
		||||
 | 
			
		||||
%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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -412,6 +513,7 @@ static void prefsChanged(CFNotificationCenterRef center, void *observer, CFStrin
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
%ctor {
 | 
			
		||||
 | 
			
		||||
	loadPrefs();
 | 
			
		||||
 | 
			
		||||
	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);
 | 
			
		||||
 | 
			
		||||
			%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