NewsBlur/clients/ios/Classes/UserProfileViewController.m

311 lines
12 KiB
Mathematica
Raw Normal View History

2012-07-01 18:26:39 -07:00
//
// UserProfileViewController.m
// NewsBlur
//
// Created by Roy Yang on 7/1/12.
// Copyright (c) 2012 NewsBlur. All rights reserved.
//
#import "UserProfileViewController.h"
#import "NewsBlurAppDelegate.h"
2012-07-09 21:13:06 -07:00
#import "ProfileBadge.h"
2012-07-21 18:25:56 -07:00
#import "SmallActivityCell.h"
2012-08-10 18:10:07 -07:00
#import "FollowGrid.h"
2012-07-01 18:26:39 -07:00
#import "Utilities.h"
#import "MBProgressHUD.h"
2012-07-13 14:21:55 -07:00
#import <QuartzCore/QuartzCore.h>
2012-07-01 18:26:39 -07:00
@implementation UserProfileViewController
@synthesize appDelegate;
2012-07-09 21:13:06 -07:00
@synthesize profileBadge;
2012-07-13 14:21:55 -07:00
@synthesize profileTable;
2012-07-13 16:02:21 -07:00
@synthesize activitiesArray;
@synthesize activitiesUsername;
@synthesize userProfile;
@synthesize request;
2012-07-01 18:26:39 -07:00
2012-08-02 18:00:48 -07:00
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
2012-07-01 18:26:39 -07:00
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)dealloc {
self.profileTable.dataSource = nil;
self.profileTable.delegate = nil;
request.delegate = nil;
[request cancel];
}
2012-08-02 18:00:48 -07:00
- (void)viewDidLoad {
2012-07-01 18:26:39 -07:00
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
self.appDelegate = (NewsBlurAppDelegate *)[[UIApplication sharedApplication] delegate];
UITableView *profiles = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) style:UITableViewStyleGrouped];
self.profileTable = profiles;
self.profileTable.dataSource = self;
self.profileTable.delegate = self;
self.profileTable.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
self.profileTable.backgroundView = nil;
self.profileTable.backgroundColor = UIColorFromRGB(0xFFFFFF);
2014-09-22 11:44:29 -07:00
// self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
ProfileBadge *badge = [[ProfileBadge alloc] init];
self.profileBadge = badge;
}
2012-08-02 18:00:48 -07:00
- (void)viewDidUnload {
[super viewDidUnload];
// Release any retained subviews of the main view.
2012-08-02 18:00:48 -07:00
self.appDelegate = nil;
self.profileBadge = nil;
self.profileTable = nil;
self.activitiesArray = nil;
self.activitiesUsername = nil;
self.userProfile = nil;
}
2012-07-28 14:56:40 -07:00
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
CGRect vb = self.view.bounds;
self.preferredContentSize = self.view.frame.size;
self.view.frame = vb;
self.profileTable.frame = vb;
self.profileBadge.frame = CGRectMake(0, 0, vb.size.width, 140);
2015-12-07 16:09:49 -08:00
self.view.backgroundColor = UIColorFromRGB(0xd7dadf);
self.profileTable.backgroundColor = UIColorFromRGB(0xd7dadf);
2012-07-28 14:56:40 -07:00
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
2012-07-01 18:26:39 -07:00
return YES;
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
[self.profileTable reloadData];
}
// allow keyboard comands
- (BOOL)canBecomeFirstResponder {
return YES;
}
2012-07-01 21:58:55 -07:00
- (void)doCancelButton {
[appDelegate.modalNavigationController dismissViewControllerAnimated:NO completion:nil];
2012-07-01 21:58:55 -07:00
}
2012-07-01 18:26:39 -07:00
- (void)getUserProfile {
2014-09-22 11:44:29 -07:00
// self.view.frame = self.view.bounds;
self.preferredContentSize = CGSizeMake(320, 454);
self.appDelegate = (NewsBlurAppDelegate *)[[UIApplication sharedApplication] delegate];
[MBProgressHUD hideHUDForView:self.view animated:YES];
MBProgressHUD *HUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
2012-07-11 18:08:07 -07:00
HUD.labelText = @"Profiling...";
2012-07-09 21:13:06 -07:00
[self.profileBadge initProfile];
2012-08-13 22:48:50 -07:00
NSString *urlString = [NSString stringWithFormat:@
"%@/social/profile?user_id=%@"
2012-08-13 22:53:00 -07:00
"&category=follow&category=comment_reply&category=comment_like&category=sharedstory",
2016-01-21 22:11:37 -08:00
self.appDelegate.url,
appDelegate.activeUserProfileId];
2012-07-01 18:26:39 -07:00
2017-03-19 18:15:36 -07:00
[appDelegate.networkManager GET:urlString parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
[self requestFinished:responseObject];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[self informError:error];
}];
2012-07-01 18:26:39 -07:00
}
2017-03-19 18:15:36 -07:00
- (void)requestFinished:(NSDictionary *)results {
2012-07-01 18:26:39 -07:00
[MBProgressHUD hideHUDForView:self.view animated:YES];
2017-03-19 18:15:36 -07:00
2012-07-01 18:26:39 -07:00
int code = [[results valueForKey:@"code"] intValue];
if (code == -1) {
NSLog(@"ERROR");
return;
}
[MBProgressHUD hideHUDForView:self.view animated:YES];
self.userProfile = [results objectForKey:@"user_profile"];
NSString *currentUserId = [NSString stringWithFormat:@"%@", [self.appDelegate.dictSocialProfile objectForKey:@"user_id"]];
NSString *profileUserId = [NSString stringWithFormat:@"%@", [self.userProfile objectForKey:@"user_id"]];
// check follow button status
if ([currentUserId isEqualToString:profileUserId]) {
NSMutableDictionary *newUserProfile = [self.userProfile mutableCopy];
2012-08-09 10:18:15 -07:00
[newUserProfile setValue:[NSNumber numberWithInt:1] forKey:@"yourself"];
self.userProfile = newUserProfile;
}
2012-07-13 16:02:21 -07:00
self.activitiesArray = [results objectForKey:@"activities"];
2012-07-13 14:21:55 -07:00
[self.profileTable reloadData];
2012-07-13 16:02:21 -07:00
[self.view addSubview:self.profileTable];
2012-07-01 18:26:39 -07:00
}
2012-07-13 14:21:55 -07:00
#pragma mark -
#pragma mark Table View - Profile Modules List
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 2;
2012-07-13 14:21:55 -07:00
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
if (section == 1 && self.activitiesArray.count) {
2012-07-13 14:21:55 -07:00
return @"Latest Activity";
2012-08-10 18:10:07 -07:00
} else if (section == 2 && self.activitiesArray.count) {
return @"Followers";
2012-07-13 14:21:55 -07:00
} else {
return nil;
}
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (section == 0) {
return 1;
2012-08-10 18:10:07 -07:00
} else if (section == 2) {
return 1;
2012-07-13 14:21:55 -07:00
} else {
return [self.activitiesArray count];
2012-07-13 14:21:55 -07:00
}
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
2012-08-10 18:10:07 -07:00
if (indexPath.section == 0 || indexPath.section == 2) {
2012-07-13 14:21:55 -07:00
return 180;
} else {
2012-07-21 18:25:56 -07:00
SmallActivityCell *activityCell = [[SmallActivityCell alloc] init];
int height = [activityCell setActivity:[self.activitiesArray objectAtIndex:(indexPath.row)]
withUserProfile:self.userProfile
withWidth:self.view.frame.size.width - 20];
2012-07-13 18:14:32 -07:00
return height;
2012-07-13 14:21:55 -07:00
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
CGRect vb = self.view.bounds;
2012-07-13 14:21:55 -07:00
if (indexPath.section == 0) {
ProfileBadge *cell = [tableView
dequeueReusableCellWithIdentifier:@"ProfileBadgeCellIdentifier"];
2012-07-21 18:25:56 -07:00
if (cell == nil) {
cell = [[ProfileBadge alloc]
2012-07-21 18:25:56 -07:00
initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:nil];
}
2013-10-08 12:36:43 -07:00
[cell refreshWithProfile:self.userProfile showStats:YES withWidth:vb.size.width];
2012-07-21 18:25:56 -07:00
2012-07-13 14:21:55 -07:00
cell.selectionStyle = UITableViewCellSelectionStyleNone;
2012-07-21 18:25:56 -07:00
return cell;
2012-08-10 18:10:07 -07:00
} else if(indexPath.section == 1) {
2012-07-21 18:25:56 -07:00
SmallActivityCell *cell = [tableView
dequeueReusableCellWithIdentifier:@"ActivityCellIdentifier"];
2012-07-21 18:25:56 -07:00
if (cell == nil) {
cell = [[SmallActivityCell alloc]
initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:@"ActivityCellIdentifier"];
}
2012-08-10 09:45:44 -07:00
cell.selectionStyle = UITableViewCellSelectionStyleGray;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
2012-07-21 18:25:56 -07:00
[cell setActivity:[self.activitiesArray objectAtIndex:(indexPath.row)]
withUserProfile:self.userProfile
2013-10-08 12:36:43 -07:00
withWidth:vb.size.width];
2012-07-21 18:25:56 -07:00
return cell;
2012-08-10 18:10:07 -07:00
} else {
FollowGrid *cell = [tableView
dequeueReusableCellWithIdentifier:@"FollowGridCellIdentifier"];
2012-08-10 18:10:07 -07:00
if (cell == nil) {
cell = [[FollowGrid alloc]
initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:@"FollowGridCellIdentifier"];
}
cell.selectionStyle = UITableViewCellSelectionStyleNone;
2013-10-08 12:36:43 -07:00
[cell refreshWithWidth:vb.size.width];
2012-08-10 18:10:07 -07:00
return cell;
2012-07-13 14:21:55 -07:00
}
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSInteger activitiesCount = [self.activitiesArray count];
// badge is not tappable
2012-08-10 18:10:07 -07:00
if (indexPath.section == 0 || indexPath.section == 2) {
return;
}
if (indexPath.row < activitiesCount) {
NSDictionary *activity = [self.activitiesArray objectAtIndex:indexPath.row];
NSString *category = [activity objectForKey:@"category"];
if ([category isEqualToString:@"follow"]) {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
NSString *userId = [NSString stringWithFormat:@"%@",
[[activity objectForKey:@"with_user"] objectForKey:@"user_id"]];
appDelegate.activeUserProfileId = userId;
NSString *username = [NSString stringWithFormat:@"%@",
[[activity objectForKey:@"with_user"] objectForKey:@"username"]];
appDelegate.activeUserProfileName = username;
[appDelegate pushUserProfile];
} else if ([category isEqualToString:@"comment_reply"]) {
NSString *feedIdStr = [NSString stringWithFormat:@"%@",
[[activity objectForKey:@"with_user"] objectForKey:@"id"]];
NSString *contentIdStr = [NSString stringWithFormat:@"%@",
[activity objectForKey:@"content_id"]];
[appDelegate loadTryFeedDetailView:feedIdStr
withStory:contentIdStr
isSocial:YES
withUser:[activity objectForKey:@"with_user"]
showFindingStory:YES];
appDelegate.tryFeedCategory = category;
} else if ([category isEqualToString:@"comment_like"]) {
NSString *feedIdStr = [NSString stringWithFormat:@"%@",
[[activity objectForKey:@"with_user"] objectForKey:@"id"]];
NSString *contentIdStr = [NSString stringWithFormat:@"%@",
[activity objectForKey:@"content_id"]];
[appDelegate loadTryFeedDetailView:feedIdStr
withStory:contentIdStr
isSocial:YES
withUser:self.userProfile
showFindingStory:YES];
2012-08-01 12:41:02 -07:00
appDelegate.tryFeedCategory = category;
} else if ([category isEqualToString:@"sharedstory"]) {
NSString *feedIdStr = [NSString stringWithFormat:@"%@",
[self.userProfile objectForKey:@"id"]];
NSString *contentIdStr = [NSString stringWithFormat:@"%@",
[activity objectForKey:@"content_id"]];
[appDelegate loadTryFeedDetailView:feedIdStr
withStory:contentIdStr
isSocial:YES
withUser:self.userProfile
showFindingStory:YES];
2012-08-01 12:41:02 -07:00
appDelegate.tryFeedCategory = category;
} else if ([category isEqualToString:@"feedsub"]) {
NSString *feedIdStr = [NSString stringWithFormat:@"%@",
[activity objectForKey:@"feed_id"]];
NSString *contentIdStr = nil;
[appDelegate loadTryFeedDetailView:feedIdStr
withStory:contentIdStr
isSocial:NO
withUser:self.userProfile
showFindingStory:NO];
}
// have the selected cell deselect
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
}
@end