@webos-tools/cli 3.2.0 → 3.2.1

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.
Files changed (152) hide show
  1. package/.eslintignore +1 -1
  2. package/.eslintrc.js +52 -52
  3. package/.vscode/c_cpp_properties.json +21 -0
  4. package/.vscode/launch.json +97 -0
  5. package/.vscode/settings.json +13 -0
  6. package/.vscode/tasks.json +32 -0
  7. package/APIs.js +79 -79
  8. package/CHANGELOG.md +11 -5
  9. package/LICENSE +201 -201
  10. package/bin/ares-config.js +1 -1
  11. package/bin/ares-device-info.js +30 -30
  12. package/bin/ares-generate.js +274 -274
  13. package/bin/ares-inspect.js +179 -179
  14. package/bin/ares-install.js +223 -223
  15. package/bin/ares-log.js +259 -259
  16. package/bin/ares-pull.js +156 -156
  17. package/bin/ares-push.js +155 -155
  18. package/bin/ares-server.js +174 -174
  19. package/bin/ares-setup-device.js +6 -10
  20. package/bin/ares-shell.js +132 -132
  21. package/bin/ares.js +166 -166
  22. package/files/conf/ares.json +1 -2
  23. package/files/conf/ipk.json +30 -30
  24. package/files/conf/novacom-devices.json +2 -2
  25. package/files/conf/query/query-app.json +14 -14
  26. package/files/conf/query/query-hosted.json +18 -18
  27. package/files/conf/query/query-package.json +10 -10
  28. package/files/conf/query/query-service.json +6 -6
  29. package/files/conf/webos_emul +27 -27
  30. package/files/conf-base/env/sdk-apollo.json +8 -8
  31. package/files/conf-base/env/sdk-ose.json +8 -8
  32. package/files/conf-base/env/sdk-tv.json +8 -8
  33. package/files/conf-base/profile/config-apollo.json +29 -29
  34. package/files/conf-base/profile/config-ose.json +29 -29
  35. package/files/conf-base/profile/config-tv.json +31 -31
  36. package/files/conf-base/query/query-app.json +14 -14
  37. package/files/conf-base/query/query-hosted.json +18 -18
  38. package/files/conf-base/query/query-package.json +10 -10
  39. package/files/conf-base/query/query-service.json +6 -6
  40. package/files/conf-base/query/signage/query-app.json +1 -1
  41. package/files/conf-base/query/signage/query-service.json +1 -1
  42. package/files/conf-base/template-conf/ose-templates.json +67 -67
  43. package/files/conf-base/template-conf/tv-sdk-templates.json +57 -57
  44. package/files/help/ares-device.help +109 -109
  45. package/files/help/ares-install.help +95 -95
  46. package/files/help/ares-launch.help +1 -1
  47. package/files/help/ares-log-pmlogd.help +84 -84
  48. package/files/help/ares-log.help +101 -101
  49. package/files/help/ares-novacom.help +68 -68
  50. package/files/help/ares-pull.help +38 -38
  51. package/files/help/ares-push.help +38 -38
  52. package/files/help/ares-server.help +44 -44
  53. package/files/help/ares-shell.help +42 -42
  54. package/files/help/ares.help +52 -52
  55. package/files/help/readme.help +23 -23
  56. package/files/schema/ApplicationDescription.schema +319 -319
  57. package/files/templates/apollo-sdk-templates/appinfo/appinfo.json +10 -10
  58. package/files/templates/apollo-sdk-templates/bootplate-web/index.html +88 -88
  59. package/files/templates/apollo-sdk-templates/hosted-webapp/index.html +13 -13
  60. package/files/templates/apollo-sdk-templates/js-service/helloclient.js +31 -31
  61. package/files/templates/apollo-sdk-templates/js-service/helloworld_webos_service.js +188 -188
  62. package/files/templates/apollo-sdk-templates/serviceinfo/package.json +11 -11
  63. package/files/templates/apollo-sdk-templates/serviceinfo/services.json +8 -8
  64. package/files/templates/ose-sdk-templates/appinfo/appinfo.json +10 -10
  65. package/files/templates/ose-sdk-templates/bootplate-web/index.html +88 -88
  66. package/files/templates/ose-sdk-templates/hosted-webapp/index.html +13 -13
  67. package/files/templates/ose-sdk-templates/js-service/helloclient.js +31 -31
  68. package/files/templates/ose-sdk-templates/js-service/helloworld_webos_service.js +188 -188
  69. package/files/templates/ose-sdk-templates/qml-app/main.qml +68 -68
  70. package/files/templates/ose-sdk-templates/qmlappinfo/appinfo.json +10 -10
  71. package/files/templates/ose-sdk-templates/serviceinfo/package.json +11 -11
  72. package/files/templates/ose-sdk-templates/serviceinfo/services.json +8 -8
  73. package/files/templates/signage-sdk-templates/Backlight_Scheduling/index.html +1 -1
  74. package/files/templates/signage-sdk-templates/Backlight_Scheduling/scheduler.js +2 -3
  75. package/files/templates/signage-sdk-templates/File_Explorer/index.html +1 -33
  76. package/files/templates/signage-sdk-templates/File_Explorer/js/Root.js +0 -9
  77. package/files/templates/tv-sdk-templates/appinfo/appinfo.json +10 -10
  78. package/files/templates/tv-sdk-templates/bootplate-web/index.html +58 -58
  79. package/files/templates/tv-sdk-templates/bootplate-web/webOSTVjs-1.2.10/LICENSE-2.0.txt +202 -202
  80. package/files/templates/tv-sdk-templates/hosted-webapp/index.html +14 -14
  81. package/files/templates/tv-sdk-templates/js-service/helloworld_service.js +39 -39
  82. package/files/templates/tv-sdk-templates/packageinfo/packageinfo.json +3 -3
  83. package/files/templates/tv-sdk-templates/serviceinfo/package.json +11 -11
  84. package/files/templates/tv-sdk-templates/serviceinfo/services.json +8 -8
  85. package/lib/base/ares.html +40 -40
  86. package/lib/base/cli-appdata.js +290 -289
  87. package/lib/base/cli-control.js +44 -44
  88. package/lib/base/common-tools.js +29 -29
  89. package/lib/base/error-handler.js +265 -265
  90. package/lib/base/file-watcher.js +155 -155
  91. package/lib/base/help-format.js +147 -147
  92. package/lib/base/luna.js +178 -178
  93. package/lib/base/novacom.js +4 -4
  94. package/lib/base/sdkenv.js +59 -59
  95. package/lib/base/server.js +137 -137
  96. package/lib/base/setup-device.js +2 -2
  97. package/lib/base/version-tools.js +79 -79
  98. package/lib/device.js +1419 -1419
  99. package/lib/generator.js +1 -1
  100. package/lib/inspect.js +493 -493
  101. package/lib/log.js +584 -584
  102. package/lib/package.js +61 -7
  103. package/lib/pull.js +231 -231
  104. package/lib/pusher.js +210 -210
  105. package/lib/session.js +74 -74
  106. package/lib/shell.js +193 -193
  107. package/lib/tar-filter-pack.js +62 -62
  108. package/lib/util/copy.js +31 -31
  109. package/lib/util/createFileName.js +40 -40
  110. package/lib/util/eof.js +30 -30
  111. package/lib/util/json.js +63 -63
  112. package/lib/util/merge.js +14 -14
  113. package/lib/util/objclone.js +40 -40
  114. package/lib/util/spinner.js +37 -37
  115. package/npm-shrinkwrap.json +2 -2
  116. package/package.json +1 -1
  117. package/scripts/postinstall.js +24 -24
  118. package/spec/helpers/reporter.js +65 -65
  119. package/spec/jsSpecs/apiTest/generator.spec.js +372 -372
  120. package/spec/jsSpecs/apiTest/inspector.spec.js +89 -89
  121. package/spec/jsSpecs/apiTest/installer.spec.js +67 -67
  122. package/spec/jsSpecs/apiTest/launcher.spec.js +150 -150
  123. package/spec/jsSpecs/apiTest/packager.spec.js +194 -194
  124. package/spec/jsSpecs/apiTest/puller.spec.js +101 -101
  125. package/spec/jsSpecs/apiTest/pusher.spec.js +103 -103
  126. package/spec/jsSpecs/apiTest/server.spec.js +115 -115
  127. package/spec/jsSpecs/apiTest/setupDevice.spec.js +93 -93
  128. package/spec/jsSpecs/apiTest/shell.spec.js +49 -49
  129. package/spec/jsSpecs/ares-config.spec.js +88 -88
  130. package/spec/jsSpecs/ares-device.spec.js +443 -443
  131. package/spec/jsSpecs/ares-generate.spec.js +397 -401
  132. package/spec/jsSpecs/ares-inspect.spec.js +252 -252
  133. package/spec/jsSpecs/ares-install.spec.js +150 -150
  134. package/spec/jsSpecs/ares-log.spec.js +824 -824
  135. package/spec/jsSpecs/ares-novacom.spec.js +149 -149
  136. package/spec/jsSpecs/ares-pull.spec.js +157 -157
  137. package/spec/jsSpecs/ares-push.spec.js +146 -146
  138. package/spec/jsSpecs/ares-setup-device.spec.js +1 -0
  139. package/spec/jsSpecs/ares-shell.spec.js +220 -220
  140. package/spec/jsSpecs/ares.spec.js +83 -83
  141. package/spec/support/jasmine.json +22 -22
  142. package/spec/tempFiles/nativeApp/auto/pkg_arm64/appinfo.json +9 -9
  143. package/spec/tempFiles/nativeApp/ose/pkg_arm/appinfo.json +8 -8
  144. package/spec/tempFiles/nativeApp/ose/pkg_arm/package.properties +2 -2
  145. package/spec/tempFiles/nativeApp/oseEmul/pkg_x86/appinfo.json +9 -9
  146. package/spec/tempFiles/nativeApp/rsi/pkg_x86/appinfo.json +9 -9
  147. package/spec/tempFiles/sign/sign.crt +32 -32
  148. package/spec/tempFiles/sign/signPriv.key +52 -52
  149. package/spec/test_data/ares-generate.json +58 -91
  150. package/spec/test_data/ares.json +50 -50
  151. package/webos-tools-cli-3.2.1.tgz +0 -0
  152. package/webos-tools-cli-3.2.0.tgz +0 -0
