Make cover and banner URLs editable

This commit is contained in:
wiidev 2020-07-09 02:11:59 +01:00
parent de391c7d25
commit 80ed6d0b98
6 changed files with 125 additions and 43 deletions

View File

@ -32,24 +32,9 @@
#define VALID_IMAGE(x) (!(x->size == 36864 || x->size <= 1024 || x->size == 7386 || x->size <= 1174 || x->size == 4446 || x->data == NULL)) #define VALID_IMAGE(x) (!(x->size == 36864 || x->size <= 1024 || x->size == 7386 || x->size <= 1174 || x->size == 4446 || x->data == NULL))
static const char *serverURL3D = "https://art.gametdb.com/wii/cover3D/";
static const char *serverURL2D = "https://art.gametdb.com/wii/cover/";
static const char *serverURLFullHQ = "https://art.gametdb.com/wii/coverfullHQ/";
static const char *serverURLFull = "https://art.gametdb.com/wii/coverfull/";
static const char *serverURLOrigDiscs = "https://art.gametdb.com/wii/disc/";
static const char *serverURLCustomDiscs = "https://art.gametdb.com/wii/disccustom/";
static const char *serverURLCustomBannersGC = "https://banner.rc24.xyz/";
void ImageDownloader::DownloadImages() void ImageDownloader::DownloadImages()
{ {
bool ValidBannerURL = false; bool showBanner = (Settings.LoaderMode & MODE_GCGAMES);
if(strncasecmp(serverURLCustomBannersGC, "https://", strlen("https://")) == 0)
{
char *path = strchr(serverURLCustomBannersGC + strlen("https://"), '/');
if(path)
ValidBannerURL = true;
}
bool showBanner = (ValidBannerURL && Settings.LoaderMode & MODE_GCGAMES);
int choice = CheckboxWindow(tr( "Cover Download" ), 0, tr( "3D Covers" ), tr( "Flat Covers" ), tr("Full Covers"), tr( "Discarts" ), showBanner ? tr( "Custom Banners" ) : 0, 0, showBanner ? 0x1F : 0xF); // ask for download choice int choice = CheckboxWindow(tr( "Cover Download" ), 0, tr( "3D Covers" ), tr( "Flat Covers" ), tr("Full Covers"), tr( "Discarts" ), showBanner ? tr( "Custom Banners" ) : 0, 0, showBanner ? 0x1F : 0xF); // ask for download choice
if (choice == 0 || choice == CheckedNone) if (choice == 0 || choice == CheckedNone)
@ -105,32 +90,32 @@ void ImageDownloader::Start()
void ImageDownloader::FindMissingImages() void ImageDownloader::FindMissingImages()
{ {
if(choices & CheckedBox1) if(choices & CheckedBox1)
FindMissing(Settings.covers_path, serverURL3D, NULL, tr("Downloading 3D Covers"), NULL, ".png"); FindMissing(Settings.covers_path, Settings.URL_Covers3D, NULL, tr("Downloading 3D Covers"), NULL, ".png");
if(choices & CheckedBox2) if(choices & CheckedBox2)
FindMissing(Settings.covers2d_path, serverURL2D, NULL, tr("Downloading Flat Covers"), NULL, ".png"); FindMissing(Settings.covers2d_path, Settings.URL_Covers2D, NULL, tr("Downloading Flat Covers"), NULL, ".png");
if(choices & CheckedBox3) if(choices & CheckedBox3)
{ {
const char * downloadURL = (Settings.coversfull == COVERSFULL_HQ || Settings.coversfull == COVERSFULL_HQ_LQ ) ? serverURLFullHQ : serverURLFull; const char * downloadURL = (Settings.coversfull == COVERSFULL_HQ || Settings.coversfull == COVERSFULL_HQ_LQ ) ? Settings.URL_CoversFullHQ : Settings.URL_CoversFull;
const char * progressTitle = (Settings.coversfull == COVERSFULL_HQ || Settings.coversfull == COVERSFULL_HQ_LQ ) ? tr("Downloading Full HQ Covers") : tr("Downloading Full LQ Covers"); const char * progressTitle = (Settings.coversfull == COVERSFULL_HQ || Settings.coversfull == COVERSFULL_HQ_LQ ) ? tr("Downloading Full HQ Covers") : tr("Downloading Full LQ Covers");
const char * backupURL = (Settings.coversfull == COVERSFULL_HQ_LQ || Settings.coversfull == COVERSFULL_LQ_HQ) ? ((Settings.coversfull == COVERSFULL_HQ_LQ) ? serverURLFull : serverURLFullHQ) : NULL; const char * backupURL = (Settings.coversfull == COVERSFULL_HQ_LQ || Settings.coversfull == COVERSFULL_LQ_HQ) ? ((Settings.coversfull == COVERSFULL_HQ_LQ) ? Settings.URL_CoversFull : Settings.URL_CoversFullHQ) : NULL;
const char * backupProgressTitle = (Settings.coversfull == COVERSFULL_HQ_LQ || Settings.coversfull == COVERSFULL_LQ_HQ) ? ((Settings.coversfull == COVERSFULL_HQ_LQ) ? tr("Downloading Full LQ Covers") : tr("Downloading Full HQ Covers")) : NULL; const char * backupProgressTitle = (Settings.coversfull == COVERSFULL_HQ_LQ || Settings.coversfull == COVERSFULL_LQ_HQ) ? ((Settings.coversfull == COVERSFULL_HQ_LQ) ? tr("Downloading Full LQ Covers") : tr("Downloading Full HQ Covers")) : NULL;
FindMissing(Settings.coversFull_path, downloadURL, backupURL, progressTitle, backupProgressTitle, ".png"); FindMissing(Settings.coversFull_path, downloadURL, backupURL, progressTitle, backupProgressTitle, ".png");
} }
if(choices & CheckedBox4) if(choices & CheckedBox4)
{ {
const char * downloadURL = (Settings.discart == DISCARTS_ORIGINALS || Settings.discart == DISCARTS_ORIGINALS_CUSTOMS ) ? serverURLOrigDiscs : serverURLCustomDiscs; const char * downloadURL = (Settings.discart == DISCARTS_ORIGINALS || Settings.discart == DISCARTS_ORIGINALS_CUSTOMS ) ? Settings.URL_Discs : Settings.URL_DiscsCustom;
const char * progressTitle = (Settings.discart == DISCARTS_ORIGINALS || Settings.discart == DISCARTS_ORIGINALS_CUSTOMS ) ? tr("Downloading original Discarts") : tr("Downloading custom Discarts"); const char * progressTitle = (Settings.discart == DISCARTS_ORIGINALS || Settings.discart == DISCARTS_ORIGINALS_CUSTOMS ) ? tr("Downloading original Discarts") : tr("Downloading custom Discarts");
const char * backupURL = (Settings.discart == DISCARTS_ORIGINALS_CUSTOMS || Settings.discart == DISCARTS_CUSTOMS_ORIGINALS) ? ((Settings.discart == DISCARTS_ORIGINALS_CUSTOMS) ? serverURLCustomDiscs : serverURLOrigDiscs) : NULL; const char * backupURL = (Settings.discart == DISCARTS_ORIGINALS_CUSTOMS || Settings.discart == DISCARTS_CUSTOMS_ORIGINALS) ? ((Settings.discart == DISCARTS_ORIGINALS_CUSTOMS) ? Settings.URL_DiscsCustom : Settings.URL_Discs) : NULL;
const char * backupProgressTitle = (Settings.discart == DISCARTS_ORIGINALS_CUSTOMS || Settings.discart == DISCARTS_CUSTOMS_ORIGINALS) ? ((Settings.discart == DISCARTS_ORIGINALS_CUSTOMS) ? tr("Downloading custom Discarts") : tr("Downloading original Discarts")) : NULL; const char * backupProgressTitle = (Settings.discart == DISCARTS_ORIGINALS_CUSTOMS || Settings.discart == DISCARTS_CUSTOMS_ORIGINALS) ? ((Settings.discart == DISCARTS_ORIGINALS_CUSTOMS) ? tr("Downloading custom Discarts") : tr("Downloading original Discarts")) : NULL;
FindMissing(Settings.disc_path, downloadURL, backupURL, progressTitle, backupProgressTitle, ".png"); FindMissing(Settings.disc_path, downloadURL, backupURL, progressTitle, backupProgressTitle, ".png");
} }
if(choices & CheckedBox5) if(choices & CheckedBox5)
{ {
FindMissing(Settings.BNRCachePath, serverURLCustomBannersGC, NULL, tr("Downloading Custom Banners"), NULL, ".bnr"); FindMissing(Settings.BNRCachePath, Settings.URL_Banners, NULL, tr("Downloading Custom Banners"), NULL, ".bnr");
} }
} }
@ -174,12 +159,7 @@ void ImageDownloader::FindMissing(const char *writepath, const char *downloadURL
int ImageDownloader::DownloadProcess(int TotalDownloadCount) int ImageDownloader::DownloadProcess(int TotalDownloadCount)
{ {
char progressMsg[255]; char progressMsg[270];
char *path = strchr(serverURLCustomBannersGC + strlen("https://"), '/');
int domainlength = path - serverURLCustomBannersGC;
char domain[domainlength + 1];
strncpy(domain, serverURLCustomBannersGC, domainlength);
domain[domainlength] = '\0';
for(u32 i = 0, pos = 0; i < MissingImages.size(); ++i, ++pos) for(u32 i = 0, pos = 0; i < MissingImages.size(); ++i, ++pos)
{ {
@ -187,9 +167,21 @@ int ImageDownloader::DownloadProcess(int TotalDownloadCount)
break; break;
if(strcmp(MissingImages[i].fileExt, ".bnr") == 0) if(strcmp(MissingImages[i].fileExt, ".bnr") == 0)
{
char *path = strchr(MissingImages[i].downloadURL + ((strncmp(Settings.URL_Banners, "https://", 8) == 0) ? 8 : 7), '/');
int domainlength = path - Settings.URL_Banners;
char domain[domainlength + 1];
strlcpy(domain, Settings.URL_Banners, domainlength + 1);
snprintf(progressMsg, sizeof(progressMsg), "%s : %s.bnr", domain, MissingImages[i].gameID.c_str()); snprintf(progressMsg, sizeof(progressMsg), "%s : %s.bnr", domain, MissingImages[i].gameID.c_str());
}
else else
snprintf(progressMsg, sizeof(progressMsg), "https://gametdb.com : %s.png", MissingImages[i].gameID.c_str()); {
char *path = strchr(MissingImages[i].downloadURL + ((strncmp(MissingImages[i].downloadURL, "https://", 8) == 0) ? 8 : 7), '/');
int domainlength = path - MissingImages[i].downloadURL;
char domain[domainlength + 1];
strlcpy(domain, MissingImages[i].downloadURL, domainlength + 1);
snprintf(progressMsg, sizeof(progressMsg), "%s : %s.png", domain, MissingImages[i].gameID.c_str());
}
ShowProgress(MissingImages[i].progressTitle, fmt("%i %s", TotalDownloadCount - pos, tr( "files left" )), progressMsg, pos, TotalDownloadCount); ShowProgress(MissingImages[i].progressTitle, fmt("%i %s", TotalDownloadCount - pos, tr( "files left" )), progressMsg, pos, TotalDownloadCount);
@ -224,6 +216,7 @@ int ImageDownloader::DownloadProcess(int TotalDownloadCount)
MissingImagesCount--; MissingImagesCount--;
} }
free(file.data); free(file.data);
gprintf("File saved successfully (%s%s)\n", MissingImages[i].gameID.c_str(), MissingImages[i].fileExt);
//! Remove the image from the vector since it's done //! Remove the image from the vector since it's done
MissingImages.erase(MissingImages.begin()+i); MissingImages.erase(MissingImages.begin()+i);
@ -374,31 +367,31 @@ void ImageDownloader::CreateCSVLog()
for (u32 i = 0; i < MissingImages.size(); ++i) for (u32 i = 0; i < MissingImages.size(); ++i)
{ {
if(MissingImages[i].downloadURL == serverURL3D) if(MissingImages[i].downloadURL == Settings.URL_Covers3D)
{ {
ImageType = "3D Cover"; ImageType = "3D Cover";
} }
else if(MissingImages[i].downloadURL == serverURL2D) else if(MissingImages[i].downloadURL == Settings.URL_Covers2D)
{ {
ImageType = "2D Cover"; ImageType = "2D Cover";
} }
else if(MissingImages[i].downloadURL == serverURLFullHQ) else if(MissingImages[i].downloadURL == Settings.URL_CoversFullHQ)
{ {
ImageType = "Full HQ Cover"; ImageType = "Full HQ Cover";
} }
else if(MissingImages[i].downloadURL == serverURLFull) else if(MissingImages[i].downloadURL == Settings.URL_CoversFull)
{ {
ImageType = "Full LQ Cover"; ImageType = "Full LQ Cover";
} }
else if(MissingImages[i].downloadURL == serverURLOrigDiscs) else if(MissingImages[i].downloadURL == Settings.URL_Discs)
{ {
ImageType = "Original Discart"; ImageType = "Original Discart";
} }
else if(MissingImages[i].downloadURL == serverURLCustomDiscs) else if(MissingImages[i].downloadURL == Settings.URL_DiscsCustom)
{ {
ImageType = "Custom Discart"; ImageType = "Custom Discart";
} }
else if(MissingImages[i].downloadURL == serverURLCustomBannersGC) else if(MissingImages[i].downloadURL == Settings.URL_Banners)
{ {
ImageType = "Custom Banner"; ImageType = "Custom Banner";
} }

View File

@ -51,8 +51,6 @@
#include "sys.h" #include "sys.h"
#include "svnrev.h" #include "svnrev.h"
static const char *GameTDB_URL = "https://www.gametdb.com/wiitdb.zip";
/**************************************************************************** /****************************************************************************
* Checking if an Update is available * Checking if an Update is available
***************************************************************************/ ***************************************************************************/
@ -112,7 +110,7 @@ static bool CheckNewGameTDBVersion(const char *url)
int UpdateGameTDB() int UpdateGameTDB()
{ {
if (CheckNewGameTDBVersion(GameTDB_URL) == false) if (CheckNewGameTDBVersion(Settings.URL_GameTDB) == false)
{ {
gprintf("Not updating GameTDB: Version is the same\n"); gprintf("Not updating GameTDB: Version is the same\n");
return -1; return -1;
@ -126,7 +124,7 @@ int UpdateGameTDB()
ZipPath += "wiitdb.zip"; ZipPath += "wiitdb.zip";
int filesize = DownloadFileToPath(GameTDB_URL, ZipPath.c_str()); int filesize = DownloadFileToPath(Settings.URL_GameTDB, ZipPath.c_str());
if (filesize <= 0) if (filesize <= 0)
return -1; return -1;

View File

@ -869,7 +869,7 @@ static int InternalShowGameInfo(struct discHdr *header)
txtWindow.Append(&dnBtn); txtWindow.Append(&dnBtn);
} }
gametdb1Txt = new GuiText("http://gametdb.com", 16, ( GXColor ) {0, 0, 0, 255}); gametdb1Txt = new GuiText("gametdb.com", 16, ( GXColor ) {0, 0, 0, 255});
gametdb1Txt->SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); gametdb1Txt->SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM);
gametdb1Txt->SetPosition(40, -15); gametdb1Txt->SetPosition(40, -15);
gameinfoWindow.Append(gametdb1Txt); gameinfoWindow.Append(gametdb1Txt);

View File

@ -78,6 +78,14 @@ void CSettings::SetDefault()
strlcpy(NandEmuChanPath, NandEmuPath, sizeof(NandEmuChanPath)); strlcpy(NandEmuChanPath, NandEmuPath, sizeof(NandEmuChanPath));
strlcpy(GameCubePath, "usb1:/games/", sizeof(GameCubePath)); strlcpy(GameCubePath, "usb1:/games/", sizeof(GameCubePath));
strlcpy(GameCubeSDPath, "sd:/games/", sizeof(GameCubeSDPath)); strlcpy(GameCubeSDPath, "sd:/games/", sizeof(GameCubeSDPath));
strlcpy(URL_Banners, "https://banner.rc24.xyz/", sizeof(URL_Banners));
strlcpy(URL_Covers2D, "https://art.gametdb.com/wii/cover/", sizeof(URL_Covers2D));
strlcpy(URL_Covers3D, "https://art.gametdb.com/wii/cover3D/", sizeof(URL_Covers3D));
strlcpy(URL_CoversFull, "https://art.gametdb.com/wii/coverfull/", sizeof(URL_CoversFull));
strlcpy(URL_CoversFullHQ, "https://art.gametdb.com/wii/coverfullHQ/", sizeof(URL_CoversFullHQ));
strlcpy(URL_Discs, "https://art.gametdb.com/wii/disc/", sizeof(URL_Discs));
strlcpy(URL_DiscsCustom, "https://art.gametdb.com/wii/disccustom/", sizeof(URL_DiscsCustom));
strlcpy(URL_GameTDB, "https://www.gametdb.com/wiitdb.zip", sizeof(URL_GameTDB));
theme[0] = 0; theme[0] = 0;
language_path[0] = 0; language_path[0] = 0;
ogg_path[0] = 0; ogg_path[0] = 0;
@ -481,11 +489,37 @@ bool CSettings::Save()
fprintf(file, "GCInstallCompressed = %d\n", GCInstallCompressed); fprintf(file, "GCInstallCompressed = %d\n", GCInstallCompressed);
fprintf(file, "GCInstallAligned = %d\n", GCInstallAligned); fprintf(file, "GCInstallAligned = %d\n", GCInstallAligned);
fprintf(file, "PrivateServer = %d\n", PrivateServer); fprintf(file, "PrivateServer = %d\n", PrivateServer);
fprintf(file, "URL_Banners = %s\n", URL_Banners);
fprintf(file, "URL_Covers2D = %s\n", URL_Covers2D);
fprintf(file, "URL_Covers3D = %s\n", URL_Covers3D);
fprintf(file, "URL_CoversFull = %s\n", URL_CoversFull);
fprintf(file, "URL_CoversFullHQ = %s\n", URL_CoversFullHQ);
fprintf(file, "URL_Discs = %s\n", URL_Discs);
fprintf(file, "URL_DiscsCustom = %s\n", URL_DiscsCustom);
fprintf(file, "URL_GameTDB = %s\n", URL_GameTDB);
fclose(file); fclose(file);
return true; return true;
} }
bool CSettings::ValidateURL(char *value, bool zip)
{
if (strlen(value) >= 12 && (strncmp(value, "https://", 8) == 0 || strncmp(value, "http://", 7) == 0))
{
if (zip)
{
if (strncmp(value + strlen(value) -4, ".zip", 4) == 0) // The URL must end with .zip to be valid
return true;
}
else
{
if (strncmp(value + strlen(value) -1, "/", 1) == 0) // The URL must end with / to be valid
return true;
}
}
return false;
}
bool CSettings::SetSetting(char *name, char *value) bool CSettings::SetSetting(char *name, char *value)
{ {
if (strcmp(name, "godmode") == 0) if (strcmp(name, "godmode") == 0)
@ -1242,6 +1276,54 @@ bool CSettings::SetSetting(char *name, char *value)
strlcpy(GameCubeSDPath, value, sizeof(GameCubeSDPath)); strlcpy(GameCubeSDPath, value, sizeof(GameCubeSDPath));
return true; return true;
} }
else if (strcmp(name, "URL_Banners") == 0)
{
if (ValidateURL(value))
strlcpy(URL_Banners, value, sizeof(URL_Banners));
return true;
}
else if (strcmp(name, "URL_Covers2D") == 0)
{
if (ValidateURL(value))
strlcpy(URL_Covers2D, value, sizeof(URL_Covers2D));
return true;
}
else if (strcmp(name, "URL_Covers3D") == 0)
{
if (ValidateURL(value))
strlcpy(URL_Covers3D, value, sizeof(URL_Covers3D));
return true;
}
else if (strcmp(name, "URL_CoversFull") == 0)
{
if (ValidateURL(value))
strlcpy(URL_CoversFull, value, sizeof(URL_CoversFull));
return true;
}
else if (strcmp(name, "URL_CoversFullHQ") == 0)
{
if (ValidateURL(value))
strlcpy(URL_CoversFullHQ, value, sizeof(URL_CoversFullHQ));
return true;
}
else if (strcmp(name, "URL_Discs") == 0)
{
if (ValidateURL(value))
strlcpy(URL_Discs, value, sizeof(URL_Discs));
return true;
}
else if (strcmp(name, "URL_DiscsCustom") == 0)
{
if (ValidateURL(value))
strlcpy(URL_DiscsCustom, value, sizeof(URL_DiscsCustom));
return true;
}
else if (strcmp(name, "URL_GameTDB") == 0)
{
if (ValidateURL(value, true))
strlcpy(URL_GameTDB, value, sizeof(URL_GameTDB));
return true;
}
else if(strcmp(name, "PrivateServer") == 0) else if(strcmp(name, "PrivateServer") == 0)
{ {
PrivateServer = atoi(value); PrivateServer = atoi(value);

View File

@ -89,6 +89,14 @@ class CSettings
char GameCubeSDPath[100]; char GameCubeSDPath[100];
char DEVOLoaderPath[100]; char DEVOLoaderPath[100];
char NINLoaderPath[100]; char NINLoaderPath[100];
char URL_Banners[300];
char URL_Covers2D[300];
char URL_Covers3D[300];
char URL_CoversFull[300];
char URL_CoversFullHQ[300];
char URL_Discs[300];
char URL_DiscsCustom[300];
char URL_GameTDB[300];
short videomode; short videomode;
short language; short language;
short ocarina; short ocarina;
@ -226,6 +234,7 @@ class CSettings
bool FirstTimeRun; bool FirstTimeRun;
protected: protected:
bool ValidVersion(FILE * file); bool ValidVersion(FILE * file);
bool ValidateURL(char *value, bool zip = false);
bool SetSetting(char *name, char *value); bool SetSetting(char *name, char *value);
//!Find the config file in the default paths //!Find the config file in the default paths
bool FindConfig(); bool FindConfig();

View File

@ -67,7 +67,7 @@ int GetMissingGameFiles(const char * path, const char * fileext, std::vector<std
//! Bring game list to the old state //! Bring game list to the old state
gameList.FilterList(oldFilter.c_str()); gameList.FilterList(oldFilter.c_str());
gprintf(" = %i", MissingFilesList.size()); gprintf(" = %i\n", MissingFilesList.size());
return MissingFilesList.size(); return MissingFilesList.size();
} }