-removed plugin settings limit, you can now have as much as you want

-cleaned up and smalled down plugin code
This commit is contained in:
fix94.1 2012-10-04 14:35:08 +00:00
parent 4d4e987286
commit f365b1080c
7 changed files with 119 additions and 119 deletions

View File

@ -319,9 +319,10 @@ wstringEx Config::getWString(const string &domain, const string &key, const wstr
string Config::getString(const string &domain, const string &key, const string &defVal)
{
if (domain.empty() || key.empty()) return defVal;
if(domain.empty() || key.empty())
return defVal;
string &data = m_domains[upperCase(domain)][lowerCase(key)];
if (data.empty() || strncasecmp(data.c_str(), "usb:", 4) == 0)
if(data.empty())
{
data = defVal;
m_changed = true;

View File

@ -1520,7 +1520,7 @@ void CMenu::_initCF(void)
m_cf.clear();
m_cf.reserve(m_gameList.size());
vector<bool> EnabledPlugins;
const vector<bool> *EnabledPlugins;
if(m_current_view == COVERFLOW_PLUGIN)
EnabledPlugins = m_plugin.GetEnabledPlugins(m_cfg);
@ -1546,10 +1546,10 @@ void CMenu::_initCF(void)
// check for single plugin selected
u8 pos = 0;
u8 enabledPluginsCount = 0;
if(m_current_view == COVERFLOW_PLUGIN && EnabledPlugins.size() != 0)
if(m_current_view == COVERFLOW_PLUGIN && EnabledPlugins->size() != 0)
{
char PluginMagicWord[9];
for(u8 i = 0; i < EnabledPlugins.size(); i++)
for(u8 i = 0; i < EnabledPlugins->size(); i++)
{
snprintf(PluginMagicWord, sizeof(PluginMagicWord), "%08x", m_plugin.getPluginMagic(i));
if(m_cfg.getBool("PLUGIN", PluginMagicWord, true))
@ -1785,7 +1785,7 @@ void CMenu::_initCF(void)
if(tempname.find_last_of("/") != string::npos)
tempname.assign(&tempname[tempname.find_last_of("/") + 1]);
string coverFolder(m_plugin.GetCoverFolderName(m_gameList[i].settings[0]));
if(EnabledPlugins.size() == 0) //all plugins
if(EnabledPlugins->size() == 0) //all plugins
{
if(coverFolder.size() > 0)
m_cf.addItem(&m_gameList[i], fmt("%s/%s/%s.png", m_picDir.c_str(), coverFolder.c_str(), tempname.c_str()), fmt("%s/%s/%s.png", m_boxPicDir.c_str(), coverFolder.c_str(), tempname.c_str()), playcount, lastPlayed);
@ -1794,9 +1794,9 @@ void CMenu::_initCF(void)
}
else
{
for(u8 j = 0; j < EnabledPlugins.size(); j++)
for(u8 j = 0; j < EnabledPlugins->size(); j++)
{
if(EnabledPlugins[j] == true && m_gameList[i].settings[0] == m_plugin.getPluginMagic(j))
if(EnabledPlugins->at(j) == true && m_gameList[i].settings[0] == m_plugin.getPluginMagic(j))
{
if(coverFolder.size() > 0)
m_cf.addItem(&m_gameList[i], fmt("%s/%s/%s.png", m_picDir.c_str(), coverFolder.c_str(), tempname.c_str()), fmt("%s/%s/%s.png", m_boxPicDir.c_str(), coverFolder.c_str(), tempname.c_str()), playcount, lastPlayed);
@ -2302,7 +2302,7 @@ bool CMenu::_loadEmuList()
Config scummvm;
vector<dir_discHdr> scummvmList;
scummvm.load(fmt("%s/%s", m_pluginsDir.c_str(), "scummvm.ini"));
scummvmList = m_plugin.ParseScummvmINI(scummvm, string(DeviceName[currentPartition]));
scummvmList = m_plugin.ParseScummvmINI(scummvm, DeviceName[currentPartition]);
for(vector<dir_discHdr>::iterator tmp_itr = scummvmList.begin(); tmp_itr != scummvmList.end(); tmp_itr++)
emuList.push_back(*tmp_itr);
}

View File

@ -922,6 +922,7 @@ private:
void _showHome(void);
void _showExitTo(void);
void _updateSourceBtns(void);
void _updatePluginText(void);
void _updatePluginCheckboxes(void);
void _updateCheckboxes(void);
void _getIDCats(void);

View File

@ -149,15 +149,14 @@ void CMenu::_CategorySettings(bool fromGameSet)
catDomain = _domainFromView();
u8 pos = 0;
vector<bool> EnabledPlugins;
if(m_current_view == COVERFLOW_PLUGIN)
{
EnabledPlugins = m_plugin.GetEnabledPlugins(m_cfg);
if(EnabledPlugins.size() != 0)
const vector<bool> *EnabledPlugins = m_plugin.GetEnabledPlugins(m_cfg);
if(EnabledPlugins->size() != 0)
{
char PluginMagicWord[9];
u8 enabledPluginsCount = 0;
for(u8 i = 0; i < EnabledPlugins.size(); i++)
for(u8 i = 0; i < EnabledPlugins->size(); i++)
{
snprintf(PluginMagicWord, sizeof(PluginMagicWord), "%08x", m_plugin.getPluginMagic(i));
if(m_cfg.getBool("PLUGIN", PluginMagicWord, true))

View File

@ -3,7 +3,8 @@
#include <string.h>
#include <gccore.h>
u32 Plugin_curPage;
u8 Plugin_curPage;
u8 Plugin_Pages;
u8 Plugin_lastBtn;
// Plugin menu
@ -12,10 +13,10 @@ s16 m_pluginBtnPageM;
s16 m_pluginBtnPageP;
s16 m_pluginBtnBack;
s16 m_pluginLblTitle;
s16 m_pluginLblCat[21];
s16 m_pluginBtn[21];
s16 m_pluginBtnCat[21];
s16 m_pluginBtnCats[21];
s16 m_pluginLblCat[11];
s16 m_pluginBtn[11];
s16 m_pluginBtnCat[11];
s16 m_pluginBtnCats[11];
s16 m_pluginLblUser[4];
u8 m_max_plugins;
STexture m_pluginBg;
@ -32,8 +33,7 @@ void CMenu::_hidePluginSettings(bool instant)
if(m_pluginLblUser[i] != -1)
m_btnMgr.hide(m_pluginLblUser[i], instant);
}
for(int i = 0; i < 21; ++i)
for(u8 i = 0; i < 11; ++i)
{
m_btnMgr.hide(m_pluginLblCat[i]);
m_btnMgr.hide(m_pluginBtn[i]);
@ -53,30 +53,40 @@ void CMenu::_showPluginSettings(void)
_updatePluginCheckboxes();
}
void CMenu::_updatePluginText(void)
{
u32 IteratorHelp = (Plugin_curPage - 1) * 10;
for(u8 i = 1; i < min(IteratorHelp+10, (u32)m_max_plugins)-IteratorHelp+1; i++)
m_btnMgr.setText(m_pluginLblCat[i], m_plugin.GetPluginName(i+IteratorHelp-1));
}
void CMenu::_updatePluginCheckboxes(void)
{
if(m_max_plugins > 10)
{
m_btnMgr.setText(m_pluginLblPage, wfmt(L"%i / 2", Plugin_curPage));
m_btnMgr.setText(m_pluginLblPage, wfmt(L"%i / %i", Plugin_curPage, Plugin_Pages));
m_btnMgr.show(m_pluginLblPage);
m_btnMgr.show(m_pluginBtnPageM);
m_btnMgr.show(m_pluginBtnPageP);
}
for(int i = 0; i < 21; ++i)
for(int i = 0; i < 11; ++i)
{
m_btnMgr.hide(m_pluginBtn[i]);
m_btnMgr.hide(m_pluginLblCat[i]);
}
vector<bool> EnabledPlugins = m_plugin.GetEnabledPlugins(m_cfg);
if(Plugin_curPage == 1)
const vector<bool> *EnabledPlugins = m_plugin.GetEnabledPlugins(m_cfg);
/* ALL Button */
if(EnabledPlugins->size() == 0)
m_pluginBtn[0] = m_pluginBtnCats[0];
else
m_pluginBtn[0] = m_pluginBtnCat[0];
m_btnMgr.show(m_pluginBtn[0]);
m_btnMgr.show(m_pluginLblCat[0]);
/* Single Plugins */
u32 IteratorHelp = (Plugin_curPage - 1) * 10;
for(u8 i = 1; i < min(IteratorHelp+10, (u32)m_max_plugins)-IteratorHelp+1; ++i)
{
int j = 11;
if(m_max_plugins < 11)
j = m_max_plugins;
for(u8 i = 0; i < j; ++i)
{
if((EnabledPlugins.size() == 0) || (i != 0 && EnabledPlugins.size() >= i && EnabledPlugins[i - 1] == true))
if(EnabledPlugins->size() == 0 || EnabledPlugins->at(i+IteratorHelp-1) == true)
m_pluginBtn[i] = m_pluginBtnCats[i];
else
m_pluginBtn[i] = m_pluginBtnCat[i];
@ -84,23 +94,15 @@ void CMenu::_updatePluginCheckboxes(void)
m_btnMgr.show(m_pluginLblCat[i]);
}
}
else
{
for(int i = 11; i < m_max_plugins; ++i)
{
m_pluginBtn[i] = m_pluginBtnCat[i];
m_btnMgr.show(m_pluginBtn[i]);
m_btnMgr.show(m_pluginLblCat[i]);
}
}
}
void CMenu::_PluginSettings()
{
SetupInput();
Plugin_Pages = 1;
Plugin_curPage = 1;
_textPluginSettings();
_showPluginSettings();
_updatePluginText();
while(!m_exit)
{
_mainLoopCommon();
@ -119,19 +121,23 @@ void CMenu::_PluginSettings()
{
Plugin_lastBtn = m_pluginBtnPageM;
m_btnMgr.noHover(true);
Plugin_curPage = Plugin_curPage == 1 ? 2 : 1;
Plugin_curPage--;
if(Plugin_curPage == 0) Plugin_curPage = Plugin_Pages;
if(BTN_LEFT_PRESSED || BTN_MINUS_PRESSED)
m_btnMgr.click(m_pluginBtnPageM);
_updatePluginCheckboxes();
_updatePluginText();
}
else if(((BTN_PLUS_PRESSED || BTN_RIGHT_PRESSED)) || (BTN_A_PRESSED && m_btnMgr.selected(m_pluginBtnPageP)))
{
Plugin_lastBtn = m_pluginBtnPageP;
m_btnMgr.noHover(true);
Plugin_curPage = Plugin_curPage == 1 ? 2 : 1;
Plugin_curPage++;
if(Plugin_curPage > Plugin_Pages) Plugin_curPage = 1;
if(BTN_RIGHT_PRESSED || BTN_PLUS_PRESSED)
m_btnMgr.click(m_pluginBtnPageP);
_updatePluginCheckboxes();
_updatePluginText();
}
if(BTN_A_PRESSED)
{
@ -140,7 +146,8 @@ void CMenu::_PluginSettings()
m_cfg.save();
break;
}
for(int i = 0; i < 21; ++i)
u32 IteratorHelp = (Plugin_curPage - 1) * 10;
for(u8 i = 1; i < min(IteratorHelp+10, (u32)m_max_plugins)-IteratorHelp+1; ++i)
{
if(m_btnMgr.selected(m_pluginBtn[i]))
{
@ -149,18 +156,18 @@ void CMenu::_PluginSettings()
if(i == 0)
{
int j = 0;
bool EnableAll = (m_plugin.GetEnabledPlugins(m_cfg).size());
bool EnableAll = (m_plugin.GetEnabledPlugins(m_cfg)->size());
while(true)
{
if(m_plugin.PluginExist(j))
m_plugin.SetEnablePlugin(m_cfg, j, EnableAll ? 2 : 1);
if(m_plugin.PluginExist(j+IteratorHelp-1))
m_plugin.SetEnablePlugin(m_cfg, j+IteratorHelp-1, EnableAll ? 2 : 1);
else
break;
j++;
}
}
else
m_plugin.SetEnablePlugin(m_cfg, i - 1);
m_plugin.SetEnablePlugin(m_cfg, i+IteratorHelp-1);
_updatePluginCheckboxes();
break;
}
@ -191,27 +198,21 @@ void CMenu::_initPluginSettingsMenu(CMenu::SThemeData &theme)
m_pluginBtnCat[i+5] = _addPicButton(theme, fmt("PLUGIN/PLUGIN_%i_BTN", i+5), theme.checkboxoff, theme.checkboxoffs, 325, (42+i*58), 44, 48);
m_pluginBtnCats[i+5] = _addPicButton(theme, fmt("PLUGIN/PLUGIN_%i_BTNS", i+5), theme.checkboxon, theme.checkboxons, 325, (42+i*58), 44, 48);
m_pluginLblCat[i+5] = _addLabel(theme, fmt("PLUGIN/PLUGIN_%i", i+5), theme.txtFont, L"", 380, (42+i*58), 230, 48, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
// Page 2
m_pluginBtnCat[i+10] = _addPicButton(theme, fmt("PLUGIN/PLUGIN_%i_BTN", i+10), theme.checkboxoff, theme.checkboxoffs, 30, (42+i*58), 44, 48);
m_pluginBtnCats[i+10] = _addPicButton(theme, fmt("PLUGIN/PLUGIN_%i_BTNS", i+10), theme.checkboxon, theme.checkboxons, 30, (42+i*58), 44, 48);
m_pluginLblCat[i+10] = _addLabel(theme, fmt("PLUGIN/PLUGIN_%i", i+10), theme.lblFont, L"", 85, (42+i*58), 230, 48, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
// right half
m_pluginBtnCat[i+15] = _addPicButton(theme, fmt("PLUGIN/PLUGIN_%i_BTN", i+15), theme.checkboxoff, theme.checkboxoffs, 325, (42+i*58), 44, 48);
m_pluginBtnCats[i+15] = _addPicButton(theme, fmt("PLUGIN/PLUGIN_%i_BTNS", i+15), theme.checkboxon, theme.checkboxons, 325, (42+i*58), 44, 48);
m_pluginLblCat[i+15] = _addLabel(theme, fmt("PLUGIN/PLUGIN_%i", i+15), theme.txtFont, L"", 380, (42+i*58), 230, 48, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
}
_setHideAnim(m_pluginLblTitle, "PLUGIN/TITLE", 0, 0, -2.f, 0.f);
_setHideAnim(m_pluginLblPage, "PLUGIN/PAGE_BTN", 0, 0, 1.f, -1.f);
_setHideAnim(m_pluginBtnPageM, "PLUGIN/PAGE_MINUS", 0, 0, 1.f, -1.f);
_setHideAnim(m_pluginBtnPageP, "PLUGIN/PAGE_PLUS", 0, 0, 1.f, -1.f);
_setHideAnim(m_pluginBtnBack, "PLUGIN/BACK_BTN", 0, 0, 1.f, -1.f);
for(u8 i = 0; i < 21; ++i)
for(u8 i = 0; i < 11; ++i)
{
_setHideAnim(m_pluginBtnCat[i], fmt("PLUGIN/PLUGIN_%i_BTN", i), 0, 0, 1.f, 0.f);
_setHideAnim(m_pluginBtnCats[i], fmt("PLUGIN/PLUGIN_%i_BTNS", i), 0, 0, 1.f, 0.f);
_setHideAnim(m_pluginLblCat[i], fmt("PLUGIN/PLUGIN_%i", i), 0, 0, 1.f, 0.f);
m_pluginBtn[i] = m_pluginBtnCat[i];
}
Plugin_curPage = 1;
Plugin_Pages = 1;
m_max_plugins = 0;
_hidePluginSettings(true);
_textPluginSettings();
@ -228,10 +229,9 @@ void CMenu::_textPluginSettings(void)
m_btnMgr.setText(m_pluginLblCat[i], _t("dl25", L"All"));
else
{
if(m_plugin.PluginExist(i - 1))
m_btnMgr.setText(m_pluginLblCat[i], m_plugin.GetPluginName(i - 1));
else
if(!m_plugin.PluginExist(i - 1))
{
Plugin_Pages = (i-1)/10;
m_max_plugins = i;
break;
}

View File

@ -28,11 +28,7 @@
#include "types.h"
#include "crc32.h"
static const string emptyString;
static const string emptyString2("/");
static char* emptyChar = (char*)" ";
void Plugin::init(string m_pluginsDir)
void Plugin::init(const string& m_pluginsDir)
{
pluginsDir = m_pluginsDir;
//Ready to add plugins
@ -56,21 +52,21 @@ bool Plugin::AddPlugin(Config &plugin)
return false;
PluginOptions NewPlugin;
NewPlugin.DolName = plugin.getString(PLUGIN_DOMAIN, "dolFile",emptyChar);
NewPlugin.coverFolder = plugin.getString(PLUGIN_DOMAIN, "coverFolder",emptyChar);
NewPlugin.magicWord = strtoul(plugin.getString(PLUGIN_DOMAIN, "magic",emptyChar).c_str(), NULL, 16);
NewPlugin.caseColor = strtoul(plugin.getString(PLUGIN_DOMAIN, "coverColor",emptyChar).c_str(), NULL, 16);
NewPlugin.DolName = plugin.getString(PLUGIN_DOMAIN, "dolFile");
NewPlugin.coverFolder = plugin.getString(PLUGIN_DOMAIN, "coverFolder");
NewPlugin.magicWord = strtoul(plugin.getString(PLUGIN_DOMAIN, "magic").c_str(), NULL, 16);
NewPlugin.caseColor = strtoul(plugin.getString(PLUGIN_DOMAIN, "coverColor").c_str(), NULL, 16);
NewPlugin.Args = plugin.getStrings(PLUGIN_DOMAIN, "arguments", '|');
string PluginName = plugin.getString(PLUGIN_DOMAIN, "displayname",emptyChar);
if(PluginName == emptyString || PluginName == emptyString2)
string PluginName = plugin.getString(PLUGIN_DOMAIN, "displayname");
if(PluginName.size() < 2)
{
PluginName = NewPlugin.DolName;
PluginName.erase(PluginName.end() - 4, PluginName.end());
}
NewPlugin.DisplayName.fromUTF8(PluginName.c_str());
NewPlugin.consoleCoverID = plugin.getString(PLUGIN_DOMAIN,"consoleCoverID",emptyChar);
NewPlugin.consoleCoverID = plugin.getString(PLUGIN_DOMAIN,"consoleCoverID");
const char *bannerfilepath = fmt("%s/%s", pluginsDir.c_str(), plugin.getString(PLUGIN_DOMAIN,"bannerSound",emptyChar).c_str());
const char *bannerfilepath = fmt("%s/%s", pluginsDir.c_str(), plugin.getString(PLUGIN_DOMAIN,"bannerSound").c_str());
FILE *fp = fopen(bannerfilepath, "rb");
if(fp != NULL)
{
@ -128,14 +124,14 @@ char* Plugin::GetDolName(u32 magic)
{
if((Plugin_Pos = GetPluginPosition(magic)) >= 0)
return (char*)Plugins[Plugin_Pos].DolName.c_str();
return emptyChar;
return NULL;
}
char* Plugin::GetCoverFolderName(u32 magic)
{
if((Plugin_Pos = GetPluginPosition(magic)) >= 0)
return (char*)Plugins[Plugin_Pos].coverFolder.c_str();
return emptyChar;
return NULL;
}
bool Plugin::PluginExist(u8 pos)
@ -155,7 +151,8 @@ void Plugin::SetEnablePlugin(Config &cfg, u8 pos, u8 ForceMode)
if(pos < Plugins.size())
{
char PluginMagicWord[9];
snprintf(PluginMagicWord, sizeof(PluginMagicWord), "%08x", Plugins[pos].magicWord);
memset(PluginMagicWord, 0, sizeof(PluginMagicWord));
strncpy(PluginMagicWord, fmt("%08x", Plugins[pos].magicWord), 8);
if(ForceMode == 1)
cfg.setBool(PLUGIN_DOMAIN, PluginMagicWord, false);
else if(ForceMode == 2)
@ -165,14 +162,15 @@ void Plugin::SetEnablePlugin(Config &cfg, u8 pos, u8 ForceMode)
}
}
vector<bool> Plugin::GetEnabledPlugins(Config &cfg)
const vector<bool> *Plugin::GetEnabledPlugins(Config &cfg)
{
vector<bool> enabledPlugins;
enabledPlugins.clear();
char PluginMagicWord[9];
u8 enabledPluginsNumber = 0;
for(u8 i = 0; i < Plugins.size(); i++)
{
snprintf(PluginMagicWord, sizeof(PluginMagicWord), "%08x", Plugins[i].magicWord);
memset(PluginMagicWord, 0, sizeof(PluginMagicWord));
strncpy(PluginMagicWord, fmt("%08x", Plugins[i].magicWord), 8);
if(cfg.getBool(PLUGIN_DOMAIN, PluginMagicWord, true))
{
enabledPluginsNumber++;
@ -183,7 +181,7 @@ vector<bool> Plugin::GetEnabledPlugins(Config &cfg)
}
if(enabledPluginsNumber == Plugins.size())
enabledPlugins.clear();
return enabledPlugins;
return &enabledPlugins;
}
u32 Plugin::getPluginMagic(u8 pos)
@ -191,51 +189,48 @@ u32 Plugin::getPluginMagic(u8 pos)
return Plugins[pos].magicWord;
}
vector<dir_discHdr> Plugin::ParseScummvmINI(Config &ini, string Device)
vector<dir_discHdr> Plugin::ParseScummvmINI(Config &ini, const char *Device)
{
gprintf("Parsing scummvm.ini\n");
vector<dir_discHdr> gameHeader;
if(!ini.loaded())
return gameHeader;
string game(ini.firstDomain());
string GameName;
dir_discHdr tmp;
const string *GameDomain = &ini.firstDomain();
dir_discHdr ListElement;
while(1)
{
if(game == emptyString || game == emptyString2)
if(GameDomain->size() < 2)
break;
GameName = ini.getString(game, "description");
if(GameName == emptyString || GameName == emptyString2 ||
strncasecmp(ini.getWString(game, "path").toUTF8().c_str(), Device.c_str(), 2) != 0)
const string &GameName = ini.getString(*GameDomain, "description");
if(GameName.size() < 2 || ini.getString(*GameDomain, "path").find(Device) == string::npos)
{
game = ini.nextDomain();
GameDomain = &ini.nextDomain();
continue;
}
memset(&tmp, 0, sizeof(dir_discHdr));
strncpy((char*)tmp.id, PLUGIN_DOMAIN, sizeof(tmp.id));
tmp.casecolor = Plugins.back().caseColor;
wstringEx tmpString;
tmpString.fromUTF8(GameName.c_str());
wcsncpy(tmp.title, tmpString.c_str(), 64);
strncpy(tmp.path, game.c_str(), sizeof(tmp.path));
gprintf("Found: %ls\n", tmp.title);
tmp.settings[0] = Plugins.back().magicWord;
tmp.type = TYPE_PLUGIN;
gameHeader.push_back(tmp);
game = ini.nextDomain();
memset((void*)&ListElement, 0, sizeof(dir_discHdr));
strncpy((char*)ListElement.id, PLUGIN_DOMAIN, 6);
ListElement.casecolor = Plugins.back().caseColor;
mbstowcs(ListElement.title, GameName.c_str(), 63);
strncpy(ListElement.path, GameDomain->c_str(), sizeof(ListElement.path));
gprintf("Found: %s\n", GameDomain->c_str());
ListElement.settings[0] = Plugins.back().magicWord;
ListElement.type = TYPE_PLUGIN;
gameHeader.push_back(ListElement);
GameDomain = &ini.nextDomain();
}
return gameHeader;
}
vector<string> Plugin::CreateArgs(string device, string path, string title, string loader, u32 magic)
vector<string> Plugin::CreateArgs(const string& device, const string& path,
const string& title, const string& loader, u32 magic)
{
vector<string> args;
Plugin_Pos = GetPluginPosition(magic);
if(Plugin_Pos < 0)
return args;
for(vector<string>::iterator arg = Plugins[Plugin_Pos].Args.begin();
arg != Plugins[Plugin_Pos].Args.end(); arg++)
for(vector<string>::const_iterator arg = Plugins[Plugin_Pos].Args.begin();
arg != Plugins[Plugin_Pos].Args.end(); ++arg)
{
string Argument(*arg);
if(Argument.find(PLUGIN_DEV) != string::npos)
@ -251,8 +246,9 @@ vector<string> Plugin::CreateArgs(string device, string path, string title, stri
return args;
}
string Plugin::GenerateCoverLink(dir_discHdr gameHeader, string url, Config &Checksums)
string Plugin::GenerateCoverLink(dir_discHdr gameHeader, const string& constURL, Config &Checksums)
{
string url(constURL);
Plugin_Pos = GetPluginPosition(gameHeader.settings[0]);
if(url.find(TAG_LOC) != url.npos)
@ -266,12 +262,13 @@ string Plugin::GenerateCoverLink(dir_discHdr gameHeader, string url, Config &Che
strncpy(gamePath, &gameHeader.path[string(gameHeader.path).find_last_of("/")+1], sizeof(gamePath));
else
strncpy(gamePath, gameHeader.path, sizeof(gamePath));
string cachedCRC = Checksums.getString("CHECKSUMS", gamePath, emptyString);
const string& cachedCRC = Checksums.getString("CHECKSUMS", gamePath);
char crc_string[9];
if(cachedCRC != emptyString)
memset(crc_string, 0, sizeof(crc_string));
if(cachedCRC.size() > 1)
{
gprintf("CRC32 of %s is cached\n", gamePath);
snprintf(crc_string, sizeof(crc_string), "%s", cachedCRC.c_str());
strncpy(crc_string, cachedCRC.c_str(), 8);
}
else
{
@ -284,7 +281,7 @@ string Plugin::GenerateCoverLink(dir_discHdr gameHeader, string url, Config &Che
infile.seekg(0x0e, ios::beg);
infile.read((char*)&buffer, 8);
infile.close();
snprintf(crc_string, sizeof(crc_string), "%08x", (u32)__builtin_bswap32(buffer));
strncpy(crc_string, fmt("%08x", (u32)__builtin_bswap32(buffer)), 8);
}
else if(strstr(gameHeader.path, ".7z") != NULL)
{
@ -300,10 +297,10 @@ string Plugin::GenerateCoverLink(dir_discHdr gameHeader, string url, Config &Che
infile.seekg(-13, ios::cur);
infile.read((char*)&buffer, 8);
infile.close();
snprintf(crc_string, sizeof(crc_string), "%08x", (u32)__builtin_bswap32(buffer));
strncpy(crc_string, fmt("%08x", (u32)__builtin_bswap32(buffer)), 8);
}
else
snprintf(crc_string, sizeof(crc_string), "%08x", crc32file(gameHeader.path));
strncpy(crc_string, fmt("%08x", crc32file(gameHeader.path)), 8);
Checksums.setString("CHECKSUMS", gamePath, crc_string);
Checksums.save();
}

View File

@ -58,20 +58,22 @@ public:
u32 GetBannerSoundSize();
char* GetDolName(u32 magic);
char* GetCoverFolderName(u32 magic);
string GenerateCoverLink(dir_discHdr gameHeader, string url, Config &Checksums);
string GenerateCoverLink(dir_discHdr gameHeader, const string& constURL, Config &Checksums);
wstringEx GetPluginName(u8 pos);
u32 getPluginMagic(u8 pos);
bool PluginExist(u8 pos);
void SetEnablePlugin(Config &cfg, u8 pos, u8 ForceMode = 0);
vector<bool> GetEnabledPlugins(Config &cfg);
vector<string> CreateArgs(string device, string path, string title, string loader, u32 magic);
void init(string);
const vector<bool> *GetEnabledPlugins(Config &cfg);
vector<string> CreateArgs(const string& device, const string& path,
const string& title, const string& loader, u32 magic);
void init(const string& m_pluginsDir);
void Cleanup();
void EndAdd();
vector<dir_discHdr> ParseScummvmINI(Config &ini, string Device);
vector<dir_discHdr> ParseScummvmINI(Config &ini, const char *Device);
private:
s8 GetPluginPosition(u32 magic);
vector<PluginOptions> Plugins;
vector<bool> enabledPlugins;
s8 Plugin_Pos;
string pluginsDir;
bool adding;