diff --git a/src/utils.js b/src/utils.js index 3a9863d..6314f39 100644 --- a/src/utils.js +++ b/src/utils.js @@ -547,29 +547,40 @@ export function formatDateTime(date) { } /** - * @returns {Tracker.SparqlConnection} + * @returns {Promise} */ export async function getSparqlStore() { - await _sparqlStorePromise; + if (_sparqlStorePromise) + return _sparqlStorePromise; - if (_sparqlStore) - return _sparqlStore; - - const {promise, resolve} = Promise.withResolvers(); + const { promise, resolve, reject } = Promise.withResolvers(); _sparqlStorePromise = promise; - const path = GLib.build_filenamev( - [GLib.get_user_data_dir(), 'polari', 'chatlogs.v1']); - const dir = Gio.File.new_for_path(path); - const ontology = Gio.File.new_for_uri( - 'resource:///org/gnome/Polari/ontologies/'); - - _sparqlStore = await Tracker.SparqlConnection.new_async( - Tracker.SparqlConnectionFlags.FTS_ENABLE_STEMMER | - Tracker.SparqlConnectionFlags.FTS_ENABLE_UNACCENT, - dir, ontology, null); + (async () => { + try { + if (_sparqlStore) { + resolve(_sparqlStore); + return; + } - resolve(); + const path = GLib.build_filenamev( + [GLib.get_user_data_dir(), 'polari', 'chatlogs.v1']); + const dir = Gio.File.new_for_path(path); + const ontology = Gio.File.new_for_uri( + 'resource:///org/gnome/Polari/ontologies/'); + + const store = await Tracker.SparqlConnection.new_async( + Tracker.SparqlConnectionFlags.FTS_ENABLE_STEMMER | + Tracker.SparqlConnectionFlags.FTS_ENABLE_UNACCENT, + dir, ontology, null + ); + + _sparqlStore = store; + resolve(store); + } catch (e) { + reject(e); + } + })(); - return _sparqlStore; + return promise; }