房间内公聊大厅

This commit is contained in:
liyuhua
2024-05-11 10:21:48 +08:00
parent 8d78cb6be5
commit e05876be41
42 changed files with 1506 additions and 264 deletions

View File

@@ -228,6 +228,9 @@
2357148C2BECEE33004C81D6 /* MSSessionPublicChatHalTextCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2357148B2BECEE33004C81D6 /* MSSessionPublicChatHalTextCell.m */; };
2357148F2BEDC94D004C81D6 /* MSSessionPublicChatHalImageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2357148E2BEDC94D004C81D6 /* MSSessionPublicChatHalImageCell.m */; };
235714922BEDC9B1004C81D6 /* MSSessionPublicChatHalImageModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 235714912BEDC9B1004C81D6 /* MSSessionPublicChatHalImageModel.m */; };
235714952BEDF517004C81D6 /* MsRoomMessagChatHallView.m in Sources */ = {isa = PBXBuildFile; fileRef = 235714942BEDF517004C81D6 /* MsRoomMessagChatHallView.m */; };
235714982BEDF54E004C81D6 /* MsRoomMessageMainView.m in Sources */ = {isa = PBXBuildFile; fileRef = 235714972BEDF54E004C81D6 /* MsRoomMessageMainView.m */; };
2357149B2BEE2AD1004C81D6 /* MsRoomMessagChatHallCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2357149A2BEE2AD1004C81D6 /* MsRoomMessagChatHallCell.m */; };
235A451A2B04A352009753F5 /* PIRoomActivityWebView.m in Sources */ = {isa = PBXBuildFile; fileRef = 235A45192B04A352009753F5 /* PIRoomActivityWebView.m */; };
235A451D2B04A452009753F5 /* PIRoomActivityWebCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 235A451C2B04A452009753F5 /* PIRoomActivityWebCell.m */; };
235A45232B04BEB6009753F5 /* PIBaseModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 235A45222B04BEB6009753F5 /* PIBaseModel.m */; };
@@ -1973,6 +1976,12 @@
2357148E2BEDC94D004C81D6 /* MSSessionPublicChatHalImageCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MSSessionPublicChatHalImageCell.m; sourceTree = "<group>"; };
235714902BEDC9B1004C81D6 /* MSSessionPublicChatHalImageModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MSSessionPublicChatHalImageModel.h; sourceTree = "<group>"; };
235714912BEDC9B1004C81D6 /* MSSessionPublicChatHalImageModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MSSessionPublicChatHalImageModel.m; sourceTree = "<group>"; };
235714932BEDF517004C81D6 /* MsRoomMessagChatHallView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MsRoomMessagChatHallView.h; sourceTree = "<group>"; };
235714942BEDF517004C81D6 /* MsRoomMessagChatHallView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MsRoomMessagChatHallView.m; sourceTree = "<group>"; };
235714962BEDF54E004C81D6 /* MsRoomMessageMainView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MsRoomMessageMainView.h; sourceTree = "<group>"; };
235714972BEDF54E004C81D6 /* MsRoomMessageMainView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MsRoomMessageMainView.m; sourceTree = "<group>"; };
235714992BEE2AD1004C81D6 /* MsRoomMessagChatHallCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MsRoomMessagChatHallCell.h; sourceTree = "<group>"; };
2357149A2BEE2AD1004C81D6 /* MsRoomMessagChatHallCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MsRoomMessagChatHallCell.m; sourceTree = "<group>"; };
235A45182B04A352009753F5 /* PIRoomActivityWebView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PIRoomActivityWebView.h; sourceTree = "<group>"; };
235A45192B04A352009753F5 /* PIRoomActivityWebView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PIRoomActivityWebView.m; sourceTree = "<group>"; };
235A451B2B04A452009753F5 /* PIRoomActivityWebCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PIRoomActivityWebCell.h; sourceTree = "<group>"; };
@@ -8157,6 +8166,8 @@
E84B0E412727EE0A008818C6 /* XPRoomMessageHeaderView.m */,
E84B0E3D2727EDF6008818C6 /* XPRoomMessageTableViewCell.h */,
E84B0E3E2727EDF6008818C6 /* XPRoomMessageTableViewCell.m */,
235714992BEE2AD1004C81D6 /* MsRoomMessagChatHallCell.h */,
2357149A2BEE2AD1004C81D6 /* MsRoomMessagChatHallCell.m */,
);
path = View;
sourceTree = "<group>";
@@ -9971,8 +9982,12 @@
E84B0E47272801F6008818C6 /* Tool */,
E84B0E432727EF2C008818C6 /* Model */,
E84B0E3C2727EDD4008818C6 /* View */,
235714962BEDF54E004C81D6 /* MsRoomMessageMainView.h */,
235714972BEDF54E004C81D6 /* MsRoomMessageMainView.m */,
E8AEAEF127141C7C0017FCE0 /* XPRoomMessageContainerView.h */,
E8AEAEF227141C7C0017FCE0 /* XPRoomMessageContainerView.m */,
235714932BEDF517004C81D6 /* MsRoomMessagChatHallView.h */,
235714942BEDF517004C81D6 /* MsRoomMessagChatHallView.m */,
);
path = MessageContainerView;
sourceTree = "<group>";
@@ -11216,6 +11231,7 @@
E8751E6E28A64F990056EF44 /* XPSailingEmptyTableViewCell.m in Sources */,
E87E625A2A3F560B002F68C9 /* XPHomeRecommendViewController.m in Sources */,
E8950189282CFFB1007E459A /* XPMonentsLayoutConfig.m in Sources */,
2357149B2BEE2AD1004C81D6 /* MsRoomMessagChatHallCell.m in Sources */,
E81061032987CFCE00B772F0 /* MessageSkillCardModel.m in Sources */,
9BD9A18727A120FD004186FE /* XPMineVisitorUnReadModel.m in Sources */,
E85E7BAD2A4EC99300B6D00A /* XPMineGiveDiamondDetailsCell.m in Sources */,
@@ -11829,6 +11845,7 @@
E8098CAE282E07C00090B9F0 /* XPMonentsEmptyTableViewCell.m in Sources */,
237700D72BC7D51400D661F1 /* UIButton+MSRTL.m in Sources */,
E85E7B4F2A4EB0D300B6D00A /* XPMineExchangeAuthorityVC.m in Sources */,
235714952BEDF517004C81D6 /* MsRoomMessagChatHallView.m in Sources */,
23FE47DB2BB4171C00F09D23 /* PINobleCenterListView.m in Sources */,
E84A2E932A527EC800D6AF8A /* XPIncomeRecordPresent.m in Sources */,
236B2E432AA07D06003967A8 /* NSString+RW.m in Sources */,
@@ -11843,6 +11860,7 @@
E8778AF82988F4E200CF139B /* XPSessionSayHelloHeaderView.m in Sources */,
E84150C527747E0900A7F548 /* FirstRechargeRewardModel.m in Sources */,
E8B9843328ABA2FF0022D026 /* MonentsPicResInfo.m in Sources */,
235714982BEDF54E004C81D6 /* MsRoomMessageMainView.m in Sources */,
9BE9F10227FEE5C200667200 /* XPAnchorFansTaskDetailModel.m in Sources */,
E8E0DAE6285C280E00566A2F /* XPSessionFindNewAlertView.m in Sources */,
E85E7B1A2A4EB0D200B6D00A /* XPMineGoldIncomeRecordVC.m in Sources */,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 110 KiB

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "ms_room_message_send_headline_icon@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "ms_room_message_send_headline_icon@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "ms_room_message_send_headline_icon_ar@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "ms_room_message_send_headline_icon_ar@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "ms_room_message_send_headline_icon_en@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "ms_room_message_send_headline_icon_en@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

View File

@@ -30,6 +30,7 @@ BOOL isRTLString(NSString *string) {
}
-(void)msrtl_setAttributedText:(NSAttributedString *)attributedText{
if(attributedText == nil)return;
NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc]init];
if(self.textAlignment == NSTextAlignmentCenter){
if (isMSRTL()) {
@@ -46,6 +47,7 @@ BOOL isRTLString(NSString *string) {
[attributedString appendAttributedString:[NSMutableAttributedString createBlankAttributeToMSRTL]];
// [attributedString appendAttributedString:[NSMutableAttributedString createBlankAttributeToMSLTR]];
}
[attributedString appendAttributedString:attributedText];
[self msrtl_setAttributedText:attributedString];
if(isMSRTL()){

View File

@@ -166,7 +166,7 @@
[self.rightAvatar loadImageWithUrl:extModel.avatar completion:^(UIImage * _Nullable image, NSURL * _Nonnull url) {
self.rightAvatar.image = image;
}];
self.rightMessageText.text = self.message.text;
self.rightMessageText.attributedText = textModel.textAttribute;
self.rightBubbleImageView.image = nil;
self.rightBgImage.image = [self resizableImage:kImage(@"ms_message_headlines_text_right")];
@@ -223,7 +223,7 @@
self.leftBubbleImageView.image = [self resizableImage:image1];
}];
self.leftNameView.attributedText = textModel.nameAtt;
self.messageText.text = self.message.text;
self.messageText.attributedText = textModel.textAttribute;
}
- (UIImage*)resizableImage:(UIImage *)image {
//

View File

@@ -10,7 +10,8 @@
NS_ASSUME_NONNULL_BEGIN
@interface MessageHeadlinesTextModel : MessageBaseModel
///富文本
@property (nonatomic,strong) NSAttributedString *textAttribute;
@property(nonatomic,strong) NSMutableAttributedString *nameAtt;
@property(nonatomic,assign) BOOL isSelf ;
@property(nonatomic,strong) XPMessageRemoteExtModel *extModel;

View File

@@ -30,13 +30,34 @@
if (!messageText) {
messageText = YMLocalizedString(@"MessageTextModel0");
}
CGFloat width = [UILabel getWidthWithText:messageText height:kGetScaleWidth(36) font:kFontMedium(14)];
width = width > kGetScaleWidth(200) ? kGetScaleWidth(200) : width;
self.width = width >= kGetScaleWidth(220) ? kGetScaleWidth(220) : (width + kGetScaleWidth(25));
CGFloat height = [UILabel getLabelHeightWithText:messageText width:width font:kFontMedium(14)] + kGetScaleWidth(25);
self.imageHeight = height;
self.height = (self.isSelf ? kGetScaleWidth(35) : kGetScaleWidth(65)) + height;
CGSize dstRect = CGSizeMake(width, MAXFLOAT);
QEmotionHelper *faceManager = [QEmotionHelper sharedEmotionHelper];
NSMutableAttributedString * attribute = [faceManager attributedStringByText:messageText font:kFontMedium(14)];
if(extModel.iosBubbleUrl.length > 0){
[attribute addAttributes:@{NSForegroundColorAttributeName: UIColorFromRGB(0x333333)} range:[attribute.string rangeOfString:attribute.string]];
}else{
[attribute addAttributes:@{NSForegroundColorAttributeName:self.isSelf ? UIColorFromRGB(0x333333) : [UIColor whiteColor]} range:[attribute.string rangeOfString:attribute.string]];
}
self.textAttribute = attribute;
YYTextContainer *container = [YYTextContainer containerWithSize:dstRect];
container.maximumNumberOfRows = 0;
YYTextLayout *layout = [YYTextLayout layoutWithContainer:container text:attribute];
CGFloat rowHeight = layout.textBoundingSize.height + kGetScaleWidth(25);
self.imageHeight = rowHeight;
self.height = (self.isSelf ? kGetScaleWidth(35) : kGetScaleWidth(65)) + rowHeight;
self.isHiddenAvatar = YES;
}

View File

