CHANNEL history

This commit is contained in:
fred 2022-04-08 18:02:23 +02:00
parent 3db9b35073
commit b66568739a
3 changed files with 89 additions and 27 deletions

View File

@ -60,7 +60,22 @@ https://ipfs.io/ipns/k51qzi5uqu5djt17zonkpg1cb8hrxhahpesybusz8q57j4ocqm0qlc6s99z
3. Ajoute le lecteur videojs dans index.html et met à jour history.json 3. Ajoute le lecteur videojs dans index.html et met à jour history.json
4. Publie localement, sur la clef IPNS 'qo-op' ou au travers du TestNet 'astrXbian' 4. Publie localement, sur la clef IPNS 'qo-op' ou au travers du TestNet 'astrXbian'
Pour revenir en mode "debug", effacez le fichier ~/.zen/bunkerbox/choice Pour revenir en mode "debug", effacez le fichier ~/.zen/bunkerbox/choice
# # Participation
**IPFS est encore vierge. Venez y tracer vos chaines vidéos!**
- Familier avec les outils en ligne de commande?
Ce sont principalement curl, jq, sed, cut et ipfs qui sont mis à l'oeuvre.
La méthode employée dans ce programme est extensible à l'infini !!
Les média sont "encapsulés" avec une page de présentation (html, js, css, json) puis utilise jQuery pour créer l'interface.
Le tout est inscrit dans IPFS, la mémoire de ces inscriptions est conservées au travers de fichiers history.json statiques et/ou dynamiques (mode 'qo-op' et publication IPNS).
Des connaissances en html, css, jQuery, ou d'autres bibliothèques javascript que je ne connais pas (vue.js?) vous permettra de prendre en main ce code.
Forkez moi.
**Envoyez un email à support@qo-op.com pour obtenir de l'aide**

View File

