Made the navigation sounds loading more robust to handle incomplete theme sets.

Also improved some log messages related to the navigation sounds.
This commit is contained in:
Leon Styhre 2021-03-21 15:42:13 +01:00
parent 26b593455e
commit 1ae88c93d7
2 changed files with 42 additions and 11 deletions

View file

@ -881,10 +881,19 @@ void ViewController::preload()
(*it)->getIndex()->resetFilters(); (*it)->getIndex()->resetFilters();
getGameListView(*it); getGameListView(*it);
} }
// Load navigation sounds, but only if at least one system exists.
if (systemCount > 0) // Load navigation sounds, either from the theme if it supports it, or otherwise from
NavigationSounds::getInstance()->loadThemeNavigationSounds( // the bundled fallback sound files.
SystemData::sSystemVector.front()->getTheme()); bool themeSoundSupport = false;
for (SystemData* system : SystemData::sSystemVector) {
if (system->getTheme()->hasView("all")) {
NavigationSounds::getInstance()->loadThemeNavigationSounds(system->getTheme());
themeSoundSupport = true;
break;
}
}
if (!SystemData::sSystemVector.empty() && !themeSoundSupport)
NavigationSounds::getInstance()->loadThemeNavigationSounds(nullptr);
} }
void ViewController::reloadGameListView(IGameListView* view, bool reloadTheme) void ViewController::reloadGameListView(IGameListView* view, bool reloadTheme)
@ -972,10 +981,19 @@ void ViewController::reloadAll()
goToSystemView(SystemData::sSystemVector.front(), false); goToSystemView(SystemData::sSystemVector.front(), false);
} }
// Load navigation sounds. // Load navigation sounds, either from the theme if it supports it, or otherwise from
// the bundled fallback sound files.
NavigationSounds::getInstance()->deinit(); NavigationSounds::getInstance()->deinit();
NavigationSounds::getInstance()->loadThemeNavigationSounds( bool themeSoundSupport = false;
SystemData::sSystemVector.front()->getTheme()); for (SystemData* system : SystemData::sSystemVector) {
if (system->getTheme()->hasView("all")) {
NavigationSounds::getInstance()->loadThemeNavigationSounds(system->getTheme());
themeSoundSupport = true;
break;
}
}
if (!SystemData::sSystemVector.empty() && !themeSoundSupport)
NavigationSounds::getInstance()->loadThemeNavigationSounds(nullptr);
mCurrentView->onShow(); mCurrentView->onShow();
updateHelpPrompts(); updateHelpPrompts();

View file

@ -34,14 +34,18 @@ std::shared_ptr<Sound> Sound::get(const std::string& path)
std::shared_ptr<Sound> Sound::getFromTheme(const std::shared_ptr<ThemeData>& theme, std::shared_ptr<Sound> Sound::getFromTheme(const std::shared_ptr<ThemeData>& theme,
const std::string& view, const std::string& element) const std::string& view, const std::string& element)
{ {
LOG(LogDebug) << "Sound::getFromTheme(): Looking for navigation sound tag <sound name=\"" << if (!theme) {
element << "\">"; LOG(LogDebug) << "Sound::getFromTheme(): Using fallback sound file for \""
<< element << "\"";
return get(ResourceManager::getInstance()->getResourcePath(":/sounds/" + element + ".wav"));
}
LOG(LogDebug) << "Sound::getFromTheme(): Looking for tag <sound name=\"" << element << "\">";
const ThemeData::ThemeElement* elem = theme->getElement(view, element, "sound"); const ThemeData::ThemeElement* elem = theme->getElement(view, element, "sound");
if (!elem || !elem->has("path")) { if (!elem || !elem->has("path")) {
LOG(LogDebug) << "Sound::getFromTheme(): " << "Tag not found, using fallback sound file"; LOG(LogDebug) << "Sound::getFromTheme(): " << "Tag not found, using fallback sound file";
return get(ResourceManager::getInstance()-> return get(ResourceManager::getInstance()->getResourcePath(":/sounds/" + element + ".wav"));
getResourcePath(":/sounds/" + element + ".wav"));
} }
LOG(LogDebug) << "Sound::getFromTheme(): Tag found, ready to load theme sound file"; LOG(LogDebug) << "Sound::getFromTheme(): Tag found, ready to load theme sound file";
@ -228,6 +232,15 @@ void NavigationSounds::deinit()
void NavigationSounds::loadThemeNavigationSounds(const std::shared_ptr<ThemeData>& theme) void NavigationSounds::loadThemeNavigationSounds(const std::shared_ptr<ThemeData>& theme)
{ {
if (theme) {
LOG(LogDebug) << "NavigationSounds::loadThemeNavigationSounds(): "
"Theme set includes navigation sound support, loading custom sounds";
}
else {
LOG(LogDebug) << "NavigationSounds::loadThemeNavigationSounds(): "
"Theme set does not include navigation sound support, using fallback sounds";
}
navigationSounds.push_back(std::move(Sound::getFromTheme(theme, "all", "systembrowse"))); navigationSounds.push_back(std::move(Sound::getFromTheme(theme, "all", "systembrowse")));
navigationSounds.push_back(std::move(Sound::getFromTheme(theme, "all", "quicksysselect"))); navigationSounds.push_back(std::move(Sound::getFromTheme(theme, "all", "quicksysselect")));
navigationSounds.push_back(std::move(Sound::getFromTheme(theme, "all", "select"))); navigationSounds.push_back(std::move(Sound::getFromTheme(theme, "all", "select")));