// // UMComFeedDetailDataController.m // UMCommunity // // Created by umeng on 16/5/3. // Copyright © 2016年 Umeng. All rights reserved. // #import "UMComFeedDetailDataController.h" #import "UMComUserDataController.h" #import #import #import #import #import #import #import "UMComDataOperationErrorHandler.h" #import "UMComNotificationMacro.h" @interface UMComFeedDetailDataController () @property (nonatomic, strong) UMComUserDataController *userDatController; @end @implementation UMComFeedDetailDataController - (instancetype)init { self = [super init]; if (self) { } return self; } - (instancetype)initWithFeed:(UMComFeed *)feed viewExtra:(NSDictionary *)viewExtra { self = [super init]; if (self) { self.feed = feed; } return self; } + (void)getFeedWithFeedID:(NSString *)feedID completion:(UMComDataRequestCompletion)completion { UMComFeed *feed = [UMComFeed objectWithObjectId:feedID]; if (feed && completion) { completion(feed, nil); }else{ feed = [[UMComFeed alloc] init]; feed.feedID = feedID; UMComFeedDetailDataController *feedDataController = [[UMComFeedDetailDataController alloc] initWithFeed:feed viewExtra:nil]; [feedDataController refreshFeedWithCompletion:completion]; } } - (void)refreshFeedWithCompletion:(UMComDataRequestCompletion)completion { __weak typeof(self) weakSelf = self; [[UMComDataRequestManager defaultManager] fetchFeedWithFeedId:self.feed.feedID commentId:nil completion:^(NSDictionary *responseObject, NSError *error) { if ([responseObject isKindOfClass:[NSDictionary class]] && [responseObject valueForKey:UMComModelDataKey]) { UMComFeed *feed = [responseObject valueForKey:UMComModelDataKey]; weakSelf.feed = feed; if (completion) { completion(feed, nil); } }else{ __strong typeof(weakSelf) strongSelf = weakSelf; [UMComDataOperationErrorHandler handleFeedErrorWithFeed:strongSelf.feed error:error]; if (completion) { completion(nil, error); } } }]; } - (void)deletedFeedWithCompletion:(UMComDataRequestCompletion)completion { __weak typeof(self) weakSelf = self; [[UMComDataRequestManager defaultManager] feedDeleteWithFeedID:self.feed.feedID completion:^(NSDictionary *responseObject, NSError *error) { __strong typeof(weakSelf) strongSelf = weakSelf; if (!error) { UMComUser *loginUser = [UMComSession sharedInstance].loginUser; if ([loginUser.uid isEqualToString:weakSelf.feed.creator.uid]) { loginUser.feed_count = @(loginUser.feed_count.integerValue-1); } weakSelf.feed.status = @3; if (completion) { completion([responseObject valueForKey:UMComModelDataKey], nil); } [[NSNotificationCenter defaultCenter] postNotificationName:kUMComFeedDeletedFinishNotification object:strongSelf.feed]; }else{ [UMComDataOperationErrorHandler handleFeedErrorWithFeed:strongSelf.feed error:error]; if (completion) { completion(nil, error); } } }]; } - (void)likeFeedWithCompletion:(UMComDataRequestCompletion)completion { __weak typeof(self) weakSelf = self; BOOL isLike = ![self.feed.liked boolValue]; [[UMComDataRequestManager defaultManager] feedLikeWithFeedID:self.feed.feedID isLike:isLike completion:^(NSDictionary *responseObject, NSError *error) { __strong typeof(weakSelf) strongSelf = weakSelf; if (!error) { NSDictionary* dic = (NSDictionary*)responseObject; if (dic && [dic isKindOfClass:[NSDictionary class]]) { id feedLikeValue = [dic valueForKey:UMComModelFeedLikeKey]; if (feedLikeValue && [feedLikeValue isKindOfClass:[NSNumber class]]) { strongSelf.feed.liked = feedLikeValue; if (strongSelf.feed.liked.boolValue) { strongSelf.feed.likes_count = @(strongSelf.feed.likes_count.integerValue + 1); } else{ strongSelf.feed.likes_count = @(strongSelf.feed.likes_count.integerValue - 1); } if (completion) { completion(responseObject, error); } } } }else{ __strong typeof(weakSelf) strongSelf = weakSelf; [UMComDataOperationErrorHandler handleFeedErrorWithFeed:strongSelf.feed error:error]; if (completion) { completion(nil, error); } } }]; } - (void)spamFeedWithCompletion:(UMComDataRequestCompletion)completion { __weak typeof(self) weakSelf = self; [[UMComDataRequestManager defaultManager] feedSpamWithFeedID:self.feed.feedID completion:^(NSDictionary *responseObject, NSError *error) { if (!error) { if (completion) { completion(responseObject, nil); } }else{ __strong typeof(weakSelf) strongSelf = weakSelf; [UMComDataOperationErrorHandler handleFeedErrorWithFeed:strongSelf.feed error:error]; if (completion) { completion(nil, error); } } }]; } - (void)favoriteFeedWithCompletion:(UMComDataRequestCompletion)completion { __weak typeof(self) weakSelf = self; BOOL isFavorite = ![self.feed.has_collected boolValue]; [[UMComDataRequestManager defaultManager] feedFavouriteWithFeedId:self.feed.feedID isFavourite:isFavorite completionBlock:^(NSDictionary *responseObject, NSError *error) { if (!error) { if (isFavorite == YES) { weakSelf.feed.has_collected = @1; }else{ weakSelf.feed.has_collected = @0; } if (completion) { completion(responseObject, error); } }else{ __strong typeof(weakSelf) strongSelf = weakSelf; [UMComDataOperationErrorHandler handleFeedErrorWithFeed:strongSelf.feed error:error]; if (completion) { completion(nil, error); } } }]; } - (void)commentFeedWithContent:(NSString *)content images:(NSArray *)images completion:(UMComDataRequestCompletion)completion { __weak typeof(self) weakSelf = self; [[UMComDataRequestManager defaultManager] commentFeedWithFeedID:self.feed.feedID commentContent:content replyCommentID:nil replyUserID:nil commentCustomContent:nil images:images completion:^(NSDictionary *responseObject, NSError *error) { if ([responseObject isKindOfClass:[NSDictionary class]] && [responseObject valueForKey:UMComModelDataKey]) { weakSelf.feed.comments_count = @([weakSelf.feed.comments_count intValue]+1); //获得评论数,对likes_count判断 UMComComment *comment = [responseObject valueForKey:UMComModelDataKey]; if ([comment isKindOfClass:[UMComComment class]] && ![comment.likes_count isKindOfClass:[NSNumber class]]) { //如果服务器没有发送这个字段就把likes_count的置为0 comment.likes_count = @0; } if (completion) { completion(comment, nil); } } else{ __strong typeof(weakSelf) strongSelf = weakSelf; [UMComDataOperationErrorHandler handleFeedErrorWithFeed:strongSelf.feed error:error]; if (completion) { completion(nil, error); } } }]; } - (void)replyCommentFeedWithComment:(UMComComment *)comment content:(NSString *)content images:(NSArray *)images completion:(UMComDataRequestCompletion)completion { __weak typeof(self) weakSelf = self; [[UMComDataRequestManager defaultManager] commentFeedWithFeedID:self.feed.feedID commentContent:content replyCommentID:comment.commentID replyUserID:comment.creator.uid commentCustomContent:nil images:images completion:^(NSDictionary *responseObject, NSError *error) { weakSelf.currentComment = nil; if (!error) { UMComComment *newComment = nil; if ([responseObject isKindOfClass:[NSDictionary class]]) { newComment = [responseObject valueForKey:UMComModelDataKey]; weakSelf.feed.comments_count = @([weakSelf.feed.comments_count intValue]+1); //获得评论数,对likes_count判断 if ([newComment isKindOfClass:[UMComComment class]] && ![newComment.likes_count isKindOfClass:[NSNumber class]]) { //如果服务器没有发送这个字段就把likes_count的置为0 newComment.likes_count = @0; } if (completion) { completion(newComment, nil); } } }else{ __strong typeof(weakSelf) strongSelf = weakSelf; [UMComDataOperationErrorHandler handleFeedErrorWithFeed:strongSelf.feed error:error]; if (completion) { completion(nil, error); } } }]; } - (void)shareToPlatform:(NSString *)platform completion:(UMComDataRequestCompletion)completion { __weak typeof(self) weakSelf = self; [[UMComDataRequestManager defaultManager] feedShareToPlatform:platform feedId:self.feed.feedID completion:^(NSDictionary *responseObject, NSError *error) { __strong typeof(weakSelf) strongSelf = weakSelf; NSInteger shareCount = [strongSelf.feed.share_count integerValue]; if (!error) { shareCount +=1; } strongSelf.feed.share_count = @(shareCount); [UMComDataOperationErrorHandler handleFeedErrorWithFeed:strongSelf.feed error:error]; if (completion) { completion(responseObject, error); } }]; } // //- (void)deletedComment:(UMComComment *)comment completion:(UMComDataRequestCompletion)completion //{ // __weak typeof(self) weakSelf = self; // [[UMComDataRequestManager defaultManager] commentDeleteWithCommentID:comment.commentID feedID:self.feed.feedID completion:^(NSDictionary *responseObject, NSError *error) { // if (!error) { // if ([weakSelf.feed.comments_count intValue] > 0) { // weakSelf.feed.comments_count = @([weakSelf.feed.comments_count intValue]-1); // } // if (completion) { // completion(responseObject, nil); // } // }else{ // if (completion) { // completion(nil, error); // } // } // }]; //} // //- (void)likeComment:(UMComComment *)comment completion:(UMComDataRequestCompletion)completion //{ // BOOL isLike = ![comment.liked boolValue]; // [[UMComDataRequestManager defaultManager] commentLikeWithCommentID:comment.commentID isLike:isLike completion:^(NSDictionary *responseObject, NSError *error) { // NSInteger likeCount = [comment.likes_count integerValue]; // if (!error) { // if (isLike) { // comment.liked = @1; // likeCount += 1; // }else{ // comment.liked = @0; // likeCount -= 1; // } // if (likeCount < 0) { // likeCount = 0; // } // comment.likes_count = @(likeCount); // if (completion) { // completion(responseObject, nil); // } // }else{ // if (error.code == ERR_CODE_FEED_HAS_BEEN_LIKED) { // comment.liked = @1; // likeCount += 1; // }else if (error.code == ERR_CODE_LIKE_HAS_BEEN_CANCELED){ // comment.liked = @0; // likeCount -= 1; // } // if (likeCount < 0) { // likeCount = 0; // } // comment.likes_count = @(likeCount); // if (completion) { // completion(nil, error); // } // } // // }]; //} // //- (void)spamComment:(UMComComment *)comment completion:(UMComDataRequestCompletion)completion //{ // [[UMComDataRequestManager defaultManager] commentSpamWithCommentID:comment.commentID completion:^(NSDictionary *responseObject, NSError *error) { // if (!error) { // if (completion) { // completion(responseObject, nil); // } // }else{ // if (completion) { // completion(nil, error); // } // } // }]; //} - (void)spamUser:(UMComUser *)user completion:(UMComDataRequestCompletion)completion { self.userDatController = [UMComUserDataController userDataControllerWithUser:user]; [self.userDatController spamUserCompletion:completion]; } - (void)banUser:(UMComUser *)user completion:(UMComDataRequestCompletion)completion { self.userDatController = [UMComUserDataController userDataControllerWithUser:user]; [self.userDatController banUserWithTopics:self.feed.topics completion:completion]; } #pragma mark - check /** * 判断是否为html格式的feed * * @return YES htmlFeed NO 普通feed */ -(BOOL) isHtmlData { if (self.feed.media_type.intValue == 1 && self.feed.rich_text && self.feed.rich_text.length > 0) { return YES; } return NO; } @end