@@ -1,31 +1,31 @@
1
- /*
2
- * Copyright (c) 2020-2024 LG Electronics Inc.
3
- *
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
-
7
- // helloclient.js
8
- // Subscribe & cancel subscription to helloService's heartbeat method
9
- const Service = require('webos-service');
10
-
11
- const service = new Service("com.example.helloclient"); // Register com.example.helloworld
12
-
13
- console.log("simple call");
14
- // Change @SERVICE-NAME@ to real service name
15
- service.call("luna://@SERVICE-NAME@/hello", {}, function(message) {
16
- console.log("call @SERVICE-NAME@/hello");
17
- console.log("message payload: " + JSON.stringify(message.payload));
18
- const sub = service.subscribe("luna://@SERVICE-NAME@/heartbeat", {subscribe: true});
19
- const max = 10;
20
- let count = 0;
21
- sub.addListener("response", function(msg) {
22
- console.log(JSON.stringify(msg.payload));
23
- if (++count >= max) {
24
- sub.cancel();
25
- setTimeout(function() {
26
- console.log(max+" responses received, exiting...");
27
- process.exit(0);
28
- }, 1000);
29
- }
30
- });
31
- });
1
+ /*
2
+ * Copyright (c) 2020-2024 LG Electronics Inc.
3
+ *
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ // helloclient.js
8
+ // Subscribe & cancel subscription to helloService's heartbeat method
9
+ const Service = require('webos-service');
10
+
11
+ const service = new Service("com.example.helloclient"); // Register com.example.helloworld
12
+
13
+ console.log("simple call");
14
+ // Change @SERVICE-NAME@ to real service name
15
+ service.call("luna://@SERVICE-NAME@/hello", {}, function(message) {
16
+ console.log("call @SERVICE-NAME@/hello");
17
+ console.log("message payload: " + JSON.stringify(message.payload));
18
+ const sub = service.subscribe("luna://@SERVICE-NAME@/heartbeat", {subscribe: true});
19
+ const max = 10;
20
+ let count = 0;
21
+ sub.addListener("response", function(msg) {
22
+ console.log(JSON.stringify(msg.payload));
23
+ if (++count >= max) {
24
+ sub.cancel();
25
+ setTimeout(function() {
26
+ console.log(max+" responses received, exiting...");
27
+ process.exit(0);
28
+ }, 1000);
29
+ }
30
+ });
31
+ });
@@ -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
+ }
@@ -12,7 +12,7 @@
12
12
 
13
13
  <!-- Include IDCAP API Library -->
14
14
 
15
- <script type="text/javascript" src="./js/idcap.js"></script>
15
+ <script type="text/javascript" src="./js/idcap.js"></script>
16
16
 
17
17
  <!-- Script Files -->
18
18
  <script src = './setanddelete.js'></script>