Ich habe den folgenden Codeausschnitt, der mir (im Blickfeld) eine Liste meiner Kontakte anzeigt (verwaltet von 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
Diese beiden Codeteile sind (soweit ich weiß) gleichwertig, da ContactSearchProvider
im getInitialResultSet
Grunde die initial_search
Methode von aufruft ContactSystem.get_default()
.
Wenn ich diese jedochDasselbeTeile des Codes in eine Gnome-Shell-Erweiterung (sagen wir die enable
Methode), und ich global.log(contacts.length)
oder global.log(contacts2.length)
,Ich bekomme immer0
.
Aus irgendeinem Grund funktioniert dieser Code in Looking-Glass, abernichtin einer Erweiterung. Warum ist das so? Werden die Kontakte nicht geladen, wenn die Erweiterung ausgeführt wird? Ist der Kontaktsuchanbieter irgendwie nicht mit mir verbunden? Wie kann ich das umgehen?
Antwort1
Ich habe dies auf der Gnome-Shell-Mailingliste gefragt – es stellte sich heraus, dass die Erweiterungen ziemlich früh im Stück geladen werden, bevor die Kontakte eines Benutzers richtig geladen wurden.
Das Hinzufügen einer 5-Sekunden-Verzögerung zum Code-Snippet, das die Kontaktliste abruft (um dem System die Möglichkeit zu geben, alle Kontakte zu laden), funktioniert wunderbar.