gnome-shell-extension: JS que funciona no espelho não está em extensão

2

Eu tenho o seguinte snippet de código que (no espelho) me dá uma lista de contatos que eu tenho (gerenciado 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 pedaços de código são (até onde eu sei) equivalentes, já que ContactSearchProvider ' getInitialResultSet basicamente chama o método initial_search de ContactSystem.get_default() .

No entanto, quando coloco esses mesmos bits de código em uma extensão do shell do gnome (digamos, o método enable ), e eu global.log(contacts.length) ou global.log(contacts2.length) , sempre obtenho 0 .

Por isso, por algum motivo, este código funciona em um espelho, mas não em uma extensão. Por que é isso? Os contatos não estão carregados no ponto em que a extensão é executada? O provedor de pesquisa de contatos de alguma forma não está conectado a mim? Como posso contornar isso?

    
por mathematical.coffee 22.04.2012 / 14:33

1 resposta

2

Eu perguntei isso na lista de discussão do gnome-shell - acontece que as extensões são carregadas bem cedo na peça, antes que os contatos do usuário tenham sido adequadamente carregados.

Adicionar um atraso de 5 segundos ao snippet de código que recupera a lista de contatos (para dar ao sistema a chance de carregar todos os contatos) funciona bem.

    
por mathematical.coffee 27.04.2012 / 08:59