DynamicController.m 7.2 KB
//
//  DynamicController.m
//  DreamSleep
//
//  Created by peter on 2022/9/24.
//

#import "DynamicController.h"
#import "DynamicView.h"
#import "DynamicViewModel.h"
#import "TZImagePickerController.h"

// 最大图片上传数量
static int MaxUpdateImgCount = 3;
// 相册显示列数
static int AlbumColumnCount = 4;

@interface DynamicController () <DynamicViewDelegate, TZImagePickerControllerDelegate>
@property (nonatomic, strong) DynamicView *dynamicView;
@property (nonatomic, strong) DynamicViewModel *dynamicVM;
@property (nonatomic, assign) BOOL isSelectOriginalPhoto;
@property (nonatomic, copy) NSString *result_imgurls;
@end

@implementation DynamicController

- (void)loadView {
    self.view = self.dynamicView;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.navigationItem.title = @"动态发布";
}

#pragma mark - DynamicViewDelegate
- (void)openAlbum {
    if (MaxUpdateImgCount <= 0) { return; }
    
    TZImagePickerController *imagePickerVc = [[TZImagePickerController alloc] initWithMaxImagesCount:MaxUpdateImgCount columnNumber:AlbumColumnCount delegate:self pushPhotoPickerVc:NO];
    imagePickerVc.isSelectOriginalPhoto = self.isSelectOriginalPhoto;
    imagePickerVc.naviBgColor = [self.dk_manager.themeVersion isEqualToString:DKThemeVersionNight] ? SubNaviDarkColor : BrandColor;
    // 设置目前已经选中的图片数组
    if (MaxUpdateImgCount > 1) { imagePickerVc.selectedAssets = self.dynamicVM.selectedAssets; }
    // 在内部显示拍照按钮
    imagePickerVc.allowTakePicture = YES;
    imagePickerVc.iconThemeColor = ColorFromRGBA(31.0, 185.0, 34.0, 1.0);
    imagePickerVc.showPhotoCannotSelectLayer = YES;
    imagePickerVc.cannotSelectLayerColor = [DSWhite colorWithAlphaComponent:0.8];
    // 设置是否可以选择视频/图片/原图
    imagePickerVc.allowPickingVideo = NO;
    imagePickerVc.allowPickingImage = YES;
    imagePickerVc.allowPickingOriginalPhoto = NO;
    imagePickerVc.allowPickingGif = NO;
    // 是否可以多选视频
    imagePickerVc.allowPickingMultipleVideo = NO;
    // 照片排列按修改时间升序
    imagePickerVc.sortAscendingByModificationDate = YES;
    imagePickerVc.showSelectBtn = NO;
    imagePickerVc.allowCrop = NO;
    imagePickerVc.needCircleCrop = NO;
    // 设置竖屏下的裁剪尺寸
    NSInteger left = 30;
    NSInteger widthHeight = self.view.width - 2 * left;
    NSInteger top = (self.view.height - widthHeight) / 2;
    imagePickerVc.cropRect = CGRectMake(left, top, widthHeight, widthHeight);
    // 设置是否显示图片序号
    imagePickerVc.showSelectedIndex = YES;
    imagePickerVc.autoDismiss = NO;
    // 你可以通过block或者代理,来得到用户选择的照片.
    __weak TZImagePickerController *weakPicker = imagePickerVc;
    [imagePickerVc setDidFinishPickingPhotosHandle:^(NSArray<UIImage *> *photos, NSArray *assets, BOOL isSelectOriginalPhoto) {
        if (photos.count) { [self uploadImgsWithPhotos:photos picker:weakPicker]; }
    }];
    [self presentViewController:imagePickerVc animated:YES completion:nil];
}

