Line data Source code
1 : #include "ChatDatabaseManager.h"
2 : #include "api_server_constants.h"
3 :
4 : using std::string;
5 :
6 181 : ChatDatabaseManager::ChatDatabaseManager(rocksdb::DB *database) : DatabaseManager(database) {
7 :
8 181 : }
9 :
10 15 : std::string ChatDatabaseManager::getConversationKey(std::string sender, std::string receiver){
11 15 : string key;
12 15 : if (sender.compare(receiver) < 0) {
13 3 : key = receiver + DB_SEPARATOR + sender;
14 : } else {
15 12 : key = sender + DB_SEPARATOR + receiver;
16 : }
17 15 : return key;
18 : }
19 :
20 10 : std::string ChatDatabaseManager::getNewMessagesKey(std::string sender, std::string receiver){
21 10 : return NEW_MSGS_PREFIX + sender + DB_SEPARATOR + receiver;
22 6 : }
23 6 :
24 4 : void ChatDatabaseManager::saveNewMsgs(std::string messageWithSender, std::string sender, std::string receiver){
25 10 : string currentNewMessages;
26 :
27 9 : string newMessageskey = getNewMessagesKey(sender, receiver);
28 6 : if (!getEntry(newMessageskey, currentNewMessages)) {
29 9 : DatabaseManager::addEntry(newMessageskey, messageWithSender + "\n");
30 7 : return;
31 4 : }
32 2 : replaceEntry(newMessageskey, currentNewMessages + messageWithSender + "\n");
33 :
34 4 : }
35 4 :
36 6 : void ChatDatabaseManager::saveMessage(std::string message, std::string sender, std::string receiver){
37 8 : LOGG(INFO) << "Saving message " << message <<" from " << sender << " to " << receiver;
38 6 : string conversationHistory;
39 3 : string key;
40 6 : key = getConversationKey(sender, receiver);
41 :
42 9 : string messageWithSender = sender + DB_SEPARATOR + message;
43 :
44 4 : //Saving new message in both users conversations.
45 4 : saveNewMsgs(messageWithSender,sender,receiver);
46 8 : saveNewMsgs(messageWithSender,receiver,sender);
47 :
48 2 : if (! getEntry(key, conversationHistory)) {
49 5 : DatabaseManager::addEntry(key, messageWithSender + "\n");
50 3 : return;
51 : }
52 :
53 4 : replaceEntry(key, conversationHistory + messageWithSender + "\n");
54 2 :
55 4 : }
56 :
57 3 : bool ChatDatabaseManager::getHistory(std::string sender, std::string receiver, std::string& chat_history){
58 1 : string conversationHistory;
59 4 : string key;
60 0 :
61 1 : key = getConversationKey(sender, receiver);
62 :
63 3 : if (! getEntry(key, conversationHistory) ) {
64 4 : return false;
65 : }
66 :
67 3 : chat_history = conversationHistory;
68 4 : return true;
69 4 : }
70 4 :
71 2 : void ChatDatabaseManager::getNewMsgs(string sender, string receiver, string &newMsgs){
72 4 : string newMessages;
73 4 : string newMessageskey = getNewMessagesKey(sender, receiver);
74 2 :
75 2 : if (getEntry(newMessageskey,newMessages)){
76 1 : LOGG(INFO) << "Found new messages from " << sender << " and " << receiver;
77 1 : LOGG(INFO) << "Messages found " << newMessages;
78 1 : this->deleteEntry(newMessageskey);
79 4 : } else {
80 9 : newMessages = "";
81 : }
82 :
83 4 : newMsgs = newMessages;
84 11 : }
|