2022-04-11 19:34:04 +00:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
instance=$(jj -i config.json instance)
|
2022-04-13 21:07:02 +00:00
|
|
|
alias default_auth_browser=links
|
2022-04-11 19:34:04 +00:00
|
|
|
instance_point="https://$instance/api/v1"
|
2022-04-13 16:30:59 +00:00
|
|
|
instance_point_pleroma="https://$instance/api/pleroma"
|
2022-04-11 19:34:04 +00:00
|
|
|
instance_hist='instance.hist'
|
|
|
|
max_statuses=$(jj -i config.json max_statuses)
|
|
|
|
default_visibility=$(jj -i config.json default_visibility)
|
|
|
|
default_content_type=$(jj -i config.json default_content_type)
|
2022-04-12 18:06:23 +00:00
|
|
|
format_time=$(jj -i config.json format_time)
|
|
|
|
boost_symbol=$(jj -i config.json boost_symbol)
|
2022-04-11 19:34:04 +00:00
|
|
|
|
2022-04-13 12:52:25 +00:00
|
|
|
#[AUTH SECTION]
|
2022-04-11 19:34:04 +00:00
|
|
|
mkdir -m 711 -p .app_sessions
|
|
|
|
touch .auth.json
|
|
|
|
chmod 600 .auth.json
|
|
|
|
auth="$(jj -i .auth.json "$(echo $instance | sed 's/\./\\\./g')")"
|
|
|
|
echo "Instance: $instance"
|
|
|
|
if [ -n "$auth" ]; then
|
|
|
|
default_curl_opt()
|
|
|
|
{
|
2022-04-13 23:51:46 +00:00
|
|
|
curl -s --compressed -H "Authorization: Bearer $auth" "$@"
|
|
|
|
}
|
|
|
|
post_request()
|
|
|
|
{
|
|
|
|
curl -s --compressed -X POST -H "Authorization: Bearer $auth" "$@"
|
2022-04-11 19:34:04 +00:00
|
|
|
}
|
|
|
|
echo '+Authorized account+'
|
|
|
|
else
|
|
|
|
default_curl_opt()
|
|
|
|
{
|
|
|
|
curl -s --compressed $1
|
|
|
|
}
|
|
|
|
echo 'Please make auth and restart'
|
|
|
|
fi
|
|
|
|
|
|
|
|
auth_api_create_client()
|
|
|
|
{
|
2022-04-11 22:27:27 +00:00
|
|
|
if [ ! -e ".app_sessions/$instance" ]; then
|
|
|
|
curl -s --compressed --url $instance_point/apps \
|
|
|
|
--data-urlencode 'client_name=pleroma-cli' \
|
|
|
|
--data-urlencode 'redirect_uris=urn:ietf:wg:oauth:2.0:oob' \
|
|
|
|
--data-urlencode 'scopes=read write follow' \
|
|
|
|
--data-urlencode 'website=https://gitea.phreedom.club/localhost_frssoft/pleroma-cli' \
|
|
|
|
--output .app_sessions/$instance
|
|
|
|
chmod 600 .app_sessions/$instance
|
|
|
|
fi
|
2022-04-11 19:34:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
auth_api_get_code()
|
|
|
|
{
|
|
|
|
auth_api_create_client
|
|
|
|
client_id=$(jj -i .app_sessions/$instance client_id)
|
2022-04-13 21:07:02 +00:00
|
|
|
default_auth_browser "https://$instance/oauth/authorize?client_id=$client_id&response_type=code&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=read+write+follow"
|
2022-04-11 19:34:04 +00:00
|
|
|
echo 'Input token-code:'
|
|
|
|
read pass
|
|
|
|
}
|
|
|
|
|
|
|
|
auth_api_get_token()
|
|
|
|
{
|
|
|
|
auth_api_get_code
|
|
|
|
clear
|
|
|
|
client_id=$(jj -i .app_sessions/$instance client_id)
|
|
|
|
client_secret=$(jj -i .app_sessions/$instance client_secret)
|
|
|
|
token=$(curl -s --compressed --url https://$instance/oauth/token \
|
|
|
|
--data-urlencode 'grant_type=authorization_code' \
|
|
|
|
--data-urlencode "client_id=$client_id" \
|
|
|
|
--data-urlencode "client_secret=$client_secret" \
|
|
|
|
--data-urlencode "redirect_uri=urn:ietf:wg:oauth:2.0:oob" \
|
|
|
|
--data-urlencode 'scope=read write follow' \
|
|
|
|
--data-urlencode "code=$pass" | jj access_token)
|
|
|
|
jj -p -i .auth.json -v "$token" "$(echo $instance | sed 's/\./\\\./g')" -o .auth.json
|
|
|
|
}
|
2022-04-13 12:52:25 +00:00
|
|
|
#[AUTH SECTION END]
|
|
|
|
|
|
|
|
#[MIGRATION SECTION]
|
2022-04-13 17:50:48 +00:00
|
|
|
backup_restore_menu()
|
|
|
|
{
|
|
|
|
clear
|
|
|
|
echo "Backup/Restore menu
|
|
|
|
Backups will be placed to folder backups_$instance
|
|
|
|
Hint:
|
|
|
|
For restore create folder 'restore' and copy 'friends.csv, blocks.csv, mutes.csv' in to folder
|
|
|
|
Note: check selected instance before backup/restore"
|
|
|
|
sub_menu_lvl=1
|
|
|
|
entry1='Backup followings'
|
|
|
|
entry2='Backup blocks'
|
|
|
|
entry3='Backup mutes'
|
|
|
|
entry4='Backup all'
|
|
|
|
entry5='Restore followings'
|
|
|
|
entry6='Restore blocks'
|
|
|
|
entry7='Restore mutes'
|
|
|
|
entry8='Restore all'
|
|
|
|
while [ $sub_menu_lvl -eq 1 ]; do
|
|
|
|
choice=$(echo "Main menu\n$entry1\n$entry2\n$entry3\n$entry4\n$entry5\n$entry6\n$entry7\n$entry8" | fzy)
|
|
|
|
case $choice in
|
|
|
|
"Main menu") sub_menu_lvl=0 ;;
|
|
|
|
"$entry1") follow_api_export ;;
|
|
|
|
"$entry2") blocks_api_export ;;
|
|
|
|
"$entry3") mutes_api_export ;;
|
|
|
|
"$entry4")
|
|
|
|
echo 'Initialized... Please wait...'
|
|
|
|
follow_api_export
|
|
|
|
sleep 3
|
|
|
|
blocks_api_export
|
|
|
|
sleep 3
|
|
|
|
mutes_api_export
|
|
|
|
;;
|
|
|
|
"$entry5") follow_api_import ;;
|
|
|
|
"$entry6") blocks_api_import ;;
|
|
|
|
"$entry7") mutes_api_import ;;
|
|
|
|
"$entry8")
|
|
|
|
echo 'Initialized... Please wait...'
|
|
|
|
follow_api_import
|
|
|
|
sleep 5
|
|
|
|
blocks_api_import
|
|
|
|
sleep 5
|
|
|
|
mutes_api_import
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2022-04-13 12:52:25 +00:00
|
|
|
backup_api_create()
|
|
|
|
{
|
2022-04-13 20:34:03 +00:00
|
|
|
post_request "$instance_point/pleroma/backups"
|
2022-04-13 12:52:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
backup_api_list()
|
|
|
|
{
|
2022-04-13 20:34:03 +00:00
|
|
|
default_curl_opt "$instance_point/pleroma/backups"
|
2022-04-13 12:52:25 +00:00
|
|
|
}
|
|
|
|
|
2022-04-13 22:29:48 +00:00
|
|
|
legacy_addr_preprocess()
|
|
|
|
{
|
|
|
|
sed -E "/^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9.-]+$/! s/$/@$instance/"
|
|
|
|
}
|
|
|
|
|
2022-04-13 16:30:59 +00:00
|
|
|
follow_api_export()
|
|
|
|
{
|
|
|
|
count=40
|
|
|
|
mkdir -m 711 -p backups_$instance
|
|
|
|
account_info=$(account_api_me)
|
|
|
|
acc_id=$(echo $account_info | jj id)
|
|
|
|
acc_following_count=$(echo $account_info | jj following_count)
|
|
|
|
while [ $count -gt 0 ]; do
|
|
|
|
followings=$(followings_api_get $acc_id)
|
|
|
|
count=$(echo $followings | jj \#)
|
2022-04-14 10:48:58 +00:00
|
|
|
if [ $count -eq 0 ]; then
|
|
|
|
echo "$acc_following_count followings exported"
|
|
|
|
elif [ $count -lt 40 ]; then
|
2022-04-13 17:14:22 +00:00
|
|
|
countindex=$(expr $count - 1)
|
2022-04-14 15:42:47 +00:00
|
|
|
echo $followings | jj -l \#.acct | delq | legacy_addr_preprocess >> backups_$instance/friends.csv
|
2022-04-13 17:14:22 +00:00
|
|
|
offset=$(echo $followings | jj $countindex.id)
|
|
|
|
echo "+$count follows"
|
|
|
|
count=0
|
|
|
|
echo "$acc_following_count followings exported"
|
|
|
|
elif [ $count -gt 0 ]; then
|
2022-04-13 16:30:59 +00:00
|
|
|
countindex=$(expr $count - 1)
|
2022-04-14 15:42:47 +00:00
|
|
|
echo $followings | jj -l \#.acct | delq | legacy_addr_preprocess >> backups_$instance/friends.csv
|
2022-04-13 16:30:59 +00:00
|
|
|
offset=$(echo $followings | jj $countindex.id)
|
|
|
|
echo "+$count follows"
|
|
|
|
fi
|
|
|
|
sleep 1
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2022-04-13 17:14:22 +00:00
|
|
|
blocks_api_export()
|
2022-04-13 12:52:25 +00:00
|
|
|
{
|
2022-04-13 17:14:22 +00:00
|
|
|
count=40
|
|
|
|
mkdir -m 711 -p backups_$instance
|
|
|
|
while [ $count -gt 0 ]; do
|
|
|
|
blocks=$(blocks_api_get)
|
|
|
|
count=$(echo $blocks | jj \#)
|
2022-04-14 10:48:58 +00:00
|
|
|
if [ $count -eq 0 ]; then
|
|
|
|
echo "Blocks exported"
|
|
|
|
elif [ $count -lt 40 ]; then
|
2022-04-13 17:14:22 +00:00
|
|
|
countindex=$(expr $count - 1)
|
2022-04-14 15:42:47 +00:00
|
|
|
echo $blocks | jj -l \#.acct | delq | legacy_addr_preprocess >> backups_$instance/blocks.csv
|
2022-04-13 17:14:22 +00:00
|
|
|
offset=$(echo $blocks | jj $countindex.id)
|
|
|
|
echo "+$count blocks"
|
|
|
|
count=0
|
|
|
|
echo "Blocks exported"
|
|
|
|
elif [ $count -gt 0 ]; then
|
2022-04-14 15:42:47 +00:00
|
|
|
echo $blocks | jj -l \#.acct | delq | legacy_addr_preprocess >> backups_$instance/blocks.csv
|
2022-04-13 17:14:22 +00:00
|
|
|
offset=$(echo $blocks | jj $countindex.id)
|
|
|
|
echo "+$count blocks"
|
|
|
|
fi
|
|
|
|
sleep 1
|
|
|
|
done
|
2022-04-13 12:52:25 +00:00
|
|
|
}
|
|
|
|
|
2022-04-13 17:14:22 +00:00
|
|
|
mutes_api_export()
|
2022-04-13 12:52:25 +00:00
|
|
|
{
|
2022-04-13 17:14:22 +00:00
|
|
|
count=40
|
|
|
|
mkdir -m 711 -p backups_$instance
|
|
|
|
while [ $count -gt 0 ]; do
|
|
|
|
mutes=$(mutes_api_get)
|
|
|
|
count=$(echo $mutes | jj \#)
|
2022-04-14 10:48:58 +00:00
|
|
|
if [ $count -eq 0 ]; then
|
|
|
|
echo "Mutes exported"
|
|
|
|
elif [ $count -lt 40 ]; then
|
2022-04-13 17:14:22 +00:00
|
|
|
countindex=$(expr $count - 1)
|
2022-04-14 15:42:47 +00:00
|
|
|
echo $mutes | jj -l \#.acct | delq | legacy_addr_preprocess >> backups_$instance/mutes.csv
|
2022-04-13 17:14:22 +00:00
|
|
|
offset=$(echo $mutes | jj $countindex.id)
|
|
|
|
echo "+$count mutes"
|
|
|
|
count=0
|
|
|
|
echo "Mutes exported"
|
|
|
|
elif [ $count -gt 0 ]; then
|
2022-04-14 15:42:47 +00:00
|
|
|
echo $mutes | jj -l \#.acct | delq| legacy_addr_preprocess >> backups_$instance/mutes.csv
|
2022-04-13 17:14:22 +00:00
|
|
|
offset=$(echo $mutes | jj $countindex.id)
|
|
|
|
echo "+$count mutes"
|
|
|
|
fi
|
|
|
|
sleep 1
|
|
|
|
done
|
2022-04-13 12:52:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
follow_api_import()
|
|
|
|
{
|
2022-04-13 20:34:03 +00:00
|
|
|
post_request "$instance_point_pleroma/follow_import" \
|
2022-04-13 16:30:59 +00:00
|
|
|
--data 'list=@restore/friends.csv'
|
2022-04-13 12:52:25 +00:00
|
|
|
}
|
2022-04-13 17:14:22 +00:00
|
|
|
|
|
|
|
blocks_api_import()
|
|
|
|
{
|
2022-04-13 20:34:03 +00:00
|
|
|
post_request "$instance_point_pleroma/blocks_import" \
|
2022-04-13 17:14:22 +00:00
|
|
|
--data 'list=@restore/blocks.csv'
|
|
|
|
}
|
|
|
|
|
|
|
|
mutes_api_import()
|
|
|
|
{
|
2022-04-13 20:34:03 +00:00
|
|
|
post_request "$instance_point_pleroma/mutes_import" \
|
2022-04-13 17:14:22 +00:00
|
|
|
--data 'list=@restore/mutes.csv'
|
|
|
|
}
|
2022-04-13 12:52:25 +00:00
|
|
|
#[MIGRATION SECTION END]
|
|
|
|
|
2022-04-13 16:30:59 +00:00
|
|
|
account_api_me()
|
|
|
|
{
|
|
|
|
default_curl_opt $instance_point/accounts/verify_credentials
|
|
|
|
}
|
|
|
|
|
2022-04-13 12:52:25 +00:00
|
|
|
followings_api_get()
|
|
|
|
{
|
2022-04-13 16:30:59 +00:00
|
|
|
default_curl_opt "$instance_point/accounts/$1/following?limit=40&max_id=$offset"
|
2022-04-13 12:52:25 +00:00
|
|
|
}
|
2022-04-11 19:34:04 +00:00
|
|
|
|
2022-04-13 17:14:22 +00:00
|
|
|
blocks_api_get()
|
|
|
|
{
|
|
|
|
default_curl_opt "$instance_point/blocks?limit=40&max_id=$offset"
|
|
|
|
}
|
|
|
|
|
|
|
|
mutes_api_get()
|
|
|
|
{
|
|
|
|
default_curl_opt "$instance_point/mutes?limit=40&max_id=$offset"
|
|
|
|
}
|
|
|
|
|
2022-04-12 23:15:25 +00:00
|
|
|
thread_api_statuses()
|
|
|
|
{
|
|
|
|
default_curl_opt "$instance_point/statuses/$1/context"
|
|
|
|
}
|
|
|
|
|
2022-04-14 15:42:47 +00:00
|
|
|
html_to_txt_render()
|
|
|
|
{
|
|
|
|
sed -e "s/<br[^>]*>/\n/g ; s/<p[^>]*>/\n/g ; s/<[^>]*>//g ; s/>*/>/g ; s/<*/</g ; s/"/\"/g ; s/'/'/g"
|
|
|
|
}
|
|
|
|
|
|
|
|
delq()
|
|
|
|
{
|
|
|
|
sed 's/"//g'
|
|
|
|
}
|
|
|
|
|
|
|
|
delqse()
|
|
|
|
{
|
|
|
|
sed 's/^"//g; s/"$//g'
|
|
|
|
}
|
|
|
|
|
2022-04-12 23:15:25 +00:00
|
|
|
thread_menu()
|
|
|
|
{
|
|
|
|
sub_menu_lvl=2
|
|
|
|
jsonthread=$(thread_api_statuses $1)
|
|
|
|
ancestors=$(echo $jsonthread | jj ancestors)
|
|
|
|
descendants=$(echo $jsonthread | jj descendants)
|
|
|
|
if [ '[]' != "$ancestors" ] && [ '[]' != "$descendants" ]; then
|
|
|
|
jsonthread=$(echo "$ancestors""$descendants")
|
|
|
|
elif [ '[]' != "$ancestors" ]; then
|
|
|
|
jsonthread="$ancestors"
|
|
|
|
else
|
|
|
|
jsonthread="$descendants"
|
|
|
|
fi
|
|
|
|
indexator=$(expr $(echo $jsonthread | jj \#) - 1)
|
|
|
|
counter=0
|
|
|
|
while [ $sub_menu_lvl -eq 2 ]; do
|
|
|
|
clear
|
|
|
|
echo '[Thread]'
|
|
|
|
while [ ! $indexator -eq $counter ]; do
|
|
|
|
status=$(echo $jsonthread | jj $counter)
|
|
|
|
uri=$(echo $status | jj uri)
|
|
|
|
id_status=$(echo $status | jj id)
|
|
|
|
dateutc=$(echo $status | jj created_at)
|
|
|
|
reply_to_id=$(echo $status | jj in_reply_to_id)
|
|
|
|
echo "$(date -d $dateutc "$format_time") <$id_status> $uri"
|
|
|
|
if [ -n "$reply_to_id" ]; then
|
|
|
|
echo "Reply to: $reply_to_id"
|
|
|
|
fi
|
2022-04-14 15:42:47 +00:00
|
|
|
echo "$status" | jj -r content | delqse | html_to_txt_render
|
|
|
|
attachments=$(echo $status | jj -l media_attachments.#.remote_url | delq)
|
2022-04-12 23:15:25 +00:00
|
|
|
if [ -n "$attachments" ]; then
|
|
|
|
echo "#EXTINF:-1, $uri" >> attachments.m3u8
|
|
|
|
echo "$attachments" >> attachments.m3u8
|
|
|
|
fi
|
|
|
|
counter=$(expr $counter + 1)
|
|
|
|
echo '_____'
|
|
|
|
done
|
|
|
|
menuthread=$(echo 'Back' | fzy)
|
|
|
|
case "$menuthread" in
|
|
|
|
"Back")
|
|
|
|
sub_menu_lvl=1 ;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2022-04-11 19:34:04 +00:00
|
|
|
timeline_api()
|
|
|
|
{
|
2022-04-14 11:05:47 +00:00
|
|
|
default_curl_opt "$instance_point/$timeline?limit=$max_statuses&max_id=$1&min_id=$2" | tee preload
|
2022-04-11 19:34:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
timeline_menu()
|
|
|
|
{
|
|
|
|
json=$(timeline_api)
|
|
|
|
indexator=$(expr $max_statuses - 1)
|
|
|
|
sub_menu_lvl=1
|
|
|
|
echo '#EXTM3U' > attachments.m3u8
|
|
|
|
while [ $sub_menu_lvl -eq 1 ]; do
|
|
|
|
|
|
|
|
while [ $indexator -gt 0 ]; do
|
2022-04-14 15:42:47 +00:00
|
|
|
status=$(echo "$json" | jj $indexator)
|
2022-04-12 18:06:23 +00:00
|
|
|
reblog=$(echo $status | jj reblog)
|
2022-04-11 19:34:04 +00:00
|
|
|
uri=$(echo $status | jj uri)
|
2022-04-11 22:02:16 +00:00
|
|
|
id_status=$(echo $status | jj id)
|
2022-04-11 19:34:04 +00:00
|
|
|
dateutc=$(echo $status | jj created_at)
|
2022-04-12 18:06:23 +00:00
|
|
|
reply_to_id=$(echo $status | jj in_reply_to_id)
|
2022-04-12 14:27:36 +00:00
|
|
|
echo "$(date -d $dateutc "$format_time") <$id_status> $uri"
|
2022-04-12 18:06:23 +00:00
|
|
|
if [ -n "$reply_to_id" ]; then
|
|
|
|
echo "Reply to: $reply_to_id"
|
|
|
|
fi
|
|
|
|
if [ -n "$reblog" ]; then
|
|
|
|
echo "$boost_symbol"
|
|
|
|
fi
|
2022-04-14 15:42:47 +00:00
|
|
|
spoiler_text=$(echo "$status" | jj spoiler_text)
|
|
|
|
if [ -n "$spoiler_text" ]; then
|
|
|
|
echo "#[$spoiler_text]"
|
|
|
|
fi
|
|
|
|
echo "$status" | jj -r content | delqse | html_to_txt_render
|
2022-04-11 19:34:04 +00:00
|
|
|
attachments=$(echo $status | jj -l media_attachments.#.remote_url | sed 's/"//g')
|
|
|
|
if [ -n "$attachments" ]; then
|
|
|
|
echo "#EXTINF:-1, $uri" >> attachments.m3u8
|
|
|
|
echo "$attachments" >> attachments.m3u8
|
|
|
|
fi
|
|
|
|
indexator=$(expr $indexator - 1)
|
|
|
|
echo '_____'
|
|
|
|
done
|
2022-04-14 14:26:06 +00:00
|
|
|
menu=$(echo 'Prev\nNext\nReply\nShare\nFavorite\nThread\nMain menu' | fzy)
|
2022-04-11 19:34:04 +00:00
|
|
|
case $menu in
|
|
|
|
"Prev")
|
2022-04-11 22:05:58 +00:00
|
|
|
indexator=$(expr $max_statuses - 1)
|
2022-04-11 19:34:04 +00:00
|
|
|
echo '#EXTM3U' > attachments.m3u8
|
|
|
|
clear
|
|
|
|
offset=$(jj -i preload 39.id)
|
|
|
|
json=$(timeline_api $offset)
|
|
|
|
;;
|
|
|
|
"Next")
|
2022-04-11 22:05:58 +00:00
|
|
|
indexator=$(expr $max_statuses - 1)
|
2022-04-11 19:34:04 +00:00
|
|
|
echo '#EXTM3U' > attachments.m3u8
|
|
|
|
clear
|
|
|
|
offset=$(jj -i preload 0.id)
|
2022-04-14 11:05:47 +00:00
|
|
|
json=$(timeline_api '' $offset)
|
2022-04-11 19:34:04 +00:00
|
|
|
;;
|
2022-04-13 10:50:56 +00:00
|
|
|
"Reply")
|
|
|
|
echo 'Input id'
|
|
|
|
read status_id
|
|
|
|
write_status_menu $status_id
|
2022-04-14 10:08:43 +00:00
|
|
|
indexator=$(expr $max_statuses - 1)
|
2022-04-13 10:50:56 +00:00
|
|
|
;;
|
2022-04-11 22:02:16 +00:00
|
|
|
"Share")
|
|
|
|
echo 'Input id (s - stop)'
|
|
|
|
sharemode=1
|
|
|
|
while [ $sharemode -eq 1 ]; do
|
|
|
|
read status_id
|
|
|
|
if [ "$status_id" = 's' ]; then
|
|
|
|
sharemode=0
|
|
|
|
else
|
2022-04-12 17:26:15 +00:00
|
|
|
share_api_status $status_id
|
2022-04-11 22:02:16 +00:00
|
|
|
echo $http_code
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
;;
|
2022-04-14 14:26:06 +00:00
|
|
|
"Favorite")
|
|
|
|
echo 'Input id (s - stop)'
|
|
|
|
favoritemode=1
|
|
|
|
while [ $favoritemode -eq 1 ]; do
|
|
|
|
read status_id
|
|
|
|
if [ "$status_id" = 's' ]; then
|
|
|
|
favoritemode=0
|
|
|
|
else
|
|
|
|
favorite_api_status $status_id
|
|
|
|
echo $http_code
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
;;
|
2022-04-12 23:15:25 +00:00
|
|
|
"Thread")
|
|
|
|
indexator=$(expr $max_statuses - 1)
|
|
|
|
echo 'Input id'
|
|
|
|
read status_id
|
|
|
|
thread_menu $status_id
|
|
|
|
;;
|
2022-04-11 19:34:04 +00:00
|
|
|
"Main menu")
|
|
|
|
sub_menu_lvl=0 ;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2022-04-11 22:02:16 +00:00
|
|
|
share_api_status()
|
|
|
|
{
|
2022-04-13 20:34:03 +00:00
|
|
|
post_request -w "%{http_code}" --url $instance_point/statuses/$1/reblog --output /dev/null
|
2022-04-11 22:02:16 +00:00
|
|
|
}
|
|
|
|
|
2022-04-14 14:26:06 +00:00
|
|
|
favorite_api_status()
|
|
|
|
{
|
|
|
|
post_request -w "%{http_code}" --url $instance_point/statuses/$1/favourite --output /dev/null
|
|
|
|
}
|
|
|
|
|
2022-04-11 19:34:04 +00:00
|
|
|
write_api_status()
|
|
|
|
{
|
2022-04-13 20:34:03 +00:00
|
|
|
if [ -n "$mediaattach" ]; then
|
|
|
|
media=$(upload_api_media | jj id)
|
|
|
|
post_request -w "%{http_code}" --url $instance_point/statuses \
|
|
|
|
--data-urlencode "status=$1" \
|
|
|
|
--data-urlencode "content_type=$content_type" \
|
|
|
|
--data-urlencode "visibility=$status_visibility" \
|
|
|
|
--data-urlencode "in_reply_to_id=$replyto" \
|
|
|
|
--data-urlencode "media_ids[]=$media" \
|
|
|
|
--output /dev/null
|
|
|
|
echo $http_code
|
|
|
|
else
|
|
|
|
post_request -w "%{http_code}" --url $instance_point/statuses \
|
|
|
|
--data-urlencode "status=$1" \
|
|
|
|
--data-urlencode "content_type=$content_type" \
|
|
|
|
--data-urlencode "visibility=$status_visibility" \
|
|
|
|
--data-urlencode "in_reply_to_id=$replyto" \
|
|
|
|
--output /dev/null
|
|
|
|
echo $http_code
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
upload_api_media()
|
|
|
|
{
|
|
|
|
post_request --url $instance_point/media \
|
|
|
|
--form "file=$mediaattach"
|
2022-04-11 19:34:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
write_status_menu()
|
|
|
|
{
|
|
|
|
touch tmp_status.md
|
|
|
|
content_type="$default_content_type"
|
|
|
|
status_visibility="$default_visibility"
|
2022-04-13 10:50:56 +00:00
|
|
|
replyto=$1
|
2022-04-13 20:34:03 +00:00
|
|
|
mediaattach=
|
2022-04-13 22:45:02 +00:00
|
|
|
http_code=
|
2022-04-14 10:08:43 +00:00
|
|
|
if [ -n "$sub_menu_lvl" ]; then
|
|
|
|
sub_menu_lvl=2
|
|
|
|
level=2
|
|
|
|
else
|
|
|
|
sub_menu_lvl=1
|
|
|
|
level=1
|
|
|
|
fi
|
|
|
|
while [ $sub_menu_lvl -eq $level ]; do
|
2022-04-11 19:34:04 +00:00
|
|
|
clear
|
|
|
|
echo 'Status:'
|
|
|
|
cat tmp_status.md
|
|
|
|
echo '\==========/'
|
|
|
|
echo "Chars: $(cat tmp_status.md | wc -m)"
|
|
|
|
echo "Visiblity: $status_visibility"
|
|
|
|
echo "Content type: $content_type"
|
2022-04-13 10:50:56 +00:00
|
|
|
if [ -n "$replyto" ]; then
|
|
|
|
echo "Reply to: $replyto"
|
|
|
|
fi
|
2022-04-13 20:34:03 +00:00
|
|
|
if [ -n "$mediaattach" ]; then
|
|
|
|
echo "Attachments: $mediaattach"
|
|
|
|
fi
|
2022-04-13 22:45:02 +00:00
|
|
|
if [ -n "$http_code" ]; then
|
2022-04-13 20:34:03 +00:00
|
|
|
echo "Send state: $http_code"
|
|
|
|
fi
|
2022-04-14 10:08:43 +00:00
|
|
|
wrirepostmenu=$(echo "Write\nSend\nAdd attach\nChange type\nVisiblity\nBack\nMain menu" | fzy)
|
2022-04-11 19:34:04 +00:00
|
|
|
case $wrirepostmenu in
|
|
|
|
"Write") echo > tmp_status.md; $EDITOR tmp_status.md ;;
|
2022-04-13 20:34:03 +00:00
|
|
|
"Send") http_code=$(write_api_status "$(cat tmp_status.md)") ;;
|
|
|
|
"Add attach")
|
|
|
|
echo 'Input path to attach (ex. @image.png or @/full/path/to/attach.png)'
|
|
|
|
read mediaattach
|
|
|
|
;;
|
2022-04-11 19:34:04 +00:00
|
|
|
"Change type") content_type=$(echo 'text/plain\ntext/markdown\ntext/html' | fzy) ;;
|
|
|
|
"Visiblity")
|
|
|
|
status_visibility=$(echo 'public\nunlisted\nlocal\nprivate\ndirect\nlist' | fzy)
|
|
|
|
;;
|
2022-04-14 10:08:43 +00:00
|
|
|
"Back") sub_menu_lvl=$(expr $level - 1) ;;
|
2022-04-11 19:34:04 +00:00
|
|
|
"Main menu") sub_menu_lvl=0 ;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2022-04-12 14:27:36 +00:00
|
|
|
notif_menu()
|
|
|
|
{
|
|
|
|
sub_menu_lvl=1
|
|
|
|
clrnotif='Clear all notifications'
|
|
|
|
json=$(notif_api_get_all)
|
|
|
|
while [ $sub_menu_lvl -eq 1 ]; do
|
|
|
|
clear
|
|
|
|
echo "Notifications: $(echo $json | jj \#)"
|
|
|
|
for i in $(echo $json | jj -l \#.id); do
|
|
|
|
date_utc=$(echo $json | jj \#[id=$i].created_at)
|
|
|
|
date -d "$date_utc" "$format_time"
|
|
|
|
acct=$(echo $json | jj \#[id=$i].account.acct)
|
|
|
|
typenotif=$(echo $json | jj \#[id=$i].type)
|
|
|
|
echo "$typenotif <- $acct"
|
|
|
|
echo $json | jj \#[id=$i].status.pleroma.content.text/plain
|
|
|
|
echo '___'
|
|
|
|
done
|
|
|
|
menu_choice=$(echo "Main menu\nRefresh\n$clrnotif" | fzy)
|
|
|
|
case "$menu_choice" in
|
|
|
|
"Main menu") sub_menu_lvl=0 ;;
|
|
|
|
"Refresh") json=$(notif_api_get_all) ;;
|
|
|
|
"$clrnotif") notif_api_remove_all && json=$(notif_api_get_all) ;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2022-04-11 19:34:04 +00:00
|
|
|
notif_api_get_all()
|
|
|
|
{
|
|
|
|
default_curl_opt "$instance_point/notifications" | jj -p
|
|
|
|
}
|
|
|
|
|
|
|
|
notif_api_remove_all()
|
|
|
|
{
|
2022-04-13 20:34:03 +00:00
|
|
|
post_request --url $instance_point/notifications/clear
|
2022-04-11 19:34:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
menu_write_status='Write status'
|
|
|
|
menu_timeline='Timelines'
|
2022-04-12 14:27:36 +00:00
|
|
|
notif='Notifications'
|
2022-04-11 19:34:04 +00:00
|
|
|
authmake='Auth'
|
2022-04-13 17:50:48 +00:00
|
|
|
backup_restore='Backup/Restore'
|
2022-04-11 19:34:04 +00:00
|
|
|
switchinstance='Switch instance'
|
|
|
|
Exit='Exit'
|
|
|
|
|
|
|
|
while true; do
|
|
|
|
if [ -n "$auth" ]; then
|
2022-04-13 17:50:48 +00:00
|
|
|
main_menu=$(echo "$menu_write_status\n$menu_timeline\n$notif\n$backup_restore\n$switchinstance\n$Exit" | fzy)
|
2022-04-11 19:34:04 +00:00
|
|
|
else
|
2022-04-14 09:15:55 +00:00
|
|
|
main_menu=$(echo "$authmake\n$menu_timeline\n$switchinstance\n$Exit" | fzy)
|
2022-04-11 19:34:04 +00:00
|
|
|
fi
|
|
|
|
case $main_menu in
|
|
|
|
"$menu_write_status") write_status_menu ;;
|
|
|
|
"$menu_timeline")
|
|
|
|
timeline=$(echo 'timelines/home\nfavourites\ntimelines/direct\ntimelines/public' | fzy)
|
|
|
|
timeline_menu
|
|
|
|
;;
|
2022-04-12 14:27:36 +00:00
|
|
|
"$notif") notif_menu ;;
|
2022-04-11 19:34:04 +00:00
|
|
|
"$clrnotif") notif_api_remove_all ;;
|
2022-04-13 17:50:48 +00:00
|
|
|
"$backup_restore") backup_restore_menu ;;
|
2022-04-11 19:34:04 +00:00
|
|
|
"$switchinstance")
|
|
|
|
empty=0
|
|
|
|
case $(echo 'Recently used\nChoice from list\nManual input' | fzy) in
|
|
|
|
"Recently used")
|
|
|
|
if [ -s $instance_hist ]; then
|
|
|
|
touch $instance_hist && instance=$(cat $instance_hist | fzy)
|
|
|
|
else
|
|
|
|
echo 'No recently used instances...'
|
|
|
|
empty=1
|
|
|
|
fi ;;
|
|
|
|
|
|
|
|
"Choice from list") instance=$(jj -l -i config.json public_list_instances | sed 's/"//g' | fzy) ;;
|
|
|
|
|
|
|
|
"Manual input") echo "Type instance (ex. $instance):" && read instance ;;
|
|
|
|
esac
|
|
|
|
if [ $empty -eq 0 ]; then
|
|
|
|
echo $instance >> $instance_hist
|
|
|
|
cat $instance_hist | sort | uniq | tee $instance_hist 1>>/dev/null
|
|
|
|
export instance
|
|
|
|
export instance_point="https://$instance/api/v1"
|
|
|
|
conf_instance_state=$(echo 'Permanent\nTemporaly' | fzy)
|
|
|
|
if [ "$conf_instance_state" = 'Permanent' ]; then
|
|
|
|
jj -i config.json instance -v $instance -o config.json
|
|
|
|
else
|
|
|
|
echo ''
|
|
|
|
fi
|
|
|
|
clear
|
|
|
|
auth="$(jj -i .auth.json "$(echo $instance | sed 's/\./\\\./g')")"
|
|
|
|
echo "Instance: $instance"
|
|
|
|
if [ -n "$auth" ]; then
|
|
|
|
default_curl_opt()
|
|
|
|
{
|
2022-04-13 23:51:46 +00:00
|
|
|
curl -s --compressed -H "Authorization: Bearer $auth" "$@"
|
|
|
|
}
|
|
|
|
post_request()
|
|
|
|
{
|
|
|
|
curl -s --compressed -X POST -H "Authorization: Bearer $auth" "$@"
|
2022-04-11 19:34:04 +00:00
|
|
|
}
|
|
|
|
echo '+Authorized account+'
|
|
|
|
else
|
|
|
|
default_curl_opt()
|
|
|
|
{
|
|
|
|
curl -s --compressed $1
|
|
|
|
}
|
|
|
|
echo 'Please make auth and restart'
|
|
|
|
fi
|
|
|
|
fi ;;
|
|
|
|
"$authmake") auth_api_get_token ;;
|
|
|
|
"$Exit") exit 0 ;;
|
|
|
|
esac
|
|
|
|
done
|