1 | #include "mtx/events/presence.hpp" |
---|---|
2 | |
3 | #include <nlohmann/json.hpp> |
4 | |
5 | #include <string> |
6 | #include <string_view> |
7 | |
8 | namespace mtx { |
9 | namespace presence { |
10 | std::string |
11 | to_string(PresenceState state) |
12 | { |
13 | switch (state) { |
14 | case PresenceState::offline: |
15 | return "offline"; |
16 | case PresenceState::unavailable: |
17 | return "unavailable"; |
18 | case PresenceState::online: |
19 | default: |
20 | return "online"; |
21 | } |
22 | } |
23 | PresenceState |
24 | from_string(std::string_view str) |
25 | { |
26 | if (str == "offline") |
27 | return PresenceState::offline; |
28 | else if (str == "unavailable") |
29 | return PresenceState::unavailable; |
30 | else |
31 | return PresenceState::online; |
32 | } |
33 | } |
34 | |
35 | namespace events { |
36 | namespace presence { |
37 | void |
38 | from_json(const nlohmann::json &obj, Presence &presence) |
39 | { |
40 | presence.avatar_url = obj.value(key: "avatar_url", default_value: ""); |
41 | presence.displayname = obj.value(key: "displayname", default_value: ""); |
42 | presence.last_active_ago = obj.value(key: "last_active_ago", default_value: std::uint64_t{0}); |
43 | presence.presence = mtx::presence::from_string(str: obj.value(key: "presence", default_value: "online")); |
44 | presence.currently_active = obj.value(key: "currently_active", default_value: false); |
45 | try { |
46 | if (obj.contains(key: "status_msg")) |
47 | presence.status_msg = obj.at(key: "status_msg").get<std::string>(); |
48 | } catch (...) { |
49 | } |
50 | } |
51 | void |
52 | to_json(nlohmann::json &obj, const Presence &presence) |
53 | { |
54 | if (!presence.avatar_url.empty()) |
55 | obj["avatar_url"] = presence.avatar_url; |
56 | if (!presence.displayname.empty()) |
57 | obj["displayname"] = presence.displayname; |
58 | if (presence.last_active_ago) |
59 | obj["last_active_ago"] = presence.last_active_ago; |
60 | obj["presence"] = to_string(state: presence.presence); |
61 | if (presence.currently_active) |
62 | obj["currently_active"] = true; |
63 | if (!presence.status_msg.empty()) |
64 | obj["status_msg"] = presence.status_msg; |
65 | } |
66 | } |
67 | } |
68 | } |
69 |