aboutsummaryrefslogtreecommitdiff
path: root/create_list.sh
diff options
context:
space:
mode:
authorkaotisk <kaotisk@arching-kaos.org>2024-10-10 07:42:13 +0300
committerkaotisk <kaotisk@arching-kaos.org>2024-10-10 07:42:13 +0300
commit8281be7ba874e116ccc43e41d1275c1d531c54dc (patch)
tree9f2495682205807db74842674b4bedfbc27b0daf /create_list.sh
parent3c508f9bf96bc425eb183f676214ed9b9d14b84e (diff)
downloadarching-kaos-radio-8281be7ba874e116ccc43e41d1275c1d531c54dc.tar.gz
arching-kaos-radio-8281be7ba874e116ccc43e41d1275c1d531c54dc.tar.bz2
arching-kaos-radio-8281be7ba874e116ccc43e41d1275c1d531c54dc.zip
Implementation
Diffstat (limited to 'create_list.sh')
-rwxr-xr-xcreate_list.sh119
1 files changed, 119 insertions, 0 deletions
diff --git a/create_list.sh b/create_list.sh
new file mode 100755
index 0000000..d39fdfa
--- /dev/null
+++ b/create_list.sh
@@ -0,0 +1,119 @@
+#!/bin/bash
+# Creates a list from application/json files
+# Kaotisk Hund 2024
+#
+# Convention:
+# {
+# "started_on":...,
+# "duration":...,
+# "list":[
+# {
+# "index":...,
+# "hash":...,
+# "duration":...,
+# "starts_on":...
+# },
+# ...
+# ]
+# }
+#
+# Just for convenience, we will simply make up a list of files found in hashes
+# we will be searching for files smaller than 4096 bytes. An extra check with
+# `file` to find 'JSON text data'.
+json_file_list="$(mktemp)"
+find hashes -type f -size -4096 | sort | while read filepath
+do
+ file ${filepath} | grep 'JSON text data' > /dev/null 2>&1
+ if [ $? -eq 0 ]
+ then
+ if [ "$(cat ${filepath} | jq -r '.type')" != "show" ]
+ then
+ echo "Not a show: ${filepath}"
+ continue
+ fi
+ if [ "$(cat ${filepath} | jq -r '.duration')" == "null" ]
+ then
+ echo "No duration field: ${filepath}"
+ exit 1
+ fi
+ if [ ! $(cat ${filepath} | jq -r '.created_on') -gt 0 ]
+ then
+ echo "No created_on field: ${filepath}"
+ exit 1
+ fi
+ if [ ! $(cat ${filepath} | jq -r '.published_on') -gt 0 ]
+ then
+ echo "No published_on field: ${filepath}"
+ exit 1
+ fi
+ if [ ! -n "$(cat ${filepath} | jq -r '.hash')" ]
+ then
+ echo "No hash field: ${filepath}"
+ exit 1
+ fi
+ if [ ! -n "$(cat ${filepath} | jq -r '.filename')" ]
+ then
+ echo "No file_extension field: ${filepath}"
+ exit 1
+ fi
+ if [ ! -n "$(cat ${filepath} | jq -r '.file_extension')" ]
+ then
+ echo "No file_extension field: ${filepath}"
+ exit 1
+ fi
+ if [ ! -n "$(cat ${filepath} | jq -r '.mimetype')" ]
+ then
+ echo "No mimetype field: ${filepath}"
+ exit 1
+ fi
+
+ # Optional so we don't check for those
+ # cat ${filepath} | jq -r '.artist'
+ # cat ${filepath} | jq -r '.title'
+ echo ${filepath} >> ${json_file_list}
+ fi
+done
+
+cat ${json_file_list}
+
+new_list_file="$(mktemp)"
+index=0
+starts_on=0
+total_duration="$(mktemp)"
+echo -n 0 > ${total_duration}
+( echo '{'
+echo '"type":"list",'
+echo '"started_on":"'$(( $(date -u +%s) - 1800 ))000'",'
+echo '"list":['
+cat ${json_file_list} | while read cur_file
+do
+ if [ -f "${cur_file}" ] && [ -n "${cur_file}" ]
+ then
+ echo '//'${cur_file}'//' >&2
+ cat ${cur_file} | jq >&2
+ if [ ${index} -gt 0 ]
+ then
+ echo ','
+ fi
+ echo '{'
+ echo '"index":"'${index}'",'
+ hash_string="$(cat ${cur_file} | jq -r '.hash')"
+ echo '"hash":"'$(basename ${cur_file})'",'
+ duration="$(cat ${cur_file} | jq -r '.duration')"
+ echo '"duration":"'${duration}'",'
+ echo '"starts_on":"'${starts_on}'"}'
+
+ starts_on=$(( ${duration} + ${starts_on} ))
+ index=$(( ${index} + 1 ))
+ echo -n $(( $(cat ${total_duration}) + ${duration} )) > ${total_duration}
+ fi
+done
+echo '],'
+echo '"duration":"'$(cat ${total_duration})'"'
+echo '}' ) | jq -c -M > ${new_list_file}
+sha_live=$(sha512sum ${new_list_file}|cut -d ' ' -f 1)
+cat ${new_list_file} | jq
+echo '{"latest_list":"'${sha_live}'"}' > ./hashes/list
+mv ${new_list_file} ./hashes/${sha_live}
+#rm ${new_list_file}
+rm ${json_file_list}