1
0
mirror of https://github.com/misskey-dev/misskey.git synced 2026-07-27 17:24:37 +02:00
This commit is contained in:
syuilo
2026-07-25 19:51:02 +09:00
parent 66498639bf
commit 6aad11766a
2 changed files with 41 additions and 2 deletions

View File

@@ -1,6 +1,45 @@
# Preferences system
## ユースケース
ユーザーの環境設定を管理するシステム。
## 指針
実装上のミスで、**設定値が意図せず失われる(古い値で上書きされる)ことが絶対にあってはならない。**
設定値が失われる、考えられるシナリオの例:
- 複数のタブでMisskeyを開いていて、タブAで設定を編集した後、タブBを開いたところ、タブBの古い状態の内容で設定が保存され、タブAで行った編集が巻き戻ってしまった。
- プロファイルの同期機能をオンにしたところ、サーバーに保存されていた古い設定でローカルが上書きされてしまった。
上記のシナリオが絶対に発生しない設計・実装にしなければならない。
上記以外にも考えられるシナリオがあれば、必ず適切な対処を行う設計・実装にしなければならない。
## 仕様
### タブ間同期
ブラウザで複数タブを開いているとき、あるタブで変更した設定が他のタブでも反映されるようにし、UXを向上させ、古い設定情報が上書き保存されることを防ぐ。
### 自動バックアップ(cloudBackup)
定期的、または特定のタイミングなどで、プロファイルをサーバーに自動的にアップロードする。
### 自動同期(cloudSync)
定期的、または特定のタイミングなどで、サーバーにアップロードされたプロファイルをダウンロードし、ローカルに適用する。
### 設定項目: デバイス間で同期(syncBetweenDevices, ValueMeta.sync)
デバイス間・プロファイル横断でその設定項目の設定値を同期する。
当オプションを有効にするかどうかは設定項目ごとに設定可能。
## ユーザーストーリー(ユースケース)
### 同じプロファイルを複数のデバイスで使いたい(同期したい)
自動バックアップと自動同期をオンにする。
### (新しいデバイスなどで)既存のプロファイルを継承した新しいプロファイルを作りたい

View File

@@ -75,7 +75,7 @@ export type PreferencesProfile = {
id: string;
version: string;
type: 'main';
modifiedAt: number; // 仕様が若干直感的ではない(syncされた値が降ってきたときは更新されないなど)ため、一応残してはいるが積極的な利用はしない方が無難
modifiedAt: number; // 仕様が若干直感的ではない(syncされた値が降ってきたときは更新されないなど)ため、一応残してはいるが積極的な利用はしない方が無難。設定値の新旧比較が必要なら項目ごとのmodifiedAtを使うべし
name: string;
preferences: {
[K in keyof PREF]: PrefRecord<K>[];