1

Je viens de commencer à jouer avec l'écriture d'extensions gnome-shell, et je voudrais savoir comment obtenir la liste des contacts d'un utilisateur. J'ai repéré certains fichiers probables: gnome-shell/js/ui/contactDisplay.js et gnome-shell/src/shell_contact_system.c.Obtenir la liste des contacts avec l'interface Jn Gnome-Shell

Maintenant, je remarque dans shell_contact_system.c la fonction suivante:

/** 
* 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; 
} 

Ceci suggère que INTHE javascript l'interface que je peux utiliser la fonction get_all (ma conviction est renforcée par le fait que le fichier .c dispose également d'un shell_contact_system_get_individual et contactDisplay.js démontre l'utilisation de Shell.ContactSystem.get_default().get_individual), donc j'essaye:

contactSys = Shell.ContactSystem.get_default(); 
// get contacts 
contacts = contactSys.get_all(); 

Cela fonctionne! (Je l'essaie dans l'interpréteur javascript de "Gnome-shell").

Il semble être un 'Gobject', donc je n'ai aucune idée de ce qu'il faut faire de cet objet pour obtenir les noms de mes contacts. Je remarque (à partir du code C) que cet objet est un GeeMap *, donc regarder le documentation for Gee.Map, je vois que je peux faire ce qui suit:

contacts.size // returns 31, which is the number of contacts I have ! 
contacts.values // is a Gee.Collection 
contacts.keys // is a Gee.Set 

J'essaie alors de regarder contacts.values et contacts.key, prenant note de la méthode to_array() ceux-ci ont:

contacts.values.to_array() 
contacts.keys.to_array() 

Cependant quand je fais cela je reviens un tableau vide out: contacts.xxx.to_array().size est 0, mais contacts.size est 31 ?? !!

La même chose se produit lorsque j'essaie d'utiliser un contacts.map_iterator() pour parcourir la carte; it.get_value() et it.get_key() semblent être nulles. Donc, ma question est: Comment accéder aux éléments individuels de contacts?

Je note que le commentaire shell_contact_system_get_all dit Returns: (transfer none): ... tout shell_contact_system_get_individual dit Returns: (transfer full): ..., et cette dernière fonction fonctionne (à condition que je connais l'identité de l'individu que je veux regarder, ce qui est mon problème), alors que les anciens doesn 't. Cela pourrait-il être quelque chose à voir avec cela? Pour résoudre ce problème, je peux actuellement utiliser la classe contactSearchProvider (utilisée par la vue d'ensemble lorsque vous entrez gnome-contacts où vous pouvez taper le nom d'un contact et il apparaîtra dans la vue d'ensemble). Je recherche essentiellement '' qui devrait me renvoyer une liste de chaque contact. Il semble bien rond-point - je sens que je devrais être en mesure d'utiliser la méthode get_all() pour obtenir tous les contacts sans avoir à rechercher sur une chaîne vide ...

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! 

Toute aide serait grandement apprécié (par la voie , est-ce qu'il y a une sorte de documentation à ce sujet? Je me sens extrêmement inadéquat quand je regarde la source et j'essaie d'en déduire toute la documentation!

Répondre

1

Je crois que c'est un bug et que vous avez déjà trouvé où il est: l'annotation sur la méthode C devrait dire Returns: (transfer full): afin de rendre les résultats aux liaisons. La prochaine étape logique serait de signaler le bug et le patch à leur bugzilla, mais je dois noter que le code a été supprimé dans gnome 3.6, donc je suis sceptique qu'il sera jamais corrigé.

Le code de recherche de contact vit maintenant dans l'application gnome-contact au:

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

+0

Ouais, figurés autant (j'ai demandé autour de la gnome-shell IRC# une fois essentiellement le soutien gobject pour les gens/Gee n'était pas très complet - ne me surprend pas qu'ils l'ont laissé tomber) –

Questions connexes