2024.5.0-mattyatea4

This commit is contained in:
mattyatea 2024-06-25 07:09:54 +09:00
parent 58ce5a5f79
commit 564f2e9127
21 changed files with 3579 additions and 263 deletions

View file

@ -117,7 +117,7 @@ const menuDef = computed(() => [{
}, {
icon: 'ti ti-layout-navbar',
text: i18n.ts.timelineHeader,
to: '/settings/timelineheader',
to: '/settings/timeline-header',
active: currentPage.value?.route.name === 'timelineHeader',
}, {
icon: 'ti ti-equal-double',

View file

@ -30,6 +30,21 @@ SPDX-License-Identifier: AGPL-3.0-only
</div>
</MkContainer>
</FormSlot>
<MkFoldableSection>
<template #header>リモートのローカルタイムライン</template>
<div v-if="remoteLocalTimeline.length < 3">
<MkInput v-model="tmpName" placeholder="remoteLocalTimeline 1"/>
<MkInput v-model="tmpServer" placeholder="https://prismisskey.space"/>
<MkButton @click="addRemote"><i class="ti ti-plus"></i> {{ i18n.ts.addItem }}</MkButton>
</div>
<div v-for="(a,i) in remoteLocalTimeline" :key="i">
<MkInput v-model="remoteLocalTimeline[i]['name']" :placeholder="a"/>
<MkInput v-model="remoteLocalTimeline[i]['host']" :placeholder="a"/>
<MkButton danger @click="deleteRemote(i)"><i class="ti ti-trash"></i> {{ i18n.ts.delete }}</MkButton>
</div>
</MkFoldableSection>
<div class="_buttons">
<MkButton @click="addItem"><i class="ti ti-plus"></i> {{ i18n.ts.addItem }}</MkButton>
<MkButton danger @click="reset"><i class="ti ti-reload"></i> {{ i18n.ts.default }}</MkButton>
@ -39,25 +54,30 @@ SPDX-License-Identifier: AGPL-3.0-only
</template>
<script lang="ts" setup>
import { computed, defineAsyncComponent, ref, watch } from 'vue';
import MkRadios from '@/components/MkRadios.vue';
import { computed, defineAsyncComponent, ref } from 'vue';
import MkButton from '@/components/MkButton.vue';
import FormSlot from '@/components/form/slot.vue';
import MkContainer from '@/components/MkContainer.vue';
import * as os from '@/os.js';
import { navbarItemDef } from '@/navbar.js';
import { defaultStore } from '@/store.js';
import { unisonReload } from '@/scripts/unison-reload.js';
import { i18n } from '@/i18n.js';
import { definePageMetadata } from '@/scripts/page-metadata.js';
import { timelineHeaderItemDef } from '@/timeline-header.js';
import MkInput from '@/components/MkInput.vue';
import MkFoldableSection from '@/components/MkFoldableSection.vue';
import { $i } from '@/account.js';
const Sortable = defineAsyncComponent(() => import('vuedraggable').then(x => x.default));
const tmpName = ref();
const tmpServer = ref();
const items = ref(defaultStore.state.timelineHeader.map(x => ({
id: Math.random().toString(),
type: x,
})));
const remoteLocalTimeline = ref(defaultStore.state.remoteLocalTimeline);
const maxLocalTimeline = $i.policies.localTimelineAnyLimit;
async function reloadAsk() {
const { canceled } = await os.confirm({
@ -69,11 +89,31 @@ async function reloadAsk() {
unisonReload();
}
async function addRemote() {
if (!tmpName.value || !tmpServer.value) return;
if (maxLocalTimeline <= remoteLocalTimeline.value.length) return;
remoteLocalTimeline.value.push({
id: Math.random().toString(),
name: tmpName.value,
host: tmpServer.value,
});
tmpName.value = '';
tmpServer.value = '';
await defaultStore.set('remoteLocalTimeline', remoteLocalTimeline.value);
}
const menu = computed(() => {
return Object.keys(timelineHeaderItemDef).filter(k => !items.value.map(item => item.type).includes(k));
});
async function deleteRemote(index: number) {
remoteLocalTimeline.value.splice(index, 1);
}
async function addItem() {
const menu = Object.keys(timelineHeaderItemDef).filter(k => !defaultStore.state.timelineHeader.includes(k));
const { canceled, result: item } = await os.select({
title: i18n.ts.addItem,
items: [...menu.map(k => ({
items: [...menu.value.map(k => ({
value: k, text: timelineHeaderItemDef[k].title,
}))],
});

View file

@ -12,7 +12,8 @@ SPDX-License-Identifier: AGPL-3.0-only
<MkInfo v-if="['home', 'local', 'social', 'global'].includes(src) && !defaultStore.reactiveState.timelineTutorials.value[src]" style="margin-bottom: var(--margin);" closable @close="closeTutorial()">
{{ i18n.ts._timelineDescription[src] }}
</MkInfo>
<MkPostForm v-if="$i && defaultStore.reactiveState.showFixedPostForm.value" :channel="channelInfo" :autofocus="deviceKind === 'desktop'" :class="$style.postForm" class="post-form _panel" fixed style="margin-bottom: var(--margin);"/>
<MkPostForm v-if="$i && defaultStore.reactiveState.showFixedPostForm.value && ui !== 'twilike'" :channel="channelInfo" :autofocus="deviceKind === 'desktop'" :class="$style.postForm" class="post-form _panel" fixed style="margin-bottom: var(--margin);"/>
<XPostForm v-if="$i && ui === 'twilike' " :channel="channelInfo" :autofocus="deviceKind === 'desktop'" :class="$style.postForm" class="post-form _panel" fixed style="margin-bottom: var(--margin);"/>
<div v-if="queue > 0" :class="$style.new"><button class="_buttonPrimary" :class="$style.newButton" @click="top()">{{ i18n.ts.newNoteRecived }}</button></div>
<div :class="$style.tl">
<MkTimeline
@ -21,6 +22,7 @@ SPDX-License-Identifier: AGPL-3.0-only
:src="src.split(':')[0]"
:list="src.split(':')[1]"
:channel="src.split(':')[1]"
:antenna="src.split(':')[1]"
:withRenotes="withRenotes"
:withReplies="withReplies"
:onlyFiles="onlyFiles"
@ -47,7 +49,6 @@ import * as os from '@/os.js';
import { misskeyApi } from '@/scripts/misskey-api.js';
import { defaultStore } from '@/store.js';
import { i18n } from '@/i18n.js';
import { instance } from '@/instance.js';
import { $i } from '@/account.js';
import { definePageMetadata } from '@/scripts/page-metadata.js';
import { antennasCache, userFavoriteListsCache, userListsCache, favoritedChannelsCache } from '@/cache.js';
@ -57,6 +58,8 @@ import { MenuItem } from '@/types/menu.js';
import { miLocalStorage } from '@/local-storage.js';
import { timelineHeaderItemDef } from '@/timeline-header.js';
import { isLocalTimelineAvailable, isGlobalTimelineAvailable } from '@/scripts/get-timeline-available.js';
import { ui } from '@/config.js';
import XPostForm from '@/components/XPostForm.vue';
provide('shouldOmitHeaderTitle', true);
@ -121,14 +124,7 @@ const withSensitive = computed<boolean>({
get: () => defaultStore.reactiveState.tl.value.filter.withSensitive,
set: (x) => saveTlFilter('withSensitive', x),
});
const isShowMediaTimeline = ref(defaultStore.state.showMediaTimeline);
const remoteLocalTimelineEnable1 = ref(defaultStore.state.remoteLocalTimelineEnable1);
const remoteLocalTimelineEnable2 = ref(defaultStore.state.remoteLocalTimelineEnable2);
const remoteLocalTimelineEnable3 = ref(defaultStore.state.remoteLocalTimelineEnable3);
const remoteLocalTimelineEnable4 = ref(defaultStore.state.remoteLocalTimelineEnable4);
const remoteLocalTimelineEnable5 = ref(defaultStore.state.remoteLocalTimelineEnable5);
const showHomeTimeline = ref(defaultStore.state.showHomeTimeline);
const showSocialTimeline = ref(defaultStore.state.showSocialTimeline);
const channelInfo = ref();
if (src.value.split(':')[0] === 'channel') {
const channelId = src.value.split(':')[1];