@webos-tools/cli 3.0.4 → 3.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintignore +1 -1
- package/.eslintrc.js +52 -52
- package/APIs.js +79 -79
- package/CHANGELOG.md +128 -128
- package/LICENSE +201 -201
- package/README.md +218 -218
- package/bin/ares-config.js +199 -199
- package/bin/ares-device-info.js +30 -30
- package/bin/ares-device.js +219 -219
- package/bin/ares-generate.js +270 -270
- package/bin/ares-inspect.js +179 -179
- package/bin/ares-install.js +223 -223
- package/bin/ares-launch.js +318 -318
- package/bin/ares-log.js +255 -255
- package/bin/ares-novacom.js +223 -223
- package/bin/ares-package.js +336 -336
- package/bin/ares-pull.js +156 -156
- package/bin/ares-push.js +155 -155
- package/bin/ares-server.js +174 -174
- package/bin/ares-setup-device.js +520 -520
- package/bin/ares-shell.js +132 -132
- package/bin/ares.js +166 -166
- package/files/conf/ares.json +49 -49
- package/files/conf/command-service.json +73 -73
- package/files/conf/config.json +22 -22
- package/files/conf/ipk.json +30 -30
- package/files/conf/novacom-devices.json +35 -35
- package/files/conf/query/query-app.json +14 -14
- package/files/conf/query/query-hosted.json +18 -18
- package/files/conf/query/query-package.json +10 -10
- package/files/conf/query/query-service.json +6 -6
- package/files/conf/sdk.json +8 -8
- package/files/conf/template.json +57 -57
- package/files/conf/webos_emul +27 -27
- package/files/conf-base/env/sdk-ose.json +8 -8
- package/files/conf-base/env/sdk-tv.json +8 -8
- package/files/conf-base/profile/config-ose.json +21 -21
- package/files/conf-base/profile/config-tv.json +22 -22
- package/files/conf-base/query/query-app.json +14 -14
- package/files/conf-base/query/query-hosted.json +18 -18
- package/files/conf-base/query/query-package.json +10 -10
- package/files/conf-base/query/query-service.json +6 -6
- package/files/conf-base/template-conf/ose-templates.json +67 -67
- package/files/conf-base/template-conf/tv-sdk-templates.json +57 -57
- package/files/help/ares-config.help +43 -43
- package/files/help/ares-device.help +94 -94
- package/files/help/ares-generate.help +65 -65
- package/files/help/ares-inspect.help +70 -70
- package/files/help/ares-install.help +90 -90
- package/files/help/ares-launch.help +100 -100
- package/files/help/ares-log-pmlogd.help +84 -84
- package/files/help/ares-log.help +101 -101
- package/files/help/ares-novacom.help +68 -68
- package/files/help/ares-package.help +101 -101
- package/files/help/ares-pull.help +38 -38
- package/files/help/ares-push.help +38 -38
- package/files/help/ares-server.help +39 -39
- package/files/help/ares-setup-device.help +75 -75
- package/files/help/ares-shell.help +42 -42
- package/files/help/ares.help +47 -47
- package/files/help/readme.help +23 -23
- package/files/schema/ApplicationDescription.schema +319 -319
- package/files/schema/NovacomDevices.schema +61 -61
- package/files/templates/ose-sdk-templates/appinfo/appinfo.json +10 -10
- package/files/templates/ose-sdk-templates/bootplate-web/index.html +88 -88
- package/files/templates/ose-sdk-templates/hosted-webapp/index.html +13 -13
- package/files/templates/ose-sdk-templates/icon/icon.png +0 -0
- package/files/templates/ose-sdk-templates/js-service/helloclient.js +31 -31
- package/files/templates/ose-sdk-templates/js-service/helloworld_webos_service.js +188 -188
- package/files/templates/ose-sdk-templates/qml-app/main.qml +68 -68
- package/files/templates/ose-sdk-templates/qmlappinfo/appinfo.json +10 -10
- package/files/templates/ose-sdk-templates/serviceinfo/package.json +11 -11
- package/files/templates/ose-sdk-templates/serviceinfo/services.json +8 -8
- package/files/templates/tv-sdk-templates/appinfo/appinfo.json +10 -10
- package/files/templates/tv-sdk-templates/bootplate-web/index.html +58 -58
- package/files/templates/tv-sdk-templates/bootplate-web/webOSTVjs-1.2.10/LICENSE-2.0.txt +202 -202
- package/files/templates/tv-sdk-templates/hosted-webapp/index.html +14 -14
- package/files/templates/tv-sdk-templates/js-service/helloworld_service.js +39 -39
- package/files/templates/tv-sdk-templates/packageinfo/packageinfo.json +3 -3
- package/files/templates/tv-sdk-templates/serviceinfo/package.json +11 -11
- package/files/templates/tv-sdk-templates/serviceinfo/services.json +8 -8
- package/files/templates/tv-sdk-templates/webicon/icon.png +0 -0
- package/files/templates/tv-sdk-templates/webicon/largeIcon.png +0 -0
- package/lib/base/ares.html +40 -40
- package/lib/base/cli-appdata.js +290 -290
- package/lib/base/cli-control.js +44 -44
- package/lib/base/common-tools.js +29 -29
- package/lib/base/error-handler.js +265 -265
- package/lib/base/file-watcher.js +155 -155
- package/lib/base/help-format.js +147 -147
- package/lib/base/luna.js +178 -178
- package/lib/base/novacom.js +1191 -1191
- package/lib/base/sdkenv.js +59 -59
- package/lib/base/server.js +137 -137
- package/lib/base/setup-device.js +328 -328
- package/lib/base/version-tools.js +79 -79
- package/lib/device.js +1419 -1419
- package/lib/generator.js +377 -377
- package/lib/inspect.js +494 -494
- package/lib/install.js +463 -463
- package/lib/launch.js +605 -605
- package/lib/log.js +584 -584
- package/lib/package.js +2129 -2129
- package/lib/pull.js +231 -231
- package/lib/pusher.js +210 -210
- package/lib/session.js +74 -74
- package/lib/shell.js +193 -193
- package/lib/tar-filter-pack.js +62 -62
- package/lib/util/copy.js +31 -31
- package/lib/util/createFileName.js +40 -40
- package/lib/util/eof.js +30 -30
- package/lib/util/json.js +63 -63
- package/lib/util/merge.js +14 -14
- package/lib/util/objclone.js +40 -40
- package/lib/util/spinner.js +37 -37
- package/npm-shrinkwrap.json +9115 -9115
- package/package.json +100 -100
- package/scripts/postinstall.js +24 -24
- package/spec/helpers/reporter.js +65 -65
- package/spec/jsSpecs/apiTest/generator.spec.js +372 -372
- package/spec/jsSpecs/apiTest/inspector.spec.js +89 -89
- package/spec/jsSpecs/apiTest/installer.spec.js +67 -67
- package/spec/jsSpecs/apiTest/launcher.spec.js +150 -150
- package/spec/jsSpecs/apiTest/packager.spec.js +194 -194
- package/spec/jsSpecs/apiTest/puller.spec.js +101 -101
- package/spec/jsSpecs/apiTest/pusher.spec.js +103 -103
- package/spec/jsSpecs/apiTest/server.spec.js +115 -115
- package/spec/jsSpecs/apiTest/setupDevice.spec.js +93 -93
- package/spec/jsSpecs/apiTest/shell.spec.js +49 -49
- package/spec/jsSpecs/ares-config.spec.js +78 -78
- package/spec/jsSpecs/ares-device.spec.js +443 -443
- package/spec/jsSpecs/ares-generate.spec.js +397 -397
- package/spec/jsSpecs/ares-inspect.spec.js +252 -252
- package/spec/jsSpecs/ares-install.spec.js +150 -150
- package/spec/jsSpecs/ares-launch.spec.js +301 -301
- package/spec/jsSpecs/ares-log.spec.js +824 -824
- package/spec/jsSpecs/ares-novacom.spec.js +149 -149
- package/spec/jsSpecs/ares-package.spec.js +1211 -1211
- package/spec/jsSpecs/ares-pull.spec.js +157 -157
- package/spec/jsSpecs/ares-push.spec.js +146 -146
- package/spec/jsSpecs/ares-server.spec.js +160 -160
- package/spec/jsSpecs/ares-setup-device.spec.js +281 -281
- package/spec/jsSpecs/ares-shell.spec.js +220 -220
- package/spec/jsSpecs/ares.spec.js +83 -83
- package/spec/jsSpecs/common-spec.js +169 -169
- package/spec/support/jasmine.json +22 -22
- package/spec/tempFiles/nativeApp/auto/pkg_arm64/GLES2 +0 -0
- package/spec/tempFiles/nativeApp/auto/pkg_arm64/appinfo.json +9 -9
- package/spec/tempFiles/nativeApp/ose/pkg_arm/Hello +0 -0
- package/spec/tempFiles/nativeApp/ose/pkg_arm/appinfo.json +8 -8
- package/spec/tempFiles/nativeApp/ose/pkg_arm/package.properties +2 -2
- package/spec/tempFiles/nativeApp/oseEmul/pkg_x86/Hello +0 -0
- package/spec/tempFiles/nativeApp/oseEmul/pkg_x86/appinfo.json +9 -9
- package/spec/tempFiles/nativeApp/rsi/pkg_x86/GLES2 +0 -0
- package/spec/tempFiles/nativeApp/rsi/pkg_x86/appinfo.json +9 -9
- package/spec/tempFiles/sign/sign.crt +32 -32
- package/spec/tempFiles/sign/signPriv.key +52 -52
- package/spec/test_data/ares-generate.json +41 -41
- package/spec/test_data/ares.json +33 -33
|
@@ -1,188 +1,188 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2020-2024 LG Electronics Inc.
|
|
3
|
-
*
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
// helloworld_webos_service.js
|
|
8
|
-
// is simple service, based on low-level luna-bus API
|
|
9
|
-
|
|
10
|
-
// eslint-disable-next-line import/no-unresolved
|
|
11
|
-
const pkgInfo = require('./package.json');
|
|
12
|
-
const Service = require('webos-service');
|
|
13
|
-
|
|
14
|
-
const service = new Service(pkgInfo.name); // Create service by service name on package.json
|
|
15
|
-
const logHeader = "[" + pkgInfo.name + "]";
|
|
16
|
-
let greeting = "Hello, World!";
|
|
17
|
-
|
|
18
|
-
// a method that always returns the same value
|
|
19
|
-
service.register("hello", function(message) {
|
|
20
|
-
console.log(logHeader, "SERVICE_METHOD_CALLED:/hello");
|
|
21
|
-
console.log("In hello callback");
|
|
22
|
-
const name = message.payload.name ? message.payload.name : "World";
|
|
23
|
-
|
|
24
|
-
message.respond({
|
|
25
|
-
returnValue: true,
|
|
26
|
-
Response: "Hello, " + name + "!"
|
|
27
|
-
});
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
// set some state in the service
|
|
31
|
-
service.register("/config/setGreeting", function(message) {
|
|
32
|
-
console.log(logHeader, "SERVICE_METHOD_CALLED:/config/setGreeting");
|
|
33
|
-
console.log("In setGreeting callback");
|
|
34
|
-
if (message.payload.greeting) {
|
|
35
|
-
greeting = message.payload.greeting;
|
|
36
|
-
} else {
|
|
37
|
-
message.respond({
|
|
38
|
-
returnValue: false,
|
|
39
|
-
errorText: "argument 'greeting' is required",
|
|
40
|
-
errorCode: 1
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
message.respond({
|
|
44
|
-
returnValue: true,
|
|
45
|
-
greeting: greeting
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
// call another service
|
|
50
|
-
service.register("time", function(message) {
|
|
51
|
-
console.log(logHeader, "SERVICE_METHOD_CALLED:/time");
|
|
52
|
-
console.log("time callback");
|
|
53
|
-
service.call("luna://com.webos.service.systemservice/clock/getTime", {}, function(m2) {
|
|
54
|
-
console.log(logHeader, "SERVICE_METHOD_CALLED:com.webos.service.systemservice/clock/getTime");
|
|
55
|
-
const response = "You appear to have your UTC set to: " + m2.payload.utc;
|
|
56
|
-
console.log(response);
|
|
57
|
-
message.respond({message: response});
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
// handle subscription requests
|
|
62
|
-
const subscriptions = {};
|
|
63
|
-
let interval;
|
|
64
|
-
let x = 1;
|
|
65
|
-
function createInterval() {
|
|
66
|
-
if (interval) {
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
console.log(logHeader, "create_interval");
|
|
70
|
-
console.log("create new interval");
|
|
71
|
-
interval = setInterval(function() {
|
|
72
|
-
sendResponses();
|
|
73
|
-
}, 1000);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
// send responses to each subscribed client
|
|
77
|
-
function sendResponses() {
|
|
78
|
-
console.log(logHeader, "send_response");
|
|
79
|
-
console.log("Sending responses, subscription count=" + Object.keys(subscriptions).length);
|
|
80
|
-
for (const i in subscriptions) {
|
|
81
|
-
if (Object.prototype.hasOwnProperty.call(subscriptions, i)) {
|
|
82
|
-
const s = subscriptions[i];
|
|
83
|
-
s.respond({
|
|
84
|
-
returnValue: true,
|
|
85
|
-
event: "beat " + x
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
x++;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// listen for requests, and handle subscriptions via implicit event handlers in call
|
|
93
|
-
// to register
|
|
94
|
-
service.register("heartbeat", function(message) {
|
|
95
|
-
const uniqueToken = message.uniqueToken;
|
|
96
|
-
console.log(logHeader, "SERVICE_METHOD_CALLED:/heartbeat");
|
|
97
|
-
console.log("heartbeat callback, uniqueToken: " + uniqueToken + ", token: " + message.token);
|
|
98
|
-
message.respond({event: "beat"});
|
|
99
|
-
if (message.isSubscription) {
|
|
100
|
-
subscriptions[uniqueToken] = message;
|
|
101
|
-
if (!interval) {
|
|
102
|
-
createInterval();
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
},
|
|
106
|
-
function(message) {
|
|
107
|
-
const uniqueToken = message.uniqueToken;
|
|
108
|
-
console.log("Canceled " + uniqueToken);
|
|
109
|
-
delete subscriptions[uniqueToken];
|
|
110
|
-
const keys = Object.keys(subscriptions);
|
|
111
|
-
if (keys.length === 0) {
|
|
112
|
-
console.log("no more subscriptions, canceling interval");
|
|
113
|
-
clearInterval(interval);
|
|
114
|
-
interval = undefined;
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
// EventEmitter-based API for subscriptions
|
|
119
|
-
// note that the previous examples are actually using this API as well, they're
|
|
120
|
-
// just setting a "request" handler implicitly
|
|
121
|
-
const heartbeat2 = service.register("heartbeat2");
|
|
122
|
-
heartbeat2.on("request", function(message) {
|
|
123
|
-
console.log(logHeader, "SERVICE_METHOD_CALLED:/heartbeat2/request");
|
|
124
|
-
console.log("heartbeat callback");
|
|
125
|
-
message.respond({event: "beat"});
|
|
126
|
-
if (message.isSubscription) {
|
|
127
|
-
subscriptions[message.uniqueToken] = message;
|
|
128
|
-
if (!interval) {
|
|
129
|
-
createInterval();
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
});
|
|
133
|
-
heartbeat2.on("cancel", function(message) {
|
|
134
|
-
console.log(logHeader, "SERVICE_METHOD_CALLED:/heartbeat2/cancel");
|
|
135
|
-
console.log("Canceled " + message.uniqueToken);
|
|
136
|
-
delete subscriptions[message.uniqueToken];
|
|
137
|
-
const keys = Object.keys(subscriptions);
|
|
138
|
-
if (keys.length === 0) {
|
|
139
|
-
console.log("no more subscriptions, canceling interval");
|
|
140
|
-
clearInterval(interval);
|
|
141
|
-
interval = undefined;
|
|
142
|
-
}
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
service.register("ping", function(message) {
|
|
146
|
-
console.log(logHeader, "SERVICE_METHOD_CALLED:/ping");
|
|
147
|
-
console.log("Ping! setting up activity");
|
|
148
|
-
const methodName = "luna://" + pkgInfo.name + "/pong";
|
|
149
|
-
const activitySpec = {
|
|
150
|
-
"activity": {
|
|
151
|
-
"name": "My Activity", // this needs to be unique, per service
|
|
152
|
-
"description": "do something", // required
|
|
153
|
-
"background": true, // can use foreground or background, or set individual properties (see Activity Specification below, for details)
|
|
154
|
-
"persist": true, // this activity will be persistent across reboots
|
|
155
|
-
"explicit": true, // this activity *must* be completed or cancelled explicitly, or it will be re-launched until it does
|
|
156
|
-
"callback": { // what service to call when this activity starts
|
|
157
|
-
"method": methodName, // URI to service
|
|
158
|
-
"params": { // parameters/arguments to pass to service
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
},
|
|
162
|
-
"start": true, // start the activity immediately when its requirements (if any) are met
|
|
163
|
-
"replace": true, // if an activity with the same name already exists, replace it
|
|
164
|
-
"subscribe": false // if "subscribe" is false, the activity needs to be adopted immediately, or it gets canceled
|
|
165
|
-
};
|
|
166
|
-
service.call("luna://com.webos.service.activitymanager/create", activitySpec, function(reply) {
|
|
167
|
-
console.log(logHeader, "SERVICE_METHOD_CALLED:com.webos.service.activitymanager/create");
|
|
168
|
-
const activityId = reply.payload.activityId;
|
|
169
|
-
console.log("ActivityId = " + activityId);
|
|
170
|
-
message.respond({msg: "Created activity "+ activityId});
|
|
171
|
-
});
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
service.register("pong", function(message) {
|
|
175
|
-
console.log(logHeader, "SERVICE_METHOD_CALLED:/pong");
|
|
176
|
-
console.log("Pong!");
|
|
177
|
-
console.log(message.payload);
|
|
178
|
-
message.respond({message: "Pong"});
|
|
179
|
-
});
|
|
180
|
-
|
|
181
|
-
service.register("/do/re/me", function(message) {
|
|
182
|
-
console.log(logHeader, "SERVICE_METHOD_CALLED://do/re/me");
|
|
183
|
-
message.respond({verses:[
|
|
184
|
-
{doe: "a deer, a female deer"},
|
|
185
|
-
{ray: "a drop of golden sun"},
|
|
186
|
-
{me: "a name I call myself"}
|
|
187
|
-
]});
|
|
188
|
-
});
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2020-2024 LG Electronics Inc.
|
|
3
|
+
*
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
// helloworld_webos_service.js
|
|
8
|
+
// is simple service, based on low-level luna-bus API
|
|
9
|
+
|
|
10
|
+
// eslint-disable-next-line import/no-unresolved
|
|
11
|
+
const pkgInfo = require('./package.json');
|
|
12
|
+
const Service = require('webos-service');
|
|
13
|
+
|
|
14
|
+
const service = new Service(pkgInfo.name); // Create service by service name on package.json
|
|
15
|
+
const logHeader = "[" + pkgInfo.name + "]";
|
|
16
|
+
let greeting = "Hello, World!";
|
|
17
|
+
|
|
18
|
+
// a method that always returns the same value
|
|
19
|
+
service.register("hello", function(message) {
|
|
20
|
+
console.log(logHeader, "SERVICE_METHOD_CALLED:/hello");
|
|
21
|
+
console.log("In hello callback");
|
|
22
|
+
const name = message.payload.name ? message.payload.name : "World";
|
|
23
|
+
|
|
24
|
+
message.respond({
|
|
25
|
+
returnValue: true,
|
|
26
|
+
Response: "Hello, " + name + "!"
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
// set some state in the service
|
|
31
|
+
service.register("/config/setGreeting", function(message) {
|
|
32
|
+
console.log(logHeader, "SERVICE_METHOD_CALLED:/config/setGreeting");
|
|
33
|
+
console.log("In setGreeting callback");
|
|
34
|
+
if (message.payload.greeting) {
|
|
35
|
+
greeting = message.payload.greeting;
|
|
36
|
+
} else {
|
|
37
|
+
message.respond({
|
|
38
|
+
returnValue: false,
|
|
39
|
+
errorText: "argument 'greeting' is required",
|
|
40
|
+
errorCode: 1
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
message.respond({
|
|
44
|
+
returnValue: true,
|
|
45
|
+
greeting: greeting
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
// call another service
|
|
50
|
+
service.register("time", function(message) {
|
|
51
|
+
console.log(logHeader, "SERVICE_METHOD_CALLED:/time");
|
|
52
|
+
console.log("time callback");
|
|
53
|
+
service.call("luna://com.webos.service.systemservice/clock/getTime", {}, function(m2) {
|
|
54
|
+
console.log(logHeader, "SERVICE_METHOD_CALLED:com.webos.service.systemservice/clock/getTime");
|
|
55
|
+
const response = "You appear to have your UTC set to: " + m2.payload.utc;
|
|
56
|
+
console.log(response);
|
|
57
|
+
message.respond({message: response});
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
// handle subscription requests
|
|
62
|
+
const subscriptions = {};
|
|
63
|
+
let interval;
|
|
64
|
+
let x = 1;
|
|
65
|
+
function createInterval() {
|
|
66
|
+
if (interval) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
console.log(logHeader, "create_interval");
|
|
70
|
+
console.log("create new interval");
|
|
71
|
+
interval = setInterval(function() {
|
|
72
|
+
sendResponses();
|
|
73
|
+
}, 1000);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// send responses to each subscribed client
|
|
77
|
+
function sendResponses() {
|
|
78
|
+
console.log(logHeader, "send_response");
|
|
79
|
+
console.log("Sending responses, subscription count=" + Object.keys(subscriptions).length);
|
|
80
|
+
for (const i in subscriptions) {
|
|
81
|
+
if (Object.prototype.hasOwnProperty.call(subscriptions, i)) {
|
|
82
|
+
const s = subscriptions[i];
|
|
83
|
+
s.respond({
|
|
84
|
+
returnValue: true,
|
|
85
|
+
event: "beat " + x
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
x++;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// listen for requests, and handle subscriptions via implicit event handlers in call
|
|
93
|
+
// to register
|
|
94
|
+
service.register("heartbeat", function(message) {
|
|
95
|
+
const uniqueToken = message.uniqueToken;
|
|
96
|
+
console.log(logHeader, "SERVICE_METHOD_CALLED:/heartbeat");
|
|
97
|
+
console.log("heartbeat callback, uniqueToken: " + uniqueToken + ", token: " + message.token);
|
|
98
|
+
message.respond({event: "beat"});
|
|
99
|
+
if (message.isSubscription) {
|
|
100
|
+
subscriptions[uniqueToken] = message;
|
|
101
|
+
if (!interval) {
|
|
102
|
+
createInterval();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
function(message) {
|
|
107
|
+
const uniqueToken = message.uniqueToken;
|
|
108
|
+
console.log("Canceled " + uniqueToken);
|
|
109
|
+
delete subscriptions[uniqueToken];
|
|
110
|
+
const keys = Object.keys(subscriptions);
|
|
111
|
+
if (keys.length === 0) {
|
|
112
|
+
console.log("no more subscriptions, canceling interval");
|
|
113
|
+
clearInterval(interval);
|
|
114
|
+
interval = undefined;
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
// EventEmitter-based API for subscriptions
|
|
119
|
+
// note that the previous examples are actually using this API as well, they're
|
|
120
|
+
// just setting a "request" handler implicitly
|
|
121
|
+
const heartbeat2 = service.register("heartbeat2");
|
|
122
|
+
heartbeat2.on("request", function(message) {
|
|
123
|
+
console.log(logHeader, "SERVICE_METHOD_CALLED:/heartbeat2/request");
|
|
124
|
+
console.log("heartbeat callback");
|
|
125
|
+
message.respond({event: "beat"});
|
|
126
|
+
if (message.isSubscription) {
|
|
127
|
+
subscriptions[message.uniqueToken] = message;
|
|
128
|
+
if (!interval) {
|
|
129
|
+
createInterval();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
heartbeat2.on("cancel", function(message) {
|
|
134
|
+
console.log(logHeader, "SERVICE_METHOD_CALLED:/heartbeat2/cancel");
|
|
135
|
+
console.log("Canceled " + message.uniqueToken);
|
|
136
|
+
delete subscriptions[message.uniqueToken];
|
|
137
|
+
const keys = Object.keys(subscriptions);
|
|
138
|
+
if (keys.length === 0) {
|
|
139
|
+
console.log("no more subscriptions, canceling interval");
|
|
140
|
+
clearInterval(interval);
|
|
141
|
+
interval = undefined;
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
service.register("ping", function(message) {
|
|
146
|
+
console.log(logHeader, "SERVICE_METHOD_CALLED:/ping");
|
|
147
|
+
console.log("Ping! setting up activity");
|
|
148
|
+
const methodName = "luna://" + pkgInfo.name + "/pong";
|
|
149
|
+
const activitySpec = {
|
|
150
|
+
"activity": {
|
|
151
|
+
"name": "My Activity", // this needs to be unique, per service
|
|
152
|
+
"description": "do something", // required
|
|
153
|
+
"background": true, // can use foreground or background, or set individual properties (see Activity Specification below, for details)
|
|
154
|
+
"persist": true, // this activity will be persistent across reboots
|
|
155
|
+
"explicit": true, // this activity *must* be completed or cancelled explicitly, or it will be re-launched until it does
|
|
156
|
+
"callback": { // what service to call when this activity starts
|
|
157
|
+
"method": methodName, // URI to service
|
|
158
|
+
"params": { // parameters/arguments to pass to service
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
"start": true, // start the activity immediately when its requirements (if any) are met
|
|
163
|
+
"replace": true, // if an activity with the same name already exists, replace it
|
|
164
|
+
"subscribe": false // if "subscribe" is false, the activity needs to be adopted immediately, or it gets canceled
|
|
165
|
+
};
|
|
166
|
+
service.call("luna://com.webos.service.activitymanager/create", activitySpec, function(reply) {
|
|
167
|
+
console.log(logHeader, "SERVICE_METHOD_CALLED:com.webos.service.activitymanager/create");
|
|
168
|
+
const activityId = reply.payload.activityId;
|
|
169
|
+
console.log("ActivityId = " + activityId);
|
|
170
|
+
message.respond({msg: "Created activity "+ activityId});
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
service.register("pong", function(message) {
|
|
175
|
+
console.log(logHeader, "SERVICE_METHOD_CALLED:/pong");
|
|
176
|
+
console.log("Pong!");
|
|
177
|
+
console.log(message.payload);
|
|
178
|
+
message.respond({message: "Pong"});
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
service.register("/do/re/me", function(message) {
|
|
182
|
+
console.log(logHeader, "SERVICE_METHOD_CALLED://do/re/me");
|
|
183
|
+
message.respond({verses:[
|
|
184
|
+
{doe: "a deer, a female deer"},
|
|
185
|
+
{ray: "a drop of golden sun"},
|
|
186
|
+
{me: "a name I call myself"}
|
|
187
|
+
]});
|
|
188
|
+
});
|
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2020-2024 LG Electronics Inc.
|
|
3
|
-
*
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import QtQuick 2.4
|
|
8
|
-
import WebOSServices 1.0
|
|
9
|
-
import Eos.Window 0.1
|
|
10
|
-
import PmLog 1.0
|
|
11
|
-
|
|
12
|
-
WebOSWindow {
|
|
13
|
-
id: root
|
|
14
|
-
width: 1920
|
|
15
|
-
height: 1080
|
|
16
|
-
visible: true
|
|
17
|
-
appId: "com.example.app.qml"
|
|
18
|
-
title: "QML app"
|
|
19
|
-
color: "lightblue"
|
|
20
|
-
displayAffinity: params["displayAffinity"]
|
|
21
|
-
|
|
22
|
-
Text {
|
|
23
|
-
id: mainText
|
|
24
|
-
anchors.centerIn: parent
|
|
25
|
-
font.family: "Helvetica"
|
|
26
|
-
font.pointSize: 50
|
|
27
|
-
text: "Hello, QML Application!!"
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
property var launchParams: params
|
|
31
|
-
onLaunchParamsChanged: {
|
|
32
|
-
pmLog.info("LAUNCH_PARAMS", {"params": launchParams})
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
Service {
|
|
36
|
-
id: systemService
|
|
37
|
-
appId: "com.example.app.qml"
|
|
38
|
-
|
|
39
|
-
function getTime() {
|
|
40
|
-
call("luna://com.webos.service.systemservice","/clock/getTime","{}")
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
onResponse: {
|
|
44
|
-
var jsonObject = JSON.parse(payload);
|
|
45
|
-
pmLog.info("GETTIME", {"utc": jsonObject.utc});
|
|
46
|
-
mainText.text = "UTC : " + jsonObject.utc
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
onError: {
|
|
50
|
-
var jsonObject = JSON.parse(payload);
|
|
51
|
-
pmLog.error("GETTIME", {"error": jsonObject});
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
MouseArea {
|
|
56
|
-
anchors.fill: parent
|
|
57
|
-
onClicked: systemService.getTime()
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
onWindowStateChanged: {
|
|
61
|
-
pmLog.info("WINDOW_CHANGED", {"status": windowState})
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
PmLog {
|
|
65
|
-
id: pmLog
|
|
66
|
-
context: "QMLApp"
|
|
67
|
-
}
|
|
68
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2020-2024 LG Electronics Inc.
|
|
3
|
+
*
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import QtQuick 2.4
|
|
8
|
+
import WebOSServices 1.0
|
|
9
|
+
import Eos.Window 0.1
|
|
10
|
+
import PmLog 1.0
|
|
11
|
+
|
|
12
|
+
WebOSWindow {
|
|
13
|
+
id: root
|
|
14
|
+
width: 1920
|
|
15
|
+
height: 1080
|
|
16
|
+
visible: true
|
|
17
|
+
appId: "com.example.app.qml"
|
|
18
|
+
title: "QML app"
|
|
19
|
+
color: "lightblue"
|
|
20
|
+
displayAffinity: params["displayAffinity"]
|
|
21
|
+
|
|
22
|
+
Text {
|
|
23
|
+
id: mainText
|
|
24
|
+
anchors.centerIn: parent
|
|
25
|
+
font.family: "Helvetica"
|
|
26
|
+
font.pointSize: 50
|
|
27
|
+
text: "Hello, QML Application!!"
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
property var launchParams: params
|
|
31
|
+
onLaunchParamsChanged: {
|
|
32
|
+
pmLog.info("LAUNCH_PARAMS", {"params": launchParams})
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
Service {
|
|
36
|
+
id: systemService
|
|
37
|
+
appId: "com.example.app.qml"
|
|
38
|
+
|
|
39
|
+
function getTime() {
|
|
40
|
+
call("luna://com.webos.service.systemservice","/clock/getTime","{}")
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
onResponse: {
|
|
44
|
+
var jsonObject = JSON.parse(payload);
|
|
45
|
+
pmLog.info("GETTIME", {"utc": jsonObject.utc});
|
|
46
|
+
mainText.text = "UTC : " + jsonObject.utc
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
onError: {
|
|
50
|
+
var jsonObject = JSON.parse(payload);
|
|
51
|
+
pmLog.error("GETTIME", {"error": jsonObject});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
MouseArea {
|
|
56
|
+
anchors.fill: parent
|
|
57
|
+
onClicked: systemService.getTime()
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
onWindowStateChanged: {
|
|
61
|
+
pmLog.info("WINDOW_CHANGED", {"status": windowState})
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
PmLog {
|
|
65
|
+
id: pmLog
|
|
66
|
+
context: "QMLApp"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "com.example.app.qml",
|
|
3
|
-
"version": "1.0.0",
|
|
4
|
-
"vendor": "My Company",
|
|
5
|
-
"type": "qml",
|
|
6
|
-
"main": "main.qml",
|
|
7
|
-
"title": "QML App",
|
|
8
|
-
"icon": "icon.png",
|
|
9
|
-
"requiredPermissions": ["time.query", "applications.operation"]
|
|
10
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"id": "com.example.app.qml",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"vendor": "My Company",
|
|
5
|
+
"type": "qml",
|
|
6
|
+
"main": "main.qml",
|
|
7
|
+
"title": "QML App",
|
|
8
|
+
"icon": "icon.png",
|
|
9
|
+
"requiredPermissions": ["time.query", "applications.operation"]
|
|
10
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "com.domain.app.service",
|
|
3
|
-
"version": "1.0.0",
|
|
4
|
-
"description": "Helloworld service",
|
|
5
|
-
"main": "helloworld_webos_service.js",
|
|
6
|
-
"scripts": {
|
|
7
|
-
"test": "echo \"Error: no test specified\" && exit 1"
|
|
8
|
-
},
|
|
9
|
-
"author": "",
|
|
10
|
-
"license": "BSD"
|
|
11
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "com.domain.app.service",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Helloworld service",
|
|
5
|
+
"main": "helloworld_webos_service.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
8
|
+
},
|
|
9
|
+
"author": "",
|
|
10
|
+
"license": "BSD"
|
|
11
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "com.domain.app.service",
|
|
3
|
-
"description": "HelloWorld Service",
|
|
4
|
-
"services": [ {
|
|
5
|
-
"name": "com.domain.app.service",
|
|
6
|
-
"description": "HelloWorld Service"
|
|
7
|
-
} ]
|
|
8
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"id": "com.domain.app.service",
|
|
3
|
+
"description": "HelloWorld Service",
|
|
4
|
+
"services": [ {
|
|
5
|
+
"name": "com.domain.app.service",
|
|
6
|
+
"description": "HelloWorld Service"
|
|
7
|
+
} ]
|
|
8
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "com.domain.app",
|
|
3
|
-
"version": "0.0.1",
|
|
4
|
-
"vendor": "My Company",
|
|
5
|
-
"type": "web",
|
|
6
|
-
"main": "index.html",
|
|
7
|
-
"title": "new app",
|
|
8
|
-
"icon": "icon.png",
|
|
9
|
-
"largeIcon": "largeIcon.png"
|
|
10
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"id": "com.domain.app",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"vendor": "My Company",
|
|
5
|
+
"type": "web",
|
|
6
|
+
"main": "index.html",
|
|
7
|
+
"title": "new app",
|
|
8
|
+
"icon": "icon.png",
|
|
9
|
+
"largeIcon": "largeIcon.png"
|
|
10
|
+
}
|