|
@@ -1,87 +0,0 @@
|
|
-import BootstrapModal from "plugins/modal/base.js";
|
|
|
|
-import { __ } from 'i18n';
|
|
|
|
-import { api, converse } from "@converse/headless/core";
|
|
|
|
-import log from "@converse/headless/log";
|
|
|
|
-import tpl_muc_commands_modal from "../templates/muc_commands-modal.js";
|
|
|
|
-
|
|
|
|
-const { Strophe, $iq, sizzle } = converse.env;
|
|
|
|
-const u = converse.env.utils;
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-export default BootstrapModal.extend({
|
|
|
|
- id: "muc-commands-modal",
|
|
|
|
-
|
|
|
|
- initialize () {
|
|
|
|
- this.commands = [];
|
|
|
|
- BootstrapModal.prototype.initialize.apply(this, arguments);
|
|
|
|
- this.listenTo(this.model, 'change', this.render);
|
|
|
|
- this.getCommands();
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- toHTML () {
|
|
|
|
- return tpl_muc_commands_modal(Object.assign(
|
|
|
|
- this.model.toJSON(), {
|
|
|
|
- 'commands': this.commands,
|
|
|
|
- 'display_name': __('Ad-hoc commands for %1$s', this.model.getDisplayName()),
|
|
|
|
- 'toggleCommandForm': ev => this.toggleCommandForm(ev)
|
|
|
|
- })
|
|
|
|
- );
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- async getCommands () {
|
|
|
|
- this.commands = await api.adhoc.getCommands(Strophe.getDomainFromJid(this.model.get('jid')));
|
|
|
|
- this.render();
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- async toggleCommandForm (ev) {
|
|
|
|
- ev.preventDefault();
|
|
|
|
- const node = ev.target.getAttribute('data-command-node');
|
|
|
|
- this.commands.filter(c => (c.node !== node)).forEach(c => (c.show_form = false));
|
|
|
|
- const cmd = this.commands.filter(c => c.node === node)[0];
|
|
|
|
- cmd.show_form = !cmd.show_form;
|
|
|
|
- cmd.show_form && await this.fetchCommandForm(cmd);
|
|
|
|
- this.render();
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- async fetchCommandForm (command) {
|
|
|
|
- const node = command.node;
|
|
|
|
- const jid = command.jid;
|
|
|
|
- const stanza = $iq({
|
|
|
|
- 'type': 'set',
|
|
|
|
- 'to': jid
|
|
|
|
- }).c('command', {
|
|
|
|
- 'xmlns': Strophe.NS.ADHOC,
|
|
|
|
- 'node': node,
|
|
|
|
- 'action': 'execute'
|
|
|
|
- });
|
|
|
|
- command.fields;
|
|
|
|
- try {
|
|
|
|
- const iq = await api.sendIQ(stanza);
|
|
|
|
- command.fields = sizzle('field', iq).map(f => u.xForm2TemplateResult(f, iq))
|
|
|
|
- } catch (e) {
|
|
|
|
- if (e === null) {
|
|
|
|
- log.error(`Error: timeout while trying to execute command for ${jid}`);
|
|
|
|
- } else {
|
|
|
|
- log.error(`Error while trying to execute command for ${jid}`);
|
|
|
|
- log.error(e);
|
|
|
|
- }
|
|
|
|
- command.fields = [];
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /*
|
|
|
|
- <iq xmlns="jabber:client" id="72c21b57-5e9f-4b63-9e53-c6e69ed3337e:sendIQ" type="result" from="conference.chat.example.org" to="arzu.horsten@chat.example.org/converse.js-138545405">
|
|
|
|
- <command xmlns="http://jabber.org/protocol/commands" node="http://prosody.im/protocol/hats#add" sessionid="141a571b-37e2-4891-824f-72ca4b64806f" status="executing">
|
|
|
|
- <x xmlns="jabber:x:data" type="form">
|
|
|
|
- <title>Add a hat</title>
|
|
|
|
- <instructions>Assign a hat to a room member</instructions>
|
|
|
|
- <field label="User JID" type="jid-single" var="user"><required/></field>
|
|
|
|
- <field label="Room JID" type="jid-single" var="room"><required/></field>
|
|
|
|
- <field label="Hat title" type="text-single" var="title"/>
|
|
|
|
- <field label="Hat URI" type="text-single" var="uri"><required/></field>
|
|
|
|
- </x>
|
|
|
|
- <actions execute="complete"><next/><complete/></actions>
|
|
|
|
- </command>
|
|
|
|
- </iq>
|
|
|
|
- */
|
|
|
|
- }
|
|
|
|
-});
|
|
|