NCMessageParameter.m 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. /**
  2. * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
  3. * SPDX-License-Identifier: GPL-3.0-or-later
  4. */
  5. #import "NCMessageParameter.h"
  6. #import "NCDatabaseManager.h"
  7. @implementation NCMessageParameter
  8. - (instancetype)initWithDictionary:(NSDictionary *)parameterDict
  9. {
  10. self = [super init];
  11. if (self) {
  12. if (!parameterDict || ![parameterDict isKindOfClass:[NSDictionary class]]) {
  13. return nil;
  14. }
  15. self.parameterId = [parameterDict objectForKey:@"id"];
  16. self.name = [parameterDict objectForKey:@"name"];
  17. self.link = [parameterDict objectForKey:@"link"];
  18. self.type = [parameterDict objectForKey:@"type"];
  19. id parameterId = [parameterDict objectForKey:@"id"];
  20. if ([parameterId isKindOfClass:[NSString class]]) {
  21. self.parameterId = parameterId;
  22. } else {
  23. self.parameterId = [parameterId stringValue];
  24. }
  25. self.contactName = [parameterDict objectForKey:@"contact-name"];
  26. self.contactPhoto = [parameterDict objectForKey:@"contact-photo"];
  27. self.mentionId = [parameterDict objectForKey:@"mentionId"];
  28. self.mentionDisplayName = [parameterDict objectForKey:@"mentionDisplayName"];
  29. }
  30. return self;
  31. }
  32. - (BOOL)shouldBeHighlighted
  33. {
  34. // Own mentions
  35. // Call mentions
  36. TalkAccount *activeAccount = [[NCDatabaseManager sharedInstance] activeAccount];
  37. return ([_type isEqualToString:@"user"] && [activeAccount.userId isEqualToString:_parameterId]) || [_type isEqualToString:@"call"];
  38. }
  39. - (UIImage *)contactPhotoImage
  40. {
  41. if (self.contactPhoto) {
  42. NSString *base64String = [NSString stringWithFormat:@"%@%@", @"data:image/png;base64,", self.contactPhoto];
  43. NSURL *url = [NSURL URLWithString:base64String];
  44. NSData *imageData = [NSData dataWithContentsOfURL:url];
  45. return [UIImage imageWithData:imageData];
  46. }
  47. return nil;
  48. }
  49. + (NSDictionary *)dictionaryFromMessageParameter:(NCMessageParameter *)messageParameter
  50. {
  51. if (!messageParameter || ![messageParameter isKindOfClass:[NCMessageParameter class]]) {
  52. return nil;
  53. }
  54. NSMutableDictionary *messageParameterDict = [NSMutableDictionary new];
  55. if (messageParameter.parameterId) {
  56. [messageParameterDict setObject:messageParameter.parameterId forKey:@"id"];
  57. }
  58. if (messageParameter.name) {
  59. [messageParameterDict setObject:messageParameter.name forKey:@"name"];
  60. }
  61. if (messageParameter.link) {
  62. [messageParameterDict setObject:messageParameter.link forKey:@"link"];
  63. }
  64. if (messageParameter.type) {
  65. [messageParameterDict setObject:messageParameter.type forKey:@"type"];
  66. }
  67. if (messageParameter.contactName) {
  68. [messageParameterDict setObject:messageParameter.contactName forKey:@"contact-name"];
  69. }
  70. if (messageParameter.contactPhoto) {
  71. [messageParameterDict setObject:messageParameter.contactPhoto forKey:@"contact-photo"];
  72. }
  73. if (messageParameter.mentionId) {
  74. [messageParameterDict setObject:messageParameter.mentionId forKey:@"mentionId"];
  75. }
  76. if (messageParameter.mentionDisplayName) {
  77. [messageParameterDict setObject:messageParameter.mentionDisplayName forKey:@"mentionDisplayName"];
  78. }
  79. return [[NSDictionary alloc] initWithDictionary:messageParameterDict];
  80. }
  81. + (NSDictionary *)messageParametersDictionaryFromDictionary:(NSDictionary *)parametersDict
  82. {
  83. if (!parametersDict || ![parametersDict isKindOfClass:[NSDictionary class]]) {
  84. return nil;
  85. }
  86. NSMutableDictionary *messageParametersDict = [NSMutableDictionary new];
  87. for (NSString *parameterKey in parametersDict) {
  88. NCMessageParameter *parameter = [parametersDict objectForKey:parameterKey];
  89. NSDictionary *parameterDict = [NCMessageParameter dictionaryFromMessageParameter:parameter];
  90. if (parameterDict) {
  91. [messageParametersDict setObject:parameterDict forKey:parameterKey];
  92. }
  93. }
  94. return [[NSDictionary alloc] initWithDictionary:messageParametersDict];
  95. }
  96. + (NSString *)messageParametersJSONStringFromDictionary:(NSDictionary *)parametersDict
  97. {
  98. if (!parametersDict || ![parametersDict isKindOfClass:[NSDictionary class]]) {
  99. return nil;
  100. }
  101. NSString *messageParametersJSONString = nil;
  102. NSDictionary *messageParameters = [self messageParametersDictionaryFromDictionary:parametersDict];
  103. if ([messageParameters isKindOfClass:[NSDictionary class]]) {
  104. NSError *error;
  105. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:messageParameters
  106. options:0
  107. error:&error];
  108. if (jsonData) {
  109. messageParametersJSONString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  110. } else {
  111. NSLog(@"Error generating message parameters JSON string: %@", error);
  112. }
  113. }
  114. return messageParametersJSONString;
  115. }
  116. + (NSDictionary<NSString *, NCMessageParameter *> *)messageParametersDictFromJSONString:(NSString *)parametersJSONString
  117. {
  118. NSDictionary *parametersDict = @{};
  119. NSData *data = [parametersJSONString dataUsingEncoding:NSUTF8StringEncoding];
  120. if (data) {
  121. NSError* error;
  122. NSDictionary* jsonData = [NSJSONSerialization JSONObjectWithData:data
  123. options:0
  124. error:&error];
  125. if (jsonData) {
  126. parametersDict = jsonData;
  127. } else {
  128. NSLog(@"Error retrieving message parameters JSON data: %@", error);
  129. }
  130. }
  131. NSMutableDictionary *messageParametersDict = [NSMutableDictionary new];
  132. for (NSString *parameterKey in parametersDict) {
  133. NCMessageParameter *parameter = [[NCMessageParameter alloc] initWithDictionary:[parametersDict objectForKey:parameterKey]];
  134. if (parameter) {
  135. [messageParametersDict setObject:parameter forKey:parameterKey];
  136. }
  137. }
  138. return messageParametersDict;
  139. }
  140. @end