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 pendingDialogue = null;
|
||||||
let latestAssistantText = '';
|
let latestAssistantText = '';
|
||||||
let latestAssistantVoice = {role: 'narrator', voiceIdentity: 'neutral'};
|
let latestAssistantVoice = {role: 'narrator', voiceIdentity: 'neutral'};
|
||||||
const voiceSettingsKey = 'ai-spel.voice-settings.v1';
|
const voiceSettingsKey = 'ai-spel.voice-settings.v2';
|
||||||
let voiceSettings = window.GameVoice.loadSettings(localStorage, voiceSettingsKey);
|
let voiceSettings = window.GameVoice.loadSettings(localStorage, voiceSettingsKey, 'ai-spel.voice-settings.v1');
|
||||||
let voiceController;
|
let voiceController;
|
||||||
let audioContext;
|
let audioContext;
|
||||||
let voiceDisclosureAcknowledged = false;
|
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');
|
const defaults = GameVoice.loadSettings(storage, 'new-player');
|
||||||
assert.equal(defaults.mode, 'game-voice');
|
assert.equal(defaults.mode, 'game-voice');
|
||||||
assert.equal(defaults.autoSpeak, true);
|
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'};
|
const requested = {...GameVoice.DEFAULT_SETTINGS, mode: 'game-voice', autoSpeak: true, rate: 1.5, voiceName: 'Svensk'};
|
||||||
assert.equal(GameVoice.saveSettings(storage, 'voice', requested), true);
|
assert.equal(GameVoice.saveSettings(storage, 'voice', requested), true);
|
||||||
const loaded = GameVoice.loadSettings(storage, 'voice');
|
const loaded = GameVoice.loadSettings(storage, 'voice');
|
||||||
|
|||||||
@@ -25,9 +25,22 @@
|
|||||||
return {command: aliases[command] || 'unknown'};
|
return {command: aliases[command] || 'unknown'};
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadSettings(storage, key) {
|
function loadSettings(storage, key, legacyKey) {
|
||||||
try {
|
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};
|
const settings = {...DEFAULT_SETTINGS, ...stored};
|
||||||
if (!['screen-reader', 'game-voice', 'text-only'].includes(settings.mode)) settings.mode = DEFAULT_SETTINGS.mode;
|
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));
|
settings.rate = Math.min(2, Math.max(0.5, Number(settings.rate) || 1));
|
||||||
|
|||||||
Reference in New Issue
Block a user