diff --git a/JSQMessages.xcodeproj/project.pbxproj b/JSQMessages.xcodeproj/project.pbxproj index ae75424..b20e20f 100644 --- a/JSQMessages.xcodeproj/project.pbxproj +++ b/JSQMessages.xcodeproj/project.pbxproj @@ -105,6 +105,8 @@ FC15B7B11A1F6AC800F59801 /* JSQMessagesCollectionViewCellOutgoing.xib in Resources */ = {isa = PBXBuildFile; fileRef = FC15B7AF1A1F6AC800F59801 /* JSQMessagesCollectionViewCellOutgoing.xib */; }; FC4FA03A1A1E1BD100DA100A /* JSQCall.m in Sources */ = {isa = PBXBuildFile; fileRef = FC4FA0391A1E1BD100DA100A /* JSQCall.m */; }; FC4FA03D1A1E81AF00DA100A /* JSQCallCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FC4FA03C1A1E81AF00DA100A /* JSQCallCollectionViewCell.m */; }; + FCFA5E131A29FC1000C8E32E /* JSQDisplayedMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = FCFA5E121A29FC1000C8E32E /* JSQDisplayedMessage.m */; }; + FCFA5E161A29FE3B00C8E32E /* JSQInfoMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = FCFA5E151A29FE3B00C8E32E /* JSQInfoMessage.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -280,6 +282,10 @@ FC4FA03B1A1E81AF00DA100A /* JSQCallCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSQCallCollectionViewCell.h; sourceTree = ""; }; FC4FA03C1A1E81AF00DA100A /* JSQCallCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JSQCallCollectionViewCell.m; sourceTree = ""; }; FC5C727E4CCDA2B95A7BA30C /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; + FCFA5E111A29FC1000C8E32E /* JSQDisplayedMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSQDisplayedMessage.h; sourceTree = ""; }; + FCFA5E121A29FC1000C8E32E /* JSQDisplayedMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JSQDisplayedMessage.m; sourceTree = ""; }; + FCFA5E141A29FE3B00C8E32E /* JSQInfoMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSQInfoMessage.h; sourceTree = ""; }; + FCFA5E151A29FE3B00C8E32E /* JSQInfoMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JSQInfoMessage.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -528,6 +534,10 @@ 886C33FC19F4371E006B4997 /* JSQVideoMediaItem.m */, FC4FA0381A1E1BD100DA100A /* JSQCall.h */, FC4FA0391A1E1BD100DA100A /* JSQCall.m */, + FCFA5E111A29FC1000C8E32E /* JSQDisplayedMessage.h */, + FCFA5E121A29FC1000C8E32E /* JSQDisplayedMessage.m */, + FCFA5E141A29FE3B00C8E32E /* JSQInfoMessage.h */, + FCFA5E151A29FE3B00C8E32E /* JSQInfoMessage.m */, ); path = Model; sourceTree = ""; @@ -837,6 +847,7 @@ 8885734D19DE55D000E89D20 /* NSUserDefaults+DemoSettings.m in Sources */, 883C11781A09FB100092A16D /* JSQMessagesCellTextView.m in Sources */, 88A25FB919D8E01A00924534 /* UIView+JSQMessages.m in Sources */, + FCFA5E131A29FC1000C8E32E /* JSQDisplayedMessage.m in Sources */, 88A25FCA19D8E01A00924534 /* JSQMessagesCollectionView.m in Sources */, 88A25FD219D8E01A00924534 /* JSQMessagesLabel.m in Sources */, 88445B4019E1B4470014F889 /* JSQLocationMediaItem.m in Sources */, @@ -866,6 +877,7 @@ 88A25FB719D8E01A00924534 /* UIColor+JSQMessages.m in Sources */, 886C33FD19F4371E006B4997 /* JSQVideoMediaItem.m in Sources */, 88A25FBA19D8E01A00924534 /* JSQMessagesKeyboardController.m in Sources */, + FCFA5E161A29FE3B00C8E32E /* JSQInfoMessage.m in Sources */, 88A25FC019D8E01A00924534 /* JSQMessagesToolbarButtonFactory.m in Sources */, 88A25FC219D8E01A00924534 /* JSQMessagesCollectionViewFlowLayoutInvalidationContext.m in Sources */, 88A25FE119D8E0C400924534 /* TableViewController.m in Sources */, diff --git a/JSQMessagesViewController/Model/JSQDisplayedMessage.h b/JSQMessagesViewController/Model/JSQDisplayedMessage.h new file mode 100644 index 0000000..a1be6d9 --- /dev/null +++ b/JSQMessagesViewController/Model/JSQDisplayedMessage.h @@ -0,0 +1,44 @@ +// +// JSQDisplayedMessage.h +// JSQMessages +// +// Created by Dylan Bourgeois on 29/11/14. +// Copyright (c) 2014 Hexed Bits. All rights reserved. +// + +#import +#import "JSQMessageData.h" + +/* JSQDisplayed message is the parent class for displaying information to the user + * from within the conversation view. Do not use directly : + * + * @see JSQInfoMessage + * @see JSQErrorMessage + * + */ + +@interface JSQDisplayedMessage : NSObject + +/* + * Returns the unique identifier of the person affected by the displayed message + */ +@property (copy, nonatomic, readonly) NSString *senderId; + + +/* + * Returns the name of the person affected by the displayed message + */ +@property (copy, nonatomic, readonly) NSString *senderDisplayName; + +/* + * Returns date of the displayed message + */ +@property (copy, nonatomic, readonly) NSDate *date; + +#pragma mark - Initializer + +-(instancetype)initWithSenderId:(NSString*)senderId + senderDisplayName:(NSString*)senderDisplayName + date:(NSDate*)date; + +@end diff --git a/JSQMessagesViewController/Model/JSQDisplayedMessage.m b/JSQMessagesViewController/Model/JSQDisplayedMessage.m new file mode 100644 index 0000000..df2a5bb --- /dev/null +++ b/JSQMessagesViewController/Model/JSQDisplayedMessage.m @@ -0,0 +1,35 @@ +// +// JSQDisplayedMessage.m +// JSQMessages +// +// Created by Dylan Bourgeois on 29/11/14. +// Copyright (c) 2014 Hexed Bits. All rights reserved. +// + +#import "JSQDisplayedMessage.h" + +@implementation JSQDisplayedMessage + +-(id)init +{ + NSAssert(NO,@"%s is not a valid initializer for %@. Use %@ instead", __PRETTY_FUNCTION__, [self class], NSStringFromSelector(@selector(initWithSenderId:senderDisplayName:date:))); + return nil; +} + +-(instancetype)initWithSenderId:(NSString*)senderId + senderDisplayName:(NSString*)senderDisplayName + date:(NSDate*)date +{ + self = [super init]; + + if (self) { + _senderId = [senderId copy]; + _senderDisplayName = [senderDisplayName copy]; + _date = [date copy]; + } + + return self; +} + + +@end diff --git a/JSQMessagesViewController/Model/JSQInfoMessage.h b/JSQMessagesViewController/Model/JSQInfoMessage.h new file mode 100644 index 0000000..6a95138 --- /dev/null +++ b/JSQMessagesViewController/Model/JSQInfoMessage.h @@ -0,0 +1,28 @@ +// +// JSQInfoMessage.h +// JSQMessages +// +// Created by Dylan Bourgeois on 29/11/14. +// Copyright (c) 2014 Hexed Bits. All rights reserved. +// + +#import "JSQDisplayedMessage.h" + +typedef NS_ENUM(NSInteger, JSQInfoMessageType){ + InfoMessageTypeSessionDidEnd, +}; + +@interface JSQInfoMessage : JSQDisplayedMessage + +@property (nonatomic) JSQInfoMessageType infoMessageType; + +#pragma mark - Initialization + +- (instancetype)initWithType:(JSQInfoMessageType)messageType + senderId:(NSString*)senderId + senderDisplayName:(NSString*)senderDisplayName + date:(NSDate*)date; + +- (NSString*)text; + +@end diff --git a/JSQMessagesViewController/Model/JSQInfoMessage.m b/JSQMessagesViewController/Model/JSQInfoMessage.m new file mode 100644 index 0000000..01eab83 --- /dev/null +++ b/JSQMessagesViewController/Model/JSQInfoMessage.m @@ -0,0 +1,53 @@ +// +// JSQInfoMessage.m +// JSQMessages +// +// Created by Dylan Bourgeois on 29/11/14. +// Copyright (c) 2014 Hexed Bits. All rights reserved. +// + +#import "JSQInfoMessage.h" + +@implementation JSQInfoMessage + +- (instancetype)initWithType:(JSQInfoMessageType)messageType + senderId:(NSString *)senderId + senderDisplayName:(NSString *)senderDisplayName + date:(NSDate *)date +{ + //@discussion: NSParameterAssert() ? + + self = [super initWithSenderId:senderId senderDisplayName:senderDisplayName date:date]; + + if (self) { + _infoMessageType = messageType; + } + + return self; +} + +-(NSString*)text +{ + switch (self.infoMessageType) { + case InfoMessageTypeSessionDidEnd: + return [NSString stringWithFormat:@"Session with %@ ended.", self.senderDisplayName]; + break; + + default: + return nil; + break; + } +} + +-(NSUInteger)hash +{ + return self.senderId.hash ^ self.date.hash; +} + +-(NSString*)description +{ + return [NSString stringWithFormat:@"<%@: senderId=%@, senderDisplayName=%@, date=%@, type=%ld>", + [self class], self.senderId, self.senderDisplayName, self.date, self.infoMessageType]; +} + +@end