Merge remote-tracking branch 'misskey-original/develop' into develop

# Conflicts:
#	package.json
#	packages/backend/src/server/api/stream/channels/hybrid-timeline.ts
#	packages/frontend/package.json
This commit is contained in:
mattyatea 2023-10-23 19:29:34 +09:00
commit cc5037cb85
28 changed files with 886 additions and 740 deletions

View file

@ -26,8 +26,7 @@
"@tabler/icons-webfont": "2.37.0",
"@vitejs/plugin-vue": "4.4.0",
"@vue-macros/reactivity-transform": "0.3.23",
"@vue/compiler-sfc": "3.3.4",
"@vue/compiler-sfc": "3.3.5",
"@vue/compiler-sfc": "3.3.6",
"astring": "1.8.6",
"autosize": "6.0.1",
"broadcast-channel": "5.5.0",
@ -74,7 +73,7 @@
"v-code-diff": "1.7.1",
"vanilla-tilt": "1.8.1",
"vite": "4.5.0",
"vue": "3.3.5",
"vue": "3.3.6",
"vue-prism-editor": "2.0.0-alpha.2",
"vuedraggable": "next"
},
@ -113,11 +112,11 @@
"@typescript-eslint/eslint-plugin": "6.8.0",
"@typescript-eslint/parser": "6.8.0",
"@vitest/coverage-v8": "0.34.6",
"@vue/runtime-core": "3.3.5",
"@vue/runtime-core": "3.3.6",
"acorn": "8.10.0",
"cross-env": "7.0.3",
"cypress": "13.3.2",
"eslint": "8.51.0",
"eslint": "8.52.0",
"eslint-plugin-import": "2.28.1",
"eslint-plugin-vue": "9.17.0",
"fast-glob": "3.3.1",

View file

@ -175,7 +175,7 @@ export async function common(createVue: () => App<Element>) {
defaultStore.set('darkMode', isDeviceDarkmode());
}
window.matchMedia('(prefers-color-scheme: dark)').addListener(mql => {
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (mql) => {
if (ColdDeviceStorage.get('syncDeviceDarkMode')) {
defaultStore.set('darkMode', mql.matches);
}

View file

@ -87,9 +87,14 @@ SPDX-License-Identifier: AGPL-3.0-only
</FormSection>
<FormSection>
<template #label>Timeline caching</template>
<template #label>Misskey® Fan-out Timeline Technology (FTT)</template>
<div class="_gaps_m">
<MkSwitch v-model="enableFanoutTimeline">
<template #label>{{ i18n.ts.enable }}</template>
<template #caption>{{ i18n.ts._serverSettings.fanoutTimelineDescription }}</template>
</MkSwitch>
<MkInput v-model="perLocalUserUserTimelineCacheMax" type="number">
<template #label>perLocalUserUserTimelineCacheMax</template>
</MkInput>
@ -165,6 +170,7 @@ let cacheRemoteSensitiveFiles: boolean = $ref(false);
let enableServiceWorker: boolean = $ref(false);
let swPublicKey: any = $ref(null);
let swPrivateKey: any = $ref(null);
let enableFanoutTimeline: boolean = $ref(false);
let perLocalUserUserTimelineCacheMax: number = $ref(0);
let perRemoteUserUserTimelineCacheMax: number = $ref(0);
let perUserHomeTimelineCacheMax: number = $ref(0);
@ -185,6 +191,7 @@ async function init(): Promise<void> {
enableServiceWorker = meta.enableServiceWorker;
swPublicKey = meta.swPublickey;
swPrivateKey = meta.swPrivateKey;
enableFanoutTimeline = meta.enableFanoutTimeline;
perLocalUserUserTimelineCacheMax = meta.perLocalUserUserTimelineCacheMax;
perRemoteUserUserTimelineCacheMax = meta.perRemoteUserUserTimelineCacheMax;
perUserHomeTimelineCacheMax = meta.perUserHomeTimelineCacheMax;
@ -206,6 +213,7 @@ async function save(): void {
enableServiceWorker,
swPublicKey,
swPrivateKey,
enableFanoutTimeline,
perLocalUserUserTimelineCacheMax,
perRemoteUserUserTimelineCacheMax,
perUserHomeTimelineCacheMax,

View file

@ -94,7 +94,7 @@ SPDX-License-Identifier: AGPL-3.0-only
</template>
<script lang="ts" setup>
import { ref, computed, onMounted, nextTick } from 'vue';
import { ref, computed, onActivated, onDeactivated, nextTick } from 'vue';
import MkLoading from '@/components/global/MkLoading.vue';
import MkButton from '@/components/MkButton.vue';
import FormSection from '@/components/form/section.vue';
@ -120,9 +120,8 @@ const errorKV = ref<{
description: '',
});
const urlParams = new URLSearchParams(window.location.search);
const url = urlParams.get('url');
const hash = urlParams.get('hash');
const url = ref<string | null>(null);
const hash = ref<string | null>(null);
const data = ref<{
type: 'plugin' | 'theme';
@ -152,7 +151,7 @@ function goToMisskey(): void {
}
async function fetch() {
if (!url || !hash) {
if (!url.value || !hash.value) {
errorKV.value = {
title: i18n.ts._externalResourceInstaller._errors._invalidParams.title,
description: i18n.ts._externalResourceInstaller._errors._invalidParams.description,
@ -161,8 +160,8 @@ async function fetch() {
return;
}
const res = await os.api('fetch-external-resources', {
url,
hash,
url: url.value,
hash: hash.value,
}).catch((err) => {
switch (err.id) {
case 'bb774091-7a15-4a70-9dc5-6ac8cf125856':
@ -240,7 +239,7 @@ async function fetch() {
description: i18n.ts._theme.alreadyInstalled,
};
break;
default:
errorKV.value = {
title: i18n.ts._externalResourceInstaller._errors._themeParseFailed.title,
@ -297,10 +296,17 @@ async function install() {
}
}
onMounted(() => {
onActivated(() => {
const urlParams = new URLSearchParams(window.location.search);
url.value = urlParams.get('url');
hash.value = urlParams.get('hash');
fetch();
});
onDeactivated(() => {
uiPhase.value = 'fetching';
});
const headerActions = computed(() => []);
const headerTabs = computed(() => []);