@@ -52,6 +52,7 @@
#import "XPIncomeRecordModel.h"
#import "XPCandyTreeInsufficientBalanceView.h"
#import "XPIAPRechargeViewController.h"
#import "Api+Mine.h"
@interface MSSessionPublicChatHallVC ()<SessionNavViewDelegate,MessageProtocol, UITableViewDelegate, UITableViewDataSource, NIMChatManagerDelegate, NIMConversationManagerDelegate, NIMMediaManagerDelegate, MessageCellDelegate, TZImagePickerControllerDelegate, SessionNavViewDelegate, QInputBarViewDelegate, QInputBarViewDataSource,InputBoardDataSource ,InputBoardDelegate , QEmotionBoardViewDelegate, QinputPhotoViewDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate,MSSessionReleaseHeadlinesViewDelegate,XPCandyTreeInsufficientBalanceViewDelegate>
@property (nonatomic, strong) NIMSession * session;
@property (nonatomic, strong) NSMutableArray<MessageBaseModel *> * messages;
@@ -81,7 +82,7 @@
- (void)dealloc {
[[NIMSDK sharedSDK].chatManager removeDelegate:self];
[[NSNotificationCenter defaultCenter] removeObserver:self];
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(setHeadViewData) object:nil];
[self.presenter exitNIMRoom:self.publicChatMessageRoomId];
}
@@ -156,14 +157,14 @@
model = [[MessageHeadlinesModel alloc] initWithMessage:message];
MSSessionPublicChatHallTopModel *topModel = [MSSessionPublicChatHallTopModel modelWithDictionary:attachment.data];
self.headView.topModel = topModel;
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(setHeadViewData) object:nil];
[self setTime:topModel];
}
return model;
}
-(void)setTime:(MSSessionPublicChatHallTopModel *)topModel{
NSInteger time = topModel.endTime/1000 - topModel.startTime/1000;
[self performSelector:@selector(setHeadViewData) withObject:nil afterDelay:time];
// NSInteger time = topModel.endTime/1000 - topModel.startTime/1000;
// [self performSelector:@selector(setHeadViewData) withObject:nil afterDelay:time];
}
-(void)setHeadViewData{

View File

@@ -16,6 +16,7 @@ NS_ASSUME_NONNULL_BEGIN
@end
@interface MSSessionReleaseHeadlinesPayView : UIView
@property(nonatomic,copy) NSString *releaseCoins;
@property(nonatomic,copy) NSString *coins;
@property(nonatomic,weak) id<MSSessionReleaseHeadlinesPayViewDelegate>delegate;
@end

View File

@@ -77,6 +77,10 @@
[self.delegate payReleaseHeadlines];
}
}
-(void)setReleaseCoins:(NSString *)releaseCoins{
_releaseCoins = releaseCoins;
_numView.text = _releaseCoins;
}
- (void)setCoins:(NSString *)coins{
_coins = coins;
UIImage *iconImage = kImage(@"exchange_gold_icon");

View File

@@ -21,6 +21,7 @@ NS_ASSUME_NONNULL_BEGIN
@property(nonatomic,copy) NSString *golds;
@property(nonatomic,copy) NSString *myCoins;
@property(nonatomic,weak) id<MSSessionReleaseHeadlinesViewDelegate>delegate;
-(void)loadDataForRoom;
@end
NS_ASSUME_NONNULL_END

View File

@@ -4,7 +4,9 @@
//
// Created by duoban on 2024/5/9.
//
#import "Api+Mine.h"
#import "XPIncomeRecordModel.h"
#import "Api+Message.h"
#import "MSSessionReleaseHeadlinesView.h"
#import "MSSessionReleaseHeadlinesPayView.h"
@interface MSSessionReleaseHeadlinesView()<UITextViewDelegate,MSSessionReleaseHeadlinesPayViewDelegate>
@@ -13,6 +15,7 @@
@property(nonatomic,strong) UIView *bgTextView;
@property(nonatomic,strong) UIButton *releaseBtn;
@property(nonatomic,strong) UIButton *backBtn;
@property(nonatomic,assign) BOOL isRoom;
@end
@implementation MSSessionReleaseHeadlinesView
@@ -60,6 +63,21 @@
make.top.equalTo(self.bgTextView.mas_bottom).mas_offset(kGetScaleWidth(26));
}];
}
-(void)loadDataForRoom{
self.isRoom = YES;
[self getCoinsData];
}
-(void)getCoinsData{
[Api requestRecordIncome:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
if(code == 200){
XPIncomeRecordModel *model = [XPIncomeRecordModel modelWithDictionary:data.data];
self.myCoins = @(model.diamonds).stringValue;
}
}];
[Api getPublicChatHallTopTextPayMoney:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
self.golds = [NSString stringWithFormat:@"%@",data.data];
}];
}
-(void)releaseBtnAction{
if(self.textView.text.length == 0){
[XNDJTDDLoadingTool showErrorWithMessage:YMLocalizedString(@"MSSessionReleaseHeadlinesView0")];
@@ -67,6 +85,7 @@
}
[self.textView resignFirstResponder];
MSSessionReleaseHeadlinesPayView *payView = [[MSSessionReleaseHeadlinesPayView alloc]initWithFrame:CGRectZero];
payView.releaseCoins = self.golds;
payView.coins = self.myCoins;
payView.delegate = self;
[self addSubview:payView];
@@ -77,6 +96,25 @@
}
-(void)payReleaseHeadlines{
if(self.isRoom){
if (self.myCoins.integerValue < self.golds.integerValue){
if(self.delegate && [self.delegate respondsToSelector:@selector(releaseHeadlinesWithText:)]){
[self.delegate releaseHeadlinesWithText:self.textView.text];
}
[TTPopup dismiss];
return;
}
[Api sendPublicChatHallTopText:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
if(code == 200){
[TTPopup dismiss];
[XNDJTDDLoadingTool showErrorWithMessage:YMLocalizedString(@"XPSessionFindNewGreetListView0")];
return;
}
[XNDJTDDLoadingTool showErrorWithMessage:msg];
} content:self.textView.text];
return;
}
if(self.delegate && [self.delegate respondsToSelector:@selector(releaseHeadlinesWithText:)]){
[self.delegate releaseHeadlinesWithText:self.textView.text];
}

View File

@@ -92,18 +92,18 @@
}];
[self.bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(kStatusBarHeight);
make.height.mas_equalTo(kGetScaleWidth(99));
make.height.mas_equalTo(kGetScaleWidth(112));
make.leading.trailing.equalTo(self.view);
}];
[self.textView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(kGetScaleWidth(13));
make.top.mas_equalTo(kGetScaleWidth(25.5));
make.centerX.equalTo(self.bgImageView);
}];
[self.scrollingView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(0);
make.top.mas_equalTo(kGetScaleWidth(35));
make.top.mas_equalTo(kGetScaleWidth(48));
make.trailing.mas_equalTo(-kGetScaleWidth(0));
make.bottom.mas_equalTo(kGetScaleWidth(10));
make.bottom.mas_equalTo(kGetScaleWidth(8));
}];
[self.pagingView mas_makeConstraints:^(MASConstraintMaker *make) {

View File

@@ -12,6 +12,8 @@ NS_ASSUME_NONNULL_BEGIN
@class UserInfoModel;
@interface XPRoomPresenter : BaseMvpPresenter
@property(nonatomic,strong) UserInfoModel *infoModel;
- (void)initEnterRoom:(NSString *)roomUid user:(NSString *)uid;

View File

@@ -6,6 +6,7 @@
//
#import "XPRoomPresenter.h"
#import "ClientConfig.h"
///API
#import "Api+Room.h"
#import "Api+Gift.h"
@@ -45,6 +46,7 @@
[Api getUserInfo:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
UserInfoModel * infoModel = [UserInfoModel modelWithJSON:data.data];
self.infoModel = infoModel;
[user sendNext:infoModel];
[user sendCompleted];
} fail:^(NSInteger code, NSString * _Nullable msg) {
@@ -110,10 +112,22 @@
[[self getView] enterRoomSuccess:chatroom];
}
}];
NSString *publicChatRoomId = [NSString stringWithFormat:@"%@",[ClientConfig shareConfig].configInfo.publicChatRoomIdMap[userInfo.partitionId]];
NIMChatroomEnterRequest *publicChatRoomRequest = [[NIMChatroomEnterRequest alloc] init];
publicChatRoomRequest.roomId = publicChatRoomId;
NSMutableDictionary *publicChatRoomExt = [NSMutableDictionary dictionaryWithObject:extModel.model2dictionary forKey:publicChatRoomId];
request.roomExt = [publicChatRoomExt toJSONString];
[[NIMSDK sharedSDK].chatroomManager enterChatroom:publicChatRoomRequest completion:^(NSError * _Nullable error, NIMChatroom * _Nullable chatroom, NIMChatroomMember * _Nullable me) {
NSLog(@"111");
}];
}
- (void)exitNIMRoom:(NSString *)roomId {
[[NIMSDK sharedSDK].chatroomManager exitChatroom:roomId completion:nil];
NSString *publicChatRoomId = [NSString stringWithFormat:@"%@",[ClientConfig shareConfig].configInfo.publicChatRoomIdMap[self.infoModel.partitionId]];
[[NIMSDK sharedSDK].chatroomManager exitChatroom:publicChatRoomId completion:nil];
}
///

View File

@@ -919,6 +919,16 @@
#pragma mark - XXX
- (void)userEnterRoom:(NIMChatroomNotificationContent *)content ext:(XPMessageRemoteExtModel *)extModel {
if(extModel.enterRoomEffects.length > 0){
NSString * title = [NSString stringWithFormat:YMLocalizedString(@"XPRoomAnimationView0"), content.source.nick];
if (self.enterEffectQueue.count ==0) {
[self playUserEnterRoomAnimation:title experLevelSeq:extModel.experLevelSeq effectPath:extModel.enterRoomEffects];
}
NSDictionary * dic= @{@"title":title, @"experLevelSeq":[NSString stringWithFormat:@"%ld", extModel.experLevelSeq], @"effectPath" : extModel.enterRoomEffects.length ? extModel.enterRoomEffects : @""};
[self.enterEffectQueue addObject:dic];
return;
}
if (extModel.experLevelSeq < 30) return;
NSString * title = [NSString stringWithFormat:YMLocalizedString(@"XPRoomAnimationView0"), content.source.nick];
if (self.enterEffectQueue.count ==0) {

View File

@@ -9,6 +9,10 @@
#import "RoomHostDelegate.h"
NS_ASSUME_NONNULL_BEGIN
@interface XPRoomSendTextView : UIView
- (instancetype)initWithDelegate:(id<RoomHostDelegate>)delegate;

View File

@@ -19,16 +19,19 @@
#import "XPMessageRemoteExtModel.h"
#import "UserInfoModel.h"
#import "RoomInfoModel.h"
#import "ClientConfig.h"
//
#define MAX_STARWORDS_LENGTH 300
@interface XPRoomSendTextView ()
///
@property (nonatomic,strong) UIStackView *stackView;
///
@property (nonatomic, strong) MSBaseTextField *editTextFiled;
@property (nonatomic, strong) UIView *bgEditTextFiled;
///
@property (nonatomic, strong) UIButton *sendButton;
///
@property(nonatomic,strong) UIButton *headlineBtn;
///
@property (nonatomic,copy) NSString *inputMessage;
///
@@ -47,7 +50,7 @@
}
- (instancetype)initWithDelegate:(id<RoomHostDelegate>)delegate {
self = [super initWithFrame:CGRectMake(0, KScreenHeight - 40, KScreenWidth, 40)];
self = [super initWithFrame:CGRectMake(0, KScreenHeight - 60, KScreenWidth, 60)];
if (self) {
self.delegate = delegate;
[self addNotification];
@@ -78,27 +81,36 @@
extModel.iosBubbleUrl = userInfo.iosBubbleUrl;
extModel.fromSayHelloChannel = userInfo.fromSayHelloChannel;
if([self.delegate getPublicScreenType]==1){
extModel.avatar = userInfo.avatar;
extModel.nick = userInfo.nick;
NSString * headwearUrl= userInfo.headwearEffect.length > 0 ? userInfo.headwearEffect : userInfo.headwearPic;
extModel.headwearUrl = headwearUrl;
}
NIMMessage * message = [[NIMMessage alloc] init];
message.text = self.inputMessage;
NSMutableDictionary *remoteExt = [NSMutableDictionary dictionaryWithObject:extModel.model2dictionary forKey:[AccountInfoStorage instance].getUid];
//@
NSMutableArray *nickArray = [NSMutableArray array];
NSMutableArray *uidArray = [NSMutableArray array];
for (int i = 0; i<self.atNames.count; i++) {
NSString *nick = self.atNames[i];
if ([self.editTextFiled.text containsString:nick]) {
if ([nickArray containsObject:nick]) {
continue;
} else {
[nickArray addObject:nick];
[uidArray addObject:self.atUids[i]];
if([self.delegate getPublicScreenType] == 0){
//@
NSMutableArray *nickArray = [NSMutableArray array];
NSMutableArray *uidArray = [NSMutableArray array];
for (int i = 0; i<self.atNames.count; i++) {
NSString *nick = self.atNames[i];
if ([self.editTextFiled.text containsString:nick]) {
if ([nickArray containsObject:nick]) {
continue;
} else {
[nickArray addObject:nick];
[uidArray addObject:self.atUids[i]];
}
}
}
id uidStr = [uidArray toJSONObject];
id nickStr = [nickArray toJSONObject];
[remoteExt setObject:uidStr forKey:@"atUids"];
[remoteExt setObject:nickStr forKey:@"atNames"];
}
id uidStr = [uidArray toJSONObject];
id nickStr = [nickArray toJSONObject];
[remoteExt setObject:uidStr forKey:@"atUids"];
[remoteExt setObject:nickStr forKey:@"atNames"];
message.remoteExt = remoteExt;
///
@@ -106,7 +118,8 @@
option.yidunEnabled = YES;
option.businessId = KeyWithType(keyType_YiDunBussinessId);
message.antiSpamOption = option;
NSString * sessionId = [NSString stringWithFormat:@"%ld", [self.delegate getRoomInfo].roomId];
NSString *publicChatRoomId = [NSString stringWithFormat:@"%@",[ClientConfig shareConfig].configInfo.publicChatRoomIdMap[userInfo.partitionId]];
NSString * sessionId = [self.delegate getPublicScreenType] == 0 ? [NSString stringWithFormat:@"%ld", [self.delegate getRoomInfo].roomId]:publicChatRoomId;
//
self.sendButton.enabled = NO;
NIMSession *session = [NIMSession session:sessionId type:NIMSessionTypeChatroom];
@@ -118,7 +131,10 @@
self.inputMessage = nil;
}];
}
-(void)showSendheadlineBtnAction{
[self.editTextFiled resignFirstResponder];
[[NSNotificationCenter defaultCenter]postNotificationName:@"kShowSendheadlineView" object:nil];
}
- (void)keyboardWillShow:(NSNotification *)notification {
[self.superview bringSubviewToFront:self];
NSDictionary *info = [notification userInfo];
@@ -132,7 +148,7 @@
if(self.superview){
[self mas_remakeConstraints:^(MASConstraintMaker *make) {
make.leading.trailing.equalTo(self.superview);
make.height.equalTo(@40);
make.height.equalTo(@60);
make.bottom.equalTo(self.superview).offset(-h);
}];
}
@@ -149,7 +165,7 @@
[UIView animateWithDuration:duration animations:^{
[self mas_remakeConstraints:^(MASConstraintMaker *make) {
make.bottom.leading.trailing.equalTo(self.superview);
make.height.equalTo(@40);
make.height.equalTo(@60);
}];
self.hidden = YES;
}];
@@ -215,7 +231,7 @@
[textView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.trailing.bottom.mas_equalTo(view);
make.height.mas_equalTo(40);
make.height.mas_equalTo(60);
}];
[textView.editTextFiled becomeFirstResponder];
if (nick) {
@@ -230,23 +246,42 @@
#pragma mark - Private Method
- (void)initSubViews {
self.backgroundColor = [DJDKMIMOMColor appBackgroundColor];
[self addSubview:self.stackView];
[self.stackView addArrangedSubview:self.editTextFiled];
[self.stackView addArrangedSubview:self.sendButton];
self.backgroundColor = UIColorFromRGB(0x260159);
[self addSubview:self.bgEditTextFiled];
[self.bgEditTextFiled addSubview:self.editTextFiled];
[self addSubview:self.sendButton];
[self addSubview:self.headlineBtn];
}
- (void)initSubViewConstraints {
[self.stackView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(self).offset(8);
make.trailing.mas_equalTo(self).offset(-5);
make.top.bottom.mas_equalTo(self);
[self.headlineBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(50);
make.height.mas_equalTo(45);
make.trailing.mas_equalTo(0);
make.centerY.equalTo(self);
}];
[self.sendButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(58);
make.height.mas_equalTo(29);
make.trailing.mas_equalTo(-53);
make.centerY.equalTo(self);
}];
[self.bgEditTextFiled mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(6);
make.height.mas_equalTo(36);
make.top.mas_equalTo(12);
make.trailing.equalTo(self.sendButton.mas_leading).mas_offset(-8);
}];
[self.editTextFiled mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(20);
make.trailing.mas_equalTo(-kGetScaleWidth(-20));
make.top.bottom.mas_equalTo(0);
}];
[self.sendButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(50);
make.top.bottom.mas_equalTo(self).inset(5);
}];
}
- (void)addNotification {
@@ -266,11 +301,11 @@
- (MSBaseTextField *)editTextFiled{
if (!_editTextFiled) {
_editTextFiled = [[MSBaseTextField alloc] init];
NSAttributedString * attribute = [[NSAttributedString alloc] initWithString:YMLocalizedString(@"XPRoomSendTextView0") attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:15], NSForegroundColorAttributeName : [DJDKMIMOMColor secondTextColor]}];
NSAttributedString * attribute = [[NSAttributedString alloc] initWithString:YMLocalizedString(@"XPRoomSendTextView0") attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:15], NSForegroundColorAttributeName : [UIColor colorWithWhite:1 alpha:0.5]}];
_editTextFiled.attributedPlaceholder = attribute;
_editTextFiled.borderStyle = UITextBorderStyleNone;
_editTextFiled.textColor = [DJDKMIMOMColor alertTitleColor];
_editTextFiled.font = [UIFont systemFontOfSize:15];
_editTextFiled.textColor = [UIColor whiteColor];
_editTextFiled.font = [UIFont systemFontOfSize:13 weight:UIFontWeightMedium];
[_editTextFiled setContentHuggingPriority:UILayoutPriorityDefaultLow forAxis:UILayoutConstraintAxisHorizontal];
}
@@ -280,28 +315,19 @@
if (!_sendButton) {
_sendButton = [[UIButton alloc] init];
[_sendButton setTitle:YMLocalizedString(@"XPRoomSendTextView1") forState:UIControlStateNormal];
_sendButton.titleLabel.textColor = [DJDKMIMOMColor mainTextColor];
_sendButton.titleLabel.font = [UIFont systemFontOfSize:15];
_sendButton.titleLabel.textColor = [UIColor whiteColor];
_sendButton.titleLabel.font = [UIFont systemFontOfSize:12 weight:UIFontWeightMedium];
[_sendButton setBackgroundImage:[UIImage imageWithColor:[DJDKMIMOMColor disableButtonColor] ]forState:UIControlStateDisabled];
[_sendButton setBackgroundImage:[UIImage gradientColorImageFromColors:@[[DJDKMIMOMColor confirmButtonGradientStartColor], [DJDKMIMOMColor confirmButtonGradientEndColor]] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(10, 10)] forState:UIControlStateNormal];
[_sendButton setBackgroundImage:[UIImage gradientColorImageFromColors:@[UIColorFromRGB(0x7E5AFF), UIColorFromRGB(0x52CAD3)] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(10, 10)] forState:UIControlStateNormal];
_sendButton.enabled = NO;
_sendButton.layer.cornerRadius = 5.0;
_sendButton.layer.cornerRadius = 7.5;
_sendButton.layer.masksToBounds = YES;
[_sendButton addTarget:self action:@selector(sendButtonDidClick:) forControlEvents:UIControlEventTouchUpInside];
}
return _sendButton;
}
- (UIStackView *)stackView {
if (!_stackView) {
_stackView = [[UIStackView alloc] init];
_stackView.axis = UILayoutConstraintAxisHorizontal;
_stackView.distribution = UIStackViewDistributionFill;
_stackView.alignment = UIStackViewAlignmentCenter;
_stackView.spacing = 10;
}
return _stackView;
}
- (NSMutableArray *)atNames {
if (!_atNames) {
@@ -316,5 +342,21 @@
}
return _atUids;
}
- (UIButton *)headlineBtn{
if(!_headlineBtn){
_headlineBtn = [UIButton new];
[_headlineBtn setBackgroundImage:[UIImage getLanguageImage:@"ms_room_message_send_headline_icon"] forState:UIControlStateNormal];
[_headlineBtn addTarget:self action:@selector(showSendheadlineBtnAction) forControlEvents:UIControlEventTouchUpInside];
}
return _headlineBtn;
}
- (UIView *)bgEditTextFiled{
if(!_bgEditTextFiled){
_bgEditTextFiled = [UIView new];
_bgEditTextFiled.backgroundColor = UIColorFromRGB(0x361661);
_bgEditTextFiled.layer.cornerRadius = 18;
_bgEditTextFiled.layer.masksToBounds = YES;
}
return _bgEditTextFiled;
}
@end

