baldav/docs/session-logs/2026-09-26_map-follow-toggle.md
4aiman dbb6c2ea9f Build: auto-clean stale Android bundles per build + clean target
Each android build now removes the regenerable AAB bundles
(intermediary_bundle, outputs/bundle) and gen APK copies once the final
APK is in binaries/; a manual 'clean' target does the same on demand.
Frees ~0.5G/cycle without touching the Rust incremental cache or
binaries/. (build.sh stays untracked - it holds a deploy secret; this
documents the change.)
2026-09-27 00:04:52 +03:00

5.6 KiB
Raw Blame History

Сессия 2026-09-26 - тумблер "следование карты за позицией" на экране записи

Работали по утверждённому плану: docs/plans/2026-09-26-map-follow-toggle.md.

Контекст

Во время записи карта на экране трекинга при каждой новой GPS-точке центрируется на текущей позиции (map.panTo). Кейс: отклонился от трека или трек ведёт туда, где дороги нет, надо осмотреться по карте - но она тут же прыгает обратно, подвигать её нельзя. Нужен тумблер: нажал - карта перестаёт следовать (можно двигать), нажал снова - центрируется на позиции и следование возобновляется.

Согласовано с пользователем (AskUserQuestion): кнопка - символ-плитка в общем ряду кнопок карты (не слово), активная подсветка = слежу; только кнопка-тумблер (драг карты следование НЕ выключает); повторный тап центрирует; состояние не запоминается между сессиями.

Действия

  • frontend/js/main.js, renderRecordingInline:
    • добавлен флаг let followMode = true; рядом с compassFrozen/rotOffset;
    • создана кнопка followBtn (class="rec-map-btn rec-follow-btn active", символ ⊕, title="Следить за позицией") по образцу freezeBtn; onclick тогглит followMode и класс active, при включении центрирует map.panTo на последней точке GPS.recording.points (сортировка по ts);
    • 4 места автоследования загардены if (followMode): onPoint panTo (~4840), onPoint waiting_gps setView (~4857), onStateChange "ready" setView (~4814), onBatchUpdate panTo (~5005).
  • frontend/css/styles.css: .rec-follow-btn { right: 8px; bottom: 276px; font-size: 18px; } (следующий слот стека после .rec-dark-toggle 238px). Базовый вид и .active - переиспользован .rec-map-btn / .rec-map-btn.active.
  • README: добавлен буллет "Слежение карты (тумблер ⊕)".

Проверка

  • node -c frontend/js/main.js - OK.
  • Десктоп (Xvfb :99, DISPLAY=:99 ./build.sh = tauri dev, без бампа версии): открыт экран записи (Старт), кнопка ⊕ в правом стеке вверху, по умолчанию подсвечена (слежу). Тап -> подсветка гаснет (слежу выкл). Тап -> подсветка возвращается (слежу вкл). JS-ошибок в логе нет. Скрины: s_rec.png / s_rec_off.png / s_rec_on2.png в scratchpad.
  • НЕ проверено на десктопе: живое поведение "карта не прыгает на новую точку при выкл / прыгает при вкл" - под Xvfb настоящего GPS нет, экран в waiting_gps, поток точек не идёт. Логика - тривиальный guard вокруг уже работающих panTo/setView. Реальная проверка потока - на телефоне.

Деплой build 475

./build.sh -u -i -d android: собран debug APK (0.1.475, 182М), залит на роутер (http://192.168.1.1:88/baldav/baldav.apk, build 475) и VPS (https://4aiman.top/baldav/baldav.apk, build 475), установлен на 320245779368 через adb install -r --user 0 - Success (подпись совпала, данные сохранены). Живую проверку тоггла следования в реальной записи делает пользователь на телефоне.

Чистка старых бандлов (build.sh)

Место забивалось регенерируемыми выхлопами Android-сборки. Добавлена clean_bundles() в build.sh: удаляет gen/android/app/build/intermediates/intermediary_bundle + outputs/bundle (AAB - мы раздаём APK) и outputs/apk/*.apk. НЕ трогает src-tauri/target (14Г Rust-инкрементал, иначе полная пересборка) и binaries/ (последние APK). Вызывается авто в конце каждой android-сборки (после копии APK в binaries/) и вручную ./build.sh clean. Согласовано с пользователем: объём "только бандлы/APK", запуск "авто + ручная". Разовый прогон: gen build 1.6G -> 1.0G, освобождено ~557 МБ.

Следующие шаги

  • Живая проверка тоггла ⊕ на телефоне: проехать/постоять, отжать, подвигать карту (новые точки не возвращают), вернуть кнопкой (центрируется). Доработки - отдельным коммитом.
  • Компас (freeze X) и поворот карты не задеты (следование = только центр вида, поворот = bearing) - убедиться, что обе кнопки работают независимо.