feat: persist global track visibility status and metronome status

This commit is contained in:
Xiaohan-Tian
2026-06-02 23:25:30 -07:00
parent 6b0de74acd
commit 528e4ca7f9
9 changed files with 219 additions and 43 deletions
@@ -14,6 +14,7 @@ import { upgradeToV12 } from './upgradeToV12';
import { upgradeToV13 } from './upgradeToV13';
import { upgradeToV14 } from './upgradeToV14';
import { upgradeToV15 } from './upgradeToV15';
import { upgradeToV16 } from './upgradeToV16';
/**
* Upgrade the given project to the latest structure version, one version at a time.
@@ -93,6 +94,10 @@ export function upgradeProjectToLatest(project: KGProject): KGProject {
workingProject = upgradeToV15(workingProject);
break;
}
case 16: {
workingProject = upgradeToV16(workingProject);
break;
}
default: {
// If an upgrader is missing, throw to prevent loading incompatible structures
throw new Error(`No upgrader found for project structure version ${nextVersion}`);
@@ -0,0 +1,26 @@
import { describe, expect, it } from 'vitest';
import { KGProject } from '../KGProject';
import { upgradeProjectToLatest } from './KGProjectUpgrader';
import { upgradeToV16 } from './upgradeToV16';
describe('upgradeToV16', () => {
it('defaults persisted UI/audio toggles to false for legacy projects', () => {
const project = new KGProject('Legacy', 32, 0, 125, undefined, undefined, undefined, undefined, [0, 0], 1, [], 15, 1, []);
upgradeToV16(project);
expect(project.getProjectStructureVersion()).toBe(16);
expect(project.getShowGlobalTracks()).toBe(false);
expect(project.getIsMetronomeEnabled()).toBe(false);
});
it('preserves existing persisted toggle values through the main upgrader path', () => {
const project = new KGProject('Legacy', 32, 0, 125, undefined, undefined, undefined, undefined, [0, 0], 1, [], 15, 1, [], true, true);
const upgraded = upgradeProjectToLatest(project);
expect(upgraded.getProjectStructureVersion()).toBe(KGProject.CURRENT_PROJECT_STRUCTURE_VERSION);
expect(upgraded.getShowGlobalTracks()).toBe(true);
expect(upgraded.getIsMetronomeEnabled()).toBe(true);
});
});
+17
View File
@@ -0,0 +1,17 @@
import { KGProject } from '../KGProject';
export function upgradeToV16(project: KGProject): KGProject {
try {
if (typeof project.getShowGlobalTracks() !== 'boolean') {
project.setShowGlobalTracks(false);
}
if (typeof project.getIsMetronomeEnabled() !== 'boolean') {
project.setIsMetronomeEnabled(false);
}
} finally {
project.setProjectStructureVersion(16);
}
return project;
}