mirror of
http://gitea.phreedom.club/localhost_frssoft/pleroma-cli
synced 2024-11-23 03:01:27 +00:00
Compare commits
3 commits
d29a97b19c
...
60ff687f24
Author | SHA1 | Date | |
---|---|---|---|
localhost_frssoft | 60ff687f24 | ||
localhost_frssoft | e3844feb45 | ||
localhost_frssoft | d8e6271d8f |
74
README.md
74
README.md
|
@ -2,39 +2,51 @@
|
||||||
|
|
||||||
Эта ветка содержит прототип клиента, где взаимодействие с статусами\постами будет происходить через файлы
|
Эта ветка содержит прототип клиента, где взаимодействие с статусами\постами будет происходить через файлы
|
||||||
|
|
||||||
Just for fun. Simple "Client" API script for Pleroma (or maybe also Mastodon) instances.
|
## Схема дерева файлов-постов сгруппированных по аккаунтам
|
||||||
|
|
||||||
Features:
|
|
||||||
* Write longreads in Your default $EDITOR
|
|
||||||
* List timelines
|
|
||||||
* Switch instance from public list in config.json or manual input. Also recent used instance list.
|
|
||||||
* All others futures maybe working 50/50
|
|
||||||
|
|
||||||
Note about proxy:
|
|
||||||
Proxy by default autodetect i2p and onion (not tested) instances address.
|
|
||||||
If provided main_proxy in config.json is disable i2p and onion instances autodetection.
|
|
||||||
Also: don't forget change connect_protocol_via_main_proxy if set http proxy or any proxy without support https.
|
|
||||||
|
|
||||||
Note about auth:
|
|
||||||
i2p and onion instances may no support (or disabled) OAuth2.
|
|
||||||
Workaround: if instance have clearweb address, make auth and copy-paste token in .auth.json, example:
|
|
||||||
```
|
```
|
||||||
{
|
[statuses]
|
||||||
"your.authorized.instance": "xxx",
|
|
|
||||||
"abc123instance.i2p": "xxx",
|
|-[instance]
|
||||||
"abc123instance.onion": "xxx"
|
| |---[acct]
|
||||||
}
|
| | |
|
||||||
|
| | |--- [status_id]
|
||||||
|
| | | |
|
||||||
|
| | | |---content
|
||||||
|
| | | |---status-id.json
|
||||||
|
| | | |---media_attachments.m3u8
|
||||||
|
| |... |--- ...
|
||||||
|
|...
|
||||||
|
```
|
||||||
|
На данный момент статусы теперь линкуются из папки all_statuses/$instance, где содержатся не сгруппированные посты
|
||||||
|
Время папок с постами соотвествует постам
|
||||||
|
|
||||||
|
|
||||||
|
## Что доступно:
|
||||||
|
|
||||||
|
### Режим мониторинга файлов и автообновление ленты (пока только home)
|
||||||
|
```
|
||||||
|
daemon_mode=yes ./pleroma-cli.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
Depends:
|
### Частичное взаимодействие с постами:
|
||||||
* [jj](http://gitea.phreedom.club/localhost_frssoft/jj)
|
Чтобы добавить в избранное или бустануть пост нужно в папке с постом создать файл favourite и\или share
|
||||||
* [curl](https://curl.se/)
|
```
|
||||||
* [fzy](https://github.com/jhawthorn/fzy)
|
touch favourite
|
||||||
* Any browser (links set by default) - for authorization on instances
|
touch share
|
||||||
|
```
|
||||||
|
|
||||||
Opt. Depends:
|
### Чтение
|
||||||
* gpg - for decrypt PGP messages
|
Учитывая то, что каждый пост-статус это файл, то вы можете вывести все посты за раз например так:
|
||||||
* awk - parse PGP standart messages
|
```
|
||||||
* Any media player
|
# все тексты постов
|
||||||
|
cat all_statuses/instance.example/*/content
|
||||||
|
|
||||||
Also, thk Tolstoevsky for Pleroma instance (set by default instance)
|
# все тексты постов пользователя
|
||||||
|
cat statuses/instance.example/nick@abc/*/content
|
||||||
|
|
||||||
|
# Посмотреть все мультимедия вложения
|
||||||
|
cat all_statuses/instance.example/*/media_attachments.m3u8 | mpv --playlist=-
|
||||||
|
|
||||||
|
# Прочие "игры" с постами, например узнать кто более активен в вашем инстансе среди загруженных постов
|
||||||
|
cat all_statuses/instance.example/*/*.json | jj -l '..#.account.acct' | sort | uniq -c | sort -r
|
||||||
|
```
|
||||||
|
|
|
@ -979,6 +979,38 @@ custom_manual_api_request()
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
statuses_auto_update()
|
||||||
|
{
|
||||||
|
while true; do
|
||||||
|
echo "Updating statuses..."
|
||||||
|
timeline='home'
|
||||||
|
export instance
|
||||||
|
timeline_api | ./utils/statuses2files.sh
|
||||||
|
echo "Waiting..."
|
||||||
|
sleep 30
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ "$daemon_mode" = 'yes' ]; then
|
||||||
|
echo "Daemon mode started; files listening..."
|
||||||
|
statuses_auto_update &
|
||||||
|
while true; do
|
||||||
|
sleep 5
|
||||||
|
statuses_to_fav=$(/bin/ls $main_basedir/all_statuses/$instance/*/favourite 2>/dev/null)
|
||||||
|
statuses_to_share=$(/bin/ls $main_basedir/all_statuses/$instance/*/share 2>/dev/null)
|
||||||
|
if [ -n "$statuses_to_fav" ]; then
|
||||||
|
status_id=$(dirname "$statuses_to_fav" | sed 's/.*\///g')
|
||||||
|
favorite_api_status $status_id
|
||||||
|
rm $statuses_to_fav
|
||||||
|
fi
|
||||||
|
if [ -n "$statuses_to_share" ]; then
|
||||||
|
status_id=$(dirname "$statuses_to_share" | sed 's/.*\///g')
|
||||||
|
share_api_status $status_id
|
||||||
|
rm $statuses_to_share
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
menu_write_status='Write status'
|
menu_write_status='Write status'
|
||||||
menu_timeline='Timelines'
|
menu_timeline='Timelines'
|
||||||
notif='Notifications'
|
notif='Notifications'
|
||||||
|
|
|
@ -14,7 +14,6 @@ for i in $ids; do
|
||||||
status_media_attachments=$(echo "$json" | jj -l "#[id=$i].media_attachments.#.url" | tr -d '"\v')
|
status_media_attachments=$(echo "$json" | jj -l "#[id=$i].media_attachments.#.url" | tr -d '"\v')
|
||||||
|
|
||||||
chmod 711 "$main_basedir"/all_statuses/$instance/$status_id
|
chmod 711 "$main_basedir"/all_statuses/$instance/$status_id
|
||||||
touch -d "$status_date" "$main_basedir"/all_statuses/$instance/$status_id
|
|
||||||
|
|
||||||
if [ -n "$content" ]; then
|
if [ -n "$content" ]; then
|
||||||
echo "$content" > "$main_basedir"/all_statuses/$instance/$status_id/content
|
echo "$content" > "$main_basedir"/all_statuses/$instance/$status_id/content
|
||||||
|
@ -23,6 +22,7 @@ for i in $ids; do
|
||||||
echo "$status_media_attachments" > "$main_basedir"/all_statuses/$instance/$status_id/media_attachments.m3u8
|
echo "$status_media_attachments" > "$main_basedir"/all_statuses/$instance/$status_id/media_attachments.m3u8
|
||||||
fi
|
fi
|
||||||
chmod 600 "$main_basedir"/all_statuses/$instance/$status_id/*
|
chmod 600 "$main_basedir"/all_statuses/$instance/$status_id/*
|
||||||
|
touch -d "$status_date" "$main_basedir"/all_statuses/$instance/$status_id
|
||||||
done
|
done
|
||||||
|
|
||||||
export ids
|
export ids
|
||||||
|
|
|
@ -15,7 +15,9 @@ for i in $ids; do
|
||||||
ids=$(echo "$ids" | sed -E "s/.?$i.?//g")
|
ids=$(echo "$ids" | sed -E "s/.?$i.?//g")
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
status_date=$(echo "$json" | jj "#[id=$1].created_at")
|
||||||
mkdir -m 711 -p "$main_basedir"/all_statuses/$instance/$i
|
mkdir -m 711 -p "$main_basedir"/all_statuses/$instance/$i
|
||||||
|
touch -d "$status_date" "$main_basedir"/all_statuses/$instance/$i
|
||||||
echo "$json" | jj -p "#[id=$i]" > "$main_basedir"/all_statuses/$instance/$i/$i.json
|
echo "$json" | jj -p "#[id=$i]" > "$main_basedir"/all_statuses/$instance/$i/$i.json
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,6 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# Move statuses to acct dirs
|
# Move statuses to acct dirs
|
||||||
# [statuses]
|
|
||||||
# |
|
|
||||||
# |---[acct]
|
|
||||||
# | |
|
|
||||||
# | |--- [status_id]
|
|
||||||
# | |--- ...
|
|
||||||
# |...
|
|
||||||
|
|
||||||
json=$(cat)
|
json=$(cat)
|
||||||
|
|
||||||
|
@ -17,6 +10,7 @@ for i in $ids; do
|
||||||
mkdir -m 711 -p "$main_basedir"/statuses/$instance/$acct
|
mkdir -m 711 -p "$main_basedir"/statuses/$instance/$acct
|
||||||
if [ -n "$status_id" ]; then
|
if [ -n "$status_id" ]; then
|
||||||
ln -s -r "$main_basedir"/all_statuses/$instance/$status_id "$main_basedir"/statuses/$instance/$acct/$status_id
|
ln -s -r "$main_basedir"/all_statuses/$instance/$status_id "$main_basedir"/statuses/$instance/$acct/$status_id
|
||||||
|
touch --reference "$main_basedir"/all_statuses/$instance/$status_id "$main_basedir"/statuses/$instance/$acct/$status_id
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue