2022-04-11 19:34:04 +00:00
|
|
|
#!/bin/sh
|
|
|
|
|
2022-08-06 13:00:46 +00:00
|
|
|
if [ -z "$instance" ]; then
|
|
|
|
instance=$(jj -i config.json instance)
|
|
|
|
fi
|
2022-04-13 21:07:02 +00:00
|
|
|
alias default_auth_browser=links
|
2022-04-29 17:18:27 +00:00
|
|
|
|
2022-08-05 11:49:48 +00:00
|
|
|
export main_basedir=$(dirname $0)
|
|
|
|
|
2022-04-29 17:18:27 +00:00
|
|
|
proxy_init()
|
|
|
|
{
|
2022-05-03 17:47:15 +00:00
|
|
|
main_proxy=$(jj -i config.json main_proxy)
|
|
|
|
if [ -n "$main_proxy" ]; then
|
|
|
|
default_connect_protocol=$(jj -i config.json connect_protocol_via_main_proxy)
|
|
|
|
ALL_PROXY="$main_proxy"
|
|
|
|
elif [ $(echo "$instance" | grep -q 'i2p$' ; echo $?) -eq 0 ]; then
|
2022-04-29 17:18:27 +00:00
|
|
|
default_connect_protocol='http'
|
2022-05-03 17:47:15 +00:00
|
|
|
ALL_PROXY=$(jj -i config.json i2p_http_proxy_addr)
|
2022-04-29 17:18:27 +00:00
|
|
|
elif [ $(echo "$instance" | grep -q 'onion$'; echo $?) -eq 0 ]; then
|
|
|
|
default_connect_protocol='https'
|
2022-05-03 17:47:15 +00:00
|
|
|
ALL_PROXY=$(jj -i config.json tor_proxy_addr)
|
2022-04-29 17:18:27 +00:00
|
|
|
else
|
|
|
|
default_connect_protocol='https'
|
2022-05-03 17:47:15 +00:00
|
|
|
ALL_PROXY=''
|
2022-04-29 17:18:27 +00:00
|
|
|
fi
|
|
|
|
export default_connect_protocol
|
2022-05-03 17:47:15 +00:00
|
|
|
export ALL_PROXY
|
2022-04-29 17:18:27 +00:00
|
|
|
}
|
2022-04-29 20:00:35 +00:00
|
|
|
proxy_init
|
|
|
|
|
2022-04-29 16:38:52 +00:00
|
|
|
instance_point="$default_connect_protocol://$instance/api/v1"
|
|
|
|
instance_point_pleroma="$default_connect_protocol://$instance/api/pleroma"
|
2022-04-11 19:34:04 +00:00
|
|
|
instance_hist='instance.hist'
|
2022-04-15 12:03:35 +00:00
|
|
|
enabled_nsfw=$(jj -i config.json enabled_nsfw)
|
2022-05-04 19:20:40 +00:00
|
|
|
nsfw_only=$(jj -i config.json nsfw_only)
|
2022-04-19 07:49:53 +00:00
|
|
|
hide_reblogs=$(jj -i config.json hide_reblogs)
|
2022-04-11 19:34:04 +00:00
|
|
|
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-15 17:05:15 +00:00
|
|
|
statuses_separator=$(jj -i config.json statuses_separator)
|
2022-04-14 23:02:55 +00:00
|
|
|
reversed_statuses=$(jj -i config.json reversed_statuses)
|
2022-04-15 07:53:57 +00:00
|
|
|
quoting_reply=$(jj -i config.json quoting_reply)
|
2022-04-17 00:06:20 +00:00
|
|
|
copy_mentions=$(jj -i config.json copy_mentions)
|
2022-04-18 20:54:01 +00:00
|
|
|
per_status_mode=$(jj -i config.json per_status_mode)
|
2022-05-06 15:40:56 +00:00
|
|
|
default_media_player=$(jj -i config.json default_media_player)
|
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
|
2022-04-29 17:18:27 +00:00
|
|
|
|
|
|
|
make_login()
|
|
|
|
{
|
|
|
|
auth="$(jj -i .auth.json "$(echo "$instance" | sed 's/\./\\\./g')")"
|
|
|
|
echo "Instance: $instance"
|
|
|
|
if [ -n "$auth" ]; then
|
|
|
|
default_curl_opt()
|
|
|
|
{
|
2022-05-03 17:47:15 +00:00
|
|
|
curl -s --compressed -H "Authorization: Bearer $auth" "$@"
|
2022-04-29 17:18:27 +00:00
|
|
|
}
|
|
|
|
post_request()
|
|
|
|
{
|
2022-05-03 17:47:15 +00:00
|
|
|
curl -s --compressed -X POST -H "Authorization: Bearer $auth" "$@"
|
2022-04-29 17:18:27 +00:00
|
|
|
}
|
2022-08-02 17:26:40 +00:00
|
|
|
put_request()
|
|
|
|
{
|
|
|
|
curl -s --compressed -X PUT -H "Authorization: Bearer $auth" "$@"
|
|
|
|
}
|
2022-08-02 21:12:14 +00:00
|
|
|
delete_request()
|
|
|
|
{
|
|
|
|
curl -s --compressed -X DELETE -H "Authorization: Bearer $auth" "$@"
|
|
|
|
}
|
2022-04-29 17:18:27 +00:00
|
|
|
echo '+Authorized account+'
|
|
|
|
export default_curl_opt
|
|
|
|
export post_request
|
2022-08-02 17:26:40 +00:00
|
|
|
export put_request
|
2022-08-02 21:12:14 +00:00
|
|
|
export delete_request
|
2022-04-29 17:18:27 +00:00
|
|
|
else
|
|
|
|
default_curl_opt()
|
|
|
|
{
|
2022-05-03 17:47:15 +00:00
|
|
|
curl -s --compressed "$1"
|
2022-04-29 17:18:27 +00:00
|
|
|
}
|
|
|
|
export default_curl_opt
|
|
|
|
export post_request=
|
|
|
|
echo 'Please make auth and restart'
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
make_login
|
2022-04-11 19:34:04 +00:00
|
|
|
|
|
|
|
auth_api_create_client()
|
|
|
|
{
|
2022-04-11 22:27:27 +00:00
|
|
|
if [ ! -e ".app_sessions/$instance" ]; then
|
2022-04-18 06:43:25 +00:00
|
|
|
curl -s --compressed --url "$instance_point/apps" \
|
2022-04-11 22:27:27 +00:00
|
|
|
--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' \
|
2022-04-18 06:43:25 +00:00
|
|
|
--output ".app_sessions/$instance" \
|
|
|
|
--create-file-mode 0600
|
2022-04-11 22:27:27 +00:00
|
|
|
fi
|
2022-04-11 19:34:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
auth_api_get_code()
|
|
|
|
{
|
|
|
|
auth_api_create_client
|
2022-04-18 06:43:25 +00:00
|
|
|
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
|
2022-04-18 06:43:25 +00:00
|
|
|
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" \
|
2022-04-11 19:34:04 +00:00
|
|
|
--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)
|
2022-04-18 06:43:25 +00:00
|
|
|
jj -p -i .auth.json -v "$token" "$(echo "$instance" | sed 's/\./\\\./g')" -o .auth.json
|
2022-04-11 19:34:04 +00:00
|
|
|
}
|
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-05-10 21:12:49 +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
|
2022-04-18 06:43:25 +00:00
|
|
|
mkdir -m 711 -p backups_"$instance"
|
2022-04-13 16:30:59 +00:00
|
|
|
account_info=$(account_api_me)
|
2022-04-18 06:43:25 +00:00
|
|
|
acc_id=$(echo "$account_info" | jj id)
|
|
|
|
acc_following_count=$(echo "$account_info" | jj following_count)
|
2022-04-13 16:30:59 +00:00
|
|
|
while [ $count -gt 0 ]; do
|
2022-04-18 06:43:25 +00:00
|
|
|
followings=$(followings_api_get "$acc_id")
|
|
|
|
count=$(echo "$followings" | jj \#)
|
|
|
|
if [ "$count" -eq 0 ]; then
|
2022-04-14 10:48:58 +00:00
|
|
|
echo "$acc_following_count followings exported"
|
2022-04-18 06:43:25 +00:00
|
|
|
elif [ "$count" -lt 40 ]; then
|
|
|
|
countindex=$(expr "$count" - 1)
|
|
|
|
echo "$followings" | jj -l \#.acct | delq | legacy_addr_preprocess >> "backups_$instance"/friends.csv
|
|
|
|
offset=$(echo "$followings" | jj "$countindex".id)
|
2022-04-13 17:14:22 +00:00
|
|
|
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-18 06:43:25 +00:00
|
|
|
echo "$followings" | jj -l \#.acct | delq | legacy_addr_preprocess >> "backups_$instance"/friends.csv
|
|
|
|
offset=$(echo "$followings" | jj "$countindex".id)
|
2022-04-13 16:30:59 +00:00
|
|
|
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
|
2022-04-18 06:43:25 +00:00
|
|
|
mkdir -m 711 -p "backups_$instance"
|
2022-04-13 17:14:22 +00:00
|
|
|
while [ $count -gt 0 ]; do
|
|
|
|
blocks=$(blocks_api_get)
|
2022-04-18 06:43:25 +00:00
|
|
|
count=$(echo "$blocks" | jj \#)
|
|
|
|
if [ "$count" -eq 0 ]; then
|
2022-04-14 10:48:58 +00:00
|
|
|
echo "Blocks exported"
|
2022-04-18 06:43:25 +00:00
|
|
|
elif [ "$count" -lt 40 ]; then
|
|
|
|
countindex=$(expr "$count" - 1)
|
|
|
|
echo "$blocks" | jj -l \#.acct | delq | legacy_addr_preprocess >> "backups_$instance"/blocks.csv
|
|
|
|
offset=$(echo "$blocks" | jj "$countindex".id)
|
2022-04-13 17:14:22 +00:00
|
|
|
echo "+$count blocks"
|
|
|
|
count=0
|
|
|
|
echo "Blocks exported"
|
|
|
|
elif [ $count -gt 0 ]; then
|
2022-04-18 06:43:25 +00:00
|
|
|
echo "$blocks" | jj -l \#.acct | delq | legacy_addr_preprocess >> "backups_$instance"/blocks.csv
|
|
|
|
offset=$(echo "$blocks" | jj "$countindex".id)
|
2022-04-13 17:14:22 +00:00
|
|
|
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
|
2022-04-18 06:43:25 +00:00
|
|
|
mkdir -m 711 -p "backups_$instance"
|
2022-04-13 17:14:22 +00:00
|
|
|
while [ $count -gt 0 ]; do
|
|
|
|
mutes=$(mutes_api_get)
|
2022-04-18 06:43:25 +00:00
|
|
|
count=$(echo "$mutes" | jj \#)
|
|
|
|
if [ "$count" -eq 0 ]; then
|
2022-04-14 10:48:58 +00:00
|
|
|
echo "Mutes exported"
|
2022-04-18 06:43:25 +00:00
|
|
|
elif [ "$count" -lt 40 ]; then
|
|
|
|
countindex=$(expr "$count" - 1)
|
|
|
|
echo "$mutes" | jj -l \#.acct | delq | legacy_addr_preprocess >> "backups_$instance"/mutes.csv
|
|
|
|
offset=$(echo "$mutes" | jj "$countindex".id)
|
2022-04-13 17:14:22 +00:00
|
|
|
echo "+$count mutes"
|
|
|
|
count=0
|
|
|
|
echo "Mutes exported"
|
|
|
|
elif [ $count -gt 0 ]; then
|
2022-04-18 06:43:25 +00:00
|
|
|
echo "$mutes" | jj -l \#.acct | delq| legacy_addr_preprocess >> "backups_$instance"/mutes.csv
|
|
|
|
offset=$(echo "$mutes" | jj "$countindex".id)
|
2022-04-13 17:14:22 +00:00
|
|
|
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-05-06 09:42:23 +00:00
|
|
|
--form '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-05-06 09:42:23 +00:00
|
|
|
--form 'list=@restore/blocks.csv'
|
2022-04-13 17:14:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
mutes_api_import()
|
|
|
|
{
|
2022-04-13 20:34:03 +00:00
|
|
|
post_request "$instance_point_pleroma/mutes_import" \
|
2022-05-06 09:42:23 +00:00
|
|
|
--form 'list=@restore/mutes.csv'
|
2022-04-13 17:14:22 +00:00
|
|
|
}
|
2022-04-13 12:52:25 +00:00
|
|
|
#[MIGRATION SECTION END]
|
|
|
|
|
2022-04-13 16:30:59 +00:00
|
|
|
account_api_me()
|
|
|
|
{
|
2022-04-18 06:43:25 +00:00
|
|
|
default_curl_opt "$instance_point/accounts/verify_credentials"
|
2022-04-13 16:30:59 +00:00
|
|
|
}
|
|
|
|
|
2022-08-02 21:12:14 +00:00
|
|
|
me_acct=$(account_api_me | jj acct)
|
|
|
|
|
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-14 19:14:43 +00:00
|
|
|
followings_menu()
|
|
|
|
{
|
|
|
|
account_info=$(account_api_me)
|
2022-04-18 06:43:25 +00:00
|
|
|
acc_id=$(echo "$account_info" | jj id)
|
|
|
|
acc_following_count=$(echo "$account_info" | jj following_count)
|
2022-04-14 19:14:43 +00:00
|
|
|
echo "Followers: $acc_following_count"
|
|
|
|
sub_menu_lvl=1
|
|
|
|
while [ $sub_menu_lvl -eq 1 ]; do
|
2022-04-18 06:43:25 +00:00
|
|
|
followings=$(followings_api_get "$acc_id")
|
|
|
|
accts=$(echo "$followings" | jj -l \#.acct | nl -s: -v0 -w1)
|
2022-04-14 19:14:43 +00:00
|
|
|
|
|
|
|
choice=$(echo "Main menu\n$accts\nNext" | fzy)
|
|
|
|
case $choice in
|
|
|
|
"Main menu") sub_menu_lvl=0 ;;
|
2022-04-18 06:43:25 +00:00
|
|
|
"Next") offset=$(echo "$followings" | jj $(expr $(echo "$followings" | jj \#) - 1).id) ;;
|
2022-04-14 19:14:43 +00:00
|
|
|
*)
|
2022-05-06 13:15:55 +00:00
|
|
|
index=$(echo "$choice" | cut -f 1 -d:)
|
|
|
|
case "$1" in
|
|
|
|
'Remove following') unfollow_account "$(echo "$followings" | jj "$index".id)" ;;
|
|
|
|
'') statuses_view_menu "$(echo "$followings" | jj "$index".acct)" ;;
|
|
|
|
esac
|
|
|
|
;;
|
2022-04-14 19:14:43 +00:00
|
|
|
esac
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2022-04-20 10:21:39 +00:00
|
|
|
following_requests()
|
|
|
|
{
|
2022-04-21 22:56:10 +00:00
|
|
|
default_curl_opt "$instance_point/follow_requests"
|
|
|
|
}
|
|
|
|
|
|
|
|
accept_follow_request()
|
|
|
|
{
|
2022-04-22 08:31:56 +00:00
|
|
|
post_request "$instance_point/follow_requests/$1/authorize"
|
2022-04-21 22:56:10 +00:00
|
|
|
}
|
|
|
|
|
2022-04-22 07:23:07 +00:00
|
|
|
reject_follow_request()
|
2022-04-21 22:56:10 +00:00
|
|
|
{
|
2022-04-22 06:11:32 +00:00
|
|
|
post_request "$instance_point/follow_requests/$1/reject"
|
2022-04-21 22:56:10 +00:00
|
|
|
}
|
|
|
|
|
2022-05-06 13:15:55 +00:00
|
|
|
follow_account()
|
|
|
|
{
|
|
|
|
acct_id=$(account_api_get "$1" | jj id)
|
|
|
|
post_request "$instance_point/accounts/$acct_id/follow"
|
|
|
|
}
|
|
|
|
|
|
|
|
unfollow_account()
|
|
|
|
{
|
|
|
|
post_request "$instance_point/accounts/$1/unfollow"
|
|
|
|
}
|
|
|
|
|
2022-04-21 22:56:10 +00:00
|
|
|
menu_follow_requests()
|
|
|
|
{
|
|
|
|
follow_req=$(following_requests)
|
|
|
|
count=$(echo "$follow_req" | jj \#)
|
|
|
|
ids=$(echo "$follow_req" | jj -l \#.id | delq)
|
|
|
|
clear
|
|
|
|
echo "Follow requests: $count"
|
2022-04-22 08:31:56 +00:00
|
|
|
for id in $ids; do
|
|
|
|
whoacct=$(echo "$follow_req" | jj "#[id=$id].acct")
|
|
|
|
datecreate=$(echo "$follow_req" | jj "#[id=$id].created_at")
|
|
|
|
acct_display=$(echo "$follow_req" | jj "#[id=$id].display_name")
|
|
|
|
acct_bot=$(echo "$follow_req" | jj "#[id=$id].bot")
|
|
|
|
note=$(echo "$follow_req" | jj "#[id=$id].note" | html_to_txt_render)
|
2022-04-21 22:56:10 +00:00
|
|
|
|
|
|
|
echo "$acct_display $whoacct"
|
|
|
|
echo "Account creation date: $(date -d "$datecreate" "$format_time")"
|
|
|
|
echo "Bot: $acct_bot"
|
|
|
|
echo "Note:\n $note"
|
2022-04-22 07:23:07 +00:00
|
|
|
nonexit=1
|
|
|
|
while [ "$nonexit" -eq 1 ]; do
|
|
|
|
choice=$(echo 'Accept\nReject\nShow statuses\nNothing' | fzy)
|
|
|
|
case "$choice" in
|
2022-04-22 08:31:56 +00:00
|
|
|
"Accept") accept_follow_request "$id" && nonexit=0 ;;
|
|
|
|
"Reject") reject_follow_request "$id" && nonexit=0 ;;
|
2022-04-22 07:23:07 +00:00
|
|
|
"Show statuses") statuses_view_menu "$whoacct" ;;
|
|
|
|
"Nothing") nonexit=0 ;;
|
|
|
|
esac
|
|
|
|
done
|
2022-04-21 22:56:10 +00:00
|
|
|
clear
|
|
|
|
|
|
|
|
done
|
2022-04-20 10:21:39 +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"
|
|
|
|
}
|
|
|
|
|
2022-05-08 17:40:18 +00:00
|
|
|
find_pgp_message()
|
|
|
|
{
|
|
|
|
awk '/-----BEGIN PGP MESSAGE-----/,/-----END PGP MESSAGE----/'
|
|
|
|
}
|
|
|
|
|
2022-04-14 15:42:47 +00:00
|
|
|
delq()
|
|
|
|
{
|
|
|
|
sed 's/"//g'
|
|
|
|
}
|
|
|
|
|
|
|
|
delqse()
|
|
|
|
{
|
|
|
|
sed 's/^"//g; s/"$//g'
|
|
|
|
}
|
|
|
|
|
2022-05-06 13:15:55 +00:00
|
|
|
account_api_get()
|
|
|
|
{
|
|
|
|
default_curl_opt "$instance_point/accounts/$1"
|
|
|
|
}
|
|
|
|
|
2022-04-14 19:14:43 +00:00
|
|
|
statuses_api_account()
|
|
|
|
{
|
2022-04-15 15:52:28 +00:00
|
|
|
default_curl_opt "$instance_point/accounts/$1/statuses?limit=$max_statuses&max_id=$2&min_id=$3"
|
2022-04-15 07:53:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
status_api_one()
|
|
|
|
{
|
|
|
|
default_curl_opt "$instance_point/statuses/$1"
|
2022-04-14 19:14:43 +00:00
|
|
|
}
|
|
|
|
|
2022-04-15 15:52:28 +00:00
|
|
|
statuses_view_menu()
|
|
|
|
{
|
|
|
|
sub_menu_lvl=2
|
2022-04-18 06:43:25 +00:00
|
|
|
json=$(statuses_api_account "$1")
|
2022-04-15 15:52:28 +00:00
|
|
|
while [ $sub_menu_lvl -eq 2 ]; do
|
|
|
|
clear
|
|
|
|
echo "[Statuses $1]"
|
2022-04-18 06:43:25 +00:00
|
|
|
ids_massive=$(echo "$json" | jj -l \#.id | delq)
|
2022-04-15 15:52:28 +00:00
|
|
|
jsonmassive=$json
|
|
|
|
statuses_render
|
2022-07-19 08:39:29 +00:00
|
|
|
menustatuses=$(echo 'Prev\nNext\nReverse\nReply\nShare\nFavorite\nShare and favorite\nThread\nBack' | fzy)
|
2022-04-15 15:52:28 +00:00
|
|
|
case "$menustatuses" in
|
|
|
|
"Back") sub_menu_lvl=1 ;;
|
|
|
|
"Prev")
|
2022-04-18 06:43:25 +00:00
|
|
|
indexator=$(expr $(echo "$json" | jj \#) - 1)
|
2022-04-15 15:52:28 +00:00
|
|
|
echo '#EXTM3U' > attachments.m3u8
|
|
|
|
clear
|
2022-04-18 06:43:25 +00:00
|
|
|
offset=$(echo "$json" | jj "$indexator".id)
|
|
|
|
json=$(statuses_api_account "$1" "$offset")
|
2022-04-15 15:52:28 +00:00
|
|
|
;;
|
|
|
|
"Next")
|
|
|
|
echo '#EXTM3U' > attachments.m3u8
|
|
|
|
clear
|
2022-04-18 06:43:25 +00:00
|
|
|
offset=$(echo "$json" | jj 0.id)
|
|
|
|
json=$(statuses_api_account "$1" '' "$offset")
|
2022-04-15 15:52:28 +00:00
|
|
|
;;
|
2022-07-19 08:39:29 +00:00
|
|
|
"Reverse")
|
|
|
|
offset=1
|
|
|
|
json=$(statuses_api_account "$1" '' "$offset")
|
|
|
|
;;
|
2022-04-15 15:52:28 +00:00
|
|
|
"Reply") reply_mode ;;
|
|
|
|
"Share") share_mode ;;
|
|
|
|
"Favorite") favourite_mode ;;
|
2022-04-16 10:39:07 +00:00
|
|
|
"Share and favorite") share_and_favorite_mode ;;
|
2022-04-15 15:52:28 +00:00
|
|
|
"Thread") thread_open ;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2022-04-12 23:15:25 +00:00
|
|
|
|
2022-04-11 19:34:04 +00:00
|
|
|
timeline_api()
|
|
|
|
{
|
2022-05-10 21:12:49 +00:00
|
|
|
timelines_params="limit=$max_statuses&max_id=$1&min_id=$2"
|
2022-04-16 11:41:00 +00:00
|
|
|
case "$timeline" in
|
2022-05-10 21:12:49 +00:00
|
|
|
"home") default_curl_opt "$instance_point/timelines/home?$timelines_params" ;;
|
|
|
|
"home/local") default_curl_opt "$instance_point/timelines/home?local=true&$timelines_params" ;;
|
|
|
|
"favourites") default_curl_opt "$instance_point/favourites?$timelines_params" ;;
|
|
|
|
"bookmarks") default_curl_opt "$instance_point/bookmarks?$timelines_params" ;;
|
|
|
|
"direct") default_curl_opt "$instance_point/timelines/direct?$timelines_params" ;;
|
|
|
|
"public") default_curl_opt "$instance_point/timelines/public?$timelines_params" ;;
|
|
|
|
"local") default_curl_opt "$instance_point/timelines/public?local=true&$timelines_params" ;;
|
2022-05-25 16:12:17 +00:00
|
|
|
"search") echo "$results" ;;
|
2022-04-16 11:41:00 +00:00
|
|
|
esac
|
2022-04-11 19:34:04 +00:00
|
|
|
}
|
|
|
|
|
2022-05-25 16:12:17 +00:00
|
|
|
search_api_statuses()
|
|
|
|
{
|
|
|
|
echo "Input query:"
|
|
|
|
read query
|
2022-06-20 09:11:03 +00:00
|
|
|
results=$(default_curl_opt --get \
|
|
|
|
--data-urlencode "q=$query" \
|
|
|
|
--data-urlencode 'type=statuses' \
|
|
|
|
--data-urlencode "limit=$max_statuses" \
|
|
|
|
"$instance_point/search" | jj 'statuses')
|
2022-05-25 16:12:17 +00:00
|
|
|
timeline='search' timeline_menu
|
|
|
|
}
|
|
|
|
|
2022-04-15 15:52:28 +00:00
|
|
|
reply_mode()
|
|
|
|
{
|
2022-04-18 20:54:01 +00:00
|
|
|
if [ -n "$1" ]; then
|
|
|
|
reply_status=$(status_api_one "$1")
|
|
|
|
else
|
|
|
|
echo 'Input id'
|
|
|
|
read status_id
|
|
|
|
reply_status=$(status_api_one "$status_id")
|
|
|
|
fi
|
2022-08-04 00:15:40 +00:00
|
|
|
if [ "$quoting_reply" = 'true' ]; then
|
2022-04-26 11:57:12 +00:00
|
|
|
echo "$reply_status" | jj -r content | html_to_txt_render | delqse | sed 's/^/> /' > tmp_status.md
|
2022-08-04 00:15:40 +00:00
|
|
|
fi
|
|
|
|
if [ "$2" = '1' ]; then
|
2022-08-02 21:12:14 +00:00
|
|
|
echo "$reply_status" | jj -r content | html_to_txt_render | delqse > tmp_status.md
|
2022-04-15 15:52:28 +00:00
|
|
|
fi
|
2022-04-17 00:06:20 +00:00
|
|
|
if [ "$copy_mentions" = 'true' ]; then
|
2022-05-09 14:56:06 +00:00
|
|
|
mentions_reply=$(echo "$reply_status" | jj -l 'mentions.#.acct' | delq)
|
2022-04-19 11:47:53 +00:00
|
|
|
mentions_reply="$mentions_reply\n"
|
2022-05-09 14:56:06 +00:00
|
|
|
acct_selfstatus=$(echo "$reply_status" | jj account.acct)
|
2022-04-19 11:47:53 +00:00
|
|
|
mentions_reply=$(echo "$mentions_reply""$acct_selfstatus" | sort -u | tr '\n' ',' | sed -e 's/,$//g; s/^,//g')
|
2022-04-17 00:06:20 +00:00
|
|
|
fi
|
2022-04-18 20:54:01 +00:00
|
|
|
write_status_menu "$(echo "$reply_status" | jj id)"
|
2022-04-15 15:52:28 +00:00
|
|
|
}
|
|
|
|
|
2022-04-16 10:39:07 +00:00
|
|
|
share_and_favorite_mode()
|
|
|
|
{
|
2022-04-18 20:54:01 +00:00
|
|
|
if [ -n "$1" ]; then
|
|
|
|
share_api_status "$1"
|
|
|
|
echo "$http_code"
|
|
|
|
favorite_api_status "$1"
|
|
|
|
echo "$http_code"
|
|
|
|
else
|
|
|
|
echo 'Input id (s - stop)'
|
|
|
|
shareandfavmode=1
|
|
|
|
while [ $shareandfavmode -eq 1 ]; do
|
|
|
|
read status_id
|
|
|
|
if [ "$status_id" = 's' ]; then
|
|
|
|
shareandfavmode=0
|
|
|
|
else
|
|
|
|
share_api_status "$status_id"
|
|
|
|
echo "$http_code"
|
|
|
|
favorite_api_status "$status_id"
|
|
|
|
echo "$http_code"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
fi
|
2022-04-16 10:39:07 +00:00
|
|
|
}
|
|
|
|
|
2022-04-11 22:02:16 +00:00
|
|
|
share_api_status()
|
|
|
|
{
|
2022-04-18 06:43:25 +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-15 15:52:28 +00:00
|
|
|
share_mode()
|
|
|
|
{
|
|
|
|
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-18 06:43:25 +00:00
|
|
|
share_api_status "$status_id"
|
|
|
|
echo "$http_code"
|
2022-04-15 15:52:28 +00:00
|
|
|
fi
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2022-04-14 14:26:06 +00:00
|
|
|
favorite_api_status()
|
|
|
|
{
|
2022-04-18 06:43:25 +00:00
|
|
|
post_request -w "%{http_code}" --url "$instance_point/statuses/$1/favourite" --output /dev/null
|
2022-04-14 14:26:06 +00:00
|
|
|
}
|
|
|
|
|
2022-04-15 15:52:28 +00:00
|
|
|
favourite_mode()
|
|
|
|
{
|
|
|
|
echo 'Input id (s - stop)'
|
|
|
|
favoritemode=1
|
|
|
|
while [ $favoritemode -eq 1 ]; do
|
|
|
|
read status_id
|
|
|
|
if [ "$status_id" = 's' ]; then
|
|
|
|
favoritemode=0
|
|
|
|
else
|
2022-04-18 06:43:25 +00:00
|
|
|
favorite_api_status "$status_id"
|
|
|
|
echo "$http_code"
|
2022-04-15 15:52:28 +00:00
|
|
|
fi
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2022-05-05 21:23:16 +00:00
|
|
|
bookmark_api_status()
|
|
|
|
{
|
|
|
|
mkdir -p -m 711 bookmarks/"$instance"
|
|
|
|
post_request "$instance_point/statuses/$1/bookmark" | jj -p -o "bookmarks/$instance/$1"
|
|
|
|
chmod 600 "bookmarks/$instance/$1"
|
|
|
|
}
|
|
|
|
|
2022-08-02 21:12:14 +00:00
|
|
|
delete_api_status()
|
|
|
|
{
|
|
|
|
remove_status=$(delete_request "$instance_point/statuses/$1" | jj id)
|
|
|
|
if [ -n "$remove_status" ]; then
|
|
|
|
echo "SUCCESS"
|
|
|
|
sleep 1
|
|
|
|
else
|
|
|
|
echo "Failed"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2022-04-11 19:34:04 +00:00
|
|
|
write_api_status()
|
|
|
|
{
|
2022-04-13 20:34:03 +00:00
|
|
|
if [ -n "$mediaattach" ]; then
|
2022-08-06 10:53:24 +00:00
|
|
|
media=$mediaattach
|
2022-05-08 15:24:53 +00:00
|
|
|
post_request --url "$instance_point"/statuses \
|
|
|
|
--data-urlencode "status@$1" \
|
|
|
|
--data-raw "content_type=$content_type" \
|
|
|
|
--data-raw "visibility=$status_visibility" \
|
|
|
|
--data-raw "in_reply_to_id=$replyto" \
|
|
|
|
--data-raw "media_ids[]=$media" \
|
|
|
|
--data-raw "to[]=$mentions_reply"
|
2022-04-13 20:34:03 +00:00
|
|
|
else
|
2022-05-08 15:24:53 +00:00
|
|
|
post_request --url "$instance_point"/statuses \
|
|
|
|
--data-urlencode "status@$1" \
|
|
|
|
--data-raw "content_type=$content_type" \
|
|
|
|
--data-raw "visibility=$status_visibility" \
|
|
|
|
--data-raw "in_reply_to_id=$replyto" \
|
|
|
|
--data-raw "to[]=$mentions_reply"
|
2022-04-13 20:34:03 +00:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2022-08-02 21:12:14 +00:00
|
|
|
edit_api_status()
|
|
|
|
{
|
|
|
|
put_request --url "$instance_point"/statuses/$1 \
|
|
|
|
--data-urlencode "status@$2"
|
|
|
|
}
|
|
|
|
|
2022-04-13 20:34:03 +00:00
|
|
|
upload_api_media()
|
|
|
|
{
|
2022-04-18 06:43:25 +00:00
|
|
|
post_request --url "$instance_point"/media \
|
2022-08-06 10:53:24 +00:00
|
|
|
--form "file=$1"
|
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-05-08 15:24:53 +00:00
|
|
|
status_data_send=
|
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-17 00:06:20 +00:00
|
|
|
if [ -n "$mentions_reply" ]; then
|
|
|
|
echo "Mentions: $mentions_reply"
|
|
|
|
fi
|
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-05-08 15:24:53 +00:00
|
|
|
if [ -n "$(echo "$status_data_send" | jj id)" ]; then
|
|
|
|
echo 'Send state: OK'
|
|
|
|
elif [ -n "$(echo "$status_data_send" | jj error)" ]; then
|
|
|
|
echo "Send state: ERR: $(echo "$status_data_send" | jj error)"
|
2022-04-13 20:34:03 +00:00
|
|
|
fi
|
2022-08-02 21:12:14 +00:00
|
|
|
wrirepostmenu=$(echo "Edit\nSend\nSend-edited\nAdd attach\nAdd recipient\nChange type\nVisiblity\nReset\nBack\nMain menu" | fzy)
|
2022-04-11 19:34:04 +00:00
|
|
|
case $wrirepostmenu in
|
2022-04-15 07:53:57 +00:00
|
|
|
"Edit") $EDITOR tmp_status.md ;;
|
2022-05-08 15:24:53 +00:00
|
|
|
"Send") status_data_send=$(write_api_status tmp_status.md) ;;
|
2022-08-02 21:12:14 +00:00
|
|
|
"Send-edited") status_data_send=$(edit_api_status $replyto tmp_status.md) ;;
|
2022-04-13 20:34:03 +00:00
|
|
|
"Add attach")
|
2022-05-10 21:12:49 +00:00
|
|
|
echo 'Input path to attach (ex. @image.png or @/full/path/to/attach.png)'
|
|
|
|
read mediaattach
|
|
|
|
;;
|
2022-04-26 11:57:12 +00:00
|
|
|
"Add recipient")
|
2022-05-10 21:12:49 +00:00
|
|
|
echo 'Input addr (ex. nick,nick_etc@domain.domain)'
|
|
|
|
read mentions_reply
|
|
|
|
;;
|
2022-04-11 19:34:04 +00:00
|
|
|
"Change type") content_type=$(echo 'text/plain\ntext/markdown\ntext/html' | fzy) ;;
|
|
|
|
"Visiblity")
|
2022-05-10 21:12:49 +00:00
|
|
|
status_visibility=$(echo 'public\nunlisted\nlocal\nprivate\ndirect\nlist' | fzy)
|
|
|
|
;;
|
2022-04-17 00:06:20 +00:00
|
|
|
"Reset")
|
2022-05-10 21:12:49 +00:00
|
|
|
echo > tmp_status.md
|
|
|
|
mentions_reply=
|
|
|
|
;;
|
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
|
2022-04-18 06:43:25 +00:00
|
|
|
count_new_notif=$(echo "$json" | jj -l '#[pleroma.is_seen=false]#.pleroma.is_seen' | wc -w)
|
2022-04-17 19:23:18 +00:00
|
|
|
echo "New notifications: $count_new_notif"
|
2022-04-18 06:43:25 +00:00
|
|
|
for i in $(echo "$json" | jj -l \#.id); do
|
|
|
|
date_utc=$(echo "$json" | jj \#[id="$i"].created_at)
|
2022-04-12 14:27:36 +00:00
|
|
|
date -d "$date_utc" "$format_time"
|
2022-04-18 06:43:25 +00:00
|
|
|
acct=$(echo "$json" | jj \#[id="$i"].account.acct)
|
|
|
|
status_id=$(echo "$json" | jj \#[id="$i"].status.id)
|
|
|
|
typenotif=$(echo "$json" | jj \#[id="$i"].type)
|
2022-04-17 19:23:18 +00:00
|
|
|
echo "<$status_id> $typenotif <- $acct"
|
2022-04-18 06:43:25 +00:00
|
|
|
echo "$json" | jj -r \#[id="$i"].status.content | delqse | html_to_txt_render
|
2022-04-12 14:27:36 +00:00
|
|
|
echo '___'
|
|
|
|
done
|
2022-04-17 19:23:18 +00:00
|
|
|
menu_choice=$(echo "Main menu\nRead\nRefresh\n$clrnotif" | fzy)
|
2022-04-12 14:27:36 +00:00
|
|
|
case "$menu_choice" in
|
|
|
|
"Main menu") sub_menu_lvl=0 ;;
|
2022-04-17 19:23:18 +00:00
|
|
|
"Read")
|
2022-05-10 21:12:49 +00:00
|
|
|
notif_api_read "$(echo "$json" | jj 0.id)"
|
|
|
|
json=$(notif_api_get_all)
|
|
|
|
;;
|
2022-04-12 14:27:36 +00:00
|
|
|
"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()
|
|
|
|
{
|
2022-04-17 19:23:18 +00:00
|
|
|
default_curl_opt "$instance_point/notifications?limit=$max_statuses" | jj -p
|
|
|
|
}
|
|
|
|
|
|
|
|
notif_api_read()
|
|
|
|
{
|
|
|
|
post_request --url "$instance_point/pleroma/notifications/read" \
|
|
|
|
--data-urlencode "max_id=$1" \
|
|
|
|
--output /dev/null
|
2022-04-11 19:34:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
notif_api_remove_all()
|
|
|
|
{
|
2022-04-18 06:43:25 +00:00
|
|
|
post_request --url "$instance_point"/notifications/clear
|
2022-04-11 19:34:04 +00:00
|
|
|
}
|
|
|
|
|
2022-08-02 14:45:08 +00:00
|
|
|
custom_manual_api_request()
|
|
|
|
{
|
|
|
|
while true; do
|
|
|
|
echo 'Select request method:'
|
2022-08-02 17:26:40 +00:00
|
|
|
method=$(echo 'get\npost\nput' | fzy)
|
2022-08-02 14:45:08 +00:00
|
|
|
echo 'Input api request: api/v1/...'
|
|
|
|
case $method in
|
|
|
|
'get')
|
|
|
|
read raw_api
|
|
|
|
default_curl_opt "https://$instance/$raw_api" | jj -p
|
|
|
|
;;
|
|
|
|
'post')
|
|
|
|
read raw_api
|
2022-08-02 17:26:40 +00:00
|
|
|
echo 'input curl data flags: --data-urlencode "example=example"'
|
|
|
|
read flags
|
|
|
|
post_request $flags --url "https://$instance/$raw_api" | jj -p
|
|
|
|
;;
|
|
|
|
'put')
|
|
|
|
read raw_api
|
|
|
|
echo 'input curl data flags: --data-urlencode "example=example"'
|
|
|
|
read flags
|
|
|
|
put_request $flags --url "https://$instance/$raw_api" | jj -p
|
2022-08-02 14:45:08 +00:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
echo "Done, exit? (y/N)"
|
|
|
|
read yn
|
|
|
|
if [ "$yn" = 'y' ]; then
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2022-08-05 21:41:28 +00:00
|
|
|
statuses_auto_update()
|
|
|
|
{
|
|
|
|
while true; do
|
|
|
|
echo "Updating statuses..."
|
2022-08-07 05:05:50 +00:00
|
|
|
for i in home local; do
|
2022-08-06 13:00:46 +00:00
|
|
|
echo "checking timeline $i"
|
|
|
|
timeline="$i"
|
|
|
|
export instance timeline
|
|
|
|
timeline_api | ./utils/statuses2files.sh
|
|
|
|
sleep 3
|
|
|
|
done
|
|
|
|
echo "Sleeping..."
|
2022-08-07 12:04:15 +00:00
|
|
|
./utils/statuses_archiver.sh
|
2022-08-05 21:41:28 +00:00
|
|
|
sleep 30
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
if [ "$daemon_mode" = 'yes' ]; then
|
2022-08-05 20:58:57 +00:00
|
|
|
echo "Daemon mode started; files listening..."
|
2022-08-05 21:41:28 +00:00
|
|
|
statuses_auto_update &
|
2022-08-05 20:58:57 +00:00
|
|
|
while true; do
|
|
|
|
sleep 5
|
2022-08-07 17:35:08 +00:00
|
|
|
for file_func in favourite share reply threadopen prev; do
|
2022-08-06 08:42:39 +00:00
|
|
|
statuses_file_action=$(/bin/ls $main_basedir/all_statuses/$instance/*/$file_func 2>/dev/null)
|
|
|
|
if [ -n "$statuses_file_action" ]; then
|
|
|
|
dir_status=$(dirname "$statuses_file_action")
|
|
|
|
if [ -f "$dir_status/reblog.id" ]; then
|
|
|
|
status_id=$(cat $dir_status/reblog.id)
|
|
|
|
else
|
|
|
|
status_id=$(echo $dir_status | sed 's/.*\///g')
|
|
|
|
fi
|
|
|
|
|
|
|
|
case $file_func in
|
|
|
|
'favourite') favorite_api_status "$status_id" ; rm "$statuses_file_action" ;;
|
|
|
|
'share') share_api_status $status_id ; rm "$statuses_file_action" ;;
|
2022-08-06 10:11:42 +00:00
|
|
|
'reply')
|
|
|
|
replyto=$status_id
|
2022-08-06 10:53:24 +00:00
|
|
|
if [ -d "$dir_status/attachments" ]; then
|
|
|
|
attach_id=''
|
|
|
|
echo "Uploading attachments..."
|
|
|
|
for attach in "$dir_status"/attachments/*; do
|
|
|
|
attach_id=$(upload_api_media "@$attach" | jj id)
|
|
|
|
attach_id="${attach_id},"
|
|
|
|
echo $attach_id
|
|
|
|
done
|
|
|
|
mediaattach=$(echo $attach_id | sed 's/,$//g')
|
|
|
|
echo $mediaattach
|
|
|
|
fi
|
|
|
|
|
2022-08-06 10:11:42 +00:00
|
|
|
write_api_status $dir_status/message
|
|
|
|
rm "$statuses_file_action"
|
|
|
|
;;
|
2022-08-07 15:31:39 +00:00
|
|
|
'threadopen')
|
|
|
|
export path_to_status_id="$status_id"
|
|
|
|
export instance
|
|
|
|
thread_api_statuses "$status_id" | ./utils/thread_statuses.sh
|
|
|
|
rm "$statuses_file_action"
|
|
|
|
;;
|
2022-08-07 17:35:08 +00:00
|
|
|
'prev')
|
|
|
|
timeline="$(cat "$statuses_file_action" | tr -d '\n')"
|
|
|
|
export instance timeline
|
|
|
|
timeline_api "$status_id" | ./utils/statuses2files.sh
|
|
|
|
rm "$statuses_file_action"
|
|
|
|
;;
|
2022-08-06 08:42:39 +00:00
|
|
|
esac
|
|
|
|
fi
|
2022-08-06 13:00:46 +00:00
|
|
|
write_status_action=$(/bin/ls $main_basedir/all_statuses/$instance/create 2>/dev/null)
|
|
|
|
if [ -n "$write_status_action" ]; then
|
|
|
|
dir_write_status=$(dirname "$write_status_action")
|
2022-08-06 16:17:12 +00:00
|
|
|
if [ -d "$dir_write_status/attachments" ]; then
|
2022-08-06 13:00:46 +00:00
|
|
|
attach_id=''
|
|
|
|
echo "Uploading attachments..."
|
|
|
|
for attach in "$dir_write_status"/attachments/*; do
|
|
|
|
attach_id=$(upload_api_media "@$attach" | jj id)
|
|
|
|
attach_id="${attach_id},"
|
|
|
|
echo $attach_id
|
|
|
|
done
|
|
|
|
mediaattach=$(echo $attach_id | sed 's/,$//g')
|
|
|
|
echo $mediaattach
|
|
|
|
fi
|
|
|
|
write_api_status $dir_write_status/message
|
|
|
|
rm $write_status_action
|
|
|
|
fi
|
2022-08-06 08:42:39 +00:00
|
|
|
done
|
2022-08-05 20:58:57 +00:00
|
|
|
done
|
|
|
|
fi
|
2022-08-05 21:41:28 +00:00
|
|
|
|
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-05-05 21:41:58 +00:00
|
|
|
my_account='Account'
|
2022-05-06 13:15:55 +00:00
|
|
|
followingsmenu='Followings'
|
|
|
|
followrequests='Follow requests'
|
|
|
|
backup_restore='Backup/Restore'
|
|
|
|
manage_followings='Manage followings'
|
2022-05-25 16:12:17 +00:00
|
|
|
search_menu='Search'
|
2022-08-02 14:45:08 +00:00
|
|
|
custom_request='Make custom api request'
|
2022-04-11 19:34:04 +00:00
|
|
|
authmake='Auth'
|
|
|
|
switchinstance='Switch instance'
|
|
|
|
Exit='Exit'
|
|
|
|
|
|
|
|
while true; do
|
2022-05-06 09:09:04 +00:00
|
|
|
if [ -n "$auth" ]; then
|
2022-08-02 14:45:08 +00:00
|
|
|
main_menu=$(echo "$menu_write_status\n$menu_timeline\n$notif\n$my_account\n$search_menu\n$custom_request\n$switchinstance\n$Exit" | fzy)
|
2022-05-06 09:09:04 +00:00
|
|
|
else
|
|
|
|
main_menu=$(echo "$authmake\n$menu_timeline\n$switchinstance\n$Exit" | fzy)
|
|
|
|
fi
|
|
|
|
case $main_menu in
|
|
|
|
"$menu_write_status") write_status_menu ;;
|
|
|
|
"$menu_timeline")
|
|
|
|
timeline=$(echo 'home\nhome/local\nfavourites\nbookmarks\ndirect\nlocal\npublic' | fzy)
|
|
|
|
timeline_menu
|
|
|
|
;;
|
|
|
|
"$notif") notif_menu ;;
|
|
|
|
"$my_account")
|
2022-05-06 13:15:55 +00:00
|
|
|
my_account_menu=$(echo "$followingsmenu\n$followrequests\n$manage_followings\n$backup_restore" | fzy)
|
2022-05-06 09:09:04 +00:00
|
|
|
case $my_account_menu in
|
|
|
|
"$followingsmenu") followings_menu ;;
|
|
|
|
"$followrequests") menu_follow_requests ;;
|
2022-05-06 13:15:55 +00:00
|
|
|
"$manage_followings")
|
|
|
|
action_manage=$(echo 'Add following\nRemove following' | fzy)
|
|
|
|
if [ "$action_manage" = 'Add following' ]; then
|
|
|
|
echo 'Input nick or full address (ex. example_nick or example@domain'
|
|
|
|
read add_account
|
|
|
|
follow_account "$add_account"
|
|
|
|
else
|
|
|
|
followings_menu "$action_manage"
|
|
|
|
fi
|
|
|
|
;;
|
2022-05-06 09:09:04 +00:00
|
|
|
"$backup_restore") backup_restore_menu ;;
|
|
|
|
esac
|
|
|
|
;;
|
2022-05-25 16:12:17 +00:00
|
|
|
"$search_menu") search_api_statuses ;;
|
2022-08-02 14:45:08 +00:00
|
|
|
"$custom_request") custom_manual_api_request ;;
|
2022-05-06 09:09:04 +00:00
|
|
|
"$switchinstance")
|
|
|
|
empty=0
|
|
|
|
case $(echo 'Recently used\nChoice from list\nManual input' | fzy) in
|
|
|
|
"Recently used")
|
2022-05-10 21:12:49 +00:00
|
|
|
if [ -s $instance_hist ]; then
|
|
|
|
touch $instance_hist && instance=$(cat $instance_hist | fzy)
|
|
|
|
else
|
|
|
|
echo 'No recently used instances...'
|
|
|
|
empty=1
|
|
|
|
fi
|
|
|
|
;;
|
2022-04-11 19:34:04 +00:00
|
|
|
|
2022-05-06 09:09:04 +00:00
|
|
|
"Choice from list") instance=$(jj -l -i config.json public_list_instances | sed 's/"//g' | fzy) ;;
|
2022-04-11 19:34:04 +00:00
|
|
|
|
2022-05-06 09:09:04 +00:00
|
|
|
"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
|
|
|
|
proxy_init
|
|
|
|
instance_point="$default_connect_protocol://$instance/api/v1"
|
|
|
|
instance_point_pleroma="$default_connect_protocol://$instance/api/pleroma"
|
|
|
|
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
|
|
|
|
make_login
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
"$authmake") auth_api_get_token ;;
|
|
|
|
"$Exit") exit 0 ;;
|
2022-04-11 19:34:04 +00:00
|
|
|
esac
|
|
|
|
done
|