[Windows] Fix driver version detection of AMD RDNA+ GPU on Windows 10
[xbmc.git] / xbmc / windowing / wayland / OSScreenSaverWebOS.cpp
blobfa426e3f1306b6cfa2e5369596074d7bf90cc878
1 /*
2 * Copyright (C) 2023 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
9 #include "OSScreenSaverWebOS.h"
11 #include "CompileInfo.h"
12 #include "utils/JSONVariantParser.h"
13 #include "utils/JSONVariantWriter.h"
14 #include "utils/log.h"
16 namespace
18 constexpr const char* LUNA_REGISTER_SCREENSAVER =
19 "luna://com.webos.service.tvpower/power/registerScreenSaverRequest";
20 constexpr const char* LUNA_RESPONSE_SCREENSAVER =
21 "luna://com.webos.service.tvpower/power/responseScreenSaverRequest";
22 } // namespace
24 namespace KODI::WINDOWING::WAYLAND
27 COSScreenSaverWebOS::~COSScreenSaverWebOS()
29 if (m_requestContext)
31 // Luna helper functions return 0 on success
32 if (HUnregisterServiceCallback(m_requestContext.get()))
33 CLog::LogF(LOGWARNING, "COSScreenSaverWebOS: Luna request unregister failed");
34 m_requestContext = nullptr;
38 void COSScreenSaverWebOS::Inhibit()
40 CVariant request;
41 request["subscribe"] = true;
42 request["clientName"] = CCompileInfo::GetPackage();
43 std::string payload;
44 CJSONVariantWriter::Write(request, payload, true);
46 m_requestContext = std::make_unique<HContext>();
47 m_requestContext->pub = true;
48 m_requestContext->multiple = true;
49 m_requestContext->callback = &OnScreenSaverAboutToStart;
50 if (HLunaServiceCall(LUNA_REGISTER_SCREENSAVER, payload.c_str(), m_requestContext.get()))
52 CLog::LogF(LOGWARNING, "COSScreenSaverWebOS: Luna request call failed");
53 if (HUnregisterServiceCallback(m_requestContext.get()))
54 CLog::LogF(LOGWARNING, "COSScreenSaverWebOS: Luna request unregister failed");
55 m_requestContext = nullptr;
59 void COSScreenSaverWebOS::Uninhibit()
61 if (m_requestContext)
63 if (HUnregisterServiceCallback(m_requestContext.get()))
64 CLog::LogF(LOGWARNING, "COSScreenSaverWebOS: Luna request unregister failed");
65 m_requestContext = nullptr;
69 bool COSScreenSaverWebOS::OnScreenSaverAboutToStart(LSHandle* sh, LSMessage* reply, void* ctx)
71 CVariant request;
72 const char* msg = HLunaServiceMessage(reply);
73 CJSONVariantParser::Parse(msg, request);
75 CLog::LogF(LOGDEBUG, "COSScreenSaverWebOS: Responded {}", msg);
77 if (request["state"] != "Active")
78 return true;
80 CVariant response;
81 response["clientName"] = CCompileInfo::GetPackage();
82 response["ack"] = false;
83 response["timestamp"] = request["timestamp"];
84 std::string payload;
85 CJSONVariantWriter::Write(response, payload, true);
87 HContext response_ctx;
88 response_ctx.multiple = false;
89 response_ctx.pub = true;
90 response_ctx.callback = nullptr;
91 if (HLunaServiceCall(LUNA_RESPONSE_SCREENSAVER, payload.c_str(), &response_ctx))
93 CLog::LogF(LOGWARNING, "COSScreenSaverWebOS: Luna response call failed");
94 return false;
97 return true;
100 } // namespace KODI::WINDOWING::WAYLAND