summaryrefslogtreecommitdiff
path: root/packages/client/src
diff options
context:
space:
mode:
authorromaboo <80708836+puff-fan-420@users.noreply.github.com>2021-12-09 12:38:56 +0000
committerGitHub <noreply@github.com>2021-12-09 21:38:56 +0900
commit054417354c88061cf02bb7db7f3fbb3a1eda5473 (patch)
treeb869999e56113f08e7fe9aa2dc44e9896168a443 /packages/client/src
parentupdate deps (diff)
downloadmisskey-054417354c88061cf02bb7db7f3fbb3a1eda5473.tar.gz
misskey-054417354c88061cf02bb7db7f3fbb3a1eda5473.tar.bz2
misskey-054417354c88061cf02bb7db7f3fbb3a1eda5473.zip
feat: user-level instance mute (#7712)
* Update ja-JP.yml * Added settable config for muted instances * added psql query for removal of muted notes * Added filtering and trimming for instance mutes * cleaned up filtering of bad instance mutes and added a refresh at the end for the list on the client * Added notification & streaming timeline muting * Updated changelog * Added missing semicolon * Apply japanese string suggestions from robflop Co-authored-by: Robin B. <robflop98@outlook.com> * Changed Ja-JP instance mute title string to one suggested by sousuke Co-authored-by: sousuke0422 <sousuke20xx@gmail.com> * Update ja-JP instanceMuteDescription based on sousuke's suggestion Co-authored-by: sousuke0422 <sousuke20xx@gmail.com> * added notification mute * added notification and note children muting * Fixed a bug where local notifications were getting filtered on cold start * Fixed instance mute imports * Fixed not saving/loading instance mutes * removed en-US translations for instance mute * moved instance mute migration to js * changed settings index back to spaces * removed destructuring assignment from notification stream in instance mute check call Co-authored-by: tamaina <tamaina@hotmail.co.jp> * added .note accessor for checking note data instead of notification data * changed note to use Packed<'Note'> instead of any and removed usage of snake case Co-authored-by: tamaina <tamaina@hotmail.co.jp> * changed notification mute check to check specifically for notification host * changed to using single quotes * moved @click to the end for the linter * revert unnecessary changes * restored newlines * whitespace removal Co-authored-by: syuilo <syuilotan@yahoo.co.jp> Co-authored-by: Robin B. <robflop98@outlook.com> Co-authored-by: sousuke0422 <sousuke20xx@gmail.com> Co-authored-by: puffaboo <emilis@jigglypuff.club> Co-authored-by: tamaina <tamaina@hotmail.co.jp>
Diffstat (limited to 'packages/client/src')
-rw-r--r--packages/client/src/pages/settings/index.vue6
-rw-r--r--packages/client/src/pages/settings/instance-mute.vue83
2 files changed, 89 insertions, 0 deletions
diff --git a/packages/client/src/pages/settings/index.vue b/packages/client/src/pages/settings/index.vue
index bfac1be77d..2e26870d8b 100644
--- a/packages/client/src/pages/settings/index.vue
+++ b/packages/client/src/pages/settings/index.vue
@@ -137,6 +137,11 @@ export default defineComponent({
to: '/settings/import-export',
active: page.value === 'import-export',
}, {
+ icon: 'fas fa-volume-mute',
+ text: i18n.locale.instanceMute,
+ to: '/settings/instance-mute',
+ active: page.value === 'instance-mute',
+ }, {
icon: 'fas fa-ban',
text: i18n.locale.muteAndBlock,
to: '/settings/mute-block',
@@ -190,6 +195,7 @@ export default defineComponent({
case 'notifications': return defineAsyncComponent(() => import('./notifications.vue'));
case 'mute-block': return defineAsyncComponent(() => import('./mute-block.vue'));
case 'word-mute': return defineAsyncComponent(() => import('./word-mute.vue'));
+ case 'instance-mute': return defineAsyncComponent(() => import('./instance-mute.vue'));
case 'integration': return defineAsyncComponent(() => import('./integration.vue'));
case 'security': return defineAsyncComponent(() => import('./security.vue'));
case '2fa': return defineAsyncComponent(() => import('./2fa.vue'));
diff --git a/packages/client/src/pages/settings/instance-mute.vue b/packages/client/src/pages/settings/instance-mute.vue
new file mode 100644
index 0000000000..813d2a0441
--- /dev/null
+++ b/packages/client/src/pages/settings/instance-mute.vue
@@ -0,0 +1,83 @@
+<template>
+ <div>
+ <FormBase>
+ <div class="_formItem">
+ <FormInfo>{{ $ts._instanceMute.title}}</FormInfo>
+ <FormTextarea v-model="instanceMutes">
+ <span>{{$ts._instanceMute.heading}}</span>
+ <template #desc>{{ $ts._instanceMute.instanceMuteDescription}}<br>{{$ts._instanceMute.instanceMuteDescription2}}</template>
+ </FormTextarea>
+ </div>
+ <FormButton primary inline :disabled="!changed" @click="save()"><i class="fas fa-save"></i> {{ $ts.save }}</FormButton>
+ </FormBase>
+ </div>
+</template>
+
+<script>
+import { defineComponent } from 'vue'
+import FormBase from '@/components/debobigego/base.vue';
+import FormTextarea from '@/components/debobigego/textarea.vue';
+import FormInfo from '@/components/debobigego/info.vue';
+import FormKeyValueView from '@/components/debobigego/key-value-view.vue';
+import FormButton from '@/components/debobigego/button.vue';
+import * as os from '@/os';
+import number from '@/filters/number';
+import * as symbols from '@/symbols';
+
+export default defineComponent({
+ components: {
+ FormBase,
+ FormButton,
+ FormTextarea,
+ FormKeyValueView,
+ FormInfo,
+ },
+
+ emits: ['info'],
+
+ data() {
+ return {
+ [symbols.PAGE_INFO]: {
+ title: this.$ts.instanceMute,
+ icon: 'fas fa-volume-mute'
+ },
+ tab: 'soft',
+ instanceMutes: '',
+ changed: false,
+ }
+ },
+
+ watch: {
+ instanceMutes: {
+ handler() {
+ this.changed = true;
+ },
+ deep: true
+ },
+ },
+
+ mounted() {
+ this.$emit('info', this[symbols.PAGE_INFO]);
+ },
+
+
+ async created() {
+ this.instanceMutes = this.$i.mutedInstances.join('\n');
+ },
+
+ methods: {
+ async save() {
+ let mutes = this.instanceMutes.trim().split('\n').map(el => el.trim()).filter(el => el);
+ await os.api('i/update', {
+ mutedInstances: mutes,
+ });
+ this.changed = false;
+
+ // Refresh filtered list to signal to the user how they've been saved
+ this.instanceMutes = mutes.join('\n');
+ },
+
+ number //?
+ }
+})
+</script>