- jumpToMessage() rendered the APDU list through the unqualified renderMessages(), whose tail pins the view to the bottom (the live-capture stick), and only then let focusMessage() smooth-scroll back up to the clicked record — the visible jump-to-end-then-back. It now renders with skipScroll, so the only scroll is the focus itself - the content-follow became conditional: shouldStickToBottom() pins the view to the newest messages only while the reader is already at the bottom (40 px slack), so the 500 ms live poll no longer pulls away a view the reader scrolled to — a Files/map jump is no longer yanked down by the next batch. A freshly opened session or a new capture still lands at the bottom (renderMessages(false, true)) - tests (node): the jump's paging/render(true)/focus sequence with stubs, the no-session no-op, the stick decision (at bottom / within slack / scrolled up / explicit jump / forced / first render) and source pins for renderMessages, jumpToMessage, loadSession and startCapture; 527 Python + 53 Node tests - README/README_RUS note the follow behaviour; PWA_VERSION/pyproject/ version.py 2.6.1, SW cache simtrace-analyser-v73
22 lines
664 B
TOML
22 lines
664 B
TOML
[build-system]
|
|
requires = ["setuptools>=64"]
|
|
build-backend = "setuptools.backends._legacy:_Backend"
|
|
|
|
[project]
|
|
name = "simtrace-analyser"
|
|
version = "2.6.1"
|
|
description = "SIMtrace Analyser — APDU trace analyser for GSMTAP/PCAP captures (bundles the simtrace2-pysniff utility)"
|
|
readme = {file = "README.md", content-type = "text/markdown"}
|
|
license = {text = "GPL-2.0-or-later"}
|
|
requires-python = ">=3.9"
|
|
dependencies = [
|
|
"pyusb>=1.2",
|
|
]
|
|
|
|
[project.scripts]
|
|
simtrace-analyser-server = "simtrace_analyser.__main__:main"
|
|
simtrace2-pysniff = "simtrace2_pysniff.__main__:main"
|
|
|
|
[tool.setuptools.packages.find]
|
|
include = ["simtrace_analyser*", "simtrace2_pysniff*"]
|