NCChatMessage.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /**
  2. * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
  3. * SPDX-License-Identifier: GPL-3.0-or-later
  4. */
  5. #import <Foundation/Foundation.h>
  6. #import <UIKit/UIKit.h>
  7. #import <Realm/Realm.h>
  8. #import "NCChatReaction.h"
  9. #import "NCDatabaseManager.h"
  10. #import "NCDeckCardParameter.h"
  11. #import "NCMessageParameter.h"
  12. #import "NCMessageFileParameter.h"
  13. #import "NCMessageLocationParameter.h"
  14. extern NSInteger const kChatMessageGroupTimeDifference;
  15. extern NSString * const kMessageTypeComment;
  16. extern NSString * const kMessageTypeCommentDeleted;
  17. extern NSString * const kMessageTypeSystem;
  18. extern NSString * const kMessageTypeCommand;
  19. extern NSString * const kMessageTypeVoiceMessage;
  20. extern NSString * const kSharedItemTypeAudio;
  21. extern NSString * const kSharedItemTypeDeckcard;
  22. extern NSString * const kSharedItemTypeFile;
  23. extern NSString * const kSharedItemTypeLocation;
  24. extern NSString * const kSharedItemTypeMedia;
  25. extern NSString * const kSharedItemTypeOther;
  26. extern NSString * const kSharedItemTypeVoice;
  27. extern NSString * const kSharedItemTypePoll;
  28. extern NSString * const kSharedItemTypeRecording;
  29. @class NCChatMessage;
  30. typedef void (^GetReferenceDataCompletionBlock)(NCChatMessage *message, NSDictionary *referenceData, NSString *url);
  31. @class NCRoom;
  32. @interface NCChatMessage : RLMObject <NSCopying>
  33. @property (nonatomic, strong) NSString *internalId; // accountId@token@messageId
  34. @property (nonatomic, strong) NSString *accountId;
  35. @property (nonatomic, strong) NSString *actorDisplayName;
  36. @property (nonatomic, strong) NSString *actorId;
  37. @property (nonatomic, strong) NSString *actorType;
  38. @property (nonatomic, assign) NSInteger messageId;
  39. @property (nonatomic, strong) NSString *message;
  40. @property (nonatomic, strong, nullable) NSString *messageParametersJSONString;
  41. @property (nonatomic, assign) NSInteger timestamp;
  42. @property (nonatomic, strong) NSString *token;
  43. @property (nonatomic, strong) NSString *systemMessage;
  44. @property (nonatomic, assign) BOOL isReplyable;
  45. @property (nonatomic, strong) NSString *parentId;
  46. @property (nonatomic, strong) NSString *referenceId;
  47. @property (nonatomic, strong) NSString *messageType;
  48. @property (nonatomic, strong) NSString *reactionsJSONString;
  49. @property (nonatomic, strong) NSString *reactionsSelfJSONString;
  50. @property (nonatomic, assign) NSInteger expirationTimestamp;
  51. @property (nonatomic, assign) BOOL isTemporary;
  52. @property (nonatomic, assign) BOOL sendingFailed;
  53. @property (nonatomic, assign) BOOL isGroupMessage;
  54. @property (nonatomic, assign) BOOL isDeleting;
  55. @property (nonatomic, assign) BOOL isSilent;
  56. @property (nonatomic, assign) BOOL isOfflineMessage;
  57. @property (nonatomic, assign) NSInteger offlineMessageRetryCount;
  58. @property (nonatomic, strong) RLMArray<RLMInt> *collapsedMessages;
  59. @property (nonatomic, strong, nullable) NCChatMessage *collapsedBy;
  60. @property (nonatomic, strong) NSString *collapsedMessage;
  61. @property (nonatomic, strong) NSString *collapsedMessageParametersJSONString;
  62. @property (nonatomic, assign) BOOL collapsedIncludesActorSelf;
  63. @property (nonatomic, assign) BOOL collapsedIncludesUserSelf;
  64. @property (nonatomic, assign) BOOL isCollapsed;
  65. @property (nonatomic, assign) BOOL isMarkdownMessage;
  66. @property (nonatomic, strong, nullable) NSString *lastEditActorType;
  67. @property (nonatomic, strong, nullable) NSString *lastEditActorId;
  68. @property (nonatomic, strong, nullable) NSString *lastEditActorDisplayName;
  69. @property (nonatomic, assign) NSInteger lastEditTimestamp;
  70. + (instancetype)messageWithDictionary:(NSDictionary *)messageDict;
  71. + (instancetype)messageWithDictionary:(NSDictionary *)messageDict andAccountId:(NSString *)accountId;
  72. + (void)updateChatMessage:(NCChatMessage *)managedChatMessage withChatMessage:(NCChatMessage *)chatMessage isRoomLastMessage:(BOOL)isRoomLastMessage;
  73. - (NCMessageFileParameter *)file;
  74. - (NCMessageLocationParameter * _Nullable)geoLocation;
  75. - (NCDeckCardParameter * _Nullable)deckCard;
  76. - (NSString *)objectShareLink;
  77. - (NSMutableAttributedString *)parsedMessage;
  78. - (NSMutableAttributedString *)parsedMarkdown;
  79. - (NSMutableAttributedString *)parsedMarkdownForChat;
  80. - (NSArray<NCChatReaction *> * _Nonnull)reactionsArray;
  81. - (BOOL)containsURL;
  82. - (void)getReferenceDataWithCompletionBlock:(GetReferenceDataCompletionBlock _Nullable)block;
  83. - (void)setPreviewImageHeight:(CGFloat)height;
  84. // Public for swift extension
  85. - (NSMutableArray * _Nonnull)temporaryReactions;
  86. @end