Notify::RelayUsecase
中継の 1 周期を担うユースケース(仕様書 4.2 節、4.3 節)。
依存するのは SourceRepository と PostRepository の抽象、ソース別の MessageBuilder、 そして設定スナップショットだけである。 差分検出はソース実装に、整形はソース側の MessageBuilder に閉じているため、 ここが持つのはパイプラインの順序制御と fan-out に限られる。
Constants
Log = ::Log.for("notify")
Constructors
new(sources : Array(SourceRepository), sinks : Array(PostRepository), builders : Array(MessageBuilder), config : Config::Root)
SourceInstance methods
1 件の通知をフィルタ、ルール解決、整形、fan-out の順に処理する(仕様書 4.3 節)。
send_test(settings : Config::Resolved, title : String, body : String, source_id : String = "windows") : Nil
設定 GUI とトレイメニューから呼ぶ疎通確認用の送信。 実際の中継と同じ整形を通すため、見た目と音をそのまま確認できる。 件名と本文は呼び出し側から受け取る。 このアプリが利用者へ向けて作る文言であり、選択言語で出す必要がある(issue #4)。 辞書は runtime 側にあり、ここから参照すると層が逆さになる。
sinks
Sourcesources
Sourceポーリングの 1 拍。 呼び出し間隔よりソースのポーリング間隔のほうが長い場合に備え、ソースごとに次回時刻を持つ。
時刻には単調時計を使う。 壁時計だと、時刻同期や利用者の時計修正でシステム時刻が後退したとき、 時計が元の値へ追いつくまでどのソースもポーリングされなくなるためである。