Fix json overwriting if you have >1 PS4 connected (#35778)
This commit is contained in:
parent
e94228fddf
commit
2f6ffe7068
4 changed files with 16 additions and 16 deletions
|
@ -157,9 +157,9 @@ def format_unique_id(creds, mac_address):
|
||||||
return f"{mac_address}_{suffix}"
|
return f"{mac_address}_{suffix}"
|
||||||
|
|
||||||
|
|
||||||
def load_games(hass: HomeAssistantType) -> dict:
|
def load_games(hass: HomeAssistantType, unique_id: str) -> dict:
|
||||||
"""Load games for sources."""
|
"""Load games for sources."""
|
||||||
g_file = hass.config.path(GAMES_FILE)
|
g_file = hass.config.path(GAMES_FILE.format(unique_id))
|
||||||
try:
|
try:
|
||||||
games = load_json(g_file, dict)
|
games = load_json(g_file, dict)
|
||||||
except HomeAssistantError as error:
|
except HomeAssistantError as error:
|
||||||
|
@ -172,20 +172,20 @@ def load_games(hass: HomeAssistantType) -> dict:
|
||||||
|
|
||||||
# If file exists
|
# If file exists
|
||||||
if os.path.isfile(g_file):
|
if os.path.isfile(g_file):
|
||||||
games = _reformat_data(hass, games)
|
games = _reformat_data(hass, games, unique_id)
|
||||||
return games
|
return games
|
||||||
|
|
||||||
|
|
||||||
def save_games(hass: HomeAssistantType, games: dict):
|
def save_games(hass: HomeAssistantType, games: dict, unique_id: str):
|
||||||
"""Save games to file."""
|
"""Save games to file."""
|
||||||
g_file = hass.config.path(GAMES_FILE)
|
g_file = hass.config.path(GAMES_FILE.format(unique_id))
|
||||||
try:
|
try:
|
||||||
save_json(g_file, games)
|
save_json(g_file, games)
|
||||||
except OSError as error:
|
except OSError as error:
|
||||||
_LOGGER.error("Could not save game list, %s", error)
|
_LOGGER.error("Could not save game list, %s", error)
|
||||||
|
|
||||||
|
|
||||||
def _reformat_data(hass: HomeAssistantType, games: dict) -> dict:
|
def _reformat_data(hass: HomeAssistantType, games: dict, unique_id: str) -> dict:
|
||||||
"""Reformat data to correct format."""
|
"""Reformat data to correct format."""
|
||||||
data_reformatted = False
|
data_reformatted = False
|
||||||
|
|
||||||
|
@ -204,7 +204,7 @@ def _reformat_data(hass: HomeAssistantType, games: dict) -> dict:
|
||||||
_LOGGER.debug("Reformatting media data for item: %s, %s", game, data)
|
_LOGGER.debug("Reformatting media data for item: %s, %s", game, data)
|
||||||
|
|
||||||
if data_reformatted:
|
if data_reformatted:
|
||||||
save_games(hass, games)
|
save_games(hass, games, unique_id)
|
||||||
return games
|
return games
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ DEFAULT_NAME = "PlayStation 4"
|
||||||
DEFAULT_REGION = "United States"
|
DEFAULT_REGION = "United States"
|
||||||
DEFAULT_ALIAS = "Home-Assistant"
|
DEFAULT_ALIAS = "Home-Assistant"
|
||||||
DOMAIN = "ps4"
|
DOMAIN = "ps4"
|
||||||
GAMES_FILE = ".ps4-games.json"
|
GAMES_FILE = ".ps4-games.{}.json"
|
||||||
PS4_DATA = "ps4_data"
|
PS4_DATA = "ps4_data"
|
||||||
|
|
||||||
COMMANDS = ("up", "down", "right", "left", "enter", "back", "option", "ps", "ps_hold")
|
COMMANDS = ("up", "down", "right", "left", "enter", "back", "option", "ps", "ps_hold")
|
||||||
|
|
|
@ -163,7 +163,7 @@ class PS4Device(MediaPlayerEntity):
|
||||||
status = self._ps4.status
|
status = self._ps4.status
|
||||||
|
|
||||||
if status is not None:
|
if status is not None:
|
||||||
self._games = load_games(self.hass)
|
self._games = load_games(self.hass, self._unique_id)
|
||||||
if self._games:
|
if self._games:
|
||||||
self.get_source_list()
|
self.get_source_list()
|
||||||
|
|
||||||
|
@ -300,7 +300,7 @@ class PS4Device(MediaPlayerEntity):
|
||||||
self._media_image,
|
self._media_image,
|
||||||
self._media_type,
|
self._media_type,
|
||||||
)
|
)
|
||||||
self._games = load_games(self.hass)
|
self._games = load_games(self.hass, self._unique_id)
|
||||||
|
|
||||||
self.get_source_list()
|
self.get_source_list()
|
||||||
|
|
||||||
|
@ -324,7 +324,7 @@ class PS4Device(MediaPlayerEntity):
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
games.update(game)
|
games.update(game)
|
||||||
save_games(self.hass, games)
|
save_games(self.hass, games, self._unique_id)
|
||||||
|
|
||||||
async def async_get_device_info(self, status):
|
async def async_get_device_info(self, status):
|
||||||
"""Set device info for registry."""
|
"""Set device info for registry."""
|
||||||
|
|
|
@ -201,7 +201,7 @@ def test_games_reformat_to_dict(hass):
|
||||||
), patch("homeassistant.components.ps4.save_json", side_effect=MagicMock()), patch(
|
), patch("homeassistant.components.ps4.save_json", side_effect=MagicMock()), patch(
|
||||||
"os.path.isfile", return_value=True
|
"os.path.isfile", return_value=True
|
||||||
):
|
):
|
||||||
mock_games = ps4.load_games(hass)
|
mock_games = ps4.load_games(hass, MOCK_ENTRY_ID)
|
||||||
|
|
||||||
# New format is a nested dict.
|
# New format is a nested dict.
|
||||||
assert isinstance(mock_games, dict)
|
assert isinstance(mock_games, dict)
|
||||||
|
@ -223,7 +223,7 @@ def test_load_games(hass):
|
||||||
), patch("homeassistant.components.ps4.save_json", side_effect=MagicMock()), patch(
|
), patch("homeassistant.components.ps4.save_json", side_effect=MagicMock()), patch(
|
||||||
"os.path.isfile", return_value=True
|
"os.path.isfile", return_value=True
|
||||||
):
|
):
|
||||||
mock_games = ps4.load_games(hass)
|
mock_games = ps4.load_games(hass, MOCK_ENTRY_ID)
|
||||||
|
|
||||||
assert isinstance(mock_games, dict)
|
assert isinstance(mock_games, dict)
|
||||||
|
|
||||||
|
@ -242,7 +242,7 @@ def test_loading_games_returns_dict(hass):
|
||||||
), patch("homeassistant.components.ps4.save_json", side_effect=MagicMock()), patch(
|
), patch("homeassistant.components.ps4.save_json", side_effect=MagicMock()), patch(
|
||||||
"os.path.isfile", return_value=True
|
"os.path.isfile", return_value=True
|
||||||
):
|
):
|
||||||
mock_games = ps4.load_games(hass)
|
mock_games = ps4.load_games(hass, MOCK_ENTRY_ID)
|
||||||
|
|
||||||
assert isinstance(mock_games, dict)
|
assert isinstance(mock_games, dict)
|
||||||
assert not mock_games
|
assert not mock_games
|
||||||
|
@ -252,7 +252,7 @@ def test_loading_games_returns_dict(hass):
|
||||||
), patch("homeassistant.components.ps4.save_json", side_effect=MagicMock()), patch(
|
), patch("homeassistant.components.ps4.save_json", side_effect=MagicMock()), patch(
|
||||||
"os.path.isfile", return_value=True
|
"os.path.isfile", return_value=True
|
||||||
):
|
):
|
||||||
mock_games = ps4.load_games(hass)
|
mock_games = ps4.load_games(hass, MOCK_ENTRY_ID)
|
||||||
|
|
||||||
assert isinstance(mock_games, dict)
|
assert isinstance(mock_games, dict)
|
||||||
assert not mock_games
|
assert not mock_games
|
||||||
|
@ -260,7 +260,7 @@ def test_loading_games_returns_dict(hass):
|
||||||
with patch("homeassistant.components.ps4.load_json", return_value=[]), patch(
|
with patch("homeassistant.components.ps4.load_json", return_value=[]), patch(
|
||||||
"homeassistant.components.ps4.save_json", side_effect=MagicMock()
|
"homeassistant.components.ps4.save_json", side_effect=MagicMock()
|
||||||
), patch("os.path.isfile", return_value=True):
|
), patch("os.path.isfile", return_value=True):
|
||||||
mock_games = ps4.load_games(hass)
|
mock_games = ps4.load_games(hass, MOCK_ENTRY_ID)
|
||||||
|
|
||||||
assert isinstance(mock_games, dict)
|
assert isinstance(mock_games, dict)
|
||||||
assert not mock_games
|
assert not mock_games
|
||||||
|
|
Loading…
Add table
Reference in a new issue