From eea0fb263623563af32c66dbb33b1c9060d00928 Mon Sep 17 00:00:00 2001
From: syuilo <4439005+syuilo@users.noreply.github.com>
Date: Wed, 28 May 2025 11:47:09 +0900
Subject: [PATCH] wip
---
locales/index.d.ts | 8 +
locales/ja-JP.yml | 2 +
.../src/components/MkUploaderDialog.vue | 6 +-
.../components/MkWatermarkEditorDialog.vue | 7 +-
.../frontend/src/pages/settings/drive.vue | 166 ++++++++++++------
packages/frontend/src/preferences/def.ts | 8 +
6 files changed, 138 insertions(+), 59 deletions(-)
diff --git a/locales/index.d.ts b/locales/index.d.ts
index 010cb18edc..456785e280 100644
--- a/locales/index.d.ts
+++ b/locales/index.d.ts
@@ -5473,6 +5473,10 @@ export interface Locale extends ILocale {
* 全ての「ヒントとコツ」を非表示
*/
"hideAllTips": string;
+ /**
+ * デフォルトの画像圧縮度
+ */
+ "defaultImageCompressionLevel": string;
"_chat": {
/**
* まだメッセージはありません
@@ -12008,6 +12012,10 @@ export interface Locale extends ILocale {
* ウォーターマーク
*/
"watermark": string;
+ /**
+ * デフォルトのプリセット
+ */
+ "defaultPreset": string;
"_watermarkEditor": {
/**
* 画像にクレジット情報などのウォーターマークを追加することができます。
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index b6e8402f8f..654921a518 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -1363,6 +1363,7 @@ abort: "中止"
tip: "ヒントとコツ"
redisplayAllTips: "全ての「ヒントとコツ」を再表示"
hideAllTips: "全ての「ヒントとコツ」を非表示"
+defaultImageCompressionLevel: "デフォルトの画像圧縮度"
_chat:
noMessagesYet: "まだメッセージはありません"
@@ -3216,6 +3217,7 @@ _userLists:
tip: "任意のユーザーが含まれるリストを作成できます。作成したリストはタイムラインとして表示可能です。"
watermark: "ウォーターマーク"
+defaultPreset: "デフォルトのプリセット"
_watermarkEditor:
tip: "画像にクレジット情報などのウォーターマークを追加することができます。"
title: "ウォーターマークの編集"
diff --git a/packages/frontend/src/components/MkUploaderDialog.vue b/packages/frontend/src/components/MkUploaderDialog.vue
index 4b980ef19b..b43970bb70 100644
--- a/packages/frontend/src/components/MkUploaderDialog.vue
+++ b/packages/frontend/src/components/MkUploaderDialog.vue
@@ -40,8 +40,8 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ ctx.name }}
{{ ctx.file.type }}
- {{ bytes(ctx.file.size) }}
({{ i18n.tsx._uploader.compressedToX({ x: bytes(ctx.compressedSize) }) }} = {{ i18n.tsx._uploader.savedXPercent({ x: Math.round((1 - ctx.compressedSize / ctx.file.size) * 100) }) }})
+ {{ bytes(ctx.file.size) }}
@@ -557,8 +557,8 @@ function initializeFile(file: File) {
aborted: false,
uploaded: null,
uploadFailed: false,
- compressionLevel: 2 as 0 | 1 | 2 | 3,
- watermarkPresetId: null,
+ compressionLevel: prefer.s.defaultImageCompressionLevel,
+ watermarkPresetId: prefer.s.defaultWatermarkPresetId,
file: markRaw(file),
};
items.value.push(item);
diff --git a/packages/frontend/src/components/MkWatermarkEditorDialog.vue b/packages/frontend/src/components/MkWatermarkEditorDialog.vue
index 61f3181156..c9e9003d66 100644
--- a/packages/frontend/src/components/MkWatermarkEditorDialog.vue
+++ b/packages/frontend/src/components/MkWatermarkEditorDialog.vue
@@ -52,20 +52,15 @@ import MkModalWindow from '@/components/MkModalWindow.vue';
import MkSelect from '@/components/MkSelect.vue';
import MkButton from '@/components/MkButton.vue';
import MkInput from '@/components/MkInput.vue';
-import MkSwitch from '@/components/MkSwitch.vue';
-import FormSlot from '@/components/form/slot.vue';
import XLayer from '@/components/MkWatermarkEditorDialog.Layer.vue';
import * as os from '@/os.js';
-import { selectFile } from '@/utility/drive.js';
-import { misskeyApi } from '@/utility/misskey-api.js';
-import { prefer } from '@/preferences.js';
import { deepClone } from '@/utility/clone.js';
import { ensureSignin } from '@/i.js';
const $i = ensureSignin();
const props = defineProps<{
- preset: WatermarkPreset | null;
+ preset?: WatermarkPreset | null;
}>();
const preset = reactive(deepClone(props.preset) ?? {
diff --git a/packages/frontend/src/pages/settings/drive.vue b/packages/frontend/src/pages/settings/drive.vue
index b66865a408..cd2361c9bf 100644
--- a/packages/frontend/src/pages/settings/drive.vue
+++ b/packages/frontend/src/pages/settings/drive.vue
@@ -39,62 +39,107 @@ SPDX-License-Identifier: AGPL-3.0-only
-
-
-
-
- {{ i18n.ts.uploadFolder }}
- {{ uploadFolder ? uploadFolder.name : '-' }}
-
+
+
+ {{ i18n.ts.general }}
+
+
+
+
+ {{ i18n.ts.uploadFolder }}
+ {{ uploadFolder ? uploadFolder.name : '-' }}
+
+
+
+
+
+ {{ i18n.ts.drivecleaner }}
-
-
- {{ i18n.ts.drivecleaner }}
-
+
+
+
+ {{ i18n.ts.keepOriginalFilename }}
+ {{ i18n.ts.keepOriginalFilenameDescription }}
+
+
+
-
-
-
- {{ i18n.ts.watermark }}
-
-
-
-
-
-
-
-
-
-
-
-
- {{ i18n.ts.keepOriginalFilename }}
- {{ i18n.ts.keepOriginalFilenameDescription }}
+
+
+ {{ i18n.ts.alwaysMarkSensitive }}
-
-
+
-
-
- {{ i18n.ts.alwaysMarkSensitive }}
-
-
+
+
+ {{ i18n.ts.enableAutoSensitive }}{{ i18n.ts.beta }}
+ {{ i18n.ts.enableAutoSensitiveDescription }}
+
+
+
+
+
-
-
- {{ i18n.ts.enableAutoSensitive }}{{ i18n.ts.beta }}
- {{ i18n.ts.enableAutoSensitiveDescription }}
-
-
-
-
+
+
+ {{ i18n.ts.image }}
+
+
+
+
+
+ {{ i18n.ts.watermark }}
+
+
+
+
+
+
+
+
+
+ {{ i18n.ts.syncBetweenDevices }}
+
+
+
+
+
+
+
+
+
+ {{ i18n.ts.defaultPreset }}
+
+
+
+
+
+
+
+
+
+
+ {{ i18n.ts.defaultImageCompressionLevel }}
+
+
+
+
+
+
@@ -107,6 +152,7 @@ import XWatermarkItem from './drive.WatermarkItem.vue';
import type { WatermarkPreset } from '@/utility/watermarker.js';
import FormLink from '@/components/form/link.vue';
import MkSwitch from '@/components/MkSwitch.vue';
+import MkSelect from '@/components/MkSelect.vue';
import FormSection from '@/components/form/section.vue';
import MkKeyValue from '@/components/MkKeyValue.vue';
import FormSplit from '@/components/form/split.vue';
@@ -146,6 +192,22 @@ const meterStyle = computed(() => {
});
const keepOriginalFilename = prefer.model('keepOriginalFilename');
+const defaultWatermarkPresetId = prefer.model('defaultWatermarkPresetId');
+const defaultImageCompressionLevel = prefer.model('defaultImageCompressionLevel');
+
+const watermarkPresetsSyncEnabled = ref(prefer.isSyncEnabled('watermarkPresets'));
+
+function changeWatermarkPresetsSyncEnabled(value: boolean) {
+ if (value) {
+ prefer.enableSync('watermarkPresets').then((res) => {
+ if (res == null) return;
+ if (res.enabled) watermarkPresetsSyncEnabled.value = true;
+ });
+ } else {
+ prefer.disableSync('watermarkPresets');
+ watermarkPresetsSyncEnabled.value = false;
+ }
+}
misskeyApi('drive').then(info => {
capacity.value = info.capacity;
@@ -203,6 +265,10 @@ function onDeleteWatermarkPreset(id: string) {
...prefer.s.watermarkPresets.slice(0, index),
...prefer.s.watermarkPresets.slice(index + 1),
]);
+
+ if (prefer.s.defaultWatermarkPresetId === id) {
+ prefer.commit('defaultWatermarkPresetId', null);
+ }
}
}
diff --git a/packages/frontend/src/preferences/def.ts b/packages/frontend/src/preferences/def.ts
index 723475d2d5..0012727e7d 100644
--- a/packages/frontend/src/preferences/def.ts
+++ b/packages/frontend/src/preferences/def.ts
@@ -351,8 +351,16 @@ export const PREF_DEF = {
default: [] as string[],
},
watermarkPresets: {
+ accountDependent: true,
default: [] as WatermarkPreset[],
},
+ defaultWatermarkPresetId: {
+ accountDependent: true,
+ default: null as WatermarkPreset['id'] | null,
+ },
+ defaultImageCompressionLevel: {
+ default: 2,
+ },
'sound.masterVolume': {
default: 0.5,