1

gnome-shell拡張機能の作成を控え始めたばかりで、ユーザーの連絡先のリストを取得する方法を知りたいと思います。Gnome-Shell JSインタフェースの連絡先のリストを取得する

私はおそらくいくつかのファイル:gnome-shell/js/ui/contactDisplay.jsgnome-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_individualcontactDisplay.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.valuescontacts.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! 

すべてのヘルプは大幅な方法で(いただければ幸いです私はソースを見つめてそこからすべてのドキュメントを推測しようとすると、私は非常に不十分だと感じます!)

答えて

1

これはバグだと思っていますが、それはどこにあるのかはすでに分かっています.CメソッドのアノテーションはReturns: (transfer full):と言って、結果をバインディングに戻してください。

次の論理的なステップは、バグとそのパッチをバグジラに報告することですが、私はgnome 3.6でコードが削除されたことに注意する必要があります。 、うん

http://git.gnome.org/browse/gnome-contacts

+0

同じくらい(私は/一度、基本的には#GNOMEシェルIRC周りの人々のためのGObjectのサポートを尋ねた考え出し:

接触検索コードは、今では、GNOME-接触アプリに住んでいますジーはあまり完璧ではなかった - 私は彼らがそれを落としたことを驚かない) –

関連する問題