diff --git a/src/SlashCommands.js b/src/SlashCommands.js index f25bc9af07..07ca61487e 100644 --- a/src/SlashCommands.js +++ b/src/SlashCommands.js @@ -34,6 +34,26 @@ import WidgetUtils from "./utils/WidgetUtils"; import {textToHtmlRainbow} from "./utils/colour"; import Promise from "bluebird"; +const singleMxcUpload = async () => { + return new Promise((resolve) => { + const fileSelector = document.createElement('input'); + fileSelector.setAttribute('type', 'file'); + fileSelector.onchange = (ev) => { + const file = ev.target.files[0]; + + const UploadConfirmDialog = sdk.getComponent("dialogs.UploadConfirmDialog"); + Modal.createTrackedDialog('Upload Files confirmation', '', UploadConfirmDialog, { + file, + onFinished: (shouldContinue) => { + resolve(shouldContinue ? MatrixClientPeg.get().uploadContent(file) : null); + }, + }); + }; + + fileSelector.click(); + }); +}; + class Command { constructor({name, args='', description, runFn, hideCompletionAfterSpace=false}) { this.command = '/' + name; @@ -222,26 +242,11 @@ export const CommandMap = { let promise = Promise.resolve(args); if (!args) { - promise = new Promise((resolve) => { - const fileSelector = document.createElement('input'); - fileSelector.setAttribute('type', 'file'); - fileSelector.onchange = (ev) => { - const file = ev.target.files[0]; - - const UploadConfirmDialog = sdk.getComponent("dialogs.UploadConfirmDialog"); - Modal.createTrackedDialog('Upload Files confirmation', '', UploadConfirmDialog, { - file, - onFinished: (shouldContinue) => { - if (shouldContinue) resolve(cli.uploadContent(file)); - }, - }); - }; - - fileSelector.click(); - }); + promise = singleMxcUpload(); } return success(promise.then((url) => { + if (!url) return; const ev = room.currentState.getStateEvents('m.room.member', userId); const content = { ...ev ? ev.getContent() : { membership: 'join' }, @@ -252,6 +257,23 @@ export const CommandMap = { }, }), + myavatar: new Command({ + name: 'myavatar', + args: '[]', + description: _td('Changes your avatar in all rooms'), + runFn: function(roomId, args) { + let promise = Promise.resolve(args); + if (!args) { + promise = singleMxcUpload(); + } + + return success(promise.then((url) => { + if (!url) return; + return MatrixClientPeg.get().setAvatarUrl(url); + })); + }, + }), + tint: new Command({ name: 'tint', args: ' []',