2022-04-07 02:14:21 +02:00
#!/bin/bash
################################################################################
# Author: Fred (support@qo-op.com)
# Version: 0.1
# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/)
################################################################################
mkdir -p ~/.zen/bunkerbox # BunkerBOX temp directory
# Fred MadeInZion, [20/03/2022 23:03]
# Script qui capture et transfert dans IPFS le flux des nouvelles vidéos de https://crowdbunker.com/
# le resultat est inscrit dans une chaine video accessible localement ou publiée au travers de qo-op
# ou du TestNET astrXbian, videoclub entre amis d'amis...
MY_PATH = " `dirname \" $0 \"` " # relative
MY_PATH = " `( cd \" $MY_PATH \" && pwd )` " # absolutized and normalized
ME = " ${ 0 ##*/ } "
2022-04-08 23:29:28 +02:00
countMErunning = $( ps auxf --sort= +utime | grep -w " $ME " | grep -v -E 'color=auto|grep' | wc -l)
[ [ $countMErunning -gt 2 ] ] && echo " $ME already running. EXIT. " && exit 0
2022-04-07 02:14:21 +02:00
TS = $( date -u +%s%N | cut -b1-13)
2022-04-21 01:50:36 +02:00
MOATS = $( date -u +"%Y%m%d%H%M%S%4N" )
2022-04-07 02:14:21 +02:00
[ [ ! $( which ipfs) ] ] && echo "EXIT. Vous devez avoir installé ipfs CLI sur votre ordinateur" && echo "RDV sur https://dist.ipfs.io/#go-ipfs" && exit 1
YOU = $( ps auxf --sort= +utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1) || echo " warning ipfs daemon not running"
isLAN = $( hostname -I | awk '{print $1}' | head -n 1 | cut -f3 -d '/' | grep -E " (^127\.)|(^192\.168\.)|(^fd42\:)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^::1 $)|(^[fF][cCdD])/ " )
2022-04-13 20:40:34 +02:00
IPFSNODEID = $( cat ~/.ipfs/config | jq -r .Identity.PeerID)
2022-04-07 02:14:21 +02:00
IPFSNGW = "https://tube.copylaradio.com"
IPFSNGW = "http://127.0.0.1:8080"
[ [ ! $isLAN ] ] && IPFSNGW = " https:// $( hostname) "
echo " IPFS GATEWAY $IPFSNGW "
2022-04-13 19:45:50 +02:00
###########################################################################
2022-04-20 17:09:58 +02:00
## Global parsing History Rotation ~/.zen/tmp/calendar.json (used with pagination.js)
###########################################################################
2022-04-11 00:50:10 +02:00
hier = $( date --date= "yesterday" +"%Y-%m-%d" )
# New day! 00:00 is passed...
if [ [ ! -f ~/.zen/bunkerbox/history_${ hier } .json && -f ~/.zen/bunkerbox/homepage/chain ] ] ; then
NUMBER = $( cat ~/.zen/bunkerbox/history.json | jq '.Videos[].link' | wc -l) && echo " .ROTATION. Hier historique de $NUMBER Videos. "
[ [ -f ~/.zen/bunkerbox/history.json ] ] && mv ~/.zen/bunkerbox/history.json ~/.zen/bunkerbox/history_${ hier } .json
## CREATE/UPDATE calendar.json
[ [ ! -f ~/.zen/bunkerbox/calendar.json || $( cat ~/.zen/bunkerbox/calendar.json 2>/dev/null) = = "" ] ] && cp ${ MY_PATH } /templates/data/calendar.json ~/.zen/bunkerbox/calendar.json
cat ~/.zen/bunkerbox/calendar.json | jq '.History += [{"link": "<a href=' "'_INDEX_'" '>_HIER_</a>"}]' > ~/.zen/tmp/calendar.json
sed -i " s~_INDEX_~/ipfs/ $( cat ~/.zen/bunkerbox/homepage/chain) ~g " ~/.zen/tmp/calendar.json
sed -i " s~_HIER_~ ${ hier } ( $NUMBER )~g " ~/.zen/tmp/calendar.json
[ [ " $( cat ~/.zen/tmp/calendar.json) " = = "" ] ] && echo "NO calendar.json FATAL ERROR" && exit 1
cp ~/.zen/tmp/calendar.json ~/.zen/bunkerbox/calendar.json
2022-04-11 12:14:31 +02:00
# RESET IPNS HISTORY FILE ( reset history_qo-op.json )
cp ${ MY_PATH } /templates/data/history.json ~/.zen/bunkerbox/homepage/history.json
VROOT = $( ipfs add -rwHq ~/.zen/bunkerbox/homepage/* | tail -n 1)
echo " 'qo-op' update with /ipfs/ $VROOT "
ipfs name publish --key= qo-op /ipfs/$VROOT
2022-04-11 00:50:10 +02:00
fi
2022-04-13 19:45:50 +02:00
###########################################################################
2022-04-11 00:50:10 +02:00
2022-04-20 17:09:58 +02:00
## SCRAP LATEST CROWDBUNKER VIDEOS
2022-04-07 02:14:21 +02:00
VWALLURL = "https://api.crowdbunker.com/post/all"
curl -s $VWALLURL -H "Accept: application/json" > ~/.zen/bunkerbox/crowd.json
2022-04-08 13:41:34 +02:00
[ [ ! -f ~/.zen/bunkerbox/crowd.json ] ] && echo " ERROR GET VIDEO SOURCE LIST FROM $VWALLURL " && exit 1
2022-04-07 02:14:21 +02:00
2022-04-20 17:09:58 +02:00
## LOOP THROUGH VIDEO ID ($VUID) (REVERSE LIST)
2022-04-07 16:58:11 +02:00
cat ~/.zen/bunkerbox/crowd.json | jq -r '.posts | .[] | .video.id' > /tmp/vuid.list
2022-04-20 17:09:58 +02:00
# loop starts with older videos (tac is reversing cat)
2022-04-07 16:58:11 +02:00
for VUID in $( tac /tmp/vuid.list) ; do
2022-04-20 18:55:51 +02:00
echo "====================== =========================== ==========================="
2022-04-07 02:14:21 +02:00
[ [ " $VUID " = = "null" ] ] && echo "MESSAGE... Bypassing..." && echo && continue
2022-04-20 18:55:51 +02:00
echo "====================== =========================== ==========================="
2022-04-21 18:05:08 +02:00
[ [ $( cat ~/.zen/bunkerbox/choice 2>/dev/null) = = "qo-op" ] ] && [ [ $( cat ~/.zen/bunkerbox/history_qo-op.json | jq .Videos[ ] .link | grep $VUID ) ] ] && echo "VIDEO DEJA DANS LE CACHE... CONTINUE" && continue
2022-04-07 02:14:21 +02:00
echo " Bunker BOX : Adding $VUID "
2022-04-08 18:26:09 +02:00
mkdir -p ~/.zen/bunkerbox/cache/$VUID /media
2022-04-07 02:14:21 +02:00
2022-04-20 17:09:58 +02:00
## GET VIDEO DETAIL JSON
2022-04-07 02:14:21 +02:00
URL = " https://api.crowdbunker.com/post/ $VUID /details "
# echo "WISHING TO EXPLORE $URL ?"; read TEST; [[ "$TEST" != "" ]] && echo && continue
2022-04-08 18:26:09 +02:00
curl -s $URL -H "Accept: application/json" -o ~/.zen/bunkerbox/cache/$VUID /media/$VUID .json
2022-04-07 02:14:21 +02:00
2022-04-20 17:09:58 +02:00
# FILTERING STREAMING LIVE
2022-04-08 18:26:09 +02:00
echo " >>> Extracting video caracteristics from ~/.zen/bunkerbox/cache/ $VUID /media/ $VUID .json "
ISLIVE = $( cat ~/.zen/bunkerbox/cache/$VUID /media/$VUID .json | jq -r .video.isLiveType) && [ [ " $ISLIVE " = = "true" ] ] && echo "LIVE... "
LIVE = $( cat ~/.zen/bunkerbox/cache/$VUID /media/$VUID .json | jq -r .video.isLiveActive) && [ [ " $LIVE " = = "true" ] ] && echo "STREAMING... Bypassing..." && echo && continue
DURATION = $( cat ~/.zen/bunkerbox/cache/$VUID /media/$VUID .json | jq -r .video.duration) && [ [ $DURATION = = 0 ] ] && echo "NOT STARTED YET" && echo && continue
2022-04-12 14:02:04 +02:00
TITLE = $( cat ~/.zen/bunkerbox/cache/$VUID /media/$VUID .json | jq -r .video.title | sed "s/'/ /g" | sed 's/"/ /g' | sed "s/&/ /g" ) # Remove quote
2022-04-08 18:26:09 +02:00
CHANNEL = $( cat ~/.zen/bunkerbox/cache/$VUID /media/$VUID .json | jq -r .channel.organization.uid)
2022-04-13 19:45:50 +02:00
## GET MORE DATA FROM JSON, or get it from web page loading $VUID.json
2022-04-08 15:25:19 +02:00
2022-04-20 17:09:58 +02:00
## EXTRACT HLS LINK and MEDIA SOURCE
2022-04-08 18:26:09 +02:00
HLS = $( cat ~/.zen/bunkerbox/cache/$VUID /media/$VUID .json | jq -r .video.hlsManifest.url)
2022-04-07 02:14:21 +02:00
MEDIASOURCE = $( echo $HLS | rev | cut -d '/' -f 2- | rev)
2022-04-20 17:09:58 +02:00
echo " $HLS "
echo " ===> $TITLE ( $DURATION s) "
2022-04-07 02:14:21 +02:00
2022-04-20 17:09:58 +02:00
## VERIFIY choice made, empty means debug mode
2022-04-07 15:43:42 +02:00
[ [ ! $( cat ~/.zen/bunkerbox/choice 2>/dev/null) ] ] && echo "READY TO PROCESS ? ENTER. Any character sent means next." && read TEST && [ [ " $TEST " != "" ] ] && echo && continue ## NO CHOICE MADE
## Download HLS source m3u8 (contains video & audio)
2022-04-08 18:26:09 +02:00
curl -s $HLS -o ~/.zen/bunkerbox/cache/$VUID /$VUID .m3u8
[ [ ! $( cat ~/.zen/bunkerbox/choice 2>/dev/null) ] ] && cat ~/.zen/bunkerbox/cache/$VUID /$VUID .m3u8 # DEBUG
2022-04-07 02:14:21 +02:00
2022-04-13 19:45:50 +02:00
# Choose 360p or 480p or 720p or 240p
echo ">>>>>>>>>>>>>>>> Selecting VIDEO"
VIDEOHEAD = "" ; VIDEOSRC = ""
for VSIZE in 360 480 720 240; do
[ [ " $VIDEOHEAD " = = "" ] ] && VIDEOHEAD = $( cat ~/.zen/bunkerbox/cache/$VUID /$VUID .m3u8 | grep -B1 ${ VSIZE } p | head -n 1)
2022-04-20 18:10:58 +02:00
[ [ " $VIDEOSRC " = = "" ] ] && VIDEOSRC = $( cat ~/.zen/bunkerbox/cache/$VUID /$VUID .m3u8 | grep ${ VSIZE } p | tail -n 1 | cut -f 1 -d '.' ) && vsize = " ${ VSIZE } p "
2022-04-13 19:45:50 +02:00
VTHUMB = " $( cat ~/.zen/bunkerbox/cache/$VUID /media/$VUID .json | jq -r --arg VSIZE " $VSIZE " '.video.thumbnails[] | select(.height == $VSIZE) | .url' ) "
[ [ ! -f ~/.zen/bunkerbox/cache/$VUID /media/$VUID .jpg ] ] && echo " Downloading $VSIZE thumbnail " && curl -s $VTHUMB -o ~/.zen/bunkerbox/cache/$VUID /media/$VUID .jpg
done
## NO VIDEO FOUND ?
[ [ " $VIDEOSRC " = = "" ] ] && echo "NO COMPATIBLE RESOLUTION VIDEO FOUND." && cat ~/.zen/bunkerbox/cache/$VUID /$VUID .m3u8 && continue
2022-04-07 02:14:21 +02:00
echo " VIDEOSRC= $MEDIASOURCE / $VIDEOSRC "
2022-04-13 19:45:50 +02:00
# CORRECT MISSING THUMB
[ [ ! -f ~/.zen/bunkerbox/cache/$VUID /media/$VUID .jpg ] ] && cp ${ MY_PATH } /images/astroport.jpg ~/.zen/bunkerbox/cache/$VUID /media/$VUID .jpg
echo ">>>>>>>>>>>>>>>> Downloading VIDEO"
2022-04-07 02:14:21 +02:00
# Downloading Video m3u8 and Video
2022-04-08 18:26:09 +02:00
[ [ ! -f ~/.zen/bunkerbox/cache/$VUID /media/$VIDEOSRC .m3u8 ] ] && curl -s $MEDIASOURCE /$VIDEOSRC .m3u8 -o ~/.zen/bunkerbox/cache/$VUID /media/$VIDEOSRC .m3u8
[ [ ! -f ~/.zen/bunkerbox/cache/$VUID /media/$VIDEOSRC ] ] && curl $MEDIASOURCE /$VIDEOSRC -o ~/.zen/bunkerbox/cache/$VUID /media/$VIDEOSRC
2022-04-07 02:14:21 +02:00
echo ">>>>>>>>>>>>>>>> Downloading AUDIO"
2022-04-08 18:26:09 +02:00
AUDIOLINE = $( cat ~/.zen/bunkerbox/cache/$VUID /$VUID .m3u8 | grep '=AUDIO' )
2022-04-07 02:14:21 +02:00
AUDIOFILE = $( echo $AUDIOLINE | rev | cut -d '.' -f 2- | cut -d '"' -f 1 | rev)
echo " AUDIO= $MEDIASOURCE / $AUDIOFILE "
# Downloading Audio m3u8 and Audio
2022-04-08 18:26:09 +02:00
[ [ ! -f ~/.zen/bunkerbox/cache/$VUID /media/$AUDIOFILE .m3u8 ] ] && curl -s $MEDIASOURCE /$AUDIOFILE .m3u8 -o ~/.zen/bunkerbox/cache/$VUID /media/$AUDIOFILE .m3u8
[ [ ! -f ~/.zen/bunkerbox/cache/$VUID /media/$AUDIOFILE ] ] && curl $MEDIASOURCE /$AUDIOFILE -o ~/.zen/bunkerbox/cache/$VUID /media/$AUDIOFILE
2022-04-07 02:14:21 +02:00
2022-04-20 18:10:58 +02:00
echo " >>>>>>>>>>>>>>>> CREATING $vsize M3U8 "
2022-04-07 02:14:21 +02:00
echo " #EXTM3U
#EXT-X-VERSION:6
#EXT-X-INDEPENDENT-SEGMENTS
$AUDIOLINE
$VIDEOHEAD
$VIDEOSRC .m3u8
2022-04-08 18:26:09 +02:00
" > ~/.zen/bunkerbox/cache/ $VUID /media/ $VUID .m3u8
2022-04-07 15:43:42 +02:00
2022-04-11 16:16:53 +02:00
# ls ~/.zen/bunkerbox/cache/$VUID/media/ # SHOW ALL COLLECTED MEDIA
2022-04-07 15:43:42 +02:00
2022-04-07 02:14:21 +02:00
##########################################################################
2022-04-20 17:09:58 +02:00
## ADD YOUR HTML TEMPLATING WITH MEDIA
2022-04-07 15:43:42 +02:00
##########################################################################
2022-04-08 15:25:19 +02:00
start = ` date +%s`
2022-04-07 02:14:21 +02:00
echo "##########################################################################"
echo ">>>>>>>>>>>>>>>> ADDING index.html"
# COPY index, style, js AND data
2022-04-08 18:26:09 +02:00
cp -R ${ MY_PATH } /templates/styles ~/.zen/bunkerbox/cache/$VUID /media/
cp -R ${ MY_PATH } /templates/js ~/.zen/bunkerbox/cache/$VUID /media/
cp ${ MY_PATH } /templates/videojs.html ~/.zen/bunkerbox/cache/$VUID /media/index.html
cp ${ MY_PATH } /images/astroport.jpg ~/.zen/bunkerbox/cache/$VUID /media/
2022-04-07 02:14:21 +02:00
2022-04-08 15:25:19 +02:00
## NO OR EMPTY HISTORY? COPY from TEMPLATE (PROGRAM START)
[ [ ! -f ~/.zen/bunkerbox/history.json || $( cat ~/.zen/bunkerbox/history.json 2>/dev/null) = = "" ] ] && cp ${ MY_PATH } /templates/data/history.json ~/.zen/bunkerbox/history.json
2022-04-07 11:42:42 +02:00
2022-04-20 17:09:58 +02:00
# get latest history.json publishes with (shared?) 'qo-op' IPNS key
2022-04-08 15:25:19 +02:00
if [ [ " $( cat ~/.zen/bunkerbox/choice 2>/dev/null) " = = "qo-op" ] ] ; then
2022-04-20 17:09:58 +02:00
[ [ $( cat ~/.zen/bunkerbox/history_qo-op.json | jq .Videos[ ] .link | grep $VUID ) ] ] && echo "VIDEO DEJA DANS LE CACHE... CONTINUE" && continue
2022-04-20 19:22:48 +02:00
IPNS = " $( ipfs key list -l | grep -w 'qo-op' | cut -f 1 -d ' ' ) "
2022-04-20 18:55:51 +02:00
IPNSL = " /ipns/ $IPNS "
2022-04-08 19:28:52 +02:00
ipfs get -o ~/.zen/bunkerbox/history_qo-op.json $IPNSL /history.json # Get actual IPNS qo-op history.json
2022-04-20 17:09:58 +02:00
# Missing file... reseting
2022-04-08 20:16:39 +02:00
[ [ ! -f ~/.zen/bunkerbox/history_qo-op.json || $( cat ~/.zen/bunkerbox/history_qo-op.json 2>/dev/null) = = "" ] ] && cp ${ MY_PATH } /templates/data/history.json ~/.zen/bunkerbox/history_qo-op.json
2022-04-12 01:57:11 +02:00
[ [ $( cat ~/.zen/bunkerbox/history_qo-op.json | jq .Videos[ ] .link | grep $VUID ) ] ] && echo "VIDEO DEJA DANS LE RESEAU... CONTINUE" && echo && cp ~/.zen/bunkerbox/history_qo-op.json ~/.zen/bunkerbox/history.json && continue
2022-04-08 13:41:34 +02:00
# JSON FUSION
2022-04-08 19:28:52 +02:00
jq -s '.[0] * .[1]' ~/.zen/bunkerbox/history_qo-op.json ~/.zen/bunkerbox/history.json | jq -M '.Videos |= unique_by(.link)' > ~/.zen/bunkerbox/history.fusion.json
2022-04-20 19:22:48 +02:00
mv ~/.zen/bunkerbox/history.fusion.json ~/.zen/bunkerbox/history.json
echo "## FUSIONNING 'qo-op' HISTORIES"
2022-04-07 02:14:21 +02:00
else
2022-04-20 18:55:51 +02:00
IPNS = "."
2022-04-07 15:43:42 +02:00
IPNSL = "./"
2022-04-07 02:14:21 +02:00
fi
2022-04-07 15:43:42 +02:00
2022-04-08 18:02:23 +02:00
# Add previous CHANNEL History
2022-04-08 18:26:09 +02:00
[ [ -f ~/.zen/bunkerbox/history.${ CHANNEL } .json ] ] && cp ~/.zen/bunkerbox/history.${ CHANNEL } .json ~/.zen/bunkerbox/cache/$VUID /media/
2022-04-08 18:02:23 +02:00
2022-04-20 17:09:58 +02:00
# Add latest history.json within media directory
cp ~/.zen/bunkerbox/history.json ~/.zen/bunkerbox/cache/$VUID /media/history.json
2022-04-07 15:43:42 +02:00
2022-04-20 17:09:58 +02:00
# COPY videojs.html TEMPLATE & Updating it
2022-04-08 18:26:09 +02:00
sed "s/_IPFSROOT_/./g" ${ MY_PATH } /templates/videojs.html > ~/.zen/bunkerbox/cache/$VUID /media/index.html
sed -i " s/_VUID_/ $VUID /g " ~/.zen/bunkerbox/cache/$VUID /media/index.html
# sed -i s/_DATE_/$(date -u "+%Y-%m-%d#%H:%M:%S")/g ~/.zen/bunkerbox/cache/$VUID/media/index.html # !! Different Copy Makes Different Chains !
sed -i " s~_TITLE_~ $TITLE ~g " ~/.zen/bunkerbox/cache/$VUID /media/index.html
sed -i " s~_CHANNEL_~ $CHANNEL ~g " ~/.zen/bunkerbox/cache/$VUID /media/index.html
sed -i " s~_IPNSL_~ $IPNSL ~g " ~/.zen/bunkerbox/cache/$VUID /media/index.html #MAJ IPNS link
2022-04-20 17:09:58 +02:00
echo " >>>>> NOW ADDING MEDIA TO IPFS : ipfs add -rwH ~/.zen/bunkerbox/cache/ $VUID /media/* "
################################################################# #########
2022-04-08 18:26:09 +02:00
# IPFS WRITING. All that is prepared above in ~/.zen/bunkerbox/cache/$VUID/media/ will become permanent !
2022-04-20 17:09:58 +02:00
################################################################# #########
2022-04-08 18:26:09 +02:00
IPFSROOT = $( ipfs add -rwHq ~/.zen/bunkerbox/cache/$VUID /media/* | tail -n 1)
2022-04-07 02:14:21 +02:00
INDEX = " /ipfs/ $IPFSROOT "
2022-04-20 18:55:51 +02:00
echo " DONE : $INDEX "
echo
2022-04-08 18:02:23 +02:00
#################################################################
# IPFS WRITING DONE. Doing after is to UPDATE local history(s).json in ~/.zen/bunkerbox/
2022-04-20 17:09:58 +02:00
# $INDEX/$VUID.m3u8 is ready + videojs.html + json's
# Publishing on IPNS 'qo-op' all dynamic data needed by above 'index.html' (homepage)
2022-04-08 18:02:23 +02:00
#################################################################
2022-04-08 18:06:59 +02:00
#################
2022-04-08 18:02:23 +02:00
# Take care about CHANNEL history
echo " ++ MANAGE $CHANNEL HISTORY "
[ [ ! -f ~/.zen/bunkerbox/history.${ CHANNEL } .json || $( cat ~/.zen/bunkerbox/history.${ CHANNEL } .json 2>/dev/null) = = "" ] ] && cp ${ MY_PATH } /templates/data/history.json ~/.zen/bunkerbox/history.${ CHANNEL } .json
2022-04-20 17:09:58 +02:00
if [ [ ! $( cat ~/.zen/bunkerbox/history.${ CHANNEL } .json | jq .Videos[ ] .link | grep $VUID ) ] ] ; then ## This is a new video !!!
2022-04-20 18:55:51 +02:00
echo " NEW VIDEO ADDED TO ~/.zen/bunkerbox/history. ${ CHANNEL } .json "
2022-04-20 17:09:58 +02:00
# cat ~/.zen/bunkerbox/history.${CHANNEL}.json | jq --arg INDEX "$INDEX" --arg TITLE "$TITLE" --arg VUID "$VUID" --arg TSVUID "TSVUID" '.Videos += [{"link": "<a id="'"$TSVUID"'" href="'"$INDEX"'"><img src="'"$INDEX/$VUID.jpg"'" height=80 ></a><br>"'"$TITLE"'" "}]' > ~/.zen/tmp/history.${CHANNEL}.json
2022-04-08 18:26:09 +02:00
cat ~/.zen/bunkerbox/history.${ CHANNEL } .json | jq '.Videos += [{"link": "<a id=' "'_TS_'" ' href=' "'_INDEX_'" '><img src=' "'_INDEX_/_VUID_.jpg'" ' height=80 ></a><br>' "'_TITLE_'" '"}]' > ~/.zen/bunkerbox/cache/$VUID /media/history.${ CHANNEL } .json
sed -i " s~_INDEX_~ $INDEX ~g " ~/.zen/bunkerbox/cache/$VUID /media/history.${ CHANNEL } .json
sed -i " s~_VUID_~ $VUID ~g " ~/.zen/bunkerbox/cache/$VUID /media/history.${ CHANNEL } .json
sed -i " s~_TITLE_~ $TITLE ~g " ~/.zen/bunkerbox/cache/$VUID /media/history.${ CHANNEL } .json
2022-04-20 17:09:58 +02:00
# SECURE
2022-04-08 18:26:09 +02:00
[ [ " $( cat ~/.zen/bunkerbox/cache/$VUID /media/history.${ CHANNEL } .json) " = = "" ] ] && echo " NO history. ${ CHANNEL } .json FATAL ERROR " && exit 1
2022-04-20 17:09:58 +02:00
# REFRESH ${CHANNEL}'s HISTORY ~/.zen/bunkerbox/
2022-04-08 18:26:09 +02:00
cp ~/.zen/bunkerbox/cache/$VUID /media/history.${ CHANNEL } .json ~/.zen/bunkerbox/history.${ CHANNEL } .json
2022-04-20 17:09:58 +02:00
2022-04-20 18:55:51 +02:00
######################### ######################### #########################
## CONSTRUCT 'MOA' CHANNEL PUBLICATION ZONE ```rm -Rf ~/.zen/bunkerbox/channels/${CHANNEL} to reset```
2022-04-21 01:43:22 +02:00
if [ [ ! -f ~/.zen/bunkerbox/homepage/tw/${ CHANNEL } /index.html ] ] ; then
2022-04-21 01:09:31 +02:00
mkdir -p ~/.zen/bunkerbox/homepage/tw/${ CHANNEL } /
2022-04-20 17:09:58 +02:00
mkdir -p ~/.zen/bunkerbox/channels/${ CHANNEL } /
# New tiddlywiki with moa key
2022-04-20 19:22:48 +02:00
if [ [ ! $( ipfs key list | grep -w qo-op_${ CHANNEL } ) ] ] ; then
2022-04-20 17:09:58 +02:00
channelfilename = $( ${ MY_PATH } /tools/give_me_keystore_filename.py qo-op_${ CHANNEL } )
2022-04-20 18:55:51 +02:00
# (Re)Creating IPNS Key & TiddlyWiki for channel
ipfs key rm qo-op_${ CHANNEL }
2022-04-20 17:09:58 +02:00
channelkey = $( ipfs key gen qo-op_${ CHANNEL } )
# Create first tiddlywiki and inject some values
2022-04-20 23:47:48 +02:00
sed " s~_BIRTHDATE_~ ${ MOATS } ~g " ${ MY_PATH } /templates/ipfstiddlywiki.html > ~/.zen/bunkerbox/channels/${ CHANNEL } /index.html
sed -i " s~_PSEUDO_~ ${ CHANNEL } ~g " ~/.zen/bunkerbox/channels/${ CHANNEL } /index.html
sed -i " s~_MOAID_~ ${ channelkey } ~g " ~/.zen/bunkerbox/channels/${ CHANNEL } /index.html
sed -i " s~_QOOP_~ ${ IPNSL } ~g " ~/.zen/bunkerbox/channels/${ CHANNEL } /index.html
sed -i " s~_MOAKEY_~qo-op_ ${ CHANNEL } ~g " ~/.zen/bunkerbox/channels/${ CHANNEL } /index.html
sed -i " s~k2k4r8opmmyeuee0xufn6txkxlf3qva4le2jlbw6da7zynhw46egxwp2~ ${ channelkey } ~g " ~/.zen/bunkerbox/channels/${ CHANNEL } /index.html
2022-04-21 02:27:32 +02:00
sed -i "s~ipfs.infura.io~tube.copylaradio.com~g" ~/.zen/bunkerbox/channels/${ CHANNEL } /index.html ## Open 5001
2022-04-21 02:23:13 +02:00
2022-04-20 23:47:48 +02:00
sed -i " s~_IPFSNODEID_~ ${ IPFSNODEID } ~g " ~/.zen/bunkerbox/channels/${ CHANNEL } /index.html
2022-04-21 22:47:18 +02:00
# Create caroussel.html !!! NOT WORKING WITH M3U8 !!!! SO DOING IT WITH astrXbian ;)
2022-04-20 23:47:48 +02:00
sed " s~_IPNSL_~ $IPNSL ~g " ${ MY_PATH } /templates/caroussel.html > ~/.zen/bunkerbox/channels/${ CHANNEL } /caroussel.html
sed -i " s~_VUID_~ $INDEX / $VUID ~g " ~/.zen/bunkerbox/channels/${ CHANNEL } /caroussel.html
sed -i " s~_TITLE_~ $TITLE ~g " ~/.zen/bunkerbox/channels/${ CHANNEL } /caroussel.html
sed -i " s~_CHANNEL_~ $CHANNEL ~g " ~/.zen/bunkerbox/channels/${ CHANNEL } /caroussel.html
2022-04-21 22:47:18 +02:00
XBIANJSON = $( ${ MY_PATH } /tools/get_astrXbian_youtube.sh) ## Replace old way with external caroussel.json
sed -i " s~_CAROUSSELJSON_~ $XBIANJSON ~g " ~/.zen/bunkerbox/channels/${ CHANNEL } /caroussel.html
2022-04-21 01:31:57 +02:00
cp -R ${ MY_PATH } /templates/styles ~/.zen/bunkerbox/channels/${ CHANNEL } /
cp -R ${ MY_PATH } /templates/js ~/.zen/bunkerbox/channels/${ CHANNEL } /
2022-04-20 23:47:48 +02:00
## BACKUP IPNS KEY qo-op_${CHANNEL}.key WILL BE SENT BY OTHER MEAN
# cp ~/.ipfs/keystore/${channelfilename} ~/.zen/bunkerbox/channels/${CHANNEL}/qo-op_${CHANNEL}.key
2022-04-20 17:09:58 +02:00
echo $channelkey > ~/.zen/bunkerbox/channels/${ CHANNEL } /channelkey
2022-04-20 23:51:29 +02:00
echo " ## PUBLISHING qo-op_ ${ CHANNEL } /ipns/ $channelkey "
2022-04-21 00:20:08 +02:00
TW5 = $( ipfs add -rwHq ~/.zen/bunkerbox/channels/${ CHANNEL } /* | tail -n 1)
2022-04-20 23:47:48 +02:00
ipfs name publish --key= qo-op_${ CHANNEL } /ipfs/$TW5
2022-04-20 23:51:29 +02:00
echo "LINK IT into HOMEPAGE "
2022-04-21 01:09:31 +02:00
echo " <meta http-equiv=\"refresh\" content=\"0;URL=/ipns/ $channelkey \"> " > ~/.zen/bunkerbox/homepage/tw/${ CHANNEL } /index.html
2022-04-20 23:47:48 +02:00
echo "DONE ###"
2022-04-20 17:09:58 +02:00
else
echo " $CHANNEL IS UP. KEY IS CREATED. WAITING FOR SYNCING. PRINTING KNOWN MOA KEY. "
2022-04-20 19:22:48 +02:00
ipfs key list -l | grep -w " qo-op_ ${ CHANNEL } "
2022-04-20 17:09:58 +02:00
fi
fi
######################### ######################### #########################
2022-04-20 18:55:51 +02:00
else
echo "VIDEO ALREADY THERE"
2022-04-08 18:02:23 +02:00
fi
2022-04-20 18:55:51 +02:00
#############################
## UPDATE GLOBAL LOCAL HISTORY
2022-04-07 02:14:21 +02:00
IsThere = $( cat ~/.zen/bunkerbox/history.json | jq .Videos[ ] .link | grep $VUID )
if [ [ ! $IsThere ] ] ; then
2022-04-08 18:26:09 +02:00
echo " Add $INDEX to ~/.zen/bunkerbox/cache/ $VUID /media/history.json "
2022-04-08 02:47:03 +02:00
## history.json Videos.link is the HTML code displayed in index.html with pagination.js (related to)
2022-04-08 18:26:09 +02:00
cat ~/.zen/bunkerbox/history.json | jq '.Videos += [{"link": "<a id=' "'_TSVUID_'" ' href=' "'_INDEX_'" '><img src=' "'_INDEX_/_VUID_.jpg'" ' height=80 ></a><br>' "'_TITLE_'" '"}]' > ~/.zen/bunkerbox/cache/$VUID /media/history.json
# sed -i "s~_TSVUID_~$TS$VUID~g" ~/.zen/bunkerbox/cache/$VUID/media/history.json # Makes different chain for each creator !!
sed -i " s~_INDEX_~ $INDEX ~g " ~/.zen/bunkerbox/cache/$VUID /media/history.json
sed -i " s~_VUID_~ $VUID ~g " ~/.zen/bunkerbox/cache/$VUID /media/history.json
sed -i " s~_TITLE_~ $TITLE ~g " ~/.zen/bunkerbox/cache/$VUID /media/history.json
2022-04-08 15:25:19 +02:00
2022-04-07 02:14:21 +02:00
# COULD BE DONE LIKE THAT
2022-04-08 18:26:09 +02:00
# cat ~/.zen/bunkerbox/cache/$VUID/media/history.json | jq --arg INDEX "$INDEX" --arg TITLE "$TITLE" '.Videos += [{"link": "<a href='''$INDEX''' >'''$TITLE'''</a>"}]' > ~/.zen/bunkerbox/history.json
2022-04-08 13:57:36 +02:00
echo "MISE A JOUR ~/.zen/bunkerbox/history.json"
2022-04-08 18:26:09 +02:00
[ [ " $( cat ~/.zen/bunkerbox/cache/$VUID /media/history.json) " = = "" ] ] && echo " NO $VUID /media/history.json FATAL ERROR " && exit 1
2022-04-11 18:40:06 +02:00
# Upgrade local history.json with new one
2022-04-08 18:26:09 +02:00
if [ [ -f ~/.zen/bunkerbox/cache/$VUID /media/history.json ] ] ; then
2022-04-20 18:55:51 +02:00
cp ~/.zen/bunkerbox/cache/$VUID /media/history.json ~/.zen/bunkerbox/history.json
2022-04-08 13:57:36 +02:00
fi
2022-04-07 02:14:21 +02:00
fi
2022-04-20 18:55:51 +02:00
#############################
2022-04-07 02:14:21 +02:00
2022-04-08 18:06:59 +02:00
#################
VMAIN = " /ipfs/ $IPFSROOT / $VUID .m3u8 "
# UPDATING original JSON - TODO inform crowdbunker that IPFS copy is available.
2022-04-08 18:26:09 +02:00
cat ~/.zen/bunkerbox/cache/$VUID /media/$VUID .json | jq " .video.hlsManifest.url = \" $VMAIN \" " > ~/.zen/bunkerbox/cache/$VUID /$VUID .json
2022-04-20 18:55:51 +02:00
echo " New HLS = $IPFSNGW $VMAIN "
2022-04-08 18:06:59 +02:00
#################
# Create local index.html simple redirect to current IPFS video
2022-04-08 02:47:03 +02:00
echo " <meta http-equiv=\"refresh\" content=\"0;URL= $IPFSNGW $INDEX \"> " > ~/.zen/bunkerbox/index.html
2022-04-07 15:43:42 +02:00
echo " ===== INDEX ===== $IPFSNGW /ipfs/ $IPFSROOT "
echo " HISTORY : $IPFSNGW /ipfs/ $IPFSROOT /history.json "
2022-04-07 02:14:21 +02:00
2022-04-08 18:06:59 +02:00
################# ################# #################
2022-04-20 17:09:58 +02:00
## GESTION CHOICE
2022-04-08 13:57:36 +02:00
PS3 = "Comment voulez-vous publier votre collecte ? "
2022-04-07 02:14:21 +02:00
choices = ( "debug" "local" "qo-op" "astrXbian" )
2022-04-07 16:00:19 +02:00
fav = $( cat ~/.zen/bunkerbox/choice 2>/dev/null)
2022-04-07 02:14:21 +02:00
[ [ ! $fav ] ] && select fav in " ${ choices [@] } " ; do [ [ $fav ] ] && break; done
case $fav in
"local" )
echo 'local' > ~/.zen/bunkerbox/choice
2022-04-08 13:57:36 +02:00
echo "MODE 'local'"
2022-04-07 02:14:21 +02:00
continue
; ;
"astrXbian" )
2022-04-08 18:02:23 +02:00
echo "MODE 'astrXbian' (DEV ZONE)"
2022-04-07 02:14:21 +02:00
[ [ ! -d ~/.zen/astrXbian ] ] && echo "DEV ZONE - Installez astrXbian SVP ... P2P VideoClub DEMO - DEV ZONE !" && exit 1
[ [ ! $IPFSNODEID ] ] && echo "Missing IPFSNODEID. Exit" && exit 1
echo 'astrXbian' > ~/.zen/bunkerbox/choice
mkdir -p ~/.zen/ipfs/.$IPFSNODEID /astroport/bunkerbox
echo " <meta http-equiv=\"refresh\" content=\"0;URL= $INDEX \"> " > ~/.zen/ipfs/.$IPFSNODEID /astroport/bunkerbox/index.html
cp ~/.zen/bunkerbox/history.json ~/.zen/ipfs/.$IPFSNODEID /astroport/bunkerbox/
2022-04-07 15:43:42 +02:00
echo " BALISE Station :: $IPFSNGW /ipns/ $IPFSNODEID /. $IPFSNODEID /astroport/bunkerbox/ "
echo "Propagation lors du prochain cycle astrXbian"
2022-04-07 02:14:21 +02:00
continue
; ;
"qo-op" )
2022-04-08 13:57:36 +02:00
echo "MODE 'qo-op'"
2022-04-20 19:08:14 +02:00
if [ [ ! $( ipfs key list | grep -w 'qo-op' ) ] ] ; then
2022-04-07 02:14:21 +02:00
2022-04-07 15:43:42 +02:00
echo "Clef qo-op manquante! (Missing qo-op key!)"
echo "Récupérez la auprès de votre meilleur ami. Et ne brisez pas la chaine de confiance!"
echo "(Get it from your best friend and do not break confidence ring!)"
sleep 2
echo
echo "Envoyez un email pour obtenir assistance. (Contact support@qo-op.com) ? HELP !"
sleep 1
echo
2022-04-08 18:02:23 +02:00
echo "Utiliser la clef 'qo-op' par défaut ? ENTRER pour OUI. Saisissez un caractère avant si NON."
2022-04-07 02:14:21 +02:00
read KDEV
2022-04-07 15:43:42 +02:00
if [ [ " $KDEV " != "" ] ] ; then
echo "La confiance est dans la CLEF (Confidence is in the KEY)."
2022-04-08 18:02:23 +02:00
echo "Génération de la votre (here is yours): "
2022-04-07 15:43:42 +02:00
publishkey = $( ipfs key gen qo-op)
echo "~/.ipfs/keystore/key_ofxs233q"
2022-04-08 18:02:23 +02:00
echo "Partagez cette clef avec vos amis pour créer votre chaine video en commun..."
2022-04-07 15:43:42 +02:00
echo " $IPFSNGW /ipns/ $publishkey "
2022-04-08 18:02:23 +02:00
echo
2022-04-07 15:43:42 +02:00
echo " $publishkey " > ~/.zen/bunkerbox/qo-op
echo 'qo-op' > ~/.zen/bunkerbox/choice
else
## USE DEV KEY
2022-04-08 18:02:23 +02:00
echo "Activation clef 'qo-op' par défaut."
2022-04-07 15:43:42 +02:00
echo "k51qzi5uqu5djt17zonkpg1cb8hrxhahpesybusz8q57j4ocqm0qlc6s99z60x" > ~/.zen/bunkerbox/qo-op
cp ${ MY_PATH } /key_ofxs233q ~/.ipfs/keystore/
fi
2022-04-07 02:14:21 +02:00
else
2022-04-08 13:57:36 +02:00
## qo-op KEY IS ALREADY THERE. WRITE 'qo-op' IPNS key
2022-04-08 18:02:23 +02:00
# Refreshing actual 'qo-op' key
2022-04-20 19:08:14 +02:00
ipfs key list -l | grep -w 'qo-op' | cut -f 1 -d ' ' > ~/.zen/bunkerbox/qo-op
2022-04-07 02:14:21 +02:00
fi
echo 'qo-op' > ~/.zen/bunkerbox/choice
2022-04-21 02:03:04 +02:00
IPNS = $( cat ~/.zen/bunkerbox/qo-op)
IPNSL = " /ipns/ $IPNS "
2022-04-08 13:57:36 +02:00
echo
2022-04-21 02:08:37 +02:00
echo " Chaine Vidéo 'qo-op' => $IPFSNGW /ipns/ $IPNS "
2022-04-07 02:14:21 +02:00
echo
2022-04-08 18:06:59 +02:00
##### NEW HOMEPAGE / NEW DYNAMIC DATA ###### HERE TIMESTAMPING IS OK
2022-04-11 12:14:31 +02:00
InHere = $( cat ~/.zen/bunkerbox/history_*.json | jq .Videos[ ] .link | grep $VUID )
2022-04-07 02:14:21 +02:00
if [ [ ! $InHere ] ] ; then
2022-04-08 18:02:23 +02:00
echo "BunkerBOX - NOUVELLE VIDEO - Mise à jour homepage & dynamic history(s).json"
2022-04-08 18:37:55 +02:00
mkdir -p ~/.zen/bunkerbox/homepage/
2022-04-08 03:11:35 +02:00
## This is the welcome page of your qo-op channel.
# Could be redirect, or ... Your homepage is introduced there !!
2022-04-08 18:37:55 +02:00
# echo "<meta http-equiv=\"refresh\" content=\"0;URL=$INDEX\">" > ~/.zen/bunkerbox/homepage/index.html
2022-04-20 17:09:58 +02:00
## Preparing homepage
2022-04-08 18:37:55 +02:00
cp -R ${ MY_PATH } /templates/styles ~/.zen/bunkerbox/homepage/
cp -R ${ MY_PATH } /templates/js ~/.zen/bunkerbox/homepage/
cp ${ MY_PATH } /templates/homepage.html ~/.zen/bunkerbox/homepage/index.html
cp ${ MY_PATH } /templates/crowbunkerbox.png ~/.zen/bunkerbox/homepage/
sed -i " s~_IPNSL_~ $IPNSL ~g " ~/.zen/bunkerbox/homepage/index.html
2022-04-11 13:24:24 +02:00
sed -i " s~_VUID_~ $INDEX / $VUID ~g " ~/.zen/bunkerbox/homepage/index.html
2022-04-13 20:40:34 +02:00
sed -i " s/_WHO_/ $( date -u "+%Y-%m-%d#%H:%M:%S" ) @ $IPFSNODEID /g " ~/.zen/bunkerbox/homepage/index.html
2022-04-12 01:50:59 +02:00
sed -i " s~_TITLE_~ $TITLE ~g " ~/.zen/bunkerbox/homepage/index.html
2022-04-21 17:09:44 +02:00
TAGS = $( ${ MY_PATH } /tools/get_tagcloud_data.sh $IPNS )
sed -i " s~_TAGCLOUD_~ $TAGS ~g " ~/.zen/bunkerbox/homepage/index.html
2022-04-08 18:37:55 +02:00
2022-04-20 23:47:48 +02:00
# Copy json's
2022-04-08 18:37:55 +02:00
cp ~/.zen/bunkerbox/history.json ~/.zen/bunkerbox/homepage/history.json
2022-04-11 00:50:10 +02:00
cp ~/.zen/bunkerbox/calendar.json ~/.zen/bunkerbox/homepage/calendar.json
2022-04-20 23:47:48 +02:00
cp ~/.zen/bunkerbox/history.${ CHANNEL } .json ~/.zen/bunkerbox/homepage/history.${ CHANNEL } .json
cp ~/.zen/bunkerbox/caroussel.${ CHANNEL } .json ~/.zen/bunkerbox/homepage/caroussel.${ CHANNEL } .json
2022-04-16 10:56:15 +02:00
2022-04-20 23:47:48 +02:00
## ACTIVATE CONTROL
2022-04-21 17:34:27 +02:00
rm -Rf ~/.zen/bunkerbox/homepage/time
2022-04-16 10:56:15 +02:00
mkdir -p ~/.zen/bunkerbox/homepage/time/
2022-04-08 18:37:55 +02:00
echo " $TS " > ~/.zen/bunkerbox/homepage/ts # TimeStamping
2022-04-20 17:09:58 +02:00
echo " $IPFSNODEID " > ~/.zen/bunkerbox/homepage/time/$TS # (could be signed) Put my Station ID into time/$TS for control #astrXbian (whitelist swarm control) or blacklisting extension here)
2022-04-20 23:47:48 +02:00
# (UNCOMMENT THIS CODE AND protect history_qo-op.json corruption the way you want to (*white or black listing)
2022-04-16 10:56:15 +02:00
# BALISE=$(echo $TS | ipfs add -q)
# ipfs name publish $BALISE ##### $IPFSNODEID IS now confirming it recognizes this TS as last publishing !!
2022-04-21 02:08:37 +02:00
# TIME=$(ipfs cat /ipns/$IPNS/ts)
# WHO=$(ipfs cat /ipns/$IPNS/time/$TIME)
2022-04-16 10:56:15 +02:00
# ISTRUE=$(ipfs cat /ipns/$WHO)
# TIME == ISTRUE ? ####### Et voilà ;)
2022-04-08 18:37:55 +02:00
echo "Adding ~/.zen/bunkerbox/homepage/* to IPFS "
VROOT = $( ipfs add -rwHq ~/.zen/bunkerbox/homepage/* | tail -n 1)
2022-04-08 13:57:36 +02:00
echo " 'qo-op' update with /ipfs/ $VROOT "
2022-04-07 02:14:21 +02:00
ipfs name publish --key= qo-op /ipfs/$VROOT
2022-04-11 00:50:10 +02:00
echo " $VROOT " > ~/.zen/bunkerbox/homepage/chain # Memorize chain ipfs reference
2022-04-08 13:57:36 +02:00
echo " HOME : $IPFSNGW /ipns/ $IPNS / "
echo " HISTORY : $IPFSNGW /ipns/ $IPNS /history.json "
2022-04-07 02:14:21 +02:00
fi
continue
; ;
"debug" )
echo "debug"
> ~/.zen/bunkerbox/choice
2022-04-08 15:25:19 +02:00
continue
2022-04-07 02:14:21 +02:00
; ;
esac
2022-04-08 15:25:19 +02:00
end = ` date +%s` ; echo ___Duration ` expr $end - $start ` seconds___
2022-04-07 02:14:21 +02:00
done
2022-04-11 00:50:10 +02:00