我刚开始写作的gnome-shell扩展摆弄,并想知道如何获得触点的用户列表。
我已经找到了一些可能的文件: 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接口,我可以使用函数get_all
(我的信念是一个事实,即增强.c
文件也有shell_contact_system_get_individual
和contactDisplay.js
演示使用的Shell.ContactSystem.get_default().get_individual
),所以我尽量:
contactSys = Shell.ContactSystem.get_default();
// get contacts
contacts = contactSys.get_all();
有用! (我想出来的侏儒壳的“镜子” JavaScript解释器)。
这似乎是一个“GObject的”,所以我不知道如何处理这个对象来获取我的联系人的名字了。 我注意到(从C代码),这个对象是GeeMap *
,所以看为Gee.Map文档 ,我看看我能做到以下几点:
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
,注意to_array()
这些方法有:
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()
似乎是空。
所以,我的问题是: 如何才能获得的单个元素contacts
?
我也注意到,在评论shell_contact_system_get_all
说Returns: (transfer none): ...
而shell_contact_system_get_individual
说Returns: (transfer full): ...
,而后者功能工作(只要我知道我想个人的ID抬头,这是我的问题),而前者没有。 难道这是什么做的呢?
此外,作为一种解决方法,我目前可以利用的contactSearchProvider
类来实现这一目标(由概述使用时您intall 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!
任何帮助将不胜感激(顺便说一下,有没有任何形式的关于这个?我觉得当我盯着源,并尝试从中推断出所有的文档非常证件不足的!)