| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- //
- // TUIC2CChatViewController.m
- // TXIMSDK_TUIKit_iOS
- //
- // Created by kayev on 2021/6/17.
- // Copyright © 2023 Tencent. All rights reserved.
- //
- #import "TUIC2CChatViewController.h"
- #import "TUIBaseChatViewController+ProtectedAPI.h"
- #import "TUIChatConfig.h"
- #import "TUICloudCustomDataTypeCenter.h"
- #import "TUILinkCellData.h"
- #import "TUIMessageController.h"
- #import "TUIMessageDataProvider.h"
- #define kC2CTypingTime 3000.0
- @interface TUIC2CChatViewController ()
- // If one sendTypingBaseCondation is satisfied, sendTypingBaseCondationInVC is used until the current session exits
- @property(nonatomic, assign) BOOL sendTypingBaseCondationInVC;
- @end
- @implementation TUIC2CChatViewController
- - (void)dealloc {
- self.sendTypingBaseCondationInVC = NO;
- }
- - (void)viewDidLoad {
- [super viewDidLoad];
- // Do any additional setup after loading the view.
- self.sendTypingBaseCondationInVC = NO;
-
- // notify
- NSDictionary *param = @{TUICore_TUIChatNotify_ChatVC_ViewDidLoadSubKey_UserID: self.conversationData.userID ? : @""};
- [TUICore notifyEvent:TUICore_TUIChatNotify
- subKey:TUICore_TUIChatNotify_ChatVC_ViewDidLoadSubKey
- object:nil
- param:param];
- }
- #pragma mark - Override Methods
- - (void)inputControllerDidInputAt:(TUIInputController *)inputController {
- [super inputControllerDidInputAt:inputController];
- NSAttributedString *spaceString = [[NSAttributedString alloc]
- initWithString:@"@"
- attributes:@{NSFontAttributeName : kTUIInputNoramlFont, NSForegroundColorAttributeName : kTUIInputNormalTextColor}];
- [self.inputController.inputBar addWordsToInputBar:spaceString];
- }
- - (NSString *)forwardTitleWithMyName:(NSString *)nameStr {
- NSString *title = [NSString stringWithFormat:TIMCommonLocalizableString(TUIKitRelayChatHistoryForSomebodyFormat), self.conversationData.title, nameStr];
- return rtlString(title);
- }
- - (void)inputController:(TUIInputController *)inputController didSelectMoreCell:(TUIInputMoreCell *)cell {
- [super inputController:inputController didSelectMoreCell:cell];
- }
- - (void)inputControllerBeginTyping:(TUIInputController *)inputController {
- [super inputControllerBeginTyping:inputController];
- [self sendTypingMsgByStatus:YES];
- }
- - (void)inputControllerEndTyping:(TUIInputController *)inputController {
- [super inputControllerEndTyping:inputController];
- [self sendTypingMsgByStatus:NO];
- }
- - (BOOL)sendTypingBaseCondation {
- if (self.sendTypingBaseCondationInVC) {
- return YES;
- }
- if ([self.messageController isKindOfClass:TUIMessageController.class]) {
- TUIMessageController *vc = (TUIMessageController *)self.messageController;
- NSDictionary *messageFeatureDic = (id)[vc.C2CIncomingLastMsg parseCloudCustomData:messageFeature];
- if (messageFeatureDic && [messageFeatureDic isKindOfClass:[NSDictionary class]] && [messageFeatureDic.allKeys containsObject:@"needTyping"] &&
- [messageFeatureDic.allKeys containsObject:@"version"]) {
- BOOL needTyping = NO;
- BOOL versionControl = NO;
- BOOL timeControl = NO;
- if ([messageFeatureDic[@"needTyping"] intValue] == 1) {
- needTyping = YES;
- }
- if ([messageFeatureDic[@"version"] intValue] == 1) {
- versionControl = YES;
- }
- CFTimeInterval current = [NSDate.new timeIntervalSince1970];
- long currentTimeFloor = floor(current);
- long otherSideTimeFloor = floor([vc.C2CIncomingLastMsg.timestamp timeIntervalSince1970]);
- long interval = currentTimeFloor - otherSideTimeFloor;
- if (interval <= kC2CTypingTime) {
- timeControl = YES;
- }
- if (needTyping && versionControl && timeControl) {
- self.sendTypingBaseCondationInVC = YES;
- return YES;
- }
- }
- }
- return NO;
- }
- - (void)sendTypingMsgByStatus:(BOOL)editing {
- // switch control
- if (![TUIChatConfig defaultConfig].enableTypingStatus) {
- return;
- }
- //注释下面的代码, 低端机过不了判断
- // if (![self sendTypingBaseCondation]) {
- // return;
- // }
- NSError *error = nil;
- NSDictionary *param = @{
- BussinessID : BussinessID_Typing,
- @"typingStatus" : editing ? @1 : @0,
- @"version" : @1,
- @"userAction" : @14,
- @"actionParam" : editing ? @"EIMAMSG_InputStatus_Ing" : @"EIMAMSG_InputStatus_End",
- };
- NSData *data = [NSJSONSerialization dataWithJSONObject:param options:0 error:&error];
- V2TIMMessage *msg = [TUIMessageDataProvider getCustomMessageWithJsonData:data];
- [msg setIsExcludedFromContentModeration:YES];
- TUISendMessageAppendParams *appendParams = [[TUISendMessageAppendParams alloc] init];
- appendParams.isSendPushInfo = NO;
- appendParams.isOnlineUserOnly = YES;
- appendParams.priority = V2TIM_PRIORITY_DEFAULT;
- [TUIMessageDataProvider sendMessage:msg
- toConversation:self.conversationData
- appendParams:appendParams
- Progress:^(uint32_t progress) {
- }
- SuccBlock:^{
- NSLog(@"success");
- }
- FailBlock:^(int code, NSString *desc) {
- NSLog(@"Fail");
- }];
- }
- @end
|