1 | #include <nlohmann/json.hpp> |
---|---|
2 | |
3 | #include "mtx/events/ephemeral/receipt.hpp" |
4 | |
5 | namespace mtx { |
6 | namespace events { |
7 | namespace ephemeral { |
8 | |
9 | void |
10 | from_json(const nlohmann::json &obj, Receipt &content) |
11 | { |
12 | for (const auto &eventReceipts : obj.items()) { |
13 | for (const auto &receiptsByType : eventReceipts.value().items()) { |
14 | Receipt::ReceiptType t = Receipt::Read; |
15 | if (receiptsByType.key() == "m.read") |
16 | t = Receipt::Read; |
17 | else if (receiptsByType.key() == "m.read.private"|| |
18 | receiptsByType.key() == "org.matrix.msc2285.read.private") |
19 | t = Receipt::ReadPrivate; |
20 | else |
21 | continue; |
22 | |
23 | for (const auto &userReceipts : receiptsByType.value().items()) { |
24 | content.receipts[eventReceipts.key()][t].users[userReceipts.key()].ts = |
25 | userReceipts.value().value<uint64_t>(key: "ts", default_value: 0); |
26 | } |
27 | } |
28 | } |
29 | } |
30 | |
31 | void |
32 | to_json(nlohmann::json &obj, const Receipt &content) |
33 | { |
34 | for (const auto &[event_id, receiptsByType] : content.receipts) { |
35 | for (const auto &[receiptType, userReceipts] : receiptsByType) { |
36 | for (const auto &[user_id, receipt] : userReceipts.users) { |
37 | if (receiptType == Receipt::ReceiptType::Read) |
38 | obj[event_id]["m.read"][user_id][ "ts"] = receipt.ts; |
39 | else if (receiptType == Receipt::ReceiptType::ReadPrivate) |
40 | |
41 | obj[event_id]["m.read.private"][user_id][ "ts"] = receipt.ts; |
42 | } |
43 | } |
44 | } |
45 | } |
46 | |
47 | } // namespace state |
48 | } // namespace events |
49 | } // namespace mtx |
50 |