class

Config::Usecase

Inherits Reference < Object

設定の検証、保存、再読み込み、各 usecase への反映を担う(仕様書 4.8.2 節)。

Constants

BUILTIN_ICONS = ["default", "warning", "error"] of ::String
BUILTIN_SOUNDS = ["default", "warning", "error"] of ::String
LANGUAGES = ["auto", "ja", "en"] of ::String
Log = ::Log.for("config")
LOG_LEVELS = ["trace", "debug", "info", "notice", "warn", "error", "fatal", "none"] of ::String
UPDATE_CHANNELS = ["stable", "test"] of ::String

Constructors

new(repository : Repository, current : Root = Root.default)
Source

Instance methods

current
Source
load

起動時の読み込み。 設定ファイルが無ければ初期設定を書き出し、壊れていれば初期設定で起動する。

Source
on_apply

検証を通った設定を各 usecase へ流すためのフック。 composition root がスナップショットの差し替えを登録する。

Source
on_apply=(on_apply : Proc(Root, Nil))

検証を通った設定を各 usecase へ流すためのフック。 composition root がスナップショットの差し替えを登録する。

Source
readable?

current が設定ファイルの内容かどうか。 読めなかったときは既定値で動くため、その内容でファイルを書き戻してはならない。

Source
record

アプリ自身が書き込む記録だけを書き戻す(issue #15)。

利用者が設定画面から保存する save とは分けてある。 あちらは全項目を画面で確かめたうえでの明示的な上書きであり、外部変更の警告も出す。 こちらは SteamVR の同期や更新の確認から、利用者の操作を伴わずに走る。 メモリ上のスナップショットで全体を置き換えると、その間の手編集を警告なしに失う。

渡すブロックは、書き戻す元になる設定を受け取って、記録を載せ替えたものを返す。 記録がディスクへ書けたかを返す。書けなかった場合、呼び出し側は次の機会に呼び直せる。

書き戻す元は、そのつどディスクから読む。 メモリ上の設定がディスクと一致しているかを更新時刻から判断することはできない。 内容と更新時刻は別々の呼び出しで得るものであり、その隙間に書かれると食い違う。 読んでから書くまでは短く、隙間は書き出す直前の見直しで狭められる。 一方、読み込みから次の書き戻しまでを一致していると見なすと、その間ずっと食い違いうる。

読んだ内容は動作へ反映しない。current へ載せるのは記録だけである。 利用者が「設定を再読み込み」を押す前に、編集の途中のものへ勝手に切り替わるのを避ける。 読んだ内容はディスクへ書いた側に残っているので、次の読み込みで揃う。

記録そのものは、書けたかどうかに関わらず動作へ反映する。 反映しないと、たとえば自動起動の登録が決着しないままになり、 再試行の条件が成立し続けて 60 秒ごとに登録し直すことになる。

Source
register_validator(section : String, &block : JSON::Any | Nil -> Array(String)) : Nil

"sources.windows" のようなセクション名に対する検証をアダプタから登録する。

Source
reload

手動編集後の取り込み(トレイメニューの「設定を再読み込み」)。 不正な JSON を読んだ場合は直前の有効な設定で動作を続ける(仕様書 5 章)。

Source
repository
Source
save(root : Root, overwrite_unreadable : Bool = false) : Array(ValidationError)

保存は全項目が有効なときだけ行う。 保存が通ったときだけスナップショットを差し替えるため、検証エラーは現在の動作に影響しない。

設定ファイルを読めていない間は、書き出さずに反映だけを行う。 このとき current は既定値であり、書き戻すと利用者のルールごとファイルを失う。 読めなかったファイルはそのまま残してあり、利用者が直せる状態にしておく必要がある。

overwrite_unreadable は、利用者が設定画面で全項目を確かめて保存したときに真にする。 壊れたファイルを画面から直す操作そのものなので、ここは書き出さなければならない。

Source
validate(root : Root) : Array(ValidationError)
Source