diff options
| author | romaboo <80708836+puff-fan-420@users.noreply.github.com> | 2021-12-09 12:38:56 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-12-09 21:38:56 +0900 |
| commit | 054417354c88061cf02bb7db7f3fbb3a1eda5473 (patch) | |
| tree | b869999e56113f08e7fe9aa2dc44e9896168a443 /packages/client/src | |
| parent | update deps (diff) | |
| download | misskey-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.vue | 6 | ||||
| -rw-r--r-- | packages/client/src/pages/settings/instance-mute.vue | 83 |
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> |