Merge pull request #3155 from matrix-org/t3chguy/avatar_cmd

Add /myavatar command
This commit is contained in:
Michael Telatynski 2019-06-29 07:31:20 +01:00 committed by GitHub
commit 4427e139be
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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: '[<mxc_url>]',
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: '<color1> [<color2>]',