aboutsummaryrefslogtreecommitdiff
path: root/append_latest_list.sh
diff options
context:
space:
mode:
Diffstat (limited to 'append_latest_list.sh')
-rwxr-xr-xappend_latest_list.sh92
1 files changed, 92 insertions, 0 deletions
diff --git a/append_latest_list.sh b/append_latest_list.sh
new file mode 100755
index 0000000..3b66d93
--- /dev/null
+++ b/append_latest_list.sh
@@ -0,0 +1,92 @@
+#!/bin/bash
+
+if [ ! -f hashes/list ]
+then
+ echo 'No list to append, use ./create_list.sh instead'
+ exit 1
+fi
+
+function get_latest_list(){
+ cat ./hashes/list | jq -r '.latest_list'
+}
+
+latest_list="$(get_latest_list)"
+
+echo "Latest list's hash: ${latest_list}"
+latest_show_object="$(cat hashes/${latest_list} | jq -r '.list' | jq '.[-1:]')"
+latest_index_number="$(echo ${latest_show_object} | jq -r '.[].index')"
+latest_starts_on="$(echo ${latest_show_object} | jq -r '.[].starts_on')"
+latest_duration="$(echo ${latest_show_object} | jq -r '.[].duration')"
+list_started_on="$(cat hashes/${latest_list} | jq -r '.started_on')"
+list_duration="$(cat hashes/${latest_list} | jq -r '.duration')"
+already_in_list="$(mktemp)"
+time_now="$(date -u +%s)000"
+new_list_file="$(mktemp)"
+new_list_started_on="$(($(($(($((${time_now} - ${list_started_on}))/${list_duration}))*${list_duration}))+${list_started_on}))"
+new_shows="$(mktemp)"
+
+cat hashes/${latest_list} | jq -r '.list.[].hash' > ${already_in_list}
+
+find hashes -type f -size -4096 | sort | while read filepath
+do
+ if [ "${filepath}" == "hashes/list" ]
+ then
+ continue
+ fi
+ cat "${filepath}" | jq > /dev/null 2>&1
+ if [ $? -ne 0 ]
+ then
+ continue
+ fi
+ if [ "$(cat "${filepath}" | jq -r '.type')" == "show" ]
+ then
+ grep $(basename ${filepath}) ${already_in_list} > /dev/null
+ if [ $? -ne 0 ]
+ then
+ echo "New show found: ${filepath}"
+ echo "${filepath}" >> ${new_shows}
+ fi
+ fi
+done
+function make_new_list(){
+ new_show_found="$(cat ${new_shows})"
+ new_show_hash="$(basename ${new_show_found})"
+ new_show_starts_on="$((${latest_duration}+${latest_starts_on}))"
+ new_show_duration="$(cat ${new_show_found}| jq -r '.duration')"
+ (
+ echo -n '{'
+ echo -n '"type":"list",'
+ echo -n '"started_on":"'${new_list_started_on}'",'
+ echo -n '"list":'
+ echo -n '['
+ cat hashes/${latest_list} | jq -r '.list.[]' | sed -e 's/}/},/g' | tr -d '\n'
+ echo -n '{'
+ echo -n '"hash":"'${new_show_hash}'",'
+ echo -n '"index":"'$((${latest_index_number}+1))'",'
+ echo -n '"starts_on":"'${new_show_starts_on}'",'
+ echo -n '"duration":"'${new_show_duration}'"'
+ echo -n '}'
+ echo -n '],'
+ echo -n '"duration":"'$((${new_show_duration}+${new_show_starts_on}))'"'
+ echo -n '}'
+ )| jq -c -M > ${new_list_file}
+ sha_live=$(sha512sum ${new_list_file}|cut -d ' ' -f 1)
+ cat ${new_list_file} | jq
+ if [ $? -ne 0 ]
+ then
+ echo "Corrupted list: ${new_list_file}"
+ exit 1
+ fi
+ echo '{"latest_list":"'${sha_live}'"}' > ./hashes/list
+ mv ${new_list_file} ./hashes/${sha_live}
+
+}
+case "$(cat ${new_shows}|wc -l)" in
+ 0) echo "no new shows";;
+ 1) make_new_list;;
+ *) echo "more than one shows...";break;
+esac
+rm ${new_shows}
+rm ${already_in_list}
+#cat hashes/${latest_list} | jq -r '.list.[]' | sed -e 's/}/},/g'
+#cat hashes/${latest_list} | jq