掌握侏儒壳牌JS接口的联系人列表(Getting list of contacts with Gno

2019-09-16 13:01发布

我刚开始写作的gnome-shell扩展摆弄,并想知道如何获得触点的用户列表。

我已经找到了一些可能的文件: 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接口,我可以使用函数get_all (我的信念是一个事实,即增强.c文件也有shell_contact_system_get_individualcontactDisplay.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.valuescontacts.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_allReturns: (transfer none): ...shell_contact_system_get_individualReturns: (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!

任何帮助将不胜感激(顺便说一下,有没有任何形式的关于这个?我觉得当我盯着源,并尝试从中推断出所有的文档非常证件不足的!)

Answer 1:

我相信这是一个错误,你已经找到一处是:在C方法的注释应该说Returns: (transfer full):为了回馈结果绑定。

下一个合乎逻辑的步骤将是报告的bug和补丁的Bugzilla的,但我需要说明的GNOME 3.6移除代码,所以我很怀疑这将是有史以来固定。

联系人搜索代码现在住在gnome的接触应用:

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



文章来源: Getting list of contacts with Gnome-Shell JS interface