diff --git a/README.md b/README.md index c1b5599..b44a670 100644 --- a/README.md +++ b/README.md @@ -211,7 +211,7 @@ until another one is focused (the APDU list keeps the reader's position: new messages pin the view to the bottom only while the reader is already there, so a jump is never pulled away or un-highlighted by the live poll). Rows that carry a recorded change (a card-side change, or an update that wrote or first observed bytes) also offer -**Details**: a modal showing the full file path (`MF/EF_ICCID (2FE2)`, +**Show diff**: a modal showing the full file path (`MF/EF_ICCID (2FE2)`, `ADF/EF_IMSI (6F07)`, `DF_GSM_ACCESS/EF_KcGPRS (4F52)`, `AID …/4F09` — the DF named from the EF.DIR labels when known) and the affected unit — the whole file, or the single record that changed — **before and after** the change, as diff --git a/README_RUS.md b/README_RUS.md index b380ccb..06c9f54 100644 --- a/README_RUS.md +++ b/README_RUS.md @@ -215,7 +215,7 @@ Files — это таймлайн файловых операций по все новые сообщения прижимают вид к низу, только пока читатель уже внизу, поэтому переход не срывается живым опросом и не снимает выделение). У строк с записанным изменением (изменение со стороны карты либо запись, изменившая или впервые показавшая -байты) есть кнопка **Details**: окно показывает полный путь файла (`MF/EF_ICCID (2FE2)`, +байты) есть кнопка **Show diff** («Изменения»): окно показывает полный путь файла (`MF/EF_ICCID (2FE2)`, `ADF/EF_IMSI (6F07)`, `DF_GSM_ACCESS/EF_KcGPRS (4F52)`, `AID …/4F09` — DF называется по меткам из EF.DIR, если они есть) и затронутую единицу — файл целиком или изменившуюся запись — **до и после** изменения в виде hex-вида diff --git a/frontend/index.html b/frontend/index.html index 310aee3..56ffbbc 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -2234,7 +2234,7 @@ async function renderFileView() { } view.innerHTML = timeline.map(op => { const diff = op.change_ref - ? `` + ? `` : ''; return `
${escapeHtml(fileOpLabel(op))}${diff} @@ -3226,7 +3226,7 @@ function onFilterChange() { } // ──────────────────── Versioning ──────────────────── -const PWA_VERSION = '2.6.4'; +const PWA_VERSION = '2.6.5'; const MIN_SERVER_VERSION = '2.3.0'; function parseVersion(v) { @@ -3273,8 +3273,8 @@ const LANG_RU = { 'Read': 'Чтение', 'Update': 'Запись', 'Changed on card!': 'Изменено на карте!', + 'Show diff': 'Изменения', 'Change details': 'Подробности изменения', - 'Details': 'Подробнее', 'changed': 'изменено', 'newly observed': 'впервые наблюдается', 'never observed': 'не наблюдалось', diff --git a/frontend/sw.js b/frontend/sw.js index 04dcd8b..6d927c2 100644 --- a/frontend/sw.js +++ b/frontend/sw.js @@ -1,4 +1,4 @@ -const CACHE = 'simtrace-analyser-v78'; +const CACHE = 'simtrace-analyser-v79'; const PRECACHE = [ 'index.html', diff --git a/frontend/tests/comprion.test.js b/frontend/tests/comprion.test.js index b48c9cf..ca98afa 100644 --- a/frontend/tests/comprion.test.js +++ b/frontend/tests/comprion.test.js @@ -342,9 +342,9 @@ test('Files view: the view selector (topbar) and the timeline are wired', () => assert.match(src, /\$on\('side-view-select', 'change'/); assert.match(src, /\$on\('file-view', 'click'/); assert.match(src, /API\.getSessionFiles\(sid\)/); - // The trailing link: "Changed on card!" for a card-side change (it opens - // the change modal), the generic "Details" for an update row. - assert.match(src, />\$\{op\.kind === 'card_change' \? t\('Changed on card!'\) : t\('Details'\)\}<\/button>/); + // The trailing link: "Changed on card!" for a card-side change and + // "Show diff" for an update row — both open the change modal. + assert.match(src, />\$\{op\.kind === 'card_change' \? t\('Changed on card!'\) : t\('Show diff'\)\}<\/button>/); assert.match(src, /API\.getSessionFileImage\(STATE\.sessionViewId, fileKey, idx\)/); assert.match(src, /getSessionFileImage\(id, key, change\)/); assert.match(src, /files\/image\?key=/); @@ -359,7 +359,7 @@ test('Files view: strings carry Russian translations', () => { keys.add(m[1].replace(/\\(['\\])/g, '$1')); } for (const s of ['Files', 'Read', 'Update', 'Changed on card!', 'Change details', - 'Details', 'Close', 'Offset', 'Record', 'Before', 'After', 'Show the change', + 'Show diff', 'Close', 'Offset', 'Record', 'Before', 'After', 'Show the change', 'changed', 'newly observed', 'never observed', '{c} bytes changed, {n} bytes newly observed', 'Showing the first {n} bytes of the image', diff --git a/pyproject.toml b/pyproject.toml index 48a918e..4fc67f7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.backends._legacy:_Backend" [project] name = "simtrace-analyser" -version = "2.6.4" +version = "2.6.5" 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"} diff --git a/simtrace_analyser/version.py b/simtrace_analyser/version.py index 825542d..8aae176 100644 --- a/simtrace_analyser/version.py +++ b/simtrace_analyser/version.py @@ -1,3 +1,3 @@ """Single source of truth for the SIMtrace Analyser version.""" -__version__ = '2.6.4' +__version__ = '2.6.5' diff --git a/tests/test_pcap_import.py b/tests/test_pcap_import.py index 66909c7..33471f3 100644 --- a/tests/test_pcap_import.py +++ b/tests/test_pcap_import.py @@ -224,7 +224,7 @@ class TestImportEndpoint(unittest.TestCase): class TestVersion(unittest.TestCase): def test_package_version(self): from simtrace2_pysniff import __version__ - self.assertEqual(__version__, '2.6.4') + self.assertEqual(__version__, '2.6.5') def test_status_includes_version(self): import os