gnome-shell拡張機能の作成を控え始めたばかりで、ユーザーの連絡先のリストを取得する方法を知りたいと思います。Gnome-Shell JSインタフェースの連絡先のリストを取得する
私はおそらくいくつかのファイル:gnome-shell/js/ui/contactDisplay.js
とgnome-shell/src/shell_contact_system.c
を追跡しました。
今、私はshell_contact_system.c
に次の関数を気づく:
/**
* shell_contact_system_get_all:
* @self: A #ShellContactSystem
*
* Returns: (transfer none): All individuals
*/
GeeMap *
shell_contact_system_get_all (ShellContactSystem *self)
{
GeeMap *individuals;
g_return_val_if_fail (SHELL_IS_CONTACT_SYSTEM (self), NULL);
individuals = folks_individual_aggregator_get_individuals (self->priv->aggregator);
return individuals;
}
これはjavascriptのインタフェースinthe私は(私の信念は.c
ファイルもshell_contact_system_get_individual
とcontactDisplay.js
実証を持っているという事実によって補強されている機能get_all
を使用することができますことを示唆していますShell.ContactSystem.get_default().get_individual
の使用)、私は試してみます:
contactSys = Shell.ContactSystem.get_default();
// get contacts
contacts = contactSys.get_all();
それは動作します! (私はGnome-shellの「見た目のガラス」のjavascriptインタプリタで試しています)。
それは私の連絡先の名前を取得するために、このオブジェクトをどうすればいいかわからないので、「ゴブジェクト」と思われます。 to_array()
方法に注目し、
contacts.size // returns 31, which is the number of contacts I have !
contacts.values // is a Gee.Collection
contacts.keys // is a Gee.Set
私はその後、contacts.values
とcontacts.key
を見てみてください:私はそうdocumentation for Gee.Mapを見て、私は次の操作を行うことができます参照してください、このオブジェクトはGeeMap *
であること(Cコードから)気付きますこれらは持っている:私はこれを行うとき
contacts.values.to_array()
contacts.keys.to_array()
は、しかし、私は空の配列戻っ出る:contacts.xxx.to_array().size
を0で、まだcontacts.size
は31です?? !!
contacts.map_iterator()
を使用してマップを反復しようとすると同じことが起こります。 it.get_value()
およびit.get_key()
はnullと表示されます。
私の質問はcontacts
の個々の要素にアクセスするにはどうすればよいですか?私はかつてのdoesnのに対し、shell_contact_system_get_all
コメントは(私は私の問題である私が見てみたい個別のIDを知って)Returns: (transfer none): ...
shell_contact_system_get_individual
ながらはReturns: (transfer full): ...
が言うと、後者の機能が動作すると言うことに注意してください
't。これはそれと関係がありますか?
また、現時点ではcontactSearchProvider
クラスを使用してこれを実現できます(gnome-contacts
を入力したときに概要で使用され、連絡先の名前を入力すると概要に表示されます)。私は基本的に''
を検索します。私はすべての連絡先のリストを返します。これは、しかしラウンドアバウトようだ - 私はちょうど空の文字列を検索することなく、すべての連絡先を取得するためにget_all()
メソッドを使用することができるはずと感じ...
const ContactDisplay = imports.ui.contactDisplay;
cds = new ContactDisplay.contactSearchProvider;
res = cds.getInitialResultSet(['']);
// woohoo! res.length is 31, and res[0], res[1], ... are all not null!
すべてのヘルプは大幅な方法で(いただければ幸いです私はソースを見つめてそこからすべてのドキュメントを推測しようとすると、私は非常に不十分だと感じます!)
同じくらい(私は/一度、基本的には#GNOMEシェルIRC周りの人々のためのGObjectのサポートを尋ねた考え出し:
接触検索コードは、今では、GNOME-接触アプリに住んでいますジーはあまり完璧ではなかった - 私は彼らがそれを落としたことを驚かない) –