Progress on recompute/refine/roads-rebuild + remember map zoom
- .btn-progress fills a button's bg by --pct (setBtnProgress). Elevation refine drives it from fetchElevations network batches (0-80%) then save (85-100%); recompute from recalculateSession phase milestones; roads rebuild from a new Rust roads_progress event (rebuild_roads emits [current,total] every ~2000 points - first Rust->JS event in the app, adds use tauri::Emitter) so it no longer just hangs silently. - recalc/refine now reopen the detail via reopenDetail (awaits the popstate) instead of the manual pop+history.back+render race. - Track detail remembers its map view per session (_sdMapView, moveend) and restores it on reopen/return instead of re-fitting the whole track; the recording map persists its zoom in localStorage across screen switches.
This commit is contained in:
parent
fd178ad97d
commit
3e2a6e47f7
5 changed files with 120 additions and 21 deletions
44
docs/session-logs/2026-09-29_progress-and-zoom.md
Normal file
44
docs/session-logs/2026-09-29_progress-and-zoom.md
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
# Сессия 2026-09-29 (3) - прогресс на кнопках, память масштаба карты
|
||||
|
||||
Продолжение дня (см. `2026-09-29_startup-slowness.md`). По списку задач пользователя.
|
||||
|
||||
## Что значат сообщения достройки (объяснение, без правок)
|
||||
`GPS.fillGaps` (gps.js) чинит только реальные потери сигнала: разрыв > 60с И хорда > 150м.
|
||||
Для такого разрыва спрашивает у BRouter дорожный путь между концами:
|
||||
- "больше нужного" = `skipped-long`: дорога есть, но путь длиннее прямой более чем в 2 раза
|
||||
(крюк). Значит ехал не по дороге (тропа/поле/грунт, которого нет в графе) - оставляем прямую.
|
||||
- "нет данных" = `skipped-noroute`: BRouter не проложил вообще - нет дорожных данных на участке
|
||||
(не скачан .rd5-сегмент региона / пусто). Мостить нечем.
|
||||
Это не баг, а честный отказ достраивать заведомо кривым путём.
|
||||
|
||||
## Прогресс на долгих действиях (заливка фона кнопки по %)
|
||||
- CSS `.btn-progress` (styles.css): фон кнопки заливается слева по `--pct` (ставится из JS через
|
||||
CSS-переменную, не инлайн-стиль). Хелпер `setBtnProgress(el, pct)` (main.js).
|
||||
- "Уточнить высоты" (`#sd-refine`): реальный % от сетевых батчей `fetchElevations(pts, onProgress)`
|
||||
(0-80%), затем сохранение+пересчёт (85-100%). Сеть - api.gpxz.io / open-elevation /
|
||||
open-meteo / opentopodata.
|
||||
- "Пересчитать" (`#sd-recalc`): `GPS.recalculateSession(id, {onProgress})` шлёт честные вехи по
|
||||
фазам (5 старт / 40 фильтр / 70 стата / 100 запись).
|
||||
- "Перестроить" дороги (`#roads-rebuild`): Rust `rebuild_roads` эмитит `roads_progress`
|
||||
[current,total] каждые ~2000 точек (в проекте раньше событий из Rust не было вообще - добавлен
|
||||
`use tauri::Emitter`), JS слушает и заливает кнопку + пишет "Построение: cur / tot". Убирает
|
||||
"просто подвисает".
|
||||
|
||||
## Гонка reopenDetail - распространил на recalc/refine
|
||||
`#sd-recalc` и `#sd-refine` раньше делали тот же ручной `winStack.pop + history.back +
|
||||
showSessionDetail` (гонка с пустой картой/графиками). Переведены на `reopenDetail` (ждёт
|
||||
popstate) - фикс той же гонки.
|
||||
|
||||
## Память масштаба карты
|
||||
- Деталь трека: `_sdMapView[sessionId]` хранит {центр, зум}, обновляется на moveend/zoomend; при
|
||||
рендере, если вид сохранён - `setView` вместо `fitBounds`. Так после пересчёта/уточнения (reopen)
|
||||
и при возврате к треку масштаб сохраняется, а не сбрасывается на весь трек. Первый показ - как
|
||||
раньше, fitBounds.
|
||||
- Карта записи (`renderRecordingInline`): зум хранится в localStorage `baldav_rec_zoom`
|
||||
(сохраняется на zoomend, восстанавливается при создании карты вместо жёсткого 15). Так возврат
|
||||
на экран трекинга держит масштаб.
|
||||
|
||||
## Проверка
|
||||
- Синтаксис JS - ок. Сборка debug + телефон. Проверить: заливка кнопок идёт по %, дороги больше
|
||||
не "висят молча"; после "Пересчитать"/"Уточнить" карта на том же масштабе; вернулся на запись -
|
||||
масштаб прежний. (Задача 1 - фикс гонки reopenDetail - проверена через CDP отдельно.)
|
||||
Loading…
Add table
Add a link
Reference in a new issue