Tengo el siguiente fragmento de código que (en el espejo) me da una lista de contactos que tengo (administrados por gnome-contacts):
// METHOD 1:
const ContactDisplay = imports.ui.contactDisplay;
let csp = new ContactDisplay.ContactSearchProvider();
let contacts = csp.getInitialResultSet(['']);
contacts.length // 120 contacts
// METHOD 2:
const ContactSystem = Shell.ContactSystem;
let cs = ContactSystem.get_default();
let contacts2 = cs.initial_search(['']);
contacts2.length // 120 contacts
Estos dos fragmentos de código son (hasta donde yo sé) equivalentes, ya que ContactSearchProvider
básicamente getInitialResultSet
llama al initial_search
método de ContactSystem.get_default()
.
Sin embargo, cuando pongo estosmismobits de código en una extensión de gnome Shell (digamos el enable
método), y yo global.log(contacts.length)
o global.log(contacts2.length)
,siempre lo consigo0
.
Por lo tanto, por alguna razón, este código funciona en el espejo, peronoen una extensión. ¿Por qué es esto? ¿Los contactos no están cargados en el momento en que se ejecuta la extensión? ¿El proveedor de búsqueda de contactos de alguna manera no está conectado conmigo? ¿Cómo puedo solucionarlo?
Respuesta1
Pregunté esto en la lista de correo de gnome-Shell: resulta que las extensiones se cargan bastante temprano en el artículo, antes de que los contactos de un usuario se hayan cargado correctamente.
Agregar un retraso de 5 segundos al fragmento de código que recupera la lista de contactos (para darle al sistema la oportunidad de cargar todos los contactos) funciona de maravilla.