Skip to content

Commit baa7d21

Browse files
committed
entity migration fixes, strings
1 parent 49d8c30 commit baa7d21

File tree

8 files changed

+243
-223
lines changed

8 files changed

+243
-223
lines changed

custom_components/openai_tts/__init__.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,29 @@ async def async_migrate_entry(hass: HomeAssistant, config_entry: ConfigEntry) ->
263263
# Clear migration flag
264264
hass.data[DOMAIN].pop(f"{config_entry.entry_id}_migrating", None)
265265

266+
# Fix device registry associations after migration
267+
# Devices should only be associated with subentries, not parent entries
268+
device_reg = dr.async_get(hass)
269+
entity_reg = er.async_get(hass)
270+
271+
# Find all entities for this unique_id
272+
entities = [
273+
entity for entity in entity_reg.entities.values()
274+
if entity.unique_id == original_unique_id and entity.platform == DOMAIN
275+
]
276+
277+
# Update device associations to only reference the subentry
278+
for entity in entities:
279+
if entity.device_id:
280+
device = device_reg.async_get(entity.device_id)
281+
if device and config_entry.entry_id in device.config_entries:
282+
# Remove parent association and ensure only subentry is associated
283+
_LOGGER.debug("Updating device %s associations after migration", device.id)
284+
device_reg.async_update_device(
285+
device.id,
286+
remove_config_entry_id=config_entry.entry_id
287+
)
288+
266289
# Don't schedule reload - let Home Assistant handle it
267290
# The entry will be reloaded automatically after migration
268291

custom_components/openai_tts/config_flow.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,6 @@ async def async_step_user(self, user_input: dict[str, Any] | None = None) -> Con
101101
step_id="user",
102102
data_schema=self.data_schema,
103103
errors=errors,
104-
description_placeholders={
105-
"existing_entry": entry.title
106-
},
107104
)
108105

109106
# Use API key as the unique identifier (hashed for privacy)

custom_components/openai_tts/strings.json

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,29 @@
88
"api_key": "API Key",
99
"url": "API Endpoint (optional)"
1010
}
11+
},
12+
"reconfigure": {
13+
"title": "Reconfigure OpenAI TTS",
14+
"description": "Update API credentials for this integration.",
15+
"data": {
16+
"api_key": "API Key",
17+
"url": "API Endpoint"
18+
}
1119
}
1220
},
1321
"error": {
1422
"wrong_api_key": "Invalid API key. Please enter a valid API key.",
15-
"duplicate_api_key": "An entry with this API key already exists: {existing_entry}. Each integration entry must have a unique API key."
23+
"duplicate_api_key": "An entry with this API key already exists. Each integration entry must have a unique API key."
1624
},
1725
"abort": {
18-
"already_configured": "Device is already configured"
26+
"already_configured": "This instance is already configured",
27+
"reconfigure_successful": "Configuration updated successfully"
1928
}
2029
},
2130
"options": {
2231
"abort": {
23-
"no_options_available": "This integration entry has no configurable options. Use the subentries to configure individual TTS agents."
32+
"no_options_available": "This integration entry has no configurable options. Use the subentries to configure individual TTS agents.",
33+
"not_supported": "Options flow is not supported for this entry"
2434
},
2535
"step": {
2636
"init": {
@@ -31,11 +41,11 @@
3141
"speed": "Speed (0.25 to 4.0)",
3242
"model": "Model",
3343
"voice": "Voice",
34-
"instructions": "Instructions (check https://www.openai.fm/ )",
44+
"enable_instructions": "Enable custom instructions",
45+
"instructions": "Instructions (leave empty to disable)",
3546
"normalize_audio": "Enable loudness for generated audio (uses more CPU)",
3647
"volume_restore": "Restore speaker volumes after TTS playback",
37-
"pause_playback": "Pause media during TTS (Sonos only)",
38-
"enable_instructions": "Enable custom instructions"
48+
"pause_playback": "Pause media during TTS (Sonos only)"
3949
}
4050
}
4151
}