View File

@@ -0,0 +1,19 @@
//
// MsRoomMessagChatHallView.h
// YuMi
//
// Created by duoban on 2024/5/10.
//
#import <UIKit/UIKit.h>
#import "RoomHostDelegate.h"
#import "RoomGuestDelegate.h"
#import <JXCategoryView/JXCategoryListContainerView.h>
NS_ASSUME_NONNULL_BEGIN
@interface MsRoomMessagChatHallView : UIView<RoomGuestDelegate,JXCategoryListContentViewDelegate>
- (instancetype)initWithDelegate:(id<RoomHostDelegate>)delegate;
- (void)handleNIMImageMessage:(NIMMessage *)message;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,637 @@
//
// MsRoomMessagChatHallView.m
// YuMi
//
// Created by duoban on 2024/5/10.
//
#import "MsRoomMessagChatHallView.h"
///Third
#import <Masonry/Masonry.h>
#import <NIMSDK/NIMSDK.h>
///Tool
#import "DJDKMIMOMColor.h"
#import "YUMIMacroUitls.h"
#import "XPRoomMessageConstant.h"
#import "XPRoomMessageParser.h"
#import "AccountInfoStorage.h"
#import "XPRoomMiniManager.h"
#import "PLTimeUtil.h"
#import "ClientConfig.h"
#import <POP.h>
#import "ThemeColor+Room.h"
#import "NSArray+Safe.h"
#import "Api+Room.h"
#import "Api+Message.h"
#import "XPMessageRemoteExtModel.h"
///Model
#import "RoomInfoModel.h"
#import "AttachmentModel.h"
#import "RoomFaceSendInfoModel.h"
#import "XPMessageRemoteExtModel.h"
#import "RoomPKChooseUserModel.h"
#import "CandyTreeResultModel.h"
#import "RoomSailingPrizeModel.h"
#import "UserInfoModel.h"
#import "XPMessageInfoModel.h"
#import "GiftReceiveInfoModel.h"
#import "XPGiftStorage.h"
///View
#import "XPRoomMessageTableViewCell.h"
#import "XPRoomMessageHeaderView.h"
#import "View/XPRoomMessageHeaderView.h"
#import "PIRoomMessagePhotoAlbumCell.h"
#import "PIRoomMessageUnlockPhotoAlbumView.h"
#import "PIRoomPhotoAlbumItemModel.h"
#import "SDPhotoBrowser.h"
#import "XPSkillCardPlayerManager.h"
#import "MsRoomMessagChatHallCell.h"
#import "MSSessionPublicChatHallTopModel.h"
@interface MsRoomMessagChatHallView ()<UITableViewDelegate, UITableViewDataSource, XPRoomMessageTableViewCellDelegate, UIGestureRecognizerDelegate,PIRoomMessagePhotoAlbumCellDelegate,SDPhotoBrowserDelegate,PIRoomMessageUnlockPhotoAlbumViewDelegate>
///
@property (nonatomic,weak) id<RoomHostDelegate> hostDelegate;
///
@property (nonatomic,strong) UITableView *messageTableView;
///
@property (nonatomic,strong) UIView *headerView;
@property(nonatomic,strong) UILabel *titleView;
///messageView TODO:
@property (nonatomic,strong) XPRoomMessageParser *messageParser;
///
@property (nonatomic,assign) BOOL isMiniEnter;
///
@property (nonatomic,strong) NSMutableArray<XPMessageInfoModel *> *datasource;
@property(nonatomic,strong) PIRoomPhotoAlbumItemModel *lookUpModel;
///
@property (nonatomic,assign) BOOL isLarge;
@property(nonatomic,assign) BOOL isLoadHistoryMessage;
@end
@implementation MsRoomMessagChatHallView
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (instancetype)initWithDelegate:(id<RoomHostDelegate>)delegate {
self = [super init];
if (self) {
self.isLoadHistoryMessage = YES;
self.hostDelegate = delegate;
[self initSubViews];
[self initSubViewConstraints];
}
return self;
}
#pragma mark - JXCategoryListContentViewDelegate
- (UIView *)listView {
return self;
}
- (void)showUserCard:(NSInteger)uid{
[self.messageParser showUserCard:uid];
}
#pragma mark - Response
#pragma mark - Private Method
- (void)initSubViews {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(addCustomMessage:) name:@"message" object:nil];
[self addSubview:self.headerView];
[self.headerView addSubview:self.titleView];
[self addSubview:self.messageTableView];
[Api getPublicChatHallTopText:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
if(code == 200){
MSSessionPublicChatHallTopModel *model = [MSSessionPublicChatHallTopModel modelWithDictionary:data.data];
if(model != nil){
self.titleView.text = model.content;
[self.headerView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(self).offset(15);
make.top.trailing.mas_equalTo(self);
make.height.mas_greaterThanOrEqualTo(0);
}];
}else{
[self.headerView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(self).offset(15);
make.top.trailing.mas_equalTo(self);
make.height.mas_equalTo(0);
}];
}
}
}];
}
- (void)initSubViewConstraints {
[self.headerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(self).offset(15);
make.top.trailing.mas_equalTo(self);
make.height.mas_greaterThanOrEqualTo(0);
}];
[self.titleView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.trailing.top.bottom.equalTo(self.headerView).inset(10);
}];
[self.messageTableView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(self).offset(15);
make.bottom.trailing.mas_equalTo(self);
make.top.equalTo(self.headerView.mas_bottom).mas_offset(10);
}];
}
#pragma mark -
///
- (void)scrollToBottom:(BOOL)animated {
if(self.datasource.count > 0){
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSIndexPath *ip = [NSIndexPath indexPathForRow:self.datasource.count-1 inSection:0]; //
[self.messageTableView scrollToRowAtIndexPath:ip atScrollPosition:UITableViewScrollPositionBottom animated:animated]; //
});
}
}
///
- (BOOL)isCanDisplayMessage:(NIMMessage *)message {
NIMCustomObject *obj = (NIMCustomObject *)message.messageObject;
if (obj.attachment != nil && [obj.attachment isKindOfClass:[AttachmentModel class]]) {
AttachmentModel *attachment = (AttachmentModel *)obj.attachment;
return [[[self supportMessageDic] objectForKey:@(attachment.first)] containsObject:@(attachment.second)];
}
return NO;
}
- (NSDictionary *)supportMessageDic {
if (![ClientConfig shareConfig].canOpen) {
return @{};
}
return @{
@(CustomMessageType_Chat_Hall_Headlinesn):
[NSSet setWithObjects:
@(Custom_Message_Sub_Chat_Hall_Headlinesn),
nil]
};
}
-(void)addRoomMessage:(NIMMessage *)msg{
if (self.hostDelegate.getRoomInfo.isCloseScreen) {return;}
[self.datasource addObject:[self.messageParser parseMessageAttribute:msg]];
[self.messageTableView reloadData];
[self scrollToBottom:YES];
}
- (void)addCustomMessage:(NSNotification *)notification {
self.isMiniEnter = NO;
if (self.hostDelegate.getRoomInfo.isCloseScreen) {return;}
NIMMessage * message = notification.object;
[self addRoomMessage:message];
}
#pragma mark - RoomGuestDelegate
- (void)handleNIMCustomAttachment:(AttachmentModel *)attachment{
}
- (void)handleNIMCustomMessage:(NIMMessage *)message {
self.isMiniEnter = NO;
if ([self isCanDisplayMessage:message]) {
NIMCustomObject *obj = (NIMCustomObject *)message.messageObject;
AttachmentModel *attachment = (AttachmentModel *)obj.attachment;
if(attachment.first == CustomMessageType_Chat_Hall_Headlinesn && attachment.second == Custom_Message_Sub_Chat_Hall_Headlinesn){
MSSessionPublicChatHallTopModel *topModel = [MSSessionPublicChatHallTopModel modelWithDictionary:attachment.data];
if(topModel == nil){
self.titleView.text = topModel.content;
[self.headerView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(self).offset(15);
make.top.trailing.mas_equalTo(self);
make.height.mas_equalTo(0);
}];
}else{
self.titleView.text = topModel.content;
[self.headerView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(self).offset(15);
make.top.trailing.mas_equalTo(self);
make.height.mas_greaterThanOrEqualTo(0);
}];
}
}
[self addRoomMessage:message];
}
}
- (void)handleNIMImageMessage:(NIMMessage *)message {
self.isMiniEnter = NO;
if (self.hostDelegate.getRoomInfo.isCloseScreen) {return;}
PIRoomPhotoAlbumItemModel*model = [PIRoomPhotoAlbumItemModel new];
model.type = @"1";
model.status = 1;
NIMImageObject * imageObject = (NIMImageObject*)message.messageObject;
model.photoUrl = imageObject.url;
XPMessageInfoModel * messageInfo = [[XPMessageInfoModel alloc] init];
messageInfo.albumModel = model;
messageInfo.first = CustomMessageType_Room_Album;
XPMessageRemoteExtModel * extModel = [XPMessageRemoteExtModel modelWithJSON:message.remoteExt[message.from]];
messageInfo.charmUrl = extModel.charmUrl;
messageInfo.experUrl = extModel.experUrl;
messageInfo.bubbleImageUrl = extModel.iosBubbleUrl;
messageInfo.nameText = extModel.nick;
[self.datasource addObject:messageInfo];
[self.messageTableView reloadData];
[self scrollToBottom:YES];
}
- (void)handleNIMNotificationMessage:(NIMMessage *)message {
self.isMiniEnter = NO;
NIMNotificationObject *notiMsg = (NIMNotificationObject *)message.messageObject;
NIMChatroomNotificationContent *content = (NIMChatroomNotificationContent *)notiMsg.content;
RoomInfoModel * roomInfo = self.hostDelegate.getRoomInfo;
if (content.eventType == NIMChatroomEventTypeEnter) {
if (roomInfo.isCloseScreen) {
self.isLoadHistoryMessage = NO;
AttachmentModel *attachement = [[AttachmentModel alloc]init];
attachement.first = CustomMessageType_Update_RoomInfo;
attachement.second = Custom_Message_Sub_Update_RoomInfo_MessageState;
attachement.data = @{@"roomInfo":self.hostDelegate.getRoomInfo.model2dictionary};
NIMMessage *message = [[NIMMessage alloc]init];
NIMCustomObject *object = [[NIMCustomObject alloc] init];
object.attachment = attachement;
message.messageObject = object;
[self addRoomMessage:message];
return;
} else {
NIMChatroomNotificationMember *member = content.targets[0];
if (member.userId.integerValue == [AccountInfoStorage instance].getUid.integerValue) {
///
if(self.datasource.count > 0)
{
self.isLoadHistoryMessage = NO;
return;
}
[self handleFetchHistoryMessage:message];
} else {
self.isLoadHistoryMessage = NO;
}
}
}
}
- (void)handleFetchHistoryMessage:(NIMMessage *)message {
UserInfoModel *infoModel = self.hostDelegate.getUserInfo;
NSString *publicChatRoomId = [NSString stringWithFormat:@"%@",[ClientConfig shareConfig].configInfo.publicChatRoomIdMap[infoModel.partitionId]];
NSString *roomId = publicChatRoomId;
NIMHistoryMessageSearchOption *option = [[NIMHistoryMessageSearchOption alloc] init];
option.limit = 100;
option.startTime = 0;
option.order = NIMMessageSearchOrderAsc;
option.messageTypes = @[@(NIMMessageTypeText),@(NIMMessageTypeImage)];
[[NIMSDK sharedSDK].chatroomManager fetchMessageHistory:roomId option:option result:^(NSError * _Nullable error, NSArray<NIMMessage *> * _Nullable messages) {
if(error != nil){
self.isLoadHistoryMessage = NO;
}
//50
if (messages.count == 100) {
NIMHistoryMessageSearchOption *option = [[NIMHistoryMessageSearchOption alloc] init];
option.limit = 100;
option.order = NIMMessageSearchOrderDesc;
option.messageTypes = @[@(NIMMessageTypeText),@(NIMMessageTypeImage)];
[[NIMSDK sharedSDK].chatroomManager fetchMessageHistory:roomId option:option result:^(NSError * _Nullable error, NSArray<NIMMessage *> * _Nullable messages) {
if(error != nil){
self.isLoadHistoryMessage = NO;
}
dispatch_async(dispatch_get_main_queue(), ^{///线
if (self.datasource.count > kRoomMessageMaxLength) {
NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, kRoomMessageMaxLength/2)];
NSArray *needRemoveMsgArray = [self.datasource objectsAtIndexes:set];
[self.datasource removeObjectsInArray:needRemoveMsgArray];
}
//
for (NIMMessage *item in messages.reverseObjectEnumerator) {
[self dealWithHistoryDataWithMessage:item];
}
[self.messageTableView reloadData];
//
[self scrollToBottom:YES];
self.isLoadHistoryMessage = NO;
});
}];
return;
}
dispatch_async(dispatch_get_main_queue(), ^{///线
if (self.datasource.count > kRoomMessageMaxLength) {
NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, kRoomMessageMaxLength/2)];
NSArray *needRemoveMsgArray = [self.datasource objectsAtIndexes:set];
[self.datasource removeObjectsInArray:needRemoveMsgArray];
}
//
for (NIMMessage *item in messages) {
[self dealWithHistoryDataWithMessage:item];
}
[self.messageTableView reloadData];
//
[self scrollToBottom:YES];
self.isLoadHistoryMessage = NO;
});
}];
}
-(void)dealWithHistoryDataWithMessage:(NIMMessage *)item{
BOOL isHaveSave = NO;
if(item.messageType == NIMMessageTypeText){
isHaveSave = YES;
}else if(item.messageType == NIMMessageTypeImage){
isHaveSave = YES;
}else if(item.messageType == NIMMessageTypeCustom){
NIMCustomObject *obj = (NIMCustomObject *)item.messageObject;
if (obj.attachment != nil && [obj.attachment isKindOfClass:[AttachmentModel class]]) {
AttachmentModel *attachment = (AttachmentModel *)obj.attachment;
if (attachment.first == CustomMessageType_Chat_Hall_Headlinesn && attachment.second == Custom_Message_Sub_Chat_Hall_Headlinesn) {
isHaveSave = YES;
}
}
}
if(isHaveSave == NO)return;
if (item.messageType == NIMMessageTypeImage){
PIRoomPhotoAlbumItemModel*model = [PIRoomPhotoAlbumItemModel new];
model.type = @"1";
model.status = 1;
NIMImageObject * imageObject = (NIMImageObject*)item.messageObject;
model.photoUrl = imageObject.url;
XPMessageInfoModel * messageInfo = [[XPMessageInfoModel alloc] init];
messageInfo.albumModel = model;
messageInfo.first = CustomMessageType_Room_Album;
XPMessageRemoteExtModel * extModel = [XPMessageRemoteExtModel modelWithJSON:item.remoteExt[item.from]];
messageInfo.charmUrl = extModel.charmUrl;
messageInfo.experUrl = extModel.experUrl;
messageInfo.bubbleImageUrl = extModel.iosBubbleUrl;
messageInfo.nameText = extModel.nick;
[self.datasource addObject:messageInfo];
return;
}
[self.datasource addObject:[self.messageParser parseMessageAttribute:item]];
}
- (void)handleNIMTextMessage:(NIMMessage *)message {
self.isMiniEnter = NO;
if (self.hostDelegate.getRoomInfo.isCloseScreen) {return;}
[self addRoomMessage:message];
}
- (void)onRoomMiniEntered {
self.isMiniEnter = YES;
self.isLoadHistoryMessage = NO;
}
- (void)onRoomEntered {
self.headerView.backgroundColor = UIColorRGBAlpha(0x593722, 0.4);
}
- (void)onRoomUpdate {
///
if (self.hostDelegate.getRoomInfo.hadChangeRoomType) {
self.headerView.backgroundColor = UIColorRGBAlpha(0x593722, 0.4);
[self.messageTableView reloadData];
}
}
#pragma mark - UITableViewDelegate And UITableViewDataSource
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.datasource.count;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
XPMessageInfoModel* messageInfo = [self.datasource safeObjectAtIndex1:indexPath.row];
if(messageInfo.first == CustomMessageType_Room_Album){
return 186;
}else if(messageInfo.first == CustomMessageType_Chat_Hall_Headlinesn){
return 40;
}
return messageInfo.rowHeight;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
XPMessageInfoModel* attr = [self.datasource safeObjectAtIndex1:indexPath.row];
if(attr.first == CustomMessageType_Room_Album){
PIRoomMessagePhotoAlbumCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([PIRoomMessagePhotoAlbumCell class])];
cell.delegate = self;
cell.messageInfo = attr;
cell.roomType = self.hostDelegate.getRoomInfo.type;
return cell;
}else if (attr.first == CustomMessageType_Chat_Hall_Headlinesn){
MsRoomMessagChatHallCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([MsRoomMessagChatHallCell class]) forIndexPath:indexPath];
cell.model = attr;
return cell;
}
XPRoomMessageTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPRoomMessageTableViewCell class])];
cell.delegate = self;
cell.messageInfo = attr;
cell.roomType = self.hostDelegate.getRoomInfo.type;
return cell;
}
#pragma mark - XPRoomMessageTableViewCellDelegate
- (void)xPRoomMessageTableViewCellDidTapEmpty:(XPRoomMessageTableViewCell *)view {
if (self.hostDelegate.getRoomInfo.type == RoomType_MiniGame) {
self.isLarge = !self.isLarge;
CGFloat height = self.isLarge ? 200 : 80;
[self mas_updateConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(height);
}];
}
}
#pragma mark - PIRoomMessagePhotoAlbumCell
- (void)pIRoomMessagePhotoAlbumCellDelegateDidTapEmpty:(PIRoomMessagePhotoAlbumCell *)view{
if (self.hostDelegate.getRoomInfo.type == RoomType_MiniGame) {
self.isLarge = !self.isLarge;
CGFloat height = self.isLarge ? 200 : 80;
[self mas_updateConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(height);
}];
}
}
-(void)unlockAlbumHandleWithInfo:(PIRoomPhotoAlbumItemModel *_Nonnull)info{
PIRoomMessageUnlockPhotoAlbumView *albumView = [[PIRoomMessageUnlockPhotoAlbumView alloc]initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)];
albumView.albumModel = info;
albumView.delegate = self;
[TTPopup popupView:albumView style:TTPopupStyleAlert];
}
-(void)pIRoomMessagePhotoAlbumCell:(PIRoomMessagePhotoAlbumCell *_Nonnull)cell lookUpAlbumPhotoWithAlbumModel:(PIRoomPhotoAlbumItemModel *_Nonnull)albumModel;{
SDPhotoBrowser *browser = [[SDPhotoBrowser alloc]init];
browser.sourceImagesContainerView = cell;
browser.delegate = self;
browser.imageCount = 1;
browser.currentImageIndex = 0;
browser.isMe = NO;
self.lookUpModel = albumModel;
[browser show];
}
- (void)pIRoomMessagePhotoAlbumCell:(PIRoomMessagePhotoAlbumCell *)cell lookUpUserCardModel:(PIRoomPhotoAlbumItemModel *)albumModel{
[self.messageParser showUserCard:albumModel.uid.integerValue];
}
#pragma mark - PIRoomMessageUnlockPhotoAlbumViewDelegate
- (void)unlockRoomAlbumImageWithAlbumModel:(PIRoomPhotoAlbumItemModel *)albumModel{
[XNDJTDDLoadingTool showLoading];
[Api unlockRoomAlbumPhoto:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
[XNDJTDDLoadingTool hideHUD];
if(code == 200){
NSMutableDictionary *getData = [NSMutableDictionary dictionary];
[getData addEntriesFromDictionary:data.data];
AttachmentModel *attachment = [[AttachmentModel alloc] init];
attachment.first = CustomMessageType_Gift;
attachment.second = Custom_Message_Sub_Gift_Send;
NSDictionary *targetUsers = ((NSArray *)[getData objectForKey:@"targetUsers"]).firstObject;
[getData setObject:[targetUsers valueForKeyPath:@"uid"] forKey:@"targetUid"];
[getData setObject:[targetUsers valueForKeyPath:@"nick"] forKey:@"targetNick"];
[getData setObject:[targetUsers valueForKeyPath:@"avatar"] forKey:@"targetAvatar"];
[getData setObject:@(YES) forKey:@"isRoomAlbum"];
attachment.data = getData;
[self sendCustomMessage:attachment];
if(albumModel.ID != nil){
if(![[XPSkillCardPlayerManager shareInstance].photoIdList containsObject:albumModel.ID]){
if([XPSkillCardPlayerManager shareInstance].photoIdList == nil){
[XPSkillCardPlayerManager shareInstance].photoIdList = [NSMutableArray arrayWithArray:@[albumModel.ID]];
}else{
[[XPSkillCardPlayerManager shareInstance].photoIdList addObject:albumModel.ID];
}
}
[[NSNotificationCenter defaultCenter]postNotificationName:@"kGetgetUnlockRoomAlbumPhotoListNot" object:nil];
}
return;
}
[XNDJTDDLoadingTool showErrorWithMessage:msg];
} id:albumModel.ID roomUid:@(self.hostDelegate.getRoomInfo.uid).stringValue];
}
- (void)sendCustomMessage:(AttachmentModel *)attachment {
NSString *sessionID = [NSString stringWithFormat:@"%ld", [self.hostDelegate getRoomInfo].roomId];
NIMMessage *message = [[NIMMessage alloc]init];
NIMCustomObject *object = [[NIMCustomObject alloc] init];
object.attachment = attachment;
message.messageObject = object;
UserInfoModel *userInfo = [self.hostDelegate getUserInfo];
XPMessageRemoteExtModel *extModel = [[XPMessageRemoteExtModel alloc] init];
extModel.androidBubbleUrl = userInfo.androidBubbleUrl;
extModel.iosBubbleUrl = userInfo.iosBubbleUrl;
extModel.fromSayHelloChannel = userInfo.fromSayHelloChannel;
NSMutableDictionary *remoteExt = [NSMutableDictionary dictionaryWithObject:extModel.model2dictionary forKey:[NSString stringWithFormat:@"%ld", userInfo.uid]];
message.remoteExt = remoteExt;
NIMSessionType sessionType = NIMSessionTypeChatroom;
//
NIMSession *session = [NIMSession session:sessionID type:sessionType];
[[NIMSDK sharedSDK].chatManager sendMessage:message toSession:session error:nil];
}
#pragma mark - SDPhotoBrowserDelegate
- (NSURL *)photoBrowser:(SDPhotoBrowser *)browser highQualityImageURLForIndex:(NSInteger)index{
if(self.lookUpModel != nil){
return [[NSURL alloc]initWithString:self.lookUpModel.photoUrl];
}
return nil;
}
- (UIImage *)photoBrowser:(SDPhotoBrowser *)browser placeholderImageForIndex:(NSInteger)index {
return [UIImageConstant defalutBannerPlaceholder];
}
#pragma mark - Getters And Setters
- (UITableView *)messageTableView {
if (!_messageTableView) {
_messageTableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
_messageTableView.delegate = self;
_messageTableView.dataSource = self;
_messageTableView.tableFooterView = [UIView new];
_messageTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
_messageTableView.backgroundColor = [UIColor clearColor];
_messageTableView.showsVerticalScrollIndicator = NO;
_messageTableView.tag = 666;
if (@available(iOS 11.0, *)) {
_messageTableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}
[_messageTableView registerClass:[XPRoomMessageTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPRoomMessageTableViewCell class])];
[_messageTableView registerClass:[PIRoomMessagePhotoAlbumCell class] forCellReuseIdentifier:NSStringFromClass([PIRoomMessagePhotoAlbumCell class])];
[_messageTableView registerClass:[MsRoomMessagChatHallCell class] forCellReuseIdentifier:NSStringFromClass([MsRoomMessagChatHallCell class])];
}
return _messageTableView;
}
- (UIView *)headerView {
if (!_headerView) {
_headerView = [[UIView alloc] init];
_headerView.layer.cornerRadius = 7;
_headerView.layer.masksToBounds = YES;
}
return _headerView;
}
- (NSMutableArray<XPMessageInfoModel *> *)datasource {
if (!_datasource) {
_datasource = [NSMutableArray array];
}
return _datasource;
}
- (XPRoomMessageParser *)messageParser {
if (!_messageParser) {
_messageParser = [[XPRoomMessageParser alloc] init];
_messageParser.hostDelegate = self.hostDelegate;
}
return _messageParser;
}
- (UILabel *)titleView{
if(!_titleView){
_titleView = [UILabel labelInitWithText:@"" font:[UIFont systemFontOfSize:12 weight:UIFontWeightMedium] textColor:UIColorFromRGB(0xFDF4D5)];
_titleView.textAlignment = NSTextAlignmentCenter;
_titleView.numberOfLines = 0;
}
return _titleView;
}
@end

