#!/bin/bash ######################################################################## # Author: Fred (support@qo-op.com) # Version: 0.3 # License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) ######################################################################## # COPY ~/astroport/* files to IPFS # Publish INDEX ~/.zen/ipfs/.*/${PREFIX}ASTRXBIAN ######## #### ### ## # HOME=`cat conf/home_dir.txt` ######################################################################## MY_PATH="`dirname \"$0\"`" # relative MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized ME="${0##*/}" YOU=$(ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1); IPFSNODEID=$(ipfs id -f='\n') G1PUB=$(cat ~/.zen/secret.dunikey | grep 'pub:' | cut -d ' ' -f 2) # ~/.zen/ipfs/.${IPFSNODEID}/astroport/kodi/vstream/${PREFIX}ASTRXBIAN # Astropot/Kodi/Vstream source reads ${PREFIX}ASTRXBIAN from http://127.0.0.1:8181/.$IPFNODEID/ # Index File Format (could be enhanced) is using Kodi TMDB enhancement # https://github.com/Kodi-vStream/venom-xbmc-addons/wiki/Voir-et-partager-sa-biblioth%C3%A8que-priv%C3%A9e#d%C3%A9clarer-des-films ######################################################################## ## RUN inotifywait process ~/astroport/ NEW FILE DETECT # /usr/bin/inotifywait -r -e close_write -m /home/$YOU/astroport | while read dir flags file; do ~/.zen/astrXbian/zen/new_file_in_astroport.sh "$dir" "$file"; done & # mkdir -p ~/astroport/youtube # mkdir -p ~/astroport/mp3 ######################################################################## path="$1" # Add trailing / if needed length=${#path} last_char=${path:length-1:1} [[ $last_char != "/" ]] && path="$path/"; : file="$2" extension="${file##*.}" TITLE="${file%.*}" #echo "~/.zen/www/new_youtube_video_in_astroport.sh PATH/ \"$path\" FILE \"$file\"" echo "Checking if the file exists at :" echo "$path$file" echo "in ~/.zen/www/new_youtube_video_in_astroport.sh" # .part file false flag correcting (inotify mode) [[ ! -f "${path}${file}" ]] && file="${TITLE%.*}" && extension="${TITLE##*.}" && [[ ! -f "${path}${file}" ]] && echo "NO FILE" && exit 1 # GET XZUID [[ -f ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_g1.gchange_title ]] && XZUID=$(cat ~/.zen/ipfs/.$IPFSNODEID/G1SSB/_g1.gchange_title) || XZUID=$(cat /etc/hostname) [[ ! $(echo "$path" | cut -d '/' -f 4 | grep 'astroport') ]] && echo "Les fichiers sont à placer dans ~/astroport/ MERCI" && exit 1 TYPE=$(echo "$path" | cut -d '/' -f 5 ) # ex: /home/$YOU/astroport/... TYPE(film, youtube, mp3)/ REFERENCE / CAT=$(echo "$TYPE" | awk '{ print tolower($0) }') PREFIX=$(echo "$TYPE" | head -c 1 | awk '{ print toupper($0) }' ) # ex: F, Y, M ou Y # File is placed in ROOT ~/astroport ? if [[ $PREFIX == "" ]] then [[ "$USER" != "xbian" ]] && zenity --warning --width 300 --text "Désolé votre fichier ne peut pas être traité" echo "WARNING. $TYPE is root file UNTREATED" && exit 1 fi ######################################################################## # EXTRACT INDEX REFERENCE : TMDB or YOUTUBE (can be extended with new ) ######################################################################## case ${CAT} in youtube) INDEXPREFIX="YOUTUBE_" REFERENCE=$(echo "$file" | cut -d "_" -f 1) # Youtube filename starts with ID_ TITLE=$(echo "$TITLE" | cut -d "_" -f 2-) ;; mp3) ## DIFFERENT TREATMENT INDEXPREFIX="MP3_" REFERENCE=$(echo "$file" | cut -d "_" -f 1) # Youtube filename starts with ID_ echo "Please use new_mp3_in_astroport.sh ... EXIT" exit 1 ;; film | serie | anime) INDEXPREFIX="TMDB_" REFERENCE=$(echo "$path" | cut -d '/' -f 6 ) # Path contains TMDB id if ! [[ "$REFERENCE" =~ ^[0-9]+$ ]] # ${REFERENCE} NOT A NUMBER then echo "ERROR: $path BAD TMDB code. Get it from https://www.themoviedb.org/ " exit 1 fi ;; *) echo "$CAT inconnu" && exit 1 ;; esac ######################################################################## ## CHECK if ${INDEXPREFIX}${REFERENCE} KEY exists ######################################################################## echo "SEARCH for ;$REFERENCE; in ${PREFIX}ASTRXBIAN" isREFERENCEinINDEX=$(grep ";$REFERENCE;" ~/.zen/ipfs*/.*/astroport/kodi/vstream/${PREFIX}ASTRXBIAN) if [[ ${isREFERENCEinINDEX} ]] then if [[ -d ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB} ]] then # FILE IS MINE, NEW VERSION?! replacing it in INDEX ipnslink=$(cat ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.ipns.link) echo "FOUND IPNS ${INDEXPREFIX}${REFERENCE} = $ipnslink" # DELETING GCHANGE AD, WILL BE CREATED AGAIN gchangeAD=$(cat ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.gchange.ad) ~/.zen/astrXbian/zen/jaklis/jaklis.py deleteoffer -i $gchangeAD rm ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.gchange.ad else echo "FILE IS ALREADY EXISTING FROM ANOTHER FRIEND" echo ${isREFERENCEinINDEX} | head -n 1 | cut -d ":" -f 2- # I could send message to my friend, PIN, exchange contract... WHAT IS BEST TODO ?? fi # DELETING OLD LINE FROM INDEX sed -i "/;$REFERENCE;/d" ~/.zen/ipfs/.${IPFSNODEID}/astroport/kodi/vstream/${PREFIX}ASTRXBIAN # [[ "$USER" != "xbian" ]] && zenity --warning --width 300 --text "DOUBLON ${isREFERENCEinINDEX}" fi ######################################################################## echo "ADDING ${path}${file} to IPFS and create ${PREFIX}ASTRXBIAN INDEX" echo "~/.zen/ipfs/.${IPFSNODEID}/astroport/kodi/vstream/${PREFIX}ASTRXBIAN" echo "-----------------------------------------------------------------" IPFSREPFILEID=$(ipfs add -wq "${path}${file}" | tail -n 1) [[ $IPFSREPFILEID == "" ]] && echo "ipfs add ERROR" && exit 1 echo "-----------------------------------------------------------------" echo "IPFS: $file : ipfs ls /ipfs/$IPFSREPFILEID" echo "-----------------------------------------------------------------" echo "New $TYPE INDEX ~/.zen/ipfs/.${IPFSNODEID}/astroport/kodi/vstream/${PREFIX}ASTRXBIAN " [[ ! -d ~/.zen/ipfs/.${IPFSNODEID}/astroport/kodi/vstream/ ]] && mkdir -p ~/.zen/ipfs/.${IPFSNODEID}/astroport/kodi/vstream/ URLENCODE_FILE_NAME=$(echo ${file} | jq -Rr @uri) ######################################################################## ## CREATE NEW ipns KEY : ${INDEXPREFIX}${REFERENCE} ######################################################################## ######################################################################## [[ ! -d ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB} ]] && mkdir -p ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB} && KEY=$(ipfs key gen "${INDEXPREFIX}${REFERENCE}") && KEYFILE=$(ls -t ~/.ipfs/keystore/ | head -n 1) ## INIT ipns if [[ $KEY ]]; then # memorize IPNS key filename for easiest exchange echo "$KEYFILE" > ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.ipns.key.keystore_filename # Publishing IPNS key echo "$KEY" > ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.ipns.link # .zen could contain ZEN for economic value touch ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.zen ################ ENCRYPT keystore/$KEYFILE $MY_PATH/tools/natools.py encrypt -p $G1PUB -i ~/.ipfs/keystore/$KEYFILE -o ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.ipns.key.natools.encrypt else KEY=$(cat ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.ipns.link) KEYFILE=$(cat ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.ipns.key.keystore_filename) fi # CLEAR ipfs link (is then cyphered to manage exchange regulation) echo "/ipfs/$IPFSREPFILEID/${file}" > ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.ipfs.filelink ################ ENCRYPT .ipfs.filelink $MY_PATH/tools/natools.py encrypt -p $G1PUB -i ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.ipfs.filelink -o ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.ipfs.filelink.natools.encrypt rm ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.ipfs.filelink echo "${file}" > ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.ipfs.filename echo "${TITLE}" > ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.title echo "$(date -u +%s%N | cut -b1-13)" > ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.timestamp # COPY "ajouter_video.txt" later used [[ -f ~/astroport/${TYPE}/${REFERENCE}/ajouter_video.txt ]] && cp -f ~/astroport/${TYPE}/${REFERENCE}/ajouter_video.txt ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/ # IPNS index.html Redirect to ipfs streaming link (could be contract or anything else !!) echo "" > ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/index.html IPNSLINK=$(ipfs key list -l | grep ${INDEXPREFIX}${REFERENCE} | cut -d ' ' -f 1) echo "

