MyDynamicController.m 4.7 KB
//
//  MyDynamicController.m
//  DreamSleep
//
//  Created by peter on 2022/10/19.
//

#import "MyDynamicController.h"
#import "DynamicDetailController.h"
#import "MyDynamicView.h"
#import "ComListViewModel.h"

@interface MyDynamicController () <MyDynamicViewDelegate, DynamicDetailControllerDelegate>
@property (nonatomic, assign) int offset;
@property (nonatomic, strong) MyDynamicView *myDynamicView;
@property (nonatomic, strong) PersonDynViewModel *myDynVM;
@property (nonatomic, strong) NSURLSessionDataTask *likeDataTask;
@end

@implementation MyDynamicController

- (void)loadView {
    self.myDynVM = [PersonDynViewModel new];
    self.view = self.myDynamicView;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.offset = 1;
    self.navigationItem.title = @"我的动态";
    self.edgesForExtendedLayout = UIRectEdgeNone;
}

- (void)fireHandler {
    [super fireHandler];
    [self getDynamicListRequest:NO];
}

#pragma mark - MyDynamicViewDelegate
- (void)getDynamicListRequest:(BOOL)loadMore {
    if (loadMore == NO) { self.offset = 1; }
    
    [self.myDynVM queryUserDynamicListWithLoadMore:loadMore offset:self.offset completion:^(PersonDynViewModel * _Nonnull requestModel) {
        if (requestModel.resCode == DSResCodeSuccess) {
            if (requestModel.latestDataList.count == 0) {
                if (loadMore) {
                    [self.myDynamicView endRefreshingWithNoMoreData];
                } else {
                    [self.myDynamicView endRefreshing:NO];
                    [self updateDefalutView:DefaultTypeEmpty info:@""];
                }
            } else {
                self.offset++;
                [self.myDynamicView updateCommunityMoments:loadMore];
            }
        } else {
            if (loadMore) {
                [DSProgressHUD showToast:requestModel.errMessage];
            } else {
                [self updateDefalutView:DefaultTypeNet info:requestModel.errMessage];
            }
            [self.myDynamicView endRefreshing:loadMore];
        }
    }];
}

- (void)didSelectItemWithModel:(ComDynModel *)comDynModel {
    if (![LoginUtils getUserLoginData]) {
        [LoginUtils jumpToLoginControllerWithTarget:self];
        return;
    }
    DynamicDetailController *detailVC = [DynamicDetailController new];
    detailVC.comDynModel = comDynModel;
    detailVC.delegate = self;
    [self.navigationController pushViewController:detailVC animated:YES];
}

- (void)didTapLikeItem:(ComDynModel *)comDynModel cell:(ComDynamicCell *)cell {
    if (![LoginUtils getUserLoginData]) {
        [LoginUtils jumpToLoginControllerWithTarget:self];
        return;
    }
    // 1、用户点赞或取消点赞直接响应UI变化
    [ComListViewModel updateLikeData:comDynModel];
    [cell fireLikeAnimate];
    [cell updateLikeUI];
    
    // 2、更新点赞或取消点赞请求
    if (self.likeDataTask) { [self.likeDataTask cancel]; }
    self.likeDataTask = [ComListViewModel userDynamicPraiseWithComDynModel:comDynModel completion:^(ComListViewModel * _Nonnull requestModel) {
        // 3、如果请求失败,延迟执行回退
        if (requestModel.resCode != DSResCodeSuccess) {
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                [cell updateLikeUI];
                [DSProgressHUD showToast:requestModel.errMessage];
            });
        }
    }];
}

- (void)startDeleteDynamicRquest:(int)dynamicID {
    self.myDynVM.oper_type = @"dynamic";
    self.myDynVM.delete_id = dynamicID;
    [DSProgressHUD showProgressHUDWithInfo:@""];
    [self.myDynVM communityDeleteOperationWithCompletion:^(PersonDynViewModel * _Nonnull requestModel) {
        [DSProgressHUD dissmissProgressHUD];
        if (requestModel.resCode == DSResCodeSuccess) {
            [self.myDynVM deleteComDynWithDynamicID:self.myDynVM.delete_id];
            [self.myDynamicView deleteSuccess];
            [self.myDynamicView updateListView];
            if (self.myDynVM.listArr.count == 0) {
                [self updateDefalutView:DefaultTypeEmpty info:@""];
            }
            // 刷新社区动态列表
            [[NSNotificationCenter defaultCenter] postNotificationName:NeedUpdateComList object:nil];
        } else {
            [DSProgressHUD showToast:requestModel.errMessage];
        }
    }];
}

#pragma mark - DynamicDetailControllerDelegate
- (void)updateLikeOrRemark {
    [self.myDynamicView updateListView];
}

#pragma mark - 关闭侧滑
- (BOOL)enableInteractivePopGestureRecognizer {
    return NO;
}

#pragma mark - lazy
- (MyDynamicView *)myDynamicView {
    if (!_myDynamicView) {
        _myDynamicView = [[MyDynamicView alloc] initWithDelegate:self myDynViewModel:self.myDynVM];
    }
    return _myDynamicView;
}

@end