custom_components/openai_tts/translations/cs.json

Lines changed: 57 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,19 @@
22
"config": {
33
"step": {
44
"user": {
5-
"title": "Přidat OpenAI TTS",
6-
"description": "Nastavte přihlašovací údaje OpenAI API pro TTS.",
5+
"title": "Přidat OpenAI TTS službu",
6+
"description": "Nastavte OpenAI TTS integraci pro vytvoření TTS agentů.",
77
"data": {
88
"api_key": "API klíč",
9-
"url": "Endpoint URL"
10-
},
11-
"data_description": {
12-
"api_key": "Váš OpenAI API klíč",
13-
"url": "Základní URL pro OpenAI API (výchozí: https://api.openai.com/v1/audio/speech)"
9+
"url": "API Endpoint (volitelné)"
1410
}
1511
},
1612
"reconfigure": {
1713
"title": "Překonfigurovat OpenAI TTS",
1814
"description": "Aktualizovat přihlašovací údaje API pro tuto integraci.",
1915
"data": {
2016
"api_key": "API klíč",
21-
"url": "Endpoint URL"
17+
"url": "API Endpoint"
2218
}
2319
}
2420
},
@@ -28,77 +24,75 @@
2824
},
2925
"error": {
3026
"wrong_api_key": "Neplatný API klíč. Zadejte prosím platný API klíč.",
31-
"duplicate_api_key": "Integrace s tímto API klíčem již existuje: {existing_entry}",
32-
"no_subentries": "Nejsou k dispozici žádné TTS agenty. Přidejte agenta TTS."
27+
"duplicate_api_key": "Integrace s tímto API klíčem již existuje. Každá integrace musí mít jedinečný API klíč."
3328
}
3429
},
35-
"subentry": {
36-
"step": {
37-
"user": {
38-
"title": "Přidat TTS agenta",
39-
"description": "Vytvořte nového TTS agenta s vlastní konfigurací.",
40-
"data": {
41-
"profile_name": "Název profilu",
42-
"model": "Model",
43-
"voice": "Hlas",
44-
"instructions": "Pokyny",
45-
"speed": "Rychlost",
46-
"chime": "Zvukový signál před řečí",
47-
"chime_sound": "Zvuk signálu",
48-
"normalize_audio": "Normalizovat audio"
49-
},
50-
"data_description": {
51-
"profile_name": "Jedinečný název pro tento TTS profil",
52-
"model": "Model OpenAI TTS k použití",
53-
"voice": "Hlas k použití pro syntézu řeči",
54-
"instructions": "Volitelné pokyny pro přizpůsobení stylu řeči (viz https://www.openai.fm/)",
55-
"speed": "Rychlost řeči (0,25 až 4,0, kde 1,0 je výchozí)",
56-
"chime": "Přehrát zvukový signál před řečí",
57-
"chime_sound": "Zvukový soubor k použití pro signál",
58-
"normalize_audio": "Zvýšit hlasitost generovaného audia"
59-
}
30+
"config_subentries": {
31+
"profile": {
32+
"entry_type": "TTS agent",
33+
"initiate_flow": {
34+
"user": "Přidat TTS agenta",
35+
"reconfigure": "Překonfigurovat TTS agenta"
6036
},
61-
"reconfigure": {
62-
"title": "Překonfigurovat TTS agenta",
63-
"description": "Aktualizovat nastavení pro tohoto TTS agenta.",
64-
"data": {
65-
"model": "Model",
66-
"voice": "Hlas",
67-
"instructions": "Pokyny",
68-
"speed": "Rychlost",
69-
"chime": "Zvukový signál před řečí",
70-
"chime_sound": "Zvuk signálu",
71-
"normalize_audio": "Normalizovat audio"
37+
"step": {
38+
"user": {
39+
"title": "Přidat TTS agenta",
40+
"description": "Vytvořte nového TTS agenta s vlastním nastavením hlasu",
41+
"data": {
42+
"profile_name": "Název profilu",
43+
"model": "Model",
44+
"voice": "Hlas",
45+
"speed": "Rychlost (0,25 až 4,0)",
46+
"chime": "Povolit zvukový signál",
47+
"chime_sound": "Zvuk signálu",
48+
"normalize_audio": "Normalizovat hlasitost audia",
49+
"instructions": "Vlastní pokyny (volitelné, pouze pro podporované modely)"
50+
}
7251
},
73-
"data_description": {
74-
"model": "Model OpenAI TTS k použití",
75-
"voice": "Hlas k použití pro syntézu řeči",
76-
"instructions": "Volitelné pokyny pro přizpůsobení stylu řeči (viz https://www.openai.fm/)",
77-
"speed": "Rychlost řeči (0,25 až 4,0, kde 1,0 je výchozí)",
78-
"chime": "Přehrát zvukový signál před řečí",
79-
"chime_sound": "Zvukový soubor k použití pro signál",
80-
"normalize_audio": "Zvýšit hlasitost generovaného audia"
52+
"reconfigure": {
53+
"title": "Aktualizovat TTS agenta",
54+
"description": "Upravit nastavení tohoto TTS agenta",
55+
"data": {
56+
"model": "Model",
57+
"voice": "Hlas",
58+
"speed": "Rychlost (0,25 až 4,0)",
59+
"chime": "Povolit zvukový signál",
60+
"chime_sound": "Zvuk signálu",
61+
"normalize_audio": "Normalizovat hlasitost audia",
62+
"instructions": "Vlastní pokyny (volitelné, pouze pro podporované modely)"
63+
}
8164
}
65+
},
66+
"error": {
67+
"already_exists": "Profil s tímto názvem již existuje"
68+
},
69+
"abort": {
70+
"already_configured": "Profil je již nakonfigurován",
71+
"reconfigure_successful": "TTS agent byl úspěšně překonfigurován",
72+
"subentry_not_found": "TTS agent nebyl nalezen"
8273
}
83-
},
84-
"error": {
85-
"subentry_not_found": "Podpoložka nenalezena"
8674
}
8775
},
8876
"options": {
77+
"abort": {
78+
"no_options_available": "Tato integrace nemá konfigurovatelné možnosti. Pro konfiguraci jednotlivých TTS agentů použijte podpoložky.",
79+
"not_supported": "Tok možností není pro tuto položku podporován"
80+
},
8981
"step": {
9082
"init": {
91-
"title": "Nastavte TTS možnosti",
83+
"title": "Konfigurovat možnosti TTS",
84+
"description": "Konfigurovat nastavení pro tento TTS profil",
9285
"data": {
93-
"chime": "Povolte zvukový signál před řečí (užitečné pro oznámení)",
94-
"chime_sound": "Zvuk zvukového signálu",
86+
"chime": "Povolit zvukový signál před řečí (užitečné pro oznámení)",
87+
"chime_sound": "Zvuk signálu",
9588
"speed": "Rychlost (0,25 až 4,0)",
9689
"model": "Model",
9790
"voice": "Hlas",
98-
"instructions": "Pokyny (viz https://www.openai.fm/)",
99-
"normalize_audio": "Povolte zvýšení hlasitosti generovaného audia (vyžaduje více CPU)",
91+
"enable_instructions": "Povolit vlastní pokyny",
92+
"instructions": "Pokyny (ponechte prázdné pro deaktivaci)",
93+
"normalize_audio": "Povolit zvýšení hlasitosti generovaného audia (vyžaduje více CPU)",
10094
"volume_restore": "Obnovit hlasitost reproduktorů po přehrávání TTS",
101-
"pause_playback": "Pozastavit přehrávání médií během TTS (pouze Sonos)"
95+
"pause_playback": "Pozastavit média během TTS (pouze Sonos)"
10296
}
10397
}
10498
}

0 commit comments

Comments
 (0)