Commit 7fc917f3b6bf31112dc61d5d95884d3d7861da19

Authored by nvtu11790@gmail.com
1 parent 0db82ed0b5

add get member of group API, join group API.

Showing 15 changed files with 282 additions and 47 deletions Side-by-side Diff

LifeLog/LifeLog.xcodeproj/project.pbxproj
... ... @@ -57,6 +57,7 @@
57 57 E9373E471F3596940059355A /* AutoTransLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = E9373E461F3596940059355A /* AutoTransLabel.m */; };
58 58 E9373E4A1F35AA180059355A /* HistoryObject.m in Sources */ = {isa = PBXBuildFile; fileRef = E9373E491F35AA180059355A /* HistoryObject.m */; };
59 59 E9373E4D1F361A230059355A /* HistoryGraphObject.m in Sources */ = {isa = PBXBuildFile; fileRef = E9373E4C1F361A230059355A /* HistoryGraphObject.m */; };
  60 + E9497FD51F46EC1100E6AF8D /* MemberObject.m in Sources */ = {isa = PBXBuildFile; fileRef = E9497FD41F46EC1100E6AF8D /* MemberObject.m */; };
60 61 E9682E2E1F39675A00FE05A2 /* RankingTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E9682E2C1F39675A00FE05A2 /* RankingTableViewCell.m */; };
61 62 E9682E2F1F39675A00FE05A2 /* RankingTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = E9682E2D1F39675A00FE05A2 /* RankingTableViewCell.xib */; };
62 63 E968550A1F3C444900317CEF /* AutoTransButton.m in Sources */ = {isa = PBXBuildFile; fileRef = E96855091F3C444900317CEF /* AutoTransButton.m */; };
... ... @@ -181,6 +182,8 @@
181 182 E9373E491F35AA180059355A /* HistoryObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HistoryObject.m; sourceTree = "<group>"; };
182 183 E9373E4B1F361A230059355A /* HistoryGraphObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistoryGraphObject.h; sourceTree = "<group>"; };
183 184 E9373E4C1F361A230059355A /* HistoryGraphObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HistoryGraphObject.m; sourceTree = "<group>"; };
  185 + E9497FD31F46EC1100E6AF8D /* MemberObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemberObject.h; sourceTree = "<group>"; };
  186 + E9497FD41F46EC1100E6AF8D /* MemberObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MemberObject.m; sourceTree = "<group>"; };
184 187 E9682E2B1F39675A00FE05A2 /* RankingTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RankingTableViewCell.h; sourceTree = "<group>"; };
185 188 E9682E2C1F39675A00FE05A2 /* RankingTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RankingTableViewCell.m; sourceTree = "<group>"; };
186 189 E9682E2D1F39675A00FE05A2 /* RankingTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RankingTableViewCell.xib; sourceTree = "<group>"; };
... ... @@ -281,6 +284,8 @@
281 284 E9D909201F3D559D004CF99F /* TweetObject.m */,
282 285 E933E6721F3E0E4E002926F5 /* GroupObject.h */,
283 286 E933E6731F3E0E4E002926F5 /* GroupObject.m */,
  287 + E9497FD31F46EC1100E6AF8D /* MemberObject.h */,
  288 + E9497FD41F46EC1100E6AF8D /* MemberObject.m */,
284 289 );
285 290 name = Model;
286 291 sourceTree = "<group>";
... ... @@ -308,6 +313,7 @@
308 313 6E84E3981F27A703001EB88E /* LifeLogUITests */,
309 314 DE8269E957EA47CD771BAB33 /* Pods */,
310 315 020C1721B642EF36F31E1BB4 /* Frameworks */,
  316 + 783929CF869F5081762B3DCA /* Products */,
