Skip to content

Commit a2906db

Browse files
committed
v1.10.29 — RFID chip reuse (erase/recycle/restore), Snapmaker firmware helper + in-app notifications, notification sounds, self-explaining toolbox, backup badge
Added - Reuse RFID chips: Erase (reinit to blank TigerTag), Recycle to NFC, Restore TigerTag+ from backup — chip-guarded, verified, hold-to-confirm. - Snapmaker Paxx firmware helper: download always latest release, installed-version status line, in-app "update available" notification named after the printer. - Notification sounds: a chime on real arrivals (friend request, accepted, firmware); printer notices show the brand logo. - Self-explaining toolbox: an info bubble on every spool tool. - "Backed up" badge for TigerTag+; Product ID row in the detail panel. Changed - Rack hover tooltip: remaining-filament bar follows the app-wide red/orange/green code. Fixed - Twin/backup icons show instantly on a fresh scan; chip-dependent tools update live; honest "Remove from inventory" wording.
1 parent 4ae7bc8 commit a2906db

27 files changed

Lines changed: 1526 additions & 122 deletions

‎CHANGELOG.md‎

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,29 @@ Versions follow [Semantic Versioning](https://semver.org/).
55

66
---
77

8+
## v1.10.29 — 2026-07-03
9+
10+
### Added
11+
12+
- **Reuse your RFID chips.** Three new toolbox actions for a spool's physical chip: **Erase** reinitialises it to a fresh blank TigerTag (a TigerTag+ becomes a plain reusable TigerTag), **Recycle to NFC** wipes it back to a generic NFC tag, and **Restore TigerTag+** rewrites a backed-up TigerTag+ exactly as it was. Each is guarded to the exact chip on the reader, verifies what it wrote, and needs a press-and-hold to confirm.
13+
- **Snapmaker firmware helper.** For the community Paxx firmware on the Snapmaker U1: the download button always points at the latest release, the printer's settings show whether it's up to date, and you get a notification — named after your printer — when a newer firmware is out. One click jumps straight to that printer.
14+
- **Notification sounds.** A soft chime plays when something actually arrives — a friend request, a friend accepting yours, or a firmware update — never for the history that loads when you open the app. Notifications coming from a printer now show that brand's logo, the way a friend's notice shows their avatar.
15+
- **Every tool explains itself.** Each action in a spool's toolbox now has a small ⓘ that, on hover, tells you in plain words what it does — no more guessing.
16+
- **"Backed up" badge.** A green shield marks each TigerTag+ whose signature is safely backed up, on grid cards, thumbnails and the storage view.
17+
- **Product ID.** A TigerTag+ detail panel now shows its on-chip product ID, as a link to the product page.
18+
19+
### Changed
20+
21+
- **Clearer rack tooltips.** Hovering a spool in a rack shows its remaining-filament bar in the usual red / orange / green, matching the rest of the app.
22+
23+
### Fixed
24+
25+
- **Twin and backup icons appear instantly** on a freshly-scanned TigerTag+, without having to close and reopen the card.
26+
- **Chip actions update live** — toolbox actions that need a chip on the reader now appear and disappear as you place or remove the chip, while the panel stays open.
27+
- **Honest wording** on "Remove from inventory": it's a permanent delete, and your physical chip keeps its data (erase or recycle it to reuse).
28+
29+
---
30+
831
## v1.10.28 — 2026-06-29
932

1033
### Added

‎CODEMAP-main.md‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ section's function anchors fall inside its declared range.
2222

2323
```
2424
L1-344 App bootstrap — logging, single-instance, static HTTP server, splash, main window
25-
L345-754 NFC / RFID — reader lifecycle, chip read/write/burn, cloud-encode
25+
L345-924 NFC / RFID — reader lifecycle, chip read/write/burn, cloud-encode
2626
L755-996 TD1S color sensor — serial watcher, parse, IPC replay
2727
L997-1158 Auto-updater + migration gate
2828
L1159-1354 Google-auth loopback, shell open, detached camera-wall window
@@ -46,12 +46,12 @@ L3128-3180 App lifecycle (whenReady, window-all-closed, activate)
4646
| 252-277 | UID hex→decimal + TigerTag SDK payload builder | `normalizeUid`, `_sdkPayload` |
4747
| 278-344 | `BrowserWindow` creation, preload wiring, CSP, devtools | `createWindow` |
4848

49-
## NFC / RFID reader + chip write (L345-754)
49+
## NFC / RFID reader + chip write (L345-924)
5050

5151
| L | What | Anchors / IPC |
5252
|---|---|---|
5353
| 345-512 | Reader connect/disconnect lifecycle, card-present events, auto-read | `initNFC`, `_onNfcMessage` |
54-
| 458-754 | IPC: `rfid:read-now` / `rfid:write-now` / `rfid:encode-cloud` / `rfid:burn-one` / `rfid:refresh-api` / `rfid:lookup-product`; surgical page diff before write | `_pagesToWrite` |
54+
| 458-924 | IPC: `rfid:read-now` / `rfid:write-now` / `rfid:repair` (restore from backup) / `rfid:format` (reinitialize via `TigerTag.asInit`) / `rfid:encode-cloud` / `rfid:burn-one` / `rfid:refresh-api` / `rfid:lookup-product`; surgical page diff before write | `_pagesToWrite`, `_pagesFromBytes` |
5555

5656
## TD1S color sensor (L755-996)
5757

@@ -106,7 +106,7 @@ L3128-3180 App lifecycle (whenReady, window-all-closed, activate)
106106
| 2215-2299 | JPEG-TCP camera, port 6000 (`bambulab:cam-start` / `cam-stop`) — 80-byte auth packet, retry/timeout | `_bambuCamAuthPacket` |
107107
| 2300-2408 | RTSP camera via ffmpeg, port 322 (`bambulab:cam-start-rtsp` / `cam-stop-rtsp`) — 30 fps + low-latency flags | — |
108108

109-
## Anycubic LAN — MQTT, provisioning, FLV camera (L2417-2731)
109+
## Anycubic LAN — MQTT, provisioning, FLV camera (L2417-2930)
110110

111111
| L | What | Anchors / IPC |
112112
|---|---|---|
@@ -115,7 +115,7 @@ L3128-3180 App lifecycle (whenReady, window-all-closed, activate)
115115
| 2589-2655 | Slicer on-disk credential reader (`anycubic:read-slicer-config`) — keyless deobfuscation | `_acuDeobfuscate`, `_acuConfCandidates` |
116116
| 2656-2723 | LAN scan: TCP probe (`anycubic:tcp-probe`), FLV liveness (`anycubic:flv-probe`, accepts 200/206), `/info` (`anycubic:http-info`) | — |
117117

118-
## Anycubic cloud — REST + cloud MQTT (L2732-3135)
118+
## Anycubic cloud — REST + cloud MQTT (L2732-3350)
119119

120120
| L | What | Anchors / IPC |
121121
|---|---|---|

‎WORKLOG.md‎

Lines changed: 19 additions & 19 deletions
Large diffs are not rendered by default.

‎assets/svg/icons/icon_backup.svg‎

Lines changed: 1 addition & 0 deletions
Loading

‎assets/svg/icons/icon_recycle.svg‎

Lines changed: 1 addition & 0 deletions
Loading

‎data/whatsnew.json‎

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4072,5 +4072,135 @@
40724072
}
40734073
}
40744074
]
4075+
},
4076+
"1.10.29": {
4077+
"date": "2026-07-03",
4078+
"items": [
4079+
{
4080+
"icon": "recycle",
4081+
"title": {
4082+
"en": "Give your chips a second life",
4083+
"fr": "Offre une seconde vie à tes puces",
4084+
"de": "Gib deinen Chips ein zweites Leben",
4085+
"es": "Dales una segunda vida a tus chips",
4086+
"it": "Dai una seconda vita ai tuoi chip",
4087+
"zh": "让你的芯片焕发第二春",
4088+
"pt": "Dá uma segunda vida aos teus chips",
4089+
"pt-pt": "Dá uma segunda vida aos teus chips",
4090+
"pl": "Daj swoim chipom drugie życie"
4091+
},
4092+
"body": {
4093+
"en": "Wipe a chip back to a fresh TigerTag, turn it into a plain NFC tag, or restore a TigerTag+ just as it was. Your tags, reusable.",
4094+
"fr": "Remets une puce à neuf en TigerTag, transforme-la en tag NFC tout simple, ou restaure un TigerTag+ comme au premier jour. Tes puces, réutilisables.",
4095+
"de": "Setz einen Chip auf ein frisches TigerTag zurück, mach ein simples NFC-Tag draus oder stell ein TigerTag+ wie neu wieder her. Deine Chips, wiederverwendbar.",
4096+
"es": "Deja un chip como un TigerTag nuevo, conviértelo en una etiqueta NFC normal o restaura un TigerTag+ tal cual estaba. Tus chips, reutilizables.",
4097+
"it": "Riporta un chip a un TigerTag nuovo, trasformalo in un semplice tag NFC o ripristina un TigerTag+ com'era. I tuoi chip, riutilizzabili.",
4098+
"zh": "把芯片重置成全新的 TigerTag,变成普通 NFC 标签,或把 TigerTag+ 原样恢复。你的芯片,可以重复使用。",
4099+
"pt": "Deixa um chip como um TigerTag novo, transforma-o num tag NFC simples ou restaura um TigerTag+ tal como estava. Os teus chips, reutilizáveis.",
4100+
"pt-pt": "Deixa um chip como um TigerTag novo, transforma-o num tag NFC simples ou restaura um TigerTag+ tal como estava. Os teus chips, reutilizáveis.",
4101+
"pl": "Zresetuj chip do świeżego TigerTag, zmień go w zwykły tag NFC albo przywróć TigerTag+ jak nowy. Twoje chipy, wielokrotnego użytku."
4102+
}
4103+
},
4104+
{
4105+
"icon": "printer",
4106+
"title": {
4107+
"en": "Keep your Snapmaker fresh",
4108+
"fr": "Garde ta Snapmaker à jour",
4109+
"de": "Halt deinen Snapmaker aktuell",
4110+
"es": "Mantén tu Snapmaker al día",
4111+
"it": "Tieni la tua Snapmaker aggiornata",
4112+
"zh": "让你的 Snapmaker 保持最新",
4113+
"pt": "Mantém a tua Snapmaker em dia",
4114+
"pt-pt": "Mantém a tua Snapmaker em dia",
4115+
"pl": "Trzymaj swojego Snapmakera w formie"
4116+
},
4117+
"body": {
4118+
"en": "We'll tell you when newer firmware is out for your Snapmaker U1, hand you the right download, and show whether it's already up to date.",
4119+
"fr": "On te prévient quand un nouveau firmware sort pour ta Snapmaker U1, on te donne le bon téléchargement, et on te dit si elle est déjà à jour.",
4120+
"de": "Wir sagen dir Bescheid, wenn's neue Firmware für deinen Snapmaker U1 gibt, geben dir den richtigen Download und zeigen, ob er schon aktuell ist.",
4121+
"es": "Te avisamos cuando sale un firmware nuevo para tu Snapmaker U1, te damos la descarga correcta y te decimos si ya está al día.",
4122+
"it": "Ti avvisiamo quando esce un firmware nuovo per la tua Snapmaker U1, ti diamo il download giusto e ti diciamo se è già aggiornata.",
4123+
"zh": "你的 Snapmaker U1 有新固件时我们会通知你,给你正确的下载链接,并告诉你是否已是最新。",
4124+
"pt": "Avisamos-te quando sai firmware novo para a tua Snapmaker U1, damos-te o download certo e dizemos se já está em dia.",
4125+
"pt-pt": "Avisamos-te quando sai firmware novo para a tua Snapmaker U1, damos-te o download certo e dizemos se já está em dia.",
4126+
"pl": "Damy znać, gdy pojawi się nowy firmware do twojego Snapmakera U1, podamy właściwy plik i pokażemy, czy jest już aktualny."
4127+
}
4128+
},
4129+
{
4130+
"icon": "bell",
4131+
"title": {
4132+
"en": "Now you'll hear it",
4133+
"fr": "Maintenant, tu l'entends",
4134+
"de": "Jetzt hörst du's",
4135+
"es": "Ahora lo oirás",
4136+
"it": "Ora lo senti",
4137+
"zh": "现在你能听到了",
4138+
"pt": "Agora vais ouvir",
4139+
"pt-pt": "Agora vais ouvir",
4140+
"pl": "Teraz to usłyszysz"
4141+
},
4142+
"body": {
4143+
"en": "A little chime when something actually lands — a friend request, someone accepting yours, a firmware update. Silence for the boring startup stuff.",
4144+
"fr": "Un petit son quand il se passe vraiment quelque chose — une demande d'ami, quelqu'un qui accepte la tienne, une mise à jour firmware. Silence pour le blabla du démarrage.",
4145+
"de": "Ein kleiner Ton, wenn wirklich was reinkommt — eine Freundschaftsanfrage, jemand nimmt deine an, ein Firmware-Update. Ruhe beim langweiligen Startkram.",
4146+
"es": "Un tintineo cuando de verdad llega algo — una solicitud de amistad, alguien que acepta la tuya, una actualización de firmware. Silencio para el rollo del arranque.",
4147+
"it": "Un piccolo suono quando arriva davvero qualcosa — una richiesta di amicizia, qualcuno che accetta la tua, un aggiornamento firmware. Silenzio per le noie dell'avvio.",
4148+
"zh": "真正有事发生时来一声轻响——好友请求、有人接受了你的请求、固件更新。启动时那些无聊的事就安静着。",
4149+
"pt": "Um tilintar quando algo chega mesmo — um pedido de amizade, alguém a aceitar o teu, uma atualização de firmware. Silêncio para as chatices do arranque.",
4150+
"pt-pt": "Um tilintar quando algo chega mesmo — um pedido de amizade, alguém a aceitar o teu, uma atualização de firmware. Silêncio para as chatices do arranque.",
4151+
"pl": "Delikatny dźwięk, gdy naprawdę coś przychodzi — zaproszenie do znajomych, ktoś akceptuje twoje, aktualizacja firmware. Cisza dla nudnych rzeczy przy starcie."
4152+
}
4153+
},
4154+
{
4155+
"icon": "info",
4156+
"title": {
4157+
"en": "Tools that explain themselves",
4158+
"fr": "Des outils qui s'expliquent",
4159+
"de": "Werkzeuge, die sich selbst erklären",
4160+
"es": "Herramientas que se explican solas",
4161+
"it": "Strumenti che si spiegano da soli",
4162+
"zh": "会自我说明的工具",
4163+
"pt": "Ferramentas que se explicam",
4164+
"pt-pt": "Ferramentas que se explicam",
4165+
"pl": "Narzędzia, które tłumaczą się same"
4166+
},
4167+
"body": {
4168+
"en": "Every action in a spool's toolbox now has a little ⓘ — hover it and it tells you, in plain words, what it does.",
4169+
"fr": "Chaque action de la boîte à outils d'une bobine a maintenant un petit ⓘ — survole-le et il te dit, en clair, ce qu'il fait.",
4170+
"de": "Jede Aktion in der Werkzeugkiste einer Spule hat jetzt ein kleines ⓘ — fahr drüber und es sagt dir in Klartext, was es macht.",
4171+
"es": "Cada acción en la caja de herramientas de una bobina tiene ahora una pequeña ⓘ — pasa el ratón y te dice, en claro, qué hace.",
4172+
"it": "Ogni azione nella cassetta degli attrezzi di una bobina ha ora una piccola ⓘ — passaci sopra e ti dice, in parole semplici, cosa fa.",
4173+
"zh": "耗材工具箱里的每个操作现在都有一个小小的 ⓘ——把鼠标移上去,它就用大白话告诉你它是干嘛的。",
4174+
"pt": "Cada ação na caixa de ferramentas de uma bobina tem agora um pequeno ⓘ — passa o rato e ele diz-te, sem rodeios, o que faz.",
4175+
"pt-pt": "Cada ação na caixa de ferramentas de uma bobina tem agora um pequeno ⓘ — passa o rato e ele diz-te, sem rodeios, o que faz.",
4176+
"pl": "Każda akcja w przyborniku szpuli ma teraz małe ⓘ — najedź na nie, a powie ci wprost, co robi."
4177+
}
4178+
},
4179+
{
4180+
"icon": "backup",
4181+
"title": {
4182+
"en": "Spot your backed-up spools",
4183+
"fr": "Repère tes bobines sauvegardées",
4184+
"de": "Erkenn deine gesicherten Spulen",
4185+
"es": "Localiza tus bobinas con copia",
4186+
"it": "Individua le bobine col backup",
4187+
"zh": "一眼认出已备份的耗材",
4188+
"pt": "Vê logo as tuas bobinas com cópia",
4189+
"pt-pt": "Vê logo as tuas bobinas com cópia",
4190+
"pl": "Rozpoznaj szpule z kopią"
4191+
},
4192+
"body": {
4193+
"en": "A green shield marks every TigerTag+ whose signature is safely backed up, so you can see at a glance which ones you can always restore.",
4194+
"fr": "Un bouclier vert marque chaque TigerTag+ dont la signature est bien sauvegardée, pour voir d'un coup d'œil lesquels tu peux toujours restaurer.",
4195+
"de": "Ein grüner Schild markiert jedes TigerTag+, dessen Signatur sicher gesichert ist — so siehst du auf einen Blick, welche du immer wiederherstellen kannst.",
4196+
"es": "Un escudo verde marca cada TigerTag+ cuya firma está bien guardada, para ver de un vistazo cuáles puedes restaurar siempre.",
4197+
"it": "Uno scudo verde segna ogni TigerTag+ con la firma al sicuro, così vedi al volo quali puoi sempre ripristinare.",
4198+
"zh": "绿色盾牌标出每个签名已安全备份的 TigerTag+,一眼就知道哪些随时能恢复。",
4199+
"pt": "Um escudo verde marca cada TigerTag+ com a assinatura bem guardada, para veres num relance quais podes sempre restaurar.",
4200+
"pt-pt": "Um escudo verde marca cada TigerTag+ com a assinatura bem guardada, para veres num relance quais podes sempre restaurar.",
4201+
"pl": "Zielona tarcza oznacza każdy TigerTag+, którego podpis jest bezpiecznie zapisany — od razu widzisz, które zawsze przywrócisz."
4202+
}
4203+
}
4204+
]
40754205
}
40764206
}

‎docs/i18n-keys.md‎

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,15 @@
4646
| `sortBy` | Grid-view sort dropdown title |
4747
| `sortDir` | Grid-view sort direction toggle title |
4848
| `filterAllTags` | Tag filter dropdown — "All tags" default |
49+
| `toolRepairPlus` / `toolRepairPlusTip` | Toolbox "Restore TigerTag+" action + tooltip (keys kept as `Repair*`; label reads "Restore") |
50+
| `toolRepairNoChip` / `toolRepairNoBackup` | Restore guard messages (chip not on reader / no backup) |
51+
| `toolRepairWriting` / `toolRepairDone` / `toolRepairAlready` / `toolRepairFailed` | Restore progress/result states |
52+
| `toolFormatRfid` / `toolFormatRfid2` / `toolFormatRfidTip` | Toolbox "Erase the {{tier}}" action — 1 chip / 2 chips label (`{{tier}}` = TigerTag / TigerTag+) + ⓘ info bubble (writes the official TigerTag Init payload → reusable TigerTag) |
53+
| `toolFormatWriting` / `toolFormatDone` / `toolFormatFailed` | Reset progress/result states (no-chip reuses `toolRepairNoChip`) |
54+
| `toolEraseRfid` / `toolEraseRfid2` / `toolEraseRfidTip` | Toolbox "Recycle to NFC" action — 1 chip / 2 chips label + ⓘ info bubble (writes the SDK blank-NDEF payload → generic NFC tag) |
55+
| `toolEraseWriting` / `toolEraseDone` / `toolEraseFailed` | Erase progress/result states (no-chip reuses `toolRepairNoChip`) |
56+
| `toolMeasureColorTip` / `toolMeasureTdTip` / `toolEditImgTip` / `twinLinkActionTip` / `toolRemoveFromRackTip` / `encodeCloudTip` / `burnRfidTip` / `toolRefreshApiTip` / `toolDuplicateTip` / `twinLinkUnlinkHint` | ⓘ info-bubble text for the remaining toolbox actions (one per button) |
57+
| `backupBadge` | "Signature backed up" tooltip on the shield-check badge |
4958

5059
### Account management
5160
| Key | Purpose |
@@ -184,7 +193,7 @@
184193
`linkYt` `linkFood`
185194

186195
### Detail rows
187-
`detUid` `detSeries` `detBrand` `detMaterial` `detDiameter` `detTagType` `detSku` `detBarcode` `detContainer` `detTwin` `detUpdated` `detManufactured`
196+
`detUid` `detProductId` (TigerTag+ `id_product`, shown under UID) `detSeries` `detBrand` `detMaterial` `detDiameter` `detTagType` `detSku` `detBarcode` `detContainer` `detTwin` `detUpdated` `detManufactured`
188197

189198
### Badges
190199
`badgeRefill` `badgeRecycled` `badgeFilled` `badgeDeleted`
@@ -222,4 +231,10 @@
222231
| `friendRequestSent` | Success message after sending |
223232
| `friendRegenConfirm` | (kept in locales, no longer used in UI — reserved) |
224233

234+
### Notification center (local notices)
235+
| Key | Purpose |
236+
|-----|---------|
237+
| `notifPaxxTitle` | Paxx firmware release notice title (Snapmaker owners) |
238+
| `notifPaxxText {{version}}` | Paxx release notice body — click opens the .bin download |
239+
225240
> ⚠️ This table is a snapshot and can drift as keys are added. The authoritative key set is the locale files themselves; `npm run i18n:check` is the source of truth for "do all 9 locales agree". When you add keys via `npm run i18n:add`, append them to the relevant section here too.

0 commit comments

Comments
 (0)