forked from lint/TFDidThatSay
		
	
		
			
				
	
	
		
			316 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			316 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
 | |
| #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 themeManager  = [[%c(ThemeManager) alloc] initWithTraitCollection:nil appSettings:[%c(AppSettings) sharedSettings]];
 | |
| 			id isNightMode = [[[%c(AccountManager) sharedManager] defaults] objectForKey:@"kUseNightKey"];
 | |
| 			id textColor;
 | |
| 			
 | |
| 			if (isNightMode) {
 | |
| 				textColor = [[themeManager nightTheme] bodyTextColor];
 | |
| 			} else{
 | |
| 				textColor = [[themeManager dayTheme] bodyTextColor];
 | |
| 			}
 | |
| 			
 | |
| 			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];
 | |
| 			[themeManager 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 themeManager  = [[%c(ThemeManager) alloc] initWithTraitCollection:nil appSettings:[%c(AppSettings) sharedSettings]];
 | |
| 				id isNightMode = [[[%c(AccountManager) sharedManager] defaults] objectForKey:@"kUseNightKey"];
 | |
| 				id textColor;
 | |
| 				
 | |
| 				if (isNightMode) {
 | |
| 					textColor = [[themeManager nightTheme] bodyTextColor];
 | |
| 				} else{
 | |
| 					textColor = [[themeManager dayTheme] bodyTextColor];
 | |
| 				}
 | |
| 
 | |
| 				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];
 | |
| 				[themeManager 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"]) {
 | |
| 		
 | |
| 	}
 | |
| 
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 |