log:
  copy/paste rows, add "export" button"

 local state: files, folders, size

- conflict handling is not available

core:
  - remove folder for controller test
  - remove folder for fs-scanner test


===========
5. разобраться с лог-левелами?

1. ^ если в block iterator'е были проскипанные блоки (из-за того, что были залочены), то файл(!) надо добавить на рескан через некоторое время


3. скан-актор не детектит скаченные файлы


4. надо как-то понимать, что folder is up-to-date?



- syncspirit-daemon: /home/b/development/cpp/syncspirit/src/net/dialer_actor.cpp:88: void syncspirit::net::dialer_actor_t::on_timer(rotor::request_id_t, bool): Assertion `it != redial_map.end()' failed.
- [2023-10-31 13:56:49.488] [D/23191] init/active:KUEQE66, resolving tcp://93.31.21.95:443 (transport = 0x5585be9747e0)

- 2022-03-28 20:47:54.664] [E/25546] fs::scan_actor, on_hash, file: my_label/Camera/VID_20210122_121411.mp4, error: fs::scan_actor request timeout

=====================
- идёт много file_clone, но нету скачки файла
- check 4 symlinks test (scaner) ?
- simulate file failure on win32 (open file before it will be opened in fs_actor)
- app-image : ./linuxdeploy-x86_64.AppImage --appdir AppDir -e bin/eratosthenes -d my.desktop -i /usr/share/icons/hicolor/48x48/apps/claws-mail.png --output appimage
- image icon:
    https://www.stockio.com/free-icons/?q=sync,
    https://www.freepik.com/free-vector/settings-icons-flat_1530486.htm#query=sync%20icon&position=1&from_view=search

===================

- восстанавливаться при креше (из-за MDBX_SAFE_NOSYNC) : держать заммапленый файлик
   file-uuid | (source) device_id | seq_no
   ----------+--------------------+-------
    ...
   к-во записей N задаётся в конфиге. Когда файл флушится, пишем запись.
   Как только произошло N записей, флушим БД на диск.

- controller: не падать, если пришла ошибка на запрос блока

- https://docs.syncthing.net/users/faq.html#what-things-are-synced
- когда нам прислали update, но нету sequence/устаревшая инфа, нужно апдейтить бд, но не запрашивать файлы
- test: validation happens before opening file?
- send indices deltas (after restart detects changes)
- test: fs_actor, deleted file from index
- test: controller, share folder -> index is sent
- test: file is not available
- test: device file
- start syncing folder when new folder has been added, нужно слать cancel{}
- backpressue on controller by file-actor?
- Canonicalize, TempNameWithPrefix, TempName
- локальные таймстемпы?
- metadata (timestamp, etc.)
- cluster is update by 3rd party: регать итераторы в cluster'е и инвалидировать, если надо.
- https://github.com/syncthing/syncthing/pull/7876
- https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file
- https://en.wikipedia.org/wiki/Filename#Reserved_characters_and_words
- https://github.com/wheybags/glibc_version_header

./src/ui-daemon/syncspirit-daemon --log_level trace --config_dir=../  --command add_peer:zzz:KUEQE66-JJ7P6AD-BEHD4ZW-GPBNW6Q-Y4C3K4Y-X44WJWZ-DVPIDXS-UDRJMA7  --command add_folder:label=my_label:id=nagkw-srrjz:path=/tmp/syncspirit --command share:folder=my_label:device=KUEQE66
- https://docs.0install.net/about/faq/

3. use wxWidgets

- config & tui
 - игнорированные девайсы: показать, удалить
 - добавить/удалить/изменить директорию
 - удалить/добавить/изменить девайс
 - config versioning
 - next activity

https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_sequences
https://stackoverflow.com/questions/64035952/how-to-key-press-detection-on-a-linux-terminal-low-level-style-in-python


- local-discovery
    iptables -t nat -A OUTPUT -p udp --dport 21027 -j DNAT --to-destination 127.0.0.1:21026



-relay
    syncthing-relay(7)
    relay://78.46.89.67:22067/?id=WAVJNLF-AVVZAPT-V6JEQA5-B3EPEW6-6SAR3C4-NFZBOW2-CWR3QM4-QJT2OA6&pingInterval=1m0s&networkTimeout=2m0s&sessionLimitBps=0&globalLimitBps=0&statusAddr=:22070&providedBy=frogeye.fr

- discovery_support, upnp_support-> proto ?
- вообще не отвечает upnp


- restart all on config change

openssl x509 -inform PEM -outform DER -in ~/.config/syncthing/cert.pem -out /tmp/cert.der

- статически собирать бинарь под линь ( https://www.youtube.com/watch?v=Z7WuUhPJ-cU&list=PLZN9ZGiWZoZruMY-MlkAd-nHzdP9TfLRC&index=25 )
- case: когда коннектимся к пиру, но он ранее приконнектился к нам
- dialer-actor
- protobuf light?

- DB
https://github.com/erthink/libmdbx
https://iowow.io/
https://symas.com/lmdb/
https://en.wikipedia.org/wiki/LevelDB

https://wiki.lyrasis.org/display/FEDORA471/How+to+inspect+LevelDB
https://softwarerecs.stackexchange.com/questions/14409/leveldb-database-client

[RF7ZH] 2020/12/10 10:25:13.662765 logfs.go:61: DEBUG: casefs.go:152 basic /home/b/Desktop/finances Lstat invoices/samples/Rechnung_Nr._B2020128.pdf {0xc000a14f70} <nil>


https://forum.syncthing.net/t/a-few-questions-about-quic-hole-punching-and-stun/16490


=========

1. Есть глобальй регистратор

 message_type -> ack_count

2. Акторы при старте регаются что они выслают ack. При выключении - дерегаются.

3. Интерфес visitor'а (Effector)

 OnBegin(diff&) -> outcome::result;
 OnCommit(diff&) -> void;
 OnRevert(diff&) -> void;

4. Diff
  Apply()
  Revert()
  Commit() -> true/false. true если к-во ack'ов  == то, что в регистраторе

  Diff::Ack

5. По-умолчанию 1 подтверждение высылает сам источник, Commit ничего не делает
