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.
9 #include "OSScreenSaverWebOS.h"
11 #include "CompileInfo.h"
12 #include "utils/JSONVariantParser.h"
13 #include "utils/JSONVariantWriter.h"
14 #include "utils/log.h"
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";
24 namespace KODI::WINDOWING::WAYLAND
27 COSScreenSaverWebOS::~COSScreenSaverWebOS()
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()
41 request
["subscribe"] = true;
42 request
["clientName"] = CCompileInfo::GetPackage();
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()
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
)
72 const char* msg
= HLunaServiceMessage(reply
);
73 CJSONVariantParser::Parse(msg
, request
);
75 CLog::LogF(LOGDEBUG
, "COSScreenSaverWebOS: Responded {}", msg
);
77 if (request
["state"] != "Active")
81 response
["clientName"] = CCompileInfo::GetPackage();
82 response
["ack"] = false;
83 response
["timestamp"] = request
["timestamp"];
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");
100 } // namespace KODI::WINDOWING::WAYLAND