機能 #1002
完了
Satoshi Okuno さんが7年以上前に追加.
7年以上前に更新.
プラグイン名:
intent_selector.rb
説明
似たようなマッチ条件のインテントが複数ある場合で、とあるURLがそのどちらの条件もマッチした場合、「どの方法で開きますか?」が表示されます。
(例:まったく同じ条件のインテントが二つ以上登録されている場合)
intent_open()で、推奨インテントが一個なら発動。それ以外は「どの方法で?」が出るロジックになっているのが原因と思います。
動きとして、マッチしたインテントの中から、何らかの優先順位で一つが選ばれて発動するのが良いと考えます。
例えば、同じURLマッチ条件の(未定義)と対象(モデル)ありインテントが定義されていた場合、対象ありが優先されるべきと思います。
また、同じモデルでURLマッチ条件の長さが異なる場合、より長い文字列にヒットした方を優先するのはどうでしょうか。
(http://teokureとhttp://teokure/ahiruなインテントが定義されている場合、http://teokure/ahiru/yaki.htmlを「開く」時は、より具体的な後者が発動するべきと思っています)
上記をまとめると、こんな感じの優先順位が良いかと思っています。いかがでしょうか。
【優先度高】
対象(モデル)付きインテント(マッチ用文字列長が長い)
対象(モデル)付きインテント(マッチ用文字列長が短い)
対象が(未定義)インテント(マッチ用文字列長が長い)
対象が(未定義)インテント(マッチ用文字列長が短い)
【優先度低】
#1001も踏まえたintent_selector.rbを添付しますので、ご確認いただければ幸いです。
ファイル
添付ファイルについて、どこが起点になっているかよく分からなかったので、パッチももらえますか。
パッチ作ってみましたので、中身みていただけると嬉しいです。
diffを見てイメージは掴めました。
条件の具体性によってintent routingの優先順位を決めることについて¶
優先順位の付け方については、現在の前方一致が場当たり的なので仕方がないですが、せっかくなのでもう少し将来の拡張性を考えたいです。
コードを見て気づいたかもしれませんが、Intentのマッチ条件は、現在でこそ前方一致だけですが、将来的に別の条件を足すことが出来るようになっています。具体的には部分一致・後方一致・正規表現を想定していて、このマッチ条件自体をプラグインで拡張するインターフェイスも視野に入れています。
しかしあまりにも条件が複雑になると管理しきれ無さそうなのと、とうぶんはそれほど自由度を持ったマッチングは要求されないだろうということで、前方一致のみ実装しています。前方一致のみなら頂いたパッチのような方針でうまく行きますが、他のマッチ条件が出てくると、条件の字数では比較できなくなります。実装するなら、その当たりも絡めて考えたいなと思います。
優先順位をつけるなら、管理画面で条件の順番を入れ替えられるようにして、より上にあるものが高優先度になるなど、ユーザにルールの優先順位を決めさせるような仕組みのほうが良いように思います。
recommended intentが複数ある場合に、最も優先順位が高いものを採用することについて¶
現在、Intentを決定するには
- openイベントの引数となったModelの種類
- intent_selectorの設定
の二つのファクターがありますが、これで十分なのでは、と思っています。
そもそも、vanillaだとModelによってIntentは一意に決定します。サードパーティプラグインによってIntentが足されて競合すると、Intentの選択ダイアログが出てきて、どちらを使うかを選択することになります。
というのがこちらの想定なんですが、多分こういう話が出てくるということは何かあったんですよね。具体的に教えてもらっていいですか。
条件の具体性によってintent routingの優先順位を決めることについて
確かに。現在は前方一致前提での提案です。
今後他のマッチ条件も実装されるならば機械的な判断方法はなくなってくるはずなので、ユーザに優先順位を委ねるのがいいですね。
recommended intentが複数ある場合に、最も優先順位が高いものを採用することについて
あー。こっちの方は勘違いですね。今試したら問題ない挙動でした。
・まったく同じ条件で、違うアクションのインテント→そのアクションが列挙された「どの方法で?」が出る。
インテント未登録の時の全アクションが列挙された「どの方法で?(画像ビューア、外部ブラウザ)」と、
僕が試した推奨アクションが列挙された「どの方法で?(画像ビューア、外部ブラウザ)」が同内容だったので、
勘違いしていました。
・まったく同じ条件で、同じアクションのインテント→マージされてそのアクションが実行される。
問題ない挙動でした。
失礼しました。
本件、今後の拡充が計画されていることと、片一方は勘違いということでクローズさせてください。
他の形式にエクスポート: Atom
PDF