(거울에) 내가 가지고 있는 연락처 목록(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
I global.log(contacts.length)
또는 global.log(contacts2.length)
,나는 항상 얻는다0
.
따라서 어떤 이유로 이 코드는 거울상에서는 작동하지만~ 아니다확장 프로그램에서. 왜 이런거야? 확장이 실행되는 시점에 연락처가 로드되지 않습니까? 연락처 검색 공급자가 나에게 연결되지 않았나요? 이 문제를 어떻게 해결할 수 있나요?
답변1
나는 gnome-shell 메일링 리스트에 이것을 물었습니다. 사용자의 연락처가 제대로 로드되기 전에 확장 기능이 해당 부분의 아주 초기에 로드되는 것으로 나타났습니다.
연락처 목록을 검색하는 코드 조각에 5초 지연을 추가하면(시스템이 모든 연락처를 로드할 수 있는 기회를 제공하기 위해) 효과가 좋습니다.