Skip to content

Commit 63ed356

Browse files
committed
update asset download method to be inline with streamlink
1 parent c783734 commit 63ed356

File tree

1 file changed

+38
-46
lines changed

1 file changed

+38
-46
lines changed

scripts/makeportable.sh

Lines changed: 38 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ mkdir -p "${bundle_dir}" "${dist_dir}" "${cache_dir}"
2626
STREAMLINK_PYTHON_ARCH=${STREAMLINK_PYTHON_ARCH:-win32}
2727
STREAMLINK_PYTHON_VERSION=${STREAMLINK_PYTHON_VERSION:-3.9.7}
2828
STREAMLINK_CHECKOUT_DIR="${ROOT_DIR}/streamlink"
29-
STREAMLINK_ASSETS_REPO="${STREAMLINK_ASSETS_REPO:-streamlink/streamlink-assets}"
30-
STREAMLINK_ASSETS_RELEASE="${STREAMLINK_ASSETS_RELEASE:-latest}"
29+
STREAMLINK_ASSETS_FILE="${STREAMLINK_CHECKOUT_DIR}/script/makeinstaller-assets.json"
3130
PYTHON_PLATFORM=${STREAMLINK_PYTHON_ARCH}
3231

3332
if [[ "${STREAMLINK_PYTHON_ARCH}" == "amd64" ]]; then
@@ -71,50 +70,43 @@ cp "${ROOT_DIR}/NOTICE" "${bundle_dir}/NOTICE.txt"
7170
cp -r "${STREAMLINK_CHECKOUT_DIR}/win32/config" "${bundle_dir}/streamlinkrc.template"
7271
cp -r "${STREAMLINK_CHECKOUT_DIR}/win32/THIRD-PARTY.txt" "${bundle_dir}/THIRD-PARTY.txt"
7372

74-
# download binary assets like ffmpeg and rtmpdump from the streamlink assets repo
75-
# parse the data.json manifest, validate archives and copy specific files to their destination
76-
log "Fetching assets data from \"${STREAMLINK_ASSETS_REPO}\" (${STREAMLINK_ASSETS_RELEASE})"
77-
assets_release_data=$(curl -s --fail \
78-
-H 'Accept: application/vnd.github.v3+json' \
79-
-H "User-Agent: ${GITHUB_REPOSITORY:-"streamlink/streamlink"}" \
80-
"https://api.github.com/repos/${STREAMLINK_ASSETS_REPO}/releases/${STREAMLINK_ASSETS_RELEASE}" \
81-
|| err "Could not fetch release data"
82-
)
83-
assets_release_tag=$(echo "${assets_release_data}" | jq -r ".tag_name")
84-
assets_data=$(curl -s --fail \
85-
-H "User-Agent: ${GITHUB_REPOSITORY:-"streamlink/streamlink"}" \
86-
"https://raw.githubusercontent.com/${STREAMLINK_ASSETS_REPO}/${assets_release_tag}/data.json" \
87-
|| err "Could not fetch manifest data"
88-
)
89-
90-
log "Retrieving assets"
91-
while read -r filename size url; do
92-
if ! [[ -f "${cache_dir}/${filename}" ]]; then
93-
log "Downloading asset: ${filename} (${size} Bytes)"
94-
curl -s -L --output "${cache_dir}/${filename}" "${url}"
95-
fi
96-
checksum=$(jq -r "[.[] | select(.filename == \"${filename}\")] | first | .checksum" <<< "${assets_data}")
97-
echo "${checksum} ${cache_dir}/${filename}" | sha256sum --check -
98-
done < <(jq -r '.assets[] | "\(.name) \(.size) \(.browser_download_url)"' <<< "${assets_release_data}")
99-
100-
log "Assembling files directory"
101-
TEMP=$(mktemp -d) && trap "rm -rf ${TEMP}" EXIT || exit 255
102-
for ((i=$(jq length <<< "${assets_data}") - 1; i >= 0; --i)); do
103-
read -r filename sourcedir targetdir \
104-
< <(jq -r ".[$i] | \"\(.filename) \(.sourcedir) \(.targetdir)\"" <<< "${assets_data}")
105-
sourcedir="${TEMP}/${sourcedir}"
106-
case "${filename}" in
107-
*.zip)
108-
unzip "${cache_dir}/${filename}" -d "${TEMP}"
109-
;;
110-
*)
111-
sourcedir="${cache_dir}"
112-
;;
113-
esac
114-
while read -r from to; do
115-
install -v -D -T "${sourcedir}/${from}" "${bundle_dir}/${targetdir}/${to}"
116-
done < <(jq -r ".[$i].files[] | \"\(.from) \(.to)\"" <<< "${assets_data}")
117-
done
73+
ASSETS_DATA=$(cat "${STREAMLINK_ASSETS_FILE}")
74+
75+
assets_prepare() {
76+
log "Preparing assets"
77+
while read -r filename sha256 url; do
78+
if ! [[ -f "${cache_dir}/${filename}" ]]; then
79+
log "Downloading asset: ${filename}"
80+
curl -L -o "${cache_dir}/${filename}" "${url}"
81+
fi
82+
echo "${sha256} ${cache_dir}/${filename}" | sha256sum --check -
83+
done < <(jq -r '.[] | "\(.filename) \(.sha256) \(.url)"' <<< "${ASSETS_DATA}")
84+
}
85+
86+
assets_assemble() {
87+
log "Assembling files directory"
88+
local tmp=$(mktemp -d) && trap "rm -rf '${tmp}'" RETURN || exit 255
89+
for ((i=$(jq length <<< "${ASSETS_DATA}") - 1; i >= 0; --i)); do
90+
read -r type filename sourcedir targetdir \
91+
< <(jq -r ".[$i] | \"\(.type) \(.filename) \(.sourcedir) \(.targetdir)\"" <<< "${ASSETS_DATA}")
92+
case "${type}" in
93+
zip)
94+
mkdir -p "${tmp}/${i}"
95+
unzip "${cache_dir}/${filename}" -d "${tmp}/${i}"
96+
sourcedir="${tmp}/${i}/${sourcedir}"
97+
;;
98+
*)
99+
sourcedir="${cache_dir}"
100+
;;
101+
esac
102+
while read -r from to; do
103+
install -v -D -T "${sourcedir}/${from}" "${bundle_dir}/${targetdir}/${to}"
104+
done < <(jq -r ".[$i].files[] | \"\(.from) \(.to)\"" <<< "${ASSETS_DATA}")
105+
done
106+
}
107+
108+
assets_prepare
109+
assets_assemble
118110

119111
# remove the rtmpdump and ffmpeg template lines
120112
sed -i "/^rtmpdump=.*/d" "${bundle_dir}/streamlinkrc.template"

0 commit comments

Comments
 (0)