Eu tenho o seguinte trecho de código que (no espelho) me dá uma lista de contatos que tenho (gerenciados 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
Esses dois trechos de código são (até onde eu sei) equivalentes, pois ContactSearchProvider
basicamente getInitialResultSet
chama o initial_search
método de ContactSystem.get_default()
.
No entanto, quando coloco estesmesmopedaços de código em uma extensão do shell do gnome (digamos, o enable
método) e eu global.log(contacts.length)
ou global.log(contacts2.length)
,eu sempre consigo0
.
Portanto, por alguma razão, esse código funciona no espelho, masnãoem uma extensão. Por que é isso? Os contatos não estão carregados no momento em que a extensão é executada? O provedor de pesquisa de contatos não está de alguma forma conectado a mim? Como posso contornar isso?
Responder1
Eu perguntei isso na lista de discussão do gnome-shell - acontece que as extensões são carregadas bem no início do artigo, antes que os contatos do usuário tenham sido carregados corretamente.
Adicionar um atraso de 5 segundos ao trecho de código que recupera a lista de contatos (para dar ao sistema a chance de carregar todos os contatos) funciona muito bem.