/* * Copyright (C) 2017 Red Hat, Inc. * SPDX-License-Identifier: LGPL-2.1-or-later */ import cockpit from "cockpit"; import * as python from "python.js"; import inotify_py from "inotify.py"; import { debug } from "./utils"; import watch_appstream_py from "./watch-appstream.py"; let metainfo_db = null; export function get_metainfo_db() { if (!metainfo_db) { metainfo_db = cockpit.event_target({ ready: false, components: [], origin_files: [] }); let buf = ""; python.spawn([inotify_py, watch_appstream_py], [], { environ: ["LANGUAGE=" + (cockpit.language || "en")] }) .stream(function (data) { buf += data; const lines = buf.split("\n"); buf = lines[lines.length - 1]; if (lines.length >= 2) { const metadata = JSON.parse(lines[lines.length - 2]); metainfo_db.components = metadata.components; metainfo_db.origin_files = metadata.origin_files; metainfo_db.ready = true; metainfo_db.dispatchEvent("changed"); debug("read metainfo_db:", metainfo_db); } }) .catch(error => console.warn("watch-appstream.py failed:", error)); } return metainfo_db; }