Migrate players to automatic voice replies
Build and publish frontend / publish (push) Successful in 38s
Build and publish frontend / publish (push) Successful in 38s
This commit is contained in:
+2
-2
@@ -85,8 +85,8 @@
|
||||
let pendingDialogue = null;
|
||||
let latestAssistantText = '';
|
||||
let latestAssistantVoice = {role: 'narrator', voiceIdentity: 'neutral'};
|
||||
const voiceSettingsKey = 'ai-spel.voice-settings.v1';
|
||||
let voiceSettings = window.GameVoice.loadSettings(localStorage, voiceSettingsKey);
|
||||
const voiceSettingsKey = 'ai-spel.voice-settings.v2';
|
||||
let voiceSettings = window.GameVoice.loadSettings(localStorage, voiceSettingsKey, 'ai-spel.voice-settings.v1');
|
||||
let voiceController;
|
||||
let audioContext;
|
||||
let voiceDisclosureAcknowledged = false;
|
||||
|
||||
@@ -180,6 +180,13 @@ test('settings survive reload and invalid storage falls back to accessible defau
|
||||
const defaults = GameVoice.loadSettings(storage, 'new-player');
|
||||
assert.equal(defaults.mode, 'game-voice');
|
||||
assert.equal(defaults.autoSpeak, true);
|
||||
values.set('voice-v1', JSON.stringify({mode: 'screen-reader', autoSpeak: false, rate: 1.4, voiceName: 'Svensk', soundSignals: false}));
|
||||
const migrated = GameVoice.loadSettings(storage, 'voice-v2', 'voice-v1');
|
||||
assert.equal(migrated.mode, 'game-voice');
|
||||
assert.equal(migrated.autoSpeak, true);
|
||||
assert.equal(migrated.rate, 1.4);
|
||||
assert.equal(migrated.voiceName, 'Svensk');
|
||||
assert.equal(migrated.soundSignals, false);
|
||||
const requested = {...GameVoice.DEFAULT_SETTINGS, mode: 'game-voice', autoSpeak: true, rate: 1.5, voiceName: 'Svensk'};
|
||||
assert.equal(GameVoice.saveSettings(storage, 'voice', requested), true);
|
||||
const loaded = GameVoice.loadSettings(storage, 'voice');
|
||||
|
||||
@@ -25,9 +25,22 @@
|
||||
return {command: aliases[command] || 'unknown'};
|
||||
}
|
||||
|
||||
function loadSettings(storage, key) {
|
||||
function loadSettings(storage, key, legacyKey) {
|
||||
try {
|
||||
const stored = JSON.parse(storage.getItem(key) || '{}');
|
||||
const current = storage.getItem(key);
|
||||
if (!current && legacyKey) {
|
||||
const legacy = JSON.parse(storage.getItem(legacyKey) || '{}');
|
||||
const migrated = {
|
||||
...DEFAULT_SETTINGS,
|
||||
rate: legacy.rate,
|
||||
voiceName: legacy.voiceName,
|
||||
speakerProfiles: legacy.speakerProfiles,
|
||||
soundSignals: legacy.soundSignals,
|
||||
};
|
||||
saveSettings(storage, key, migrated);
|
||||
return migrated;
|
||||
}
|
||||
const stored = JSON.parse(current || '{}');
|
||||
const settings = {...DEFAULT_SETTINGS, ...stored};
|
||||
if (!['screen-reader', 'game-voice', 'text-only'].includes(settings.mode)) settings.mode = DEFAULT_SETTINGS.mode;
|
||||
settings.rate = Math.min(2, Math.max(0.5, Number(settings.rate) || 1));
|
||||
|
||||
Reference in New Issue
Block a user