You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

338 lines
13 KiB

//
// XHMessage.m
// MessageDisplayExample
//
// Created by HUAJIE-1 on 14-4-24.
// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved.
//
#import "XHMessage.h"
#import "User.h"
@implementation XHMessage
@synthesize timestamp = _timestamp;
@synthesize avator = _avator;
- (void)setType:(NSNumber *)type{
_type = type;
if ([type isEqualToNumber:@(10005)]) {
self.messageMediaType = XHBubbleMessageMediaTypeText;
}else{
self.messageMediaType = [type integerValue];
}
}
- (void)setMessageMediaType:(XHBubbleMessageMediaType)messageMediaType{
_messageMediaType = messageMediaType;
switch (messageMediaType) {
case XHBubbleMessageMediaTypeText:
break;
case XHBubbleMessageMediaTypePhoto:
break;
case XHBubbleMessageMediaTypeVoice:
break;
case XHBubbleMessageMediaTypeVideo:
break;
case XHBubbleMessageMediaTypeEmotion:
break;
case XHBubbleMessageMediaTypeLocalPosition:
break;
default:
break;
}
}
- (void)setSenderID:(NSString *)senderID{
_senderID = senderID;
if ([senderID isEqualToString:[User currentUser].openid]) {
self.bubbleMessageType = XHBubbleMessageTypeSending;
}else{
self.bubbleMessageType = XHBubbleMessageTypeReceiving;
}
}
- (instancetype)initWithText:(NSString *)text
sender:(NSString *)sender
timestamp:(NSDate *)timestamp {
self = [super init];
if (self) {
self.content = text;
self.senderID = sender;
self.timestamp = @([timestamp timeIntervalSince1970]);
self.messageMediaType = XHBubbleMessageMediaTypeText;
}
return self;
}
/**
* 初始化图片类型的消息
*
* @param photo 目标图片
* @param thumbnailUrl 目标图片在服务器的缩略图地址
* @param originPhotoUrl 目标图片在服务器的原图地址
* @param sender 发送者
* @param timestamp 发送时间
*
* @return 返回Message model 对象
*/
- (instancetype)initWithPhoto:(UIImage *)photo
thumbnailUrl:(NSString *)thumbnailUrl
originPhotoUrl:(NSString *)originPhotoUrl
sender:(NSString *)sender
timestamp:(NSDate *)timestamp {
self = [super init];
if (self) {
self.photo = photo;
// self.thumbnailUrl = thumbnailUrl;
// self.originPhotoUrl = originPhotoUrl;
self.senderID = sender;
self.timestamp = @([timestamp timeIntervalSince1970]);
self.messageMediaType = XHBubbleMessageMediaTypePhoto;
}
return self;
}
/**
* 初始化视频类型的消息
*
* @param videoConverPhoto 目标视频的封面图
* @param videoPath 目标视频的本地路径,如果是下载过,或者是从本地发送的时候,会存在
* @param videoUrl 目标视频在服务器上的地址
* @param sender 发送者
* @param timestamp 发送时间
*
* @return 返回Message model 对象
*/
- (instancetype)initWithVideoConverPhoto:(UIImage *)videoConverPhoto
videoPath:(NSString *)videoPath
videoUrl:(NSString *)videoUrl
sender:(NSString *)sender
timestamp:(NSDate *)timestamp {
self = [super init];
if (self) {
self.videoConverPhoto = videoConverPhoto;
self.videoPath = videoPath;
// self.videoUrl = videoUrl;
self.senderID = sender;
self.timestamp = @([timestamp timeIntervalSince1970]);
self.messageMediaType = XHBubbleMessageMediaTypeVideo;
}
return self;
}
/**
* 初始化语音类型的消息
*
* @param voicePath 目标语音的本地路径
* @param voiceUrl 目标语音在服务器的地址
* @param voiceDuration 目标语音的时长
* @param sender 发送者
* @param timestamp 发送时间
*
* @return 返回Message model 对象
*/
- (instancetype)initWithVoicePath:(NSString *)voicePath
voiceUrl:(NSString *)voiceUrl
voiceDuration:(NSNumber *)voiceDuration
sender:(NSString *)sender
timestamp:(NSDate *)timestamp {
return [self initWithVoicePath:voicePath voiceUrl:voiceUrl voiceDuration:voiceDuration sender:sender timestamp:timestamp isRead:YES];
}
/**
* 初始化语音类型的消息。增加已读未读标记
*
* @param voicePath 目标语音的本地路径
* @param voiceUrl 目标语音在服务器的地址
* @param voiceDuration 目标语音的时长
* @param sender 发送者
* @param timestamp 发送时间
* @param isRead 已读未读标记
*
* @return 返回Message model 对象
*/
- (instancetype)initWithVoicePath:(NSString *)voicePath
voiceUrl:(NSString *)voiceUrl
voiceDuration:(NSNumber *)voiceDuration
sender:(NSString *)sender
timestamp:(NSDate *)timestamp
isRead:(BOOL)isRead {
self = [super init];
if (self) {
self.voicePath = voicePath;
// self.voiceUrl = voiceUrl;
self.duration = voiceDuration;
self.senderID = sender;
self.timestamp = @([timestamp timeIntervalSince1970]);
self.isRead = isRead;
self.messageMediaType = XHBubbleMessageMediaTypeVoice;
}
return self;
}
- (instancetype)initWithEmotionPath:(NSString *)emotionPath
sender:(NSString *)sender
timestamp:(NSDate *)timestamp {
self = [super init];
if (self) {
self.emotionPath = emotionPath;
self.senderID = sender;
self.timestamp = @([timestamp timeIntervalSince1970]);
self.messageMediaType = XHBubbleMessageMediaTypeEmotion;
}
return self;
}
- (instancetype)initWithLocalPositionPhoto:(UIImage *)localPositionPhoto
geolocations:(NSString *)geolocations
location:(CLLocation *)location
sender:(NSString *)sender
timestamp:(NSDate *)timestamp {
self = [super init];
if (self) {
self.localPositionPhoto = localPositionPhoto;
self.geolocations = geolocations;
self.location = location;
self.senderID = sender;
self.timestamp = @([timestamp timeIntervalSince1970]);
self.messageMediaType = XHBubbleMessageMediaTypeLocalPosition;
}
return self;
}
#pragma mark - NSCoding
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super init];
if (self) {
_content = [aDecoder decodeObjectForKey:@"content"];
_photo = [aDecoder decodeObjectForKey:@"photo"];
// _thumbnailUrl = [aDecoder decodeObjectForKey:@"thumbnailUrl"];
// _originPhotoUrl = [aDecoder decodeObjectForKey:@"originPhotoUrl"];
_videoConverPhoto = [aDecoder decodeObjectForKey:@"videoConverPhoto"];
_videoPath = [aDecoder decodeObjectForKey:@"videoPath"];
// _videoUrl = [aDecoder decodeObjectForKey:@"videoUrl"];
_voicePath = [aDecoder decodeObjectForKey:@"voicePath"];
// _voiceUrl = [aDecoder decodeObjectForKey:@"voiceUrl"];
_duration = [aDecoder decodeObjectForKey:@"duration"];
_emotionPath = [aDecoder decodeObjectForKey:@"emotionPath"];
_localPositionPhoto = [aDecoder decodeObjectForKey:@"localPositionPhoto"];
_geolocations = [aDecoder decodeObjectForKey:@"geolocations"];
_location = [aDecoder decodeObjectForKey:@"location"];
_avatar = [aDecoder decodeObjectForKey:@"avatar"];
_avator = [aDecoder decodeObjectForKey:@"avator"];
_senderID = [aDecoder decodeObjectForKey:@"senderID"];
_timestamp = [aDecoder decodeObjectForKey:@"timestamp"];
_messageMediaType = [[aDecoder decodeObjectForKey:@"messageMediaType"] integerValue];
_bubbleMessageType = [[aDecoder decodeObjectForKey:@"bubbleMessageType"] integerValue];
_isRead = [[aDecoder decodeObjectForKey:@"isRead"] boolValue];
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeObject:self.content forKey:@"content"];
[aCoder encodeObject:self.photo forKey:@"photo"];
// [aCoder encodeObject:self.thumbnailUrl forKey:@"thumbnailUrl"];
// [aCoder encodeObject:self.originPhotoUrl forKey:@"originPhotoUrl"];
[aCoder encodeObject:self.videoConverPhoto forKey:@"videoConverPhoto"];
[aCoder encodeObject:self.videoPath forKey:@"videoPath"];
// [aCoder encodeObject:self.videoUrl forKey:@"videoUrl"];
[aCoder encodeObject:self.voicePath forKey:@"voicePath"];
// [aCoder encodeObject:self.voiceUrl forKey:@"voiceUrl"];
[aCoder encodeObject:self.duration forKey:@"duration"];
[aCoder encodeObject:self.emotionPath forKey:@"emotionPath"];
[aCoder encodeObject:self.localPositionPhoto forKey:@"localPositionPhoto"];
[aCoder encodeObject:self.geolocations forKey:@"geolocations"];
[aCoder encodeObject:self.location forKey:@"location"];
[aCoder encodeObject:self.avatar forKey:@"avatar"];
[aCoder encodeObject:self.avator forKey:@"avator"];
[aCoder encodeObject:self.senderID forKey:@"senderID"];
[aCoder encodeObject:self.timestamp forKey:@"timestamp"];
[aCoder encodeObject:[NSNumber numberWithInteger:self.messageMediaType] forKey:@"messageMediaType"];
[aCoder encodeObject:[NSNumber numberWithInteger:self.bubbleMessageType] forKey:@"bubbleMessageType"];
[aCoder encodeObject:[NSNumber numberWithBool:self.isRead] forKey:@"isRead"];
}
#pragma mark - NSCopying
- (id)copyWithZone:(NSZone *)zone {
switch (self.messageMediaType) {
case XHBubbleMessageMediaTypeText:
return [[[self class] allocWithZone:zone] initWithText:[self.content copy]
sender:[self.senderID copy]
timestamp:[self.timestamp copy]];
case XHBubbleMessageMediaTypePhoto:
return [[[self class] allocWithZone:zone] initWithPhoto:[self.photo copy]
thumbnailUrl:[self.content copy]
originPhotoUrl:nil
sender:[self.senderID copy]
timestamp:[self.timestamp copy]];
case XHBubbleMessageMediaTypeVideo:
return [[[self class] allocWithZone:zone] initWithVideoConverPhoto:[self.videoConverPhoto copy]
videoPath:[self.videoPath copy]
videoUrl:[self.content copy]
sender:[self.senderID copy]
timestamp:[self.timestamp copy]];
case XHBubbleMessageMediaTypeVoice:
return [[[self class] allocWithZone:zone] initWithVoicePath:[self.voicePath copy]
voiceUrl:[self.content copy]
voiceDuration:[self.duration copy]
sender:[self.senderID copy]
timestamp:[self.timestamp copy]];
case XHBubbleMessageMediaTypeEmotion:
return [[[self class] allocWithZone:zone] initWithEmotionPath:[self.emotionPath copy]
sender:[self.senderID copy]
timestamp:[self.timestamp copy]];
case XHBubbleMessageMediaTypeLocalPosition:
return [[[self class] allocWithZone:zone] initWithLocalPositionPhoto:[self.localPositionPhoto copy]
geolocations:self.geolocations
location:[self.location copy]
sender:[self.senderID copy]
timestamp:[self.timestamp copy]];
default:
return nil;
}
}
@end