@@ -150,6 +150,45 @@ LSMethod methods[] = {
150
150
{ 0 , 0 , 0 }
151
151
};
152
152
153
+ static bool power_callback (LSHandle * sh __attribute__((unused )), LSMessage * msg , void * data )
154
+ {
155
+ JSchemaInfo schema ;
156
+ jvalue_ref parsed ;
157
+ service_t * service = (service_t * )data ;
158
+
159
+ INFO ("Power status callback message: %s" , LSMessageGetPayload (msg ));
160
+
161
+ jschema_info_init (& schema , jschema_all (), NULL , NULL );
162
+ parsed = jdom_parse (j_cstr_to_buffer (LSMessageGetPayload (msg )), DOMOPT_NOOPT , & schema );
163
+
164
+ // Parsing failed
165
+ if (jis_null (parsed )) {
166
+ j_release (& parsed );
167
+ return true;
168
+ }
169
+
170
+ jvalue_ref state_ref = jobject_get (parsed , j_cstr_to_buffer ("state" ));
171
+ if (!jis_valid (state_ref )) {
172
+ DBG ("power_callback: luna-reply does not contain 'state'" );
173
+ j_release (& parsed );
174
+ return true;
175
+ }
176
+
177
+ raw_buffer state_buf = jstring_get (state_ref );
178
+ const char * state_str = state_buf .m_str ;
179
+ bool target_state = strcmp (state_str , "Active" ) == 0 ;
180
+
181
+ if (is_running (service -> daemon_pid ) && !target_state ) {
182
+ INFO ("Shutting down service after power pause..." );
183
+ daemon_stop (service );
184
+ }
185
+
186
+ jstring_free_buffer (state_buf );
187
+ j_release (& parsed );
188
+
189
+ return true;
190
+ }
191
+
153
192
bool service_destroy (LSHandle * handle , service_t * service , LSError * lserror )
154
193
{
155
194
DBG ("Cleaning up service..." );
@@ -193,5 +232,9 @@ bool service_init(LSHandle *handle, GMainLoop* loop, service_t *service, LSError
193
232
return false;
194
233
}
195
234
235
+ if (!LSCall (handle , "luna://com.webos.service.tvpower/power/getPowerState" , "{\"subscribe\":true}" , power_callback , (void * )service , NULL , lserror )) {
236
+ WARN ("Power state monitoring call failed: %s" , lserror -> message );
237
+ }
238
+
196
239
return true;
197
240
}
0 commit comments