2023-10-18 01:06:29 +02:00
|
|
|
#!/bin/bash
|
|
|
|
########################################################################
|
|
|
|
# Version: 0.1
|
|
|
|
# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/)
|
|
|
|
########################################################################
|
|
|
|
# INSERT NEW TIDDLERS FROM RSS JSON INTO UPLANET TW
|
2023-11-24 02:41:09 +01:00
|
|
|
# DETECTING CONFLICT WITH SAME TITLE
|
2023-10-18 01:06:29 +02:00
|
|
|
# ASKING TO EXISTING SIGNATURES TO UPDATE THEIR TW OR FORK TITLE
|
2024-01-14 16:47:30 +01:00
|
|
|
# CALLED BY "SECTOR.refresh.sh"
|
2023-10-18 01:06:29 +02:00
|
|
|
########################################################################
|
|
|
|
MY_PATH="`dirname \"$0\"`" # relative
|
|
|
|
MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
|
|
|
|
ME="${0##*/}"
|
|
|
|
|
2024-01-14 16:47:30 +01:00
|
|
|
RSS=$1 ## filepath to RSS
|
|
|
|
SECTOR=$2 ## Sector identifier _0.0_0.0
|
|
|
|
MOATS=$3 ## temp cache access
|
|
|
|
INDEX=$4 ## SECTOR TW index file
|
2023-10-18 01:06:29 +02:00
|
|
|
|
|
|
|
[[ ! -s ${RSS} ]] && echo "BAD RSS INPUT" && exit 1
|
2023-10-20 00:30:30 +02:00
|
|
|
[[ ! -d ~/.zen/tmp/${MOATS}/${SECTOR}/ ]] && echo "BAD UPLANET CONTEXT" && exit 1
|
2024-01-04 12:27:19 +01:00
|
|
|
[[ ! -s ${INDEX} ]] \
|
2024-01-14 19:05:53 +01:00
|
|
|
&& sed "s~_SECTOR_~${SECTOR}~g" ${MY_PATH}/../templates/twsector.html > ${INDEX} \
|
2024-01-04 12:27:19 +01:00
|
|
|
&& echo "REFRESHING SECTOR FROM empty TEMPLATE *****"
|
|
|
|
|
2023-10-18 01:06:29 +02:00
|
|
|
|
2024-01-03 17:46:04 +01:00
|
|
|
## EXTRACT PLAYER FROM RSS FILE NAME
|
|
|
|
PLAYER=$(echo ${RSS} | rev | cut -d '/' -f 1 | rev | sed "s~.rss.json~~g")
|
2024-01-04 00:11:50 +01:00
|
|
|
## GET PLAYER INFORMATION
|
2024-01-04 12:05:14 +01:00
|
|
|
$($MY_PATH/../tools/search_for_this_email_in_players.sh ${PLAYER})
|
2024-01-03 17:46:04 +01:00
|
|
|
echo "export ASTROPORT=${ASTROPORT} ASTROTW=${ASTROTW} ASTROG1=${ASTROG1} ASTROMAIL=${EMAIL} ASTROFEED=${FEEDNS}"
|
|
|
|
|
2024-01-04 00:11:50 +01:00
|
|
|
echo "======= ${INDEX} =======
|
2024-01-03 17:46:04 +01:00
|
|
|
SECTOR ${SECTOR} TW INSERTING ${PLAYER}
|
|
|
|
${RSS}
|
|
|
|
=================================================================="
|
2024-01-04 12:17:52 +01:00
|
|
|
cat "${RSS}" | jq 'sort_by(.created) | reverse | .[]' | jq -r '.title' > ~/.zen/tmp/${MOATS}/${SECTOR}/tiddlers.list
|
2024-01-03 17:46:04 +01:00
|
|
|
##
|
|
|
|
gloops=0
|
2023-10-21 02:14:07 +02:00
|
|
|
while read title; do
|
2023-12-06 00:50:56 +01:00
|
|
|
|
2023-12-06 00:51:24 +01:00
|
|
|
[[ ${floop} -gt 2 ]] && echo "0lder Tiddlers are similaR... BREAK" && break
|
2023-12-06 00:50:56 +01:00
|
|
|
|
2024-01-04 12:17:52 +01:00
|
|
|
# FILTER Astroport and les than 4 characters title Tiddlers (ex: GPS, ...). extend to allow personnal Tiddlers
|
2024-01-02 14:34:54 +01:00
|
|
|
[[ ${title} == "GettingStarted" || ${title::4} == ${title} || ${title} == "AstroID" || ${title} == "Voeu1.png" || ${title} == "Astroport" || ${title} == "MadeInZion" || ${title} == "G1Visa" || ${title} == "ZenCard" || ${title::5} == "Draft" ]] \
|
2023-10-21 17:04:22 +02:00
|
|
|
&& echo "FILTERED TITLE ${title}" && continue
|
2023-10-21 02:18:50 +02:00
|
|
|
|
2023-10-18 01:06:29 +02:00
|
|
|
## CHECK FOR TIDDLER WITH SAME TITTLE IN SECTOR TW
|
2024-01-04 12:17:52 +01:00
|
|
|
rm -f ~/.zen/tmp/${MOATS}/${SECTOR}/TMP.json
|
|
|
|
tiddlywiki --load ${INDEX} --output ~/.zen/tmp/${MOATS}/${SECTOR} --render '.' 'TMP.json' 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' "${title}"
|
2024-01-04 12:44:15 +01:00
|
|
|
ISHERE=$(cat ~/.zen/tmp/${MOATS}/${SECTOR}/TMP.json | jq -r ".[].title")
|
|
|
|
|
2024-01-04 12:27:19 +01:00
|
|
|
[[ ! "${ISHERE}" ]] && echo "No Tiddler found in ${INDEX}"
|
2023-10-18 01:06:29 +02:00
|
|
|
|
2023-10-18 02:24:23 +02:00
|
|
|
if [[ "${ISHERE}" != "${title}" ]]; then
|
2023-10-18 01:06:29 +02:00
|
|
|
|
|
|
|
## NEW TIDDLER
|
|
|
|
echo "Importing Title: $title"
|
2024-01-04 12:17:52 +01:00
|
|
|
cat "${RSS}" | jq -rc ".[] | select(.title == \"$title\")" > ~/.zen/tmp/${MOATS}/${SECTOR}/NEW.json
|
2023-10-18 01:06:29 +02:00
|
|
|
|
2024-01-04 13:07:55 +01:00
|
|
|
#~ echo "DEBUG"
|
2024-01-04 12:56:16 +01:00
|
|
|
#~ cat ~/.zen/tmp/${MOATS}/${SECTOR}/NEW.json | jq
|
2024-01-04 13:07:55 +01:00
|
|
|
#~ echo "tiddlywiki --load ${INDEX} --import ~/.zen/tmp/${MOATS}/${SECTOR}/NEW.json 'application/json' --output ~/.zen/tmp/${MOATS}/${SECTOR} --render '$:/core/save/all' '"${SECTOR}.html"' 'text/plain'"
|
2024-01-04 12:35:40 +01:00
|
|
|
|
2024-01-04 12:44:15 +01:00
|
|
|
tiddlywiki --load ${INDEX} \
|
2024-01-04 12:56:16 +01:00
|
|
|
--import ~/.zen/tmp/${MOATS}/${SECTOR}/NEW.json 'application/json' \
|
|
|
|
--output ~/.zen/tmp/${MOATS}/${SECTOR} --render '$:/core/save/all' "${SECTOR}.html" 'text/plain'
|
2023-10-18 01:06:29 +02:00
|
|
|
|
2024-01-04 12:17:52 +01:00
|
|
|
[[ -s ~/.zen/tmp/${MOATS}/${SECTOR}/${SECTOR}.html ]] \
|
2024-01-04 13:07:55 +01:00
|
|
|
&& rm ${INDEX} \
|
2024-01-04 13:05:31 +01:00
|
|
|
&& mv ~/.zen/tmp/${MOATS}/${SECTOR}/${SECTOR}.html ${INDEX} \
|
|
|
|
&& ((gloops++)) \
|
|
|
|
&& echo "SECTOR (${gloops}) : ${title}"
|
|
|
|
|
|
|
|
[[ ! -s ${INDEX} ]] && echo "ERROR. TW did not ingest ~/.zen/tmp/${MOATS}/${SECTOR}/NEW.json" && exit 1
|
2023-10-18 01:06:29 +02:00
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
## SAME TIDDLER
|
|
|
|
echo "TIDDLER WITH TITLE $title ALREADY EXISTS..."
|
|
|
|
|
2024-01-07 13:30:31 +01:00
|
|
|
cp -f ~/.zen/tmp/${MOATS}/${SECTOR}/TMP.json ~/.zen/tmp/${MOATS}/${SECTOR}/INSIDE.json
|
2023-10-18 01:06:29 +02:00
|
|
|
cat "${RSS}" | jq -rc ".[] | select(.title == \"$title\")" > ~/.zen/tmp/${MOATS}/NEW.json
|
|
|
|
|
2023-12-06 00:50:56 +01:00
|
|
|
if [[ ! $(diff ~/.zen/tmp/${MOATS}/NEW.json ~/.zen/tmp/${MOATS}/INSIDE.json) ]]; then
|
|
|
|
echo "... Tiddlers are similar ..."
|
|
|
|
((floop++))
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
floop=1
|
2023-10-18 01:06:29 +02:00
|
|
|
|
2024-01-03 15:25:27 +01:00
|
|
|
## TODO EXTEND CONTROL TO text & ipfs & _canonical_url
|
2024-01-03 17:46:04 +01:00
|
|
|
## NEED SIGNATURES & TIDDLER SIMILARITY TO COME UP
|
2023-12-30 20:16:39 +01:00
|
|
|
|
2023-10-19 14:14:10 +02:00
|
|
|
## CHECK FOR EMAIL SIGNATURES DIFFERENCE
|
2023-10-18 01:06:29 +02:00
|
|
|
NTAGS=$(cat ~/.zen/tmp/${MOATS}/NEW.json | jq -r .tags)
|
2023-11-24 19:21:13 +01:00
|
|
|
NEMAILS=($(echo "$NTAGS" | grep -E -o "\b[a-zA-Z0-9.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b"))
|
2024-01-14 16:47:30 +01:00
|
|
|
NSIGN=${#NEMAILS[@]}
|
|
|
|
echo "New Tiddler $NSIGN signatures : ${NEMAILS[*]}"
|
2023-10-18 01:06:29 +02:00
|
|
|
|
|
|
|
ITAGS=$(cat ~/.zen/tmp/${MOATS}/INSIDE.json | jq -r .tags)
|
2023-11-24 19:21:13 +01:00
|
|
|
IEMAILS=($(echo "$ITAGS" | grep -E -o "\b[a-zA-Z0-9.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b"))
|
2024-01-14 16:47:30 +01:00
|
|
|
ISIGN=${#IEMAILS[@]}
|
|
|
|
echo "Inside Tiddler $ISIGN signatures : ${IEMAILS[*]}"
|
2023-10-18 01:06:29 +02:00
|
|
|
|
2023-10-26 23:47:06 +02:00
|
|
|
if [[ "${NEMAILS[*]}" != "${IEMAILS[*]}" ]]; then
|
2023-10-18 01:06:29 +02:00
|
|
|
|
2024-01-03 15:25:27 +01:00
|
|
|
## SEARCH FOR DIFFERENCE IN EMAIL SIGNATURES TAGS
|
|
|
|
COMMON=(); NUNIQUE=(); IUNIQUE=()
|
2023-10-18 01:06:29 +02:00
|
|
|
|
|
|
|
# Detect common and unique elements
|
|
|
|
for email in "${NEMAILS[@]}"; do
|
|
|
|
if [[ " ${IEMAILS[*]} " == *" $email "* ]]; then
|
|
|
|
COMMON+=("$email")
|
|
|
|
else
|
|
|
|
NUNIQUE+=("$email")
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
for email in "${IEMAILS[@]}"; do
|
|
|
|
if [[ " ${NEMAILS[*]} " != *" $email "* ]]; then
|
|
|
|
IUNIQUE+=("$email")
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
# Print the results
|
2023-10-26 11:09:19 +02:00
|
|
|
echo "Common email addresses : ${COMMON[*]}"
|
|
|
|
echo "Email addresses unique in NEW Tiddler : ${NUNIQUE[*]}"
|
|
|
|
echo "Email addresses unique in ACTUAL Tiddler : ${IUNIQUE[*]}"
|
2023-10-18 01:06:29 +02:00
|
|
|
|
2023-10-18 03:57:04 +02:00
|
|
|
combined=("${IEMAILS[@]}" "${NEMAILS[@]}")
|
|
|
|
unique_combined=($(echo "${combined[@]}" | tr ' ' '\n' | sort -u))
|
|
|
|
|
2023-10-18 03:50:42 +02:00
|
|
|
NEWTID=$(ipfs add -q ~/.zen/tmp/${MOATS}/NEW.json | tail -n 1)
|
|
|
|
INSIDETID=$(ipfs add -q ~/.zen/tmp/${MOATS}/INSIDE.json | tail -n 1)
|
2023-10-18 03:42:48 +02:00
|
|
|
|
2023-10-18 03:57:04 +02:00
|
|
|
for email in "${unique_combined[@]}"; do
|
2023-10-18 01:06:29 +02:00
|
|
|
|
2024-02-10 22:04:06 +01:00
|
|
|
echo "<html>
|
|
|
|
<head>
|
|
|
|
<style>
|
|
|
|
body {
|
|
|
|
font-family: 'Courier New', monospace;
|
|
|
|
}
|
|
|
|
pre {
|
|
|
|
white-space: pre-wrap;
|
|
|
|
}
|
|
|
|
</style></head>
|
|
|
|
<body>
|
2024-01-04 00:11:50 +01:00
|
|
|
<h1>(ᵔ◡◡ᵔ)</h1>
|
2023-12-01 03:06:35 +01:00
|
|
|
|
|
|
|
Tiddler with same title is existing in ${unique_combined[*]} TW(s)
|
2024-01-03 14:36:53 +01:00
|
|
|
<br>
|
|
|
|
<ul>
|
|
|
|
<li>$title</li>
|
|
|
|
<li><a href='$(myIpfsGw)/ipfs/${INSIDETID}'>Actual Tiddler</a></li>
|
|
|
|
<li><a href='$(myIpfsGw)/ipfs/${NEWTID}'>NEW Tiddler</a> being introduced by : ${NUNIQUE[*]}</li>
|
|
|
|
</ul>
|
|
|
|
<br>
|
|
|
|
To Accept<br>
|
|
|
|
${COMMON[*]} have to copy <a href='$(myIpfsGw)/ipfs/${NEWTID}'>NEW Tiddler</a> in their TW
|
|
|
|
<br><br>
|
|
|
|
To Refuse<br>
|
|
|
|
${NUNIQUE[*]} must fork by deleting or modifying New Tiddler title.
|
|
|
|
<br>
|
|
|
|
<h2><a href='$(myIpfsGw)/ipfs/QmcSkcJ2j7GAsC2XhVqGSNAKVRpXgxfjjvDbhD5YxrncZY/?room=${MOATS}'>Actual Tiddler</a>Engage discussion about it...</a></h2>
|
|
|
|
</body></html>" > ~/.zen/tmp/${MOATS}/g1message
|
2023-10-18 03:42:48 +02:00
|
|
|
|
2024-01-12 16:40:39 +01:00
|
|
|
${MY_PATH}/mailjet.sh "$email" ~/.zen/tmp/${MOATS}/g1message "TIDDLER COLLISION"
|
2023-10-18 01:06:29 +02:00
|
|
|
|
|
|
|
done
|
|
|
|
|
2023-10-26 01:34:32 +02:00
|
|
|
## TITLE FORK TO BE SOLVED. NEED "SAME EMAILS SIGNATURES"
|
2023-10-18 01:06:29 +02:00
|
|
|
continue
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
2023-12-01 03:06:35 +01:00
|
|
|
## CHECK DIFFERENCE
|
|
|
|
DATENEW=$(cat ~/.zen/tmp/${MOATS}/NEW.json | jq -r .modified)
|
|
|
|
TEXTNEW=$(cat ~/.zen/tmp/${MOATS}/NEW.json | jq -r .text)
|
|
|
|
TAGSNEW=$(cat ~/.zen/tmp/${MOATS}/NEW.json | jq -r .tags)
|
|
|
|
DATEINSIDE=$(cat ~/.zen/tmp/${MOATS}/INSIDE.json | jq -r .modified)
|
|
|
|
TEXTINSIDE=$(cat ~/.zen/tmp/${MOATS}/INSIDE.json | jq -r .text)
|
|
|
|
TAGSINSIDE=$(cat ~/.zen/tmp/${MOATS}/INSIDE.json | jq -r .tags)
|
|
|
|
|
|
|
|
TIDLEREMAILSNEW=($(echo "$TAGSNEW" | grep -E -o "\b[a-zA-Z0-9.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b")) ## MUST BE SAME IN BOTH
|
|
|
|
TIDLEREMAILSINSIDE=($(echo "$TAGSINSIDE" | grep -E -o "\b[a-zA-Z0-9.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b")) ## MUST BE SAME IN BOTH
|
|
|
|
# [[ "${TIDLEREMAILSNEW[*]}" == "${TIDLEREMAILSINSIDE[*]}" ]]
|
2023-10-18 01:06:29 +02:00
|
|
|
|
2023-12-01 03:06:35 +01:00
|
|
|
if [ ${DATENEW} -gt ${DATEINSIDE} ]; then
|
2023-10-18 01:06:29 +02:00
|
|
|
|
|
|
|
echo "Newer Tiddler version... Updating TW"
|
|
|
|
|
2023-10-19 14:14:10 +02:00
|
|
|
tiddlywiki --load ${INDEX} \
|
2023-10-18 01:06:29 +02:00
|
|
|
--import ~/.zen/tmp/${MOATS}/NEW.json "application/json" \
|
|
|
|
--output ~/.zen/tmp/${MOATS} --render "$:/core/save/all" "${SECTOR}.html" "text/plain"
|
|
|
|
|
|
|
|
[[ -s ~/.zen/tmp/${MOATS}/${SECTOR}.html ]] \
|
2023-10-19 14:14:10 +02:00
|
|
|
&& rm ${INDEX} \
|
|
|
|
&& mv ~/.zen/tmp/${MOATS}/${SECTOR}.html ${INDEX}
|
2023-10-18 01:06:29 +02:00
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
2024-01-04 12:17:52 +01:00
|
|
|
done < ~/.zen/tmp/${MOATS}/${SECTOR}/tiddlers.list
|
2024-01-03 15:25:27 +01:00
|
|
|
|
2024-01-03 17:46:04 +01:00
|
|
|
|
2024-01-14 16:47:30 +01:00
|
|
|
####################################################
|
2024-01-03 17:46:04 +01:00
|
|
|
################################################
|
|
|
|
## SECTOR SENDS GRATITUDE TO PUBLISHING PLAYER
|
|
|
|
###################################################
|
|
|
|
|
|
|
|
if [[ ${gloups} -gt 0 && ${ASTROG1} ]]; then
|
|
|
|
# GENERATE SECTOR PIVATE KEY ################################
|
|
|
|
${MY_PATH}/../tools/keygen -t duniter -o ~/.zen/tmp/${MOATS}/sector.dunikey "${UPLANETNAME}${SECTOR}" "${UPLANETNAME}${SECTOR}"
|
2024-01-14 16:47:30 +01:00
|
|
|
G1SECTOR=$(cat ~/.zen/tmp/${MOATS}/sector.dunikey | grep 'pub:' | cut -d ' ' -f 2)
|
|
|
|
cp -f ~/.zen/tmp/coucou/${G1SECTOR}.COINS ~/.zen/tmp/${IPFSNODEID}/${SECTOR}.COINS
|
|
|
|
|
2024-01-03 17:46:04 +01:00
|
|
|
##############################################################
|
|
|
|
GRATITUDE=$($MY_PATH/../tools/getcoins_from_gratitude_box.sh)
|
2024-01-07 12:08:02 +01:00
|
|
|
G1AMOUNT=$(echo "$GRATITUDE / 10" | bc -l | xargs printf "%.2f" | sed "s~,~.~g" )
|
2024-01-03 17:46:04 +01:00
|
|
|
echo "***** SECTOR $SECTOR *************************************"
|
2024-01-06 19:18:06 +01:00
|
|
|
echo "GRATITUDE ${GRATITUDE} ZEN = ${G1AMOUNT} G1
|
2024-01-03 17:46:04 +01:00
|
|
|
to ${PLAYER} WALLET ${ASTROG1}"
|
|
|
|
echo "************************************************************"
|
|
|
|
${MY_PATH}/../tools/PAY4SURE.sh ~/.zen/tmp/${MOATS}/sector.dunikey "${G1AMOUNT}" "${ASTROG1}" "THANKS ${gloops} GLOOPS"
|
|
|
|
################################################ GRATITUDE SENT
|
|
|
|
fi
|
|
|
|
|
2024-01-03 15:25:27 +01:00
|
|
|
exit 0
|