Kill wstring version of game description.
This commit is contained in:
parent
b0630790c1
commit
e079d24912
|
@ -22,25 +22,6 @@
|
|||
#include "VolumeCreator.h"
|
||||
#include "FileUtil.h"
|
||||
|
||||
// HyperIris: dunno if this suitable, may be need move.
|
||||
#ifdef _WIN32
|
||||
#include <Windows.h>
|
||||
#else
|
||||
#include <sys/param.h>
|
||||
#ifndef ANDROID
|
||||
#include <iconv.h>
|
||||
#endif
|
||||
#include <errno.h>
|
||||
#endif
|
||||
|
||||
#ifndef ICONV_CONST
|
||||
#if defined __FreeBSD__ || __NetBSD__
|
||||
#define ICONV_CONST const
|
||||
#else
|
||||
#define ICONV_CONST
|
||||
#endif
|
||||
#endif
|
||||
|
||||
namespace DiscIO
|
||||
{
|
||||
void IBannerLoader::CopyToStringAndCheck(std::string& _rDestination, const char* _src)
|
||||
|
@ -96,113 +77,6 @@ void IBannerLoader::CopyToStringAndCheck(std::string& _rDestination, const char*
|
|||
_rDestination = destBuffer;
|
||||
}
|
||||
|
||||
bool IBannerLoader::CopyBeUnicodeToString( std::string& _rDestination, const u16* _src, int length )
|
||||
{
|
||||
bool returnCode = false;
|
||||
#ifdef WIN32
|
||||
if (_src)
|
||||
{
|
||||
u16* buffer = new u16[length];
|
||||
if (buffer)
|
||||
{
|
||||
memcpy(buffer, _src, sizeof(u16)*length);
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
buffer[i] = swap16(buffer[i]);
|
||||
}
|
||||
|
||||
u32 ansiNameSize = WideCharToMultiByte(932, 0,
|
||||
(LPCWSTR)buffer, (int)wcslen((LPCWSTR)buffer),
|
||||
NULL, NULL, NULL, NULL);
|
||||
if (ansiNameSize > 0)
|
||||
{
|
||||
char* pAnsiStrBuffer = new char[ansiNameSize + 1];
|
||||
if (pAnsiStrBuffer)
|
||||
{
|
||||
memset(pAnsiStrBuffer, 0, (ansiNameSize + 1) * sizeof(char));
|
||||
if (WideCharToMultiByte(932, 0,
|
||||
(LPCWSTR)buffer, (int)wcslen((LPCWSTR)buffer),
|
||||
pAnsiStrBuffer, ansiNameSize, NULL, NULL))
|
||||
{
|
||||
_rDestination = pAnsiStrBuffer;
|
||||
returnCode = true;
|
||||
}
|
||||
delete[] pAnsiStrBuffer;
|
||||
}
|
||||
}
|
||||
delete[] buffer;
|
||||
}
|
||||
}
|
||||
#else
|
||||
#ifdef ANDROID
|
||||
return false;
|
||||
#else
|
||||
if (_src)
|
||||
{
|
||||
iconv_t conv_desc = iconv_open("UTF-8", "CP932");
|
||||
if (conv_desc == (iconv_t) -1)
|
||||
{
|
||||
// Initialization failure.
|
||||
if (errno == EINVAL)
|
||||
{
|
||||
ERROR_LOG(DISCIO, "Conversion from CP932 to UTF-8 is not supported.");
|
||||
}
|
||||
else
|
||||
{
|
||||
ERROR_LOG(DISCIO, "Iconv initialization failure: %s\n", strerror (errno));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
char* src_buffer = new char[length];
|
||||
for (int i = 0; i < length; i++)
|
||||
src_buffer[i] = swap16(_src[i]);
|
||||
|
||||
size_t inbytes = sizeof(char) * length;
|
||||
size_t outbytes = 2 * inbytes;
|
||||
char* utf8_buffer = new char[outbytes + 1];
|
||||
memset(utf8_buffer, 0, (outbytes + 1) * sizeof(char));
|
||||
|
||||
// Save the buffer locations because iconv increments them
|
||||
char* utf8_buffer_start = utf8_buffer;
|
||||
char* src_buffer_start = src_buffer;
|
||||
|
||||
size_t iconv_size = iconv(conv_desc,
|
||||
(ICONV_CONST char**)&src_buffer, &inbytes,
|
||||
&utf8_buffer, &outbytes);
|
||||
|
||||
// Handle failures
|
||||
if (iconv_size == (size_t) -1)
|
||||
{
|
||||
ERROR_LOG(DISCIO, "iconv failed.");
|
||||
switch (errno) {
|
||||
case EILSEQ:
|
||||
ERROR_LOG(DISCIO, "Invalid multibyte sequence.");
|
||||
break;
|
||||
case EINVAL:
|
||||
ERROR_LOG(DISCIO, "Incomplete multibyte sequence.");
|
||||
break;
|
||||
case E2BIG:
|
||||
ERROR_LOG(DISCIO, "Insufficient space allocated for output buffer.");
|
||||
break;
|
||||
default:
|
||||
ERROR_LOG(DISCIO, "Error: %s.", strerror(errno));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_rDestination = utf8_buffer_start;
|
||||
returnCode = true;
|
||||
}
|
||||
delete[] utf8_buffer_start;
|
||||
delete[] src_buffer_start;
|
||||
iconv_close(conv_desc);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
IBannerLoader* CreateBannerLoader(DiscIO::IFileSystem& _rFileSystem, DiscIO::IVolume *pVolume)
|
||||
{
|
||||
if (IsVolumeWiiDisc(pVolume) || IsVolumeWadFile(pVolume))
|
||||
|
|
|
@ -43,14 +43,11 @@ class IBannerLoader
|
|||
virtual bool GetCompany(std::string& _rCompany) = 0;
|
||||
|
||||
virtual bool GetDescription(std::string* _rDescription) = 0;
|
||||
virtual bool GetDescription(std::wstring& _rDescription) {return false;};
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
void CopyToStringAndCheck(std::string& _rDestination, const char* _src);
|
||||
|
||||
bool CopyBeUnicodeToString(std::string& _rDestination, const u16* _src, int length);
|
||||
private:
|
||||
u16 swap16(u16 data)
|
||||
{
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
// http://code.google.com/p/dolphin-emu/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <algorithm>
|
||||
|
||||
#include "Common.h"
|
||||
#include "ColorUtil.h"
|
||||
|
@ -24,6 +25,25 @@
|
|||
#include "FileUtil.h"
|
||||
#include "FileHandlerARC.h"
|
||||
|
||||
// HyperIris: dunno if this suitable, may be need move.
|
||||
#ifdef _WIN32
|
||||
#include <Windows.h>
|
||||
#else
|
||||
#include <sys/param.h>
|
||||
#ifndef ANDROID
|
||||
#include <iconv.h>
|
||||
#endif
|
||||
#include <errno.h>
|
||||
#endif
|
||||
|
||||
#ifndef ICONV_CONST
|
||||
#if defined __FreeBSD__ || __NetBSD__
|
||||
#define ICONV_CONST const
|
||||
#else
|
||||
#define ICONV_CONST
|
||||
#endif
|
||||
#endif
|
||||
|
||||
namespace DiscIO
|
||||
{
|
||||
|
||||
|
@ -152,16 +172,8 @@ bool CBannerLoaderWii::GetStringFromComments(const CommentIndex index, std::stri
|
|||
{
|
||||
// find Banner type
|
||||
SWiiBanner *pBanner = (SWiiBanner*)m_pBannerFile;
|
||||
|
||||
// Ensure the string is null-terminating, since the banner format
|
||||
// doesn't require it
|
||||
u16 *src = new u16[COMMENT_SIZE + 1];
|
||||
memcpy(src, &pBanner->m_Comment[index], COMMENT_SIZE * sizeof(u16));
|
||||
src[COMMENT_SIZE] = 0;
|
||||
|
||||
ret = CopyBeUnicodeToString(s, src, COMMENT_SIZE + 1);
|
||||
|
||||
delete [] src;
|
||||
// TODO: trim NULLs
|
||||
ret = CopyBeUnicodeToString(s, pBanner->m_Comment[index], COMMENT_SIZE);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
@ -208,11 +220,6 @@ bool CBannerLoaderWii::GetDescription(std::string* _rDescription)
|
|||
return GetStringFromComments(DESC_IDX, *_rDescription);
|
||||
}
|
||||
|
||||
bool CBannerLoaderWii::GetDescription(std::wstring& _rDescription)
|
||||
{
|
||||
return GetStringFromComments(DESC_IDX, _rDescription);
|
||||
}
|
||||
|
||||
void CBannerLoaderWii::decode5A3image(u32* dst, u16* src, int width, int height)
|
||||
{
|
||||
for (int y = 0; y < height; y += 4)
|
||||
|
@ -231,4 +238,87 @@ void CBannerLoaderWii::decode5A3image(u32* dst, u16* src, int width, int height)
|
|||
}
|
||||
}
|
||||
|
||||
bool CBannerLoaderWii::CopyBeUnicodeToString( std::string& _rDestination, const u16* _src, int length )
|
||||
{
|
||||
bool returnCode = false;
|
||||
#ifdef _WIN32
|
||||
if (_src)
|
||||
{
|
||||
std::wstring src;
|
||||
src.resize(length);
|
||||
std::transform(_src, _src + length, &src[0], (u16(&)(u16))Common::swap16);
|
||||
|
||||
_rDestination = UTF16ToUTF8(src);
|
||||
returnCode = true;
|
||||
}
|
||||
#else
|
||||
#ifdef ANDROID
|
||||
return false;
|
||||
#else
|
||||
if (_src)
|
||||
{
|
||||
iconv_t conv_desc = iconv_open("UTF-8", "CP932");
|
||||
if (conv_desc == (iconv_t) -1)
|
||||
{
|
||||
// Initialization failure.
|
||||
if (errno == EINVAL)
|
||||
{
|
||||
ERROR_LOG(DISCIO, "Conversion from CP932 to UTF-8 is not supported.");
|
||||
}
|
||||
else
|
||||
{
|
||||
ERROR_LOG(DISCIO, "Iconv initialization failure: %s\n", strerror (errno));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
char* src_buffer = new char[length];
|
||||
for (int i = 0; i < length; i++)
|
||||
src_buffer[i] = swap16(_src[i]);
|
||||
|
||||
size_t inbytes = sizeof(char) * length;
|
||||
size_t outbytes = 2 * inbytes;
|
||||
char* utf8_buffer = new char[outbytes + 1];
|
||||
memset(utf8_buffer, 0, (outbytes + 1) * sizeof(char));
|
||||
|
||||
// Save the buffer locations because iconv increments them
|
||||
char* utf8_buffer_start = utf8_buffer;
|
||||
char* src_buffer_start = src_buffer;
|
||||
|
||||
size_t iconv_size = iconv(conv_desc,
|
||||
(ICONV_CONST char**)&src_buffer, &inbytes,
|
||||
&utf8_buffer, &outbytes);
|
||||
|
||||
// Handle failures
|
||||
if (iconv_size == (size_t) -1)
|
||||
{
|
||||
ERROR_LOG(DISCIO, "iconv failed.");
|
||||
switch (errno) {
|
||||
case EILSEQ:
|
||||
ERROR_LOG(DISCIO, "Invalid multibyte sequence.");
|
||||
break;
|
||||
case EINVAL:
|
||||
ERROR_LOG(DISCIO, "Incomplete multibyte sequence.");
|
||||
break;
|
||||
case E2BIG:
|
||||
ERROR_LOG(DISCIO, "Insufficient space allocated for output buffer.");
|
||||
break;
|
||||
default:
|
||||
ERROR_LOG(DISCIO, "Error: %s.", strerror(errno));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_rDestination = utf8_buffer_start;
|
||||
returnCode = true;
|
||||
}
|
||||
delete[] utf8_buffer_start;
|
||||
delete[] src_buffer_start;
|
||||
iconv_close(conv_desc);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
|
|
@ -43,8 +43,6 @@ class CBannerLoaderWii
|
|||
|
||||
virtual bool GetDescription(std::string* _rDescription);
|
||||
|
||||
bool GetDescription(std::wstring& _rDescription);
|
||||
|
||||
private:
|
||||
|
||||
enum
|
||||
|
@ -82,6 +80,8 @@ class CBannerLoaderWii
|
|||
|
||||
bool GetStringFromComments(const CommentIndex index, std::string& s);
|
||||
bool GetStringFromComments(const CommentIndex index, std::wstring& s);
|
||||
|
||||
bool CopyBeUnicodeToString(std::string& _rDestination, const u16* _src, int length);
|
||||
};
|
||||
} // namespace
|
||||
|
||||
|
|
|
@ -456,16 +456,9 @@ void CGameListCtrl::InsertItemInReportView(long _Index)
|
|||
SetItemColumnImage(_Index, COLUMN_BANNER, ImageIndex);
|
||||
|
||||
std::wstring wstring_name;
|
||||
const std::wstring& wstring_description = rISOFile.GetDescription();
|
||||
std::string company;
|
||||
|
||||
wxString name;
|
||||
wxString description;
|
||||
|
||||
// We show the company string on Gamecube only
|
||||
// On Wii we show the description instead as the company string is empty
|
||||
if (rISOFile.GetPlatform() == GameListItem::GAMECUBE_DISC)
|
||||
company = rISOFile.GetCompany().c_str();
|
||||
int SelectedLanguage = SConfig::GetInstance().m_LocalCoreStartupParameter.SelectedLanguage;
|
||||
switch (rISOFile.GetCountry())
|
||||
{
|
||||
|
@ -475,11 +468,10 @@ void CGameListCtrl::InsertItemInReportView(long _Index)
|
|||
rISOFile.GetName(wstring_name, -1);
|
||||
name = wxString(rISOFile.GetName(0).c_str(), SJISConv);
|
||||
m_gameList.append(StringFromFormat("%s (J)\n", (const char *)name.c_str()));
|
||||
description = wxString(company.size() ? company.c_str() :
|
||||
rISOFile.GetDescription(0).c_str(), SJISConv);
|
||||
}
|
||||
break;
|
||||
case DiscIO::IVolume::COUNTRY_USA:
|
||||
// Is this sane?
|
||||
SelectedLanguage = 0;
|
||||
default:
|
||||
{
|
||||
|
@ -490,19 +482,21 @@ void CGameListCtrl::InsertItemInReportView(long _Index)
|
|||
m_gameList.append(StringFromFormat("%s (%c)\n",
|
||||
rISOFile.GetName(SelectedLanguage).c_str(),
|
||||
(rISOFile.GetCountry() == DiscIO::IVolume::COUNTRY_USA) ? 'U' : 'E'));
|
||||
description = wxString(company.size() ? company.c_str() :
|
||||
rISOFile.GetDescription(SelectedLanguage).c_str(), WindowsCP1252);
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (wstring_name.length())
|
||||
name = wstring_name.c_str();
|
||||
if (wstring_description.length())
|
||||
description = wstring_description.c_str();
|
||||
|
||||
SetItem(_Index, COLUMN_TITLE, name, -1);
|
||||
SetItem(_Index, COLUMN_NOTES, description, -1);
|
||||
|
||||
// We show the company string on Gamecube only
|
||||
// On Wii we show the description instead as the company string is empty
|
||||
std::string const notes = (rISOFile.GetPlatform() == GameListItem::GAMECUBE_DISC) ?
|
||||
rISOFile.GetCompany() : rISOFile.GetDescription(SelectedLanguage);
|
||||
SetItem(_Index, COLUMN_NOTES, StrToWxStr(notes), -1);
|
||||
|
||||
// Emulation state
|
||||
SetItemColumnImage(_Index, COLUMN_EMULATION_STATE, m_EmuStateImageIndex[rISOFile.GetEmuState()]);
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
#include "ChunkFile.h"
|
||||
#include "ConfigManager.h"
|
||||
|
||||
#define CACHE_REVISION 0x10F
|
||||
#define CACHE_REVISION 0x110
|
||||
|
||||
#define DVD_BANNER_WIDTH 96
|
||||
#define DVD_BANNER_HEIGHT 32
|
||||
|
@ -109,7 +109,6 @@ GameListItem::GameListItem(const std::string& _rFileName)
|
|||
pBannerLoader->GetName(m_wNames);
|
||||
pBannerLoader->GetName(m_Name);
|
||||
pBannerLoader->GetCompany(m_Company);
|
||||
pBannerLoader->GetDescription(m_wDescription);
|
||||
pBannerLoader->GetDescription(m_Description);
|
||||
|
||||
if (pBannerLoader->GetBanner(g_ImageTemp))
|
||||
|
@ -235,7 +234,6 @@ void GameListItem::DoState(PointerWrap &p)
|
|||
p.Do(m_Company);
|
||||
p.Do(m_Description[0]); p.Do(m_Description[1]); p.Do(m_Description[2]);
|
||||
p.Do(m_Description[3]); p.Do(m_Description[4]); p.Do(m_Description[5]);
|
||||
p.Do(m_wDescription);
|
||||
p.Do(m_UniqueID);
|
||||
p.Do(m_FileSize);
|
||||
p.Do(m_VolumeSize);
|
||||
|
@ -273,11 +271,6 @@ const std::string& GameListItem::GetDescription(int index) const
|
|||
return m_Description[0];
|
||||
}
|
||||
|
||||
const std::wstring& GameListItem::GetDescription() const
|
||||
{
|
||||
return m_wDescription;
|
||||
}
|
||||
|
||||
const std::string& GameListItem::GetName(int index) const
|
||||
{
|
||||
if ((index >=0) && (index < 6))
|
||||
|
|
|
@ -37,8 +37,7 @@ public:
|
|||
const std::string& GetName(int index) const;
|
||||
bool GetName(std::wstring& wName, int index=0) const;
|
||||
const std::string& GetCompany() const {return m_Company;}
|
||||
const std::string& GetDescription(int index) const;
|
||||
const std::wstring& GetDescription() const;
|
||||
const std::string& GetDescription(int index = 0) const;
|
||||
const std::string& GetUniqueID() const {return m_UniqueID;}
|
||||
const std::string GetWiiFSPath() const;
|
||||
DiscIO::IVolume::ECountry GetCountry() const {return m_Country;}
|
||||
|
@ -69,7 +68,6 @@ private:
|
|||
std::vector<std::wstring> m_wNames;
|
||||
std::string m_Company;
|
||||
std::string m_Description[6];
|
||||
std::wstring m_wDescription;
|
||||
std::string m_UniqueID;
|
||||
|
||||
std::string m_issues;
|
||||
|
|
|
@ -1339,8 +1339,7 @@ void CISOProperties::ChangeBannerDetails(int lang)
|
|||
else
|
||||
shortName = wxString(OpenGameListItem->GetName(0).c_str(), SJISConv);
|
||||
|
||||
if ((comment = OpenGameListItem->GetDescription().c_str()).size() == 0)
|
||||
comment = wxString(OpenGameListItem->GetDescription(0).c_str(), SJISConv);
|
||||
comment = StrToWxStr(OpenGameListItem->GetDescription());
|
||||
maker = wxString(OpenGameListItem->GetCompany().c_str(), SJISConv);
|
||||
break;
|
||||
case DiscIO::IVolume::COUNTRY_USA:
|
||||
|
@ -1352,8 +1351,7 @@ void CISOProperties::ChangeBannerDetails(int lang)
|
|||
shortName = wname.c_str();
|
||||
else
|
||||
shortName = wxString(OpenGameListItem->GetName(lang).c_str(), WindowsCP1252);
|
||||
if ((comment = OpenGameListItem->GetDescription().c_str()).size() == 0)
|
||||
comment = wxString(OpenGameListItem->GetDescription(lang).c_str(), WindowsCP1252);
|
||||
comment = StrToWxStr(OpenGameListItem->GetDescription(lang));
|
||||
maker = wxString(OpenGameListItem->GetCompany().c_str(), WindowsCP1252);
|
||||
}
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue