class JarvisService extends OS.application.BaseService constructor: (args) -> super "JarvisService", args @text = __("Jarvis({0}%)", 0.toString()) @iconclass = "fa fa-android" @nodes = [ {text: __("Status"), id: 1}, {text: __("Shutdown"), id: 3}, {text: __("Reboot"), id: 4}, {text: __("Exit service"), id: 2} ] @onchildselect = (e) => @action e init: () -> checklib = () => if not Antunnel.tunnel @error __("The Antunnel service is not started, please start it first") @_gui.pushService("Antunnel/AntunnelService") .catch (e) => @error e.toString(), e @quit() else @tunnel = Antunnel.tunnel @sub = new Antunnel.Subscriber("notification") @sub.onopen = () => #@sub.send Antunnel.Msg.DATA, new TextEncoder("utf-8").encode("Hello") console.log("Subscribed to notification channel") @sub.onerror = (e) => @error __("Error: {0}", new TextDecoder("utf-8").decode(e.data)), e #@sub = undefined @sub.onmessage = (e) => obj = JSON.parse(new TextDecoder("utf-8").decode(e.data)) if e.data # update the battery @text = __("Jarvis({0}%)", Math.round(obj.battery_percent).toString()) @update() @sub.onclose = () => @sub = undefined @notify __("Unsubscribed to the notification service") @quit() Antunnel.tunnel.subscribe @sub if not window.Antunnel console.log "require Antunnel" @_api.requires("pkg://Antunnel/main.js").then () => checklib() .catch (e) => @error __("Unable to load Antunnel: {0}",e.toString()), e @quit() else checklib() action: (e) -> switch e.data.item.data.id when 1 @_gui.launch "JarvisControl", [] when 2 @quit() when 3 @execute("poweroff") when 4 @execute("reboot") execute: (cmd) -> return unless @tunnel sub = new Antunnel.Subscriber("jarvis_control") sub.onopen = () => console.log("Subscribed to jarvis_control channel. Send the command") sub.send Antunnel.Msg.DATA, new TextEncoder("utf-8").encode(cmd) sub.close() sub.onerror = (e) => @error __("Error: {0}", new TextDecoder("utf-8").decode(e.data)), e #@sub = undefined sub.onclose = () => @notify __("Unsubscribed to the jarvis_control service") @tunnel.subscribe sub awake: () -> cleanup: () -> @sub.close() if @sub this.OS.register "JarvisService", JarvisService