diff options
author | George Hazan <george.hazan@gmail.com> | 2024-12-29 12:58:27 +0300 |
---|---|---|
committer | George Hazan <george.hazan@gmail.com> | 2024-12-29 12:58:27 +0300 |
commit | f98fe1465694e5899d00bfb8814a5578b144d7c1 (patch) | |
tree | 064ca05f47bdfdae79a6a60a5056ec9e9bc061df /protocols/Steam/src/steam_server.cpp | |
parent | 8771dda88d2ea3ac304414c8c4d4232ab7beedc1 (diff) |
Steam: application info parser
Diffstat (limited to 'protocols/Steam/src/steam_server.cpp')
-rw-r--r-- | protocols/Steam/src/steam_server.cpp | 21 |
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) |