gnome-shell-extension: JS, который работает в Looking Glass, не работает в расширении

gnome-shell-extension: JS, который работает в Looking Glass, не работает в расширении

У меня есть следующий фрагмент кода, который (в зеркале) выдает мне список моих контактов (управляемых 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

Эти два фрагмента кода (насколько мне известно) эквивалентны, поскольку ContactSearchProviderпо getInitialResultSetсути вызывает initial_searchметод ContactSystem.get_default().

Однако, когда я поместил этитакой жефрагменты кода в расширение оболочки gnome (скажем, метод enable), и я global.log(contacts.length)или global.log(contacts2.length),Я всегда получаю0.

Поэтому по какой-то причине этот код работает в зеркале, нонетв расширении. Почему это? Контакты не загружаются в момент выполнения расширения? Поставщик поиска контактов каким-то образом не подключен ко мне? Как это обойти?

решение1

Я задал этот вопрос в списке рассылки gnome-shell — оказалось, что расширения загружаются довольно рано, еще до того, как контакты пользователя будут должным образом загружены.

Добавление 5-секундной задержки к фрагменту кода, который извлекает список контактов (чтобы дать системе возможность загрузить все контакты), работает просто замечательно.

Связанный контент