xmpp.chapril.org-conversejs/src/modals/muc-commands.js

88 lines
3.3 KiB
JavaScript

import BootstrapModal from "./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>
*/
}
});