- (void)previewPicture:(NSIndexPath *)indexPath {
    id asset = self.dynamicVM.selectedAssets[(indexPath.row - 1)];
    BOOL isVideo = NO;
    if ([asset isKindOfClass:[PHAsset class]]) {
        PHAsset *phAsset = asset;
        isVideo = phAsset.mediaType == PHAssetMediaTypeVideo;
    }
    
    TZImagePickerController *imagePickerVc = [[TZImagePickerController alloc] initWithSelectedAssets:self.dynamicVM.selectedAssets selectedPhotos:self.dynamicVM.selectedPhotos index:(indexPath.row - 1)];
    imagePickerVc.maxImagesCount = MaxUpdateImgCount;
    imagePickerVc.allowPickingOriginalPhoto = NO;
    imagePickerVc.allowPickingMultipleVideo = NO;
    imagePickerVc.showSelectedIndex = YES;
    imagePickerVc.isSelectOriginalPhoto = self.isSelectOriginalPhoto;
    WS(weakSelf);
    [imagePickerVc setDidFinishPickingPhotosHandle:^(NSArray<UIImage *> *photos, NSArray *assets, BOOL isSelectOriginalPhoto) {
        self.dynamicVM.selectedPhotos = [NSMutableArray arrayWithArray:photos];
        self.dynamicVM.selectedAssets = [NSMutableArray arrayWithArray:assets];
        self.isSelectOriginalPhoto = isSelectOriginalPhoto;
        [weakSelf.dynamicView refreshImageContentView];
    }];
    [self presentViewController:imagePickerVc animated:YES completion:nil];
}

- (void)deletePicture:(NSInteger)tag {
    [self.dynamicVM.selectedPhotos removeObjectAtIndex:tag];
    [self.dynamicVM.selectedAssets removeObjectAtIndex:tag];
    [self.dynamicView refreshAfterDelete:tag];
}

- (void)publishDynamic {
    
}

#pragma mark - TZImagePickerControllerDelegate
- (void)imagePickerController:(TZImagePickerController *)picker didFinishPickingPhotos:(NSArray<UIImage *> *)photos sourceAssets:(NSArray *)assets isSelectOriginalPhoto:(BOOL)isSelectOriginalPhoto infos:(NSArray<NSDictionary *> *)infos {
    self.dynamicVM.selectedPhotos = [NSMutableArray arrayWithArray:photos];
    self.dynamicVM.selectedAssets = [NSMutableArray arrayWithArray:assets];
    self.isSelectOriginalPhoto = isSelectOriginalPhoto;
    [self.dynamicView refreshImageContentView];
}

- (void)imagePickerController:(TZImagePickerController *)picker didFinishPickingGifImage:(UIImage *)animatedImage sourceAssets:(id)asset {
    self.dynamicVM.selectedPhotos = [NSMutableArray arrayWithArray:@[animatedImage]];
    self.dynamicVM.selectedAssets = [NSMutableArray arrayWithArray:@[asset]];
    [self.dynamicView refreshImageContentView];
}

- (BOOL)isAlbumCanSelect:(NSString *)albumName result:(id)result {
    return YES;
}

- (void)tz_imagePickerControllerDidCancel:(TZImagePickerController *)picker {
    [self dismissViewControllerAnimated:YES completion:nil];
}

#pragma mark - 图片上传
- (void)uploadImgsWithPhotos:(NSArray<UIImage *> *)photos picker:(TZImagePickerController *)picker {
    // 1、处理图片
    NSMutableString *mstr = [NSMutableString string];
    [mstr appendString:@"["];
    for (int index = 0; index < photos.count; index++) {
        UIImage *img = photos[index];
        NSString *base64Str = [UIImage imageToBase64Str:img];
        NSString *sepStr = (index == (photos.count - 1)) ? @"" : @",";
        [mstr appendString:[NSString stringWithFormat:@"\"%@\"%@", base64Str, sepStr]];
    }
    [mstr appendString:@"]"];
    // 2、上传图片
    //    [DSProgressHUD showProgressHUDWithInfo:@""];
    //    [FeedbackRequestModel uploadBulkImagesWithImgStr:[mstr copy] completion:^(FeedbackRequestModel * _Nonnull requestModel) {
    //        [DSProgressHUD dissmissProgressHUD];
    //        if (requestModel.resCode == DSResCodeSuccess) {
    //            // 存储图片上传成功后返回的urls
    //            self.result_imgurls = requestModel.result_imgurls;
    //            [picker dismissViewControllerAnimated:YES completion:nil];
    //        }
    //    }];
    [picker dismissViewControllerAnimated:YES completion:nil];
}

#pragma mark - 品牌模式
- (NaviStyle)navigationBarStyle {
    return NaviStyleDefault;
}

#pragma mark - lazy
- (DynamicViewModel *)dynamicVM {
    if (!_dynamicVM) {
        _dynamicVM = [DynamicViewModel new];
    }
    return _dynamicVM;
}

- (DynamicView *)dynamicView {
    if (!_dynamicView) {
        _dynamicView = [[DynamicView alloc] initWithDelegate:self dynamicVM:self.dynamicVM];
    }
    return _dynamicView;
}

@end