私は次のコード スニペットを持っています。これは (Looking Glass 内で) 私が持っている連絡先のリスト (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
この 2 つのコードは (私の知る限り) 同等です。 はContactSearchProvider
基本的にの メソッドgetInitialResultSet
を呼び出します。initial_search
ContactSystem.get_default()
しかし、これらを同じコードのビットをgnomeシェルの拡張機能(enable
メソッドと呼ぶ)に組み込みglobal.log(contacts.length)
、global.log(contacts2.length)
私はいつも0
。
そのため、何らかの理由でこのコードはLooking-glassでは動作しますが、ない拡張機能で。これはなぜでしょうか? 拡張機能の実行時点で連絡先が読み込まれていないのでしょうか? 連絡先検索プロバイダーが何らかの理由で接続されていないのでしょうか? どうすれば回避できるでしょうか?
答え1
私は gnome-shell メーリング リストでこのことを質問しました。拡張機能は、ユーザーの連絡先が適切に読み込まれる前に、かなり早い段階で読み込まれることが判明しました。
連絡先リストを取得するコード スニペットに 5 秒の遅延を追加すると (システムにすべての連絡先を読み込む機会を与えるため)、うまく機能します。