311 317 );
312 318 sourceTree = "<group>";
313 319 };
... ... @@ -430,7 +436,7 @@
430 436 6E84E3AC1F27A954001EB88E /* SNS */ = {
431 437 isa = PBXGroup;
432 438 children = (
433   - E933E6751F4050E6002926F5 /* GrouDetail */,
  439 + E933E6751F4050E6002926F5 /* GroupDetail */,
434 440 E933E6671F3E0479002926F5 /* SeachGroup */,
435 441 6E84E3BC1F27A9B1001EB88E /* SNSViewController.h */,
436 442 6E84E3BD1F27A9B1001EB88E /* SNSViewController.m */,
... ... @@ -491,6 +497,13 @@
491 497 name = Common;
492 498 sourceTree = "<group>";
493 499 };
  500 + 783929CF869F5081762B3DCA /* Products */ = {
  501 + isa = PBXGroup;
  502 + children = (
  503 + );
  504 + name = Products;
  505 + sourceTree = "<group>";
  506 + };
494 507 9CA8AEE61F31BB1200C5FC74 /* ConfirmForgetPass */ = {
495 508 isa = PBXGroup;
496 509 children = (
497 510  
... ... @@ -547,14 +560,14 @@
547 560 name = SeachGroup;
548 561 sourceTree = "<group>";
549 562 };
550   - E933E6751F4050E6002926F5 /* GrouDetail */ = {
  563 + E933E6751F4050E6002926F5 /* GroupDetail */ = {
551 564 isa = PBXGroup;
552 565 children = (
553 566 E933E6761F40513C002926F5 /* GroupDetailViewController.h */,
554 567 E933E6771F40513C002926F5 /* GroupDetailViewController.m */,
555 568 E933E6781F40513C002926F5 /* GroupDetailViewController.xib */,
556 569 );
557   - name = GrouDetail;
  570 + name = GroupDetail;
558 571 sourceTree = "<group>";
559 572 };
560 573 E9373E441F35966D0059355A /* AutoTranslateView */ = {
... ... @@ -684,7 +697,7 @@
684 697 Base,
685 698 );
686 699 mainGroup = 6E84E3681F27A700001EB88E;
687   - productRefGroup = 6E84E3721F27A700001EB88E /* Products */;
  700 + productRefGroup = 783929CF869F5081762B3DCA /* Products */;
688 701 projectDirPath = "";
689 702 projectRoot = "";
690 703 targets = (
... ... @@ -823,6 +836,7 @@
823 836 6E84E3C51F27ACAE001EB88E /* MapViewController.m in Sources */,
824 837 6E18CEDC1F2E40F50029891F /* User.m in Sources */,
825 838 6ECC40711F2A5FEB00AAEB97 /* NSDate+helper.m in Sources */,
  839 + E9497FD51F46EC1100E6AF8D /* MemberObject.m in Sources */,
826 840 6E18CED31F2E39DB0029891F /* LoginViewController.m in Sources */,
827 841 6EA4AF331F40BB7A00F52CFE /* TopObject.m in Sources */,
828 842 E9D909241F3D6E8C004CF99F /* BaseTableViewController.m in Sources */,
LifeLog/LifeLog/Entities.h
... ... @@ -11,6 +11,7 @@
11 11  
12 12 #import <MBProgressHUD/MBProgressHUD.h>
13 13  
  14 +#import "MemberObject.h"
14 15 #import "GroupObject.h"
15 16 #import "TweetObject.h"
16 17 #import "HistoryGraphObject.h"
LifeLog/LifeLog/GroupDetailViewController.h
... ... @@ -13,6 +13,7 @@
13 13  
14 14 @interface GroupDetailViewController : BaseTableViewController {
15 15 GroupObject * _curGroup;
  16 + BOOL isMemberList;
16 17 }
17 18 @property (weak, nonatomic) IBOutlet UIImageView *imgAva;
18 19  
... ... @@ -25,6 +26,7 @@
25 26 - (IBAction)clickBack:(id)sender;
26 27  
27 28 - (void) setGroup : (GroupObject *) object;
28   -- (IBAction)clickSwitch:(AutoTransButton*)sender;
  29 +- (IBAction)clickSwitch:(AutoTransButton *)sender;
  30 +- (IBAction)clickJoin:(AutoTransButton *)sender;
29 31 @end
LifeLog/LifeLog/GroupDetailViewController.m
... ... @@ -21,8 +21,7 @@
21 21  
22 22 - (void)viewDidLoad {
23 23 [super viewDidLoad];
24   - [self setupView];
25   -
  24 + isMemberList = false;
26 25 //register nib for table view
27 26 [self.tableBase registerNib:[UINib nibWithNibName:@"SNSRecentTopicTableViewCell" bundle:nil] forCellReuseIdentifier:@"RecentTopicCell"];
28 27 if(_curGroup != nil) {
29 28  
... ... @@ -40,16 +39,14 @@
40 39 _curGroup = object;
41 40 }
42 41  
43   -- (IBAction)clickSwitch:(id)sender {
44   -}
45   -
46 42 - (void)setupView {
47 43 if(_curGroup != nil) {
48 44 if(_curGroup.avatar && ![_curGroup.avatar isKindOfClass:[NSNull class]]) {
49 45 [self.imgAva sd_setImageWithURL:[NSURL URLWithString:[Utilities getImageLink:_curGroup.avatar]]];
50 46 }
51   - self.lblGrpName.text = _curGroup.name;
52   - self.lblGrpGoal.text = _curGroup.goal;
  47 + [self.lblGrpName setText:_curGroup.name];
  48 + [self.lblGrpGoal setText:_curGroup.goal];
  49 + [self.btJoinGrp setHidden:_curGroup.isJoin];
53 50 NSString *mode = @"";
54 51 if(_curGroup.runMode) {
55 52 mode = [mode stringByAppendingString:@"ใƒฉใƒณใƒ‹ใƒณใ‚ฐ\n"];
56 53  
57 54  
... ... @@ -69,19 +66,53 @@
69 66 [self.navigationController popViewControllerAnimated:true];
70 67 }
71 68  
  69 +- (IBAction)clickSwitch:(AutoTransButton *)sender {
  70 + isMemberList = !isMemberList;
  71 + [self resetData];
  72 +}
  73 +
  74 +- (IBAction)clickJoin:(AutoTransButton *)sender {
  75 + NSString * token = [[NSUserDefaults standardUserDefaults] stringForKey:kToken];
  76 + MBProgressHUD *hudView = [MBProgressHUD showHUDAddedTo:self.view animated:true];
  77 + [[ServerAPI server] requestTweetsList:token groupID:_curGroup.groupID withPage:_curPage CompletionHandler:^(NSArray *array, NSError *error){
  78 + dispatch_async(dispatch_get_main_queue(), ^{
  79 + if(hudView != nil) {
  80 + [hudView hideAnimated:true];
  81 + }
  82 + });
  83 + }];
  84 +}
  85 +
  86 +
  87 +
72 88 #pragma mark UITableView Delegate
73 89 - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
74 90 SNSRecentTopicTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"RecentTopicCell"];
75   - TweetObject *object = [_curDataList objectAtIndex:indexPath.row];
76   - if(object.avatarLink && ![object.avatarLink isKindOfClass:[NSNull class]]) {
77   - [cell.imgAvatar sd_setImageWithURL:[NSURL URLWithString:[Utilities getImageLink:object.avatarLink]]];
  91 + if(isMemberList) {
  92 + MemberObject *object = [_curDataList objectAtIndex:indexPath.row];
  93 + if(object.avatar && ![object.avatar isKindOfClass:[NSNull class]]) {
  94 + [cell.imgAvatar sd_setImageWithURL:[NSURL URLWithString:[Utilities getImageLink:object.avatar]]];
  95 + }
  96 + cell.lblUsername.text = @"";
  97 + cell.lblDateTime.text = @"";
  98 + cell.lblDes.text = object.userName;
  99 + cell.lblMode.text = @"";
  100 + cell.lblDistance.text = @"";
  101 + cell.lblDuration.text = @"";
78 102 }
79   - cell.lblDateTime.text = [Utilities stringFromDate:object.createDate withFormat:@"YYYY/MM/dd hh:mm"];
80   - cell.lblUsername.text = object.userName;
81   - cell.lblDes.text = object.content;
82   - cell.lblMode.text = object.mode;
83   - cell.lblDistance.text = [NSString stringWithFormat:@"%.0f m", object.distance];
84   - cell.lblDuration.text = object.time;
  103 + else {
  104 + TweetObject *object = [_curDataList objectAtIndex:indexPath.row];
  105 + if(object.avatar && ![object.avatar isKindOfClass:[NSNull class]]) {
  106 + [cell.imgAvatar sd_setImageWithURL:[NSURL URLWithString:[Utilities getImageLink:object.avatar]]];
  107 + }
  108 + cell.lblDateTime.text = [Utilities stringFromDate:object.createDate withFormat:@"YYYY/MM/dd hh:mm"];
  109 + cell.lblUsername.text = object.userName;
  110 + cell.lblDes.text = object.content;
  111 + cell.lblMode.text = object.mode;
  112 + cell.lblDistance.text = [NSString stringWithFormat:@"%.0f m", object.distance];
  113 + cell.lblDuration.text = object.time;
  114 + }
  115 +
85 116 return cell;
86 117 }
87 118  
88 119  
89 120  
... ... @@ -89,12 +120,12 @@
89 120  
90 121 - (void) requestGroupDetail {
91 122 NSString * token = [[NSUserDefaults standardUserDefaults] stringForKey:kToken];
92   -// MBProgressHUD *hudView = [MBProgressHUD showHUDAddedTo:self.view animated:true];
  123 + MBProgressHUD *hudView = [MBProgressHUD showHUDAddedTo:self.view animated:true];
93 124 [[ServerAPI server] getGroupDetail:token withGroupID:_curGroup.groupID CompletionHandler:^(GroupObject *object, NSError *error) {
94   -// [hudView hideAnimated:true];
95 125 GroupDetailViewController __weak *weakSelf = self;
96 126 _curGroup = object;
97 127 dispatch_async(dispatch_get_main_queue(), ^{
  128 + [hudView hideAnimated:true];
98 129 [weakSelf setupView];
99 130 [weakSelf callRequestToUpdateData];
100 131 });
... ... @@ -109,15 +140,28 @@
109 140 if(_curPage == 1 && !self.refreshControl.isRefreshing) {
110 141 hudView = [MBProgressHUD showHUDAddedTo:self.view animated:true];
111 142 }
112   - [[ServerAPI server] requestTweetsList:token groupID:_curGroup.groupID withPage:_curPage CompletionHandler:^(NSArray *array, NSError *error){
113   - dispatch_async(dispatch_get_main_queue(), ^{
114   - if(hudView != nil) {
115   - [hudView hideAnimated:true];
116   - }
117   - });
118   - GroupDetailViewController __weak *weakSelf = self;
119   - [weakSelf updateTableData:array error:error];
120   - }];
  143 + if(isMemberList) {
  144 + [[ServerAPI server] requestMemberList:token groupID:_curGroup.groupID withPage:_curPage CompletionHandler:^(NSArray *array, NSError *error){
  145 + dispatch_async(dispatch_get_main_queue(), ^{
  146 + if(hudView != nil) {
  147 + [hudView hideAnimated:true];
  148 + }
  149 + });
  150 + GroupDetailViewController __weak *weakSelf = self;
  151 + [weakSelf updateTableData:array error:error];
  152 + }];
  153 + }
  154 + else {
  155 + [[ServerAPI server] requestTweetsList:token groupID:_curGroup.groupID withPage:_curPage CompletionHandler:^(NSArray *array, NSError *error){
  156 + dispatch_async(dispatch_get_main_queue(), ^{
  157 + if(hudView != nil) {
  158 + [hudView hideAnimated:true];
  159 + }
  160 + });
  161 + GroupDetailViewController __weak *weakSelf = self;
  162 + [weakSelf updateTableData:array error:error];
  163 + }];
  164 + }
121 165 }
122 166  
123 167 @end
LifeLog/LifeLog/GroupDetailViewController.xib
1 1 <?xml version="1.0" encoding="UTF-8"?>
2   -<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="12118" systemVersion="16D32" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
  2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="12121" systemVersion="16A323" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
3 3 <device id="retina4_7" orientation="portrait">
4 4 <adaptation id="fullscreen"/>
5 5 </device>
6 6 <dependencies>
7   - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12086"/>
  7 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
8 8 <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
9 9 </dependencies>
10 10 <objects>
... ... @@ -70,7 +70,7 @@
70 70 <constraint firstAttribute="height" constant="46" id="u2G-4s-RB5"/>
71 71 </constraints>
72 72 </view>
73   - <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YWV-pS-TCo">
  73 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YWV-pS-TCo">
74 74 <rect key="frame" x="15" y="54" width="345" height="21"/>
75 75 <constraints>
76 76 <constraint firstAttribute="height" constant="21" id="fQO-ja-W9R"/>
... ... @@ -89,7 +89,7 @@
89 89 <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
90 90 <nil key="highlightedColor"/>
91 91 </label>
92   - <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Bdy-dI-j47">
  92 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Bdy-dI-j47">
93 93 <rect key="frame" x="15" y="160" width="345" height="80"/>
94 94 <constraints>
95 95 <constraint firstAttribute="height" constant="80" id="jgH-57-Bae"/>
96 96  
... ... @@ -121,10 +121,10 @@
121 121 <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.grDetail.bt.viewMem"/>
122 122 </userDefinedRuntimeAttributes>
123 123 <connections>
124   - <action selector="clickSwitch:" destination="-1" eventType="touchUpInside" id="3wX-Tc-XA3"/>
  124 + <action selector="clickSwitch:" destination="-1" eventType="touchUpInside" id="z4V-ym-fqS"/>
125 125 </connections>
126 126 </button>
127   - <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="caN-x7-hJz" customClass="AutoTransButton">
  127 + <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="caN-x7-hJz" customClass="AutoTransButton">
128 128 <rect key="frame" x="197" y="270" width="162" height="30"/>
129 129 <color key="backgroundColor" red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
130 130 <constraints>
... ... @@ -139,6 +139,9 @@
139 139 </userDefinedRuntimeAttribute>
140 140 <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.grDetail.bt.joinGr"/>
141 141 </userDefinedRuntimeAttributes>
  142 + <connections>
  143 + <action selector="clickJoin:" destination="-1" eventType="touchUpInside" id="Ukt-bi-Sw2"/>
  144 + </connections>
142 145 </button>
143 146 <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="none" rowHeight="100" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="4VU-Ye-7Au">
144 147 <rect key="frame" x="0.0" y="310" width="375" height="307"/>
LifeLog/LifeLog/HistoryViewController.xib
... ... @@ -45,7 +45,7 @@
45 45 <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.history.title"/>
46 46 </userDefinedRuntimeAttributes>
47 47 </label>
48   - <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ytc-zM-ZGC">
  48 + <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ytc-zM-ZGC">
49 49 <rect key="frame" x="0.0" y="5" width="70" height="36"/>
50 50 <constraints>
51 51 <constraint firstAttribute="width" constant="70" id="xAE-oP-WEf"/>
LifeLog/LifeLog/MemberObject.h
  1 +//
  2 +// MemberObject.h
  3 +// LifeLog
  4 +//
  5 +// Created by nvtu on 8/18/17.
  6 +// Copyright ยฉ 2017 PhongNV. All rights reserved.
  7 +//
  8 +
  9 +#import <Foundation/Foundation.h>
  10 +
  11 +@interface MemberObject : NSObject
  12 +
  13 +@property (nonatomic) int userID;
  14 +@property (nonatomic) int gender;
  15 +
  16 +@property (nonatomic, strong) NSString * userName;
  17 +@property (nonatomic, strong) NSString * nickName;
  18 +@property (nonatomic, strong) NSString * avatar;
  19 +
  20 +@property (nonatomic, strong) NSDate * joinDate;
  21 +@property (nonatomic, strong) NSDate * birthDay;
  22 +
  23 +-(id) initWithData : (NSDictionary *) dict;
  24 +
  25 +@end
LifeLog/LifeLog/MemberObject.m
  1 +//
  2 +// MemberObject.m
  3 +// LifeLog
  4 +//
  5 +// Created by nvtu on 8/18/17.
  6 +// Copyright ยฉ 2017 PhongNV. All rights reserved.
  7 +//
  8 +
  9 +#import "MemberObject.h"
  10 +#import "Utilities.h"
  11 +
  12 +@implementation MemberObject
  13 +
  14 +-(id) initWithData : (NSDictionary *) dict {
  15 + if([dict objectForKey:@"user_id"] != nil) {
  16 + self.userID = [dict[@"user_id"] intValue];
  17 + }
  18 + if([dict objectForKey:@"gender"] != nil) {
  19 + self.gender = [dict[@"gender"] intValue];
  20 + }
  21 + if([dict objectForKey:@"username"] != nil) {
  22 + self.userName = dict[@"username"];
  23 + }
  24 + if([dict objectForKey:@"nickname"] != nil) {
  25 + self.nickName = dict[@"nickname"];
  26 + }
  27 + if([dict objectForKey:@"profile_image"] != nil) {
  28 + self.avatar = dict[@"profile_image"];
  29 + }
  30 + if([dict objectForKey:@"birthday"] != nil) {
  31 + NSString *dateString = dict[@"birthday"];
  32 + self.birthDay = [Utilities dateFromString:dateString withFormat:@"yyyy-MM-dd"];
  33 + }
  34 + else {
  35 + self.birthDay = [NSDate date];
  36 + }
  37 + if([dict objectForKey:@"join_date"] != nil) {
  38 + NSString *dateString = dict[@"join_date"];
  39 + self.joinDate = [Utilities dateFromString:dateString withFormat:@"yyyy-MM-dd HH:mm:ss"];
  40 + }
  41 + else {
  42 + self.joinDate = [NSDate date];
  43 + }
  44 + return self;
  45 +}
  46 +
  47 +@end
LifeLog/LifeLog/RankingViewController.xib
... ... @@ -34,7 +34,7 @@
34 34 <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.rank.title"/>
35 35 </userDefinedRuntimeAttributes>
36 36 </label>
37   - <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="qPe-ff-jRp">
  37 + <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="qPe-ff-jRp">
38 38 <rect key="frame" x="0.0" y="5" width="70" height="36"/>
39 39 <constraints>
40 40 <constraint firstAttribute="width" constant="70" id="bEy-jt-69Q"/>
LifeLog/LifeLog/SNSViewController.m
... ... @@ -54,8 +54,8 @@
54 54 - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
55 55 SNSRecentTopicTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"RecentTopicCell"];
56 56 TweetObject *object = [_curDataList objectAtIndex:indexPath.row];
57   - if(object.avatarLink && ![object.avatarLink isKindOfClass:[NSNull class]]) {
58   - [cell.imgAvatar sd_setImageWithURL:[NSURL URLWithString:[Utilities getImageLink:object.avatarLink]]];
  57 + if(object.avatar && ![object.avatar isKindOfClass:[NSNull class]]) {
  58 + [cell.imgAvatar sd_setImageWithURL:[NSURL URLWithString:[Utilities getImageLink:object.avatar]]];
59 59 }
60 60 cell.lblDateTime.text = [Utilities stringFromDate:object.createDate withFormat:@"YYYY/MM/dd hh:mm"];
61 61 cell.lblUsername.text = object.userName;
LifeLog/LifeLog/SNSViewController.xib
1 1 <?xml version="1.0" encoding="UTF-8"?>
2   -<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="12118" systemVersion="16D32" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
  2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="12121" systemVersion="16A323" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
3 3 <device id="retina4_7" orientation="portrait">
4 4 <adaptation id="fullscreen"/>
5 5 </device>
6 6 <dependencies>
7   - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12086"/>
  7 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
8 8 <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
9 9 </dependencies>
10 10 <objects>
... ... @@ -31,7 +31,7 @@
31 31 <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.sns.title"/>
32 32 </userDefinedRuntimeAttributes>
33 33 </label>
34   - <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="BIE-oM-ejb">
  34 + <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="BIE-oM-ejb">
35 35 <rect key="frame" x="0.0" y="5" width="70" height="36"/>
36 36 <constraints>
37 37 <constraint firstAttribute="width" constant="70" id="ZpD-Ru-8wG"/>
LifeLog/LifeLog/ServerAPI.h
... ... @@ -33,6 +33,7 @@
33 33 - (void) requestHistory:(NSString *)token atDate:(NSDate *)date withType:(int)type andMode:(int) mode CompletionHandler:(void (^)(HistoryObject *, NSError *)) completion;
34 34 - (void) requestHistoryGraph:(NSString *)token withType:(int)type andMode:(int) mode CompletionHandler:(void (^)(HistoryGraphObject *, NSError *)) completion;
35 35 - (void) requestHistoryList:(NSString *)token withType:(int)type andMode:(int) mode AtPage:(int) page CompletionHandler:(void (^)(NSArray *, NSError *)) completion;
  36 +- (void) requestJoinGroup:(NSString *)token groupID: (int) groupID CompletionHandler:(void (^)(NSError *)) completion;
36 37  
37 38 #pragma mark - SNS Screen Function
38 39 /*
... ... @@ -44,6 +45,7 @@
44 45  
45 46 #pragma mark - Group Function
46 47 - (void) getGroupDetail:(NSString *)token withGroupID:(int)groupID CompletionHandler:(void (^)(GroupObject *, NSError *)) completion;
  48 +- (void) requestMemberList:(NSString *)token groupID: (int) groupID withPage:(int)page CompletionHandler:(void (^)(NSArray *, NSError *)) completion;
47 49  
48 50 #pragma mark - Common API
49 51 - (void)refreshToken: (NSString *)userID CompletionHandler:(void (^)(NSString *, NSError *))completion;
LifeLog/LifeLog/ServerAPI.m
... ... @@ -696,6 +696,103 @@
696 696 }];
697 697 }
698 698  
  699 +- (void) requestMemberList:(NSString *)token groupID: (int) groupID withPage:(int)page CompletionHandler:(void (^)(NSArray *, NSError *)) completion {
  700 + NSString *url = [kServerAddress stringByAppendingFormat:@"api/sns/group/member/%d/%d", groupID, page];
  701 + NSLog(@"requestMemberList link %@ page %d", url, page);
  702 +
  703 + [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) {
  704 + if (completion == NULL) {
  705 + return ;
  706 + }
  707 +
  708 + if (error == nil)
  709 + {
  710 + NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
  711 + NSLog(@"%@", dataResult);
  712 + int status = [dataResult[@"status"] intValue];
  713 + if (status == 1) { // status = 1 success
  714 + if(dataResult[@"result"] != nil) {
  715 + NSArray * array = dataResult[@"result"];
  716 + NSMutableArray * arrayTweets = [[NSMutableArray alloc] init];
  717 + for(NSDictionary * dict in array) {
  718 + MemberObject * object = [[MemberObject alloc] initWithData:dict];
  719 + [arrayTweets addObject:object];
  720 + }
  721 + completion(arrayTweets, nil);
  722 + }
  723 + else {
  724 + NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}];
  725 + completion(nil, errorObject);
  726 + }
  727 + }
  728 + else {
  729 + NSString *message = dataResult[@"message"];
  730 + if (message == nil) {
  731 + message = @"Unknown error";
  732 + }
  733 +
  734 + if ([message isEqualToString:@"Token is invalid"]) {
  735 + [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES];
  736 + NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken];
  737 + [self requestMemberList:tokenNew groupID:groupID withPage:page CompletionHandler:completion];
  738 + }
  739 + else {
  740 + NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
  741 + completion(nil, errorObject);
  742 + }
  743 + }
  744 + }
  745 + else
  746 + {
  747 + completion(nil, error);
  748 + }
  749 + }];
  750 +}
  751 +
  752 +- (void) requestJoinGroup:(NSString *)token groupID: (int) groupID CompletionHandler:(void (^)(NSError *)) completion {
  753 + NSString *url = [kServerAddress stringByAppendingFormat:@"api/sns/group/join"];
  754 + NSLog(@"requestJoinGroup link %@", url);
  755 +
  756 + searchTask = [self _request:url method:@"POST" token:token paras:@{@"group_id": [NSNumber numberWithInt:groupID]} completion:^(NSData *data, NSError *error) {
  757 + searchTask = nil;
  758 + if (completion == NULL) {
  759 + return ;
  760 + }
  761 +
  762 + if (error == nil)
  763 + {
  764 + NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
  765 + NSLog(@"%@", dataResult);
  766 + int status = [dataResult[@"status"] intValue];
  767 + if (status == 1) { // status = 1 success
  768 + if(dataResult[@"result"] != nil) {
  769 + completion(nil);
  770 + }
  771 + else {
  772 + NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}];
  773 + completion(errorObject);
  774 + }
  775 + }
  776 + else {
  777 + NSString *message = dataResult[@"message"];
  778 + if ([message isEqualToString:@"Token is invalid"]) {
  779 + [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES];
  780 + NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken];
  781 + [self requestJoinGroup:tokenNew groupID:groupID CompletionHandler:completion];
  782 + }
  783 + else {
  784 + NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
  785 + completion(errorObject);
  786 + }
  787 + }
  788 + }
  789 + else
  790 + {
  791 + completion(error);
  792 + }
  793 + }];
  794 +}
  795 +
699 796 #pragma mark - Common API
700 797 - (void)refreshToken: (NSString *)userID CompletionHandler:(void (^)(NSString *, NSError *))completion {
701 798 [self _request:[kServerAddress stringByAppendingFormat: @"refreshToken"] method:@"POST" token:@"" paras:@{@"userId":userID} completion:^(NSData *data, NSError *error) {
LifeLog/LifeLog/TweetObject.h
... ... @@ -19,7 +19,7 @@
19 19 @property (nonatomic, strong) NSString * mode;
20 20 @property (nonatomic, strong) NSString * time;
21 21 @property (nonatomic, strong) NSString * userName;
22   -@property (nonatomic, strong) NSString * avatarLink;
  22 +@property (nonatomic, strong) NSString * avatar;
23 23 @property (nonatomic, strong) NSDate * createDate;
24 24  
25 25 -(id) initWithData : (NSDictionary *) dict;
LifeLog/LifeLog/TweetObject.m
... ... @@ -54,7 +54,7 @@
54 54 self.userName = dict[@"full_name"];
55 55 }
56 56 if([dict objectForKey:@"profile_image"] != nil) {
57   - self.avatarLink = dict[@"profile_image"];
  57 + self.avatar = dict[@"profile_image"];
58 58 }
59 59 if([dict objectForKey:@"created_at"] != nil) {
60 60 NSString *dateString = dict[@"created_at"];