class

Notify::RelayUsecase

Inherits Reference < Object

中継の 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)
Source

Instance methods

config

設定スナップショット。 差し替えは代入 1 回で済み、周期の途中で新旧が混ざらない(仕様書 4.8.2 節)。

Source
config=(config : Config::Root)

設定スナップショット。 差し替えは代入 1 回で済み、周期の途中で新旧が混ざらない(仕様書 4.8.2 節)。

Source
deliver(message : Message) : Nil

全シンクへ同報する。 あるシンクの失敗が他のシンクへの送信を妨げないよう、シンクごとに失敗を閉じ込める。

Source
observed_apps

ソース別の直近の観測結果。 設定 GUI がルールの match_app_id を選ばせるための入力補助に使う(仕様書 4.8.1 節)。

Source
paused

中継の一時停止(トレイメニューから切り替える)。

Source
paused=(paused : Bool)

中継の一時停止(トレイメニューから切り替える)。

Source
relay(incoming : Incoming, snapshot : Config::Root = @config) : Bool

1 件の通知をフィルタ、ルール解決、整形、fan-out の順に処理する(仕様書 4.3 節)。

Source
send_test(settings : Config::Resolved, title : String, body : String, source_id : String = "windows") : Nil

設定 GUI とトレイメニューから呼ぶ疎通確認用の送信。 実際の中継と同じ整形を通すため、見た目と音をそのまま確認できる。 件名と本文は呼び出し側から受け取る。 このアプリが利用者へ向けて作る文言であり、選択言語で出す必要がある(issue #4)。 辞書は runtime 側にあり、ここから参照すると層が逆さになる。

Source
sinks
Source
sources
Source
tick(now : Time::Span = Time.monotonic) : Nil

ポーリングの 1 拍。 呼び出し間隔よりソースのポーリング間隔のほうが長い場合に備え、ソースごとに次回時刻を持つ。

時刻には単調時計を使う。 壁時計だと、時刻同期や利用者の時計修正でシステム時刻が後退したとき、 時計が元の値へ追いつくまでどのソースもポーリングされなくなるためである。

Source