Knowledge Base

Preserving for the future: Shell scripts, AoC, and more

generate-sword-repo.sh (Source)

#!/bin/sh
# File: generate-sword-repo.sh
# Location: server3:/mnt/mirror/sword
# Author: bgstack15
# Startdate: 2024-06-06-5 14:33
# SPDX-License-Identifier: GPL-3.0-only
# Title: Generate Sword Repo and Web Page
# Purpose: generate mods.tar.gz for sword repo
# History:
#    2024-06-13-5 12:58 count number of modules
# Usage: Manually when I want to update the repo metadata based on modules available.
# Reference:
# Improve:
#    get icons for Bible, book, other?
#    use all headers
# Dependencies:
#    prebuilt manifest.json
#    7za
# Documentation: /mnt/public/Support/Programs/BibleTimeMini/sword-repo-readme.md
REPO_DIR="${REPODIR:-/mnt/mirror/sword}"
MODULES_DIR="${MODULES_DIR:-${REPO_DIR%%/}/modules}"
generate_mods_d_tar_gz() {
   rm -rf "${REPO_DIR:-NOTHINGTODEL}/mods.d/"*
   rmdir "${REPO_DIR:-NOTHINGTODEL}/mods.d"
   cd "${REPO_DIR}"
   for zip in "${MODULES_DIR}"/*zip ;
   do
      7za -bsp0 -bso0 x "${zip}" mods.d
   done
   rm -f "${REPO_DIR:-NOTHINGTODEL}/mods.d.tar.gz"
   tar -zcf mods.d.tar.gz mods.d
}
generate_web() {
   echo "stub"
   {
      echo "<html>"
      echo "<head>"
      echo "<link rel='stylesheet' href='sword.css'>"
      echo '<meta name="viewport" content="width=device-width, initial-scale=1">'
      echo "<title>Example sword library</title>"
      echo "</head>"
      echo "<body>"
      echo "<h1><img src='bgstack15.png' class='headimg'>Example sword library</h1>"
      echo "<h2>Installing this repo</h2>"
      echo "<h3>AndBible</h3>"
      echo 'Paste this link: <a href="https://www.example.com/mirror/sword">https://www.example.com/mirror/sword</a>'
      _used=0
      for mod in "${REPO_DIR%%/}/mods.d/"*.conf ;
      do
         if test "${_used}" = "0" ;
         then
            _count="$( find "${REPO_DIR%%/}/mods.d/"*.conf -print 2>/dev/null | grep -cE . )"
            echo "<h2>Modules (${_count})</h2>"
            _used=1
            echo "<ul>"
         fi
         mod_name="$( grep -h -E '^\s*\[' "${mod}" | head -n1 | tr -d '[]\r' )"
         version="$( <"${mod}" awk -F'=' '$1~/\<Version/{print $2}')"
         license="$( <"${mod}" awk -F'=' '$1~/DistributionLicense/{print $2}')"
         if echo "${license}" | grep -qiE 'Permission to distribute granted to' ;
         then
            # probably not stackrpms, so do not show link.
            echo "<li>${mod_name}</li>"
         else
            echo "<li><a href='modules/${mod_name}.zip'>${mod_name}</a> <span class='smaller'>${version}</span></li>"
         fi
      done
      if test "${_used}" = "1" ;
      then
         echo "</ul>"
      fi
      echo "</body>"
      echo "<footer>"
      printf '%s' "Last generated: " ; TZ=UTC date "+%FT%TZ"
      echo "</footer>"
      echo "</html>"
   } > "${REPO_DIR%%/}/index.html"
}
test -z "${SKIP_TARBALL}" && generate_mods_d_tar_gz
test -z "${SKIP_WEB}" && generate_web