NewsBlur/media/ios/Classes/ShareViewController.m

327 lines
13 KiB
Mathematica
Raw Normal View History

2012-06-21 11:53:48 -07:00
//
// ShareViewController.m
// NewsBlur
//
// Created by Roy Yang on 6/21/12.
// Copyright (c) 2012 NewsBlur. All rights reserved.
//
#import "ShareViewController.h"
#import "NewsBlurAppDelegate.h"
#import "StoryDetailViewController.h"
2012-06-22 11:52:10 -07:00
#import <QuartzCore/QuartzCore.h>
#import "Utilities.h"
2012-07-20 15:54:10 -07:00
#import "DataUtilities.h"
2012-06-25 20:28:07 -07:00
#import "JSON.h"
2012-06-22 11:52:10 -07:00
#import "ASIHTTPRequest.h"
2012-06-21 11:53:48 -07:00
@implementation ShareViewController
2012-06-24 20:08:39 -07:00
@synthesize facebookButton;
@synthesize twitterButton;
2012-06-25 18:05:25 -07:00
@synthesize submitButton;
@synthesize toolbarTitle;
2012-06-22 11:52:10 -07:00
@synthesize commentField;
2012-06-21 11:53:48 -07:00
@synthesize appDelegate;
2012-07-20 18:04:54 -07:00
@synthesize activeCommentIndex;
2012-06-21 11:53:48 -07:00
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
// Do any additional setup after loading the view from its nib.
2012-06-22 11:52:10 -07:00
commentField.layer.borderWidth = 1.0f;
commentField.layer.cornerRadius = 8;
commentField.layer.borderColor = [[UIColor grayColor] CGColor];
2012-06-24 20:08:39 -07:00
2012-06-24 23:02:37 -07:00
NSUserDefaults *userPreferences = [NSUserDefaults standardUserDefaults];
2012-06-24 20:08:39 -07:00
if ([userPreferences integerForKey:@"shareToFacebook"]){
facebookButton.selected = YES;
}
if ([userPreferences integerForKey:@"shareToTwitter"]){
twitterButton.selected = YES;
}
2012-07-12 23:44:14 -07:00
self.appDelegate = (NewsBlurAppDelegate *)[[UIApplication sharedApplication] delegate];
2012-07-20 18:04:54 -07:00
[super viewDidLoad];
2012-06-21 11:53:48 -07:00
}
- (void)viewDidUnload
{
2012-06-22 11:52:10 -07:00
[self setCommentField:nil];
2012-06-24 20:08:39 -07:00
[self setFacebookButton:nil];
[self setTwitterButton:nil];
2012-06-25 18:05:25 -07:00
[self setSubmitButton:nil];
[self setToolbarTitle:nil];
2012-06-21 11:53:48 -07:00
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
2012-06-21 11:53:48 -07:00
return YES;
}
2012-07-12 23:44:14 -07:00
- (void)viewDidAppear:(BOOL)animated {
2012-07-25 20:38:44 -07:00
// if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
// [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShowOrHide:) name:UIKeyboardWillShowNotification object:nil];
// [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShowOrHide:) name:UIKeyboardWillHideNotification object:nil];
// } else {
// [self.commentField becomeFirstResponder];
// }
2012-06-21 11:53:48 -07:00
}
- (IBAction)doCancelButton:(id)sender {
[appDelegate hideShareView:NO];
2012-06-21 11:53:48 -07:00
}
2012-06-22 11:52:10 -07:00
- (IBAction)doToggleButton:(id)sender {
UIButton *button = (UIButton *)sender;
2012-06-24 20:08:39 -07:00
NSUserDefaults *userPreferences = [NSUserDefaults standardUserDefaults];
2012-06-22 11:52:10 -07:00
if (button.selected) {
button.selected = NO;
2012-06-24 20:08:39 -07:00
if ([[button currentTitle] isEqualToString: @"Facebook"]) {
[userPreferences setInteger:0 forKey:@"shareToFacebook"];
} else if ([[button currentTitle] isEqualToString: @"Twitter"]) {
[userPreferences setInteger:0 forKey:@"shareToTwitter"];
}
2012-06-22 11:52:10 -07:00
} else {
button.selected = YES;
2012-06-24 20:08:39 -07:00
if ([[button currentTitle] isEqualToString: @"Facebook"]) {
[userPreferences setInteger:1 forKey:@"shareToFacebook"];
} else if ([[button currentTitle] isEqualToString: @"Twitter"]) {
[userPreferences setInteger:1 forKey:@"shareToTwitter"];
}
2012-06-22 11:52:10 -07:00
}
2012-06-24 20:08:39 -07:00
[userPreferences synchronize];
2012-06-22 11:52:10 -07:00
}
2012-07-20 15:54:10 -07:00
- (void)setSiteInfo:(NSString *)type setUserId:(NSString *)userId setUsername:(NSString *)username setCommentIndex:(NSString *)commentIndex {
if ([type isEqualToString: @"edit-reply"]) {
[submitButton setTitle:@"Save"];
facebookButton.hidden = YES;
twitterButton.hidden = YES;
[toolbarTitle setTitle:[NSString stringWithFormat:@"Edit Your Reply"]];
[submitButton setAction:(@selector(doReplyToComment:))];
2012-07-20 18:04:54 -07:00
self.activeCommentIndex = [commentIndex intValue];
2012-07-20 15:54:10 -07:00
// get old comment
NSArray *replies = [appDelegate.activeComment objectForKey:@"replies"];
int commentIdx = [commentIndex intValue];
self.commentField.text = [self stringByStrippingHTML:[[replies objectAtIndex:commentIdx] objectForKey:@"comments"]];
2012-07-20 15:54:10 -07:00
} else if ([type isEqualToString: @"reply"]) {
self.activeCommentIndex = -1;
2012-06-27 14:37:37 -07:00
[submitButton setTitle:@"Reply"];
facebookButton.hidden = YES;
twitterButton.hidden = YES;
2012-06-27 14:37:37 -07:00
[toolbarTitle setTitle:[NSString stringWithFormat:@"Reply to %@", username]];
2012-06-25 18:05:25 -07:00
[submitButton setAction:(@selector(doReplyToComment:))];
2012-07-20 18:04:54 -07:00
self.commentField.text = @"";
2012-07-20 15:54:10 -07:00
} else if ([type isEqualToString: @"edit-share"]) {
facebookButton.hidden = NO;
twitterButton.hidden = NO;
// get old comment
self.commentField.text = [self stringByStrippingHTML:[appDelegate.activeComment objectForKey:@"comments"]];
2012-07-20 15:54:10 -07:00
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[toolbarTitle setTitle:@"Edit Your Comment"];
[submitButton setTitle:@"Save"];
} else {
2012-07-20 18:04:54 -07:00
[toolbarTitle setTitle:@"Edit Comment"];
2012-07-20 15:54:10 -07:00
[submitButton setTitle:@"Save"];
}
[submitButton setAction:(@selector(doShareThisStory:))];
} else if ([type isEqualToString: @"share"]) {
facebookButton.hidden = NO;
twitterButton.hidden = NO;
2012-07-12 23:44:14 -07:00
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[toolbarTitle setTitle:@"Post to Blurblog"];
[submitButton setTitle:@"Share this Story"];
} else {
2012-07-20 18:04:54 -07:00
[toolbarTitle setTitle:@"Post to Blurblog"];
2012-07-12 23:44:14 -07:00
[submitButton setTitle:@"Share"];
}
2012-06-25 18:05:25 -07:00
[submitButton setAction:(@selector(doShareThisStory:))];
2012-07-20 18:04:54 -07:00
self.commentField.text = @"";
2012-06-25 18:05:25 -07:00
}
2012-06-27 15:18:51 -07:00
}
2012-06-25 18:05:25 -07:00
- (void)clearComments {
self.commentField.text = nil;
}
2012-06-24 23:02:37 -07:00
- (IBAction)doShareThisStory:(id)sender {
2012-06-22 11:52:10 -07:00
NSString *urlString = [NSString stringWithFormat:@"http://%@/social/share_story",
NEWSBLUR_URL];
NSString *feedIdStr = [NSString stringWithFormat:@"%@", [appDelegate.activeStory objectForKey:@"story_feed_id"]];
NSString *storyIdStr = [NSString stringWithFormat:@"%@", [appDelegate.activeStory objectForKey:@"id"]];
NSURL *url = [NSURL URLWithString:urlString];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:feedIdStr forKey:@"feed_id"];
[request setPostValue:storyIdStr forKey:@"story_id"];
2012-07-25 20:38:44 -07:00
NSString *comments = commentField.text;
2012-06-25 18:05:25 -07:00
if ([comments length]) {
[request setPostValue:comments forKey:@"comments"];
}
2012-06-22 11:52:10 -07:00
[request setDelegate:self];
[request setDidFinishSelector:@selector(finishAddComment:)];
[request setDidFailSelector:@selector(requestFailed:)];
[request startAsynchronous];
}
2012-06-25 18:05:25 -07:00
- (IBAction)doReplyToComment:(id)sender {
NSString *comments = commentField.text;
if ([comments length] == 0) {
NSLog(@"NO COMMENTS");
return;
}
2012-07-20 18:04:54 -07:00
2012-06-25 18:05:25 -07:00
NSLog(@"REPLY TO COMMENT, %@", appDelegate.activeComment);
NSString *urlString = [NSString stringWithFormat:@"http://%@/social/save_comment_reply",
NEWSBLUR_URL];
NSString *feedIdStr = [NSString stringWithFormat:@"%@", [appDelegate.activeStory objectForKey:@"story_feed_id"]];
NSString *storyIdStr = [NSString stringWithFormat:@"%@", [appDelegate.activeStory objectForKey:@"id"]];
NSURL *url = [NSURL URLWithString:urlString];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:feedIdStr forKey:@"story_feed_id"];
[request setPostValue:storyIdStr forKey:@"story_id"];
[request setPostValue:[appDelegate.activeComment objectForKey:@"user_id"] forKey:@"comment_user_id"];
[request setPostValue:commentField.text forKey:@"reply_comments"];
if (self.activeCommentIndex != -1) {
2012-07-20 18:04:54 -07:00
NSDictionary *activeComment = [[appDelegate.activeComment objectForKey:@"replies"] objectAtIndex:self.activeCommentIndex];
[request setPostValue:[self stringByStrippingHTML:[activeComment objectForKey:@"comments"]] forKey:@"original_message"];
2012-07-20 18:04:54 -07:00
}
2012-06-25 18:05:25 -07:00
[request setDelegate:self];
[request setDidFinishSelector:@selector(finishAddReply:)];
2012-06-25 18:05:25 -07:00
[request setDidFailSelector:@selector(requestFailed:)];
[request startAsynchronous];
}
- (void)finishAddReply:(ASIHTTPRequest *)request {
2012-07-20 18:04:54 -07:00
NSLog(@"\n\n\n%@\n\n\n", [request responseString]);;
NSLog(@"Successfully added.");
NSString *responseString = [request responseString];
NSDictionary *results = [[NSDictionary alloc]
initWithDictionary:[responseString JSONValue]];
// add the comment into the activeStory dictionary
NSDictionary *comment = [results objectForKey:@"comment"];
2012-07-20 15:54:10 -07:00
NSArray *userProfiles = [results objectForKey:@"user_profiles"];
appDelegate.activeFeedUserProfiles = [DataUtilities
updateUserProfiles:appDelegate.activeFeedUserProfiles
withNewUserProfiles:userProfiles];
NSString *commentUserId = [NSString stringWithFormat:@"%@", [comment objectForKey:@"user_id"]];
BOOL foundComment = NO;
NSArray *friendComments = [appDelegate.activeStory objectForKey:@"friend_comments"];
NSMutableArray *newFriendsComments = [[NSMutableArray alloc] init];
for (int i = 0; i < friendComments.count; i++) {
NSString *userId = [NSString stringWithFormat:@"%@",
[[friendComments objectAtIndex:i] objectForKey:@"user_id"]];
if([userId isEqualToString:commentUserId]){
[newFriendsComments addObject:comment];
foundComment = YES;
} else {
[newFriendsComments addObject:[friendComments objectAtIndex:i]];
}
}
// make mutable copy
NSMutableDictionary *newActiveStory = [appDelegate.activeStory mutableCopy];
[newActiveStory setValue:[NSArray arrayWithArray:newFriendsComments] forKey:@"friend_comments"];
if (!foundComment) {
NSArray *publicComments = [appDelegate.activeStory objectForKey:@"public_comments"];
NSMutableArray *newPublicComments = [[NSMutableArray alloc] init];
for (int i = 0; i < publicComments.count; i++) {
NSString *userId = [NSString stringWithFormat:@"%@",
[[publicComments objectAtIndex:i] objectForKey:@"user_id"]];
if([userId isEqualToString:commentUserId]){
[newPublicComments addObject:comment];
} else {
[newPublicComments addObject:[publicComments objectAtIndex:i]];
}
}
2012-07-20 18:04:54 -07:00
2012-07-20 15:54:10 -07:00
[newActiveStory setValue:[NSArray arrayWithArray:publicComments] forKey:@"public_comments"];
} else {
[newActiveStory setValue:[NSArray arrayWithArray:newFriendsComments] forKey:@"friend_comments"];
}
NSDictionary *newStory = [NSDictionary dictionaryWithDictionary:newActiveStory];
[self replaceStory:newStory];
}
2012-06-22 11:52:10 -07:00
- (void)finishAddComment:(ASIHTTPRequest *)request {
2012-06-25 20:28:07 -07:00
NSString *responseString = [request responseString];
NSDictionary *results = [[NSDictionary alloc]
initWithDictionary:[responseString JSONValue]];
2012-07-15 18:23:08 -07:00
[self replaceStory:[results objectForKey:@"story"]];
}
- (void)requestFailed:(ASIHTTPRequest *)request
{
NSError *error = [request error];
NSLog(@"Error: %@", error);
}
- (void)replaceStory:(NSDictionary *)newStory {
[commentField resignFirstResponder];
[appDelegate hideShareView:YES];
// update the current story and the activeFeedStories
appDelegate.activeStory = newStory;
NSMutableArray *newActiveFeedStories = [[NSMutableArray alloc] init];
2012-07-15 18:23:08 -07:00
for (int i = 0; i < appDelegate.activeFeedStories.count; i++) {
NSDictionary *feedStory = [appDelegate.activeFeedStories objectAtIndex:i];
NSString *storyId = [NSString stringWithFormat:@"%@", [feedStory objectForKey:@"id"]];
NSString *currentStoryId = [NSString stringWithFormat:@"%@", [appDelegate.activeStory objectForKey:@"id"]];
if ([storyId isEqualToString: currentStoryId]){
[newActiveFeedStories addObject:newStory];
} else {
[newActiveFeedStories addObject:[appDelegate.activeFeedStories objectAtIndex:i]];
2012-07-15 18:23:08 -07:00
}
}
appDelegate.activeFeedStories = [NSArray arrayWithArray:newActiveFeedStories];
2012-07-15 18:23:08 -07:00
self.commentField.text = nil;
2012-06-25 20:28:07 -07:00
[appDelegate refreshComments];
2012-06-22 11:52:10 -07:00
}
2012-07-25 20:38:44 -07:00
- (BOOL)canBecomeFirstResponder {
return YES;
}
2012-07-25 20:38:44 -07:00
- (NSString *)stringByStrippingHTML:(NSString *)s {
NSRange r;
while ((r = [s rangeOfString:@"<[^>]+>" options:NSRegularExpressionSearch]).location != NSNotFound)
s = [s stringByReplacingCharactersInRange:r withString:@""];
return s;
}
2012-06-21 11:53:48 -07:00
@end