3.9 KiB
3.9 KiB
Сессия 2026-09-18 - объединение поездок (склейка треков)
Контекст
Трек 16 сен: реально 5 заездов, но первый оказался в отдельной сессии (запись несколькими кусками). Нужна склейка: долгий тап = выделение, 2+ = объединить, разрыв >5 мин по времени - предупреждать но не мешать, только склейка (разрез/вырез были проблемными, позже). После склейки «Разбор повторов» должен увидеть все 5.
Сделано
- Миграция:
gps_points.orig_session_id TEXT- исходная сессия точки (для будущего разделения; склейка обратима без потери данных). DB.mergeGpsSessions(idStrs)(db.js): сессии сортируются по времени, target = самая ранняя; точки остальных переносятся (session_id=target,orig_session_id=COALESCE(...)), end_time продлевается, лишние сессии удаляются.seq=NULLу объединённого трека - иначе совпадающие seq (у каждой сессии были 1..N) перемешивают порядок в getGpsPoints. Ids - строками с CAST в INTEGER (i64 corruption).- UI (
renderGpsScreen): долгий тап 500мс (touch+mouse) -> режим выделения (.selected, плавающая#gps-sel-bar: «Выбрано N», «Объединить» (>=2), «Отмена»). Тап в режиме переключает. Клик после long-press подавляется. ДиалогappConfirmс пометкой об обратимости; предупреждение о разрыве >5 мин. После склейки -recalculateSession (noDelete), тост, ре-рендер. - CSS:
.gps-session-item.selected,.gps-sel-bar, фикс[hidden](правилоdisplay:flexперебивало атрибут hidden - панель висела всегда).
Баги по пути (и фиксы)
- Панель выделения показывалась всегда:
.gps-sel-bar{display:flex}перебивалhidden. Фикс:.gps-sel-bar[hidden]{display:none}. - После склейки в приложении: участок 43 км, скорости 6745 км/ч. Причина: у трёх сессий
seq совпадали (1..N),
getGpsPoints(ORDER BY seq) перемешивал треки. В node-тесте я сортировал по ts и не поймал. Фикс:seq=NULLпри склейке -> порядок по ts.
Проверка (десктоп Xvfb, подсажены 3 сессии 16 сен, БД восстановлена из бэкапа)
- Node: склейка 3 сессий -> detectRepeats 5 заездов, 1572м, [21.4,20.1,21.1,20.9,22.5], 105% (по отдельности: две малые - «нет повторов», большая - 4).
- В приложении: долгий тап выделил 11:38 (рамка+фон, «Выбрано 1»), тап добрал 11:50/12:04 («Выбрано 3»), «Объединить» -> диалог -> 3 сессии стали одной (11:38, 19.89 км, суммарно). Открыл: «Разбор повторов» = 5 заездов, совпало с node, каденс 88-93, вердикт 105%. Скрины.
- Далее: сборка APK + проверка на телефоне (реальный трек 16 сен там же).
Не сделано (по просьбе - позже)
Разрезание и вырезание треков (были проблемы). Сейчас только склейка.