MessageDB.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. //
  2. // MessageDB.h
  3. // stn
  4. //
  5. // Created by WF Chat on 2017/8/26.
  6. // Copyright © 2017年 WildFireChat. All rights reserved.
  7. //
  8. #ifndef MessageDB_hpp
  9. #define MessageDB_hpp
  10. #include "mars/proto/proto.h"
  11. #include <map>
  12. namespace mars {
  13. namespace stn {
  14. class UpdateConversationData;
  15. class LoadRemoteMessagesPublishCallback;
  16. class SyncReadEntry;
  17. class MessageDB {
  18. private:
  19. MessageDB();
  20. virtual ~MessageDB();
  21. public:
  22. static MessageDB* Instance();
  23. long InsertMessage(TMessage &msg, bool updateConversationTime = true, std::list<UpdateConversationData*> *delayUpdateDatas = NULL);
  24. void RegisterMessageFlag(int type, int flag);
  25. bool UpdateMessageContent(long messageId, TMessageContent &msgConstnet);
  26. bool DeleteMessage(long messageId);
  27. bool UpdateMessageContentByUid(int64_t messageUid, TMessageContent &msgConstnet);
  28. bool DeleteMessageByUid(int64_t messageUid);
  29. bool UpdateMessageTimeline(int64_t timeline, const std::string &node);
  30. bool UpdateRecvAndReadTimeline(int64_t timeline, bool isRead);
  31. int64_t GetMessageTimeline(std::string &node, int64_t &recvHead, int64_t &readHead);
  32. int64_t GetSettingVersion();
  33. bool UpdateUserSettings(std::list<TUserSettingEntry> &settings);
  34. std::string GetUserSetting(int scope, const std::string &key);
  35. std::map<std::string, std::string> GetUserSettings(int scope);
  36. bool updateConversationTimestamp(int conversationType, const std::string &target, int line, int64_t timestamp, long messageId, bool unread, bool mentionedMe, bool mentionAll, bool isRecall);
  37. bool updateConversationTimestamp(int conversationType, const std::string &target, int line, int64_t timestamp);
  38. bool updateConversationIsTop(int conversationType, const std::string &target, int line, bool istop);
  39. bool updateConversationIsSilent(int conversationType, const std::string &target, int line, bool issilent);
  40. bool updateConversationDraft(int conversationType, const std::string &target, int line, const std::string &draft);
  41. TConversation GetConversation(int conversationType, const std::string &target, int line);
  42. std::list<TConversation> GetConversationList(const std::list<int> &conversationTypes, const std::list<int> &lines);
  43. bool RemoveConversation(int conversationType, const std::string &target, int line, bool clearMessage = false);
  44. bool ClearMessages(int conversationType, const std::string &target, int line);
  45. bool ClearMessages(int conversationType, const std::string &target, int line, int64_t before);
  46. std::list<TMessage> GetMessages(int conversationType, const std::string &target, int line, const std::list<int> &contentTypes, bool desc, int count, int64_t startPoint, const std::string &withUser);
  47. std::list<TMessage> GetMessages(const std::list<int> &conversationTypes, const std::list<int> &lines, const std::list<int> &contentTypes, bool desc, int count, int64_t startPoint, const std::string &withUser);
  48. std::list<TMessage> GetMessages(const std::list<int> &conversationTypes, const std::list<int> &lines, const int messageStatus, bool desc, int count, int64_t startPoint, const std::string &withUser);
  49. TMessage GetMessageById(long messageId);
  50. TMessage GetMessageByUid(long long messageUid);
  51. bool updateMessageStatus(long messageId, MessageStatus status);
  52. bool updateMessageUidAndTimestamp(long messageId, int64_t messageUid, int64_t sendTime);
  53. bool updateMessageRemoteMediaUrl(long messageId, const std::string &remoteMediaUrl);
  54. bool updateMessageLocalMediaPath(long messageId, const std::string &localMediaPath);
  55. int GetMsgTotalCount(int conversationType, const std::string &target, int line);
  56. TUnreadCount GetUnreadCount(int conversationType, const std::string &target, int line);
  57. TUnreadCount GetUnreadCount(const std::list<int> &conversationTypes, const std::list<int> lines);
  58. std::list<std::string> GetUnreadMsgSender(int conversationType, const std::string &target, int line);
  59. bool ClearUnreadStatus(int conversationType, const std::string &target, int line);
  60. bool ClearUnreadStatus(const std::list<int> &conversationTypes, const std::list<int> lines);
  61. bool ClearAllUnreadStatus();
  62. bool FailSendingMessages();
  63. int64_t getConversationReadMaxDt(int conversationType, const std::string &target, int line);
  64. bool updateConversationRead(int conversationType, const std::string &target, int line, int64_t dt);
  65. bool updateConversationReaded(int conversationType, const std::string &target, int line, int64_t dt);
  66. std::list<TMessage> SearchMessages(int conversationType, const std::string &target, int line, const std::string &keyword, int limit);
  67. std::list<TConversationSearchresult> SearchConversations(const std::list<int> &conversationTypes, const std::list<int> lines, const std::string &keyword, int limit);
  68. std::list<TUserInfo> SearchFriends(const std::string &keyword, int limit);
  69. std::list<TGroupSearchResult> SearchGroups(const std::string &keyword, int limit);
  70. TGroupInfo GetGroupInfo(const std::string &groupId, bool refresh);
  71. long InsertGroupInfo(const TGroupInfo &groupInfo);
  72. bool UpdateGroupInfo(const std::string &groupId, int type, const std::string &newValue);
  73. std::list<TGroupMember> GetGroupMembers(const std::string &groupId, bool refresh);
  74. TGroupMember GetGroupMember(const std::string &groupId, const std::string &memberId);
  75. bool RemoveGroupAndMember(const std::string &groupId);
  76. void UpdateGroupMember(const std::list<TGroupMember> &retList);
  77. void RemoveGroupMembers(const std::string &groupId, const std::list<std::string> &members);
  78. void AddGroupMembers(const std::string &groupId, const std::list<std::string> &members);
  79. int UpdateGroupManager(const std::string &groupId, const std::list<std::string> &members, int setOrDelete);
  80. int UpdateGroupMemberMute(const std::string &groupId, const std::list<std::string> &members, int setOrDelete);
  81. TUserInfo getUserInfo(const std::string &userId, const std::string &groupId, bool refresh);
  82. std::list<TUserInfo> getUserInfos(const std::list<std::string> &userIds, const std::string &groupId);
  83. long InsertUserInfoOrReplace(const TUserInfo &userInfo);
  84. long UpdateMyInfo(const std::list<std::pair<int, std::string>> &infos);
  85. bool isMyFriend(const std::string &userId);
  86. bool isBlackListed(const std::string &userId);
  87. std::list<std::string> getMyFriendList(bool refresh);
  88. std::list<std::string> getBlackList(bool refresh);
  89. std::string GetFriendAlias(const std::string &friendId);
  90. std::string GetFriendExtra(const std::string &friendId);
  91. int64_t getFriendRequestHead();
  92. int64_t getFriendHead();
  93. long InsertFriendRequestOrReplace(const TFriendRequest &friendRequest);
  94. std::list<TFriendRequest> getFriendRequest(int direction);
  95. long InsertFriendOrReplace(const std::string &friendUid, int state, int blacked, int64_t timestamp, const std::string &alias, const std::string &extra);
  96. long UpdateFriendAlias(const std::string &friendUid, const std::string &alias);
  97. long UpdateBlacklist(const std::string &friendUid, int blacked);
  98. bool DeleteFriend(const std::string &friendUid);
  99. int unreadFriendRequest();
  100. void clearUnreadFriendRequestStatus();
  101. int getMessageFlag(int type);
  102. int64_t getUnreadFriendRequestMaxDt();
  103. bool updateFriendRequestStatus(const std::string &friendUid, int status);
  104. TChannelInfo GetChannelInfo(const std::string &channelId, bool refresh);
  105. long InsertOrUpdateChannelInfo(const TChannelInfo &channelInfo);
  106. bool BeginTransaction();
  107. void CommitTransaction();
  108. friend class LoadRemoteMessagesPublishCallback;
  109. std::list<TConversation> GetConversationListOld(const std::list<int> &conversationTypes, const std::list<int> &lines);
  110. long InsertRead(const TReadEntry &entry);
  111. long InsertDelivery(const TDeliveryEntry &entry);
  112. std::map<std::string, int64_t> GetConversationRead(int conversationType, const std::string &target, int line);
  113. std::map<std::string, int64_t> GetDelivery(int conversationType, const std::string &target);
  114. int64_t GetDelivery(std::string userId);
  115. long saveConversationSync(int conversatinType, const std::string &target, int line, int64_t readedDt, const std::list<std::string> &senders);
  116. SyncReadEntry loadConversationSync();
  117. bool deleteConvSync(long _id);
  118. private:
  119. bool GetConversationSilent(int conversationType, const std::string &target, int line);
  120. bool clearConversationUnread(int conversationType, const std::string &target, int line, bool clearLastMessageId = false);
  121. bool updateConversationUnread(int conversationType, const std::string &target, int line);
  122. bool clearConversationUnread(const std::list<int> &conversationTypes, const std::list<int> lines, bool clearLastMessageId = false);
  123. bool updateConversationLastMessage(int conversationType, const std::string &target, int line, bool forceUpdate = false);
  124. static MessageDB* instance_;
  125. };
  126. class UpdateConversationData {
  127. public:
  128. UpdateConversationData() : conversationType(0), target(""), line(0), timestamp(0), lastMessageId(0), unreadCount(false), unreadMention(false), unreadMentionAll(false), isRecall(false) {}
  129. virtual ~UpdateConversationData() {}
  130. public:
  131. int conversationType;
  132. std::string target;
  133. int line;
  134. int64_t timestamp;
  135. long lastMessageId;
  136. bool unreadCount;
  137. bool unreadMention;
  138. bool unreadMentionAll;
  139. bool isRecall;
  140. };
  141. }
  142. }
  143. #endif /* MessageDB_hpp */