Files
nixpkgs/pkgs/by-name/po/polari/fix_sparql_database_race.patch
2025-11-22 00:50:03 +08:00

64 lines
1.9 KiB
Diff

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<Tracker.SparqlConnection>}
*/
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;
}