View File

@@ -0,0 +1,21 @@
//
// MsRoomMessageMainView.h
// YuMi
//
// Created by duoban on 2024/5/10.
//
#import <UIKit/UIKit.h>
#import "RoomHostDelegate.h"
#import "RoomGuestDelegate.h"
NS_ASSUME_NONNULL_BEGIN
@interface MsRoomMessageMainView : UIView<RoomGuestDelegate>
- (void)showUserCard:(NSInteger)uid;
- (instancetype)initWithDelegate:(id<RoomHostDelegate>)delegate;
- (void)handleNIMImageMessage:(NIMMessage *)message;
///0房间1.聊天大厅
@property(nonatomic,assign) NSInteger type;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,190 @@
//
// MsRoomMessageMainView.m
// YuMi
//
// Created by duoban on 2024/5/10.
//
#import <JXCategoryView/JXCategoryView.h>
#import <JXCategoryView/JXCategoryIndicatorBackgroundView.h>
#import <JXCategoryView/JXCategoryListContainerView.h>
#import "MsRoomMessageMainView.h"
#import "XPRoomMessageContainerView.h"
#import "MsRoomMessagChatHallView.h"
#import "ClientConfig.h"
#import "UserInfoModel.h"
#import <NIMSDK/NIMSDK.h>
@interface MsRoomMessageMainView()<JXCategoryViewDelegate, JXCategoryListContainerViewDelegate>
///
@property (nonatomic, strong) NSArray<NSString *> *titles;
///
@property (nonatomic, strong) JXCategoryTitleView *titleView;
///lineView
@property (nonatomic, strong) JXCategoryListContainerView *pi_containerView;
@property(nonatomic,strong) XPRoomMessageContainerView *roomView;
@property(nonatomic,strong) MsRoomMessagChatHallView *chatHallView;
///
@property (nonatomic,weak) id<RoomHostDelegate> hostDelegate;
@end
@implementation MsRoomMessageMainView
- (instancetype)initWithDelegate:(id<RoomHostDelegate>)delegate {
self = [super init];
if (self) {
self.hostDelegate = delegate;
[self installUI];
[self installConstraints];
}
return self;
}
-(void)installUI{
[self addSubview:self.titleView];
[self addSubview:self.pi_containerView];
}
-(void)installConstraints{
[self.titleView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.leading.mas_equalTo(kGetScaleWidth(0));
make.width.mas_equalTo(150);
make.height.mas_equalTo(kGetScaleWidth(30));
}];
[self.pi_containerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.trailing.bottom.mas_equalTo(self);
make.top.mas_equalTo(self.titleView.mas_bottom).offset(8);
}];
}
- (void)showUserCard:(NSInteger)uid{
[self.roomView showUserCard:uid];
}
#pragma mark - JXCategoryViewDelegate
- (NSInteger)numberOfListsInlistContainerView:(JXCategoryListContainerView *)listContainerView {
return self.titles.count;
}
- (id<JXCategoryListContentViewDelegate>)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index {
if (index == 0) {
return self.roomView;
} else {
return self.chatHallView;
}
}
#pragma mark - RoomGuestDelegate
- (void)handleNIMCustomMessage:(NIMMessage *)message {
UserInfoModel *infoModel = self.hostDelegate.getUserInfo;
NSString *publicChatRoomId = [NSString stringWithFormat:@"%@",[ClientConfig shareConfig].configInfo.publicChatRoomIdMap[infoModel.partitionId]];
if(![message.session.sessionId isEqualToString:publicChatRoomId]){
[self.roomView handleNIMCustomMessage:message];
return;
}
[self.chatHallView handleNIMCustomMessage:message];
}
- (void)handleNIMNotificationMessage:(NIMMessage *)message {
UserInfoModel *infoModel = self.hostDelegate.getUserInfo;
NSString *publicChatRoomId = [NSString stringWithFormat:@"%@",[ClientConfig shareConfig].configInfo.publicChatRoomIdMap[infoModel.partitionId]];
if(![message.session.sessionId isEqualToString:publicChatRoomId]){
[self.roomView handleNIMNotificationMessage:message];
return;
}
[self.chatHallView handleNIMNotificationMessage:message];
}
- (void)handleNIMTextMessage:(NIMMessage *)message {
UserInfoModel *infoModel = self.hostDelegate.getUserInfo;
NSString *publicChatRoomId = [NSString stringWithFormat:@"%@",[ClientConfig shareConfig].configInfo.publicChatRoomIdMap[infoModel.partitionId]];
if(![message.session.sessionId isEqualToString:publicChatRoomId]){
[self.roomView handleNIMTextMessage:message];
return;
}
[self.chatHallView handleNIMTextMessage:message];
}
- (void)handleNIMImageMessage:(NIMMessage *)message {
[self.chatHallView handleNIMImageMessage:message];
}
- (void)onRoomMiniEntered {
[self.roomView onRoomMiniEntered];
[self.chatHallView onRoomMiniEntered];
}
- (void)onRoomEntered {
[self.roomView onRoomEntered];
[self.chatHallView onRoomEntered];
}
- (void)onRoomUpdate {
[self.roomView onRoomUpdate];
[self.chatHallView onRoomUpdate];
}
#pragma mark -
- (NSInteger)type{
return self.titleView.selectedIndex;
}
- (JXCategoryTitleView *)titleView {
if (!_titleView) {
_titleView = [[JXCategoryTitleView alloc] init];
_titleView.delegate = self;
_titleView.titles = self.titles;
_titleView.backgroundColor = [UIColor clearColor];
_titleView.titleColor = UIColorFromRGB(0x4D415E);
_titleView.titleSelectedColor = UIColorFromRGB(0xFFFFFF);
_titleView.titleFont = [UIFont systemFontOfSize:13 weight:UIFontWeightMedium];
_titleView.titleSelectedFont = [UIFont systemFontOfSize:13 weight:UIFontWeightMedium];
_titleView.titleLabelAnchorPointStyle = JXCategoryTitleLabelAnchorPointStyleCenter;
_titleView.contentScrollViewClickTransitionAnimationEnabled = NO;
_titleView.defaultSelectedIndex = 0;
_titleView.cellSpacing = 20;
_titleView.cellWidthIncrement = 5;
_titleView.cellWidth = 40;
_titleView.listContainer = self.pi_containerView;
JXCategoryIndicatorImageView *lineView = [[JXCategoryIndicatorImageView alloc] init];
lineView.indicatorImageViewSize = CGSizeMake(8, 1.5);
lineView.verticalMargin = 0;
lineView.indicatorImageView.image = [UIImage imageWithColor:UIColorFromRGB(0x10ECD6) size:CGSizeMake(8, 1.5)];
lineView.indicatorImageView.layer.masksToBounds = YES;
lineView.indicatorImageView.layer.cornerRadius = 1.5/2;
_titleView.indicators = @[lineView];
}
return _titleView;
}
- (NSArray<NSString *> *)titles{
if(!_titles){
_titles = @[YMLocalizedString(@"XPMineMainGuildListVC1"),YMLocalizedString(@"MSSessionPublicChatHallVC0")];
}
return _titles;
}
- (JXCategoryListContainerView *)pi_containerView {
if (!_pi_containerView) {
_pi_containerView = [[JXCategoryListContainerView alloc] initWithType:JXCategoryListContainerType_ScrollView delegate:self];
_pi_containerView.defaultSelectedIndex = 0;
_pi_containerView.scrollView.tag = 1009;
}
return _pi_containerView;
}
- (XPRoomMessageContainerView *)roomView{
if(!_roomView){
_roomView = [[XPRoomMessageContainerView alloc] initWithDelegate:self.hostDelegate];
}
return _roomView;
}
- (MsRoomMessagChatHallView *)chatHallView{
if(!_chatHallView){
_chatHallView = [[MsRoomMessagChatHallView alloc]initWithDelegate:self.hostDelegate];
}
return _chatHallView;
}
@end

