Return GetNames languages, to avoid hardcoded language lists in callers

This makes the code cleaner and also leads to some user-visible changes:

The wx game properties will no longer let the user
select WAD languages that don't have any names.

The Qt game list will now display names using the languages
set in the configuration instead of always using
English for PAL GC games and Japanese for WADs.

If a WAD doesn't have a name in the user's preferred language,
English is now selected as a fallback before Japanese.
This commit is contained in:
JosJuice
2015-04-23 08:14:39 +02:00
parent 87a63713f4
commit 235ecfbed7
30 changed files with 399 additions and 340 deletions
+14
View File
@@ -373,6 +373,20 @@ void SCoreStartupParameter::CheckMemcardPath(std::string& memcardPath, std::stri
}
}
IVolume::ELanguage SCoreStartupParameter::GetCurrentLanguage(bool wii) const
{
IVolume::ELanguage language;
if (wii)
language = (IVolume::ELanguage)SConfig::GetInstance().m_SYSCONF->GetData<u8>("IPL.LNG");
else
language = (IVolume::ELanguage)(SConfig::GetInstance().m_LocalCoreStartupParameter.SelectedLanguage + 1);
// Get rid of invalid values (probably doesn't matter, but might as well do it)
if (language > IVolume::ELanguage::LANGUAGE_UNKNOWN || language < 0)
language = IVolume::ELanguage::LANGUAGE_UNKNOWN;
return language;
}
IniFile SCoreStartupParameter::LoadDefaultGameIni() const
{
return LoadDefaultGameIni(GetUniqueID(), m_revision);
+2
View File
@@ -7,6 +7,7 @@
#include <string>
#include "Common/IniFile.h"
#include "DiscIO/Volume.h"
enum Hotkey
{
@@ -248,6 +249,7 @@ struct SCoreStartupParameter
bool AutoSetup(EBootBS2 _BootBS2);
const std::string &GetUniqueID() const { return m_strUniqueID; }
void CheckMemcardPath(std::string& memcardPath, std::string gameRegion, bool isSlotA);
DiscIO::IVolume::ELanguage GetCurrentLanguage(bool wii) const;
IniFile LoadDefaultGameIni() const;
IniFile LoadLocalGameIni() const;
+4 -2
View File
@@ -4,10 +4,12 @@
#pragma once
#include <map>
#include <string>
#include <vector>
#include "Common/CommonTypes.h"
#include "DiscIO/Volume.h"
namespace DiscIO
{
@@ -28,9 +30,9 @@ public:
virtual std::vector<u32> GetBanner(int* pWidth, int* pHeight) = 0;
virtual std::vector<std::string> GetNames() = 0;
virtual std::map<IVolume::ELanguage, std::string> GetNames() = 0;
virtual std::string GetCompany() = 0;
virtual std::vector<std::string> GetDescriptions() = 0;
virtual std::map<IVolume::ELanguage, std::string> GetDescriptions() = 0;
bool IsValid()
{
+32 -28
View File
@@ -3,6 +3,7 @@
// Refer to the license.txt file included.
#include <cstddef>
#include <map>
#include <string>
#include <vector>
@@ -60,9 +61,9 @@ std::vector<u32> CBannerLoaderGC::GetBanner(int* pWidth, int* pHeight)
}
std::vector<std::string> CBannerLoaderGC::GetNames()
std::map<IVolume::ELanguage, std::string> CBannerLoaderGC::GetNames()
{
std::vector<std::string> names;
std::map<IVolume::ELanguage, std::string> names;
if (!IsValid())
{
@@ -70,16 +71,21 @@ std::vector<std::string> CBannerLoaderGC::GetNames()
}
u32 name_count = 0;
IVolume::ELanguage language;
bool is_japanese = m_country == IVolume::ECountry::COUNTRY_JAPAN;
// find Banner type
switch (m_BNRType)
{
case CBannerLoaderGC::BANNER_BNR1:
name_count = 1;
language = is_japanese ? IVolume::ELanguage::LANGUAGE_JAPANESE : IVolume::ELanguage::LANGUAGE_ENGLISH;
break;
// English, German, French, Spanish, Italian, Dutch
case CBannerLoaderGC::BANNER_BNR2:
name_count = 6;
language = IVolume::ELanguage::LANGUAGE_ENGLISH;
break;
default:
@@ -88,20 +94,16 @@ std::vector<std::string> CBannerLoaderGC::GetNames()
auto const banner = reinterpret_cast<const DVDBanner*>(m_pBannerFile);
for (u32 i = 0; i != name_count; ++i)
for (u32 i = 0; i < name_count; ++i)
{
auto& comment = banner->comment[i];
std::string name = GetDecodedString(comment.longTitle);
if (comment.longTitle[0])
{
auto& data = comment.longTitle;
names.push_back(GetDecodedString(data));
}
else
{
auto& data = comment.shortTitle;
names.push_back(GetDecodedString(data));
}
if (name.empty())
name = GetDecodedString(comment.shortTitle);
if (!name.empty())
names[(IVolume::ELanguage)(language + i)] = name;
}
return names;
@@ -123,9 +125,9 @@ std::string CBannerLoaderGC::GetCompany()
}
std::vector<std::string> CBannerLoaderGC::GetDescriptions()
std::map<IVolume::ELanguage, std::string> CBannerLoaderGC::GetDescriptions()
{
std::vector<std::string> descriptions;
std::map<IVolume::ELanguage, std::string> descriptions;
if (!IsValid())
{
@@ -133,16 +135,20 @@ std::vector<std::string> CBannerLoaderGC::GetDescriptions()
}
u32 desc_count = 0;
IVolume::ELanguage language;
bool is_japanese = m_country == IVolume::ECountry::COUNTRY_JAPAN;
// find Banner type
switch (m_BNRType)
{
case CBannerLoaderGC::BANNER_BNR1:
desc_count = 1;
language = is_japanese ? IVolume::ELanguage::LANGUAGE_JAPANESE : IVolume::ELanguage::LANGUAGE_ENGLISH;
break;
// English, German, French, Spanish, Italian, Dutch
case CBannerLoaderGC::BANNER_BNR2:
language = IVolume::ELanguage::LANGUAGE_ENGLISH;
desc_count = 6;
break;
@@ -152,10 +158,13 @@ std::vector<std::string> CBannerLoaderGC::GetDescriptions()
auto banner = reinterpret_cast<const DVDBanner*>(m_pBannerFile);
for (u32 i = 0; i != desc_count; ++i)
for (u32 i = 0; i < desc_count; ++i)
{
auto& data = banner->comment[i].comment;
descriptions.push_back(GetDecodedString(data));
std::string description = GetDecodedString(data);
if (!description.empty())
descriptions[(IVolume::ELanguage)(language + i)] = description;
}
return descriptions;
@@ -164,20 +173,15 @@ std::vector<std::string> CBannerLoaderGC::GetDescriptions()
CBannerLoaderGC::BANNER_TYPE CBannerLoaderGC::getBannerType()
{
u32 bannerSignature = *(u32*)m_pBannerFile;
CBannerLoaderGC::BANNER_TYPE type = CBannerLoaderGC::BANNER_UNKNOWN;
switch (bannerSignature)
{
// "BNR1"
case 0x31524e42:
type = CBannerLoaderGC::BANNER_BNR1;
break;
// "BNR2"
case 0x32524e42:
type = CBannerLoaderGC::BANNER_BNR2;
break;
case 0x31524e42: // "BNR1"
return CBannerLoaderGC::BANNER_BNR1;
case 0x32524e42: // "BNR2"
return CBannerLoaderGC::BANNER_BNR2;
default:
return CBannerLoaderGC::BANNER_UNKNOWN;
}
return type;
}
} // namespace
+3 -2
View File
@@ -5,6 +5,7 @@
#pragma once
#include <cstring>
#include <map>
#include <string>
#include <vector>
@@ -28,9 +29,9 @@ public:
virtual std::vector<u32> GetBanner(int* pWidth, int* pHeight) override;
virtual std::vector<std::string> GetNames() override;
virtual std::map<IVolume::ELanguage, std::string> GetNames() override;
virtual std::string GetCompany() override;
virtual std::vector<std::string> GetDescriptions() override;
virtual std::map<IVolume::ELanguage, std::string> GetDescriptions() override;
private:
enum
+14 -9
View File
@@ -5,6 +5,7 @@
#include <algorithm>
#include <cstddef>
#include <cstdio>
#include <map>
#include <string>
#include <vector>
@@ -91,14 +92,15 @@ bool CBannerLoaderWii::GetStringFromComments(const CommentIndex index, std::stri
return false;
}
std::vector<std::string> CBannerLoaderWii::GetNames()
std::map<IVolume::ELanguage, std::string> CBannerLoaderWii::GetNames()
{
std::vector<std::string> ret(1);
std::map<IVolume::ELanguage, std::string> result;
if (!GetStringFromComments(NAME_IDX, ret[0]))
ret.clear();
std::string name;
if (GetStringFromComments(NAME_IDX, name))
result[IVolume::ELanguage::LANGUAGE_UNKNOWN] = name;
return ret;
return result;
}
std::string CBannerLoaderWii::GetCompany()
@@ -106,11 +108,14 @@ std::string CBannerLoaderWii::GetCompany()
return "";
}
std::vector<std::string> CBannerLoaderWii::GetDescriptions()
std::map<IVolume::ELanguage, std::string> CBannerLoaderWii::GetDescriptions()
{
std::vector<std::string> result(1);
if (!GetStringFromComments(DESC_IDX, result[0]))
result.clear();
std::map<IVolume::ELanguage, std::string> result;
std::string name;
if (GetStringFromComments(DESC_IDX, name))
result[IVolume::ELanguage::LANGUAGE_UNKNOWN] = name;
return result;
}
+3 -2
View File
@@ -4,6 +4,7 @@
#pragma once
#include <map>
#include <string>
#include <vector>
@@ -25,9 +26,9 @@ public:
virtual std::vector<u32> GetBanner(int* pWidth, int* pHeight) override;
virtual std::vector<std::string> GetNames() override;
virtual std::map<IVolume::ELanguage, std::string> GetNames() override;
virtual std::string GetCompany() override;
virtual std::vector<std::string> GetDescriptions() override;
virtual std::map<IVolume::ELanguage, std::string> GetDescriptions() override;
private:
enum
+39 -21
View File
@@ -4,6 +4,7 @@
#pragma once
#include <map>
#include <memory>
#include <string>
#include <vector>
@@ -16,6 +17,43 @@ namespace DiscIO
class IVolume
{
public:
// Increment CACHE_REVISION if the enums below are modified (ISOFile.cpp & GameFile.cpp)
enum ECountry
{
COUNTRY_EUROPE = 0,
COUNTRY_JAPAN,
COUNTRY_USA,
COUNTRY_AUSTRALIA,
COUNTRY_FRANCE,
COUNTRY_GERMANY,
COUNTRY_ITALY,
COUNTRY_KOREA,
COUNTRY_NETHERLANDS,
COUNTRY_RUSSIA,
COUNTRY_SPAIN,
COUNTRY_TAIWAN,
COUNTRY_WORLD,
COUNTRY_UNKNOWN,
NUMBER_OF_COUNTRIES
};
// Languages 0 - 9 match the official Wii language numbering.
// Languages 1 - 6 match the official GC PAL languages 0 - 5.
enum ELanguage
{
LANGUAGE_JAPANESE = 0,
LANGUAGE_ENGLISH = 1,
LANGUAGE_GERMAN = 2,
LANGUAGE_FRENCH = 3,
LANGUAGE_SPANISH = 4,
LANGUAGE_ITALIAN = 5,
LANGUAGE_DUTCH = 6,
LANGUAGE_SIMPLIFIED_CHINESE = 7,
LANGUAGE_TRADITIONAL_CHINESE = 8,
LANGUAGE_KOREAN = 9,
LANGUAGE_UNKNOWN
};
IVolume() {}
virtual ~IVolume() {}
@@ -39,7 +77,7 @@ public:
virtual int GetRevision() const { return 0; }
// TODO: eliminate?
virtual std::string GetName() const;
virtual std::vector<std::string> GetNames() const = 0;
virtual std::map<ELanguage, std::string> GetNames() const = 0;
virtual u32 GetFSTSize() const = 0;
virtual std::string GetApploaderDate() const = 0;
@@ -50,26 +88,6 @@ public:
virtual bool CheckIntegrity() const { return false; }
virtual bool ChangePartition(u64 offset) { return false; }
// Increment CACHE_REVISION if the code below is modified (ISOFile.cpp & GameFile.cpp)
enum ECountry
{
COUNTRY_EUROPE = 0,
COUNTRY_JAPAN,
COUNTRY_USA,
COUNTRY_AUSTRALIA,
COUNTRY_FRANCE,
COUNTRY_GERMANY,
COUNTRY_ITALY,
COUNTRY_KOREA,
COUNTRY_NETHERLANDS,
COUNTRY_RUSSIA,
COUNTRY_SPAIN,
COUNTRY_TAIWAN,
COUNTRY_WORLD,
COUNTRY_UNKNOWN,
NUMBER_OF_COUNTRIES
};
virtual ECountry GetCountry() const = 0;
virtual u64 GetSize() const = 0;
+2 -1
View File
@@ -2,6 +2,7 @@
// Licensed under GPLv2
// Refer to the license.txt file included.
#include <map>
#include <string>
#include <vector>
@@ -104,7 +105,7 @@ std::string IVolume::GetName() const
if (names.empty())
return "";
else
return names[0];
return names.cbegin()->second;
}
}
+4 -3
View File
@@ -8,7 +8,6 @@
#include <map>
#include <memory>
#include <string>
#include <utility>
#include <vector>
#include "Common/CommonPaths.h"
@@ -183,9 +182,11 @@ std::string CVolumeDirectory::GetMakerID() const
return "VOID";
}
std::vector<std::string> CVolumeDirectory::GetNames() const
std::map<IVolume::ELanguage, std::string> CVolumeDirectory::GetNames() const
{
return std::vector<std::string>(1, (char*)(&m_diskHeader[0x20]));
std::map<IVolume::ELanguage, std::string> names;
names[IVolume::ELanguage::LANGUAGE_UNKNOWN] = (char*)(&m_diskHeader[0x20]);
return names;
}
void CVolumeDirectory::SetName(const std::string& name)
+1 -1
View File
@@ -39,7 +39,7 @@ public:
std::string GetMakerID() const override;
std::vector<std::string> GetNames() const override;
std::map<IVolume::ELanguage, std::string> GetNames() const override;
void SetName(const std::string&);
u32 GetFSTSize() const override;
+4 -3
View File
@@ -3,6 +3,7 @@
// Refer to the license.txt file included.
#include <cstddef>
#include <map>
#include <memory>
#include <string>
#include <vector>
@@ -92,15 +93,15 @@ int CVolumeGC::GetRevision() const
return revision;
}
std::vector<std::string> CVolumeGC::GetNames() const
std::map<IVolume::ELanguage, std::string> CVolumeGC::GetNames() const
{
std::vector<std::string> names;
std::map<IVolume::ELanguage, std::string> names;
auto const string_decoder = GetStringDecoder(GetCountry());
char name[0x60 + 1] = {};
if (m_pReader != nullptr && Read(0x20, 0x60, (u8*)name))
names.push_back(string_decoder(name));
names[IVolume::ELanguage::LANGUAGE_UNKNOWN] = string_decoder(name);
return names;
}
+2 -1
View File
@@ -4,6 +4,7 @@
#pragma once
#include <map>
#include <memory>
#include <string>
#include <vector>
@@ -27,7 +28,7 @@ public:
std::string GetUniqueID() const override;
std::string GetMakerID() const override;
int GetRevision() const override;
std::vector<std::string> GetNames() const override;
std::map<IVolume::ELanguage, std::string> GetNames() const override;
u32 GetFSTSize() const override;
std::string GetApploaderDate() const override;
+9 -11
View File
@@ -4,6 +4,7 @@
#include <algorithm>
#include <cstddef>
#include <map>
#include <string>
#include <vector>
@@ -117,9 +118,9 @@ bool CVolumeWAD::IsWadFile() const
return true;
}
std::vector<std::string> CVolumeWAD::GetNames() const
std::map<IVolume::ELanguage, std::string> CVolumeWAD::GetNames() const
{
std::vector<std::string> names;
std::map<IVolume::ELanguage, std::string> names;
u32 footer_size;
if (!Read(0x1C, 4, (u8*)&footer_size))
@@ -129,26 +130,23 @@ std::vector<std::string> CVolumeWAD::GetNames() const
footer_size = Common::swap32(footer_size);
//Japanese, English, German, French, Spanish, Italian, Dutch, unknown, unknown, Korean
for (int i = 0; i != 10; ++i)
//Japanese, English, German, French, Spanish, Italian, Dutch, Simplified Chinese, Traditional Chinese, Korean
for (int i = 0; i < 10; ++i)
{
static const u32 string_length = 42;
static const u32 bytes_length = string_length * sizeof(u16);
u16 temp[string_length];
if (footer_size < 0xF1 || !Read(0x9C + (i * bytes_length) + m_opening_bnr_offset, bytes_length, (u8*)&temp))
{
names.push_back("");
}
else
if (footer_size >= 0xF1 && Read(0x9C + (i * bytes_length) + m_opening_bnr_offset, bytes_length, (u8*)&temp))
{
std::wstring out_temp;
out_temp.resize(string_length);
std::transform(temp, temp + out_temp.size(), out_temp.begin(), (u16(&)(u16))Common::swap16);
out_temp.erase(std::find(out_temp.begin(), out_temp.end(), 0x00), out_temp.end());
names.push_back(UTF16ToUTF8(out_temp));
std::string name = UTF16ToUTF8(out_temp);
if (!name.empty())
names[(IVolume::ELanguage)i] = name;
}
}
+2 -1
View File
@@ -4,6 +4,7 @@
#pragma once
#include <map>
#include <memory>
#include <string>
#include <vector>
@@ -30,7 +31,7 @@ public:
std::string GetUniqueID() const override;
std::string GetMakerID() const override;
int GetRevision() const override;
std::vector<std::string> GetNames() const override;
std::map<IVolume::ELanguage, std::string> GetNames() const override;
u32 GetFSTSize() const override { return 0; }
std::string GetApploaderDate() const override { return "0"; }
+4 -3
View File
@@ -4,6 +4,7 @@
#include <cstddef>
#include <cstring>
#include <map>
#include <string>
#include <vector>
#include <polarssl/aes.h>
@@ -191,15 +192,15 @@ int CVolumeWiiCrypted::GetRevision() const
return revision;
}
std::vector<std::string> CVolumeWiiCrypted::GetNames() const
std::map<IVolume::ELanguage, std::string> CVolumeWiiCrypted::GetNames() const
{
std::vector<std::string> names;
std::map<IVolume::ELanguage, std::string> names;
auto const string_decoder = CVolumeGC::GetStringDecoder(GetCountry());
char name[0xFF] = {};
if (m_pReader != nullptr && Read(0x20, 0x60, (u8*)&name, true))
names.push_back(string_decoder(name));
names[IVolume::ELanguage::LANGUAGE_UNKNOWN] = string_decoder(name);
return names;
}
+2 -1
View File
@@ -4,6 +4,7 @@
#pragma once
#include <map>
#include <memory>
#include <string>
#include <vector>
@@ -30,7 +31,7 @@ public:
std::string GetUniqueID() const override;
std::string GetMakerID() const override;
int GetRevision() const override;
std::vector<std::string> GetNames() const override;
std::map<IVolume::ELanguage, std::string> GetNames() const override;
u32 GetFSTSize() const override;
std::string GetApploaderDate() const override;
+75 -56
View File
@@ -26,25 +26,50 @@
#include "DolphinQt/Utils/Resources.h"
#include "DolphinQt/Utils/Utils.h"
static const u32 CACHE_REVISION = 0x006;
static const u32 CACHE_REVISION = 0x007;
static const u32 DATASTREAM_REVISION = 15; // Introduced in Qt 5.2
static QStringList VectorToStringList(std::vector<std::string> vec, bool trim = false)
static QMap<IVolume::ELanguage, QString> ConvertLocalizedStrings(std::map<IVolume::ELanguage, std::string> strings)
{
QStringList result;
if (trim)
{
for (const std::string& member : vec)
result.append(QString::fromStdString(member).trimmed());
}
else
{
for (const std::string& member : vec)
result.append(QString::fromStdString(member));
}
QMap<IVolume::ELanguage, QString> result;
for (auto entry : strings)
result.insert(entry.first, QString::fromStdString(entry.second).trimmed());
return result;
}
template<class to, class from>
static QMap<to, QString> CastLocalizedStrings(QMap<from, QString> strings)
{
QMap<to, QString> result;
auto end = strings.cend();
for (auto it = strings.cbegin(); it != end; ++it)
result.insert((to)it.key(), it.value());
return result;
}
static QString GetLanguageString(IVolume::ELanguage language, QMap<IVolume::ELanguage, QString> strings)
{
if (strings.contains(language))
return strings.value(language);
// English tends to be a good fallback when the requested language isn't available
if (language != IVolume::ELanguage::LANGUAGE_ENGLISH)
{
if (strings.contains(IVolume::ELanguage::LANGUAGE_ENGLISH))
return strings.value(IVolume::ELanguage::LANGUAGE_ENGLISH);
}
// If English isn't available either, just pick something
if (!strings.empty())
return strings.cbegin().value();
return SL("");
}
GameFile::GameFile(const QString& fileName)
: m_file_name(fileName)
{
@@ -66,7 +91,7 @@ GameFile::GameFile(const QString& fileName)
else
m_platform = WII_WAD;
m_volume_names = VectorToStringList(volume->GetNames());
m_volume_names = ConvertLocalizedStrings(volume->GetNames());
m_country = volume->GetCountry();
m_file_size = volume->GetRawSize();
@@ -92,9 +117,9 @@ GameFile::GameFile(const QString& fileName)
if (bannerLoader->IsValid())
{
if (m_platform != WII_WAD)
m_names = VectorToStringList(bannerLoader->GetNames());
m_names = ConvertLocalizedStrings(bannerLoader->GetNames());
m_company = QString::fromStdString(bannerLoader->GetCompany());
m_descriptions = VectorToStringList(bannerLoader->GetDescriptions(), true);
m_descriptions = ConvertLocalizedStrings(bannerLoader->GetDescriptions());
int width, height;
std::vector<u32> buffer = bannerLoader->GetBanner(&width, &height);
@@ -158,11 +183,15 @@ bool GameFile::LoadFromCache()
if (cache_rev != CACHE_REVISION)
return false;
int country;
u32 country;
QMap<u8, QString> volume_names;
QMap<u8, QString> names;
QMap<u8, QString> descriptions;
stream >> m_folder_name
>> m_volume_names
>> volume_names
>> names
>> m_company
>> m_descriptions
>> descriptions
>> m_unique_id
>> m_file_size
>> m_volume_size
@@ -173,6 +202,9 @@ bool GameFile::LoadFromCache()
>> m_is_disc_two
>> m_revision;
m_country = (DiscIO::IVolume::ECountry)country;
m_volume_names = CastLocalizedStrings<IVolume::ELanguage>(volume_names);
m_names = CastLocalizedStrings<IVolume::ELanguage>(names);
m_descriptions = CastLocalizedStrings<IVolume::ELanguage>(descriptions);
file.close();
return true;
}
@@ -198,13 +230,14 @@ void GameFile::SaveToCache()
stream << CACHE_REVISION;
stream << m_folder_name
<< m_volume_names
<< CastLocalizedStrings<u8>(m_volume_names)
<< CastLocalizedStrings<u8>(m_names)
<< m_company
<< m_descriptions
<< CastLocalizedStrings<u8>(m_descriptions)
<< m_unique_id
<< m_file_size
<< m_volume_size
<< (int)m_country
<< (u32)m_country
<< m_banner
<< m_compressed
<< m_platform
@@ -233,55 +266,36 @@ QString GameFile::CreateCacheFilename()
QString GameFile::GetCompany() const
{
if (m_company.isEmpty())
return QObject::tr("N/A");
else
return m_company;
return m_company;
}
// For all of the following functions that accept an "index" parameter,
// (-1 = Japanese, 0 = English, etc)?
QString GameFile::GetDescription(int index) const
QString GameFile::GetDescription(IVolume::ELanguage language) const
{
if (index < m_descriptions.size())
return m_descriptions[index];
if (!m_descriptions.empty())
return m_descriptions[0];
return SL("");
return GetLanguageString(language, m_descriptions);
}
QString GameFile::GetVolumeName(int index) const
QString GameFile::GetDescription() const
{
if (index < m_volume_names.size() && !m_volume_names[index].isEmpty())
return m_volume_names[index];
if (!m_volume_names.isEmpty())
return m_volume_names[0];
return SL("");
return GetDescription(SConfig::GetInstance().m_LocalCoreStartupParameter.GetCurrentLanguage(m_platform != GAMECUBE_DISC));
}
QString GameFile::GetBannerName(int index) const
QString GameFile::GetVolumeName(IVolume::ELanguage language) const
{
if (index < m_names.size() && !m_names[index].isEmpty())
return m_names[index];
if (!m_names.isEmpty())
return m_names[0];
return SL("");
return GetLanguageString(language, m_volume_names);
}
QString GameFile::GetName(int index) const
QString GameFile::GetBannerName(IVolume::ELanguage language) const
{
return GetLanguageString(language, m_names);
}
QString GameFile::GetName(IVolume::ELanguage language) const
{
// Prefer name from banner, fallback to name from volume, fallback to filename
QString name = GetBannerName(index);
QString name = GetBannerName(language);
if (name.isEmpty())
name = GetVolumeName(index);
name = GetVolumeName(language);
if (name.isEmpty())
{
@@ -294,6 +308,11 @@ QString GameFile::GetName(int index) const
return name;
}
QString GameFile::GetName() const
{
return GetName(SConfig::GetInstance().m_LocalCoreStartupParameter.GetCurrentLanguage(m_platform != GAMECUBE_DISC));
}
const QString GameFile::GetWiiFSPath() const
{
std::unique_ptr<DiscIO::IVolume> volume(DiscIO::CreateVolumeFromFilename(m_file_name.toStdString()));
+10 -8
View File
@@ -4,9 +4,9 @@
#pragma once
#include <QMap>
#include <QPixmap>
#include <QString>
#include <QStringList>
#include <string>
@@ -22,11 +22,13 @@ public:
bool IsValid() const { return m_valid; }
QString GetFileName() { return m_file_name; }
QString GetFolderName() { return m_folder_name; }
QString GetBannerName(int index) const;
QString GetVolumeName(int index) const;
QString GetName(int index) const;
QString GetBannerName(DiscIO::IVolume::ELanguage language) const;
QString GetVolumeName(DiscIO::IVolume::ELanguage language) const;
QString GetName(DiscIO::IVolume::ELanguage language) const;
QString GetName() const;
QString GetCompany() const;
QString GetDescription(int index = 0) const;
QString GetDescription(DiscIO::IVolume::ELanguage language) const;
QString GetDescription() const;
int GetRevision() const { return m_revision; }
const QString GetUniqueID() const { return m_unique_id; }
const QString GetWiiFSPath() const;
@@ -53,11 +55,11 @@ private:
QString m_folder_name;
// TODO: eliminate this and overwrite with names from banner when available?
QStringList m_volume_names;
QMap<DiscIO::IVolume::ELanguage, QString> m_volume_names;
QString m_company;
QStringList m_names;
QStringList m_descriptions;
QMap<DiscIO::IVolume::ELanguage, QString> m_names;
QMap<DiscIO::IVolume::ELanguage, QString> m_descriptions;
QString m_unique_id;
+1 -1
View File
@@ -76,7 +76,7 @@ void DGameGrid::AddGame(GameFile* gameItem)
QListWidgetItem* i = new QListWidgetItem;
i->setIcon(QIcon(gameItem->GetBitmap()
.scaled(GRID_BANNER_WIDTH, GRID_BANNER_HEIGHT, Qt::KeepAspectRatio, Qt::SmoothTransformation)));
i->setText(gameItem->GetName(0));
i->setText(gameItem->GetName());
if (gameItem->IsCompressed())
i->setTextColor(QColor("#00F"));

Some files were not shown because too many files have changed in this diff Show More