5.2 KiB
5.2 KiB
Сессия 2026-09-21 - разрезание трека + блокировка склейки разных великов
Контекст
Три вопроса пользователя (сначала разобрал по коду, потом делал):
- «Пересчитать» берёт велик СЕССИИ (не активный) - пользователя устраивает, не трогаем.
- Хочет разрезать трек в точке смены передачи, чтобы разным кускам назначать свой велик (два велика = один и тот же, разные передачи) - для точных мощности/каденса.
- Опасение: склейка разных великов слепит всё в один велик. Решение (по просьбе): при склейке треков с РАЗНЫМИ великами - предупреждать и НЕ склеивать (не хранить велик по точкам).
Сделано
- Блокировка склейки (D): в обработчике
#gps-sel-merge(main.js) - если у выбранных сессий разныеbike_id(Set по bike_id, null=none),appAlert«велосипеды разные, склеить нельзя, задайте одинаковый и склеивайте» и return. - Разрезание (B):
DB.splitGpsSession(sessionId, part2Ids, part1EndTime, part2StartTime)(db.js): вторая половина -> НОВАЯ сессия (id=Date.now(), копия date/activity/bike/source, start=part2 время, end=старый end), точки part2 переносятся по id чанками (200),seq=NULL; у старой end_time=part1. UI: кнопка#sd-splitвключает#sd-map.split-mode; в попапе точки кнопка.split-here(видна только в split-mode) ->confirmSplitAt(k)-> подтверждение -> splitGpsSession -> пересчёт обоих кусков (recalculateSession noDelete) -> назад в историю. - Точку разреза выбирают ТАПОМ ПО ТОЧКЕ (хит-таргеты уже есть), а не кликом карты - маркеры перехватывают клик, поэтому кнопка живёт в попапе.
Проверка (десктоп Xvfb, подсажен склеенный трек 16 сен 1789547934760, 3614 тчк, +2й велик)
- Разрез: «Разрезать трек» -> тост + скролл к карте -> тап точки #3547 -> попап с «✂ Разрезать здесь» -> диалог (точка/время/км) -> «Разрезать» -> в истории ДВЕ сессии 16-го (part1 3548 тчк 19.54км, part2 66 тчк 343м), обе bike, стата пересчитана. Скрины.
- Блокировка: part2 велик -> 2 (через SQL), выделил обе (долгий тап + тап), «Объединить» -> предупреждение «велосипеды разные, склеить нельзя», склейки не произошло. Скрин.
- БД восстановлена из бэкапа (0 сессий 16 сен, 1 велик).
Замечания
- Инъекция
INSERT ... SELECT *тихо даёт 0 строк, если id сессии больше нет в pulled-БД (tools/track/baldav.db пере-пулена, старая 1789549492046 уже склеена на телефоне в 1789547934760). Проверять существование id перед выводами. Xvfb :99снова умирал;pgrep -f "Xvfb :99"ловит собственную команду (ложно «жив») - проверять сокет/tmp/.X11-unix/X99.- part2 start_time берётся из ts точки (UTC), а поле сессии - локальное; мелкая косметическая рассинхронизация времени (данные так хранятся), на функциональность не влияет.
Выкатка на роутер (по просьбе)
- Залит СУЩЕСТВУЮЩИЙ
binaries/baldav-debug.apk(0.1.464, build 464) на роутер keenetic (LAN 192.168.1.1) в/opt/share/www/baldav/baldav.apk+BUILD_NUMBER=464, БЕЗ пересборки (иначе номер уехал бы на 465). Проверено: файл 190101489 б, BUILD_NUMBER=464 на роутере. Доступно:http://192.168.1.1:88/baldav/baldav.apk. Пароль роутера взят из build.sh, не печатался. VPS-зеркало не трогал (просили только роутер). - Текущие версии сведены в README (раздел «Текущие версии»): app 0.1.464/build 464, на роутере 464, BRouter 1.6.3, сид продуктов 11.
Не сделано (по просьбе - позже/не нужно)
- Велик по точкам (вариант C) не делаем: пользователь просто не будет склеивать разные велики.
- Вырезание участка трека - позже.