Scope::perform_action
メソッド内またはActivationQuery
オブジェクトのメソッド内で、結果属性を設定する方法、またはスコープ検索(更新)をトリガーする方法に少し迷いました。ソース内のデータを変更してから、新しいクエリで応答を更新するか、ソースが変更されたのと同じ方法で以前の結果を変更するという考え方です。典型的な例は、「読み取られた」ステータスセットです。
以下の例で少し手伝ってもらえますか?
sc::ActivationQueryBase::UPtr Scope::perform_action(const sc::Result &result,
sc::ActionMetadata const &metadata,
std::string const &widget_id, std::string const &action_id) {
//update current Result/reply or trigger new search by scope
return sc::ActivationQueryBase::UPtr(new ActivationQuery(result, metadata, widget_id, action_id, config_));
}
結果自体を変更することはできません。読み取り専用で受信されます。バックエンドデータに更新を適用してから、検索を再実行する必要があります。これを行うには、ActivationQueryクラスでActivationQueryBaseのactivate()メソッドを再実装します。 activate()でバックエンドデータを更新するために必要なことをすべて実行してから、次のctorで作成されたActivationResponseインスタンスを返します。
ActivationResponse(CannedQuery const&query);
クエリ引数はスコープを指している必要があります。
プレビューのボタンがタップされたときに検索を再実行する別の方法は、ボタンのuri属性にCannedQuery :: to_uri()の値を設定することですが、その場合、アクティベーションハンドラーは実行されません。
最初のアプローチでは、経験する可能性が高いことに注意してください https://bugs.launchpad.net/ubuntu/+source/unity8/+bug/1335761
それがお役に立てば幸いです。