feat(client): プラグインを無効にできるように

This commit is contained in:
syuilo 2020-07-28 19:02:28 +09:00
parent 3ee2cd576e
commit 737f4e0a44
5 changed files with 45 additions and 5 deletions

View File

@ -555,6 +555,7 @@ smtpSecureInfo: "STARTTLS使用時はオフにします。"
testEmail: "配信テスト" testEmail: "配信テスト"
wordMute: "ワードミュート" wordMute: "ワードミュート"
userSaysSomething: "{name}が何かを言いました" userSaysSomething: "{name}が何かを言いました"
makeActive: "アクティブにする"
_wordMute: _wordMute:
muteWords: "ミュートするワード" muteWords: "ミュートするワード"

View File

@ -242,7 +242,7 @@ os.init(async () => {
//store.commit('instance/set', ); //store.commit('instance/set', );
}); });
for (const plugin of store.state.deviceUser.plugins) { for (const plugin of store.state.deviceUser.plugins.filter(p => p.active)) {
console.info('Plugin installed:', plugin.name, 'v' + plugin.version); console.info('Plugin installed:', plugin.name, 'v' + plugin.version);
const aiscript = new AiScript(createPluginEnv(app, { const aiscript = new AiScript(createPluginEnv(app, {

View File

@ -18,6 +18,9 @@
<option v-for="x in $store.state.deviceUser.plugins" :value="x.id" :key="x.id">{{ x.name }}</option> <option v-for="x in $store.state.deviceUser.plugins" :value="x.id" :key="x.id">{{ x.name }}</option>
</mk-select> </mk-select>
<template v-if="selectedPlugin"> <template v-if="selectedPlugin">
<div style="margin: -8px 0 8px 0;">
<mk-switch :value="selectedPlugin.active" @change="changeActive(selectedPlugin, $event)">{{ $t('makeActive') }}</mk-switch>
</div>
<div class="_keyValue"> <div class="_keyValue">
<div>{{ $t('version') }}:</div> <div>{{ $t('version') }}:</div>
<div>{{ selectedPlugin.version }}</div> <div>{{ selectedPlugin.version }}</div>
@ -49,6 +52,7 @@ import MkButton from '../../components/ui/button.vue';
import MkTextarea from '../../components/ui/textarea.vue'; import MkTextarea from '../../components/ui/textarea.vue';
import MkSelect from '../../components/ui/select.vue'; import MkSelect from '../../components/ui/select.vue';
import MkInfo from '../../components/ui/info.vue'; import MkInfo from '../../components/ui/info.vue';
import MkSwitch from '../../components/ui/switch.vue';
export default Vue.extend({ export default Vue.extend({
components: { components: {
@ -56,6 +60,7 @@ export default Vue.extend({
MkTextarea, MkTextarea,
MkSelect, MkSelect,
MkInfo, MkInfo,
MkSwitch,
}, },
data() { data() {
@ -171,6 +176,17 @@ export default Vue.extend({
config: result config: result
}); });
this.$nextTick(() => {
location.reload();
});
},
changeActive(plugin, active) {
this.$store.commit('deviceUser/changePluginActive', {
id: plugin.id,
active: active
});
this.$nextTick(() => { this.$nextTick(() => {
location.reload(); location.reload();
}); });

View File

@ -14,9 +14,9 @@ export function createAiScriptEnv(vm, opts) {
text: text.value, text: text.value,
}); });
}), }),
'Mk:confirm': values.FN_NATIVE(async ([title, text]) => { 'Mk:confirm': values.FN_NATIVE(async ([title, text, type]) => {
const confirm = await vm.$root.dialog({ const confirm = await vm.$root.dialog({
type: 'warning', type: type ? type.value : 'question',
showCancelButton: true, showCancelButton: true,
title: title.value, title: title.value,
text: text.value, text: text.value,
@ -44,12 +44,13 @@ export function createAiScriptEnv(vm, opts) {
export function createPluginEnv(vm, opts) { export function createPluginEnv(vm, opts) {
const config = new Map(); const config = new Map();
for (const [k, v] of Object.entries(opts.plugin.config)) { for (const [k, v] of Object.entries(opts.plugin.config || {})) {
config.set(k, jsToVal(opts.plugin.configData[k] || v.default)); config.set(k, jsToVal(opts.plugin.configData[k] || v.default));
} }
return { return {
...createAiScriptEnv(vm, { ...opts, token: opts.plugin.token }), ...createAiScriptEnv(vm, { ...opts, token: opts.plugin.token }),
//#region Deprecated
'Mk:register_post_form_action': values.FN_NATIVE(([title, handler]) => { 'Mk:register_post_form_action': values.FN_NATIVE(([title, handler]) => {
vm.$store.commit('registerPostFormAction', { pluginId: opts.plugin.id, title: title.value, handler }); vm.$store.commit('registerPostFormAction', { pluginId: opts.plugin.id, title: title.value, handler });
}), }),
@ -59,6 +60,16 @@ export function createPluginEnv(vm, opts) {
'Mk:register_note_action': values.FN_NATIVE(([title, handler]) => { 'Mk:register_note_action': values.FN_NATIVE(([title, handler]) => {
vm.$store.commit('registerNoteAction', { pluginId: opts.plugin.id, title: title.value, handler }); vm.$store.commit('registerNoteAction', { pluginId: opts.plugin.id, title: title.value, handler });
}), }),
//#endregion
'Plugin:register_post_form_action': values.FN_NATIVE(([title, handler]) => {
vm.$store.commit('registerPostFormAction', { pluginId: opts.plugin.id, title: title.value, handler });
}),
'Plugin:register_user_action': values.FN_NATIVE(([title, handler]) => {
vm.$store.commit('registerUserAction', { pluginId: opts.plugin.id, title: title.value, handler });
}),
'Plugin:register_note_action': values.FN_NATIVE(([title, handler]) => {
vm.$store.commit('registerNoteAction', { pluginId: opts.plugin.id, title: title.value, handler });
}),
'Plugin:config': values.OBJ(config), 'Plugin:config': values.OBJ(config),
}; };
} }

View File

@ -45,7 +45,14 @@ export const defaultDeviceUserSettings = {
columns: [], columns: [],
layout: [], layout: [],
}, },
plugins: [], plugins: [] as {
id: string;
name: string;
active: boolean;
configData: Record<string, any>;
token: string;
ast: any[];
}[],
}; };
export const defaultDeviceSettings = { export const defaultDeviceSettings = {
@ -591,6 +598,7 @@ export default () => new Vuex.Store({
installPlugin(state, { meta, ast, token }) { installPlugin(state, { meta, ast, token }) {
state.plugins.push({ state.plugins.push({
...meta, ...meta,
active: true,
configData: {}, configData: {},
token: token, token: token,
ast: ast ast: ast
@ -604,6 +612,10 @@ export default () => new Vuex.Store({
configPlugin(state, { id, config }) { configPlugin(state, { id, config }) {
state.plugins.find(p => p.id === id).configData = config; state.plugins.find(p => p.id === id).configData = config;
}, },
changePluginActive(state, { id, active }) {
state.plugins.find(p => p.id === id).active = active;
},
} }
}, },