diff --git a/client_v2/src/lib/labels/migrateV1.test.ts b/client_v2/src/lib/labels/migrateV1.test.ts index f4746d22..77eca7dd 100644 --- a/client_v2/src/lib/labels/migrateV1.test.ts +++ b/client_v2/src/lib/labels/migrateV1.test.ts @@ -25,6 +25,13 @@ describe('migrateTemplate', () => { expect(migrateTemplate('{filament.spool_weight}')).toBe('{filament.spoolWeight}'); }); + // v1's two tare weights are different fields, and a label that printed the + // spool's own must not silently start printing its filament's (#1013). + it("keeps the spool's own tare weight apart from its filament's", () => { + expect(migrateTemplate('{spool_weight}')).toBe('{spool.spoolWeight}'); + expect(migrateTemplate('{filament.spool_weight}')).toBe('{filament.spoolWeight}'); + }); + it('leaves paths that are already identical in both versions', () => { for (const t of ['{filament.name}', '{filament.material}', '{filament.density}']) { expect(migrateTemplate(t)).toBe(t); diff --git a/client_v2/src/lib/labels/migrateV1.ts b/client_v2/src/lib/labels/migrateV1.ts index 38f92a11..73d71f16 100644 --- a/client_v2/src/lib/labels/migrateV1.ts +++ b/client_v2/src/lib/labels/migrateV1.ts @@ -72,6 +72,10 @@ const PATH_MAP: Record = { remaining_weight: 'spool.remaining', initial_weight: 'spool.initial', used_weight: 'spool.used', + // v1 offered the spool's own tare weight as a bare `spool_weight`. It had no v2 + // equivalent until the spool gained the field back (#1013), so a migrated design + // using it resolved to "?". + spool_weight: 'spool.spoolWeight', // Filament 'filament.spool_weight': 'filament.spoolWeight', 'filament.settings_extruder_temp': 'filament.nozzleTemp', diff --git a/client_v2/src/lib/labels/template.ts b/client_v2/src/lib/labels/template.ts index 3bb780b1..343f7117 100644 --- a/client_v2/src/lib/labels/template.ts +++ b/client_v2/src/lib/labels/template.ts @@ -39,7 +39,10 @@ const RESOLVERS: Record string | number | null | un 'spool.remaining': (b) => fmtNum(b.spool?.remaining), 'spool.initial': (b) => fmtNum(b.spool?.initial), 'spool.used': (b) => (b.spool ? fmtNum(b.spool.initial - b.spool.remaining) : null), + // Both of these fall back to the filament, the way the spool itself does: a + // `spool.*` token has to print the figure that actually applies to that spool. 'spool.price': (b) => fmtNum(b.spool?.price ?? b.filament?.price), + 'spool.spoolWeight': (b) => fmtNum(b.spool?.spoolWeight ?? b.filament?.spoolWeight), 'spool.registered': (b) => b.spool?.registeredLabel, 'spool.firstUsed': (b) => b.spool?.firstUsedLabel, 'spool.lastUsed': (b) => b.spool?.lastUsedLabel, @@ -149,6 +152,7 @@ const FIXED_GROUPS: PlaceholderGroup[] = [ { token: 'spool.remaining', labelKey: m['labels.fields.remainingG'] }, { token: 'spool.initial', labelKey: m['labels.fields.initialG'] }, { token: 'spool.used', labelKey: m['spool.fields.usedWeight'] }, + { token: 'spool.spoolWeight', labelKey: m['spool.fields.spoolWeight'] }, { token: 'spool.price', labelKey: m['spool.fields.price'] }, { token: 'spool.registered', labelKey: m['spool.fields.registered'] }, { token: 'spool.firstUsed', labelKey: m['spool.fields.firstUsed'] },