summaryrefslogtreecommitdiff
path: root/protocols/Steam/src/steam_server.cpp
diff options
context:
space:
mode:
authorGeorge Hazan <george.hazan@gmail.com>2024-12-29 12:58:27 +0300
committerGeorge Hazan <george.hazan@gmail.com>2024-12-29 12:58:27 +0300
commitf98fe1465694e5899d00bfb8814a5578b144d7c1 (patch)
tree064ca05f47bdfdae79a6a60a5056ec9e9bc061df /protocols/Steam/src/steam_server.cpp
parent8771dda88d2ea3ac304414c8c4d4232ab7beedc1 (diff)
Steam: application info parser
Diffstat (limited to 'protocols/Steam/src/steam_server.cpp')
-rw-r--r--protocols/Steam/src/steam_server.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/protocols/Steam/src/steam_server.cpp b/protocols/Steam/src/steam_server.cpp
index 40789e9a22..e3150a4499 100644
--- a/protocols/Steam/src/steam_server.cpp
+++ b/protocols/Steam/src/steam_server.cpp
@@ -41,10 +41,29 @@ void CSteamProto::SendAppInfoRequest(uint32_t appId)
CMsgClientPICSProductInfoRequest request;
request.n_apps = 1;
request.apps = &pInfo;
- request.has_meta_data_only = request.meta_data_only = true;
WSSend(EMsg::ClientPICSProductInfoRequest, request);
}
+void CSteamProto::OnGotAppInfo(const CMsgClientPICSProductInfoResponse &reply, const CMsgProtoBufHeader &)
+{
+ for (int i = 0; i < reply.n_apps; i++) {
+ auto *pApp = reply.apps[i];
+
+ if (pApp->buffer.len) {
+ std::regex regex("\"name\"[\\s*]\"(.+?)\"");
+ std::smatch match;
+ std::string content((char *)pApp->buffer.data, pApp->buffer.len);
+ if (std::regex_search(content, match, regex)) {
+ std::string szName = match[1];
+ CMStringA szSetting(FORMAT, "AppInfo_%d", pApp->appid);
+ setString(szSetting, szName.c_str());
+
+ for (auto &cc : AccContacts()) {
+ if (getDword(cc, "XStatusId") == pApp->appid) {
+ setWString(cc, "XStatusName", TranslateT("Playing"));
+ setUString(cc, "XStatusMsg", szName.c_str());
+} } } } } }
+
/////////////////////////////////////////////////////////////////////////////////////////
void CSteamProto::SendPersonaStatus(int status)