ifish/Ifish/UMCommunity/UMCommunitySDK/UMComDataController/FeedDetail/UMComFeedDetailDataControll...

372 lines
14 KiB
Objective-C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// UMComFeedDetailDataController.m
// UMCommunity
//
// Created by umeng on 16/5/3.
// Copyright © 2016年 Umeng. All rights reserved.
//
#import "UMComFeedDetailDataController.h"
#import "UMComUserDataController.h"
#import <UMComDataStorage/UMComUser.h>
#import <UMComDataStorage/UMComFeed.h>
#import <UMComDataStorage/UMComComment.h>
#import <UMCommunitySDK/UMComSession.h>
#import <UMCommunitySDK/UMComDataTypeDefine.h>
#import <UMComNetwork/UMComHttpCode.h>
#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