Files
peko-ios/YuMi/Modules/YMRoom/View/MessageContainerView/Model/XPMessageItem.m

100 lines
2.4 KiB
Objective-C

//
// XPMessageItem.m
// YUMI
//
// Created by YUMI on 2024/12/19.
//
#import "XPMessageItem.h"
@implementation XPMessageItem
- (instancetype)initWithMessageModel:(XPMessageInfoModel *)model
uniqueIdentifier:(NSString *)identifier {
self = [super init];
if (self) {
_messageModel = model;
_uniqueIdentifier = identifier;
_timestamp = [[NSDate date] timeIntervalSince1970];
_displayType = 1; // 默认显示在所有类型中
}
return self;
}
- (BOOL)isChatMessage {
if (!self.messageModel) return NO;
// 文本消息 (NIMMessageTypeText = 0)
if (self.messageModel.first == 0) {
return YES;
}
// 表情消息 (CustomMessageType_Face = 9)
if (self.messageModel.first == 9) {
return YES;
}
return NO;
}
- (BOOL)isGiftMessage {
if (!self.messageModel) return NO;
// 礼物相关消息类型
switch (self.messageModel.first) {
case 3: // CustomMessageType_Gift - 单人送礼物
case 63: // CustomMessageType_RoomBoom - 房间爆炸
case 26: // CustomMessageType_Candy_Tree - 糖果树
case 12: // CustomMessageType_AllMicroSend - 全麦送礼物
return YES;
default:
return NO;
}
}
- (BOOL)shouldDisplayInType:(NSInteger)displayType {
switch (displayType) {
case 1: // 所有消息
return YES;
case 2: // 聊天消息
return [self isChatMessage];
case 3: // 礼物消息
return [self isGiftMessage];
default:
return YES;
}
}
#pragma mark - NSCopying
- (id)copyWithZone:(NSZone *)zone {
XPMessageItem *copy = [[XPMessageItem alloc] init];
copy.messageModel = self.messageModel;
copy.uniqueIdentifier = self.uniqueIdentifier;
copy.timestamp = self.timestamp;
copy.displayType = self.displayType;
return copy;
}
#pragma mark - NSObject
- (BOOL)isEqual:(id)object {
if (![object isKindOfClass:[XPMessageItem class]]) {
return NO;
}
XPMessageItem *other = (XPMessageItem *)object;
return [self.uniqueIdentifier isEqualToString:other.uniqueIdentifier];
}
- (NSUInteger)hash {
return [self.uniqueIdentifier hash];
}
- (NSString *)description {
return [NSString stringWithFormat:@"<XPMessageItem: %p, identifier: %@, type: %ld, timestamp: %.0f>",
self, self.uniqueIdentifier, (long)self.displayType, self.timestamp];
}
@end