Hide non-channel WADs

These cannot be booted, so it is bad UX to show them in the UI as if
they were regular titles, and yet have different behaviour for them.

And technically, there is no reason to allow them to be used to boot
in the first place.

Another reason they should not be shown is that Dolphin fails
spectacularly with WADs that have a valid boot content index, but are
not PPC titles (e.g. IOS WADs). The only reliable way to avoid this
is to check for the title type and only show channels, just like
the Wii System Menu.
This commit is contained in:
Léo Lam 2017-05-14 00:00:01 +02:00
parent 2058f37596
commit 6916a3d85b
5 changed files with 28 additions and 8 deletions

View File

@ -992,13 +992,10 @@ bool SConfig::AutoSetup(EBootBS2 _BootBS2)
DiscIO::CNANDContentManager::Access().GetNANDLoader(m_strFilename);
const IOS::ES::TMDReader& tmd = content_loader.GetTMD();
if (content_loader.GetContentByIndex(tmd.GetBootIndex()) == nullptr)
if (!IOS::ES::IsChannel(tmd.GetTitleId()))
{
// WAD is valid yet cannot be booted. Install instead.
u64 installed = DiscIO::CNANDContentManager::Access().Install_WiiWAD(m_strFilename);
if (installed)
SuccessAlertT("The WAD has been installed successfully");
return false; // do not boot
PanicAlertT("This WAD is not bootable.");
return false;
}
SetRegion(tmd.GetRegion(), &set_region_dir);

View File

@ -63,6 +63,17 @@ GameFile::GameFile(const QString& path) : m_path(path)
m_valid = true;
}
bool GameFile::IsValid() const
{
if (!m_valid)
return false;
if (m_platform == DiscIO::Platform::WII_WAD && !IOS::ES::IsChannel(m_title_id))
return false;
return true;
}
QString GameFile::GetCacheFileName() const
{
QString folder = QString::fromStdString(File::GetUserPath(D_CACHE_IDX));

View File

@ -27,7 +27,7 @@ class GameFile final
public:
explicit GameFile(const QString& path);
bool IsValid() const { return m_valid; }
bool IsValid() const;
// These will be properly initialized before we try to load the file.
QString GetFilePath() const { return m_path; }
QString GetFileName() const { return m_file_name; }

View File

@ -28,6 +28,7 @@
#include "Core/Boot/Boot.h"
#include "Core/ConfigManager.h"
#include "Core/IOS/ES/Formats.h"
#include "DiscIO/Blob.h"
#include "DiscIO/Enums.h"
@ -177,6 +178,17 @@ GameListItem::~GameListItem()
{
}
bool GameListItem::IsValid() const
{
if (!m_Valid)
return false;
if (m_Platform == DiscIO::Platform::WII_WAD && !IOS::ES::IsChannel(m_title_id))
return false;
return true;
}
void GameListItem::ReloadINI()
{
if (!IsValid())

View File

@ -35,7 +35,7 @@ public:
// Reload settings after INI changes
void ReloadINI();
bool IsValid() const { return m_Valid; }
bool IsValid() const;
const std::string& GetFileName() const { return m_FileName; }
std::string GetName(DiscIO::Language language) const;
std::string GetName() const;