Browse Source

Fix Apollo crash, add option to show button

master
lint 4 years ago
parent
commit
dc0ad9363d
5 changed files with 115 additions and 21 deletions
  1. +1
    -0
      Makefile
  2. +2
    -2
      control
  3. +20
    -0
      prefs/Resources/Root.plist
  4. +1
    -0
      tweak/Apollo.h
  5. +91
    -19
      tweak/Apollo.xm

+ 1
- 0
Makefile View File

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



+ 2
- 2
control View File

Package: com.lint.undelete Package: com.lint.undelete
Name: TFDidThatSay? Name: TFDidThatSay?
Depends: mobilesubstrate, ws.hbang.common
Version: 1.3.0
Depends: mobilesubstrate
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>

+ 20
- 0
prefs/Resources/Root.plist View File

<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>

+ 1
- 0
tweak/Apollo.h View File

-(void) calculatedLayoutDidChange; -(void) calculatedLayoutDidChange;
//custom elements //custom elements
@property(strong,nonatomic) UIButton *undeleteButton;
-(void) undeleteCellWasSelected; -(void) undeleteCellWasSelected;
@end @end

+ 91
- 19
tweak/Apollo.xm View File

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
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"];
NSArray *visibleCells = [arg1 visibleCells];
id prevCell = visibleCells[[visibleCells count] - 2];
id undeleteCell = [arg1 dequeueReusableCellWithIdentifier:@"IconActionCell" forIndexPath:arg2];
id prevCell = [arg1 dequeueReusableCellWithIdentifier:@"IconActionCell"];
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];
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;
} }
%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 ([%c(TFHelper) shouldShowUndeleteButtonWithInfo:commentBody isDeletedOnly:isTFDeletedOnly]){
shouldAddUndeleteCell = YES;
apolloCommentCell = self;
apolloCommentController = nil;
if (!shouldApolloHaveButton){
NSString *commentBody = [MSHookIvar<RKComment *>(self, "comment") body];
if ([%c(TFHelper) shouldShowUndeleteButtonWithInfo:commentBody isDeletedOnly:isTFDeletedOnly]){
shouldAddUndeleteCell = YES;
apolloCommentCell = self;
apolloCommentController = nil;
}
} }
%orig; %orig;
-(void) longPressedWithGestureRecognizer:(id) arg1{ -(void) longPressedWithGestureRecognizer:(id) arg1{
NSString *commentBody = [MSHookIvar<RKComment *>(self, "comment") body];
if ([%c(TFHelper) shouldShowUndeleteButtonWithInfo:commentBody isDeletedOnly:isTFDeletedOnly]){
shouldAddUndeleteCell = YES;
apolloCommentCell = self;
apolloCommentController = nil;
if (!shouldApolloHaveButton){
NSString *commentBody = [MSHookIvar<RKComment *>(self, "comment") body];
if ([%c(TFHelper) shouldShowUndeleteButtonWithInfo:commentBody isDeletedOnly:isTFDeletedOnly]){
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{
[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
} else { } else {
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;
} }
} }

Loading…
Cancel
Save