View File

@@ -53,13 +53,14 @@
#import "XCCurrentVCStackManager.h"
#import "XPTreasureFairyViewController.h"
#import "PIGeneralPublicScreenModel.h"
#import "MSSessionPublicChatHallTopModel.h"
@implementation XPRoomMessageParser
- (XPMessageInfoModel*)parseMessageAttribute:(NIMMessage *)message {
NIMMessageType messageType = message.messageType;
XPMessageInfoModel * messageInfo = [[XPMessageInfoModel alloc] init];
XPMessageInfoModel * messageInfo = [[XPMessageInfoModel alloc] init];
if([message.messageObject isKindOfClass:[NIMCustomObject class]] ){
NIMCustomObject *obj = (NIMCustomObject *)message.messageObject;
@@ -70,7 +71,7 @@
}
}
}
switch (messageType) {
case NIMMessageTypeText:
@@ -91,7 +92,7 @@
return model != nil ? model : [XPMessageInfoModel new];
break;
}
case NIMMessageTypeCustom:
case NIMMessageTypeCustom:
{
XPMessageInfoModel *model = [self makeCustomAttribute:message messageInfo:messageInfo];
return model != nil ? model : [XPMessageInfoModel new];
@@ -109,119 +110,125 @@
///
- (XPMessageInfoModel *)makeCustomAttribute:(NIMMessage *)message messageInfo:(XPMessageInfoModel*)messageInfo{
NIMCustomObject *obj = (NIMCustomObject *)message.messageObject;
AttachmentModel *attachment = (AttachmentModel *)obj.attachment;
XPMessageRemoteExtModel * model = [XPMessageRemoteExtModel modelWithJSON:message.remoteExt[message.from]];
messageInfo.bubbleImageUrl = [self parseMessageBubble:message];
int first = attachment.first;
if (first == CustomMessageType_Gift) {///
return [self createSendGiftAttribute:attachment sendInfo:model messageInfo:messageInfo];
} else if(first == CustomMessageType_AllMicroSend) {///
return [self createBatchMicroSendGiftAttribute:attachment sendInfo:model messageInfo:messageInfo];
} else if(first == CustomMessageType_Room_Tip) {////
return [self createShareOrAttentionRoomAttribute:attachment sendInfo:model uid:message.from messageInfo:messageInfo];
} else if(first == CustomMessageType_Kick_User || first == CustomMessageType_Queue) {
XPKickUserModel * kickModel = [XPKickUserModel modelWithJSON:attachment.data];
return [self createKickUserAttribute:attachment info:kickModel messageInfo:messageInfo];
} else if(first == CustomMessageType_Look_Love) {//
return [self createCandyTreeHighLevelAttribute:attachment messageInfo:messageInfo];
} else if(first == CustomMessageType_Arrange_Mic) {
return [self createArrangeMicAttribute:attachment messageInfo:messageInfo];
}else if(first == CustomMessageType_Update_RoomInfo) {
return [self createRoomInfoUpdateAttribute:attachment messageInfo:messageInfo];
} else if(first == CustomMessageType_Collection_Room) {
return [self createCollectRoomAttribute:attachment messageInfo:messageInfo];
} else if(first == CustomMessageType_RoomPlay_Dating) {
return [self createRoomDatingAttribute:attachment messageInfo:messageInfo];
} else if (first == CustomMessageType_Noble_VIP) {//VIP
NIMCustomObject *obj = (NIMCustomObject *)message.messageObject;
AttachmentModel *attachment = (AttachmentModel *)obj.attachment;
XPMessageRemoteExtModel * model = [XPMessageRemoteExtModel modelWithJSON:message.remoteExt[message.from]];
messageInfo.bubbleImageUrl = [self parseMessageBubble:message];
int first = attachment.first;
if (first == CustomMessageType_Gift) {///
return [self createSendGiftAttribute:attachment sendInfo:model messageInfo:messageInfo];
} else if(first == CustomMessageType_AllMicroSend) {///
return [self createBatchMicroSendGiftAttribute:attachment sendInfo:model messageInfo:messageInfo];
} else if(first == CustomMessageType_Room_Tip) {////
return [self createShareOrAttentionRoomAttribute:attachment sendInfo:model uid:message.from messageInfo:messageInfo];
} else if(first == CustomMessageType_Kick_User || first == CustomMessageType_Queue) {
XPKickUserModel * kickModel = [XPKickUserModel modelWithJSON:attachment.data];
return [self createKickUserAttribute:attachment info:kickModel messageInfo:messageInfo];
} else if(first == CustomMessageType_Look_Love) {//
return [self createCandyTreeHighLevelAttribute:attachment messageInfo:messageInfo];
} else if(first == CustomMessageType_Arrange_Mic) {
return [self createArrangeMicAttribute:attachment messageInfo:messageInfo];
}else if(first == CustomMessageType_Update_RoomInfo) {
return [self createRoomInfoUpdateAttribute:attachment messageInfo:messageInfo];
} else if(first == CustomMessageType_Collection_Room) {
return [self createCollectRoomAttribute:attachment messageInfo:messageInfo];
} else if(first == CustomMessageType_RoomPlay_Dating) {
return [self createRoomDatingAttribute:attachment messageInfo:messageInfo];
} else if (first == CustomMessageType_Noble_VIP) {//VIP
return [self createNobleLevelAttribute:attachment messageInfo:messageInfo];
} else if (first == CustomMessageType_Face) {//VIP
return [self createRoomFaceAttribute:attachment messageInfo:messageInfo];
return [self createRoomFaceAttribute:attachment messageInfo:messageInfo];
} else if (first == CustomMessageType_Tarot) {//
return [self createTarotAttribute:attachment messageInfo:messageInfo];
} else if (first == CustomMessageType_Anchor_FansTeam) {//
return [self createAnchorFansTeamAttribute:attachment messageInfo:messageInfo];
} else if(first == CustomMessageType_Hall_Super_Admin) {///
XPKickUserModel * kickModel = [XPKickUserModel modelWithJSON:attachment.data];
return [self createKickUserAttribute:attachment info:kickModel messageInfo:messageInfo];
} else if (first == CustomMessageType_Room_PK) {///PK
return [self createRoomPKAttribute:attachment messageInfo:messageInfo];
} else if (first == CustomMessageType_LuckyBag) {///
return [self createRoomLuckyBigPrizeAttribute:attachment messageInfo:messageInfo];
XPKickUserModel * kickModel = [XPKickUserModel modelWithJSON:attachment.data];
return [self createKickUserAttribute:attachment info:kickModel messageInfo:messageInfo];
} else if (first == CustomMessageType_Room_PK) {///PK
return [self createRoomPKAttribute:attachment messageInfo:messageInfo];
} else if (first == CustomMessageType_LuckyBag) {///
return [self createRoomLuckyBigPrizeAttribute:attachment messageInfo:messageInfo];
} else if(first == CustomMessageType_Gift_Compound) {///
return [self createRoomGiftCompoundAttribute:attachment messageInfo:messageInfo];
} else if(first == CustomMessageType_Room_Sailing) {///
return [self createRoomSailingAttribute:attachment messageInfo:messageInfo];
} else if(first == CustomMessageType_Room_Sailing) {///
return [self createRoomSailingAttribute:attachment messageInfo:messageInfo];
} else if (first == CustomMessageType_RedPacket && attachment.second == Custom_Message_Sub_OpenRedPacketSuccess) {
return [self createRedPacketAttribute:attachment messageInfo:messageInfo];
} else if (first == CustomMessageType_Treasure_Fairy) {
return [self createTreasureFairyAttribute:attachment messageInfo:messageInfo];
}else if (first == CustomMessageType_Room_Album) {
NSDictionary *userInfo = attachment.data[@"user"];
NSDictionary *userLevel = attachment.data[@"userLevel"];
if(userLevel != nil){
NSString *charmUrl = userLevel[@"charmUrl"];
NSString *experUrl = userLevel[@"experUrl"];
messageInfo.charmUrl = charmUrl;
messageInfo.experUrl = experUrl;
}
PIRoomPhotoAlbumItemModel *albumModel = [PIRoomPhotoAlbumItemModel modelWithDictionary:attachment.data[@"roomPhoto"]];
NSString * uid = [AccountInfoStorage instance].getUid;
NSString * nick = @"";
if(userInfo != nil){
return [self createTreasureFairyAttribute:attachment messageInfo:messageInfo];
}else if (first == CustomMessageType_Room_Album) {
NSDictionary *userInfo = attachment.data[@"user"];
NSDictionary *userLevel = attachment.data[@"userLevel"];
if(userLevel != nil){
NSString *charmUrl = userLevel[@"charmUrl"];
NSString *experUrl = userLevel[@"experUrl"];
messageInfo.charmUrl = charmUrl;
messageInfo.experUrl = experUrl;
}
PIRoomPhotoAlbumItemModel *albumModel = [PIRoomPhotoAlbumItemModel modelWithDictionary:attachment.data[@"roomPhoto"]];
NSString * uid = [AccountInfoStorage instance].getUid;
NSString * nick = @"";
if(userInfo != nil){
nick = [NSString stringWithFormat:@"%@:", userInfo[@"nick"]];
}
if ([message.from isEqualToString:uid]) {
nick = YMLocalizedString(@"XPRoomMessageParser0");
}
messageInfo.first = CustomMessageType_Room_Album;
messageInfo.nameText = nick;
messageInfo.albumModel = albumModel;
return messageInfo;
}else if(first == CustomMessageType_Guardian_Planet){
return [self createGuardianPlanetAttribute:attachment messageInfo:messageInfo];
}else if(first == CustomMessageType_General_Public_Screen){
return [self createGeneralPublicScreenAttribute:attachment messageInfo:messageInfo];
}else if(first == CustomMessageType_Super_Gift){
return [self createGeneralPublicScreenAttribute:attachment messageInfo:messageInfo];
}
}
if ([message.from isEqualToString:uid]) {
nick = YMLocalizedString(@"XPRoomMessageParser0");
}
messageInfo.first = CustomMessageType_Room_Album;
messageInfo.nameText = nick;
messageInfo.albumModel = albumModel;
return messageInfo;
}else if(first == CustomMessageType_Guardian_Planet){
return [self createGuardianPlanetAttribute:attachment messageInfo:messageInfo];
}else if(first == CustomMessageType_General_Public_Screen){
return [self createGeneralPublicScreenAttribute:attachment messageInfo:messageInfo];
}else if(first == CustomMessageType_Super_Gift){
return [self createGeneralPublicScreenAttribute:attachment messageInfo:messageInfo];
}else if(first == CustomMessageType_Chat_Hall_Headlinesn && attachment.second == Custom_Message_Sub_Chat_Hall_Headlinesn){
return [self createChatHallnAttribute:attachment messageInfo:messageInfo];
}
return nil;
return nil;
}
/// @param message
- (XPMessageInfoModel*)makeChatAttribute:(NIMMessage *)message messageInfo:(XPMessageInfoModel *)messageInfo{
NSString * uid = [AccountInfoStorage instance].getUid;
XPMessageRemoteExtModel * model = [XPMessageRemoteExtModel modelWithJSON:message.remoteExt[message.from]];
messageInfo.bubbleImageUrl = [self parseMessageBubble:message];
NSString * nick = [NSString stringWithFormat:@"%@:", ((NIMMessageChatroomExtension *)message.messageExt).roomNickname];
messageInfo.bubbleImageUrl = [self parseMessageBubble:message];
NSString *getNick = ((NIMMessageChatroomExtension *)message.messageExt).roomNickname;
if(getNick == nil && model.nick != nil){
getNick = model.nick;
}
NSString * nick = [NSString stringWithFormat:@"%@:", getNick];
if ([message.from isEqualToString:uid]) {
nick = YMLocalizedString(@"XPRoomMessageParser0");
}
NSMutableAttributedString * attribute = [[NSMutableAttributedString alloc] init];
if ([ClientConfig shareConfig].canOpen) {
///
[attribute appendAttributedString:[self createOfficalAndNewuserAttribute:model.defUser newUser:model.newUser fromSayHelloChannel:model.fromSayHelloChannel]];
if ([self isCurrentRoomSuperAdmin:message.from]) {
[attribute appendAttributedString:[self createLanguageImageAttribute:@"common_super_admin"]];
}
if (model.vipIcon) {//VIPicon
[attribute appendAttributedString:[self createUrlImageAttribute:model.vipIcon size:CGSizeMake(20, 20)]];
[attribute appendAttributedString:[self createSapceAttribute:2]];
}
if (model.experUrl) {
[attribute appendAttributedString:[self createUrlImageAttribute:model.experUrl]];
[attribute appendAttributedString:[self createSapceAttribute:2]];
}
if ([ClientConfig shareConfig].canOpen) {
///
[attribute appendAttributedString:[self createOfficalAndNewuserAttribute:model.defUser newUser:model.newUser fromSayHelloChannel:model.fromSayHelloChannel]];
if ([self isCurrentRoomSuperAdmin:message.from]) {
[attribute appendAttributedString:[self createLanguageImageAttribute:@"common_super_admin"]];
}
if (model.vipIcon) {//VIPicon
[attribute appendAttributedString:[self createUrlImageAttribute:model.vipIcon size:CGSizeMake(20, 20)]];
[attribute appendAttributedString:[self createSapceAttribute:2]];
}
if (model.experUrl) {
[attribute appendAttributedString:[self createUrlImageAttribute:model.experUrl]];
[attribute appendAttributedString:[self createSapceAttribute:2]];
}
if(model.isCustomWord == YES){
if (model.inRoomNameplatePic.length > 0){
[attribute appendAttributedString:[self createUrlImageAttribute:model.inRoomNameplatePic]];
[attribute appendAttributedString:[self createSapceAttribute:2]];
}
}else{
if (model.inRoomNameplatePic.length > 0 && model.inRoomNameplateWord.length > 0) { //
[attribute appendAttributedString:[self createNameplateAttibute:model.inRoomNameplateWord image:model.inRoomNameplatePic textFont:[UIFont systemFontOfSize:9]]];
@@ -231,10 +238,10 @@
[attribute appendAttributedString:[self createSapceAttribute:2]];
}
}
}
[attribute appendAttributedString:[self createTextAttribute:nick color:[DJDKMIMOMColor messageDefaultTextColor] font:kRoomMessageDefalutFont]];
}
[attribute appendAttributedString:[self createTextAttribute:nick color:[DJDKMIMOMColor messageDefaultTextColor] font:kRoomMessageDefalutFont]];
[attribute appendAttributedString:[self createSapceAttribute:2]];
id nickNameNifo = message.remoteExt[@"atNames"];
@@ -242,8 +249,8 @@
if (message.text) {
msgStr = [[NSMutableAttributedString alloc] initWithString:message.text];
[msgStr addAttribute:NSForegroundColorAttributeName
value:[DJDKMIMOMColor messageTextColor]
range:NSMakeRange(0, msgStr.length)];
value:[DJDKMIMOMColor messageTextColor]
range:NSMakeRange(0, msgStr.length)];
if ([nickNameNifo isKindOfClass:[NSArray class]]) {
for (NSString *nick in nickNameNifo) {
NSRange range = [message.text rangeOfString:nick];
@@ -255,7 +262,7 @@
[attribute appendAttributedString:msgStr];
}
[self attributeAddLongPressHihtLight:attribute uid:message.from nick:((NIMMessageChatroomExtension *)message.messageExt).roomNickname];
messageInfo.content = attribute;
messageInfo.content = attribute;
messageInfo.vipIcon = model.vipIcon;
return messageInfo;
}
@@ -263,62 +270,62 @@
/// tips
/// @param message
- (XPMessageInfoModel*)makeTipsAttribute:(NIMMessage *)message messageInfo:(XPMessageInfoModel *)messageInfo{
messageInfo.bubbleImageUrl = [self parseMessageBubble:message];
if ([message.localExt.allKeys containsObject:@"isRoomTopic"]) {
NSMutableAttributedString * attribute = [[NSMutableAttributedString alloc] init];
[attribute appendAttributedString: [self createTextAttribute:message.text color:[UIColor whiteColor] font:kRoomMessageDefalutFont]];
if ([[message.localExt objectForKey:@"isRoomTopic"] boolValue] == YES) {
[attribute yy_setTextHighlightRange:NSMakeRange(0, attribute.length) color:nil backgroundColor:nil tapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) {
RoomInfoModel * roomInfo = self.hostDelegate.getRoomInfo;
TTPopupService * config = [[TTPopupService alloc] init];
XPRoomTopicAlertView * alertView = [[XPRoomTopicAlertView alloc] init];
alertView.title = roomInfo.roomDesc;
alertView.message = roomInfo.introduction;
config.contentView = alertView;
[TTPopup popupWithConfig:config];
}];
}
messageInfo.content = attribute;
} else {
NSAttributedString * attribute = [self createTextAttribute:message.text color:UIColorFromRGB(0xFE5D7F) font:kRoomMessageDefalutFont];
messageInfo.content = attribute;
}
return messageInfo;
messageInfo.bubbleImageUrl = [self parseMessageBubble:message];
if ([message.localExt.allKeys containsObject:@"isRoomTopic"]) {
NSMutableAttributedString * attribute = [[NSMutableAttributedString alloc] init];
[attribute appendAttributedString: [self createTextAttribute:message.text color:[UIColor whiteColor] font:kRoomMessageDefalutFont]];
if ([[message.localExt objectForKey:@"isRoomTopic"] boolValue] == YES) {
[attribute yy_setTextHighlightRange:NSMakeRange(0, attribute.length) color:nil backgroundColor:nil tapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) {
RoomInfoModel * roomInfo = self.hostDelegate.getRoomInfo;
TTPopupService * config = [[TTPopupService alloc] init];
XPRoomTopicAlertView * alertView = [[XPRoomTopicAlertView alloc] init];
alertView.title = roomInfo.roomDesc;
alertView.message = roomInfo.introduction;
config.contentView = alertView;
[TTPopup popupWithConfig:config];
}];
}
messageInfo.content = attribute;
} else {
NSAttributedString * attribute = [self createTextAttribute:message.text color:UIColorFromRGB(0xFE5D7F) font:kRoomMessageDefalutFont];
messageInfo.content = attribute;
}
return messageInfo;
}
///
/// @param message
- (XPMessageInfoModel*)makeNotificationAttribute:(NIMMessage *)message messageInfo:(XPMessageInfoModel *)messageInfo{
messageInfo.bubbleImageUrl = [self parseMessageBubble:message];
messageInfo.bubbleImageUrl = [self parseMessageBubble:message];
NIMNotificationObject *notiMsg = (NIMNotificationObject *)message.messageObject;
NIMChatroomNotificationContent *content = (NIMChatroomNotificationContent *)notiMsg.content;
NIMChatroomNotificationMember *member = content.targets[0];
NIMMessageChatroomExtension * messageExt = (NIMMessageChatroomExtension *)message.messageExt;
NIMMessageChatroomExtension * messageExt = (NIMMessageChatroomExtension *)message.messageExt;
switch (content.eventType) {
case NIMChatroomEventTypeEnter:///
{
NSString* nick = member.nick.length > 0 ? member.nick : @"";
NSMutableAttributedString * attribute = [[NSMutableAttributedString alloc] init];
NSDictionary * dic = [(NSDictionary *)messageExt.roomExt.toJSONObject objectForKey:message.from];
XPMessageRemoteExtModel * extModel = [XPMessageRemoteExtModel modelWithDictionary:dic];
if ([ClientConfig shareConfig].canOpen) {
///
[attribute appendAttributedString:[self createOfficalAndNewuserAttribute:extModel.defUser newUser:extModel.newUser fromSayHelloChannel:extModel.fromSayHelloChannel]];
if ([self isCurrentRoomSuperAdmin:message.from]) {
[attribute appendAttributedString:[self createLanguageImageAttribute:@"common_super_admin"]];
[attribute appendAttributedString:[self createSapceAttribute:2]];
}
if (extModel.vipIcon.length > 0) {//VIPicon
NSDictionary * dic = [(NSDictionary *)messageExt.roomExt.toJSONObject objectForKey:message.from];
XPMessageRemoteExtModel * extModel = [XPMessageRemoteExtModel modelWithDictionary:dic];
if ([ClientConfig shareConfig].canOpen) {
///
[attribute appendAttributedString:[self createOfficalAndNewuserAttribute:extModel.defUser newUser:extModel.newUser fromSayHelloChannel:extModel.fromSayHelloChannel]];
if ([self isCurrentRoomSuperAdmin:message.from]) {
[attribute appendAttributedString:[self createLanguageImageAttribute:@"common_super_admin"]];
[attribute appendAttributedString:[self createSapceAttribute:2]];
}
if (extModel.vipIcon.length > 0) {//VIPicon
messageInfo.vipIcon = extModel.vipIcon;
[attribute appendAttributedString:[self createUrlImageAttribute:extModel.vipIcon size:CGSizeMake(20, 20)]];
[attribute appendAttributedString:[self createSapceAttribute:2]];
}
if (extModel.experUrl.length > 0) {//
[attribute appendAttributedString:[self createUrlImageAttribute:extModel.experUrl]];
[attribute appendAttributedString:[self createSapceAttribute:2]];
}
[attribute appendAttributedString:[self createUrlImageAttribute:extModel.vipIcon size:CGSizeMake(20, 20)]];
[attribute appendAttributedString:[self createSapceAttribute:2]];
}
if (extModel.experUrl.length > 0) {//
[attribute appendAttributedString:[self createUrlImageAttribute:extModel.experUrl]];
[attribute appendAttributedString:[self createSapceAttribute:2]];
}
if(extModel.isCustomWord == YES){
if (extModel.inRoomNameplatePic.length > 0) {
[attribute appendAttributedString:[self createUrlImageAttribute:extModel.inRoomNameplatePic]];
@@ -330,49 +337,49 @@
[attribute appendAttributedString:[self createSapceAttribute:2]];
}
}
[attribute appendAttributedString:[self createNickAtrribute:nick uid:message.from.integerValue]];
if (extModel.carName.length > 0) {
[attribute appendAttributedString:[self createTextAttribute:YMLocalizedString(@"XPRoomMessageParser1") color:[DJDKMIMOMColor messageTextColor] font:kRoomMessageDefalutFont]];
[attribute appendAttributedString:[self createTextAttribute:extModel.carName color:[DJDKMIMOMColor messageNickColor] font:kRoomMessageDefalutFont]];
[attribute appendAttributedString:[self createSapceAttribute:2]];
}
if (extModel.fromType > 0) {
if (extModel.fromType == UserEnterRoomFromType_Home_Recommend) {
[attribute appendAttributedString:[self createTextAttribute:YMLocalizedString(@"XPRoomMessageParser2") color:[DJDKMIMOMColor messageTextColor] font:kRoomMessageDefalutFont]];
} else if(extModel.fromType == UserEnterRoomFromType_Follow_User || extModel.fromType == UserEnterRoomFromType_New_User_Greet) {
[attribute appendAttributedString:[self createTextAttribute:YMLocalizedString(@"XPRoomMessageParser3") color:[DJDKMIMOMColor messageTextColor] font:kRoomMessageDefalutFont]];
[attribute appendAttributedString:[self createNickAtrribute:extModel.fromNick uid:extModel.fromUid.integerValue]];
} else if(extModel.fromType == UserEnterRoomFromType_Follow_Game_Detail) {
[attribute appendAttributedString:[self createTextAttribute:YMLocalizedString(@"XPRoomMessageParser4") color:[DJDKMIMOMColor messageTextColor] font:kRoomMessageDefalutFont]];
[attribute appendAttributedString:[self createNickAtrribute:extModel.fromNick uid:extModel.fromUid.integerValue]];
[attribute appendAttributedString:[self createTextAttribute:YMLocalizedString(@"XPRoomMessageParser5") color:[DJDKMIMOMColor messageTextColor] font:kRoomMessageDefalutFont]];
}
}
[attribute appendAttributedString:[self createTextAttribute:YMLocalizedString(@"XPRoomMessageParser6") color:[DJDKMIMOMColor messageTextColor] font:kRoomMessageDefalutFont]];
} else {
[attribute appendAttributedString:[self createNickAtrribute:nick uid:message.from.integerValue]];
[attribute appendAttributedString:[self createTextAttribute:YMLocalizedString(@"XPRoomMessageParser7") color:[DJDKMIMOMColor messageTextColor] font:kRoomMessageDefalutFont]];
}
messageInfo.content = attribute;
[attribute appendAttributedString:[self createNickAtrribute:nick uid:message.from.integerValue]];
if (extModel.carName.length > 0) {
[attribute appendAttributedString:[self createTextAttribute:YMLocalizedString(@"XPRoomMessageParser1") color:[DJDKMIMOMColor messageTextColor] font:kRoomMessageDefalutFont]];
[attribute appendAttributedString:[self createTextAttribute:extModel.carName color:[DJDKMIMOMColor messageNickColor] font:kRoomMessageDefalutFont]];
[attribute appendAttributedString:[self createSapceAttribute:2]];
}
if (extModel.fromType > 0) {
if (extModel.fromType == UserEnterRoomFromType_Home_Recommend) {
[attribute appendAttributedString:[self createTextAttribute:YMLocalizedString(@"XPRoomMessageParser2") color:[DJDKMIMOMColor messageTextColor] font:kRoomMessageDefalutFont]];
} else if(extModel.fromType == UserEnterRoomFromType_Follow_User || extModel.fromType == UserEnterRoomFromType_New_User_Greet) {
[attribute appendAttributedString:[self createTextAttribute:YMLocalizedString(@"XPRoomMessageParser3") color:[DJDKMIMOMColor messageTextColor] font:kRoomMessageDefalutFont]];
[attribute appendAttributedString:[self createNickAtrribute:extModel.fromNick uid:extModel.fromUid.integerValue]];
} else if(extModel.fromType == UserEnterRoomFromType_Follow_Game_Detail) {
[attribute appendAttributedString:[self createTextAttribute:YMLocalizedString(@"XPRoomMessageParser4") color:[DJDKMIMOMColor messageTextColor] font:kRoomMessageDefalutFont]];
[attribute appendAttributedString:[self createNickAtrribute:extModel.fromNick uid:extModel.fromUid.integerValue]];
[attribute appendAttributedString:[self createTextAttribute:YMLocalizedString(@"XPRoomMessageParser5") color:[DJDKMIMOMColor messageTextColor] font:kRoomMessageDefalutFont]];
}
}
[attribute appendAttributedString:[self createTextAttribute:YMLocalizedString(@"XPRoomMessageParser6") color:[DJDKMIMOMColor messageTextColor] font:kRoomMessageDefalutFont]];
} else {
[attribute appendAttributedString:[self createNickAtrribute:nick uid:message.from.integerValue]];
[attribute appendAttributedString:[self createTextAttribute:YMLocalizedString(@"XPRoomMessageParser7") color:[DJDKMIMOMColor messageTextColor] font:kRoomMessageDefalutFont]];
}
messageInfo.content = attribute;
return messageInfo;
}
break;
case NIMChatroomEventTypeInfoUpdated:{
NSMutableAttributedString * attribute = [[NSMutableAttributedString alloc] init];
if (self.hostDelegate.getRoomInfo.datingState == RoomDatingStateChangeType_Open) {
[attribute appendAttributedString:[self createTextAttribute:YMLocalizedString(@"XPRoomMessageParser8") color:[DJDKMIMOMColor messageDefaultTextColor] font:kRoomMessageDefalutFont]];
messageInfo.content = attribute;
return messageInfo;
}
}
break;
break;
case NIMChatroomEventTypeInfoUpdated:{
NSMutableAttributedString * attribute = [[NSMutableAttributedString alloc] init];
if (self.hostDelegate.getRoomInfo.datingState == RoomDatingStateChangeType_Open) {
[attribute appendAttributedString:[self createTextAttribute:YMLocalizedString(@"XPRoomMessageParser8") color:[DJDKMIMOMColor messageDefaultTextColor] font:kRoomMessageDefalutFont]];
messageInfo.content = attribute;
return messageInfo;
}
}
break;
default:
return nil;
}
return nil;
return nil;
}
#pragma mark -
- (XPMessageInfoModel *)createTreasureFairyAttribute:(AttachmentModel *)attachment messageInfo:(XPMessageInfoModel *)messageInfo{
@@ -439,11 +446,11 @@
@kWeakify(self);
[nickAttriibute yy_setTextHighlightRange:NSMakeRange(0, nickAttriibute.length) color:nil backgroundColor:nil tapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) {
@kStrongify(self);
XPTreasureFairyViewController * fairyVC = [[XPTreasureFairyViewController alloc] initWithdelegate:self.hostDelegate];
fairyVC.roomUid =[NSString stringWithFormat:@"%ld", self.hostDelegate.getRoomInfo.uid];
fairyVC.modalPresentationStyle = UIModalPresentationOverFullScreen;
[self.hostDelegate.getCurrentNav presentViewController:fairyVC animated:YES completion:nil];
fairyVC.modalPresentationStyle = UIModalPresentationOverFullScreen;
[self.hostDelegate.getCurrentNav presentViewController:fairyVC animated:YES completion:nil];
}];
[attribute appendAttributedString:nickAttriibute];
}
@@ -467,7 +474,22 @@
//
// return attribute;
//}
- (XPMessageInfoModel *)createChatHallnAttribute:(AttachmentModel *)attachment messageInfo:(XPMessageInfoModel *)messageInfo{
MSSessionPublicChatHallTopModel *topModel = [MSSessionPublicChatHallTopModel modelWithDictionary:attachment.data];
messageInfo.first = CustomMessageType_Chat_Hall_Headlinesn;
if (topModel.nick != nil){
NSString *text = [NSString stringWithFormat:YMLocalizedString(@"MSSessionContextHeadlinesView0"),topModel.nick];
NSMutableAttributedString *textAtt = [[NSMutableAttributedString alloc]initWithString:text attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:kRoomMessageDefalutFont],NSForegroundColorAttributeName:UIColorFromRGB(0xffffff)}];
[textAtt addAttributes:@{NSForegroundColorAttributeName:UIColorFromRGB(0xFE6859)} range:[text rangeOfString:topModel.nick]];
messageInfo.content = textAtt;
}
return messageInfo;
}
- (XPMessageInfoModel *)createGeneralPublicScreenAttribute:(AttachmentModel *)attachment messageInfo:(XPMessageInfoModel *)messageInfo{
PIGeneralPublicScreenModel *screenModel = [PIGeneralPublicScreenModel modelWithDictionary:attachment.data];

View File

@@ -0,0 +1,16 @@
//
// MsRoomMessagChatHallCell.h
// YuMi
//
// Created by duoban on 2024/5/10.
//
#import <UIKit/UIKit.h>
#import "XPMessageInfoModel.h"
NS_ASSUME_NONNULL_BEGIN
@interface MsRoomMessagChatHallCell : UITableViewCell
@property(nonatomic,strong) XPMessageInfoModel *model;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,58 @@
//
// MsRoomMessagChatHallCell.m
// YuMi
//
// Created by duoban on 2024/5/10.
//
#import "MsRoomMessagChatHallCell.h"
@interface MsRoomMessagChatHallCell()
@property(nonatomic,strong) UILabel *textView;
@end
@implementation MsRoomMessagChatHallCell
-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if(self){
[self installUI];
[self installConstraints];
}
return self;
}
-(void)installUI{
self.backgroundColor = [UIColor clearColor];
self.contentView.backgroundColor = [UIColor clearColor];
self.selectionStyle = UITableViewCellSelectionStyleNone;
[self.contentView addSubview:self.textView];
}
-(void)installConstraints{
[self.textView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.bottom.equalTo(self.contentView);
make.leading.trailing.equalTo(self.contentView).inset(kGetScaleWidth(10));
}];
}
- (void)setModel:(XPMessageInfoModel *)model{
_model = model;
_textView.attributedText = _model.content;
}
#pragma mark -
- (UILabel *)textView{
if(!_textView){
_textView = [UILabel new];
_textView.textAlignment = NSTextAlignmentCenter;
_textView.numberOfLines = 2;
}
return _textView;
}
- (void)awakeFromNib {
[super awakeFromNib];
// Initialization code
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
@end

View File

@@ -12,6 +12,8 @@ NS_ASSUME_NONNULL_BEGIN
@interface XPRoomMessageHeaderView : UIView
///头部的背景颜色
@property (nonatomic,strong) UIColor *bubbleColor;
@property (nonatomic,strong) UIColor *titleColor;
@property(nonatomic,copy) NSString *title;
@end
NS_ASSUME_NONNULL_END

View File

@@ -36,7 +36,14 @@
[self addSubview:self.bubbleView];
[self addSubview:self.titleLabel];
}
- (void)setTitle:(NSString *)title{
_title = title;
_titleLabel.text = title;
}
-(void)setTitleColor:(UIColor *)titleColor{
_titleColor = titleColor;
_titleLabel.textColor = _titleColor;
}
- (void)initSubViewConstraints {
/// 绿
NSString *title = YMLocalizedString(@"XPRoomMessageHeaderView0");

View File

@@ -8,9 +8,10 @@
#import <UIKit/UIKit.h>
#import "RoomHostDelegate.h"
#import "RoomGuestDelegate.h"
#import <JXCategoryView/JXCategoryListContainerView.h>
NS_ASSUME_NONNULL_BEGIN
@interface XPRoomMessageContainerView : UIView<RoomGuestDelegate>
@interface XPRoomMessageContainerView : UIView<RoomGuestDelegate,JXCategoryListContentViewDelegate>
- (void)showUserCard:(NSInteger)uid;
- (instancetype)initWithDelegate:(id<RoomHostDelegate>)delegate;

View File

@@ -96,6 +96,9 @@ NSString * const kRoomShowTopicKey = @"kRoomShowTopicKey";
}
return self;
}
- (UIView *)listView {
return self;
}
- (void)showUserCard:(NSInteger)uid{
[self.messageParser showUserCard:uid];
}

