169 lines
3.8 KiB
Objective-C
169 lines
3.8 KiB
Objective-C
//
|
|
// NTESSessionHistoryViewController.m
|
|
// NIM
|
|
//
|
|
// Created by chris on 15/4/22.
|
|
// Copyright (c) 2015年 Netease. All rights reserved.
|
|
//
|
|
|
|
#import "NTESSessionRemoteHistoryViewController.h"
|
|
#import "Toast+UIView.h"
|
|
#import "SVProgressHUD.h"
|
|
#import "NIMCellLayoutConfig.h"
|
|
#import "NTESBundleSetting.h"
|
|
//#import "NTESCellLayoutConfig.h"
|
|
|
|
#pragma mark - Remote View Controller
|
|
@interface NTESSessionRemoteHistoryViewController ()<NTESRemoteSessionDelegate>
|
|
|
|
@property (nonatomic,strong) NTESRemoteSessionConfig *config;
|
|
|
|
|
|
@end
|
|
|
|
@implementation NTESSessionRemoteHistoryViewController
|
|
|
|
- (instancetype) initWithSession:(NIMSession *)session{
|
|
self = [super initWithSession:session];
|
|
if (self) {
|
|
_config = [[NTESRemoteSessionConfig alloc] initWithSession:session];
|
|
_config.delegate = self;
|
|
self.disableCommandTyping = YES;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)dealloc{
|
|
[SVProgressHUD dismiss];
|
|
}
|
|
|
|
- (void)viewDidLoad{
|
|
[super viewDidLoad];
|
|
self.navigationItem.leftBarButtonItems = @[];
|
|
self.navigationItem.rightBarButtonItems = @[];
|
|
[SVProgressHUD show];
|
|
[[[NIMSDK sharedSDK] chatManager] removeDelegate:self];
|
|
}
|
|
|
|
- (NSString *)sessionTitle{
|
|
return @"云消息记录";
|
|
}
|
|
|
|
- (id<NIMSessionConfig>)sessionConfig{
|
|
return self.config;
|
|
}
|
|
|
|
- (NSArray *)menusItems:(NIMMessage *)message{
|
|
return nil;
|
|
}
|
|
|
|
- (void)uiAddMessages:(NSArray *)messages{}
|
|
|
|
#pragma mark - NTESRemoteSessionDelegate
|
|
- (void)fetchRemoteDataError:(NSError *)error{
|
|
if (error) {
|
|
[self.view makeToast:@"获取消息失败"];
|
|
}
|
|
}
|
|
|
|
#pragma mark - NIMSessionConfiguratorDelegate
|
|
- (void)didFetchMessageData{
|
|
[super didFetchMessageData];
|
|
[SVProgressHUD dismiss];
|
|
}
|
|
|
|
@end
|
|
|
|
|
|
|
|
#pragma mark - Remote Session Config
|
|
@interface NTESRemoteSessionConfig()
|
|
|
|
@property (nonatomic,strong) NIMRemoteMessageDataProvider *provider;
|
|
|
|
|
|
|
|
@end
|
|
|
|
@implementation NTESRemoteSessionConfig
|
|
|
|
- (instancetype)initWithSession:(NIMSession *)session{
|
|
self = [super init];
|
|
if (self) {
|
|
NSInteger limit = 20;
|
|
self.provider = [[NIMRemoteMessageDataProvider alloc] initWithSession:session limit:limit];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)setDelegate:(id<NTESRemoteSessionDelegate>)delegate{
|
|
self.provider.delegate = delegate;
|
|
}
|
|
|
|
- (id<NIMKitMessageProvider>)messageDataProvider{
|
|
return self.provider;
|
|
}
|
|
|
|
- (BOOL)disableAudioPlayedStatusIcon{
|
|
return YES;
|
|
}
|
|
|
|
- (BOOL)disableInputView{
|
|
return YES;
|
|
}
|
|
|
|
//云消息不显示已读
|
|
- (BOOL)shouldHandleReceipt{
|
|
return NO;
|
|
}
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
#pragma mark - Provider
|
|
@interface NIMRemoteMessageDataProvider(){
|
|
NSMutableArray *_msgArray; //消息数组
|
|
NSTimeInterval _lastTime;
|
|
}
|
|
@end
|
|
|
|
|
|
@implementation NIMRemoteMessageDataProvider
|
|
|
|
- (instancetype)initWithSession:(NIMSession *)session limit:(NSInteger)limit{
|
|
self = [super init];
|
|
if (self) {
|
|
_limit = limit;
|
|
_session = session;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)pullDown:(NIMMessage *)firstMessage handler:(NIMKitDataProvideHandler)handler{
|
|
[self remoteFetchMessage:firstMessage handler:handler];
|
|
}
|
|
|
|
|
|
- (void)remoteFetchMessage:(NIMMessage *)message
|
|
handler:(NIMKitDataProvideHandler)handler
|
|
{
|
|
NIMHistoryMessageSearchOption *searchOpt = [[NIMHistoryMessageSearchOption alloc] init];
|
|
searchOpt.startTime = 0;
|
|
searchOpt.endTime = message.timestamp;
|
|
searchOpt.currentMessage = message;
|
|
searchOpt.limit = self.limit;
|
|
searchOpt.sync = NO;
|
|
[[NIMSDK sharedSDK].conversationManager fetchMessageHistory:self.session option:searchOpt result:^(NSError *error, NSArray *messages) {
|
|
if (handler) {
|
|
handler(error,messages.reverseObjectEnumerator.allObjects);
|
|
if ([self.delegate respondsToSelector:@selector(fetchRemoteDataError:)]) {
|
|
[self.delegate fetchRemoteDataError:error];
|
|
}
|
|
};
|
|
}];
|
|
}
|
|
|
|
@end
|