mirror of
https://github.com/Fledge68/WiiFlow_Lite.git
synced 2024-11-24 04:09:15 +01:00
-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:
parent
4d4e987286
commit
f365b1080c
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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))
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user