MessageDB.h 11 KB

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