gnome-shell-extension: JS que funciona no espelho não funciona na extensão

gnome-shell-extension: JS que funciona no espelho não funciona na extensão

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 ContactSearchProviderbasicamente getInitialResultSetchama o initial_searchmétodo de ContactSystem.get_default().

No entanto, quando coloco estesmesmopedaços de código em uma extensão do shell do gnome (digamos, o enablemé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.

informação relacionada