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!
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) –