私は次のコードスニペットを持っています。これは(見た目で)私が持っている連絡先のリストを私に与えます(gnome-contactsによって管理されています):
_// METHOD 1:
const ContactDisplay = imports.ui.contactDisplay;
let csp = new ContactDisplay.ContactSearchProvider();
let contacts = csp.getInitialResultSet(['']);
contacts.length // 120 contacts
// METHOD 2:
const ContactSystem = Shell.ContactSystem;
let cs = ContactSystem.get_default();
let contacts2 = cs.initial_search(['']);
contacts2.length // 120 contacts
_
ContactSearchProvider
のgetInitialResultSet
は基本的にContactSystem.get_default()
の_initial_search
_メソッドを呼び出すため、この2つのコードは(私が知る限り)同等です。
ただし、これらの同じビットのコードをgnome Shell拡張機能(たとえばenable
メソッド)に入れると、global.log(contacts.length)
またはglobal.log(contacts2.length)
、私は常に_0
_を取得します。
したがって、何らかの理由で、このコードは鏡面では機能しますが、拡張機能ではnotです。どうしてこれなの?拡張機能が実行された時点で連絡先が読み込まれていませんか?連絡先検索プロバイダーがどういうわけか私に接続されていませんか?どうすれば回避できますか?
私はこれをgnome-Shellメーリングリストで尋ねました-ユーザーの連絡先が適切にロードされる前に、拡張機能がピースのかなり早い段階でロードされていることがわかりました。
連絡先リストを取得するコードスニペットに5秒の遅延を追加すると(システムにすべての連絡先をロードする機会を与えるため)、魅力的です。