NTESSnapchatAttachment.m 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. //
  2. // SnapchatAttachment.m
  3. // NIM
  4. //
  5. // Created by amao on 7/2/15.
  6. // Copyright (c) 2015 Netease. All rights reserved.
  7. //
  8. #import "NTESSnapchatAttachment.h"
  9. #import "NTESFileLocationHelper.h"
  10. #import "NSData+NTES.h"
  11. #import "NTESSessionUtil.h"
  12. @interface NTESSnapchatAttachment()
  13. @property (nonatomic,assign) BOOL isFromMe;
  14. @end
  15. @implementation NTESSnapchatAttachment
  16. - (void)setImage:(UIImage *)image
  17. {
  18. NSData *data = UIImageJPEGRepresentation(image, 0.7);
  19. NSString *md5= [data MD5String];
  20. self.md5 = md5;
  21. [data writeToFile:[self filepath]
  22. atomically:YES];
  23. }
  24. - (void)setImageFilePath:(NSString *)path
  25. {
  26. if ([[NSFileManager defaultManager] fileExistsAtPath:path]){
  27. NSData *data = [NSData dataWithContentsOfFile:path];
  28. self.md5 = [data MD5String];
  29. [data writeToFile:[self filepath]
  30. atomically:YES];
  31. }
  32. }
  33. - (void)setIsFired:(BOOL)isFired{
  34. if (_isFired != isFired) {
  35. _isFired = isFired;
  36. [self updateCover];
  37. }
  38. }
  39. - (NSString *)filepath
  40. {
  41. NSString *filename = [_md5 stringByAppendingFormat:@".%@",ImageExt];
  42. return [NTESFileLocationHelper filepathForImage:filename];
  43. }
  44. - (NSString *)cellContent:(NIMMessage *)message{
  45. return @"NTESSessionSnapchatContentView";
  46. }
  47. - (CGSize)contentSize:(NIMMessage *)message cellWidth:(CGFloat)width{
  48. self.isFromMe = message.isOutgoingMsg;
  49. CGSize size = self.showCoverImage.size;
  50. CGFloat customSnapMessageImageRightToText = 5;
  51. return CGSizeMake(size.width + customSnapMessageImageRightToText, size.height);
  52. }
  53. - (UIEdgeInsets)contentViewInsets:(NIMMessage *)message
  54. {
  55. CGFloat bubblePaddingForImage = 3.f;
  56. CGFloat bubbleArrowWidthForImage = -4.f;
  57. if (message.isOutgoingMsg) {
  58. return UIEdgeInsetsMake(bubblePaddingForImage,bubblePaddingForImage,bubblePaddingForImage,bubblePaddingForImage + bubbleArrowWidthForImage);
  59. }else{
  60. return UIEdgeInsetsMake(bubblePaddingForImage,bubblePaddingForImage + bubbleArrowWidthForImage, bubblePaddingForImage,bubblePaddingForImage);
  61. }
  62. }
  63. - (void)setIsFromMe:(BOOL)isFromMe{
  64. if (_isFromMe != isFromMe) {
  65. _isFromMe = isFromMe;
  66. [self updateCover];
  67. }
  68. }
  69. - (BOOL)canBeForwarded
  70. {
  71. return NO;
  72. }
  73. - (BOOL)canBeRevoked
  74. {
  75. return YES;
  76. }
  77. #pragma NIMCustomAttachment
  78. - (NSString *)encodeAttachment
  79. {
  80. NSMutableDictionary *dict = [NSMutableDictionary dictionary];
  81. NSMutableDictionary *data = [NSMutableDictionary dictionary];
  82. [dict setObject:@(CustomMessageTypeSnapchat) forKey:CMType];
  83. [data setObject:_md5?_md5:@"" forKey:CMMD5];
  84. [data setObject:@(_isFired) forKey:CMFIRE];
  85. if ([_url length])
  86. {
  87. [data setObject:_url forKey:CMURL];
  88. }
  89. [dict setObject:data forKey:CMData];
  90. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict
  91. options:0
  92. error:nil];
  93. return [[NSString alloc] initWithData:jsonData
  94. encoding:NSUTF8StringEncoding];
  95. }
  96. #pragma mark - 实现文件上传需要接口
  97. - (BOOL)attachmentNeedsUpload
  98. {
  99. return [_url length] == 0;
  100. }
  101. - (NSString *)attachmentPathForUploading
  102. {
  103. return [self filepath];
  104. }
  105. - (void)updateAttachmentURL:(NSString *)urlString
  106. {
  107. self.url = urlString;
  108. }
  109. #pragma mark - Private
  110. - (void)updateCover{
  111. UIImage *image;
  112. if (!self.isFromMe) {
  113. if (self.isFired) {
  114. image = [UIImage imageNamed:@"session_snapchat_other_readed"];
  115. }else{
  116. image = [UIImage imageNamed:@"session_snapchat_other_unread"];
  117. }
  118. }else{
  119. if (self.isFired) {
  120. image = [UIImage imageNamed:@"session_snapchat_self_readed"];
  121. }else{
  122. image = [UIImage imageNamed:@"session_snapchat_self_unread"];
  123. }
  124. }
  125. self.showCoverImage = image;
  126. }
  127. - (UIImage *)showCoverImage
  128. {
  129. if (_showCoverImage == nil)
  130. {
  131. [self updateCover];
  132. }
  133. return _showCoverImage;
  134. }
  135. #pragma mark - https
  136. - (NSString *)url
  137. {
  138. return [_url length] ?
  139. [[[NIMSDK sharedSDK] resourceManager] normalizeURLString:_url] : nil;
  140. }
  141. @end