View File

@@ -41,6 +41,7 @@ NS_ASSUME_NONNULL_BEGIN
///屏蔽
-(void)requesstShieldingAction;
-(NSMutableArray *)getPlayList;;
-(NSInteger)getPublicScreenType;
@end
NS_ASSUME_NONNULL_END

View File

@@ -75,6 +75,7 @@
- (NSArray<NIMMessage *> *)getLocalCurrentRoomMessage {
return [self.messageArray copy];
}
- (void)resetLocalMessage {
[self.messageArray removeAllObjects];
}

View File

@@ -45,7 +45,7 @@
#import "XPRoomBackContainerView.h"
#import "XPRoomMenuContainerView.h"
#import "XPRoomQuickMessageContainView.h"
#import "XPRoomMessageContainerView.h"
#import "MsRoomMessageMainView.h"
#import "RoomHeaderView.h"
#import "SocialStageView.h"
#import "DatingStageView.h"
@@ -76,8 +76,9 @@
#import "XPRoomLittleGameContainerView.h"
#import "XPUserCardViewController.h"
#import "PIRoomEnterRedPacketView.h"
#import "MSSessionReleaseHeadlinesView.h"
#import "XPIAPRechargeViewController.h"
#import "XPCandyTreeInsufficientBalanceView.h"
UIKIT_EXTERN NSString * const kShieldingNotification;
UIKIT_EXTERN NSString * const kRoomGiftEffectUpdateNotificationKey;
UIKIT_EXTERN NSString * const kRoomMiniNotificationKey;
@@ -87,7 +88,7 @@ UIKIT_EXTERN NSString * const kFreeGiftCountdownNotification;
NSString * const kHadShowAnchorRoomTipKey = @"kHadShowAnchorRoomTipKey";//
NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//退
@interface XPRoomViewController ()<XPRoomProtocol, RoomHostDelegate, NIMChatroomManagerDelegate, NIMChatManagerDelegate, NIMConversationManagerDelegate, NIMLoginManagerDelegate, XPRoomSettingInputViewDelegate, AnchorRoomScrollViewDelegate, XPFirstRechargeViewDelegate,NIMBroadcastManagerDelegate,XPRoomLittleGameContainerViewDelegate,CountDownHelperDelegate,PIRoomEnterRedPacketViewDelegate,XPReceiveRedPacketViewDelegate>
@interface XPRoomViewController ()<XPRoomProtocol, RoomHostDelegate, NIMChatroomManagerDelegate, NIMChatManagerDelegate, NIMConversationManagerDelegate, NIMLoginManagerDelegate, XPRoomSettingInputViewDelegate, AnchorRoomScrollViewDelegate, XPFirstRechargeViewDelegate,NIMBroadcastManagerDelegate,XPRoomLittleGameContainerViewDelegate,CountDownHelperDelegate,PIRoomEnterRedPacketViewDelegate,XPReceiveRedPacketViewDelegate,MSSessionReleaseHeadlinesViewDelegate, XPCandyTreeInsufficientBalanceViewDelegate>
///
@property (nonatomic,strong) XPRoomBackContainerView *backContainerView;
@@ -98,7 +99,7 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出
///
@property (nonatomic,strong) StageView *stageView;
///
@property (nonatomic,strong) XPRoomMessageContainerView *messageContainerView;
@property (nonatomic,strong) MsRoomMessageMainView *messageContainerView;
///
@property (nonatomic, strong) XPRoomQuickMessageContainView *quickMessageContainerView;
///
@@ -155,6 +156,8 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出
@property(nonatomic,strong) PIRoomEnterRedPacketView *redPacketView;
///
@property(nonatomic,assign) BOOL isShowRedPacket;
@property(nonatomic,copy) NSString *releaseCoins;
@property(nonatomic,copy) NSString *myCoins;
@end
@implementation XPRoomViewController
@@ -312,6 +315,28 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(showRoomFirstChargeWindowFormNot:) name:kShowFirstRechargeView object:nil];
[XPSkillCardPlayerManager shareInstance].isInRoom = YES;
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(openRedPacketNotification:) name:@"kOpenRedPacketNotification" object:nil];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(showSendheadlineView) name:@"kShowSendheadlineView" object:nil];
}
-(void)showSendheadlineView{
MSSessionReleaseHeadlinesView *releaseView = [[MSSessionReleaseHeadlinesView alloc]initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)];
[releaseView loadDataForRoom];
releaseView.delegate = self;
[TTPopup popupView:releaseView style:TTPopupStyleAlert];
}
#pragma makr- MSSessionReleaseHeadlinesViewDelegate
-(void)releaseHeadlinesWithText:(NSString *)text{
XPCandyTreeInsufficientBalanceView *balanceView = [[XPCandyTreeInsufficientBalanceView alloc]initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)];
balanceView.delegate = self;
[self.view addSubview:balanceView];
}
#pragma mark- XPCandyTreeInsufficientBalanceViewDelegate
- (void)payBalanceAction{
XPIAPRechargeViewController * webVC =[[XPIAPRechargeViewController alloc] init];
webVC.type = @"4";
[self.navigationController pushViewController:webVC animated:YES];
}
///
-(void)openRedPacketNotification:(NSNotification *)not{
@@ -1408,11 +1433,14 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出
if (message.session.sessionType != NIMSessionTypeChatroom) {
continue;
}
//
if (![message.session.sessionId isEqualToString:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]]) {
continue;
NSString *publicChatRoomId = [NSString stringWithFormat:@"%@",[ClientConfig shareConfig].configInfo.publicChatRoomIdMap[self.userInfo.partitionId]];
if(![message.session.sessionId isEqualToString:publicChatRoomId]){
//
if (![message.session.sessionId isEqualToString:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]]) {
continue;
}
}
if (message.messageType == NIMMessageTypeNotification) {
NIMNotificationObject *notiMsg = (NIMNotificationObject *)message.messageObject;
@@ -1663,6 +1691,8 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出
[self.littleGameView handleNIMTextMessage:message];
} else if(message.messageType == NIMMessageTypeTip) {
[self.messageContainerView handleNIMTextMessage:message];
}else if(message.messageType == NIMMessageTypeImage){
[self.messageContainerView handleNIMImageMessage:message];
}
}
}
@@ -1729,8 +1759,12 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出
//
- (void)sendMessage:(NIMMessage *)message didCompleteWithError:(NSError *)error {
//
if (![message.session.sessionId isEqualToString:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]]) {
return;
NSString *publicChatRoomId = [NSString stringWithFormat:@"%@",[ClientConfig shareConfig].configInfo.publicChatRoomIdMap[self.userInfo.partitionId]];
if(![message.session.sessionId isEqualToString:publicChatRoomId]){
//
if (![message.session.sessionId isEqualToString:[NSString stringWithFormat:@"%ld", self.roomInfo.roomId]]) {
return;
}
}
if (message.yidunAntiSpamRes) {
@@ -2131,7 +2165,9 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出
[self enterRoomFail:0];
}
}
-(NSInteger)getPublicScreenType{
return self.messageContainerView.type;
}
#pragma mark - XPFirstRechargeViewDelegate
-(void)rechargeHandle{
@@ -2192,9 +2228,9 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出
return _roomHeaderView;
}
- (XPRoomMessageContainerView *)messageContainerView {
- (MsRoomMessageMainView *)messageContainerView {
if (!_messageContainerView) {
_messageContainerView = [[XPRoomMessageContainerView alloc] initWithDelegate:self];
_messageContainerView = [[MsRoomMessageMainView alloc] initWithDelegate:self];
}
return _messageContainerView;
}

View File

@@ -3799,5 +3799,8 @@ ineHeadView12" = "الحمل";
//MSRoomGameWebVC
"MSRoomGameWebVC0"="هل أنت متأكد أنك تريد الخروج من اللعبة؟";
"MSSessionPublicChatHallVC0"="غرفة الدردشة العامة";
"MSSessionPublicChatHallVC1"="~اريد تصدر العناوين";
"MSSessionReleaseHeadlinesView0"="(الرجاء إدخال المحتوي الذي تريد أن تتصدر عناوينهّ~ )يقتصر على 100 كلمة";
"MSSessionReleaseHeadlinesView1"=" تصدر العناوين%@";
"MSSessionContextHeadlinesView0"="~عزيزي%@، هيا تصدر العناوين ";