Files
2026-07-13 12:35:01 +08:00

200 lines
7.4 KiB
Objective-C

//
// TLChatFileViewController.m
// TLChat
//
// Created by 李伯坤 on 16/3/18.
// Copyright © 2016年 李伯坤. All rights reserved.
//
#import "TLChatFileViewController.h"
#import "TLChatFileCell.h"
#import "TLChatFileHeaderView.h"
#import "NSDate+TLChat.h"
#import "TLMessageManager+MessageRecord.h"
#import <MWPhotoBrowser/MWPhotoBrowser.h>
#import "NSFileManager+TLChat.h"
#define HEIGHT_COLLECTIONVIEW_HEADER 28
#define WIDTH_COLLECTIONVIEW_CELL SCREEN_WIDTH / 4 * 0.98
#define SPACE_COLLECTIONVIEW_CELL (SCREEN_WIDTH - WIDTH_COLLECTIONVIEW_CELL * 4) / 3
@interface TLChatFileViewController () <UICollectionViewDataSource, UICollectionViewDelegate>
@property (nonatomic, strong) UICollectionView *collectionView;
@property (nonatomic, strong) NSMutableArray *mediaData;
@property (nonatomic, strong) NSMutableArray *browserData;
@end
@implementation TLChatFileViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self.navigationItem setTitle:LOCSTR(@"聊天文件")];
[self.view setBackgroundColor:[UIColor colorBlackBG]];
[self.view addSubview:self.collectionView];
[self p_addMasonry];
UIBarButtonItem *rightBarButton = [[UIBarButtonItem alloc] initWithTitle:@"选择" style:UIBarButtonItemStylePlain actionBlick:^{
}];
[self.navigationItem setRightBarButtonItem:rightBarButton];
[self.collectionView registerClass:[TLChatFileHeaderView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"TLChatFileHeaderView"];
[self.collectionView registerClass:[TLChatFileCell class] forCellWithReuseIdentifier:@"TLChatFileCell"];
}
- (void)setPartnerID:(NSString *)partnerID
{
_partnerID = partnerID;
__weak typeof(self) weakSelf = self;
[[TLMessageManager sharedInstance] chatFilesForPartnerID:partnerID completed:^(NSArray *data) {
[weakSelf.data removeAllObjects];
weakSelf.mediaData = nil;
[weakSelf.data addObjectsFromArray:data];
[weakSelf.collectionView reloadData];
}];
}
#pragma mark - Delegate -
//MARK: UICollectionViewDataSource
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
return self.data.count;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return [self.data[section] count];
}
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
TLMessage *message = [self.data[indexPath.section] objectAtIndex:indexPath.row];
TLChatFileHeaderView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"TLChatFileHeaderView" forIndexPath:indexPath];
[headerView setTitle:[message.date chatFileTimeInfo]];
return headerView;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
TLMessage * message = [self.data[indexPath.section] objectAtIndex:indexPath.row];
TLChatFileCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"TLChatFileCell" forIndexPath:indexPath];
[cell setMessage:message];
return cell;
}
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
TLMessage *message = [self.data[indexPath.section] objectAtIndex:indexPath.row];
if (message.messageType == TLMessageTypeImage) {
NSInteger index = -1;
for (int i = 0; i < self.mediaData.count; i++) {
if ([message.messageID isEqualToString:[self.mediaData[i] messageID]]) {
index = i;
break;
}
}
if (index >= 0) {
MWPhotoBrowser *browser = [[MWPhotoBrowser alloc] initWithPhotos:self.browserData];
[browser setDisplayNavArrows:YES];
[browser setCurrentPhotoIndex:index];
UINavigationController *broserNavC = [[UINavigationController alloc] initWithRootViewController:browser];
[self presentViewController:broserNavC animated:NO completion:nil];
}
}
}
#pragma mark - Private Methods -
- (void)p_addMasonry
{
[self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.and.right.and.top.mas_equalTo(self.view);
make.bottom.mas_equalTo(self.view);
}];
}
#pragma mark - Getter -
- (UICollectionView *)collectionView
{
if (_collectionView == nil) {
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
if ([UIDevice currentDevice].systemVersion.floatValue >= 9.0) {
[layout setSectionHeadersPinToVisibleBounds:YES];
}
[layout setItemSize:CGSizeMake(WIDTH_COLLECTIONVIEW_CELL, WIDTH_COLLECTIONVIEW_CELL)];
[layout setMinimumInteritemSpacing:SPACE_COLLECTIONVIEW_CELL];
[layout setMinimumLineSpacing:SPACE_COLLECTIONVIEW_CELL];
[layout setHeaderReferenceSize:CGSizeMake(SCREEN_WIDTH, HEIGHT_COLLECTIONVIEW_HEADER)];
[layout setFooterReferenceSize:CGSizeMake(SCREEN_WIDTH, 0)];
_collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
[_collectionView setBackgroundColor:[UIColor clearColor]];
[_collectionView setDataSource:self];
[_collectionView setDelegate:self];
[_collectionView setShowsHorizontalScrollIndicator:NO];
[_collectionView setShowsHorizontalScrollIndicator:NO];
[_collectionView setAlwaysBounceVertical:YES];
}
return _collectionView;
}
- (NSMutableArray *)data
{
if (_data == nil) {
_data = [[NSMutableArray alloc] init];
}
return _data;
}
- (NSMutableArray *)mediaData
{
if (_mediaData == nil) {
_mediaData = [[NSMutableArray alloc] init];
for (NSArray *array in self.data) {
for (TLMessage *message in array) {
if (message.messageType == TLMessageTypeImage) {
[_mediaData addObject:message];
NSURL *url;
if ([(TLImageMessage *)message imagePath]) {
NSString *imagePath = [NSFileManager pathUserChatImage:[(TLImageMessage *)message imagePath]];
url = [NSURL fileURLWithPath:imagePath];
}
else {
url = TLURL([(TLImageMessage *)message imageURL]);
}
MWPhoto *photo = [MWPhoto photoWithURL:url];
[_browserData addObject:photo];
}
}
}
}
return _mediaData;
}
- (NSMutableArray *)browserData
{
if (_browserData == nil) {
_browserData = [[NSMutableArray alloc] init];
for (TLMessage *message in self.mediaData) {
if (message.messageType == TLMessageTypeImage) {
NSURL *url;
if ([(TLImageMessage *)message imagePath]) {
NSString *imagePath = [NSFileManager pathUserChatImage:[(TLImageMessage *)message imagePath]];
url = [NSURL fileURLWithPath:imagePath];
}
else {
url = TLURL([(TLImageMessage *)message imageURL]);
}
MWPhoto *photo = [MWPhoto photoWithURL:url];
[_browserData addObject:photo];
}
}
}
return _browserData;
}
@end