ASTROPORT/KODI

Pour regarder ${TITLE}, rejoignez notre video-club et devenons amis...

Installez astrXbian" > ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/index.html NEWIPFS=$(ipfs add -rHq ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/ | tail -n 1 ) IPNS=$(ipfs name publish --quieter --key="${INDEXPREFIX}${REFERENCE}" $NEWIPFS) ######################################################################## ######################################################################## # PUBLISH GCHANGE AD for TMDB film/serie/anime ONLY ######################################################################## if [[ "${CAT}" =~ ^(film|serie|anime)$ ]] then if [[ ! -f ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.gchange.ad ]] then GOFFER=$(~/.zen/astrXbian/zen/jaklis/jaklis.py setoffer -t "${TITLE} #astroport #${INDEXPREFIX}${REFERENCE}" -d "https://aries.copylaradio.com/ipns/$IPNS/" -p ~/.zen/astrXbian/disk.png) echo $GOFFER > ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.gchange.ad NEWIPFS=$(ipfs add -rHq ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/ | tail -n 1 ) IPNS=$(ipfs name publish --quieter --key="${INDEXPREFIX}${REFERENCE}" $NEWIPFS) fi echo "Annonce gchange : $(cat ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/.gchange.ad)" fi ######################################################################## # NEW ${PREFIX}ASTRXBIAN FILE : Add header [[ ! -f ~/.zen/ipfs/.${IPFSNODEID}/astroport/kodi/vstream/${PREFIX}ASTRXBIAN ]] \ && echo "CAT;TMDB;YEAR;TITLE;SAISON;GENRES;GROUPES;RES;URLS=http://127.0.0.1:8181" > ~/.zen/ipfs/.${IPFSNODEID}/astroport/kodi/vstream/${PREFIX}ASTRXBIAN # MEMORIZE NEW PIN mkdir -p ~/.zen/ipfs/.${IPFSNODEID}/PIN/${IPFSREPFILEID}/ touch ~/.zen/ipfs/.${IPFSNODEID}/PIN/${IPFSREPFILEID}/${G1PUB} # ADD NEW LINE TO INDEX if [[ -f ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/ajouter_video.txt ]] then line=$(cat ~/.zen/KEY/${INDEXPREFIX}${REFERENCE}/${G1PUB}/ajouter_video.txt | sed "s/_IPFSREPFILEID_/$IPFSREPFILEID/g" | sed "s/_IPNSKEY_/$IPNS/g" ) else FILE_RES=$(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 "${path}${file}" | cut -d "x" -f 2) RES=${FILE_RES%?}0p line="$CAT;${REFERENCE};$YEAR;$TITLE;$SAISON;;${IPNS};$RES;/ipfs/$IPFSREPFILEID/$URLENCODE_FILE_NAME" fi echo "-------------------- UPDATE MY INDEX -----------------------------" echo "$line" echo "$line" >> ~/.zen/ipfs/.${IPFSNODEID}/astroport/kodi/vstream/${PREFIX}ASTRXBIAN echo "----------------- REFRESH GLOBAL KODI INDEX ----------------------" cat ~/.zen/ipfs/.${IPFSNODEID}/astroport/kodi/vstream/${PREFIX}ASTRXBIAN ~/.zen/ipfs_swarm/.*/astroport/kodi/vstream/${PREFIX}ASTRXBIAN | sort | uniq > ~/.zen/ipfs/.${IPFSNODEID}/${PREFIX}ASTRXBIAN ######################################################################## # REFRESH IPNS SELF PUBLISH ######################################################################## ./ipns_self_publish.sh ######################################################################## echo "NEW $TYPE ($file) ADDED." echo "INDEX UPDATED : http://127.0.0.1:8181/ipns/${IPFSNODEID}/.${IPFSNODEID}/${PREFIX}ASTRXBIAN" echo "VIDEO IPNS LINK : http://127.0.0.1:8181/ipns/$KEY/$G1PUB/" exit 0