У меня есть следующий отрывок кода, который (в зеркале) дает мне список контактов, которые я имею (управляемый контактами гнома):
// 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()
.
Однако, когда я поместил эти те же биты кода в расширение оболочки гнома (скажите enable
метод), и я global.log(contacts.length)
или global.log(contacts2.length)
, Я всегда добираюсь 0
.
Следовательно по некоторым причинам этот код работает в зеркале, но не в расширении. Почему это? Разве контакты не загружаются в точке, расширение выполняется? Контакт, ищут поставщика, так или иначе не соединенного до меня? Как я могу работать вокруг этого?
Я спросил об этом в списке рассылки gnome-shell - оказалось, что расширения загружаются довольно рано, до того, как контакты пользователя будут загружены должным образом.
Добавление 5-секундной задержки к фрагменту кода, который извлекает список контактов (чтобы дать системе возможность загрузить все контакты), создает эффект.