gnome-shell-extension: 거울에서 작동하는 JS는 확장 기능이 없습니다.

gnome-shell-extension: 거울에서 작동하는 JS는 확장 기능이 없습니다.

(거울에) 내가 가지고 있는 연락처 목록(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하므로 (내가 아는 한) 동일합니다 .getInitialResultSetinitial_searchContactSystem.get_default()

그런데 이걸 넣어보니같은gnome 쉘 확장(메서드 등)에 코드 비트를 추가하고 enableI global.log(contacts.length)또는 global.log(contacts2.length),나는 항상 얻는다0.

따라서 어떤 이유로 이 코드는 거울상에서는 작동하지만~ 아니다확장 프로그램에서. 왜 이런거야? 확장이 실행되는 시점에 연락처가 로드되지 않습니까? 연락처 검색 공급자가 나에게 연결되지 않았나요? 이 문제를 어떻게 해결할 수 있나요?

답변1

나는 gnome-shell 메일링 리스트에 이것을 물었습니다. 사용자의 연락처가 제대로 로드되기 전에 확장 기능이 해당 부분의 아주 초기에 로드되는 것으로 나타났습니다.

연락처 목록을 검색하는 코드 조각에 5초 지연을 추가하면(시스템이 모든 연락처를 로드할 수 있는 기회를 제공하기 위해) 효과가 좋습니다.

관련 정보