From 1ce3903ffc44ec52fa8c5d1ed4504a8d003c2e90 Mon Sep 17 00:00:00 2001 From: lint <47455468+lint@users.noreply.github.com> Date: Thu, 26 Sep 2019 00:33:55 -0400 Subject: [PATCH] Add files --- Makefile | 12 + Tweak.h | 125 ++++++++ Tweak.xm | 298 ++++++++++++++++++ control | 9 + .../TFDidThatSay/eye160dark.png | Bin 0 -> 5722 bytes .../TFDidThatSay/eye160light.png | Bin 0 -> 5724 bytes tfdidthatsay.plist | 1 + 7 files changed, 445 insertions(+) create mode 100644 Makefile create mode 100644 Tweak.h create mode 100644 Tweak.xm create mode 100644 control create mode 100644 layout/var/mobile/Library/Application Support/TFDidThatSay/eye160dark.png create mode 100644 layout/var/mobile/Library/Application Support/TFDidThatSay/eye160light.png create mode 100644 tfdidthatsay.plist diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..4a235ab --- /dev/null +++ b/Makefile @@ -0,0 +1,12 @@ +ARCHS = arm64 arm64e + +include $(THEOS)/makefiles/common.mk + +TWEAK_NAME = tfdidthatsay +tfdidthatsay_FILES = Tweak.xm +#tfdidthatsay_CFLAGS = -fobjc-arc + +include $(THEOS_MAKE_PATH)/tweak.mk + +after-install:: + install.exec "killall -9 Reddit" diff --git a/Tweak.h b/Tweak.h new file mode 100644 index 0000000..a9a10b7 --- /dev/null +++ b/Tweak.h @@ -0,0 +1,125 @@ + + +/* -- Comment Interfaces -- */ + + +@interface Comment +@property(assign,nonatomic) id bodyRichTextAttributed; +@property(assign,nonatomic) id pk; +@end + +@interface CommentTreeNode +@property(assign,nonatomic) id comment; + +//custom elements +@property(assign,nonatomic) id commentTreeHeaderNode; +@property(assign,nonatomic) id commentTreeCommandBarNode; +@property(assign,nonatomic) BOOL isLoadingArchivedComment; +@end + +@interface CommentTreeDisplayNode +@property(assign,nonatomic) id commentNode; +@end + +@interface CommentTreeHeaderNode +@property(assign,nonatomic) id commentTreeNode; +-(void) updateContentViewsForData:(id)arg1; +@end + +@interface CommentTreeCommandBarNode +@property(assign,nonatomic) id commentTreeNode; +@property(assign,nonatomic) id delegate; +@property(assign,nonatomic) UIView* view; +@property(assign,nonatomic) id overflowButtonNode; +@property(assign,nonatomic) CGRect frame; + +//custom elements +@property(assign,nonatomic) id activityIndicator; +@property(assign,nonatomic) id undeleteButton; +@end + +@interface CommentActionSheetViewController : UIViewController +@property(assign,nonatomic) id comment; +@property(assign,nonatomic) id commentTreeNode; +-(id)animationControllerForDismissedController:(id) arg1; +@end + + +/* -- Post Interfaces -- */ + + +@interface Post +@property(assign,nonatomic) id author; +@property(assign,nonatomic) BOOL isSelfPost; +@property(assign,nonatomic) id selfText; +@property(assign,nonatomic) id selfTextAttributed; +@property(assign,nonatomic) id selfPostRichTextAttributed; +@end + +@interface PostDetailViewController +@property(assign,nonatomic) id selfTextNode; +-(void) configureSelfTextNode; + +//custom elements +@property(assign,nonatomic) id feedPostTextWithThumbnailNode; +@property(assign,nonatomic) id feedPostDetailCellNode; +@end + +@interface PostActionSheetViewController : UIViewController +@property(assign,nonatomic) id post; +@property(assign,nonatomic) id postActionSheetDelegate; +@end + +@interface PostDetailNavigationItemHandler +@property(assign,nonatomic) id controller; +@property(assign,nonatomic) id presenter; +@end + +@interface FeedPostDetailCellNode +@property(assign,nonatomic) id textNode; +@property(assign,nonatomic) id delegate; +@end + +@interface FeedPostDetailDelegator +@property(assign,nonatomic) id viewController; +@end + + +/* -- Other Interfaces -- */ + + +@interface RichTextDisplayNode +@property(assign,nonatomic) id attributedText; +@end + +@interface RUIActionSheetItem : NSObject +@property(assign,nonatomic) id leftIconImage; +-(id) initWithLeftIconImage:(id) arg1 text:(id) arg2 identifier:(id) arg3 context:(id) arg4; +@end + +@interface NSAttributedStringMarkdownParser ++(id) currentConfig; ++(id) attributedStringUsingCurrentConfig:(id) arg1; +-(id) attributedStringFromMarkdownString:(id) arg1; +-(id) initWithConfig:(id) arg1; +@end + + +/* -- ActivityIndicator Interfaces -- */ + + +@interface AccountManager +@property(assign,nonatomic) id defaults; ++(id) sharedManager; +@end + +@interface _ASCollectionViewCell +@property(assign,nonatomic) id node; +@end + +@interface CellDisplayNodeWrapper +@property(assign,nonatomic) id contentNode; +@end + + + diff --git a/Tweak.xm b/Tweak.xm new file mode 100644 index 0000000..d2d600d --- /dev/null +++ b/Tweak.xm @@ -0,0 +1,298 @@ + +#include "Tweak.h" + +%group Redditv4 + +%hook CommentTreeNode +%property(assign,nonatomic)id commentTreeHeaderNode; +%property(assign,nonatomic)id commentTreeCommandBarNode; +%property(assign,nonatomic)BOOL isLoadingArchivedComment; +%end + + +%hook CommentTreeHeaderNode + +-(void) didLoad{ + %orig; + + [[self commentTreeNode] setCommentTreeHeaderNode:self]; +} +%end + + +%hook CommentTreeCommandBarNode +%property(assign,nonatomic) id activityIndicator; +%property(assign,nonatomic) id undeleteButton; + +-(void) didLoad{ + %orig; + + [[self commentTreeNode] setCommentTreeCommandBarNode:self]; + [[self commentTreeNode] setIsLoadingArchivedComment:NO]; +} +%end + + +/* +%hook ASCollectionView + +-(id) dequeueReusableCellWithReuseIdentifier: (id) arg1 forIndexPath:(id) arg2{ + id orig = %orig; + + if ([orig isKindOfClass:[%c(_ASCollectionViewCell) class]]){ + + id node = [[orig node] contentNode]; + + if ([node isKindOfClass:[%c(CommentTreeDisplayNode) class]]) { + id commentNode = [node commentNode]; + + if ([commentNode isLoadingArchivedComment]){ + + //[[[commentNode commentTreeCommandBarNode] activityIndicator] startAnimating]; + + } + } + } + return orig; +} +%end +*/ + + +%hook CommentActionSheetViewController + +-(void) setItems:(id) arg1{ + + UIImage* origImage = [UIImage imageWithContentsOfFile:@"/var/mobile/Library/Application Support/TFDidThatSay/eye160dark.png"]; + + CGSize existingImageSize = [[arg1[0] leftIconImage] size]; + CGFloat scale = origImage.size.width / existingImageSize.width; + + UIImage *newImage = [UIImage imageWithCGImage:[origImage CGImage] scale:scale orientation:origImage.imageOrientation]; + + id undeleteItem = [[%c(RUIActionSheetItem) alloc] initWithLeftIconImage:newImage text:@"TF did that say?" identifier:@"undeleteItemIdentifier" context:[self comment]]; + + %orig([arg1 arrayByAddingObject:undeleteItem]); + + [undeleteItem release]; + +} + +-(void) handleDidSelectActionSheetItem:(id) arg1{ + %orig; + + if ([[arg1 identifier] isEqualToString:@"undeleteItemIdentifier"]){ + + [self dismissViewControllerAnimated:YES completion:nil]; + + id commentTreeNode = [self commentTreeNode]; + id comment = [commentTreeNode comment]; + + [commentTreeNode setIsLoadingArchivedComment:YES]; + + /* + id isNightMode = [[[%c(AccountManager) sharedManager] defaults] objectForKey:@"kUseNightKey"]; + if (isNightMode){ + UIActivityIndicatorView* activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; + } else { + UIActivityIndicatorView* activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; + } + [self setActivityIndicator:activityIndicator]; + [activityIndicator startAnimating]; + [sender addSubview:activityIndicator]; + */ + + NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; + NSOperationQueue *queue = [[NSOperationQueue alloc] init]; + + [request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://api.pushshift.io/reddit/search/comment/?ids=%@&fields=author,body",[[comment pk] componentsSeparatedByString:@"_"][1]]]]; + [request setHTTPMethod:@"GET"]; + + [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { + + NSString *author = @"[author]"; + NSString *body = @"[body]"; + + if (data != nil && error == nil){ + + id jsonData = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; + + author = [[jsonData objectForKey:@"data"][0] objectForKey:@"author"]; + body = [[jsonData objectForKey:@"data"][0] objectForKey:@"body"]; + + if ([body isEqualToString:@"[deleted]"] || [body isEqualToString:@"[removed]"]){ + body = @"[comment was unable to be archived]"; + } + + } else if (error != nil || data == nil){ + body = @"[an error occured]"; + } + + + id textColor = [[comment bodyRichTextAttributed] attributesAtIndex:0 longestEffectiveRange:nil inRange:NSMakeRange(0, [[comment bodyRichTextAttributed] length])][@"NSColor"]; + + NSMutableAttributedString *bodyMutableAttributedText = [[NSMutableAttributedString alloc] initWithAttributedString:[%c(NSAttributedStringMarkdownParser) attributedStringUsingCurrentConfig:body]]; + + [bodyMutableAttributedText beginEditing]; + [bodyMutableAttributedText enumerateAttribute:NSForegroundColorAttributeName inRange:NSMakeRange(0, bodyMutableAttributedText.length) options:0 usingBlock:^(id _Nullable value, NSRange range, BOOL * _Nonnull stop) { + [bodyMutableAttributedText removeAttribute:NSForegroundColorAttributeName range:range]; + [bodyMutableAttributedText addAttribute:NSForegroundColorAttributeName value:textColor range:range]; + }]; + [bodyMutableAttributedText endEditing]; + + [comment setValue:bodyMutableAttributedText forKey:@"bodyRichTextAttributed"]; + + [comment setValue:author forKey:@"author"]; + [comment setValue:body forKey:@"bodyText"]; + + [comment setValue:bodyMutableAttributedText forKey:@"bodyAttributedText"]; + + [[commentTreeNode commentTreeHeaderNode] updateContentViewsForData:comment]; + + + [commentTreeNode setIsLoadingArchivedComment:NO]; + //[activityIndicator stopAnimating]; + + [request release]; + [queue release]; + [bodyMutableAttributedText release]; + }]; + } +} +%end + + +%hook PostDetailViewController +%property(assign,nonatomic) id feedPostTextWithThumbnailNode; +%property(assign,nonatomic) id feedPostDetailCellNode; +%end + + +%hook FeedPostDetailCellNode + +-(void) didLoad{ + %orig; + + [[[self delegate] viewController] setFeedPostTextWithThumbnailNode:[self textNode]]; + [[[self delegate] viewController] setFeedPostDetailCellNode:self]; +} +%end + + +%hook PostActionSheetViewController + +-(void) setItems:(id) arg1{ + + id post = [self post]; + + if ([post isSelfPost]){ + + UIImage* origImage = [UIImage imageWithContentsOfFile:@"/var/mobile/Library/Application Support/TFDidThatSay/eye160dark.png"]; + + CGSize existingImageSize = [[arg1[0] leftIconImage] size]; + CGFloat scale = origImage.size.width / existingImageSize.width; + + UIImage *newImage = [UIImage imageWithCGImage:[origImage CGImage] scale:scale orientation:origImage.imageOrientation]; + + id undeleteItem = [[%c(RUIActionSheetItem) alloc] initWithLeftIconImage:newImage text:@"TF did that say?" identifier:@"undeleteItemIdentifier" context:[self post]]; + + arg1 = [arg1 arrayByAddingObject:undeleteItem]; + + [undeleteItem release]; + } + + %orig; +} + + +-(void) handleDidSelectActionSheetItem:(id) arg1{ + %orig; + + if ([[arg1 identifier] isEqualToString:@"undeleteItemIdentifier"]){ + + [self dismissViewControllerAnimated:YES completion:nil]; + + id post = [self post]; + + if ([post isSelfPost]){ + + NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; + NSOperationQueue *queue = [[NSOperationQueue alloc] init]; + + [request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://api.pushshift.io/reddit/search/submission/?ids=%@&fields=author,selftext",[[post pk] componentsSeparatedByString:@"_"][1]]]]; + [request setHTTPMethod:@"GET"]; + + [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { + + NSString *author = @"[author]"; + NSString *body = @"[body]"; + + if (data != nil && error == nil){ + + id jsonData = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; + + author = [[jsonData objectForKey:@"data"][0] objectForKey:@"author"]; + body = [[jsonData objectForKey:@"data"][0] objectForKey:@"selftext"]; + + if ([body isEqualToString:@"[deleted]"] || [body isEqualToString:@"[removed]"]){ + body = @"[comment was unable to be archived]"; + } + + } else if (error != nil || data == nil){ + body = @"[an error occured]"; + } + + id textColor = [[post selfPostRichTextAttributed] attributesAtIndex:0 longestEffectiveRange:nil inRange:NSMakeRange(0, [[post selfPostRichTextAttributed] length])][@"NSColor"]; + + if (textColor == nil){ + textColor = [UIColor colorWithRed:0.843137 green:0.854902 blue:0.862745 alpha:1.0]; + } + + NSMutableAttributedString *bodyMutableAttributedText = [[NSMutableAttributedString alloc] initWithAttributedString:[%c(NSAttributedStringMarkdownParser) attributedStringUsingCurrentConfig:body]]; + + [bodyMutableAttributedText beginEditing]; + [bodyMutableAttributedText enumerateAttribute:NSForegroundColorAttributeName inRange:NSMakeRange(0, bodyMutableAttributedText.length) options:0 usingBlock:^(id _Nullable value, NSRange range, BOOL * _Nonnull stop) { + [bodyMutableAttributedText removeAttribute:NSForegroundColorAttributeName range:range]; + [bodyMutableAttributedText addAttribute:NSForegroundColorAttributeName value:textColor range:range]; + }]; + [bodyMutableAttributedText endEditing]; + + [post setValue:bodyMutableAttributedText forKey:@"selfPostRichTextAttributed"]; + [post setValue:bodyMutableAttributedText forKey:@"previewFeedPostTextString"]; + [post setAuthor:author]; + [post setValue:body forKey:@"selfText"]; + + + [[[[self postActionSheetDelegate] controller] feedPostDetailCellNode] configureSelfTextNode]; + + [request release]; + [queue release]; + [bodyMutableAttributedText release]; + }]; + } + } +} +%end + +%end + + + + +%ctor{ + + NSString* version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; + NSArray* versionArray = [version componentsSeparatedByString:@"."]; + + if ([versionArray[0] isEqualToString:@"4"]){ + %init(Redditv4); + } else if ([versionArray[0] isEqualToString:@"3"]) { + + } + +} + + + + + diff --git a/control b/control new file mode 100644 index 0000000..5a5df97 --- /dev/null +++ b/control @@ -0,0 +1,9 @@ +Package: com.lint.undelete +Name: TFDidThatSay? +Depends: mobilesubstrate +Version: 1.1.0 +Architecture: iphoneos-arm +Description: See "[deleted]" comments and posts without leaving Reddit! +Maintainer: lint +Author: lint +Section: Tweaks diff --git a/layout/var/mobile/Library/Application Support/TFDidThatSay/eye160dark.png b/layout/var/mobile/Library/Application Support/TFDidThatSay/eye160dark.png new file mode 100644 index 0000000000000000000000000000000000000000..cac642d567cf142f4f00c637cb62710fe4c12322 GIT binary patch literal 5722 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 literal 0 HcmV?d00001 diff --git a/layout/var/mobile/Library/Application Support/TFDidThatSay/eye160light.png b/layout/var/mobile/Library/Application Support/TFDidThatSay/eye160light.png new file mode 100644 index 0000000000000000000000000000000000000000..9779a9f6dd61d33170764e13cc536427152ea5e1 GIT binary patch literal 5724 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 literal 0 HcmV?d00001 diff --git a/tfdidthatsay.plist b/tfdidthatsay.plist new file mode 100644 index 0000000..5849087 --- /dev/null +++ b/tfdidthatsay.plist @@ -0,0 +1 @@ +{ Filter = { Bundles = ( "com.reddit.Reddit" ); }; }