Merge pull request #164 from wiidev/master
Various improvements and fixes
Before Width: | Height: | Size: 854 B |
BIN
out/imgs/background.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 984 B |
BIN
out/imgs/dvdskin.png
Normal file
After Width: | Height: | Size: 4.8 KiB |
Before Width: | Height: | Size: 636 B |
BIN
out/imgs/dvdskin_black.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 858 B |
BIN
out/imgs/dvdskin_greenone.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 951 B |
BIN
out/imgs/dvdskin_greentwo.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 964 B |
BIN
out/imgs/dvdskin_red.png
Normal file
After Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 888 B |
BIN
out/imgs/dvdskin_yellow.png
Normal file
After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 1.5 KiB |
BIN
out/imgs/esrb_ao.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 1.5 KiB |
BIN
out/imgs/esrb_e.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB |
BIN
out/imgs/esrb_ec.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.5 KiB |
BIN
out/imgs/esrb_eten.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 1.5 KiB |
BIN
out/imgs/esrb_m.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 1.4 KiB |
BIN
out/imgs/esrb_t.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 3.0 KiB |
BIN
out/imgs/flatloading.png
Normal file
After Width: | Height: | Size: 9.3 KiB |
Before Width: | Height: | Size: 970 B After Width: | Height: | Size: 966 B |
Before Width: | Height: | Size: 4.2 KiB |
BIN
out/imgs/loading.png
Normal file
After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.5 KiB |
BIN
out/imgs/norating.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 999 B |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 1.1 KiB |
@ -52,5 +52,5 @@ uLoader, NeoGamma, Mighty Channels, WiiXplorer, Triiforce, \
|
||||
postLoader"
|
||||
|
||||
|
||||
#define WIINNERTAG_URL "http://tag.rc24.xyz/wii?game={ID6}&key={KEY}"// RiiTag as of 3/11/2020
|
||||
#define WIINNERTAG_URL "https://tag.rc24.xyz/wii?game={ID6}&key={KEY}"// RiiTag as of 3/11/2020
|
||||
#define DUTAG_URL "http://tag.darkumbra.net/{KEY}.update={ID6}"
|
||||
|
@ -1926,17 +1926,17 @@ bool CCoverFlow::start(const string &m_imgsDir)
|
||||
/* load the colored skin/spine images if not already done */
|
||||
if(!m_dvdskin_loaded)
|
||||
{
|
||||
if(TexHandle.fromImageFile(m_dvdSkin, fmt("%s/dvdskin.jpg", m_imgsDir.c_str())) != TE_OK)
|
||||
if(TexHandle.fromImageFile(m_dvdSkin, fmt("%s/dvdskin.png", m_imgsDir.c_str())) != TE_OK)
|
||||
return false;
|
||||
if(TexHandle.fromImageFile(m_dvdSkin_Red, fmt("%s/dvdskin_red.jpg", m_imgsDir.c_str())) != TE_OK)
|
||||
if(TexHandle.fromImageFile(m_dvdSkin_Red, fmt("%s/dvdskin_red.png", m_imgsDir.c_str())) != TE_OK)
|
||||
return false;
|
||||
if(TexHandle.fromImageFile(m_dvdSkin_Black, fmt("%s/dvdskin_black.jpg", m_imgsDir.c_str())) != TE_OK)
|
||||
if(TexHandle.fromImageFile(m_dvdSkin_Black, fmt("%s/dvdskin_black.png", m_imgsDir.c_str())) != TE_OK)
|
||||
return false;
|
||||
if(TexHandle.fromImageFile(m_dvdSkin_Yellow, fmt("%s/dvdskin_yellow.jpg", m_imgsDir.c_str())) != TE_OK)
|
||||
if(TexHandle.fromImageFile(m_dvdSkin_Yellow, fmt("%s/dvdskin_yellow.png", m_imgsDir.c_str())) != TE_OK)
|
||||
return false;
|
||||
if(TexHandle.fromImageFile(m_dvdSkin_GreenOne, fmt("%s/dvdskin_greenone.jpg", m_imgsDir.c_str())) != TE_OK)
|
||||
if(TexHandle.fromImageFile(m_dvdSkin_GreenOne, fmt("%s/dvdskin_greenone.png", m_imgsDir.c_str())) != TE_OK)
|
||||
return false;
|
||||
if(TexHandle.fromImageFile(m_dvdSkin_GreenTwo, fmt("%s/dvdskin_greentwo.jpg", m_imgsDir.c_str())) != TE_OK)
|
||||
if(TexHandle.fromImageFile(m_dvdSkin_GreenTwo, fmt("%s/dvdskin_greentwo.png", m_imgsDir.c_str())) != TE_OK)
|
||||
return false;
|
||||
m_dvdskin_loaded = true;
|
||||
}
|
||||
@ -1945,7 +1945,7 @@ bool CCoverFlow::start(const string &m_imgsDir)
|
||||
{
|
||||
if(m_pngLoadCover.empty() || TexHandle.fromImageFile(m_boxLoadingTexture, m_pngLoadCover.c_str(), GX_TF_CMPR, 32, 512) != TE_OK)
|
||||
{
|
||||
if(TexHandle.fromImageFile(m_boxLoadingTexture, fmt("%s/loading.jpg", m_imgsDir.c_str()), GX_TF_CMPR, 32, 512) != TE_OK)
|
||||
if(TexHandle.fromImageFile(m_boxLoadingTexture, fmt("%s/loading.png", m_imgsDir.c_str()), GX_TF_CMPR, 32, 512) != TE_OK)
|
||||
return false;
|
||||
}
|
||||
if(m_pngNoCover.empty() || TexHandle.fromImageFile(m_boxNoCoverTexture, m_pngNoCover.c_str(), GX_TF_CMPR, 32, 512) != TE_OK)
|
||||
@ -1955,7 +1955,7 @@ bool CCoverFlow::start(const string &m_imgsDir)
|
||||
}
|
||||
if(m_pngLoadCoverFlat.empty() || TexHandle.fromImageFile(m_flatLoadingTexture, m_pngLoadCoverFlat.c_str(), GX_TF_CMPR, 32, 512) != TE_OK)
|
||||
{
|
||||
if(TexHandle.fromImageFile(m_flatLoadingTexture, fmt("%s/flatloading.jpg", m_imgsDir.c_str()), GX_TF_CMPR, 32, 512) != TE_OK)
|
||||
if(TexHandle.fromImageFile(m_flatLoadingTexture, fmt("%s/flatloading.png", m_imgsDir.c_str()), GX_TF_CMPR, 32, 512) != TE_OK)
|
||||
return false;
|
||||
}
|
||||
if(m_pngNoCoverFlat.empty() || TexHandle.fromImageFile(m_flatNoCoverTexture, m_pngNoCoverFlat.c_str(), GX_TF_CMPR, 32, 512) != TE_OK)
|
||||
|
@ -1114,8 +1114,12 @@ int pngu_decode (IMGCTX ctx, PNGU_u32 width, PNGU_u32 height, PNGU_u32 stripAlph
|
||||
if ( (ctx->prop.imgWidth != width) || (ctx->prop.imgHeight != height) )
|
||||
return PNGU_INVALID_WIDTH_OR_HEIGHT;
|
||||
|
||||
// Support paletted images
|
||||
if (ctx->prop.imgColorType == PNG_COLOR_TYPE_PALETTE)
|
||||
png_set_palette_to_rgb(ctx->png_ptr);
|
||||
|
||||
// Check if color type is supported by PNGU
|
||||
if ( (ctx->prop.imgColorType == PNGU_COLOR_TYPE_PALETTE) || (ctx->prop.imgColorType == PNGU_COLOR_TYPE_UNKNOWN) )
|
||||
if ( (ctx->prop.imgColorType == PNGU_COLOR_TYPE_UNKNOWN) )
|
||||
return PNGU_UNSUPPORTED_COLOR_TYPE;
|
||||
|
||||
// error handling
|
||||
|
@ -1215,8 +1215,8 @@ void CMenu::_buildMenus(void)
|
||||
theme.btnTexMinusS = _texture("GENERAL", "minus_button_texture_selected", theme.btnTexMinusS);
|
||||
|
||||
// Default background
|
||||
TexHandle.fromImageFile(theme.bg, fmt("%s/background.jpg", m_imgsDir.c_str()));
|
||||
TexHandle.fromImageFile(m_mainBgLQ, fmt("%s/background.jpg", m_imgsDir.c_str()), GX_TF_CMPR, 64, 64);
|
||||
TexHandle.fromImageFile(theme.bg, fmt("%s/background.png", m_imgsDir.c_str()));
|
||||
TexHandle.fromImageFile(m_mainBgLQ, fmt("%s/background.png", m_imgsDir.c_str()), GX_TF_CMPR, 64, 64);
|
||||
m_gameBgLQ = m_mainBgLQ;
|
||||
|
||||
// Build menus
|
||||
@ -2785,9 +2785,9 @@ const char *CMenu::getBlankCoverPath(const dir_discHdr *element)
|
||||
}
|
||||
blankCoverTitle = m_platform.getString("PLUGINS", m_plugin.PluginMagicWord, "wii");
|
||||
}
|
||||
snprintf(blankCoverPath, sizeof(blankCoverPath), "%s/blank_covers/%s.jpg", m_boxPicDir.c_str(), blankCoverTitle.c_str());
|
||||
if(!fsop_FileExist(blankCoverPath))
|
||||
snprintf(blankCoverPath, sizeof(blankCoverPath), "%s/blank_covers/%s.png", m_boxPicDir.c_str(), blankCoverTitle.c_str());
|
||||
if(!fsop_FileExist(blankCoverPath))
|
||||
snprintf(blankCoverPath, sizeof(blankCoverPath), "%s/blank_covers/%s.jpg", m_boxPicDir.c_str(), blankCoverTitle.c_str());
|
||||
return blankCoverPath;
|
||||
}
|
||||
|
||||
|
@ -33,12 +33,12 @@ int CMenu::_downloadCheatFileAsync()
|
||||
m_thrdMessageAdded = true;
|
||||
update_pThread(1);// its downloaded
|
||||
fsop_WriteFile(fmt("%s/%s.txt", m_txtCheatDir.c_str(), id), file.data, file.size);
|
||||
free(file.data);
|
||||
MEM2_free(file.data);
|
||||
return 0;
|
||||
}
|
||||
if(file.size > 0)// received a 301/302 redirect instead of a 404?
|
||||
{
|
||||
free(file.data);
|
||||
MEM2_free(file.data);
|
||||
return -4;// the file doesn't exist on the server
|
||||
}
|
||||
return -3;// download failed
|
||||
|
@ -265,7 +265,7 @@ void CMenu::_download(string gameId, int dl_type)
|
||||
{
|
||||
if(m_btnMgr.selected(m_downloadBtnAll) || dl_type == 1)
|
||||
{
|
||||
m_refreshGameList = true;// not needed instead just initcf()
|
||||
m_refreshGameList = true; // Not needed instead just initcf()
|
||||
|
||||
m_btnMgr.hide(m_downloadLblCovers);
|
||||
m_btnMgr.hide(m_downloadBtnAll);
|
||||
@ -308,7 +308,7 @@ void CMenu::_download(string gameId, int dl_type)
|
||||
m_btnMgr.setText(m_wbfsLblDialog, _t("dlmsg30", L"No covers missing."));
|
||||
dl_finished = true;
|
||||
dl_type = 0;
|
||||
//maybe show back button
|
||||
// Maybe show back button
|
||||
//m_btnMgr.show(m_downloadBtnBack);
|
||||
}
|
||||
if(m_btnMgr.selected(m_downloadBtnBanners) || dl_type == 2)
|
||||
@ -346,19 +346,19 @@ void CMenu::_download(string gameId, int dl_type)
|
||||
m_btnMgr.setText(m_wbfsLblDialog, _t("dlmsg14", L"Done."));
|
||||
}
|
||||
else if(ret == -1)
|
||||
m_btnMgr.setText(m_wbfsLblDialog, _t("dlmsg34", L"Banner URL not set properly!"));//banner url not set
|
||||
m_btnMgr.setText(m_wbfsLblDialog, _t("dlmsg34", L"Banner URL not set properly!")); // Banner URL not set
|
||||
else if(ret == -2)
|
||||
m_btnMgr.setText(m_wbfsLblDialog, _t("dlmsg2", L"Network initialization failed!"));
|
||||
else if(ret == -3)
|
||||
m_btnMgr.setText(m_wbfsLblDialog, _t("dlmsg33", L"No banners missing."));// no banners missing
|
||||
m_btnMgr.setText(m_wbfsLblDialog, _t("dlmsg33", L"No banners missing.")); // No banners missing
|
||||
dl_finished = true;
|
||||
dl_type = 0;
|
||||
//maybe show back button
|
||||
// Maybe show back button
|
||||
//m_btnMgr.show(m_downloadBtnBack);
|
||||
}
|
||||
else if(m_btnMgr.selected(m_downloadBtnGameTDBDownload))
|
||||
{
|
||||
m_refreshGameList = true;// to refresh titles
|
||||
m_refreshGameList = true; // To refresh titles
|
||||
m_btnMgr.hide(m_downloadLblCovers);
|
||||
m_btnMgr.hide(m_downloadBtnAll);
|
||||
m_btnMgr.hide(m_downloadBtnMissing);
|
||||
@ -756,7 +756,6 @@ s32 CMenu::_networkComplete(s32 ok, void *usrData)
|
||||
if(networkInit)
|
||||
wolfSSL_Init();
|
||||
|
||||
gprintf("NET: Network init complete, enabled wifi_gecko: %s\n", m->m_use_wifi_gecko ? "yes" : "no");
|
||||
if(m->m_use_wifi_gecko)
|
||||
{
|
||||
const string &ip = m->m_cfg.getString("DEBUG", "wifi_gecko_ip");
|
||||
@ -1008,7 +1007,7 @@ int CMenu::_coverDownloader()
|
||||
|
||||
vector<string> coverIDList;
|
||||
|
||||
/* create list of cover ID's that need downloading */
|
||||
/* Create list of cover ID's that need downloading */
|
||||
if(dl_gameID.empty())
|
||||
{
|
||||
for(u32 i = 0; i < m_gameList.size(); ++i)
|
||||
@ -1023,7 +1022,7 @@ int CMenu::_coverDownloader()
|
||||
coverIDList.push_back(dl_gameID);
|
||||
|
||||
n = coverIDList.size();
|
||||
m_thrdTotal = n * 3;// 3 = download cover, save png, and make wfc
|
||||
m_thrdTotal = n * 3; // 3 = Download cover, save png and make wfc
|
||||
|
||||
if(m_thrdTotal == 0)
|
||||
{
|
||||
@ -1033,7 +1032,7 @@ int CMenu::_coverDownloader()
|
||||
return -3;
|
||||
}
|
||||
|
||||
/* initialize network connection */
|
||||
/* Initialize network connection */
|
||||
m_thrdMessage = _t("dlmsg1", L"Initializing network...");
|
||||
m_thrdMessageAdded = true;
|
||||
if(_initNetwork() < 0)
|
||||
@ -1044,7 +1043,7 @@ int CMenu::_coverDownloader()
|
||||
return -2;
|
||||
}
|
||||
|
||||
/* download covers in the list */
|
||||
/* Download covers in the list */
|
||||
u32 CoverType = 0;
|
||||
string url;
|
||||
char path[256];
|
||||
@ -1057,10 +1056,10 @@ int CMenu::_coverDownloader()
|
||||
bool custom = false;
|
||||
int c_altCase = 0;
|
||||
|
||||
/* try downloading the cover 4 times but a different type each time.*/
|
||||
/* Try downloading the cover 4 times but a different type each time.*/
|
||||
for(int p = 0; p < 4; ++p)
|
||||
{
|
||||
/* the cover type (BOX, CBOX, FLAT, CFLAT) is different each time based on m_downloadPrioVal */
|
||||
/* The cover type (BOX, CBOX, FLAT, CFLAT) is different each time based on m_downloadPrioVal */
|
||||
switch(p)
|
||||
{
|
||||
case 0:
|
||||
@ -1084,7 +1083,7 @@ int CMenu::_coverDownloader()
|
||||
original = false;
|
||||
if(!success && original)
|
||||
{
|
||||
/* each fmtURL may have more than one URL */
|
||||
/* Each fmtURL may have more than one URL */
|
||||
for(u8 j = 0; !success && j < fmtURLBox.size(); ++j)
|
||||
{
|
||||
url = makeURL(fmtURLBox[j], coverID, countryCode(coverID));
|
||||
@ -1181,33 +1180,30 @@ int CMenu::_coverDownloader()
|
||||
case ZHCN:
|
||||
break;
|
||||
}
|
||||
if(tdl)// try another download
|
||||
if(tdl) // Try another download
|
||||
{
|
||||
m_thrdMessage = wfmt(_fmt("dlmsg3", L"Downloading %i/%i from %s"), i + 1, n, url.c_str());
|
||||
m_thrdMessageAdded = true;
|
||||
downloadfile(url.c_str(), &file);
|
||||
}
|
||||
}
|
||||
/* if none of the downloads succeeded */
|
||||
/* If none of the downloads succeeded */
|
||||
if(file.size == 0)// || !checkPNGBuf(file.data))
|
||||
continue;
|
||||
|
||||
/* a download succeeded */
|
||||
|
||||
/* save cover png */
|
||||
/* Download succeeded - save png */
|
||||
strncpy(path, fmt("%s/%s.png", m_boxPicDir.c_str(), coverID.c_str()), 255);
|
||||
update_pThread(1);
|
||||
m_thrdMessage = wfmt(_fmt("dlmsg4", L"Saving %s"), path);
|
||||
m_thrdMessageAdded = true;
|
||||
fsop_WriteFile(path, file.data, file.size);
|
||||
if(file.size > 0)
|
||||
free(file.data);
|
||||
MEM2_free(file.data);
|
||||
|
||||
/* make cover cache file (wfc) */
|
||||
/* Make cover cache file (wfc) */
|
||||
update_pThread(1);
|
||||
m_thrdMessage = wfmt(_fmt("dlmsg10", L"Making %s.wfc"), coverID.c_str());
|
||||
m_thrdMessageAdded = true;
|
||||
CoverFlow.cacheCoverFile(fmt("%s/%s.wfc", m_cacheDir.c_str(), coverID.c_str()), path, true);//it may fail
|
||||
CoverFlow.cacheCoverFile(fmt("%s/%s.wfc", m_cacheDir.c_str(), coverID.c_str()), path, true); // Might fail if OOM
|
||||
|
||||
++count;
|
||||
update_pThread(1);
|
||||
@ -1221,7 +1217,7 @@ int CMenu::_coverDownloader()
|
||||
c_altCase = c_gameTDB.GetCaseVersions(coverID.c_str());
|
||||
if(!success && c_gameTDB.IsLoaded() && c_altCase > 1 && custom)
|
||||
{
|
||||
/* each fmtURL may have more than one URL */
|
||||
/* Each fmtURL may have more than one URL */
|
||||
for(u8 j = 0; !success && j < fmtURLCBox.size(); ++j)
|
||||
{
|
||||
url = makeURL(fmtURLCBox[j], coverID, countryCode(coverID));
|
||||
@ -1327,29 +1323,26 @@ int CMenu::_coverDownloader()
|
||||
}
|
||||
}
|
||||
|
||||
/* if none of the downloads succeeded */
|
||||
/* If none of the downloads succeeded */
|
||||
if(file.size <= 0)// || !checkPNGBuf(file.data))
|
||||
continue;
|
||||
|
||||
/* a download succeeded */
|
||||
|
||||
/* save cover png */
|
||||
/* Download succeeded - save png */
|
||||
strncpy(path, fmt("%s/%s.png", m_boxPicDir.c_str(), coverID.c_str()), 255);
|
||||
update_pThread(1);
|
||||
m_thrdMessage = wfmt(_fmt("dlmsg4", L"Saving %s"), path);
|
||||
m_thrdMessageAdded = true;
|
||||
fsop_WriteFile(path, file.data, file.size);
|
||||
if(file.size > 0)
|
||||
free(file.data);
|
||||
MEM2_free(file.data);
|
||||
|
||||
/* make cover cache file (wfc) */
|
||||
/* Make cover cache file (wfc) */
|
||||
update_pThread(1);
|
||||
m_thrdMessage = wfmt(_fmt("dlmsg10", L"Making %s.wfc"), coverID.c_str());
|
||||
m_thrdMessageAdded = true;
|
||||
CoverFlow.cacheCoverFile(fmt("%s/%s.wfc", m_cacheDir.c_str(), coverID.c_str()), path, true);//it may fail
|
||||
CoverFlow.cacheCoverFile(fmt("%s/%s.wfc", m_cacheDir.c_str(), coverID.c_str()), path, true); // Might fail if OOM
|
||||
|
||||
update_pThread(1);
|
||||
++count;
|
||||
update_pThread(1);
|
||||
success = true;
|
||||
}
|
||||
}
|
||||
@ -1359,6 +1352,7 @@ int CMenu::_coverDownloader()
|
||||
original = false;
|
||||
if(!success && original)
|
||||
{
|
||||
/* Each fmtURL may have more than one URL */
|
||||
for(u8 j = 0; !success && j < fmtURLFlat.size(); ++j)
|
||||
{
|
||||
url = makeURL(fmtURLFlat[j], coverID, countryCode(coverID));
|
||||
@ -1463,23 +1457,23 @@ int CMenu::_coverDownloader()
|
||||
}
|
||||
}
|
||||
|
||||
/* If none of the downloads succeeded */
|
||||
if(file.size <= 0)// || !checkPNGBuf(file.data))
|
||||
continue;
|
||||
|
||||
/*download succeeded - save png */
|
||||
/* Download succeeded - save png */
|
||||
strncpy(path, fmt("%s/%s.png", m_picDir.c_str(), coverID.c_str()), 255);
|
||||
update_pThread(1);
|
||||
m_thrdMessage = wfmt(_fmt("dlmsg4", L"Saving %s"), path);
|
||||
m_thrdMessageAdded = true;
|
||||
fsop_WriteFile(path, file.data, file.size);
|
||||
if(file.size > 0)
|
||||
free(file.data);
|
||||
MEM2_free(file.data);
|
||||
|
||||
/* make cover cache file (wfc) */
|
||||
/* Make cover cache file (wfc) */
|
||||
update_pThread(1);
|
||||
m_thrdMessage = wfmt(_fmt("dlmsg10", L"Making %s"), sfmt("%s.wfc", coverID.c_str()));
|
||||
m_thrdMessageAdded = true;
|
||||
CoverFlow.cacheCoverFile(fmt("%s/%s.wfc", m_cacheDir.c_str(), coverID.c_str()), path, false);//it may fail
|
||||
CoverFlow.cacheCoverFile(fmt("%s/%s.wfc", m_cacheDir.c_str(), coverID.c_str()), path, false); // Might fail if OOM
|
||||
|
||||
++countFlat;
|
||||
update_pThread(1);
|
||||
@ -1492,6 +1486,7 @@ int CMenu::_coverDownloader()
|
||||
custom = true;
|
||||
if(!success && c_gameTDB.IsLoaded() && c_altCase > 1 && custom)
|
||||
{
|
||||
/* Each fmtURL may have more than one URL */
|
||||
for(u8 j = 0; !success && j < fmtURLCFlat.size(); ++j)
|
||||
{
|
||||
url = makeURL(fmtURLCFlat[j], coverID, countryCode(coverID));
|
||||
@ -1595,28 +1590,27 @@ int CMenu::_coverDownloader()
|
||||
m_thrdMessage = wfmt(_fmt("dlmsg3", L"Downloading %i/%i from %s"), i + 1, n, url.c_str());
|
||||
m_thrdMessageAdded = true;
|
||||
LWP_MutexUnlock(m_mutex);
|
||||
|
||||
downloadfile(url.c_str(), &file);
|
||||
}
|
||||
}
|
||||
|
||||
/* If none of the downloads succeeded */
|
||||
if(file.size <= 0)// || !checkPNGBuf(file.data))
|
||||
continue;
|
||||
|
||||
/* save png */
|
||||
/* Download succeeded - save png */
|
||||
strncpy(path, fmt("%s/%s.png", m_picDir.c_str(), coverID.c_str()), 255);
|
||||
update_pThread(1);
|
||||
m_thrdMessage = wfmt(_fmt("dlmsg4", L"Saving %s"), path);
|
||||
m_thrdMessageAdded = true;
|
||||
fsop_WriteFile(path, file.data, file.size);
|
||||
if(file.size > 0)
|
||||
free(file.data);
|
||||
MEM2_free(file.data);
|
||||
|
||||
/* make wfc */
|
||||
/* Make cover cache file (wfc) */
|
||||
update_pThread(1);
|
||||
m_thrdMessage = wfmt(_fmt("dlmsg10", L"Making %s"), sfmt("%s.wfc", coverID.c_str()));
|
||||
m_thrdMessageAdded = true;
|
||||
CoverFlow.cacheCoverFile(fmt("%s/%s.wfc", m_cacheDir.c_str(), coverID.c_str()), path, false);//it may fail
|
||||
CoverFlow.cacheCoverFile(fmt("%s/%s.wfc", m_cacheDir.c_str(), coverID.c_str()), path, false); // Might fail if OOM
|
||||
|
||||
++countFlat;
|
||||
update_pThread(1);
|
||||
@ -1629,7 +1623,7 @@ int CMenu::_coverDownloader()
|
||||
if(!success)
|
||||
update_pThread(3);
|
||||
}
|
||||
/* cover list done and downloading complete */
|
||||
/* Cover list done and downloading complete */
|
||||
if(c_gameTDB.IsLoaded())
|
||||
c_gameTDB.CloseFile();
|
||||
coverIDList.clear();
|
||||
@ -1642,7 +1636,7 @@ int CMenu::_coverDownloader()
|
||||
int CMenu::_gametdbDownloaderAsync()
|
||||
{
|
||||
const string &langCode = m_loc.getString(m_curLanguage, "gametdb_code", "EN");
|
||||
m_thrdTotal = 3;// download, save, and unzip
|
||||
m_thrdTotal = 3; // Download, save and unzip
|
||||
|
||||
m_thrdMessage = _t("dlmsg1", L"Initializing network...");
|
||||
m_thrdMessageAdded = true;
|
||||
@ -1662,7 +1656,7 @@ int CMenu::_gametdbDownloaderAsync()
|
||||
}
|
||||
else
|
||||
{
|
||||
update_pThread(1);//its downloaded
|
||||
update_pThread(1); // It's downloaded
|
||||
bool res = false;
|
||||
char *zippath = fmt_malloc("%s/wiitdb.zip", m_settingsDir.c_str());
|
||||
if(zippath != NULL)
|
||||
@ -1674,8 +1668,7 @@ int CMenu::_gametdbDownloaderAsync()
|
||||
m_thrdMessage = wfmt(_fmt("dlmsg4", L"Saving %s"), "wiitdb.zip");
|
||||
m_thrdMessageAdded = true;
|
||||
res = fsop_WriteFile(zippath, file.data, file.size);
|
||||
if(file.size > 0)
|
||||
free(file.data);
|
||||
MEM2_free(file.data);
|
||||
}
|
||||
if(res == false)
|
||||
{
|
||||
@ -1686,7 +1679,7 @@ int CMenu::_gametdbDownloaderAsync()
|
||||
}
|
||||
else
|
||||
{
|
||||
update_pThread(1);//its saved
|
||||
update_pThread(1); // It's saved
|
||||
gprintf("Extracting zip file: ");
|
||||
|
||||
m_thrdMessage = wfmt(_fmt("dlmsg24", L"Extracting %s"), "wiitdb.zip");
|
||||
@ -1694,7 +1687,7 @@ int CMenu::_gametdbDownloaderAsync()
|
||||
ZipFile zFile(zippath);
|
||||
bool zres = zFile.ExtractAll(m_settingsDir.c_str());
|
||||
gprintf(zres ? "success\n" : "failed\n");
|
||||
//may add if zres failed return -4 extraction failed
|
||||
// May add if zres failed return -4 extraction failed
|
||||
|
||||
// We don't need the zipfile anymore
|
||||
fsop_deleteFile(zippath);
|
||||
@ -1703,7 +1696,7 @@ int CMenu::_gametdbDownloaderAsync()
|
||||
// We should always remove the offsets file to make sure it's reloaded
|
||||
fsop_deleteFile(fmt("%s/gametdb_offsets.bin", m_settingsDir.c_str()));
|
||||
|
||||
update_pThread(1);//its extracted
|
||||
update_pThread(1); // It's extracted
|
||||
|
||||
// Update cache
|
||||
m_cfg.setBool(WII_DOMAIN, "update_cache", true);
|
||||
@ -1789,18 +1782,18 @@ int CMenu::_bannerDownloader()
|
||||
if(file.size < 0x5000)
|
||||
{
|
||||
if(file.size > 0)
|
||||
free(file.data); // More than 0 bytes and less than 50kb
|
||||
MEM2_free(file.data); // More than 0 bytes and less than 50kb
|
||||
downloadfile(banner_url_id3, &file);
|
||||
}
|
||||
|
||||
/* minimum 50kb */
|
||||
/* Minimum 50kb */
|
||||
if(file.size > 51200 && file.data[0] != '<')
|
||||
{
|
||||
fsop_WriteFile(fmt("%s/%s.bnr", m_customBnrDir.c_str(), BnrIDList[i].c_str()), file.data, file.size);
|
||||
count++;
|
||||
}
|
||||
if(file.size > 0)
|
||||
free(file.data);
|
||||
MEM2_free(file.data);
|
||||
update_pThread(1);
|
||||
}
|
||||
return 0;
|
||||
@ -1810,7 +1803,7 @@ int CMenu::_bannerDownloader()
|
||||
/**************************************************************************************/
|
||||
|
||||
const char *url_dl = NULL;
|
||||
void CMenu::_downloadUrl(const char *url, u8 **dl_file, u32 *dl_size)// nothing uses this
|
||||
void CMenu::_downloadUrl(const char *url, u8 **dl_file, u32 *dl_size) // Nothing uses this
|
||||
{
|
||||
m_file = NULL;
|
||||
m_filesize = 0;
|
||||
|
@ -654,17 +654,17 @@ void CMenu::_textGameInfo(void)
|
||||
break;
|
||||
case GAMETDB_RATING_TYPE_ESRB:
|
||||
if(RatingValue[0] == 'E')
|
||||
TexHandle.fromImageFile(m_rating, fmt("%s/esrb_e.jpg", m_imgsDir.c_str()));
|
||||
TexHandle.fromImageFile(m_rating, fmt("%s/esrb_e.png", m_imgsDir.c_str()));
|
||||
else if(memcmp(RatingValue, "EC", 2) == 0)
|
||||
TexHandle.fromImageFile(m_rating, fmt("%s/esrb_ec.jpg", m_imgsDir.c_str()));
|
||||
TexHandle.fromImageFile(m_rating, fmt("%s/esrb_ec.png", m_imgsDir.c_str()));
|
||||
else if(memcmp(RatingValue, "E10+", 4) == 0)
|
||||
TexHandle.fromImageFile(m_rating, fmt("%s/esrb_eten.jpg", m_imgsDir.c_str()));
|
||||
TexHandle.fromImageFile(m_rating, fmt("%s/esrb_eten.png", m_imgsDir.c_str()));
|
||||
else if(RatingValue[0] == 'T')
|
||||
TexHandle.fromImageFile(m_rating, fmt("%s/esrb_t.jpg", m_imgsDir.c_str()));
|
||||
TexHandle.fromImageFile(m_rating, fmt("%s/esrb_t.png", m_imgsDir.c_str()));
|
||||
else if(RatingValue[0] == 'M')
|
||||
TexHandle.fromImageFile(m_rating, fmt("%s/esrb_m.jpg", m_imgsDir.c_str()));
|
||||
TexHandle.fromImageFile(m_rating, fmt("%s/esrb_m.png", m_imgsDir.c_str()));
|
||||
else if(memcmp(RatingValue, "AO", 2) == 0)
|
||||
TexHandle.fromImageFile(m_rating, fmt("%s/esrb_ao.jpg", m_imgsDir.c_str()));
|
||||
TexHandle.fromImageFile(m_rating, fmt("%s/esrb_ao.png", m_imgsDir.c_str()));
|
||||
break;
|
||||
case GAMETDB_RATING_TYPE_PEGI:
|
||||
if(RatingValue[0] == '3')
|
||||
|
@ -52,7 +52,7 @@ void add_game_to_card(const char *gameid)
|
||||
strcpy(url, providers[i].url);
|
||||
str_replace(url, "{KEY}", providers[i].key, MAX_URL_SIZE);
|
||||
str_replace(url, "{ID6}", gameid, MAX_URL_SIZE);
|
||||
gprintf("Gamertag URL:\n%s\n", url);
|
||||
gprintf("Gamertag URL: %s\n", url);
|
||||
struct download file = {};
|
||||
file.skip_response = 1;
|
||||
downloadfile(url, &file);
|
||||
|
@ -1,7 +1,6 @@
|
||||
/*
|
||||
Code by blackb0x @ GBAtemp.net
|
||||
This allows the Wii to download from servers that use SNI.
|
||||
*/
|
||||
// Code by blackb0x @ GBAtemp.net
|
||||
// This allows the Wii to download from servers that use SNI.
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@ -12,8 +11,10 @@
|
||||
#include "https.h"
|
||||
#include "gecko/gecko.hpp"
|
||||
#include "picohttpparser.h"
|
||||
#include "memory/mem2.hpp"
|
||||
|
||||
u8 loop;
|
||||
WOLFSSL_SESSION *session;
|
||||
|
||||
int https_write(HTTP_INFO *httpinfo, char *buffer, int len)
|
||||
{
|
||||
@ -39,12 +40,32 @@ int https_write(HTTP_INFO *httpinfo, char *buffer, int len)
|
||||
|
||||
int https_read(HTTP_INFO *httpinfo, char *buffer, int len)
|
||||
{
|
||||
struct pollsd fds[1];
|
||||
fds[0].socket = httpinfo->sock;
|
||||
fds[0].events = POLLIN;
|
||||
|
||||
net_fcntl(httpinfo->sock, F_SETFL, 4);
|
||||
switch (net_poll(fds, 1, READ_WRITE_TIMEOUT))
|
||||
{
|
||||
case -1:
|
||||
#ifdef DEBUG_NETWORK
|
||||
gprintf("net_poll error\n");
|
||||
#endif
|
||||
return -1;
|
||||
case 0:
|
||||
#ifdef DEBUG_NETWORK
|
||||
gprintf("The connection timed out\n");
|
||||
#endif
|
||||
return -ETIMEDOUT;
|
||||
default:
|
||||
net_fcntl(httpinfo->sock, F_SETFL, 0);
|
||||
if (len > 8192)
|
||||
len = 8192; // 16KB is the max on a Wii, but 8KB is safe
|
||||
if (httpinfo->use_https)
|
||||
return wolfSSL_read(httpinfo->ssl, buffer, len);
|
||||
return net_read(httpinfo->sock, buffer, len);
|
||||
}
|
||||
}
|
||||
|
||||
void https_close(HTTP_INFO *httpinfo)
|
||||
{
|
||||
@ -99,7 +120,7 @@ void read_chunked(HTTP_INFO *httpinfo, struct download *buffer, size_t start_pos
|
||||
gprintf("Increased buffer size\n");
|
||||
#endif
|
||||
capacity *= 2;
|
||||
buffer->data = realloc(buffer->data, capacity);
|
||||
buffer->data = MEM2_realloc(buffer->data, capacity);
|
||||
}
|
||||
while ((rret = https_read(httpinfo, &buffer->data[start_pos], capacity - start_pos)) == -1 && errno == EINTR)
|
||||
;
|
||||
@ -122,7 +143,7 @@ void read_chunked(HTTP_INFO *httpinfo, struct download *buffer, size_t start_pos
|
||||
start_pos += rsize;
|
||||
} while (pret == -2);
|
||||
buffer->size = start_pos;
|
||||
buffer->data = realloc(buffer->data, buffer->size);
|
||||
buffer->data = MEM2_realloc(buffer->data, buffer->size);
|
||||
}
|
||||
|
||||
void read_all(HTTP_INFO *httpinfo, struct download *buffer, size_t start_pos)
|
||||
@ -140,7 +161,7 @@ void read_all(HTTP_INFO *httpinfo, struct download *buffer, size_t start_pos)
|
||||
gprintf("Increased buffer size\n");
|
||||
#endif
|
||||
capacity *= 2;
|
||||
buffer->data = realloc(buffer->data, capacity);
|
||||
buffer->data = MEM2_realloc(buffer->data, capacity);
|
||||
}
|
||||
while ((ret = https_read(httpinfo, &buffer->data[start_pos], capacity - start_pos)) == -1 && errno == EINTR)
|
||||
;
|
||||
@ -150,7 +171,7 @@ void read_all(HTTP_INFO *httpinfo, struct download *buffer, size_t start_pos)
|
||||
start_pos += ret;
|
||||
};
|
||||
buffer->size = start_pos;
|
||||
buffer->data = realloc(buffer->data, buffer->size);
|
||||
buffer->data = MEM2_realloc(buffer->data, buffer->size);
|
||||
}
|
||||
|
||||
int connect(char *host, u16 port)
|
||||
@ -181,7 +202,7 @@ int connect(char *host, u16 port)
|
||||
if (ticks_to_millisecs(diff_ticks(t, gettime())) > TCP_CONNECT_TIMEOUT)
|
||||
{
|
||||
#ifdef DEBUG_NETWORK
|
||||
gprintf("The connection has timed out\n");
|
||||
gprintf("The connection timed out\n");
|
||||
#endif
|
||||
net_close(sock);
|
||||
return -ETIMEDOUT;
|
||||
@ -202,11 +223,6 @@ int connect(char *host, u16 port)
|
||||
break;
|
||||
}
|
||||
net_fcntl(sock, F_SETFL, 0);
|
||||
// Set a read and write timeout
|
||||
struct timeval timeout;
|
||||
timeout.tv_sec = READ_WRITE_TIMEOUT;
|
||||
net_setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout));
|
||||
net_setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, sizeof(timeout));
|
||||
return sock;
|
||||
}
|
||||
|
||||
@ -255,8 +271,9 @@ void downloadfile(const char *url, struct download *buffer)
|
||||
|
||||
if (httpinfo.use_https)
|
||||
{
|
||||
// Create a new SSL context and use the highest possible protocol version
|
||||
if ((httpinfo.ctx = wolfSSL_CTX_new(wolfSSLv23_client_method())) == NULL)
|
||||
// Create a new SSL context
|
||||
// wolfSSLv23_client_method() works, but resume would require further changes
|
||||
if ((httpinfo.ctx = wolfSSL_CTX_new(wolfTLSv1_2_client_method())) == NULL)
|
||||
{
|
||||
#ifdef DEBUG_NETWORK
|
||||
gprintf("Failed to create WOLFSSL_CTX\n");
|
||||
@ -293,6 +310,14 @@ void downloadfile(const char *url, struct download *buffer)
|
||||
https_close(&httpinfo);
|
||||
return;
|
||||
}
|
||||
// Attempt to resume the session
|
||||
if (session != NULL && wolfSSL_set_session(httpinfo.ssl, session) != SSL_SUCCESS)
|
||||
{
|
||||
#ifdef DEBUG_NETWORK
|
||||
gprintf("Failed to set session (session timed out?)\n");
|
||||
#endif
|
||||
session = NULL;
|
||||
}
|
||||
// Initiate a handshake
|
||||
if (wolfSSL_connect(httpinfo.ssl) != SSL_SUCCESS)
|
||||
{
|
||||
@ -302,6 +327,14 @@ void downloadfile(const char *url, struct download *buffer)
|
||||
https_close(&httpinfo);
|
||||
return;
|
||||
}
|
||||
// Check if we resumed successfully
|
||||
if (session != NULL && !wolfSSL_session_reused(httpinfo.ssl))
|
||||
{
|
||||
#ifdef DEBUG_NETWORK
|
||||
gprintf("Failed to resume session\n");
|
||||
#endif
|
||||
session = NULL;
|
||||
}
|
||||
// Cipher info
|
||||
#ifdef DEBUG_NETWORK
|
||||
/*char ciphers[4096];
|
||||
@ -313,13 +346,13 @@ void downloadfile(const char *url, struct download *buffer)
|
||||
}
|
||||
|
||||
// Send our request
|
||||
char request[2048];
|
||||
char request[2200];
|
||||
char isgecko[36] = "Cookie: challenge=BitMitigate.com\r\n";
|
||||
int ret, len;
|
||||
if (strcmp(host, "www.geckocodes.org") != 0)
|
||||
memset(isgecko, 0, sizeof(isgecko)); // Not geckocodes, so don't set a cookie
|
||||
|
||||
len = snprintf(request, 2048,
|
||||
len = snprintf(request, 2200,
|
||||
"GET %s HTTP/1.1\r\n"
|
||||
"Host: %s\r\n"
|
||||
"User-Agent: WiiFlow-Lite\r\n"
|
||||
@ -420,7 +453,7 @@ void downloadfile(const char *url, struct download *buffer)
|
||||
// We got what we wanted
|
||||
if (status == 200)
|
||||
{
|
||||
buffer->data = malloc(4096);
|
||||
buffer->data = MEM2_alloc(4096);
|
||||
buffer->size = 4096;
|
||||
memcpy(buffer->data, &response[pret], buflen - pret);
|
||||
// Determine how to read the data
|
||||
@ -428,6 +461,9 @@ void downloadfile(const char *url, struct download *buffer)
|
||||
read_chunked(&httpinfo, buffer, buflen - pret);
|
||||
else
|
||||
read_all(&httpinfo, buffer, buflen - pret);
|
||||
// Save the session
|
||||
if (httpinfo.use_https)
|
||||
session = wolfSSL_get_session(httpinfo.ssl);
|
||||
// Finished
|
||||
https_close(&httpinfo);
|
||||
#ifdef DEBUG_NETWORK
|
||||
@ -439,5 +475,8 @@ void downloadfile(const char *url, struct download *buffer)
|
||||
return;
|
||||
}
|
||||
// Close on all other status codes
|
||||
#ifdef DEBUG_NETWORK
|
||||
gprintf("Status code: %i - %s\n", status, url);
|
||||
#endif
|
||||
https_close(&httpinfo);
|
||||
}
|
||||
|
@ -1,7 +1,6 @@
|
||||
/*
|
||||
Code by blackb0x @ GBAtemp.net
|
||||
This allows the Wii to download from servers that use SNI.
|
||||
*/
|
||||
// Code by blackb0x @ GBAtemp.net
|
||||
// This allows the Wii to download from servers that use SNI.
|
||||
|
||||
#ifndef _HTTPS_H_
|
||||
#define _HTTPS_H_
|
||||
|
||||
@ -16,7 +15,7 @@ extern "C"
|
||||
// #define DEBUG_NETWORK
|
||||
#define REDIRECT_LIMIT 3
|
||||
#define TCP_CONNECT_TIMEOUT 5000
|
||||
#define READ_WRITE_TIMEOUT 10
|
||||
#define READ_WRITE_TIMEOUT 5000
|
||||
|
||||
struct download
|
||||
{
|
||||
|