Compare commits

...

3 commits

5 changed files with 79 additions and 39 deletions

View file

@ -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
```

View file

@ -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'

View file

@ -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

View file

@ -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

View file

@ -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