forked from lint/TFDidThatSay
		
	Fix Apollo crash, add option to show button
This commit is contained in:
		
							
								
								
									
										1
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								Makefile
									
									
									
									
									
								
							@ -6,6 +6,7 @@ TWEAK_NAME = tfdidthatsay
 | 
				
			|||||||
tfdidthatsay_FILES = $(wildcard tweak/*.xm tweak/assets/*.m tweak/assets/MMMarkdown/*.m)
 | 
					tfdidthatsay_FILES = $(wildcard tweak/*.xm tweak/assets/*.m tweak/assets/MMMarkdown/*.m)
 | 
				
			||||||
tfdidthatsay_CFLAGS = -fobjc-arc
 | 
					tfdidthatsay_CFLAGS = -fobjc-arc
 | 
				
			||||||
tweak/Reddit.xm_CFLAGS = -fno-objc-arc
 | 
					tweak/Reddit.xm_CFLAGS = -fno-objc-arc
 | 
				
			||||||
 | 
					tweak/Apollo.xm_CFLAGS = -fno-objc-arc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(THEOS_MAKE_PATH)/tweak.mk
 | 
					include $(THEOS_MAKE_PATH)/tweak.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										4
									
								
								control
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								control
									
									
									
									
									
								
							@ -1,7 +1,7 @@
 | 
				
			|||||||
Package: com.lint.undelete
 | 
					Package: com.lint.undelete
 | 
				
			||||||
Name: TFDidThatSay?
 | 
					Name: TFDidThatSay?
 | 
				
			||||||
Depends: mobilesubstrate, ws.hbang.common
 | 
					Depends: mobilesubstrate
 | 
				
			||||||
Version: 1.3.0
 | 
					Version: 1.3.1
 | 
				
			||||||
Architecture: iphoneos-arm
 | 
					Architecture: iphoneos-arm
 | 
				
			||||||
Description: See "[deleted]" comments and posts without leaving Reddit!
 | 
					Description: See "[deleted]" comments and posts without leaving Reddit!
 | 
				
			||||||
Maintainer: lint <apieceoflint@protonmail.com>
 | 
					Maintainer: lint <apieceoflint@protonmail.com>
 | 
				
			||||||
 | 
				
			|||||||
@ -146,6 +146,26 @@
 | 
				
			|||||||
			<key>label</key>
 | 
								<key>label</key>
 | 
				
			||||||
			<string>Deleted comments/posts only</string>
 | 
								<string>Deleted comments/posts only</string>
 | 
				
			||||||
		</dict>
 | 
							</dict>
 | 
				
			||||||
 | 
							<dict>
 | 
				
			||||||
 | 
								<key>cell</key>
 | 
				
			||||||
 | 
								<string>PSGroupCell</string>
 | 
				
			||||||
 | 
								<key>footerText</key>
 | 
				
			||||||
 | 
								<string>In Apollo, show undelete option on the comment cell rather than in the action menu.</string>
 | 
				
			||||||
 | 
							</dict>
 | 
				
			||||||
 | 
							<dict>
 | 
				
			||||||
 | 
								<key>PostNotification</key>
 | 
				
			||||||
 | 
								<string>com.lint.undelete.prefs.changed</string>
 | 
				
			||||||
 | 
								<key>cell</key>
 | 
				
			||||||
 | 
								<string>PSSwitchCell</string>
 | 
				
			||||||
 | 
								<key>default</key>
 | 
				
			||||||
 | 
								<false/>
 | 
				
			||||||
 | 
								<key>defaults</key>
 | 
				
			||||||
 | 
								<string>com.lint.undelete.prefs</string>
 | 
				
			||||||
 | 
								<key>key</key>
 | 
				
			||||||
 | 
								<string>shouldApolloHaveButton</string>
 | 
				
			||||||
 | 
								<key>label</key>
 | 
				
			||||||
 | 
								<string>Show button in Apollo</string>
 | 
				
			||||||
 | 
							</dict>
 | 
				
			||||||
		<dict>
 | 
							<dict>
 | 
				
			||||||
			<key>cell</key>
 | 
								<key>cell</key>
 | 
				
			||||||
			<string>PSGroupCell</string>
 | 
								<string>PSGroupCell</string>
 | 
				
			||||||
 | 
				
			|||||||
@ -16,6 +16,7 @@
 | 
				
			|||||||
-(void) calculatedLayoutDidChange;
 | 
					-(void) calculatedLayoutDidChange;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//custom elements
 | 
					//custom elements
 | 
				
			||||||
 | 
					@property(strong,nonatomic) UIButton *undeleteButton;
 | 
				
			||||||
-(void) undeleteCellWasSelected;
 | 
					-(void) undeleteCellWasSelected;
 | 
				
			||||||
@end
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										106
									
								
								tweak/Apollo.xm
									
									
									
									
									
								
							
							
						
						
									
										106
									
								
								tweak/Apollo.xm
									
									
									
									
									
								
							@ -5,6 +5,7 @@
 | 
				
			|||||||
static BOOL isTFDeletedOnly;
 | 
					static BOOL isTFDeletedOnly;
 | 
				
			||||||
static BOOL isApolloEnabled;
 | 
					static BOOL isApolloEnabled;
 | 
				
			||||||
static CGFloat pushshiftRequestTimeoutValue;
 | 
					static CGFloat pushshiftRequestTimeoutValue;
 | 
				
			||||||
 | 
					static BOOL shouldApolloHaveButton;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%group Apollo
 | 
					%group Apollo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -67,17 +68,19 @@ id apolloCommentController;
 | 
				
			|||||||
	if (shouldAddUndeleteCell){
 | 
						if (shouldAddUndeleteCell){
 | 
				
			||||||
		if ([arg2 row] == [self tableView:arg1 numberOfRowsInSection:0] - 1){
 | 
							if ([arg2 row] == [self tableView:arg1 numberOfRowsInSection:0] - 1){
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			id undeleteCell = [[objc_getClass("Apollo.IconActionTableViewCell") alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"IconActionCell"];
 | 
								id undeleteCell = [arg1 dequeueReusableCellWithIdentifier:@"IconActionCell" forIndexPath:arg2];
 | 
				
			||||||
			NSArray *visibleCells = [arg1 visibleCells];
 | 
								id prevCell = [arg1 dequeueReusableCellWithIdentifier:@"IconActionCell"];
 | 
				
			||||||
			id prevCell = visibleCells[[visibleCells count] - 2];
 | 
					 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			UIImageView *prevCellImageView = MSHookIvar<UIImageView *>(prevCell, "iconImageView");
 | 
								UIImageView *prevCellImageView = MSHookIvar<UIImageView *>(prevCell, "iconImageView");
 | 
				
			||||||
			CGSize prevImageSize = [[prevCellImageView image] size];
 | 
								CGSize prevImageSize = [[prevCellImageView image] size];
 | 
				
			||||||
			UIColor *menuColor = [prevCellImageView tintColor];
 | 
					 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			UIImage *undeleteImage = [UIImage imageWithContentsOfFile:@"/var/mobile/Library/Application Support/TFDidThatSay/eye160dark.png"];
 | 
								UIImage *undeleteImage = [UIImage imageWithContentsOfFile:@"/var/mobile/Library/Application Support/TFDidThatSay/eye160dark.png"];
 | 
				
			||||||
			CGFloat undeleteImageSizeValue = prevImageSize.width > prevImageSize.height ? prevImageSize.width : prevImageSize.height;
 | 
								CGFloat undeleteImageSizeValue = prevImageSize.width > prevImageSize.height ? prevImageSize.width : prevImageSize.height;
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
 | 
								if (undeleteImageSizeValue == 0){
 | 
				
			||||||
 | 
									undeleteImageSizeValue = 25;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
			UIGraphicsBeginImageContextWithOptions(CGSizeMake(undeleteImageSizeValue, undeleteImageSizeValue), NO, 0);
 | 
								UIGraphicsBeginImageContextWithOptions(CGSizeMake(undeleteImageSizeValue, undeleteImageSizeValue), NO, 0);
 | 
				
			||||||
			[undeleteImage drawInRect:CGRectMake(0, 0, undeleteImageSizeValue, undeleteImageSizeValue)];
 | 
								[undeleteImage drawInRect:CGRectMake(0, 0, undeleteImageSizeValue, undeleteImageSizeValue)];
 | 
				
			||||||
			undeleteImage = [UIGraphicsGetImageFromCurrentImageContext() imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
 | 
								undeleteImage = [UIGraphicsGetImageFromCurrentImageContext() imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
 | 
				
			||||||
@ -87,10 +90,7 @@ id apolloCommentController;
 | 
				
			|||||||
			UIImageView *undeleteImageView = MSHookIvar<UIImageView *>(undeleteCell, "iconImageView");
 | 
								UIImageView *undeleteImageView = MSHookIvar<UIImageView *>(undeleteCell, "iconImageView");
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			undeleteLabel.text = @"TF Did That Say?";
 | 
								undeleteLabel.text = @"TF Did That Say?";
 | 
				
			||||||
			undeleteLabel.textColor = menuColor;
 | 
					 | 
				
			||||||
			
 | 
					 | 
				
			||||||
			undeleteImageView.image = undeleteImage;
 | 
								undeleteImageView.image = undeleteImage;
 | 
				
			||||||
			undeleteImageView.tintColor = menuColor;
 | 
					 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			return undeleteCell;
 | 
								return undeleteCell;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -135,15 +135,19 @@ id apolloCommentController;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%hook CommentCellNode
 | 
					%hook CommentCellNode
 | 
				
			||||||
 | 
					%property(strong,nonatomic) UIButton *undeleteButton;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-(void) moreOptionsTappedWithSender:(id) arg1{
 | 
					-(void) moreOptionsTappedWithSender:(id) arg1{
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	NSString *commentBody = [MSHookIvar<RKComment *>(self, "comment") body];
 | 
						if (!shouldApolloHaveButton){
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
	if ([%c(TFHelper) shouldShowUndeleteButtonWithInfo:commentBody isDeletedOnly:isTFDeletedOnly]){
 | 
							NSString *commentBody = [MSHookIvar<RKComment *>(self, "comment") body];
 | 
				
			||||||
		shouldAddUndeleteCell = YES;
 | 
							
 | 
				
			||||||
		apolloCommentCell = self;
 | 
							if ([%c(TFHelper) shouldShowUndeleteButtonWithInfo:commentBody isDeletedOnly:isTFDeletedOnly]){
 | 
				
			||||||
		apolloCommentController = nil;
 | 
								shouldAddUndeleteCell = YES;
 | 
				
			||||||
 | 
								apolloCommentCell = self;
 | 
				
			||||||
 | 
								apolloCommentController = nil;
 | 
				
			||||||
 | 
							}		
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	%orig;
 | 
						%orig;
 | 
				
			||||||
@ -151,17 +155,74 @@ id apolloCommentController;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
-(void) longPressedWithGestureRecognizer:(id) arg1{
 | 
					-(void) longPressedWithGestureRecognizer:(id) arg1{
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	NSString *commentBody = [MSHookIvar<RKComment *>(self, "comment") body];
 | 
						if (!shouldApolloHaveButton){
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
	if ([%c(TFHelper) shouldShowUndeleteButtonWithInfo:commentBody isDeletedOnly:isTFDeletedOnly]){
 | 
							NSString *commentBody = [MSHookIvar<RKComment *>(self, "comment") body];
 | 
				
			||||||
		shouldAddUndeleteCell = YES;
 | 
							
 | 
				
			||||||
		apolloCommentCell = self;
 | 
							if ([%c(TFHelper) shouldShowUndeleteButtonWithInfo:commentBody isDeletedOnly:isTFDeletedOnly]){
 | 
				
			||||||
		apolloCommentController = nil;
 | 
								shouldAddUndeleteCell = YES;
 | 
				
			||||||
 | 
								apolloCommentCell = self;
 | 
				
			||||||
 | 
								apolloCommentController = nil;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	%orig;
 | 
						%orig;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-(void) didLoad {
 | 
				
			||||||
 | 
						%orig;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						if (shouldApolloHaveButton){
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
							NSString *commentBody = [MSHookIvar<RKComment *>(self, "comment") body];
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							if ([%c(TFHelper) shouldShowUndeleteButtonWithInfo:commentBody isDeletedOnly:isTFDeletedOnly]){
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
								CGFloat imageSize = 20.0f;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								UIButton *undeleteButton = [UIButton buttonWithType:UIButtonTypeCustom];
 | 
				
			||||||
 | 
								[undeleteButton addTarget:self action:@selector(didTapUndeleteButton:) forControlEvents:UIControlEventTouchUpInside];
 | 
				
			||||||
 | 
								undeleteButton.frame = CGRectMake(0, 0, imageSize, imageSize);
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								UIImage* undeleteImage = [UIImage imageWithContentsOfFile:@"/var/mobile/Library/Application Support/TFDidThatSay/eye160dark.png"];
 | 
				
			||||||
 | 
								[undeleteButton setImage:undeleteImage forState:UIControlStateNormal];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								[[self view] addSubview:undeleteButton];
 | 
				
			||||||
 | 
								[self setUndeleteButton:undeleteButton];
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-(void) _layoutSublayouts{
 | 
				
			||||||
 | 
						%orig;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						if (shouldApolloHaveButton){
 | 
				
			||||||
 | 
							if ([self undeleteButton]){
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
								CGFloat imageSize = 20.0f;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								id moreNode = MSHookIvar<id>(self, "moreOptionsNode");
 | 
				
			||||||
 | 
								id ageNode = MSHookIvar<id>(self, "ageNode");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								CGRect nodeFrame = [moreNode frame];
 | 
				
			||||||
 | 
								CGFloat centerHeight = (nodeFrame.size.height + nodeFrame.origin.y * 2) / 2.0f;
 | 
				
			||||||
 | 
								CGFloat nodeSpacing = [ageNode frame].origin.x - nodeFrame.origin.x - nodeFrame.size.width;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								[[self undeleteButton] setFrame:CGRectMake(nodeFrame.origin.x - imageSize - nodeSpacing, centerHeight - (imageSize / 2), imageSize, imageSize)];
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					%new
 | 
				
			||||||
 | 
					-(void) didTapUndeleteButton:(id) sender{
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						[sender setEnabled:NO];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						id comment = MSHookIvar<id>(self, "comment");
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						[%c(TFHelper) getUndeleteDataWithID:[[comment fullName] componentsSeparatedByString:@"_"][1] isComment:YES timeout:pushshiftRequestTimeoutValue extraData:@{@"sender" : sender} completionTarget:self completionSelector:@selector(completeUndeleteCommentAction:)];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%new
 | 
					%new
 | 
				
			||||||
-(void) undeleteCellWasSelected{
 | 
					-(void) undeleteCellWasSelected{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -189,6 +250,10 @@ id apolloCommentController;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	[authorNode setAttributedTitle:newAuthorAttributedString forState:UIControlStateNormal];
 | 
						[authorNode setAttributedTitle:newAuthorAttributedString forState:UIControlStateNormal];
 | 
				
			||||||
	[bodyNode setAttributedString:[%c(MarkdownRenderer) attributedStringFromMarkdown:body withAttributes:apolloBodyAttributes]];
 | 
						[bodyNode setAttributedString:[%c(MarkdownRenderer) attributedStringFromMarkdown:body withAttributes:apolloBodyAttributes]];
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						if ([data objectForKey:@"sender"]) {
 | 
				
			||||||
 | 
							[data[@"sender"] setEnabled:YES];
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%end
 | 
					%end
 | 
				
			||||||
@ -307,10 +372,17 @@ static void loadPrefs(){
 | 
				
			|||||||
			pushshiftRequestTimeoutValue = 10;
 | 
								pushshiftRequestTimeoutValue = 10;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
 | 
							if ([prefs objectForKey:@"shouldApolloHaveButton"] != nil){
 | 
				
			||||||
 | 
								shouldApolloHaveButton = [[prefs objectForKey:@"shouldApolloHaveButton"] boolValue];
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								shouldApolloHaveButton = NO;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		isApolloEnabled = YES;
 | 
							isApolloEnabled = YES;
 | 
				
			||||||
		isTFDeletedOnly = YES;
 | 
							isTFDeletedOnly = YES;
 | 
				
			||||||
		pushshiftRequestTimeoutValue = 10;
 | 
							pushshiftRequestTimeoutValue = 10;
 | 
				
			||||||
 | 
							shouldApolloHaveButton = NO;
 | 
				
			||||||
	}	
 | 
						}	
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user