377 lines
14 KiB
Objective-C
377 lines
14 KiB
Objective-C
//
|
|
// MessageContentGuildView.m
|
|
// YUMI
|
|
//
|
|
// Created by YUMI on 2022/4/18.
|
|
//
|
|
|
|
#import "MessageContentGuildView.h"
|
|
///Third
|
|
#import <Masonry/Masonry.h>
|
|
|
|
#import "HttpRequestHelper.h"
|
|
#import "AttachMentModel.h"
|
|
#import "GuildMessageModel.h"
|
|
#import "NSObject+MJExtension.h"
|
|
#import "DJDKMIMOMColor.h"
|
|
#import "XNDJTDDLoadingTool.h"
|
|
#import "AccountInfoStorage.h"
|
|
#import "XPMineGuildViewController.h"
|
|
#import "XCCurrentVCStackManager.h"
|
|
#import "NSMutableDictionary+Saft.h"
|
|
#import "MessageGuildModel.h"
|
|
#define MESSAGE_MAX_WIDTH 230
|
|
#define MESSAGE_TEXT_PADDING 10
|
|
@interface MessageContentGuildView ()
|
|
///总的stackView
|
|
@property (nonatomic,strong) UIStackView *stackView;
|
|
///内容的view
|
|
@property (nonatomic,strong) UIView * contentView;
|
|
///显示标题
|
|
@property (nonatomic,strong) UILabel *titleLabel;
|
|
///显示内容
|
|
@property (nonatomic,strong) YYLabel *contentLabel;
|
|
///显示操作按钮
|
|
@property (nonatomic,strong) UIStackView *controlStackView;
|
|
///拒绝
|
|
@property (nonatomic,strong) UIButton *rejectButton;
|
|
///状态
|
|
@property (nonatomic,strong) UIButton *resultButton;
|
|
///同意
|
|
@property (nonatomic,strong) UIButton *agreeButton;
|
|
///消息的信息
|
|
@property (nonatomic,strong) GuildMessageModel *messageInfo;
|
|
@property (nonatomic,strong) AttachmentModel *attachment;
|
|
@property (nonatomic,strong) NIMMessage *message;
|
|
@end
|
|
|
|
@implementation MessageContentGuildView
|
|
|
|
- (void)initSubViews {
|
|
[super initSubViews];
|
|
[self addSubview:self.backView];
|
|
|
|
[self.backView addSubview:self.stackView];
|
|
|
|
[self.stackView addArrangedSubview:self.contentView];
|
|
[self.stackView addArrangedSubview:self.controlStackView];
|
|
|
|
[self.contentView addSubview:self.titleLabel];
|
|
[self.contentView addSubview:self.contentLabel];
|
|
///操作按钮
|
|
[self.controlStackView addArrangedSubview:self.rejectButton];
|
|
[self.controlStackView addArrangedSubview:self.resultButton];
|
|
[self.controlStackView addArrangedSubview:self.agreeButton];
|
|
}
|
|
|
|
- (void)initSubViewConstraints {
|
|
[super initSubViewConstraints];
|
|
[self.backView mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.width.mas_equalTo(MESSAGE_MAX_WIDTH);
|
|
make.bottom.mas_equalTo(self.stackView).offset(MESSAGE_TEXT_PADDING);
|
|
}];
|
|
|
|
[self.stackView mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.leading.trailing.top.mas_equalTo(self.backView);
|
|
}];
|
|
|
|
[self.contentView mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.width.mas_equalTo(MESSAGE_MAX_WIDTH);
|
|
make.height.mas_equalTo(100);
|
|
}];
|
|
|
|
[self.controlStackView mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.height.mas_equalTo(44);
|
|
}];
|
|
|
|
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.leading.trailing.mas_equalTo(self.contentView);
|
|
make.top.mas_equalTo(self.contentView).offset(20);
|
|
}];
|
|
|
|
[self.contentLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.trailing.leading.mas_equalTo(self.contentView).inset(MESSAGE_TEXT_PADDING);
|
|
make.top.mas_equalTo(self.titleLabel.mas_bottom).offset(MESSAGE_TEXT_PADDING);
|
|
make.bottom.mas_equalTo(self.contentView);
|
|
}];
|
|
|
|
CGFloat itemWidth = (MESSAGE_MAX_WIDTH - 15 * 2 - 10) / 2.0;
|
|
[self.agreeButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.width.mas_equalTo(itemWidth);
|
|
make.height.mas_equalTo(30);
|
|
}];
|
|
|
|
[self.rejectButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.size.mas_equalTo(self.agreeButton);
|
|
}];
|
|
|
|
[self.resultButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.height.mas_equalTo(30);
|
|
}];
|
|
}
|
|
|
|
- (void)render:(MessageGuildModel *)model {
|
|
self.message = model.message;
|
|
NIMCustomObject *obj = (NIMCustomObject *)model.message.messageObject;
|
|
AttachmentModel * attach = (AttachmentModel *)obj.attachment;
|
|
self.attachment = attach;
|
|
GuildMessageModel * info;
|
|
if (model.message.localExt) {
|
|
info = [GuildMessageModel modelWithDictionary:model.message.localExt];
|
|
} else {
|
|
info = [GuildMessageModel modelWithDictionary:attach.data];
|
|
}
|
|
self.messageInfo = info;
|
|
self.titleLabel.text = info.layout.title.content;
|
|
self.titleLabel.font = [UIFont systemFontOfSize:info.layout.title.fontSize weight:info.layout.title.fontBold?UIFontWeightBold:UIFontWeightRegular];
|
|
NSMutableAttributedString *attr = [[NSMutableAttributedString alloc]init];
|
|
GuildMessageLayoutModel *layout = info.layout;
|
|
for (GuildMessageLayoutInfoModel *params in layout.contents) {
|
|
if (params.content.length > 0) {
|
|
if ([params.content containsString:@"/r/n"]) {
|
|
params.content = @"\r\n";
|
|
}
|
|
NSMutableAttributedString *subAttr = [[NSMutableAttributedString alloc]initWithString:params.content];
|
|
if (params.fontSize > 0) {
|
|
[subAttr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:params.fontSize weight:params.fontBold?UIFontWeightBold:UIFontWeightRegular] range:NSMakeRange(0, subAttr.length)];
|
|
}
|
|
|
|
if (params.fontColor.length > 0) {
|
|
[subAttr addAttribute:NSForegroundColorAttributeName value:[DJDKMIMOMColor colorWithHexString:params.fontColor] range:NSMakeRange(0, subAttr.length)];
|
|
}
|
|
[attr appendAttributedString:subAttr];
|
|
}
|
|
}
|
|
attr.yy_lineSpacing = 5;
|
|
self.contentLabel.attributedText = attr;
|
|
self.contentLabel.textAlignment = NSTextAlignmentCenter;
|
|
CGSize maxSize = CGSizeMake(MESSAGE_MAX_WIDTH - MESSAGE_TEXT_PADDING * 2, CGFLOAT_MAX);
|
|
YYTextLayout * contentLayout = [YYTextLayout layoutWithContainerSize:maxSize text:attr];
|
|
CGFloat contentHeight = contentLayout.textBoundingSize.height + 5;
|
|
///顶部的距离 20 title的高度15 title到content的高度15
|
|
[self.contentView mas_updateConstraints:^(MASConstraintMaker *make) {
|
|
make.height.mas_equalTo(contentHeight + 20+ 15 + 15);
|
|
}];
|
|
BOOL isCommonNotice ;
|
|
if(attach.first == CustomMessageType_Hall){
|
|
isCommonNotice = (attach.second == Custom_Message_Sub_Hall_Notice || attach.second == Custom_Message_Sub_Hall_Become_Hall);
|
|
}else{
|
|
isCommonNotice = !(attach.second == Custom_Message_Sub_New_Hall_Invite || attach.second == Custom_Message_Sub_New_Hall_Apply);
|
|
}
|
|
if (!isCommonNotice) {
|
|
self.controlStackView.hidden = NO;
|
|
if (info.msgStatus == 0) {
|
|
info.msgStatus = MessageGuildState_Untreated;
|
|
}
|
|
[self handletResultControll:info second:attach.second];
|
|
} else {
|
|
self.controlStackView.hidden = YES;
|
|
[self.rejectButton setAttributedTitle:nil forState:UIControlStateNormal];
|
|
}
|
|
}
|
|
|
|
- (void)handletResultControll:(GuildMessageModel *)info second:(Custom_Noti_Sub_HALL)second {
|
|
self.rejectButton.hidden = YES;
|
|
self.agreeButton.hidden = YES;
|
|
self.resultButton.hidden= YES;
|
|
MessageGuildState state = info.msgStatus;
|
|
NSMutableAttributedString *attr = [[NSMutableAttributedString alloc]init];
|
|
switch (state) {
|
|
case MessageGuildState_Agree:
|
|
{
|
|
self.resultButton.hidden = NO;
|
|
[attr appendAttributedString:[self creatResultAttribute:YMLocalizedString(@"MessageContentGuildView0") textColor:UIColorRGBAlpha(0x09BB07, 0.6)]];
|
|
}
|
|
break;
|
|
case MessageGuildState_Reject:
|
|
{
|
|
self.resultButton.hidden= NO;
|
|
[attr appendAttributedString:[self creatResultAttribute:YMLocalizedString(@"MessageContentGuildView1") textColor:UIColorRGBAlpha(0xFF3852, 0.6)]];
|
|
}
|
|
break;
|
|
case MessageGuildState_OutData:
|
|
{
|
|
self.resultButton.hidden= NO;
|
|
[attr appendAttributedString:[self creatResultAttribute:YMLocalizedString(@"MessageContentGuildView2") textColor:UIColorRGBAlpha(0x333333, 0.6)]];
|
|
}
|
|
break;
|
|
case MessageGuildState_Processed:
|
|
{
|
|
self.resultButton.hidden= NO;
|
|
[attr appendAttributedString:[self creatResultAttribute:YMLocalizedString(@"MessageContentGuildView3") textColor:UIColorFromRGB(0xC6C6E9)]];
|
|
}
|
|
break;
|
|
case MessageGuildState_Untreated:
|
|
{
|
|
self.agreeButton.hidden = NO;
|
|
self.rejectButton.hidden = second == Custom_Message_Sub_Hall_Apply_Exit;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
if (attr.length > 0) {
|
|
[self.resultButton setAttributedTitle:attr forState:UIControlStateNormal];
|
|
}
|
|
}
|
|
|
|
- (NSAttributedString *)creatResultAttribute:(NSString *)message textColor:(UIColor *)textColor {
|
|
if (message.length <=0) {
|
|
message = @"";
|
|
}
|
|
NSMutableAttributedString *attr = [[NSMutableAttributedString alloc]initWithString:message];
|
|
[attr addAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:14],NSForegroundColorAttributeName:textColor} range:NSMakeRange(0, attr.length)];
|
|
return attr;
|
|
}
|
|
|
|
|
|
#pragma mark - Event Response
|
|
- (void)controllButtonAction:(UIButton *)sender {
|
|
NSRange recordRange = [self.messageInfo.url rangeOfString:@"recordId="];
|
|
NSString *recordId;
|
|
if (!NSEqualRanges(recordRange, NSMakeRange(NSNotFound, 0))) {
|
|
if (self.messageInfo.url.length > recordRange.location+recordRange.length) {
|
|
recordId = [self.messageInfo.url substringFromIndex:recordRange.location+recordRange.length];
|
|
}
|
|
}
|
|
if (recordId.length > 0) {
|
|
NSMutableDictionary * params = [NSMutableDictionary dictionary];
|
|
[params safeSetObject:recordId forKey:@"recordId"];
|
|
[params safeSetObject:[AccountInfoStorage instance].getUid forKey:@"uid"];
|
|
///0拒绝 1同意
|
|
NSString * type = sender.tag == 1000? @"0" : @"1";
|
|
if (self.attachment.second == Custom_Message_Sub_Hall_Apply_Join || self.attachment.second == Custom_Message_Sub_Hall_Manager_Invite || self.attachment.second == Custom_Message_Sub_Hall_Apply_Exit || self.attachment.second == Custom_Message_Sub_New_Hall_Invite || self.attachment.second == Custom_Message_Sub_New_Hall_Apply) {
|
|
if (self.attachment.second != Custom_Message_Sub_Hall_Apply_Exit) {
|
|
[params setObject:type forKey:@"type"];
|
|
}
|
|
[XNDJTDDLoadingTool showLoading];
|
|
[HttpRequestHelper POST:self.messageInfo.url params:params success:^(BaseModel * _Nonnull data) {
|
|
[XNDJTDDLoadingTool hideHUD];
|
|
NSString *code = [NSString stringWithFormat:@"%@", data.data[@"code"]];
|
|
BOOL isExpired = [code isEqualToString:@"90121"];
|
|
BOOL isHandled = [code isEqualToString:@"90122"];
|
|
MessageGuildState state = MessageGuildState_Untreated;
|
|
if (isExpired) {
|
|
state = MessageGuildState_OutData;
|
|
} else if(isHandled) {
|
|
state = MessageGuildState_Processed;
|
|
} else {
|
|
state = sender.tag == 1000 ? MessageGuildState_Reject : MessageGuildState_Agree;
|
|
}
|
|
self.messageInfo.msgStatus = state;
|
|
self.message.localExt = [self.messageInfo model2dictionary];
|
|
[[NIMSDK sharedSDK].conversationManager updateMessage:self.message forSession:self.message.session completion:^(NSError * _Nullable error) {
|
|
if (self.delegate && [self.delegate respondsToSelector:@selector(updateMessageSuccess:)]) {
|
|
[self.delegate updateMessageSuccess:self.message];
|
|
}
|
|
}];
|
|
} failure:^(NSInteger resCode, NSString * _Nonnull message) {
|
|
[XNDJTDDLoadingTool hideHUD];
|
|
[XNDJTDDLoadingTool showErrorWithMessage:message];
|
|
}];
|
|
}
|
|
}
|
|
}
|
|
|
|
- (void)contentLableTapRecognizer {
|
|
if (self.messageInfo.routerType == 22 && self.messageInfo.routerValue > 0) {
|
|
XPMineGuildViewController * guildVC= [[XPMineGuildViewController alloc] init];
|
|
guildVC.ownerUid = [AccountInfoStorage instance].getUid;
|
|
guildVC.guildId = [NSString stringWithFormat:@"%ld", self.messageInfo.routerValue];
|
|
[[XCCurrentVCStackManager shareManager].getCurrentVC.navigationController pushViewController:guildVC animated:YES];
|
|
}
|
|
}
|
|
#pragma mark - Getters And Setters
|
|
- (UIStackView *)stackView {
|
|
if (!_stackView) {
|
|
_stackView = [[UIStackView alloc] init];
|
|
_stackView.axis = UILayoutConstraintAxisVertical;
|
|
_stackView.distribution = UIStackViewDistributionFill;
|
|
_stackView.alignment = UIStackViewAlignmentCenter;
|
|
_stackView.spacing = 10;
|
|
}
|
|
return _stackView;
|
|
}
|
|
|
|
- (UIView *)contentView {
|
|
if (!_contentView) {
|
|
_contentView = [[UIView alloc] init];
|
|
_contentView.backgroundColor = [UIColor clearColor];
|
|
}
|
|
return _contentView;
|
|
}
|
|
|
|
- (UILabel *)titleLabel {
|
|
if (!_titleLabel) {
|
|
_titleLabel = [[UILabel alloc] init];
|
|
_titleLabel.textAlignment= NSTextAlignmentCenter;
|
|
_titleLabel.font = [UIFont systemFontOfSize:14];
|
|
_titleLabel.textColor = [DJDKMIMOMColor mainTextColor];
|
|
[_titleLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
|
|
}
|
|
return _titleLabel;
|
|
}
|
|
|
|
- (YYLabel *)contentLabel {
|
|
if (!_contentLabel) {
|
|
_contentLabel = [[YYLabel alloc] init];
|
|
_contentLabel.numberOfLines = 0;
|
|
UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(contentLableTapRecognizer)];
|
|
[_contentLabel addGestureRecognizer:tap];
|
|
}
|
|
return _contentLabel;
|
|
}
|
|
|
|
- (UIStackView *)controlStackView {
|
|
if (!_controlStackView) {
|
|
_controlStackView = [[UIStackView alloc] init];
|
|
_controlStackView.axis = UILayoutConstraintAxisHorizontal;
|
|
_controlStackView.distribution = UIStackViewDistributionFill;
|
|
_controlStackView.alignment = UIStackViewAlignmentCenter;
|
|
_controlStackView.spacing = 10;
|
|
}
|
|
return _controlStackView;
|
|
}
|
|
|
|
- (UIButton *)rejectButton {
|
|
if (!_rejectButton) {
|
|
_rejectButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
|
[_rejectButton setTitle:YMLocalizedString(@"MessageContentGuildView4") forState:UIControlStateNormal];
|
|
_rejectButton.titleLabel.font = [UIFont systemFontOfSize:13];
|
|
[_rejectButton setTitleColor:[DJDKMIMOMColor appMainColor] forState:UIControlStateNormal];
|
|
_rejectButton.layer.masksToBounds = YES;
|
|
_rejectButton.layer.cornerRadius = 15;
|
|
_rejectButton.layer.borderColor = [DJDKMIMOMColor appMainColor].CGColor;
|
|
_rejectButton.layer.borderWidth = 1;
|
|
[_rejectButton setBackgroundColor:[DJDKMIMOMColor appCellBackgroundColor]];
|
|
_rejectButton.tag = 1000;
|
|
[_rejectButton addTarget:self action:@selector(controllButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
|
}
|
|
return _rejectButton;
|
|
}
|
|
|
|
- (UIButton *)resultButton {
|
|
if (!_resultButton) {
|
|
_resultButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
|
}
|
|
return _resultButton;
|
|
}
|
|
|
|
- (UIButton *)agreeButton {
|
|
if (!_agreeButton) {
|
|
_agreeButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
|
[_agreeButton setTitle:YMLocalizedString(@"MessageContentGuildView5") forState:UIControlStateNormal];
|
|
_agreeButton.titleLabel.font = [UIFont systemFontOfSize:13];
|
|
[_agreeButton setTitleColor:[DJDKMIMOMColor mainTextColor] forState:UIControlStateNormal];
|
|
_agreeButton.layer.masksToBounds = YES;
|
|
_agreeButton.layer.cornerRadius = 15;
|
|
[_agreeButton setBackgroundColor:[DJDKMIMOMColor appMainColor]];
|
|
_agreeButton.tag = 1001;
|
|
[_agreeButton addTarget:self action:@selector(controllButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
|
}
|
|
return _agreeButton;
|
|
}
|
|
|
|
|
|
@end
|