#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" DIST_DIR="${ROOT_DIR}/dist" REPO_DIR="${DIST_DIR}/repo" PLUGIN_ADDON_XML="${ROOT_DIR}/addon/addon.xml" REPO_SRC_DIR="${ROOT_DIR}/repository.viewit" REPO_ADDON_XML="${REPO_SRC_DIR}/addon.xml" REPO_BASE_URL="${REPO_BASE_URL:-http://127.0.0.1:8080/repo}" if [[ ! -f "${PLUGIN_ADDON_XML}" ]]; then echo "Missing: ${PLUGIN_ADDON_XML}" >&2 exit 1 fi if [[ ! -f "${REPO_ADDON_XML}" ]]; then echo "Missing: ${REPO_ADDON_XML}" >&2 exit 1 fi mkdir -p "${REPO_DIR}" read -r ADDON_ID ADDON_VERSION < <(python3 - "${PLUGIN_ADDON_XML}" <<'PY' import sys import xml.etree.ElementTree as ET root = ET.parse(sys.argv[1]).getroot() print(root.attrib.get("id", "plugin.video.viewit"), root.attrib.get("version", "0.0.0")) PY ) PLUGIN_ZIP="$("${ROOT_DIR}/scripts/build_kodi_zip.sh")" PLUGIN_ZIP_NAME="$(basename "${PLUGIN_ZIP}")" PLUGIN_ADDON_DIR_IN_REPO="${REPO_DIR}/${ADDON_ID}" mkdir -p "${PLUGIN_ADDON_DIR_IN_REPO}" cp -f "${PLUGIN_ZIP}" "${PLUGIN_ADDON_DIR_IN_REPO}/${PLUGIN_ZIP_NAME}" read -r REPO_ADDON_ID REPO_ADDON_VERSION < <(python3 - "${REPO_ADDON_XML}" <<'PY' import sys import xml.etree.ElementTree as ET root = ET.parse(sys.argv[1]).getroot() print(root.attrib.get("id", "repository.viewit"), root.attrib.get("version", "0.0.0")) PY ) TMP_DIR="$(mktemp -d)" trap 'rm -rf "${TMP_DIR}"' EXIT TMP_REPO_ADDON_DIR="${TMP_DIR}/${REPO_ADDON_ID}" mkdir -p "${TMP_REPO_ADDON_DIR}" if command -v rsync >/dev/null 2>&1; then rsync -a --delete "${REPO_SRC_DIR}/" "${TMP_REPO_ADDON_DIR}/" else cp -a "${REPO_SRC_DIR}/." "${TMP_REPO_ADDON_DIR}/" fi python3 - "${TMP_REPO_ADDON_DIR}/addon.xml" "${REPO_BASE_URL}" <<'PY' import sys import xml.etree.ElementTree as ET addon_xml = sys.argv[1] base_url = sys.argv[2].rstrip("/") tree = ET.parse(addon_xml) root = tree.getroot() dir_node = root.find(".//dir") if dir_node is None: raise SystemExit("Invalid repository addon.xml: missing