首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取Gnome-Shell JS界面的联系人列表

获取Gnome-Shell JS界面的联系人列表
EN

Stack Overflow用户
提问于 2012-04-14 06:04:24
回答 1查看 557关注 0票数 1

我刚刚开始编写gnome扩展,并且想知道如何获得用户的联系人列表。

我已经找到了一些可能的文件:gnome-shell/js/ui/contactDisplay.jsgnome-shell/src/shell_contact_system.c

现在我在shell_contact_system.c中注意到以下函数:

代码语言:javascript
复制
/**
 * 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的用法)这一事实强化了我的信念,因此我尝试:

代码语言:javascript
复制
contactSys = Shell.ContactSystem.get_default();
// get contacts
contacts = contactSys.get_all();

它起作用了!(我正在Gnome的“外观玻璃”javascript解释器中试用)。

它似乎是一个'Gobject‘,所以我不知道如何处理这个对象,以获取我的联系人的名字。我注意到(从C代码中)这个对象是一个GeeMap *,所以看看Gee.Map文档,我看到我可以这样做:

代码语言:javascript
复制
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()方法:

代码语言:javascript
复制
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_individualReturns: (transfer full): ...,后一个函数可以工作(前提是我知道我想要查找的个人的ID,这是我的问题),而前者不是。这与它有关吗?

另外,作为一种解决方法,我目前可以使用contactSearchProvider类来实现这一点(当您输入所有gnome-contacts时,您可以在其中键入联系人的名称,并且它们将出现在概述中)。我基本上是搜索'',它应该返回给我每一个联系人的列表。这似乎是迂回的-我觉得我应该能够使用get_all()方法来获取所有的联系人,而不必搜索空字符串.

代码语言:javascript
复制
    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!

任何帮助都是非常感谢的(顺便问一句,有关于这方面的任何文档吗?)当我盯着源代码并试图从中推断出所有的文档时,我感到非常不合适!)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-04 06:53:46

我相信这是一个bug,您已经找到了它的位置:C方法上的注释应该是Returns: (transfer full):,以便将结果返回给绑定。

下一个逻辑步骤是向他们的bugzilla报告bug和补丁,但我需要注意的是,gnome 3.6中删除了代码,所以我怀疑它是否会被修复。

联系人搜索代码现在位于gnome-contact应用程序中:

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10151433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档