@ -50,7 +50,8 @@ for VUID in $(tac /tmp/vuid.list); do
LIVE=$(cat ~/.zen/bunkerbox/$VUID/media/$VUID.json | jq -r .video.isLiveActive) && [[ "$LIVE" == "true" ]] && echo "STREAMING... Bypassing..." && echo && continue LIVE=$(cat ~/.zen/bunkerbox/$VUID/media/$VUID.json | jq -r .video.isLiveActive) && [[ "$LIVE" == "true" ]] && echo "STREAMING... Bypassing..." && echo && continue
DURATION=$(cat ~/.zen/bunkerbox/$VUID/media/$VUID.json | jq -r .video.duration) && [[ $DURATION == 0 ]] && echo "NOT STARTED YET" && echo && continue DURATION=$(cat ~/.zen/bunkerbox/$VUID/media/$VUID.json | jq -r .video.duration) && [[ $DURATION == 0 ]] && echo "NOT STARTED YET" && echo && continue
TITLE=$(cat ~/.zen/bunkerbox/$VUID/media/$VUID.json | jq -r .video.title | sed "s/'/ /g" | sed 's/"/ /g') # Remove quote TITLE=$(cat ~/.zen/bunkerbox/$VUID/media/$VUID.json | jq -r .video.title | sed "s/'/ /g" | sed 's/"/ /g') # Remove quote
CHANNEL=$(cat ~/.zen/bunkerbox/$VUID/media/$VUID.json | jq -r .channel.name) CHANNEL=$(cat ~/.zen/bunkerbox/$VUID/media/$VUID.json | jq -r .channel.organization.uid)
## GET MORE DATA... CORRECT IT for each JSON
ORGUID=$(cat ~/.zen/bunkerbox/$VUID/media/$VUID.json | jq -r .organization.uid) ORGUID=$(cat ~/.zen/bunkerbox/$VUID/media/$VUID.json | jq -r .organization.uid)
ORGNAME=$(cat ~/.zen/bunkerbox/$VUID/media/$VUID.json | jq -r .organization.name) ORGNAME=$(cat ~/.zen/bunkerbox/$VUID/media/$VUID.json | jq -r .organization.name)
ORGBANNER=$(cat ~/.zen/bunkerbox/$VUID/media/$VUID.json | jq -r .organization.banner.url) ORGBANNER=$(cat ~/.zen/bunkerbox/$VUID/media/$VUID.json | jq -r .organization.banner.url)
@ -135,6 +136,9 @@ echo "##########################################################################
IPNSL="./" IPNSL="./"
fi fi
# Add previous CHANNEL History
[[ -f ~/.zen/bunkerbox/history.${CHANNEL}.json ]] && cp ~/.zen/bunkerbox/history.${CHANNEL}.json ~/.zen/bunkerbox/$VUID/media/
# Add current/latest reversed history to media # Add current/latest reversed history to media
echo '{ "Videos":' > ~/.zen/bunkerbox/$VUID/media/history.json echo '{ "Videos":' > ~/.zen/bunkerbox/$VUID/media/history.json
cat ~/.zen/bunkerbox/history.json | jq '.[] | reverse' >> ~/.zen/bunkerbox/$VUID/media/history.json cat ~/.zen/bunkerbox/history.json | jq '.[] | reverse' >> ~/.zen/bunkerbox/$VUID/media/history.json
@ -150,8 +154,33 @@ echo "##########################################################################
echo ">>>>> ADDING MEDIA TO IPFS : ipfs add -rwH ~/.zen/bunkerbox/$VUID/media/* " echo ">>>>> ADDING MEDIA TO IPFS : ipfs add -rwH ~/.zen/bunkerbox/$VUID/media/* "
echo echo
#################################################################
# IPFS WRITING. All that is prepared above in ~/.zen/bunkerbox/$VUID/media/ will become permanent !
#################################################################
IPFSROOT=$(ipfs add -rwHq ~/.zen/bunkerbox/$VUID/media/* | tail -n 1) IPFSROOT=$(ipfs add -rwHq ~/.zen/bunkerbox/$VUID/media/* | tail -n 1)
INDEX="/ipfs/$IPFSROOT" INDEX="/ipfs/$IPFSROOT"
#################################################################
# IPFS WRITING DONE. Doing after is to UPDATE local history(s).json in ~/.zen/bunkerbox/
# Then publishing on IPNS 'qo-op' all dynamic data needed by above 'index.html'
#################################################################
# 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
if [[ ! $(cat ~/.zen/bunkerbox/history.${CHANNEL}.json | jq .Videos[].link | grep $VUID) ]]; then
echo "ADD ~/.zen/bunkerbox/history.${CHANNEL}.json"
# Bad characters breaks this command !! # 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
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/$VUID/media/history.${CHANNEL}.json
sed -i "s~_INDEX_~$INDEX~g" ~/.zen/bunkerbox/$VUID/media/history.${CHANNEL}.json
sed -i "s~_VUID_~$VUID~g" ~/.zen/bunkerbox/$VUID/media/history.${CHANNEL}.json
sed -i "s~_TITLE_~$TITLE~g" ~/.zen/bunkerbox/$VUID/media/history.${CHANNEL}.json
[[ "$(cat ~/.zen/bunkerbox/$VUID/media/history.${CHANNEL}.json)" == "" ]] && echo "NO history.${CHANNEL}.json FATAL ERROR" && exit 1
cp ~/.zen/bunkerbox/$VUID/media/history.${CHANNEL}.json ~/.zen/bunkerbox/history.${CHANNEL}.json
fi
VMAIN="/ipfs/$IPFSROOT/$VUID.m3u8" VMAIN="/ipfs/$IPFSROOT/$VUID.m3u8"
# UPDATING original JSON - TODO inform crowdbunker that IPFS copy is available. # UPDATING original JSON - TODO inform crowdbunker that IPFS copy is available.
@ -172,7 +201,7 @@ echo "##########################################################################
# COULD BE DONE LIKE THAT # COULD BE DONE LIKE THAT
# cat ~/.zen/bunkerbox/$VUID/media/history.json | jq --arg INDEX "$INDEX" --arg TITLE "$TITLE" '.Videos += [{"link": "<a href='''$INDEX''' >'''$TITLE'''</a>"}]' > ~/.zen/bunkerbox/history.json # cat ~/.zen/bunkerbox/$VUID/media/history.json | jq --arg INDEX "$INDEX" --arg TITLE "$TITLE" '.Videos += [{"link": "<a href='''$INDEX''' >'''$TITLE'''</a>"}]' > ~/.zen/bunkerbox/history.json
echo "MISE A JOUR ~/.zen/bunkerbox/history.json" echo "MISE A JOUR ~/.zen/bunkerbox/history.json"
[[ "$(cat ~/.zen/bunkerbox/$VUID/media/history.json)" == "" ]] && echo "FATAL ERROR" && exit 1 [[ "$(cat ~/.zen/bunkerbox/$VUID/media/history.json)" == "" ]] && echo "NO $VUID/media/history.json FATAL ERROR" && exit 1
# Upgrade local history.json with reverse new one # Upgrade local history.json with reverse new one
if [[ -f ~/.zen/bunkerbox/$VUID/media/history.json ]]; then if [[ -f ~/.zen/bunkerbox/$VUID/media/history.json ]]; then
echo '{ "Videos":' > ~/.zen/bunkerbox/history.json echo '{ "Videos":' > ~/.zen/bunkerbox/history.json
@ -197,7 +226,7 @@ echo "##########################################################################
continue continue
;; ;;
"astrXbian") "astrXbian")
echo "MODE 'astrXbian'" echo "MODE 'astrXbian' (DEV ZONE)"
[[ ! -d ~/.zen/astrXbian ]] && echo "DEV ZONE - Installez astrXbian SVP ... P2P VideoClub DEMO - DEV ZONE !" && exit 1 [[ ! -d ~/.zen/astrXbian ]] && echo "DEV ZONE - Installez astrXbian SVP ... P2P VideoClub DEMO - DEV ZONE !" && exit 1
[[ ! $IPFSNODEID ]] && echo "Missing IPFSNODEID. Exit" && exit 1 [[ ! $IPFSNODEID ]] && echo "Missing IPFSNODEID. Exit" && exit 1
echo 'astrXbian' > ~/.zen/bunkerbox/choice echo 'astrXbian' > ~/.zen/bunkerbox/choice
@ -220,24 +249,27 @@ echo "##########################################################################
echo "Envoyez un email pour obtenir assistance. (Contact support@qo-op.com) ? HELP !" echo "Envoyez un email pour obtenir assistance. (Contact support@qo-op.com) ? HELP !"
sleep 1 sleep 1
echo echo
echo "Utiliser la clef 'qo-op' de DEV ? ENTRER pour OUI. Saisissez un caractère avant si NON." echo "Utiliser la clef 'qo-op' par défaut ? ENTRER pour OUI. Saisissez un caractère avant si NON."
read KDEV read KDEV
if [[ "$KDEV" != "" ]]; then if [[ "$KDEV" != "" ]]; then
echo "La confiance est dans la CLEF (Confidence is in the KEY)." echo "La confiance est dans la CLEF (Confidence is in the KEY)."
echo "Voici la votre (here is yours): " echo "Génération de la votre (here is yours): "
publishkey=$(ipfs key gen qo-op) publishkey=$(ipfs key gen qo-op)
echo "~/.ipfs/keystore/key_ofxs233q" echo "~/.ipfs/keystore/key_ofxs233q"
echo "Partagez cette clef avec vos amis pour créer une chaine video en commun..." echo "Partagez cette clef avec vos amis pour créer votre chaine video en commun..."
echo "$IPFSNGW/ipns/$publishkey" echo "$IPFSNGW/ipns/$publishkey"
echo
echo "$publishkey" > ~/.zen/bunkerbox/qo-op echo "$publishkey" > ~/.zen/bunkerbox/qo-op
echo 'qo-op' > ~/.zen/bunkerbox/choice echo 'qo-op' > ~/.zen/bunkerbox/choice
else else
## USE DEV KEY ## USE DEV KEY
echo "Activation clef 'qo-op' par défaut."
echo "k51qzi5uqu5djt17zonkpg1cb8hrxhahpesybusz8q57j4ocqm0qlc6s99z60x" > ~/.zen/bunkerbox/qo-op echo "k51qzi5uqu5djt17zonkpg1cb8hrxhahpesybusz8q57j4ocqm0qlc6s99z60x" > ~/.zen/bunkerbox/qo-op
cp ${MY_PATH}/key_ofxs233q ~/.ipfs/keystore/ cp ${MY_PATH}/key_ofxs233q ~/.ipfs/keystore/
fi fi
else else
## qo-op KEY IS ALREADY THERE. WRITE 'qo-op' IPNS key ## qo-op KEY IS ALREADY THERE. WRITE 'qo-op' IPNS key
# Refreshing actual 'qo-op' key
ipfs key list -l | grep 'qo-op' | cut -f 1 -d ' ' > ~/.zen/bunkerbox/qo-op ipfs key list -l | grep 'qo-op' | cut -f 1 -d ' ' > ~/.zen/bunkerbox/qo-op
fi fi
echo 'qo-op' > ~/.zen/bunkerbox/choice echo 'qo-op' > ~/.zen/bunkerbox/choice
@ -248,28 +280,28 @@ echo "##########################################################################
InHere=$(cat ~/.zen/bunkerbox/history.qo-op.json | jq .Videos[].link | grep $VUID) InHere=$(cat ~/.zen/bunkerbox/history.qo-op.json | jq .Videos[].link | grep $VUID)
if [[ ! $InHere ]]; then if [[ ! $InHere ]]; then
echo "BunkerBOX - NOUVELLE VIDEO - Mise à jour homepage.html & history.json" echo "BunkerBOX - NOUVELLE VIDEO - Mise à jour homepage & dynamic history(s).json"
mkdir -p /tmp/$VUID mkdir -p ~/.zen/bunkerbox/qo-op/
## This is the welcome page of your qo-op channel. ## This is the welcome page of your qo-op channel.
# Could be redirect, or ... Your homepage is introduced there !! # Could be redirect, or ... Your homepage is introduced there !!
# echo "<meta http-equiv=\"refresh\" content=\"0;URL=$INDEX\">" > /tmp/$VUID/index.html # echo "<meta http-equiv=\"refresh\" content=\"0;URL=$INDEX\">" > ~/.zen/bunkerbox/qo-op/index.html
# echo "<meta http-equiv=\"refresh\" content=\"0;URL=$INDEX\">" > /tmp/$VUID/index.html # echo "<meta http-equiv=\"refresh\" content=\"0;URL=$INDEX\">" > ~/.zen/bunkerbox/qo-op/index.html
cp -R ${MY_PATH}/templates/styles /tmp/$VUID/ cp -R ${MY_PATH}/templates/styles ~/.zen/bunkerbox/qo-op/
cp -R ${MY_PATH}/templates/js /tmp/$VUID/ cp -R ${MY_PATH}/templates/js ~/.zen/bunkerbox/qo-op/
cp ${MY_PATH}/templates/homepage.html /tmp/$VUID/index.html cp ${MY_PATH}/templates/homepage.html ~/.zen/bunkerbox/qo-op/index.html
cp ${MY_PATH}/templates/crowbunkerbox.png /tmp/$VUID/ cp ${MY_PATH}/templates/crowbunkerbox.png ~/.zen/bunkerbox/qo-op/
sed -i "s~_IPNSL_~$IPNSL~g" /tmp/$VUID/index.html sed -i "s~_IPNSL_~$IPNSL~g" ~/.zen/bunkerbox/qo-op/index.html
cp ~/.zen/bunkerbox/history.json /tmp/$VUID/history.json cp ~/.zen/bunkerbox/history.json ~/.zen/bunkerbox/qo-op/history.json
echo "$TS" > /tmp/$VUID/ts # TimeStamping cp ~/.zen/bunkerbox/history.${CHANNEL}.json ~/.zen/bunkerbox/qo-op/history.${CHANNEL}.json
echo "Adding /tmp/$VUID/* to IPFS " echo "$TS" > ~/.zen/bunkerbox/qo-op/ts # TimeStamping
VROOT=$(ipfs add -rwHq /tmp/$VUID/* | tail -n 1) echo "Adding ~/.zen/bunkerbox/qo-op/* to IPFS "
VROOT=$(ipfs add -rwHq ~/.zen/bunkerbox/qo-op/* | tail -n 1)
echo "'qo-op' update with /ipfs/$VROOT" echo "'qo-op' update with /ipfs/$VROOT"
ipfs name publish --key=qo-op /ipfs/$VROOT ipfs name publish --key=qo-op /ipfs/$VROOT
echo "HOME : $IPFSNGW/ipns/$IPNS/" echo "HOME : $IPFSNGW/ipns/$IPNS/"
echo "HISTORY : $IPFSNGW/ipns/$IPNS/history.json" echo "HISTORY : $IPFSNGW/ipns/$IPNS/history.json"
fi fi
[[ $VUID != "" ]] && rm -Rf /tmp/$VUID # Cleaning
continue continue
;; ;;
"debug") "debug")

View File

@ -37,7 +37,7 @@
</center> </center>
<article> <article>
<h1 class="video-title"> <h1 class="video-title">
_CHANNEL_ : _TITLE_ __TITLE_
</h1> </h1>
</article> </article>
@ -45,6 +45,10 @@
<div id="videosList"><div class="wrapper"></div></div> <div id="videosList"><div class="wrapper"></div></div>
</center> </center>
<center>
<div id="videosChan"><div class="wrapper"></div></div>
</center>
<center> <center>
<h6> <h6>
<a href="_IPNSL_"> _\/_ </a> powered by <a href="https://astroport.com"><span>"</span>Astroport<span>"</span></a> <a href="_IPNSL_"> _\/_ </a> powered by <a href="https://astroport.com"><span>"</span>Astroport<span>"</span></a>
@ -60,25 +64,36 @@
<link rel="stylesheet" href="_IPFSROOT_/styles/pagination.css" /> <link rel="stylesheet" href="_IPFSROOT_/styles/pagination.css" />
<script> <script>
var player = videojs('vbunk', { var player = videojs('vbunk', {
autoplay: 'muted'
}); });
</script> </script>
<script> <script>
$.getJSON('_IPNSL_/history.json', function (json) { $.getJSON('_IPNSL_history.json', function (json) {
$('#videosList').pagination({ $('#videosList').pagination({
dataSource: json.Videos, dataSource: json.Videos,
pageSize: 1, pageSize: 1,
callback: function(data, pagination) { callback: function(data, pagination) {
var wrapper = $('#videosList .wrapper').empty(); var wrapper = $('#videosList .wrapper').empty();
$.each(data, function (i, f) { $.each(data, function (i, f) {
$('#videosList .wrapper').append('<ul><li>div class="snippet-block">' + f.link + '</div></li></ul>'); $('#videosList .wrapper').append('<ul><li><div class="snippet-block">' + f.link + '</div></li></ul>');
});
}
});
});
$.getJSON('_IPNSL_history._CHANNEL_.json', function (json) {
$('#videosList').pagination({
dataSource: json.Videos,
pageSize: 1,
callback: function(data, pagination) {
var wrapper = $('#videosList .wrapper').empty();
$.each(data, function (i, f) {
$('#videosList .wrapper').append('<ul><li><div class="snippet-block">' + f.link + '</div></li></ul>');
}); });
} }
}); });
}); });
</script> </script>
</html> </html>