#!/bin/sh CONFIG="${JOPLIN_WEBDAV_CONFIG:-$HOME/.config/joplin-webdav/env}" PID_FILE="$HOME/.config/joplin-webdav/rclone.pid" SCRIPT_DIR=$(CDPATH= cd -- "$(dirname "$0")" && pwd) echo "=== WebDAV Joplin ===" if [ -f "$CONFIG" ]; then # shellcheck disable=SC1090 . "$CONFIG" echo "Пользователь: ${JOPLIN_WEBDAV_USER:-?}" echo "Порт: ${JOPLIN_WEBDAV_PORT:-8080}" echo "Папка: ${JOPLIN_WEBDAV_ROOT:-$HOME/JoplinSync}" else echo "Конфиг не найден: $CONFIG" fi echo "" echo "=== Процесс ===" if pgrep -f "rclone serve webdav" >/dev/null 2>&1; then pgrep -lf "rclone serve webdav" 2>/dev/null || true else echo "Не запущен → ./docs/apps/joplin/scripts/joplin-webdav-serve.sh" fi port="${JOPLIN_WEBDAV_PORT:-8080}" echo "" echo "=== URL для телефона (Android-хотспот) ===" if [ -x "$SCRIPT_DIR/joplin-hotspot-alias.sh" ]; then "$SCRIPT_DIR/joplin-hotspot-alias.sh" status else echo "(нет joplin-hotspot-alias.sh)" fi echo "" echo "=== mDNS (.local) — с телефона НЕ работает ===" if [ -x "$SCRIPT_DIR/joplin-mdns-setup.sh" ]; then host="$(scutil --get LocalHostName 2>/dev/null | tr '[:upper:]' '[:lower:]' || echo '?')" echo "http://${host}.local:${port} — только Mac/Windows; Android-хотспот не резолвит" fi echo "" echo "=== IP Mac (DHCP, справочно) ===" ip=$(ipconfig getifaddr en0 2>/dev/null || true) [ -n "$ip" ] && echo "primary en0: $ip" || echo "нет IP" echo "" echo "=== Порт :8080 ===" lsof -nP -iTCP:"$port" -sTCP:LISTEN 2>/dev/null || echo "не слушает" echo "" echo "=== URL в Joplin (Mac) ===" settings="$HOME/.config/joplin-desktop/settings.json" if [ -f "$settings" ]; then grep -o '"sync\.6\.path": *"[^"]*"' "$settings" 2>/dev/null | sed 's/.*"\(http[^"]*\)".*/\1/' \ | while read -r u; do echo "settings.json: $u"; done fi log="$HOME/Library/Logs/joplin-webdav/rclone.log" echo "" echo "=== Сеть: Mac и телефон в одной LAN? ===" gw=$(route -n get default 2>/dev/null | awk '/gateway:/{print $2; exit}') ip=$(ipconfig getifaddr en0 2>/dev/null || true) case "$gw" in 192.168.1.*|192.168.0.*) peers=$(arp -an 2>/dev/null | grep "$gw" | awk '{print $2}' | tr -d '()' | grep -vE "^${gw%.*}\.(1|255)$|^$ip$" | head -3) if [ -z "$peers" ]; then echo "⚠ Mac на домашнем Wi‑Fi ($ip), других устройств в LAN не видно" echo " Телефон, скорее всего, НЕ в этой Wi‑Fi → синк невозможен" echo " Вариант A: Mac подключить к хотспоту телефона" echo " Вариант B: телефон подключить к той же Wi‑Fi, что Mac" else echo "Mac на Wi‑Fi роутера ($ip). Телефон должен быть в той же Wi‑Fi." fi ;; 10.*|172.20.10.*|192.168.43.*|192.168.44.*) echo "Mac на хотспоте ($ip). URL на телефоне — из блока выше (*.100)." if [ -n "$gw" ] && [ -f "$log" ] && ! grep -q "from ${gw}:" "$log" 2>/dev/null; then echo "⚠ В логе rclone ещё не было запросов с телефона ($gw)" echo " Проверьте URL в браузере НА ТЕЛЕФОНЕ (не только в Joplin)" fi ;; *) [ -n "$gw" ] && echo "gateway: $gw, Mac: ${ip:-?}" ;; esac echo "" echo "=== rclone (запросы с телефона?) ===" gw=$(route -n get default 2>/dev/null | awk '/gateway:/{print $2; exit}') if [ -f "$log" ]; then phone_lines=$(grep -E 'from 10\.|from 192\.168\.' "$log" 2>/dev/null | grep -v '127.0.0.1' | tail -5) if [ -n "$gw" ] && grep -q "from ${gw}:" "$log" 2>/dev/null; then echo "OK: в логе есть запросы с телефона/шлюза ($gw)" grep "from ${gw}:" "$log" 2>/dev/null | tail -2 elif [ -n "$phone_lines" ]; then echo "$phone_lines" echo "⚠ нет запросов с шлюза ${gw:-?} — возможно только тесты с Mac" else echo "нет запросов с LAN — телефон не достучался до rclone" fi echo "" echo "Смотреть live: tail -f $log | grep -v 127.0.0.1" fi echo "" echo "=== Учётка ===" [ -f "$CONFIG" ] && echo "Пароль: $CONFIG → JOPLIN_WEBDAV_PASS"