diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index d451ad72b7..145fa65644 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -692,6 +692,10 @@ deleteConfirm: "削除しますか?" invalidValue: "有効な値ではありません。" registry: "レジストリ" closeAccount: "アカウントを閉鎖する" +currentVersion: "現在のバージョン" +latestVersion: "最新のバージョン" +youAreRunningUpToDateClient: "お使いのクライアントは最新です。" +newVersionOfClientAvailable: "新しいバージョンのクライアントが利用可能です。" _registry: scope: "スコープ" diff --git a/src/client/pages/settings/index.vue b/src/client/pages/settings/index.vue index 0f95a76f11..bacce6e3f7 100644 --- a/src/client/pages/settings/index.vue +++ b/src/client/pages/settings/index.vue @@ -106,6 +106,7 @@ export default defineComponent({ case 'plugins': return defineAsyncComponent(() => import('./plugins.vue')); case 'import-export': return defineAsyncComponent(() => import('./import-export.vue')); case 'account-info': return defineAsyncComponent(() => import('./account-info.vue')); + case 'update': return defineAsyncComponent(() => import('./update.vue')); case 'registry': return defineAsyncComponent(() => import('./registry.vue')); case 'experimental-features': return defineAsyncComponent(() => import('./experimental-features.vue')); } diff --git a/src/client/pages/settings/other.vue b/src/client/pages/settings/other.vue index 426d91ba01..c6ec9f6c0a 100644 --- a/src/client/pages/settings/other.vue +++ b/src/client/pages/settings/other.vue @@ -1,5 +1,7 @@ <template> <FormBase> + <FormLink to="/settings/update">Misskey Update</FormLink> + <FormSwitch :value="$i.injectFeaturedNote" @update:value="onChangeInjectFeaturedNote"> {{ $ts.showFeaturedNotesInTimeline }} </FormSwitch> diff --git a/src/client/pages/settings/update.vue b/src/client/pages/settings/update.vue new file mode 100644 index 0000000000..d172ceb10a --- /dev/null +++ b/src/client/pages/settings/update.vue @@ -0,0 +1,94 @@ +<template> +<FormBase> + <template v-if="meta"> + <MkInfo v-if="version === meta.version">{{ $ts.youAreRunningUpToDateClient }}</MkInfo> + <MkInfo v-else warn>{{ $ts.newVersionOfClientAvailable }}</MkInfo> + </template> + <FormGroup> + <template #label>{{ instanceName }}</template> + <FormKeyValueView> + <template #key>{{ $ts.currentVersion }}</template> + <template #value>{{ version }}</template> + </FormKeyValueView> + <FormKeyValueView> + <template #key>{{ $ts.latestVersion }}</template> + <template #value v-if="meta">{{ meta.version }}</template> + <template #value v-else><MkEllipsis/></template> + </FormKeyValueView> + </FormGroup> + <FormGroup> + <template #label>Misskey</template> + <FormKeyValueView> + <template #key>{{ $ts.latestVersion }}</template> + <template #value v-if="releases">{{ releases[0].tag_name }}</template> + <template #value v-else><MkEllipsis/></template> + </FormKeyValueView> + <template #caption v-if="releases"><MkTime :time="releases[0].published_at" mode="detail"/></template> + </FormGroup> +</FormBase> +</template> + +<script lang="ts"> +import { defineAsyncComponent, defineComponent } from 'vue'; +import { faInfoCircle, faSyncAlt } from '@fortawesome/free-solid-svg-icons'; +import FormSwitch from '@/components/form/switch.vue'; +import FormSelect from '@/components/form/select.vue'; +import FormLink from '@/components/form/link.vue'; +import FormBase from '@/components/form/base.vue'; +import FormGroup from '@/components/form/group.vue'; +import FormButton from '@/components/form/button.vue'; +import FormKeyValueView from '@/components/form/key-value-view.vue'; +import MkInfo from '@/components/ui/info.vue'; +import * as os from '@/os'; +import { version, instanceName } from '@/config'; + +export default defineComponent({ + components: { + FormBase, + FormSelect, + FormSwitch, + FormButton, + FormLink, + FormGroup, + FormKeyValueView, + MkInfo, + }, + + emits: ['info'], + + data() { + return { + INFO: { + title: 'Misskey Update', + icon: faSyncAlt + }, + version, + instanceName, + releases: null, + meta: null + } + }, + + mounted() { + this.$emit('info', this.INFO); + + os.api('meta', { + detail: false + }).then(meta => { + this.meta = meta; + localStorage.setItem('v', meta.version); + }); + + fetch('https://api.github.com/repos/syuilo/misskey/releases', { + method: 'GET', + }) + .then(res => res.json()) + .then(res => { + this.releases = res; + }); + }, + + methods: { + } +}); +</script>