@webos-tools/cli 3.2.1 → 3.2.2

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 (149) hide show
  1. package/.eslintignore +1 -1
  2. package/.eslintrc.js +52 -52
  3. package/APIs.js +79 -79
  4. package/CHANGELOG.md +7 -0
  5. package/LICENSE +201 -201
  6. package/bin/ares-config.js +0 -0
  7. package/bin/ares-device-info.js +30 -30
  8. package/bin/ares-device.js +0 -0
  9. package/bin/ares-generate.js +274 -274
  10. package/bin/ares-inspect.js +179 -179
  11. package/bin/ares-install.js +223 -223
  12. package/bin/ares-launch.js +0 -0
  13. package/bin/ares-log.js +258 -258
  14. package/bin/ares-novacom.js +0 -0
  15. package/bin/ares-package.js +0 -0
  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 +0 -0
  20. package/bin/ares-shell.js +132 -132
  21. package/bin/ares.js +166 -166
  22. package/files/conf/ipk.json +30 -30
  23. package/files/conf/query/query-app.json +14 -14
  24. package/files/conf/query/query-hosted.json +18 -18
  25. package/files/conf/query/query-package.json +10 -10
  26. package/files/conf/query/query-service.json +6 -6
  27. package/files/conf/webos_emul +27 -27
  28. package/files/conf-base/env/sdk-apollo.json +7 -7
  29. package/files/conf-base/env/sdk-ose.json +8 -8
  30. package/files/conf-base/env/sdk-tv.json +8 -8
  31. package/files/conf-base/profile/config-apollo.json +28 -28
  32. package/files/conf-base/profile/config-ose.json +29 -29
  33. package/files/conf-base/profile/config-tv.json +31 -31
  34. package/files/conf-base/query/query-app.json +14 -14
  35. package/files/conf-base/query/query-hosted.json +18 -18
  36. package/files/conf-base/query/query-package.json +10 -10
  37. package/files/conf-base/query/query-service.json +6 -6
  38. package/files/conf-base/template-conf/ose-templates.json +67 -67
  39. package/files/conf-base/template-conf/tv-sdk-templates.json +57 -57
  40. package/files/help/ares-device.help +109 -109
  41. package/files/help/ares-install.help +95 -95
  42. package/files/help/ares-log-pmlogd.help +84 -84
  43. package/files/help/ares-log.help +101 -101
  44. package/files/help/ares-novacom.help +68 -68
  45. package/files/help/ares-pull.help +38 -38
  46. package/files/help/ares-push.help +38 -38
  47. package/files/help/ares-server.help +44 -44
  48. package/files/help/ares-shell.help +42 -42
  49. package/files/help/ares.help +52 -52
  50. package/files/help/readme.help +23 -23
  51. package/files/schema/ApplicationDescription.schema +319 -319
  52. package/files/templates/apollo-sdk-templates/appinfo/appinfo.json +10 -10
  53. package/files/templates/apollo-sdk-templates/bootplate-web/index.html +88 -88
  54. package/files/templates/apollo-sdk-templates/hosted-webapp/index.html +13 -13
  55. package/files/templates/apollo-sdk-templates/js-service/helloclient.js +31 -31
  56. package/files/templates/apollo-sdk-templates/js-service/helloworld_webos_service.js +188 -188
  57. package/files/templates/apollo-sdk-templates/serviceinfo/package.json +11 -11
  58. package/files/templates/apollo-sdk-templates/serviceinfo/services.json +8 -8
  59. package/files/templates/ose-sdk-templates/appinfo/appinfo.json +10 -10
  60. package/files/templates/ose-sdk-templates/bootplate-web/index.html +88 -88
  61. package/files/templates/ose-sdk-templates/hosted-webapp/index.html +13 -13
  62. package/files/templates/ose-sdk-templates/icon/icon.png +0 -0
  63. package/files/templates/ose-sdk-templates/js-service/helloclient.js +31 -31
  64. package/files/templates/ose-sdk-templates/js-service/helloworld_webos_service.js +188 -188
  65. package/files/templates/ose-sdk-templates/qml-app/main.qml +68 -68
  66. package/files/templates/ose-sdk-templates/qmlappinfo/appinfo.json +10 -10
  67. package/files/templates/ose-sdk-templates/serviceinfo/package.json +11 -11
  68. package/files/templates/ose-sdk-templates/serviceinfo/services.json +8 -8
  69. package/files/templates/tv-sdk-templates/appinfo/appinfo.json +10 -10
  70. package/files/templates/tv-sdk-templates/bootplate-web/index.html +58 -58
  71. package/files/templates/tv-sdk-templates/bootplate-web/webOSTVjs-1.2.10/LICENSE-2.0.txt +202 -202
  72. package/files/templates/tv-sdk-templates/hosted-webapp/index.html +14 -14
  73. package/files/templates/tv-sdk-templates/js-service/helloworld_service.js +39 -39
  74. package/files/templates/tv-sdk-templates/packageinfo/packageinfo.json +3 -3
  75. package/files/templates/tv-sdk-templates/serviceinfo/package.json +11 -11
  76. package/files/templates/tv-sdk-templates/serviceinfo/services.json +8 -8
  77. package/files/templates/tv-sdk-templates/webicon/icon.png +0 -0
  78. package/files/templates/tv-sdk-templates/webicon/largeIcon.png +0 -0
  79. package/lib/base/ares.html +40 -40
  80. package/lib/base/cli-appdata.js +290 -290
  81. package/lib/base/cli-control.js +44 -44
  82. package/lib/base/common-tools.js +29 -29
  83. package/lib/base/error-handler.js +265 -265
  84. package/lib/base/file-watcher.js +155 -155
  85. package/lib/base/help-format.js +147 -147
  86. package/lib/base/luna.js +178 -178
  87. package/lib/base/sdkenv.js +59 -59
  88. package/lib/base/server.js +137 -137
  89. package/lib/base/version-tools.js +79 -79
  90. package/lib/device.js +1419 -1419
  91. package/lib/inspect.js +493 -493
  92. package/lib/log.js +584 -584
  93. package/lib/package.js +1 -3
  94. package/lib/pull.js +231 -231
  95. package/lib/pusher.js +210 -210
  96. package/lib/session.js +74 -74
  97. package/lib/shell.js +193 -193
  98. package/lib/tar-filter-pack.js +62 -62
  99. package/lib/util/copy.js +31 -31
  100. package/lib/util/createFileName.js +40 -40
  101. package/lib/util/eof.js +30 -30
  102. package/lib/util/json.js +63 -63
  103. package/lib/util/merge.js +14 -14
  104. package/lib/util/objclone.js +40 -40
  105. package/lib/util/spinner.js +37 -37
  106. package/npm-shrinkwrap.json +1 -1
  107. package/package.json +1 -1
  108. package/scripts/postinstall.js +24 -24
  109. package/spec/helpers/reporter.js +65 -65
  110. package/spec/jsSpecs/apiTest/generator.spec.js +372 -372
  111. package/spec/jsSpecs/apiTest/inspector.spec.js +89 -89
  112. package/spec/jsSpecs/apiTest/installer.spec.js +67 -67
  113. package/spec/jsSpecs/apiTest/launcher.spec.js +150 -150
  114. package/spec/jsSpecs/apiTest/packager.spec.js +194 -194
  115. package/spec/jsSpecs/apiTest/puller.spec.js +101 -101
  116. package/spec/jsSpecs/apiTest/pusher.spec.js +103 -103
  117. package/spec/jsSpecs/apiTest/server.spec.js +115 -115
  118. package/spec/jsSpecs/apiTest/setupDevice.spec.js +93 -93
  119. package/spec/jsSpecs/apiTest/shell.spec.js +49 -49
  120. package/spec/jsSpecs/ares-config.spec.js +88 -88
  121. package/spec/jsSpecs/ares-device.spec.js +443 -443
  122. package/spec/jsSpecs/ares-generate.spec.js +397 -397
  123. package/spec/jsSpecs/ares-inspect.spec.js +252 -252
  124. package/spec/jsSpecs/ares-install.spec.js +150 -150
  125. package/spec/jsSpecs/ares-log.spec.js +824 -824
  126. package/spec/jsSpecs/ares-novacom.spec.js +149 -149
  127. package/spec/jsSpecs/ares-pull.spec.js +157 -157
  128. package/spec/jsSpecs/ares-push.spec.js +146 -146
  129. package/spec/jsSpecs/ares-shell.spec.js +220 -220
  130. package/spec/jsSpecs/ares.spec.js +83 -83
  131. package/spec/support/jasmine.json +22 -22
  132. package/spec/tempFiles/nativeApp/auto/pkg_arm64/GLES2 +0 -0
  133. package/spec/tempFiles/nativeApp/auto/pkg_arm64/appinfo.json +9 -9
  134. package/spec/tempFiles/nativeApp/ose/pkg_arm/Hello +0 -0
  135. package/spec/tempFiles/nativeApp/ose/pkg_arm/appinfo.json +8 -8
  136. package/spec/tempFiles/nativeApp/ose/pkg_arm/package.properties +2 -2
  137. package/spec/tempFiles/nativeApp/oseEmul/pkg_x86/Hello +0 -0
  138. package/spec/tempFiles/nativeApp/oseEmul/pkg_x86/appinfo.json +9 -9
  139. package/spec/tempFiles/nativeApp/rsi/pkg_x86/GLES2 +0 -0
  140. package/spec/tempFiles/nativeApp/rsi/pkg_x86/appinfo.json +9 -9
  141. package/spec/tempFiles/sign/sign.crt +32 -32
  142. package/spec/tempFiles/sign/signPriv.key +52 -52
  143. package/spec/test_data/ares-generate.json +57 -57
  144. package/spec/test_data/ares.json +50 -50
  145. package/.vscode/c_cpp_properties.json +0 -21
  146. package/.vscode/launch.json +0 -97
  147. package/.vscode/settings.json +0 -13
  148. package/.vscode/tasks.json +0 -32
  149. package/webos-tools-cli-3.2.1.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
+ }
@@ -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
+ }